@meimu/mutracer 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +7 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +10421 -8363
  6. package/docs/api.md +202 -11
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +18 -27
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +19 -10
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +41 -3
  14. package/lib/Display.d.ts +13 -2
  15. package/lib/Display.js +27 -6
  16. package/lib/Display.js.map +1 -1
  17. package/lib/Engine.d.ts +2 -0
  18. package/lib/Engine.js +52 -25
  19. package/lib/Engine.js.map +1 -1
  20. package/lib/Render.d.ts +44 -9
  21. package/lib/Render.js +115 -17
  22. package/lib/Render.js.map +1 -1
  23. package/lib/RenderLoop.d.ts +7 -1
  24. package/lib/RenderLoop.js +94 -13
  25. package/lib/RenderLoop.js.map +1 -1
  26. package/lib/main.d.ts +6 -3
  27. package/lib/main.js +1 -0
  28. package/lib/main.js.map +1 -1
  29. package/lib/math/access.d.ts +4 -0
  30. package/lib/math/access.js +10 -0
  31. package/lib/math/access.js.map +1 -0
  32. package/lib/math/mat3.d.ts +4 -0
  33. package/lib/math/mat3.js +54 -0
  34. package/lib/math/mat3.js.map +1 -0
  35. package/lib/math/mat4.d.ts +19 -0
  36. package/lib/math/mat4.js +413 -0
  37. package/lib/math/mat4.js.map +1 -0
  38. package/lib/math/storage.d.ts +6 -0
  39. package/lib/math/storage.js +22 -0
  40. package/lib/math/storage.js.map +1 -0
  41. package/lib/math/types.d.ts +3 -0
  42. package/lib/math/types.js +2 -0
  43. package/lib/math/types.js.map +1 -0
  44. package/lib/math/vec2.d.ts +13 -0
  45. package/lib/math/vec2.js +52 -0
  46. package/lib/math/vec2.js.map +1 -0
  47. package/lib/math/vec3.d.ts +23 -0
  48. package/lib/math/vec3.js +139 -0
  49. package/lib/math/vec3.js.map +1 -0
  50. package/lib/math.d.ts +5 -17
  51. package/lib/math.js +5 -55
  52. package/lib/math.js.map +1 -1
  53. package/lib/oidn.d.ts +1 -1
  54. package/lib/oidn.js +4 -2
  55. package/lib/oidn.js.map +1 -1
  56. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  57. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  58. package/lib/renderer/AovPrimitiveCache.js +48 -0
  59. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  60. package/lib/renderer/Box3.d.ts +5 -0
  61. package/lib/renderer/Box3.js +9 -0
  62. package/lib/renderer/Box3.js.map +1 -0
  63. package/lib/renderer/GPUTraceQueue.d.ts +10 -0
  64. package/lib/renderer/GPUTraceQueue.js +31 -0
  65. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  66. package/lib/renderer/MaterialData.d.ts +15 -0
  67. package/lib/renderer/MaterialData.js +61 -0
  68. package/lib/renderer/MaterialData.js.map +1 -0
  69. package/lib/renderer/MaterialTable.d.ts +11 -98
  70. package/lib/renderer/MaterialTable.js +34 -412
  71. package/lib/renderer/MaterialTable.js.map +1 -1
  72. package/lib/renderer/RenderingPipeline.d.ts +32 -13
  73. package/lib/renderer/RenderingPipeline.js +1 -17
  74. package/lib/renderer/RenderingPipeline.js.map +1 -1
  75. package/lib/renderer/TileRender.d.ts +0 -1
  76. package/lib/renderer/TileRender.js +14 -1
  77. package/lib/renderer/TileRender.js.map +1 -1
  78. package/lib/renderer/WGPUAov.d.ts +39 -0
  79. package/lib/renderer/WGPUAov.js +239 -0
  80. package/lib/renderer/WGPUAov.js.map +1 -0
  81. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  82. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  83. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  85. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  86. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  87. package/lib/renderer/WGPUBloomPass.js +17 -97
  88. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  89. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  90. package/lib/renderer/WGPUComputePass.js.map +1 -1
  91. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  92. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  93. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  94. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  95. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  96. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  97. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  98. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  99. package/lib/renderer/WGPURayTraceOutput.js +26 -17
  100. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  101. package/lib/renderer/WGPURayTracePass.d.ts +36 -40
  102. package/lib/renderer/WGPURayTracePass.js +399 -548
  103. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  104. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  105. package/lib/renderer/WGPURenderingPipeline.js +239 -60
  106. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  107. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  108. package/lib/renderer/WGPUShaderCache.js +10 -5
  109. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  110. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  111. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  112. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  113. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  114. package/lib/renderer/WGPUSkyBaker.js +85 -0
  115. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  116. package/lib/renderer/WebGLAov.d.ts +41 -0
  117. package/lib/renderer/WebGLAov.js +106 -0
  118. package/lib/renderer/WebGLAov.js.map +1 -0
  119. package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
  120. package/lib/renderer/WebGLFullQuadPass.js +18 -2
  121. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  122. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  123. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  124. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  125. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  126. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  127. package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
  128. package/lib/renderer/WebGLRayTracePass.js +83 -7
  129. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  130. package/lib/renderer/WebGLRenderingPipeline.js +116 -8
  131. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  132. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  133. package/lib/renderer/WebGLSkyBaker.js +422 -0
  134. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  135. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  136. package/lib/renderer/WebGLSkySource.js +28 -0
  137. package/lib/renderer/WebGLSkySource.js.map +1 -0
  138. package/lib/renderer/accumulationTarget.d.ts +5 -0
  139. package/lib/renderer/accumulationTarget.js.map +1 -1
  140. package/lib/renderer/aov.d.ts +42 -0
  141. package/lib/renderer/aov.js +50 -0
  142. package/lib/renderer/aov.js.map +1 -0
  143. package/lib/renderer/aovDisplay.d.ts +14 -0
  144. package/lib/renderer/aovDisplay.js +32 -0
  145. package/lib/renderer/aovDisplay.js.map +1 -0
  146. package/lib/renderer/aovScene.d.ts +21 -0
  147. package/lib/renderer/aovScene.js +139 -0
  148. package/lib/renderer/aovScene.js.map +1 -0
  149. package/lib/renderer/binnedSahBvh.js +2 -1
  150. package/lib/renderer/binnedSahBvh.js.map +1 -1
  151. package/lib/renderer/bvhAccel.d.ts +20 -10
  152. package/lib/renderer/bvhAccel.js +168 -58
  153. package/lib/renderer/bvhAccel.js.map +1 -1
  154. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  155. package/lib/renderer/cameraSnapshot.js +2 -1
  156. package/lib/renderer/cameraSnapshot.js.map +1 -1
  157. package/lib/renderer/cameraUniform.d.ts +2 -0
  158. package/lib/renderer/cameraUniform.js +12 -0
  159. package/lib/renderer/cameraUniform.js.map +1 -0
  160. package/lib/renderer/committedScene.js +4 -0
  161. package/lib/renderer/committedScene.js.map +1 -1
  162. package/lib/renderer/denoiser.d.ts +3 -11
  163. package/lib/renderer/denoiser.js.map +1 -1
  164. package/lib/renderer/depthQuery.js +4 -1
  165. package/lib/renderer/depthQuery.js.map +1 -1
  166. package/lib/renderer/displacementPreparation.d.ts +11 -0
  167. package/lib/renderer/displacementPreparation.js +351 -0
  168. package/lib/renderer/displacementPreparation.js.map +1 -0
  169. package/lib/renderer/displacementRange.d.ts +1 -0
  170. package/lib/renderer/displacementRange.js +9 -0
  171. package/lib/renderer/displacementRange.js.map +1 -0
  172. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  173. package/lib/renderer/displayParityDiagnostics.js +2 -0
  174. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  175. package/lib/renderer/envMapCreation.d.ts +9 -8
  176. package/lib/renderer/envMapCreation.js +36 -12
  177. package/lib/renderer/envMapCreation.js.map +1 -1
  178. package/lib/renderer/envMapDistribution.d.ts +12 -2
  179. package/lib/renderer/envMapDistribution.js +43 -34
  180. package/lib/renderer/envMapDistribution.js.map +1 -1
  181. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  182. package/lib/renderer/geometryBvhBounds.js +82 -0
  183. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  184. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  185. package/lib/renderer/geometryUpdateState.js +2 -0
  186. package/lib/renderer/geometryUpdateState.js.map +1 -0
  187. package/lib/renderer/geometryUpdates.d.ts +17 -9
  188. package/lib/renderer/geometryUpdates.js +92 -33
  189. package/lib/renderer/geometryUpdates.js.map +1 -1
  190. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  191. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  192. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  193. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  194. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  195. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  196. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  198. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  200. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  201. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  205. package/lib/renderer/glsl/chunks/intersect.glsl.js +437 -435
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  209. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
  210. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  211. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  212. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  213. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +51 -51
  214. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  215. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  216. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +108 -108
  217. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  218. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  219. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  220. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  221. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  222. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  223. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  224. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  225. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  226. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  227. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  228. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  229. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  230. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  231. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  232. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  233. package/lib/renderer/lightConstants.d.ts +10 -0
  234. package/lib/renderer/lightConstants.js +11 -0
  235. package/lib/renderer/lightConstants.js.map +1 -0
  236. package/lib/renderer/lightCore.d.ts +12 -0
  237. package/lib/renderer/lightCore.js +13 -0
  238. package/lib/renderer/lightCore.js.map +1 -0
  239. package/lib/renderer/lightSampling.d.ts +20 -17
  240. package/lib/renderer/lightSampling.js +123 -56
  241. package/lib/renderer/lightSampling.js.map +1 -1
  242. package/lib/renderer/lightsData.d.ts +21 -0
  243. package/lib/renderer/lightsData.js +192 -0
  244. package/lib/renderer/lightsData.js.map +1 -0
  245. package/lib/renderer/lightsUtil.d.ts +3 -26
  246. package/lib/renderer/lightsUtil.js +3 -153
  247. package/lib/renderer/lightsUtil.js.map +1 -1
  248. package/lib/renderer/materialBufferData.d.ts +70 -0
  249. package/lib/renderer/materialBufferData.js +2 -0
  250. package/lib/renderer/materialBufferData.js.map +1 -0
  251. package/lib/renderer/materialConstants.d.ts +11 -0
  252. package/lib/renderer/materialConstants.js +11 -0
  253. package/lib/renderer/materialConstants.js.map +1 -1
  254. package/lib/renderer/materialCore.d.ts +8 -0
  255. package/lib/renderer/materialCore.js +9 -0
  256. package/lib/renderer/materialCore.js.map +1 -0
  257. package/lib/renderer/materialEmission.d.ts +2 -2
  258. package/lib/renderer/materialEmission.js +3 -3
  259. package/lib/renderer/materialEmission.js.map +1 -1
  260. package/lib/renderer/materialLayout.d.ts +2 -101
  261. package/lib/renderer/materialLayout.js +110 -172
  262. package/lib/renderer/materialLayout.js.map +1 -1
  263. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  264. package/lib/renderer/materialLayoutSchema.js +172 -0
  265. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  266. package/lib/renderer/materialParams.d.ts +69 -0
  267. package/lib/renderer/materialParams.js +272 -0
  268. package/lib/renderer/materialParams.js.map +1 -0
  269. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  270. package/lib/renderer/materialTextureSlots.js +21 -8
  271. package/lib/renderer/materialTextureSlots.js.map +1 -1
  272. package/lib/renderer/materialTextures.d.ts +6 -0
  273. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  274. package/lib/renderer/materialTextures.js.map +1 -0
  275. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  276. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  277. package/lib/renderer/meshInstances.d.ts +4 -21
  278. package/lib/renderer/meshInstances.js +10 -56
  279. package/lib/renderer/meshInstances.js.map +1 -1
  280. package/lib/renderer/oidnNetwork.d.ts +2 -2
  281. package/lib/renderer/oidnNetwork.js +1 -1
  282. package/lib/renderer/oidnNetwork.js.map +1 -1
  283. package/lib/renderer/openPbrEnergyLut.js +850 -846
  284. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  285. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  286. package/lib/renderer/ownedDenoiser.js +2 -0
  287. package/lib/renderer/ownedDenoiser.js.map +1 -0
  288. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  289. package/lib/renderer/packedMeshInstances.js +80 -0
  290. package/lib/renderer/packedMeshInstances.js.map +1 -0
  291. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  292. package/lib/renderer/prepareMeshBVH.js +21 -642
  293. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  294. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  295. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  296. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  297. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  298. package/lib/renderer/progressiveScheduler.js +3 -0
  299. package/lib/renderer/progressiveScheduler.js.map +1 -1
  300. package/lib/renderer/renderPipeline.d.ts +3 -1
  301. package/lib/renderer/renderPipeline.js.map +1 -1
  302. package/lib/renderer/renderingLimits.d.ts +9 -0
  303. package/lib/renderer/renderingLimits.js +18 -0
  304. package/lib/renderer/renderingLimits.js.map +1 -0
  305. package/lib/renderer/sceneAssembly.d.ts +73 -0
  306. package/lib/renderer/sceneAssembly.js +109 -0
  307. package/lib/renderer/sceneAssembly.js.map +1 -0
  308. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  309. package/lib/renderer/sceneChangeCore.js +307 -0
  310. package/lib/renderer/sceneChangeCore.js.map +1 -0
  311. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  312. package/lib/renderer/sceneChangeDetector.js +24 -150
  313. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  314. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  315. package/lib/renderer/sceneLayoutSchema.js +111 -0
  316. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  317. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  318. package/lib/renderer/sceneLightChanges.js.map +1 -1
  319. package/lib/renderer/scenePreparation.d.ts +55 -0
  320. package/lib/renderer/scenePreparation.js +360 -0
  321. package/lib/renderer/scenePreparation.js.map +1 -0
  322. package/lib/renderer/scratchSampling.js +18 -18
  323. package/lib/renderer/scratchSampling.js.map +1 -1
  324. package/lib/renderer/shader.d.ts +2 -0
  325. package/lib/renderer/shader.js +2 -0
  326. package/lib/renderer/shader.js.map +1 -1
  327. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  328. package/lib/renderer/shaderCapabilities.js +55 -0
  329. package/lib/renderer/shaderCapabilities.js.map +1 -0
  330. package/lib/renderer/shaderCapacity.d.ts +2 -0
  331. package/lib/renderer/shaderCapacity.js +5 -0
  332. package/lib/renderer/shaderCapacity.js.map +1 -0
  333. package/lib/renderer/skyModel.d.ts +9 -0
  334. package/lib/renderer/skyModel.js +10 -0
  335. package/lib/renderer/skyModel.js.map +1 -0
  336. package/lib/renderer/textureAtlas.d.ts +60 -0
  337. package/lib/renderer/textureAtlas.js +145 -0
  338. package/lib/renderer/textureAtlas.js.map +1 -0
  339. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  340. package/lib/renderer/textureAtlasPixels.js +68 -0
  341. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  342. package/lib/renderer/util.d.ts +1 -1
  343. package/lib/renderer/util.js.map +1 -1
  344. package/lib/renderer/webgl.d.ts +9 -2
  345. package/lib/renderer/webgl.js +54 -9
  346. package/lib/renderer/webgl.js.map +1 -1
  347. package/lib/renderer/wgpuBindless.d.ts +26 -0
  348. package/lib/renderer/wgpuBindless.js +95 -0
  349. package/lib/renderer/wgpuBindless.js.map +1 -0
  350. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  351. package/lib/renderer/wgpuBindlessSource.js +51 -0
  352. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  353. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  354. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  355. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  356. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  357. package/lib/renderer/wgpuSceneUniform.js +125 -0
  358. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  359. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  360. package/lib/renderer/wgpuShaderSource.js +31 -0
  361. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  362. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  363. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  364. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  367. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  369. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  370. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  372. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  373. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  375. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  376. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  378. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  379. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  381. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  382. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  383. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  384. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  385. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  386. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  388. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +743 -706
  389. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  390. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  391. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  393. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +86 -83
  394. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  395. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  396. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  397. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  398. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  399. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  400. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  401. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  403. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  404. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  406. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  408. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  409. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  410. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  411. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  412. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  413. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  415. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  416. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  418. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  419. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  420. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  421. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  422. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  423. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  424. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  425. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  426. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  427. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  428. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  430. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  431. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  432. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  433. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  434. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  435. package/lib/scene/Camera.js +7 -3
  436. package/lib/scene/Camera.js.map +1 -1
  437. package/lib/scene/EnvironmentLight.d.ts +5 -9
  438. package/lib/scene/EnvironmentLight.js +4 -14
  439. package/lib/scene/EnvironmentLight.js.map +1 -1
  440. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  441. package/lib/scene/EnvironmentLightState.js +19 -0
  442. package/lib/scene/EnvironmentLightState.js.map +1 -0
  443. package/lib/scene/Geometry.d.ts +12 -6
  444. package/lib/scene/Geometry.js +37 -13
  445. package/lib/scene/Geometry.js.map +1 -1
  446. package/lib/scene/InstanceState.d.ts +39 -0
  447. package/lib/scene/InstanceState.js +77 -0
  448. package/lib/scene/InstanceState.js.map +1 -0
  449. package/lib/scene/InstancedMesh.d.ts +1 -1
  450. package/lib/scene/InstancedMesh.js +3 -0
  451. package/lib/scene/InstancedMesh.js.map +1 -1
  452. package/lib/scene/MaterialState.d.ts +209 -0
  453. package/lib/scene/MaterialState.js +231 -0
  454. package/lib/scene/MaterialState.js.map +1 -0
  455. package/lib/scene/Mesh.d.ts +4 -6
  456. package/lib/scene/Mesh.js +3 -11
  457. package/lib/scene/Mesh.js.map +1 -1
  458. package/lib/scene/MeshState.d.ts +20 -0
  459. package/lib/scene/MeshState.js +35 -0
  460. package/lib/scene/MeshState.js.map +1 -0
  461. package/lib/scene/OpenPBRMaterial.d.ts +7 -169
  462. package/lib/scene/OpenPBRMaterial.js +5 -223
  463. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  464. package/lib/scene/PixelTexture.d.ts +6 -0
  465. package/lib/scene/PixelTexture.js +10 -0
  466. package/lib/scene/PixelTexture.js.map +1 -0
  467. package/lib/scene/ProceduralSky.d.ts +24 -0
  468. package/lib/scene/ProceduralSky.js +40 -0
  469. package/lib/scene/ProceduralSky.js.map +1 -0
  470. package/lib/scene/RectLight.d.ts +2 -13
  471. package/lib/scene/RectLight.js +3 -21
  472. package/lib/scene/RectLight.js.map +1 -1
  473. package/lib/scene/RectLightState.d.ts +31 -0
  474. package/lib/scene/RectLightState.js +26 -0
  475. package/lib/scene/RectLightState.js.map +1 -0
  476. package/lib/scene/Scene.d.ts +15 -4
  477. package/lib/scene/Scene.js.map +1 -1
  478. package/lib/scene/SceneNode.js +7 -6
  479. package/lib/scene/SceneNode.js.map +1 -1
  480. package/lib/scene/Texture.d.ts +10 -41
  481. package/lib/scene/Texture.js +4 -33
  482. package/lib/scene/Texture.js.map +1 -1
  483. package/lib/scene/TextureState.d.ts +35 -0
  484. package/lib/scene/TextureState.js +35 -0
  485. package/lib/scene/TextureState.js.map +1 -0
  486. package/lib/scene/attributeData.d.ts +4 -0
  487. package/lib/scene/attributeData.js +10 -0
  488. package/lib/scene/attributeData.js.map +1 -0
  489. package/lib/scene/lightState.d.ts +8 -0
  490. package/lib/scene/lightState.js +2 -0
  491. package/lib/scene/lightState.js.map +1 -0
  492. package/lib/scene/openPbrSchema.d.ts +7 -12
  493. package/lib/scene/openPbrSchema.js +273 -28
  494. package/lib/scene/openPbrSchema.js.map +1 -1
  495. package/lib/scene/skyParameters.d.ts +20 -0
  496. package/lib/scene/skyParameters.js +28 -0
  497. package/lib/scene/skyParameters.js.map +1 -0
  498. package/lib/scene/textureData.d.ts +9 -0
  499. package/lib/scene/textureData.js +2 -0
  500. package/lib/scene/textureData.js.map +1 -0
  501. package/lib/scene/texturePixels.d.ts +6 -0
  502. package/lib/scene/texturePixels.js +10 -0
  503. package/lib/scene/texturePixels.js.map +1 -0
  504. package/lib/settings/display.d.ts +33 -0
  505. package/lib/settings/display.js +7 -0
  506. package/lib/settings/display.js.map +1 -1
  507. package/lib/settings/render.d.ts +25 -3
  508. package/lib/settings/render.js +3 -1
  509. package/lib/settings/render.js.map +1 -1
  510. package/lib/tinybvh/tinybvh.wasm +0 -0
  511. package/lib/util/commonGeometry.js +7 -7
  512. package/lib/util/commonGeometry.js.map +1 -1
  513. package/lib/util/fromTHREE.d.ts +4 -1
  514. package/lib/util/fromTHREE.js +18 -5
  515. package/lib/util/fromTHREE.js.map +1 -1
  516. package/lib/util/geometry.js +42 -29
  517. package/lib/util/geometry.js.map +1 -1
  518. package/lib/util/loadRGBE.js +3 -4
  519. package/lib/util/loadRGBE.js.map +1 -1
  520. package/lib/util/studioLighting.d.ts +18 -0
  521. package/lib/util/studioLighting.js +36 -0
  522. package/lib/util/studioLighting.js.map +1 -0
  523. package/lib/version.d.ts +1 -1
  524. package/lib/version.js +1 -1
  525. package/lib/version.js.map +1 -1
  526. package/llms.txt +4 -0
  527. package/package.json +31 -5
  528. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  529. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -6,31 +6,31 @@ import { INSTANCE_VEC4_STRIDE } from '../../bvhAccel.js';
6
6
  import { createShaderMixin, glsl, Shader } from '../../shader.js';
7
7
  function getBVHTraverseCode(handleHitCode, skipTriangleCode = '', initialTMax = 'RAY_MAX_DISTANCE') {
8
8
  const intersectTriangles = glsl `
9
- ivec3 vertexOffset = ivec3(floatBitsToInt(bv(cf * ${INSTANCE_VEC4_STRIDE}).y));
10
- for (int k = 0; k < bh; k++) {
9
+ ivec3 vertexOffset = ivec3(floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).y));
10
+ for (int k = 0; k < primitiveCount; k++) {
11
11
  int triangleIndex = primitiveOffset + k;
12
12
  ${skipTriangleCode}
13
- vec4 r3 = dp(triangleIndex);
13
+ vec4 r3 = dJ(triangleIndex);
14
14
  ivec3 index = floatBitsToInt(r3.xyz) + vertexOffset;
15
- fA tri = fA(
16
- kG(positionBuffer, index.x, vertexColumns).xyz,
17
- kG(positionBuffer, index.y, vertexColumns).xyz,
18
- kG(positionBuffer, index.z, vertexColumns).xyz
15
+ fP tri = fP(
16
+ lm(positionBuffer, index.x, vertexColumns).xyz,
17
+ lm(positionBuffer, index.y, vertexColumns).xyz,
18
+ lm(positionBuffer, index.z, vertexColumns).xyz
19
19
  );
20
- eC hit = fL(o, d, tri, ey, gP, tMax);
20
+ eK hit = ga(o, d, tri, eq, gY, tMax);
21
21
 
22
22
  if (hit.t > 0.0) {
23
23
  tMax = hit.t;
24
24
  vec3 e1 = tri.p1 - tri.p0;
25
25
  vec3 e2 = tri.p2 - tri.p0;
26
26
  vec3 faceNormal = normalize(cross(e1, e2));
27
- int kk = int(ae(
28
- floatBitsToInt(bv(cf * ${INSTANCE_VEC4_STRIDE}).z)
27
+ int kP = int(ah(
28
+ floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).z)
29
29
  ).x);
30
- bool iN = fetchMatData(
31
- kk * MAT_DATA_SIZE + MAT_ROW_ALPHA
30
+ bool jd = fetchMatData(
31
+ kP * MAT_DATA_SIZE + MAT_ROW_ALPHA
32
32
  ).z > 0.5;
33
- if (!doubleSided && !iN && dot(faceNormal, d) > 0.0) {
33
+ if (!doubleSided && !jd && dot(faceNormal, d) > 0.0) {
34
34
  continue;
35
35
  }
36
36
 
@@ -41,262 +41,262 @@ ${handleHitCode}
41
41
  return glsl `
42
42
  ivec2 stack[STACK_SIZE];
43
43
  int top = -1;
44
- int sO = -1;
44
+ int ud = -1;
45
45
  float tMax = ${initialTMax};
46
46
 
47
47
  vec3 o = ray.o;
48
48
  vec3 d = ray.d;
49
49
 
50
- bool rb = false;
51
- vec3 hB;
52
- vec3 aB;
53
- ivec3 hw;
50
+ bool sj = false;
51
+ vec3 hS;
52
+ vec3 aC;
53
+ ivec3 hK;
54
54
 
55
- fA lC;
55
+ fP mk;
56
56
 
57
57
 
58
58
  top = 0;
59
59
  stack[0] = ivec2(0, -1);
60
60
 
61
- int wr = 0;
62
- while(top >= 0 && wr < 5000) {
63
- wr++;
61
+ int yk = 0;
62
+ while(top >= 0 && yk < 5000) {
63
+ yk++;
64
64
  ivec2 node = stack[top--];
65
65
 
66
- int cf = node.y;
66
+ int bY = node.y;
67
67
 
68
- if (cf != sO) {
69
- if (cf < 0) {
68
+ if (bY != ud) {
69
+ if (bY < 0) {
70
70
  o = ray.o;
71
71
  d = ray.d;
72
72
  }
73
73
  else {
74
74
  mat4 w2l = mat4(
75
- bv(cf * ${INSTANCE_VEC4_STRIDE} + 1),
76
- bv(cf * ${INSTANCE_VEC4_STRIDE} + 2),
77
- bv(cf * ${INSTANCE_VEC4_STRIDE} + 3),
78
- bv(cf * ${INSTANCE_VEC4_STRIDE} + 4)
75
+ bF(bY * ${INSTANCE_VEC4_STRIDE} + 1),
76
+ bF(bY * ${INSTANCE_VEC4_STRIDE} + 2),
77
+ bF(bY * ${INSTANCE_VEC4_STRIDE} + 3),
78
+ bF(bY * ${INSTANCE_VEC4_STRIDE} + 4)
79
79
  );
80
80
  o = (w2l * vec4(ray.o, 1.0)).xyz;
81
81
  d = (w2l * vec4(ray.d, 0.0)).xyz;
82
82
  }
83
- ey = maxDimension(abs(d));
84
- gP = mv(d, ey);
85
- sO = cf;
83
+ eq = maxDimension(abs(d));
84
+ gY = nk(d, eq);
85
+ ud = bY;
86
86
  }
87
87
 
88
- int bo = cf < 0 ? 0 : blasOffset;
89
- uint fJ = cf < 0 ? 0u : floatBitsToUint(bv(cf * ${INSTANCE_VEC4_STRIDE}).x);
90
- int gR = int(fJ >> 30u);
91
- int eW = int(fJ & 0x3fffffffu);
92
- int bh = 0;
88
+ int bw = bY < 0 ? 0 : blasOffset;
89
+ uint fY = bY < 0 ? 0u : floatBitsToUint(bF(bY * ${INSTANCE_VEC4_STRIDE}).x);
90
+ int he = int(fY >> 30u);
91
+ int fg = int(fY & 0x3fffffffu);
92
+ int primitiveCount = 0;
93
93
  int primitiveOffset = 0;
94
94
 
95
- if (gR == 3) {
96
- uint hW = uint(node.x);
97
- if ((hW & 0x80000000u) != 0u) {
98
- bh = int((hW >> 23u) & 0xffu);
99
- primitiveOffset = bo + eW + int(hW & 0x007fffffu);
95
+ if (he == 3) {
96
+ uint iw = uint(node.x);
97
+ if ((iw & 0x80000000u) != 0u) {
98
+ primitiveCount = int((iw >> 23u) & 0xffu);
99
+ primitiveOffset = bw + fg + int(iw & 0x007fffffu);
100
100
  }
101
101
  else {
102
- int i = node.x + bo;
103
- vec4 jA = dp(i);
104
- vec4 fF = dp(i + 1);
105
- vec4 mV = dp(i + 2);
106
- vec4 mW = dp(i + 3);
107
- vec4 mX = dp(i + 4);
108
- uint header = floatBitsToUint(jA.w);
109
- int rG = int(header << 24u) >> 24;
110
- int rH = int((header >> 8u) << 24u) >> 24;
111
- int rI = int((header >> 16u) << 24u) >> 24;
112
- vec3 hJ = vec3(
113
- uintBitsToFloat(uint(rG + 127) << 23u),
114
- uintBitsToFloat(uint(rH + 127) << 23u),
115
- uintBitsToFloat(uint(rI + 127) << 23u)
102
+ int i = node.x + bw;
103
+ vec4 jZ = dJ(i);
104
+ vec4 fU = dJ(i + 1);
105
+ vec4 nS = dJ(i + 2);
106
+ vec4 nT = dJ(i + 3);
107
+ vec4 nU = dJ(i + 4);
108
+ uint header = floatBitsToUint(jZ.w);
109
+ int sH = int(header << 24u) >> 24;
110
+ int sI = int((header >> 8u) << 24u) >> 24;
111
+ int sJ = int((header >> 16u) << 24u) >> 24;
112
+ vec3 hZ = vec3(
113
+ uintBitsToFloat(uint(sH + 127) << 23u),
114
+ uintBitsToFloat(uint(sI + 127) << 23u),
115
+ uintBitsToFloat(uint(sJ + 127) << 23u)
116
116
  );
117
- uint childBase = floatBitsToUint(fF.x);
118
- uint oQ = floatBitsToUint(fF.y);
117
+ uint childBase = floatBitsToUint(fU.x);
118
+ uint pM = floatBitsToUint(fU.y);
119
119
  uint internalMask = header >> 24u;
120
- uint ut = (d.x < 0.0 ? 4u : 0u) |
120
+ uint vU = (d.x < 0.0 ? 4u : 0u) |
121
121
  (d.y < 0.0 ? 2u : 0u) |
122
122
  (d.z < 0.0 ? 1u : 0u);
123
- uint gI[12] = uint[12](
124
- floatBitsToUint(mV.x), floatBitsToUint(mV.y),
125
- floatBitsToUint(mV.z), floatBitsToUint(mV.w),
126
- floatBitsToUint(mW.x), floatBitsToUint(mW.y),
127
- floatBitsToUint(mW.z), floatBitsToUint(mW.w),
128
- floatBitsToUint(mX.x), floatBitsToUint(mX.y),
129
- floatBitsToUint(mX.z), floatBitsToUint(mX.w)
123
+ uint gV[12] = uint[12](
124
+ floatBitsToUint(nS.x), floatBitsToUint(nS.y),
125
+ floatBitsToUint(nS.z), floatBitsToUint(nS.w),
126
+ floatBitsToUint(nT.x), floatBitsToUint(nT.y),
127
+ floatBitsToUint(nT.z), floatBitsToUint(nT.w),
128
+ floatBitsToUint(nU.x), floatBitsToUint(nU.y),
129
+ floatBitsToUint(nU.z), floatBitsToUint(nU.w)
130
130
  );
131
131
 
132
132
  for (int order = 7; order >= 0; order--) {
133
- uint slot = uint(order) ^ ut;
134
- uint sE = slot >= 4u
135
- ? floatBitsToUint(fF.w)
136
- : floatBitsToUint(fF.z);
137
- uint meta = (sE >> ((slot & 3u) * 8u)) & 0xffu;
133
+ uint slot = uint(order) ^ vU;
134
+ uint tT = slot >= 4u
135
+ ? floatBitsToUint(fU.w)
136
+ : floatBitsToUint(fU.z);
137
+ uint meta = (tT >> ((slot & 3u) * 8u)) & 0xffu;
138
138
  if (meta == 0u) continue;
139
- uint lY = (slot & 3u) * 8u;
140
- uint kV = slot >> 2u;
141
- vec3 tH = vec3(
142
- float((gI[kV] >> lY) & 0xffu),
143
- float((gI[2u + kV] >> lY) & 0xffu),
144
- float((gI[4u + kV] >> lY) & 0xffu)
139
+ uint mI = (slot & 3u) * 8u;
140
+ uint lF = slot >> 2u;
141
+ vec3 uX = vec3(
142
+ float((gV[lF] >> mI) & 0xffu),
143
+ float((gV[2u + lF] >> mI) & 0xffu),
144
+ float((gV[4u + lF] >> mI) & 0xffu)
145
145
  );
146
- vec3 tG = vec3(
147
- float((gI[6u + kV] >> lY) & 0xffu),
148
- float((gI[8u + kV] >> lY) & 0xffu),
149
- float((gI[10u + kV] >> lY) & 0xffu)
146
+ vec3 uW = vec3(
147
+ float((gV[6u + lF] >> mI) & 0xffu),
148
+ float((gV[8u + lF] >> mI) & 0xffu),
149
+ float((gV[10u + lF] >> mI) & 0xffu)
150
150
  );
151
- vec3 uW = jA.xyz + tH * hJ;
152
- vec3 uV = jA.xyz + tG * hJ;
153
- if (cM(o, d, uW, uV, tMax) <= 0.0) continue;
154
- uint jC = meta & 0x1fu;
155
- if (jC >= 24u) {
156
- uint ns = internalMask & ((1u << slot) - 1u);
157
- uint sX = childBase + qT(ns);
151
+ vec3 wN = jZ.xyz + uX * hZ;
152
+ vec3 wM = jZ.xyz + uW * hZ;
153
+ if (cU(o, d, wN, wM, tMax) <= 0.0) continue;
154
+ uint kb = meta & 0x1fu;
155
+ if (kb >= 24u) {
156
+ uint om = internalMask & ((1u << slot) - 1u);
157
+ uint un = childBase + rY(om);
158
158
  stack[++top] = ivec2(
159
- eW + int(sX * 5u), cf
159
+ fg + int(un * 5u), bY
160
160
  );
161
161
  }
162
162
  else {
163
- uint triangleCount = qT(meta >> 5u);
164
- uint rS = oQ + jC;
165
- uint vh = 0x80000000u |
163
+ uint triangleCount = rY(meta >> 5u);
164
+ uint sV = pM + kb;
165
+ uint wZ = 0x80000000u |
166
166
  (triangleCount << 23u) |
167
- (rS & 0x007fffffu);
168
- stack[++top] = ivec2(int(vh), cf);
167
+ (sV & 0x007fffffu);
168
+ stack[++top] = ivec2(int(wZ), bY);
169
169
  }
170
170
  }
171
171
  }
172
172
  }
173
- else if (gR == 2) {
174
- int i = node.x + bo;
175
- vec4 uY = dp(i);
176
- vec4 uZ = dp(i + 1);
177
- vec4 va = dp(i + 2);
178
- vec4 vb = dp(i + 3);
179
- bh = int(floatBitsToUint(va.w));
180
- if (bh > 0) {
181
- primitiveOffset = bo + eW + int(floatBitsToUint(vb.w));
173
+ else if (he == 2) {
174
+ int i = node.x + bw;
175
+ vec4 wP = dJ(i);
176
+ vec4 wQ = dJ(i + 1);
177
+ vec4 wR = dJ(i + 2);
178
+ vec4 wS = dJ(i + 3);
179
+ primitiveCount = int(floatBitsToUint(wR.w));
180
+ if (primitiveCount > 0) {
181
+ primitiveOffset = bw + fg + int(floatBitsToUint(wS.w));
182
182
  }
183
183
  else {
184
- int left = eW + int(floatBitsToUint(uY.w) * 4u);
185
- int right = eW + int(floatBitsToUint(uZ.w) * 4u);
186
- float d0 = cM(o, d, uY.xyz, uZ.xyz, tMax);
187
- float d1 = cM(o, d, va.xyz, vb.xyz, tMax);
184
+ int left = fg + int(floatBitsToUint(wP.w) * 4u);
185
+ int right = fg + int(floatBitsToUint(wQ.w) * 4u);
186
+ float d0 = cU(o, d, wP.xyz, wQ.xyz, tMax);
187
+ float d1 = cU(o, d, wR.xyz, wS.xyz, tMax);
188
188
  if (d0 > d1) {
189
- if (d0 > 0.0) stack[++top] = ivec2(left, cf);
190
- if (d1 > 0.0) stack[++top] = ivec2(right, cf);
189
+ if (d0 > 0.0) stack[++top] = ivec2(left, bY);
190
+ if (d1 > 0.0) stack[++top] = ivec2(right, bY);
191
191
  }
192
192
  else {
193
- if (d1 > 0.0) stack[++top] = ivec2(right, cf);
194
- if (d0 > 0.0) stack[++top] = ivec2(left, cf);
193
+ if (d1 > 0.0) stack[++top] = ivec2(right, bY);
194
+ if (d0 > 0.0) stack[++top] = ivec2(left, bY);
195
195
  }
196
196
  }
197
197
  }
198
- else if (gR == 1) {
199
- uint hW = uint(node.x);
200
- if ((hW & 0x80000000u) != 0u) {
201
- bh = int((hW >> 23u) & 0xffu);
202
- primitiveOffset = bo + eW + int(hW & 0x007fffffu);
198
+ else if (he == 1) {
199
+ uint iw = uint(node.x);
200
+ if ((iw & 0x80000000u) != 0u) {
201
+ primitiveCount = int((iw >> 23u) & 0xffu);
202
+ primitiveOffset = bw + fg + int(iw & 0x007fffffu);
203
203
  }
204
204
  else {
205
- int i = node.x + bo;
206
- vec4 ui = dp(i);
207
- vec4 ro = dp(i + 1);
208
- vec4 rp = dp(i + 2);
209
- vec4 rq = dp(i + 3);
210
- vec3 nodeMin = ui.xyz;
211
- vec3 ec = vec3(ui.w, ro.x, ro.y);
212
- uint mh[4] = uint[4](
213
- floatBitsToUint(ro.z), floatBitsToUint(ro.w),
214
- floatBitsToUint(rp.x), floatBitsToUint(rp.y)
205
+ int i = node.x + bw;
206
+ vec4 vJ = dJ(i);
207
+ vec4 sz = dJ(i + 1);
208
+ vec4 qR = dJ(i + 2);
209
+ vec4 oQ = dJ(i + 3);
210
+ vec3 nodeMin = vJ.xyz;
211
+ vec3 er = vec3(vJ.w, sz.x, sz.y);
212
+ uint mT[4] = uint[4](
213
+ floatBitsToUint(sz.z), floatBitsToUint(sz.w),
214
+ floatBitsToUint(qR.x), floatBitsToUint(qR.y)
215
215
  );
216
- vec4 rw = fc(floatBitsToUint(rp.z));
217
- vec4 rA = fc(floatBitsToUint(rp.w));
218
- vec4 rB = fc(floatBitsToUint(rq.x));
219
- vec4 rt = fc(floatBitsToUint(rq.y));
220
- vec4 ru = fc(floatBitsToUint(rq.z));
221
- vec4 rv = fc(floatBitsToUint(rq.w));
222
- vec3 gC = fb(d);
223
- vec3 bJ = eZ(gC, o);
224
- vec4 tx0 = (nodeMin.x + rw * ec.x - o.x) * gC.x;
225
- vec4 tx1 = (nodeMin.x + rt * ec.x - o.x) * gC.x;
226
- vec4 ty0 = (nodeMin.y + rA * ec.y - o.y) * gC.y;
227
- vec4 ty1 = (nodeMin.y + ru * ec.y - o.y) * gC.y;
228
- vec4 tz0 = (nodeMin.z + rB * ec.z - o.z) * gC.z;
229
- vec4 tz1 = (nodeMin.z + rv * ec.z - o.z) * gC.z;
230
- vec4 mL = max(max((min(tx0, tx1) - vec4(bJ.x)), (min(ty0, ty1) - vec4(bJ.y))), (min(tz0, tz1) - vec4(bJ.z)));
231
- vec4 rU = min(min((max(tx0, tx1) + vec4(bJ.x)), (max(ty0, ty1) + vec4(bJ.y))), (max(tz0, tz1) + vec4(bJ.z)));
232
- vec4 distance = mix(rU, mL, greaterThan(mL, vec4(0.0)));
233
- distance = mix(distance, vec4(-1.0), greaterThan(mL, min(rU, vec4(tMax))));
234
- float fd[4] = float[4](distance.x, distance.y, distance.z, distance.w);
216
+ vec4 wx = fp(floatBitsToUint(qR.z));
217
+ vec4 wy = fp(floatBitsToUint(qR.w));
218
+ vec4 wB = fp(floatBitsToUint(oQ.x));
219
+ vec4 wu = fp(floatBitsToUint(oQ.y));
220
+ vec4 wv = fp(floatBitsToUint(oQ.z));
221
+ vec4 ww = fp(floatBitsToUint(oQ.w));
222
+ vec3 gr = fo(d);
223
+ vec3 padding = fk(gr, o);
224
+ vec4 tx0 = (nodeMin.x + wx * er.x - o.x) * gr.x;
225
+ vec4 tx1 = (nodeMin.x + wu * er.x - o.x) * gr.x;
226
+ vec4 ty0 = (nodeMin.y + wy * er.y - o.y) * gr.y;
227
+ vec4 ty1 = (nodeMin.y + wv * er.y - o.y) * gr.y;
228
+ vec4 tz0 = (nodeMin.z + wB * er.z - o.z) * gr.z;
229
+ vec4 tz1 = (nodeMin.z + ww * er.z - o.z) * gr.z;
230
+ vec4 nJ = max(max((min(tx0, tx1) - vec4(padding.x)), (min(ty0, ty1) - vec4(padding.y))), (min(tz0, tz1) - vec4(padding.z)));
231
+ vec4 sY = min(min((max(tx0, tx1) + vec4(padding.x)), (max(ty0, ty1) + vec4(padding.y))), (max(tz0, tz1) + vec4(padding.z)));
232
+ vec4 distance = mix(sY, nJ, greaterThan(nJ, vec4(0.0)));
233
+ distance = mix(distance, vec4(-1.0), greaterThan(nJ, min(sY, vec4(tMax))));
234
+ float fq[4] = float[4](distance.x, distance.y, distance.z, distance.w);
235
235
 
236
236
 
237
237
  for (int order = 0; order < 4; order++) {
238
- float dX = -1.0;
239
- int el = -1;
238
+ float em = -1.0;
239
+ int eB = -1;
240
240
  for (int child = 0; child < 4; child++) {
241
- if (mh[child] != 0u && fd[child] > dX) {
242
- dX = fd[child];
243
- el = child;
241
+ if (mT[child] != 0u && fq[child] > em) {
242
+ em = fq[child];
243
+ eB = child;
244
244
  }
245
245
  }
246
- if (el >= 0 && dX > 0.0) {
247
- uint nD = mh[el];
248
- int jI = int(nD);
249
- if ((nD & 0x80000000u) == 0u) {
250
- jI += eW;
246
+ if (eB >= 0 && em > 0.0) {
247
+ uint oy = mT[eB];
248
+ int ki = int(oy);
249
+ if ((oy & 0x80000000u) == 0u) {
250
+ ki += fg;
251
251
  }
252
- stack[++top] = ivec2(jI, cf);
253
- fd[el] = -1.0;
252
+ stack[++top] = ivec2(ki, bY);
253
+ fq[eB] = -1.0;
254
254
  }
255
255
  }
256
256
  }
257
257
  }
258
258
  else {
259
- int i = node.x + bo;
260
- vec4 r1 = dp(i);
261
- int bb = floatBitsToInt(r1.w);
259
+ int i = node.x + bw;
260
+ vec4 r1 = dJ(i);
261
+ int bl = floatBitsToInt(r1.w);
262
262
 
263
- if (bb >= 0) {
263
+ if (bl >= 0) {
264
264
  int left = node.x + 2;
265
- int right = bb + eW;
265
+ int right = bl + fg;
266
266
 
267
- float d0 = cM(o, d, dp(left + bo).xyz, dp(left + 1 + bo).xyz, tMax);
268
- float d1 = cM(o, d, dp(right + bo).xyz, dp(right + 1 + bo).xyz, tMax);
267
+ float d0 = cU(o, d, dJ(left + bw).xyz, dJ(left + 1 + bw).xyz, tMax);
268
+ float d1 = cU(o, d, dJ(right + bw).xyz, dJ(right + 1 + bw).xyz, tMax);
269
269
  if (d0 > d1) {
270
270
  if (d0 > 0.0) {
271
- stack[++top] = ivec2(left, cf);
271
+ stack[++top] = ivec2(left, bY);
272
272
  }
273
273
  if (d1 > 0.0) {
274
- stack[++top] = ivec2(right, cf);
274
+ stack[++top] = ivec2(right, bY);
275
275
  }
276
276
  }
277
277
  else {
278
278
  if (d1 > 0.0) {
279
- stack[++top] = ivec2(right, cf);
279
+ stack[++top] = ivec2(right, bY);
280
280
  }
281
281
  if (d0 > 0.0) {
282
- stack[++top] = ivec2(left, cf);
282
+ stack[++top] = ivec2(left, bY);
283
283
  }
284
284
  }
285
285
  }
286
286
  else {
287
- if (cf < 0) {
288
- for (int k = 0; k < -bb; k++) {
289
- vec4 r3 = dp(i + 2 + k);
287
+ if (bY < 0) {
288
+ for (int k = 0; k < -bl; k++) {
289
+ vec4 r3 = dJ(i + 2 + k);
290
290
  stack[++top] = ivec2(floatBitsToInt(r3.y), floatBitsToInt(r3.x));
291
291
  }
292
292
  }
293
293
  else {
294
- bh = -bb;
294
+ primitiveCount = -bl;
295
295
  primitiveOffset = i + 2;
296
296
  }
297
297
  }
298
298
  }
299
- if (bh > 0) {
299
+ if (primitiveCount > 0) {
300
300
  ${intersectTriangles}
301
301
  }
302
302
  }
@@ -321,13 +321,13 @@ export default createShaderMixin({
321
321
  },
322
322
  main: glsl `
323
323
 
324
- struct fA {
324
+ struct fP {
325
325
  vec3 p0;
326
326
  vec3 p1;
327
327
  vec3 p2;
328
328
  };
329
329
  #ifdef NUM_LIGHTS
330
- float hx(float rad, vec3 pos, Ray r) {
330
+ float hL(float rad, vec3 pos, Ray r) {
331
331
  vec3 op = pos - r.o;
332
332
  float eps = 0.001;
333
333
  float b = dot(op, r.d);
@@ -347,7 +347,7 @@ return t2;
347
347
  return INF;
348
348
  }
349
349
 
350
- float ni(vec3 pos, vec3 u, vec3 v, vec3 n, Ray r) {
350
+ float og(vec3 pos, vec3 u, vec3 v, vec3 n, Ray r) {
351
351
  float dt = dot(r.d, n);
352
352
  float t = (dot(n, pos) - dot(n, r.o)) / dt;
353
353
 
@@ -366,7 +366,7 @@ return t;
366
366
  return INF;
367
367
  }
368
368
 
369
- float mz(Ray r, Light light, out LightSampleRec lightSample) {
369
+ float nr(Ray r, Light light, out LightSampleRec lightSample) {
370
370
 
371
371
 
372
372
 
@@ -383,15 +383,15 @@ vec3 normal = normalize(cross(u, v));
383
383
  if (dot(normal, r.d) > 0.)
384
384
  return INF;
385
385
 
386
- d = ni(pos, u, v, normal, r);
386
+ d = og(pos, u, v, normal, r);
387
387
  if (d < 0.) {
388
388
  d = INF;
389
389
  }
390
390
  else {
391
- float cc = dot(-r.d, normal);
391
+ float ci = dot(-r.d, normal);
392
392
  float spread = light.spread;
393
- if (cc >= cos(spread * PI / 2.0)) {
394
- lightSample.pdf = (d * d) / (light.area * cc);
393
+ if (ci >= cos(spread * PI / 2.0)) {
394
+ lightSample.pdf = (d * d) / (light.area * ci);
395
395
  lightSample.emission = light.emission;
396
396
  }
397
397
  }
@@ -400,10 +400,10 @@ lightSample.emission = light.emission;
400
400
  #ifdef HAS_SPHERE_LIGHTS
401
401
  if (type == SPHERE_LIGHT) {
402
402
  if (light.radius <= 0.0) {
403
- vec3 ko = light.position - r.o;
404
- float projection = dot(ko, r.d);
405
- vec3 ba = ko - projection * r.d;
406
- if (projection <= EPS || dot(ba, ba) > 1e-8) return INF;
403
+ vec3 kT = light.position - r.o;
404
+ float projection = dot(kT, r.d);
405
+ vec3 bk = kT - projection * r.d;
406
+ if (projection <= EPS || dot(bk, bk) > 1e-8) return INF;
407
407
  d = projection;
408
408
  lightSample.direction = r.d;
409
409
  lightSample.normal = -r.d;
@@ -411,19 +411,19 @@ lightSample.dist = d;
411
411
  lightSample.pdf = 1.0;
412
412
  lightSample.isDelta = true;
413
413
  } else {
414
- d = hx(light.radius, light.position, r);
414
+ d = hL(light.radius, light.position, r);
415
415
  lightSample.isDelta = false;
416
416
  }
417
417
  if (d < 0.) {
418
418
  d = INF;
419
419
  }
420
420
  else {
421
- float aj = distance(r.o, light.position);
422
- float cosThetaMax = aj <= light.radius
421
+ float ak = distance(r.o, light.position);
422
+ float cosThetaMax = ak <= light.radius
423
423
  ? -1.0
424
- : sqrt(max(0.0, 1.0 - light.radius * light.radius / (aj * aj)));
424
+ : sqrt(max(0.0, 1.0 - light.radius * light.radius / (ak * ak)));
425
425
  if (light.radius > 0.0) {
426
- lightSample.pdf = aj <= light.radius
426
+ lightSample.pdf = ak <= light.radius
427
427
  ? INV4PI
428
428
  : 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
429
429
  }
@@ -436,10 +436,10 @@ lightSample.emission = light.radius <= 0.0
436
436
  #ifdef HAS_SPOT_LIGHTS
437
437
  if (type == SPOT_LIGHT) {
438
438
  if (light.radius <= 0.0) {
439
- vec3 ko = light.position - r.o;
440
- float projection = dot(ko, r.d);
441
- vec3 ba = ko - projection * r.d;
442
- if (projection <= EPS || dot(ba, ba) > 1e-8) return INF;
439
+ vec3 kT = light.position - r.o;
440
+ float projection = dot(kT, r.d);
441
+ vec3 bk = kT - projection * r.d;
442
+ if (projection <= EPS || dot(bk, bk) > 1e-8) return INF;
443
443
  d = projection;
444
444
  lightSample.direction = r.d;
445
445
  lightSample.normal = -r.d;
@@ -447,23 +447,23 @@ lightSample.dist = d;
447
447
  lightSample.pdf = 1.0;
448
448
  lightSample.isDelta = true;
449
449
  } else {
450
- d = hx(light.radius, light.position, r);
450
+ d = hL(light.radius, light.position, r);
451
451
  lightSample.isDelta = false;
452
452
  }
453
453
  if (d != INF) {
454
- vec3 ve = r.o + d * r.d;
455
- float mC = bL(light, normalize(r.o - ve));
456
- if (mC <= 0.0) return INF;
457
- float aj = distance(r.o, light.position);
458
- float cosThetaMax = aj <= light.radius
454
+ vec3 wW = r.o + d * r.d;
455
+ float nv = bP(light, normalize(r.o - wW));
456
+ if (nv <= 0.0) return INF;
457
+ float ak = distance(r.o, light.position);
458
+ float cosThetaMax = ak <= light.radius
459
459
  ? -1.0
460
- : sqrt(max(0.0, 1.0 - light.radius * light.radius / (aj * aj)));
460
+ : sqrt(max(0.0, 1.0 - light.radius * light.radius / (ak * ak)));
461
461
  if (light.radius > 0.0) {
462
- lightSample.pdf = aj <= light.radius
462
+ lightSample.pdf = ak <= light.radius
463
463
  ? INV4PI
464
464
  : 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
465
465
  }
466
- lightSample.emission = light.emission * mC * (light.radius <= 0.0
466
+ lightSample.emission = light.emission * nv * (light.radius <= 0.0
467
467
  ? 1.0 / max(d * d, 1e-8)
468
468
  : 1.0);
469
469
  }
@@ -474,96 +474,96 @@ return d;
474
474
  }
475
475
  #endif
476
476
 
477
- int fm(ivec4 m0, ivec4 m1, ivec4 m2, vec3 eK) {
478
- vec2 m00 = ae(m0.x);
479
- vec2 m01 = ae(m0.y);
480
- vec2 m02 = ae(m0.z);
481
- vec2 m10 = ae(m1.x);
482
- vec2 m11 = ae(m1.y);
483
- vec2 m12 = ae(m1.z);
484
- vec2 m20 = ae(m2.x);
485
- vec2 m21 = ae(m2.y);
486
- vec2 m22 = ae(m2.z);
487
- float w00 = m00.y * eK.x;
488
- float w01 = m01.y * eK.x;
489
- float w02 = m02.y * eK.x;
490
- float w10 = m10.y * eK.y;
491
- float w11 = m11.y * eK.y;
492
- float w12 = m12.y * eK.y;
493
- float w20 = m20.y * eK.z;
494
- float w21 = m21.y * eK.z;
495
- float w22 = m22.y * eK.z;
496
-
497
- float hk = w00 + w01 + w02 + w10 + w11 + w12 + w20 + w21 + w22;
498
-
499
- w00 = w00 / hk;
500
- w01 = w01 / hk + w00;
501
- w02 = w02 / hk + w01;
502
- w10 = w10 / hk + w02;
503
- w11 = w11 / hk + w10;
504
- w12 = w12 / hk + w11;
505
- w20 = w20 / hk + w12;
506
- w21 = w21 / hk + w20;
507
- w22 = w22 / hk + w21;
508
-
509
- float rand = eo(0u);
510
- float nj;
477
+ int fF(ivec4 m0, ivec4 m1, ivec4 m2, vec3 eU) {
478
+ vec2 m00 = ah(m0.x);
479
+ vec2 m01 = ah(m0.y);
480
+ vec2 m02 = ah(m0.z);
481
+ vec2 m10 = ah(m1.x);
482
+ vec2 m11 = ah(m1.y);
483
+ vec2 m12 = ah(m1.z);
484
+ vec2 m20 = ah(m2.x);
485
+ vec2 m21 = ah(m2.y);
486
+ vec2 m22 = ah(m2.z);
487
+ float w00 = m00.y * eU.x;
488
+ float w01 = m01.y * eU.x;
489
+ float w02 = m02.y * eU.x;
490
+ float w10 = m10.y * eU.y;
491
+ float w11 = m11.y * eU.y;
492
+ float w12 = m12.y * eU.y;
493
+ float w20 = m20.y * eU.z;
494
+ float w21 = m21.y * eU.z;
495
+ float w22 = m22.y * eU.z;
496
+
497
+ float hy = w00 + w01 + w02 + w10 + w11 + w12 + w20 + w21 + w22;
498
+
499
+ w00 = w00 / hy;
500
+ w01 = w01 / hy + w00;
501
+ w02 = w02 / hy + w01;
502
+ w10 = w10 / hy + w02;
503
+ w11 = w11 / hy + w10;
504
+ w12 = w12 / hy + w11;
505
+ w20 = w20 / hy + w12;
506
+ w21 = w21 / hy + w20;
507
+ w22 = w22 / hy + w21;
508
+
509
+ float rand = eC(0u);
510
+ float oh;
511
511
  if (rand < w00) {
512
- nj = m00.x;
512
+ oh = m00.x;
513
513
  } else if (rand < w01) {
514
- nj = m01.x;
514
+ oh = m01.x;
515
515
  } else if (rand < w02) {
516
- nj = m02.x;
516
+ oh = m02.x;
517
517
  } else if (rand < w10) {
518
- nj = m10.x;
518
+ oh = m10.x;
519
519
  } else if (rand < w11) {
520
- nj = m11.x;
520
+ oh = m11.x;
521
521
  } else if (rand < w12) {
522
- nj = m12.x;
522
+ oh = m12.x;
523
523
  } else if (rand < w20) {
524
- nj = m20.x;
524
+ oh = m20.x;
525
525
  } else if (rand < w21) {
526
- nj = m21.x;
526
+ oh = m21.x;
527
527
  } else {
528
- nj = m22.x;
528
+ oh = m22.x;
529
529
  }
530
- return int(nj);
530
+ return int(oh);
531
531
  }
532
532
 
533
533
 
534
- vec4 bv(int i);
534
+ vec4 bF(int i);
535
535
 
536
536
 
537
- mat2x3 eE(vec3 normal, vec3 dp1, vec3 dp2, vec2 od, vec2 oe, vec4 aT) {
538
- float determinant = od.x * oe.y - od.y * oe.x;
539
- vec3 t = aT.xyz;
537
+ mat2x3 eP(vec3 normal, vec3 dp1, vec3 dp2, vec2 oW, vec2 oX, vec4 aX) {
538
+ float determinant = oW.x * oX.y - oW.y * oX.x;
539
+ vec3 t = aX.xyz;
540
540
  vec3 b = vec3(0.0);
541
541
 
542
- float qC = abs(aT.w) > 1.5 ? 0.0 : aT.w;
542
+ float rF = abs(aX.w) > 1.5 ? 0.0 : aX.w;
543
543
  if (abs(determinant) > 1e-12) {
544
- vec3 dt = (dp1 * oe.y - dp2 * od.y) / determinant;
545
- vec3 db = (dp2 * od.x - dp1 * oe.x) / determinant;
544
+ vec3 dt = (dp1 * oX.y - dp2 * oW.y) / determinant;
545
+ vec3 db = (dp2 * oW.x - dp1 * oX.x) / determinant;
546
546
  if (dot(t, t) < 1e-8) { t = dt; }
547
- if (qC == 0.0) { qC = (dot(cross(normal, dt), db) < 0.0 ? -1.0 : 1.0); }
547
+ if (rF == 0.0) { rF = (dot(cross(normal, dt), db) < 0.0 ? -1.0 : 1.0); }
548
548
  }
549
549
  t -= normal * dot(normal, t);
550
550
  if (dot(t, t) < 1e-8) {
551
- float ik = (normal.z >= 0.0 ? 1.0 : -1.0);
552
- float dW = -1.0 / (ik + normal.z);
553
- float xy = normal.x * normal.y * dW;
554
- t = vec3(1.0 + ik * normal.x * normal.x * dW, ik * xy, -ik * normal.x);
555
- b = vec3(xy, ik + normal.y * normal.y * dW, -normal.y);
551
+ float iI = (normal.z >= 0.0 ? 1.0 : -1.0);
552
+ float cL = -1.0 / (iI + normal.z);
553
+ float xy = normal.x * normal.y * cL;
554
+ t = vec3(1.0 + iI * normal.x * normal.x * cL, iI * xy, -iI * normal.x);
555
+ b = vec3(xy, iI + normal.y * normal.y * cL, -normal.y);
556
556
  }
557
557
  else { t = normalize(t); b = normalize(cross(normal, t)); }
558
- return mat2x3(t, b * (qC < 0.0 ? -1.0 : 1.0));
558
+ return mat2x3(t, b * (rF < 0.0 ? -1.0 : 1.0));
559
559
  }
560
560
 
561
- void ht(inout ad si, fA tri, vec3 barycentric, ivec3 index) {
561
+ void hH(inout SurfaceInteraction si, fP tri, vec3 barycentric, ivec3 index) {
562
562
  si.hit = true;
563
563
  si.position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
564
- ivec2 i0 = gQ(index.x, vertexColumns);
565
- ivec2 i1 = gQ(index.y, vertexColumns);
566
- ivec2 i2 = gQ(index.z, vertexColumns);
564
+ ivec2 i0 = hd(index.x, vertexColumns);
565
+ ivec2 i1 = hd(index.y, vertexColumns);
566
+ ivec2 i2 = hd(index.z, vertexColumns);
567
567
  si.vertexColor = vec3(1.0);
568
568
  #ifdef USE_VERTEX_COLOR
569
569
  si.vertexColor = barycentric.x * texelFetch(colorBuffer, i0, 0).rgb
@@ -582,14 +582,14 @@ si.vertexNormal = normal;
582
582
 
583
583
 
584
584
  vec3 geometricNormal = normalize(cross(tri.p1 - tri.p0, tri.p2 - tri.p0));
585
- vec3 km = barycentric.x * n0 + barycentric.y * n1 + barycentric.z * n2;
585
+ vec3 kR = barycentric.x * n0 + barycentric.y * n1 + barycentric.z * n2;
586
586
  float a = dot(n2 - n0, tri.p0 - tri.p2);
587
587
  float b = dot(n2 - n1, tri.p1 - tri.p2);
588
588
  float c = dot(n1 - n0, tri.p1 - tri.p0);
589
589
  float h = a * barycentric.x * (barycentric.x - 1.0)
590
590
  + (a + b + c) * barycentric.x * barycentric.y
591
591
  + b * barycentric.y * (barycentric.y - 1.0);
592
- if (dot(km, geometricNormal) > 0.0) {
592
+ if (dot(kR, geometricNormal) > 0.0) {
593
593
  float h0 = max(max(dot(tri.p1 - tri.p0, n0), dot(tri.p2 - tri.p0, n0)), 0.0);
594
594
  float h1 = max(max(dot(tri.p0 - tri.p1, n1), dot(tri.p2 - tri.p1, n1)), 0.0);
595
595
  float h2 = max(max(dot(tri.p0 - tri.p2, n2), dot(tri.p1 - tri.p2, n2)), 0.0);
@@ -607,7 +607,7 @@ h1 = max(dot(si.position - tri.p1, n1) + h1, 0.0);
607
607
  h2 = max(dot(si.position - tri.p2, n2) + h2, 0.0);
608
608
  h = min(-min(min(h0, h1), h2), h * 0.5);
609
609
  }
610
- si.shadowOffset = km * h;
610
+ si.shadowOffset = kR * h;
611
611
 
612
612
 
613
613
  ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
@@ -615,7 +615,7 @@ ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
615
615
  ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
616
616
 
617
617
  if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
618
- si.materialIndex = fm(m0, m1, m2, barycentric);
618
+ si.materialIndex = fF(m0, m1, m2, barycentric);
619
619
  }
620
620
 
621
621
  vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
@@ -626,78 +626,80 @@ vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
626
626
  vec2 secondaryUv0 = texelFetch(uv1Buffer, i0, 0).xy;
627
627
  vec2 secondaryUv1 = texelFetch(uv1Buffer, i1, 0).xy;
628
628
  vec2 secondaryUv2 = texelFetch(uv1Buffer, i2, 0).xy;
629
- vec2 cX = barycentric.x * secondaryUv0
629
+ vec2 dj = barycentric.x * secondaryUv0
630
630
  + barycentric.y * secondaryUv1
631
631
  + barycentric.z * secondaryUv2;
632
632
 
633
- vec4 lM = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_UV);
634
- int uvProjection = int(lM.r);
633
+ vec4 mw = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_UV);
634
+ int uvProjection = int(mw.r);
635
635
  if (uvProjection > 0) {
636
- uv = gH(uvProjection, si.position, normal, lM.zw);
637
- cX = uv;
636
+ uv = gU(uvProjection, si.position, normal, mw.zw);
637
+ dj = uv;
638
638
  } else {
639
- uv *= lM.zw;
640
- cX *= lM.zw;
639
+ uv *= mw.zw;
640
+ dj *= mw.zw;
641
641
  }
642
642
  #else
643
643
  vec2 uv = vec2(0.0);
644
- vec2 cX = vec2(0.0);
644
+ vec2 dj = vec2(0.0);
645
645
  #endif
646
646
 
647
- #ifdef NUM_COAT_NORMAL_MAPS
647
+ #ifdef USE_COAT_NORMAL_FRAMES
648
648
  si.coatNormal = normal;
649
- float lw = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
649
+ #ifdef NUM_COAT_NORMAL_MAPS
650
+ float pQ = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
651
+ #endif
650
652
  #endif
651
653
  vec4 directionMaterial = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_DIRECTION_NORMAL);
652
- float tm = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_FILM_TEXTURE).x;
653
- if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 || tm != 0.0
654
- #ifdef NUM_COAT_NORMAL_MAPS
655
- || lw >= 0.0
654
+ float uL = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_FILM_TEXTURE).x;
655
+ if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 || uL != 0.0
656
+ #ifdef USE_COAT_NORMAL_FRAMES
657
+ || fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_COAT).w > 0.0
656
658
  #endif
657
659
  ) {
658
660
  vec3 dp1 = tri.p0 - tri.p2;
659
661
  vec3 dp2 = tri.p1 - tri.p2;
660
- vec4 aT = vec4(0.0);
662
+ vec4 aX = vec4(0.0);
661
663
  #ifdef USE_TANGENT
662
- aT = barycentric.x * texelFetch(tangentBuffer, i0, 0)
664
+ aX = barycentric.x * texelFetch(tangentBuffer, i0, 0)
663
665
  + barycentric.y * texelFetch(tangentBuffer, i1, 0)
664
666
  + barycentric.z * texelFetch(tangentBuffer, i2, 0);
665
667
  #endif
666
- mat2x3 eS = eE(normal, dp1, dp2, uv0-uv2, uv1-uv2, aT);
667
- si.geometryTangent = eS[0];
668
- si.geometryBitangent = eS[1];
669
- mat2x3 fY = eS;
668
+ mat2x3 fc = eP(normal, dp1, dp2, uv0-uv2, uv1-uv2, aX);
669
+ si.geometryTangent = fc[0];
670
+ si.geometryBitangent = fc[1];
671
+ mat2x3 gm = fc;
670
672
  #ifdef NUM_ANISOTROPY_MAPS
671
673
  if (directionMaterial.x >= 0.0 && mapUvChannel[int(directionMaterial.x)] > 0.5) {
672
674
  vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
673
675
  vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
674
676
  vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
675
- fY = eE(normal, dp1, dp2, a-c, b-c, (aT.w == 0.0 ? vec4(0.0) : aT));
677
+ gm = eP(normal, dp1, dp2, a-c, b-c, (aX.w == 0.0 ? vec4(0.0) : aX));
676
678
  }
677
679
  #endif
678
- si.directionTangent = fY[0];
679
- si.directionBitangent = fY[1];
680
- #ifdef NUM_COAT_NORMAL_MAPS
681
- if (lw >= 0.0) {
682
- int kC = int(lw);
683
- mat2x3 mi = eS;
684
- if (mapUvChannel[kC] > 0.5) {
680
+ si.directionTangent = gm[0];
681
+ si.directionBitangent = gm[1];
682
+ #if defined(USE_COAT_NORMAL_FRAMES) && defined(NUM_COAT_NORMAL_MAPS)
683
+ if (pQ >= 0.0) {
684
+ int lg = int(pQ);
685
+ mat2x3 mU = fc;
686
+ if (mapUvChannel[lg] > 0.5) {
685
687
  vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
686
688
  vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
687
689
  vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
688
- mi = eE(normal, dp1, dp2, a-c, b-c,
689
- aT.w == 0.0 ? vec4(0.0) : aT);
690
+ mU = eP(normal, dp1, dp2, a-c, b-c,
691
+ aX.w == 0.0 ? vec4(0.0) : aX);
690
692
  }
691
- vec3 decoded = sampleMap(kC, getMapUvSet(kC, uv, cX)).rgb * 2.0 - 1.0;
692
- vec3 mapped = mi[0] * decoded.x * directionMaterial.z
693
- + mi[1] * decoded.y * directionMaterial.w + normal * decoded.z;
693
+ vec3 decoded = sampleMap(lg, getMapUvSet(lg, uv, dj)).rgb * 2.0 - 1.0;
694
+ vec3 mapped = mU[0] * decoded.x * directionMaterial.z
695
+ + mU[1] * decoded.y * directionMaterial.w + normal * decoded.z;
694
696
  if (dot(mapped, mapped) > 1e-12) { si.coatNormal = normalize(mapped); }
695
697
  }
696
698
  #endif
697
699
  }
698
700
 
699
701
  si.uv = uv;
700
- si.uv1 = cX;
702
+ si.uv1 = dj;
701
703
 
702
704
  #ifdef USE_TANGENT
703
705
  vec3 t0 = texelFetch(tangentBuffer, i0, 0).xyz;
@@ -708,52 +710,52 @@ si.tangent = normalize(barycentric.x * t0 + barycentric.y * t1 + barycentric.z *
708
710
  #if defined(NUM_NORMAL_MAPS)
709
711
  vec3 dp1 = tri.p0 - tri.p2;
710
712
  vec3 dp2 = tri.p1 - tri.p2;
711
- vec2 od = uv0 - uv2;
712
- vec2 oe = uv1 - uv2;
713
- si.normal = om(
714
- si.materialIndex, uv, normal, dp1, dp2, od, oe
713
+ vec2 oW = uv0 - uv2;
714
+ vec2 oX = uv1 - uv2;
715
+ si.normal = pd(
716
+ si.materialIndex, uv, normal, dp1, dp2, oW, oX
715
717
  );
716
718
  #else
717
719
  si.normal = normal;
718
720
  #endif
719
721
  }
720
722
 
721
- struct eC {
723
+ struct eK {
722
724
  float t;
723
725
  vec3 barycentric;
724
726
  };
725
727
 
726
- vec4 dp(int i) {
727
- return kG(bvhBuffer, i, bvhColumns);
728
+ vec4 dJ(int i) {
729
+ return lm(bvhBuffer, i, bvhColumns);
728
730
  }
729
731
 
730
- vec4 bv(int i) {
731
- return kG(instancesBuffer, i, instancesColumns);
732
+ vec4 bF(int i) {
733
+ return lm(instancesBuffer, i, instancesColumns);
732
734
  }
733
735
 
734
736
 
735
737
 
736
- uint qT(uint value) {
738
+ uint rY(uint value) {
737
739
  value -= (value >> 1u) & 0x55555555u;
738
740
  value = (value & 0x33333333u) + ((value >> 2u) & 0x33333333u);
739
741
  value = (value + (value >> 4u)) & 0x0f0f0f0fu;
740
742
  return (value * 0x01010101u) >> 24u;
741
743
  }
742
744
 
743
- vec4 fc(uint lV) {
745
+ vec4 fp(uint mE) {
744
746
  return vec4(
745
- float(lV & 0xffu),
746
- float((lV >> 8u) & 0xffu),
747
- float((lV >> 16u) & 0xffu),
748
- float(lV >> 24u)
747
+ float(mE & 0xffu),
748
+ float((mE >> 8u) & 0xffu),
749
+ float((mE >> 16u) & 0xffu),
750
+ float(mE >> 24u)
749
751
  ) / 255.0;
750
752
  }
751
753
 
752
754
 
753
755
 
754
756
 
755
- eC fL(vec3 o, vec3 d, fA tri, int ey, vec3 gP, float tMax) {
756
- eC ti;
757
+ eK ga(vec3 o, vec3 d, fP tri, int eq, vec3 gY, float tMax) {
758
+ eK ti;
757
759
 
758
760
 
759
761
  vec3 p0t = tri.p0 - o;
@@ -761,20 +763,20 @@ vec3 p1t = tri.p1 - o;
761
763
  vec3 p2t = tri.p2 - o;
762
764
 
763
765
 
764
- if (ey == 0) {
766
+ if (eq == 0) {
765
767
  p0t = p0t.yzx;
766
768
  p1t = p1t.yzx;
767
769
  p2t = p2t.yzx;
768
- } else if (ey == 1) {
770
+ } else if (eq == 1) {
769
771
  p0t = p0t.zxy;
770
772
  p1t = p1t.zxy;
771
773
  p2t = p2t.zxy;
772
774
  }
773
775
 
774
776
 
775
- p0t.xy += gP.xy * p0t.z;
776
- p1t.xy += gP.xy * p1t.z;
777
- p2t.xy += gP.xy * p2t.z;
777
+ p0t.xy += gY.xy * p0t.z;
778
+ p1t.xy += gY.xy * p1t.z;
779
+ p2t.xy += gY.xy * p2t.z;
778
780
 
779
781
 
780
782
  vec3 e = vec3(
@@ -784,9 +786,9 @@ p0t.x * p1t.y - p0t.y * p1t.x
784
786
  );
785
787
 
786
788
  #ifdef DEPTH_QUERY_MODE
787
- vec3 rE = abs(vec3(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
789
+ vec3 sF = abs(vec3(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
788
790
  + abs(vec3(p1t.y * p2t.x, p2t.y * p0t.x, p0t.y * p1t.x));
789
- e = mix(e, vec3(0.0), lessThanEqual(abs(e), rE * 1e-6));
791
+ e = mix(e, vec3(0.0), lessThanEqual(abs(e), sF * 1e-6));
790
792
  #endif
791
793
 
792
794
 
@@ -799,19 +801,19 @@ float det = e.x + e.y + e.z;
799
801
  if (det == 0.0) return ti;
800
802
  #endif
801
803
 
802
- p0t.z *= gP.z;
803
- p1t.z *= gP.z;
804
- p2t.z *= gP.z;
805
- float rn = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
804
+ p0t.z *= gY.z;
805
+ p1t.z *= gY.z;
806
+ p2t.z *= gY.z;
807
+ float sw = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
806
808
 
807
809
 
808
- if (abs(rn) > abs(tMax * det)) {
810
+ if (abs(sw) > abs(tMax * det)) {
809
811
  return ti;
810
812
  }
811
813
 
812
- float sw = 1. / det;
813
- ti.t = rn * sw;
814
- ti.barycentric = e * sw;
814
+ float tN = 1. / det;
815
+ ti.t = sw * tN;
816
+ ti.barycentric = e * tN;
815
817
 
816
818
  return ti;
817
819
  }
@@ -822,18 +824,18 @@ vec3 max;
822
824
  };
823
825
 
824
826
 
825
- vec3 fb(vec3 d) {
827
+ vec3 fo(vec3 d) {
826
828
  #ifdef DEPTH_QUERY_MODE
827
- vec3 ap = mix(d, mix(vec3(1e-20), vec3(-1e-20), lessThan(d, vec3(0.0))), lessThan(abs(d), vec3(1e-20)));
828
- return 1.0 / ap;
829
+ vec3 aq = mix(d, mix(vec3(1e-20), vec3(-1e-20), lessThan(d, vec3(0.0))), lessThan(abs(d), vec3(1e-20)));
830
+ return 1.0 / aq;
829
831
  #else
830
832
  return 1.0 / d;
831
833
  #endif
832
834
  }
833
835
 
834
- vec3 eZ(vec3 gC, vec3 o) {
836
+ vec3 fk(vec3 gr, vec3 o) {
835
837
  #ifdef DEPTH_QUERY_MODE
836
- return abs(gC) * max(vec3(1.0), abs(o)) * 1e-6;
838
+ return abs(gr) * max(vec3(1.0), abs(o)) * 1e-6;
837
839
  #else
838
840
  return vec3(0.0);
839
841
  #endif
@@ -841,21 +843,21 @@ return vec3(0.0);
841
843
 
842
844
 
843
845
 
844
- float cM(vec3 o, vec3 d, vec3 vK, vec3 vJ, float tMax) {
846
+ float cU(vec3 o, vec3 d, vec3 xq, vec3 xp, float tMax) {
845
847
  #ifdef DEPTH_QUERY_MODE
846
- vec3 gC = fb(d);
847
- vec3 uR = (vK - o) * gC;
848
- vec3 uS = (vJ - o) * gC;
849
- vec3 bJ = eZ(gC, o);
848
+ vec3 gr = fo(d);
849
+ vec3 wG = (xq - o) * gr;
850
+ vec3 wI = (xp - o) * gr;
851
+ vec3 padding = fk(gr, o);
850
852
  #else
851
- vec3 uR = (vK - o) / d;
852
- vec3 uS = (vJ - o) / d;
853
- vec3 bJ = vec3(0.0);
853
+ vec3 wG = (xq - o) / d;
854
+ vec3 wI = (xp - o) / d;
855
+ vec3 padding = vec3(0.0);
854
856
  #endif
855
- vec3 mL = min(uR, uS) - bJ;
856
- vec3 rU = max(uR, uS) + bJ;
857
- float t0 = max(mL.x, max(mL.y, mL.z));
858
- float t1 = min(rU.x, min(rU.y, rU.z));
857
+ vec3 nJ = min(wG, wI) - padding;
858
+ vec3 sY = max(wG, wI) + padding;
859
+ float t0 = max(nJ.x, max(nJ.y, nJ.z));
860
+ float t1 = min(sY.x, min(sY.y, sY.z));
859
861
 
860
862
  return (t0 > t1 || t0 > tMax) ? -1.0 : (t0 > 0.0 ? t0 : t1);
861
863
  }
@@ -864,12 +866,12 @@ int maxDimension(vec3 v) {
864
866
  return v.x > v.y ? (v.x > v.z ? 0 : 2) : (v.y > v.z ? 1 : 2);
865
867
  }
866
868
 
867
- vec3 mv(vec3 d, int ey) {
869
+ vec3 nk(vec3 d, int eq) {
868
870
 
869
871
 
870
- if (ey == 0) {
872
+ if (eq == 0) {
871
873
  return vec3(-d.y, -d.z, 1.0) / d.x;
872
- } else if (ey == 1) {
874
+ } else if (eq == 1) {
873
875
  return vec3(-d.z, -d.x, 1.0) / d.y;
874
876
  } else {
875
877
  return vec3(-d.x, -d.y, 1.0) / d.z;
@@ -877,50 +879,50 @@ return vec3(-d.x, -d.y, 1.0) / d.z;
877
879
  }
878
880
 
879
881
 
880
- void cZ(in Ray ray, inout ad si, bool doubleSided) {
882
+ void intersectScene(in Ray ray, inout SurfaceInteraction si, bool doubleSided) {
881
883
  si.hit = false;
882
884
 
883
885
  if (isEmptyScene) {
884
886
  return;
885
887
  }
886
888
 
887
- int ey = maxDimension(abs(ray.d));
888
- vec3 gP = mv(ray.d, ey);
889
- int ao;
889
+ int eq = maxDimension(abs(ray.d));
890
+ vec3 gY = nk(ray.d, eq);
891
+ int ap;
890
892
 
891
893
  ${getBVHTraverseCode(glsl `
892
894
  si.triangleIndex = triangleIndex;
893
- lC = tri;
894
- hB = faceNormal;
895
- aB = hit.barycentric;
896
- hw = index;
897
- rb = true;
898
- ao = cf;
895
+ mk = tri;
896
+ hS = faceNormal;
897
+ aC = hit.barycentric;
898
+ hK = index;
899
+ sj = true;
900
+ ap = bY;
899
901
  `)}
900
902
 
901
- if (rb) {
902
- si.instanceIndex = ao;
903
- si.materialIndex = int(ae(floatBitsToInt(bv(ao * ${INSTANCE_VEC4_STRIDE}).z)).x);
903
+ if (sj) {
904
+ si.instanceIndex = ap;
905
+ si.materialIndex = int(ah(floatBitsToInt(bF(ap * ${INSTANCE_VEC4_STRIDE}).z)).x);
904
906
 
905
- ht(si, lC, aB, hw);
907
+ hH(si, mk, aC, hK);
906
908
  mat4 l2w = mat4(
907
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 5),
908
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 6),
909
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 7),
910
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 8)
909
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 5),
910
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 6),
911
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 7),
912
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 8)
911
913
  );
912
914
  mat4 w2l = mat4(
913
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 1),
914
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 2),
915
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 3),
916
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 4)
915
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 1),
916
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 2),
917
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 3),
918
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 4)
917
919
  );
918
- mat3 aD = transpose(mat3(w2l));
919
- si.faceNormal = normalize(aD * hB);
920
- si.vertexNormal = normalize(aD * si.vertexNormal);
921
- si.normal = normalize(aD * si.normal);
922
- #ifdef NUM_COAT_NORMAL_MAPS
923
- si.coatNormal = normalize(aD * si.coatNormal);
920
+ mat3 aH = transpose(mat3(w2l));
921
+ si.faceNormal = normalize(aH * hS);
922
+ si.vertexNormal = normalize(aH * si.vertexNormal);
923
+ si.normal = normalize(aH * si.normal);
924
+ #ifdef USE_COAT_NORMAL_FRAMES
925
+ si.coatNormal = normalize(aH * si.coatNormal);
924
926
  #endif
925
927
  #ifdef USE_TANGENT
926
928
  if (dot(si.tangent, si.tangent) > 0.0) {
@@ -937,7 +939,7 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
937
939
  }
938
940
 
939
941
 
940
- void iM(in Ray ray, inout ad si, int instanceIndex, float maxDistance) {
942
+ void intersectSceneBevel(in Ray ray, inout SurfaceInteraction si, int instanceIndex, float maxDistance) {
941
943
  si.hit = false;
942
944
 
943
945
  if (isEmptyScene) {
@@ -945,46 +947,46 @@ return;
945
947
  }
946
948
 
947
949
  bool doubleSided = true;
948
- int ey = maxDimension(abs(ray.d));
949
- vec3 gP = mv(ray.d, ey);
950
- int ao;
950
+ int eq = maxDimension(abs(ray.d));
951
+ vec3 gY = nk(ray.d, eq);
952
+ int ap;
951
953
 
952
954
  ${getBVHTraverseCode(glsl `
953
955
  si.triangleIndex = triangleIndex;
954
- lC = tri;
955
- hB = faceNormal;
956
- aB = hit.barycentric;
957
- hw = index;
958
- rb = true;
959
- ao = cf;
956
+ mk = tri;
957
+ hS = faceNormal;
958
+ aC = hit.barycentric;
959
+ hK = index;
960
+ sj = true;
961
+ ap = bY;
960
962
  `, glsl `
961
- if (cf != instanceIndex) {
963
+ if (bY != instanceIndex) {
962
964
  continue;
963
965
  }
964
966
  `, 'maxDistance')}
965
967
 
966
- if (rb) {
967
- si.instanceIndex = ao;
968
- si.materialIndex = int(ae(floatBitsToInt(bv(ao * ${INSTANCE_VEC4_STRIDE}).z)).x);
969
- ht(si, lC, aB, hw);
968
+ if (sj) {
969
+ si.instanceIndex = ap;
970
+ si.materialIndex = int(ah(floatBitsToInt(bF(ap * ${INSTANCE_VEC4_STRIDE}).z)).x);
971
+ hH(si, mk, aC, hK);
970
972
  mat4 l2w = mat4(
971
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 5),
972
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 6),
973
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 7),
974
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 8)
973
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 5),
974
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 6),
975
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 7),
976
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 8)
975
977
  );
976
978
  mat4 w2l = mat4(
977
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 1),
978
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 2),
979
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 3),
980
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 4)
979
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 1),
980
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 2),
981
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 3),
982
+ bF(ap * ${INSTANCE_VEC4_STRIDE} + 4)
981
983
  );
982
- mat3 aD = transpose(mat3(w2l));
983
- si.faceNormal = normalize(aD * hB);
984
- si.vertexNormal = normalize(aD * si.vertexNormal);
985
- si.normal = normalize(aD * si.normal);
986
- #ifdef NUM_COAT_NORMAL_MAPS
987
- si.coatNormal = normalize(aD * si.coatNormal);
984
+ mat3 aH = transpose(mat3(w2l));
985
+ si.faceNormal = normalize(aH * hS);
986
+ si.vertexNormal = normalize(aH * si.vertexNormal);
987
+ si.normal = normalize(aH * si.normal);
988
+ #ifdef USE_COAT_NORMAL_FRAMES
989
+ si.coatNormal = normalize(aH * si.coatNormal);
988
990
  #endif
989
991
  #ifdef USE_TANGENT
990
992
  if (dot(si.tangent, si.tangent) > 0.0) {
@@ -1000,35 +1002,35 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
1000
1002
  }
1001
1003
  }
1002
1004
 
1003
- bool ex(in Ray ray, float lightDistance, int jL) {
1005
+ bool intersectSceneShadow(in Ray ray, float lightDistance, int kn) {
1004
1006
 
1005
1007
  if (isEmptyScene) {
1006
1008
  return false;
1007
1009
  }
1008
1010
 
1009
1011
  bool doubleSided = true;
1010
- int ey = maxDimension(abs(ray.d));
1011
- vec3 gP = mv(ray.d, ey);
1012
+ int eq = maxDimension(abs(ray.d));
1013
+ vec3 gY = nk(ray.d, eq);
1012
1014
 
1013
1015
  ${getBVHTraverseCode(glsl `
1014
1016
 
1015
1017
 
1016
- bool jt = true;
1018
+ bool jS = true;
1017
1019
  vec3 barycentric = hit.barycentric;
1018
1020
  vec3 position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
1019
1021
 
1020
- if (jt) {
1022
+ if (jS) {
1021
1023
  #ifdef HAS_ALPHA
1022
- int materialIndex = int(ae(floatBitsToInt(bv(cf * ${INSTANCE_VEC4_STRIDE}).z)).x);
1023
- ivec2 i0 = gQ(index.x, vertexColumns);
1024
- ivec2 i1 = gQ(index.y, vertexColumns);
1025
- ivec2 i2 = gQ(index.z, vertexColumns);
1024
+ int materialIndex = int(ah(floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).z)).x);
1025
+ ivec2 i0 = hd(index.x, vertexColumns);
1026
+ ivec2 i1 = hd(index.y, vertexColumns);
1027
+ ivec2 i2 = hd(index.z, vertexColumns);
1026
1028
  ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
1027
1029
  ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
1028
1030
  ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
1029
1031
 
1030
1032
  if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
1031
- materialIndex = fm(m0, m1, m2, barycentric);
1033
+ materialIndex = fF(m0, m1, m2, barycentric);
1032
1034
  }
1033
1035
 
1034
1036
  int ii = materialIndex * MAT_DATA_SIZE;
@@ -1042,12 +1044,12 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
1042
1044
  vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
1043
1045
  vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
1044
1046
  vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
1045
- vec4 lM = fetchMatData(ii + MAT_ROW_UV);
1046
- int uvProjection = int(lM.r);
1047
+ vec4 mw = fetchMatData(ii + MAT_ROW_UV);
1048
+ int uvProjection = int(mw.r);
1047
1049
  if (uvProjection > 0) {
1048
- uv = gH(uvProjection, position, hB, lM.zw);
1050
+ uv = gU(uvProjection, position, hS, mw.zw);
1049
1051
  } else {
1050
- uv *= lM.zw;
1052
+ uv *= mw.zw;
1051
1053
  }
1052
1054
 
1053
1055
  alpha *= sampleMap(diffuseMapIndex, uv).a;
@@ -1061,32 +1063,32 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
1061
1063
  vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
1062
1064
  vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
1063
1065
  vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
1064
- vec4 lM = fetchMatData(ii + MAT_ROW_UV);
1065
- int uvProjection = int(lM.r);
1066
+ vec4 mw = fetchMatData(ii + MAT_ROW_UV);
1067
+ int uvProjection = int(mw.r);
1066
1068
  if (uvProjection > 0) {
1067
- uv = gH(uvProjection, position, hB, lM.zw);
1069
+ uv = gU(uvProjection, position, hS, mw.zw);
1068
1070
  } else {
1069
- uv *= lM.zw;
1071
+ uv *= mw.zw;
1070
1072
  }
1071
1073
  alpha *= sampleMap(alphaMapIndex, uv).g;
1072
1074
  }
1073
1075
  #endif
1074
1076
  float alphaCutoff = fetchMatData(ii + MAT_ROW_STANDALONE_MAPS).a;
1075
- alpha = lr(
1077
+ alpha = mb(
1076
1078
  alpha, int(fetchMatData(ii + MAT_ROW_ALPHA).w), alphaCutoff
1077
1079
  );
1078
- if (eo(0u) > alpha) {
1080
+ if (eC(0u) > alpha) {
1079
1081
 
1080
1082
  tMax = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
1081
- jt = false;
1083
+ jS = false;
1082
1084
  }
1083
1085
  #endif
1084
1086
  }
1085
- if (jt) {
1087
+ if (jS) {
1086
1088
  return true;
1087
1089
  }
1088
1090
  `, glsl `
1089
- if (triangleIndex == jL) {
1091
+ if (triangleIndex == kn) {
1090
1092
  continue;
1091
1093
  }
1092
1094
  `, 'min(max(lightDistance, 0.0), RAY_MAX_DISTANCE)')}