@meimu/mutracer 0.1.5 → 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 (526) 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 +10407 -8353
  6. package/docs/api.md +200 -10
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +1 -1
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +14 -5
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +11 -6
  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 -550
  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 +82 -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 +429 -429
  206. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +144 -144
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  208. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +801 -801
  209. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  210. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  211. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +49 -49
  212. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  213. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  214. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +102 -102
  215. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  216. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  217. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  218. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  219. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  220. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  221. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  222. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  223. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  224. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  225. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  226. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  227. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  228. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  229. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  230. package/lib/renderer/lightConstants.d.ts +10 -0
  231. package/lib/renderer/lightConstants.js +11 -0
  232. package/lib/renderer/lightConstants.js.map +1 -0
  233. package/lib/renderer/lightCore.d.ts +12 -0
  234. package/lib/renderer/lightCore.js +13 -0
  235. package/lib/renderer/lightCore.js.map +1 -0
  236. package/lib/renderer/lightSampling.d.ts +20 -17
  237. package/lib/renderer/lightSampling.js +123 -56
  238. package/lib/renderer/lightSampling.js.map +1 -1
  239. package/lib/renderer/lightsData.d.ts +21 -0
  240. package/lib/renderer/lightsData.js +192 -0
  241. package/lib/renderer/lightsData.js.map +1 -0
  242. package/lib/renderer/lightsUtil.d.ts +3 -26
  243. package/lib/renderer/lightsUtil.js +3 -153
  244. package/lib/renderer/lightsUtil.js.map +1 -1
  245. package/lib/renderer/materialBufferData.d.ts +70 -0
  246. package/lib/renderer/materialBufferData.js +2 -0
  247. package/lib/renderer/materialBufferData.js.map +1 -0
  248. package/lib/renderer/materialConstants.d.ts +11 -0
  249. package/lib/renderer/materialConstants.js +11 -0
  250. package/lib/renderer/materialConstants.js.map +1 -1
  251. package/lib/renderer/materialCore.d.ts +8 -0
  252. package/lib/renderer/materialCore.js +9 -0
  253. package/lib/renderer/materialCore.js.map +1 -0
  254. package/lib/renderer/materialEmission.d.ts +2 -2
  255. package/lib/renderer/materialEmission.js +3 -3
  256. package/lib/renderer/materialEmission.js.map +1 -1
  257. package/lib/renderer/materialLayout.d.ts +2 -101
  258. package/lib/renderer/materialLayout.js +110 -172
  259. package/lib/renderer/materialLayout.js.map +1 -1
  260. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  261. package/lib/renderer/materialLayoutSchema.js +172 -0
  262. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  263. package/lib/renderer/materialParams.d.ts +69 -0
  264. package/lib/renderer/materialParams.js +272 -0
  265. package/lib/renderer/materialParams.js.map +1 -0
  266. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  267. package/lib/renderer/materialTextureSlots.js +21 -8
  268. package/lib/renderer/materialTextureSlots.js.map +1 -1
  269. package/lib/renderer/materialTextures.d.ts +6 -0
  270. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  271. package/lib/renderer/materialTextures.js.map +1 -0
  272. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  273. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  274. package/lib/renderer/meshInstances.d.ts +4 -21
  275. package/lib/renderer/meshInstances.js +10 -56
  276. package/lib/renderer/meshInstances.js.map +1 -1
  277. package/lib/renderer/oidnNetwork.d.ts +2 -2
  278. package/lib/renderer/oidnNetwork.js +1 -1
  279. package/lib/renderer/oidnNetwork.js.map +1 -1
  280. package/lib/renderer/openPbrEnergyLut.js +850 -846
  281. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  282. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  283. package/lib/renderer/ownedDenoiser.js +2 -0
  284. package/lib/renderer/ownedDenoiser.js.map +1 -0
  285. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  286. package/lib/renderer/packedMeshInstances.js +80 -0
  287. package/lib/renderer/packedMeshInstances.js.map +1 -0
  288. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  289. package/lib/renderer/prepareMeshBVH.js +21 -642
  290. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  291. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  292. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  293. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  294. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  295. package/lib/renderer/progressiveScheduler.js +3 -0
  296. package/lib/renderer/progressiveScheduler.js.map +1 -1
  297. package/lib/renderer/renderPipeline.d.ts +3 -1
  298. package/lib/renderer/renderPipeline.js.map +1 -1
  299. package/lib/renderer/renderingLimits.d.ts +9 -0
  300. package/lib/renderer/renderingLimits.js +18 -0
  301. package/lib/renderer/renderingLimits.js.map +1 -0
  302. package/lib/renderer/sceneAssembly.d.ts +73 -0
  303. package/lib/renderer/sceneAssembly.js +109 -0
  304. package/lib/renderer/sceneAssembly.js.map +1 -0
  305. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  306. package/lib/renderer/sceneChangeCore.js +307 -0
  307. package/lib/renderer/sceneChangeCore.js.map +1 -0
  308. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  309. package/lib/renderer/sceneChangeDetector.js +24 -150
  310. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  311. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  312. package/lib/renderer/sceneLayoutSchema.js +111 -0
  313. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  314. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  315. package/lib/renderer/sceneLightChanges.js.map +1 -1
  316. package/lib/renderer/scenePreparation.d.ts +55 -0
  317. package/lib/renderer/scenePreparation.js +360 -0
  318. package/lib/renderer/scenePreparation.js.map +1 -0
  319. package/lib/renderer/scratchSampling.js +18 -18
  320. package/lib/renderer/scratchSampling.js.map +1 -1
  321. package/lib/renderer/shader.d.ts +2 -0
  322. package/lib/renderer/shader.js +2 -0
  323. package/lib/renderer/shader.js.map +1 -1
  324. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  325. package/lib/renderer/shaderCapabilities.js +55 -0
  326. package/lib/renderer/shaderCapabilities.js.map +1 -0
  327. package/lib/renderer/shaderCapacity.d.ts +2 -0
  328. package/lib/renderer/shaderCapacity.js +5 -0
  329. package/lib/renderer/shaderCapacity.js.map +1 -0
  330. package/lib/renderer/skyModel.d.ts +9 -0
  331. package/lib/renderer/skyModel.js +10 -0
  332. package/lib/renderer/skyModel.js.map +1 -0
  333. package/lib/renderer/textureAtlas.d.ts +60 -0
  334. package/lib/renderer/textureAtlas.js +145 -0
  335. package/lib/renderer/textureAtlas.js.map +1 -0
  336. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  337. package/lib/renderer/textureAtlasPixels.js +68 -0
  338. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  339. package/lib/renderer/util.d.ts +1 -1
  340. package/lib/renderer/util.js.map +1 -1
  341. package/lib/renderer/webgl.d.ts +9 -2
  342. package/lib/renderer/webgl.js +54 -9
  343. package/lib/renderer/webgl.js.map +1 -1
  344. package/lib/renderer/wgpuBindless.d.ts +26 -0
  345. package/lib/renderer/wgpuBindless.js +95 -0
  346. package/lib/renderer/wgpuBindless.js.map +1 -0
  347. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  348. package/lib/renderer/wgpuBindlessSource.js +51 -0
  349. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  350. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  351. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  352. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  353. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  354. package/lib/renderer/wgpuSceneUniform.js +125 -0
  355. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  356. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  357. package/lib/renderer/wgpuShaderSource.js +31 -0
  358. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  359. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  360. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  361. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  362. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  363. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  364. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  367. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  369. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  370. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  372. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  373. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  375. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  376. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  378. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  379. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  381. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  382. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  383. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  384. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  385. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +742 -705
  386. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  388. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  389. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  390. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +84 -82
  391. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  393. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  394. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  395. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  396. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  397. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  398. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  399. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  400. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  401. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  403. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  404. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  406. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  408. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  409. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  410. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  411. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  412. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  413. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  415. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  416. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  418. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  419. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  420. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  421. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  422. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  423. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  424. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  425. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  426. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  427. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  428. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  429. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  430. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  431. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  432. package/lib/scene/Camera.js +7 -3
  433. package/lib/scene/Camera.js.map +1 -1
  434. package/lib/scene/EnvironmentLight.d.ts +5 -9
  435. package/lib/scene/EnvironmentLight.js +4 -14
  436. package/lib/scene/EnvironmentLight.js.map +1 -1
  437. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  438. package/lib/scene/EnvironmentLightState.js +19 -0
  439. package/lib/scene/EnvironmentLightState.js.map +1 -0
  440. package/lib/scene/Geometry.d.ts +12 -6
  441. package/lib/scene/Geometry.js +37 -13
  442. package/lib/scene/Geometry.js.map +1 -1
  443. package/lib/scene/InstanceState.d.ts +39 -0
  444. package/lib/scene/InstanceState.js +77 -0
  445. package/lib/scene/InstanceState.js.map +1 -0
  446. package/lib/scene/InstancedMesh.d.ts +1 -1
  447. package/lib/scene/InstancedMesh.js +3 -0
  448. package/lib/scene/InstancedMesh.js.map +1 -1
  449. package/lib/scene/MaterialState.d.ts +209 -0
  450. package/lib/scene/MaterialState.js +231 -0
  451. package/lib/scene/MaterialState.js.map +1 -0
  452. package/lib/scene/Mesh.d.ts +4 -6
  453. package/lib/scene/Mesh.js +3 -11
  454. package/lib/scene/Mesh.js.map +1 -1
  455. package/lib/scene/MeshState.d.ts +20 -0
  456. package/lib/scene/MeshState.js +35 -0
  457. package/lib/scene/MeshState.js.map +1 -0
  458. package/lib/scene/OpenPBRMaterial.d.ts +6 -168
  459. package/lib/scene/OpenPBRMaterial.js +5 -223
  460. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  461. package/lib/scene/PixelTexture.d.ts +6 -0
  462. package/lib/scene/PixelTexture.js +10 -0
  463. package/lib/scene/PixelTexture.js.map +1 -0
  464. package/lib/scene/ProceduralSky.d.ts +24 -0
  465. package/lib/scene/ProceduralSky.js +40 -0
  466. package/lib/scene/ProceduralSky.js.map +1 -0
  467. package/lib/scene/RectLight.d.ts +2 -13
  468. package/lib/scene/RectLight.js +3 -21
  469. package/lib/scene/RectLight.js.map +1 -1
  470. package/lib/scene/RectLightState.d.ts +31 -0
  471. package/lib/scene/RectLightState.js +26 -0
  472. package/lib/scene/RectLightState.js.map +1 -0
  473. package/lib/scene/Scene.d.ts +15 -4
  474. package/lib/scene/Scene.js.map +1 -1
  475. package/lib/scene/SceneNode.js +7 -6
  476. package/lib/scene/SceneNode.js.map +1 -1
  477. package/lib/scene/Texture.d.ts +10 -41
  478. package/lib/scene/Texture.js +4 -33
  479. package/lib/scene/Texture.js.map +1 -1
  480. package/lib/scene/TextureState.d.ts +35 -0
  481. package/lib/scene/TextureState.js +35 -0
  482. package/lib/scene/TextureState.js.map +1 -0
  483. package/lib/scene/attributeData.d.ts +4 -0
  484. package/lib/scene/attributeData.js +10 -0
  485. package/lib/scene/attributeData.js.map +1 -0
  486. package/lib/scene/lightState.d.ts +8 -0
  487. package/lib/scene/lightState.js +2 -0
  488. package/lib/scene/lightState.js.map +1 -0
  489. package/lib/scene/openPbrSchema.d.ts +7 -12
  490. package/lib/scene/openPbrSchema.js +273 -28
  491. package/lib/scene/openPbrSchema.js.map +1 -1
  492. package/lib/scene/skyParameters.d.ts +20 -0
  493. package/lib/scene/skyParameters.js +28 -0
  494. package/lib/scene/skyParameters.js.map +1 -0
  495. package/lib/scene/textureData.d.ts +9 -0
  496. package/lib/scene/textureData.js +2 -0
  497. package/lib/scene/textureData.js.map +1 -0
  498. package/lib/scene/texturePixels.d.ts +6 -0
  499. package/lib/scene/texturePixels.js +10 -0
  500. package/lib/scene/texturePixels.js.map +1 -0
  501. package/lib/settings/display.d.ts +33 -0
  502. package/lib/settings/display.js +7 -0
  503. package/lib/settings/display.js.map +1 -1
  504. package/lib/settings/render.d.ts +25 -3
  505. package/lib/settings/render.js +3 -1
  506. package/lib/settings/render.js.map +1 -1
  507. package/lib/tinybvh/tinybvh.wasm +0 -0
  508. package/lib/util/commonGeometry.js +7 -7
  509. package/lib/util/commonGeometry.js.map +1 -1
  510. package/lib/util/fromTHREE.d.ts +4 -1
  511. package/lib/util/fromTHREE.js +18 -5
  512. package/lib/util/fromTHREE.js.map +1 -1
  513. package/lib/util/geometry.js +42 -29
  514. package/lib/util/geometry.js.map +1 -1
  515. package/lib/util/loadRGBE.js +3 -4
  516. package/lib/util/loadRGBE.js.map +1 -1
  517. package/lib/util/studioLighting.d.ts +18 -0
  518. package/lib/util/studioLighting.js +36 -0
  519. package/lib/util/studioLighting.js.map +1 -0
  520. package/lib/version.d.ts +1 -1
  521. package/lib/version.js +1 -1
  522. package/lib/version.js.map +1 -1
  523. package/llms.txt +4 -0
  524. package/package.json +31 -5
  525. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  526. 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
- fB tri = fB(
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 = fM(o, d, tri, ey, gQ, 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
- fB lB;
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
- gQ = mu(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 fK = cf < 0 ? 0u : floatBitsToUint(bv(cf * ${INSTANCE_VEC4_STRIDE}).x);
90
- int gS = int(fK >> 30u);
91
- int eW = int(fK & 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 (gS == 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 fG = dp(i + 1);
105
- vec4 mU = dp(i + 2);
106
- vec4 mV = dp(i + 3);
107
- vec4 mW = 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(fG.x);
118
- uint oP = floatBitsToUint(fG.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 gJ[12] = uint[12](
124
- floatBitsToUint(mU.x), floatBitsToUint(mU.y),
125
- floatBitsToUint(mU.z), floatBitsToUint(mU.w),
126
- floatBitsToUint(mV.x), floatBitsToUint(mV.y),
127
- floatBitsToUint(mV.z), floatBitsToUint(mV.w),
128
- floatBitsToUint(mW.x), floatBitsToUint(mW.y),
129
- floatBitsToUint(mW.z), floatBitsToUint(mW.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(fG.w)
136
- : floatBitsToUint(fG.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 lX = (slot & 3u) * 8u;
140
- uint kV = slot >> 2u;
141
- vec3 tH = vec3(
142
- float((gJ[kV] >> lX) & 0xffu),
143
- float((gJ[2u + kV] >> lX) & 0xffu),
144
- float((gJ[4u + kV] >> lX) & 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((gJ[6u + kV] >> lX) & 0xffu),
148
- float((gJ[8u + kV] >> lX) & 0xffu),
149
- float((gJ[10u + kV] >> lX) & 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 nr = internalMask & ((1u << slot) - 1u);
157
- uint sX = childBase + qT(nr);
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 = oP + 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 (gS == 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 (gS == 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 mg[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 gE = fb(d);
223
- vec3 bJ = eZ(gE, o);
224
- vec4 tx0 = (nodeMin.x + rw * ec.x - o.x) * gE.x;
225
- vec4 tx1 = (nodeMin.x + rt * ec.x - o.x) * gE.x;
226
- vec4 ty0 = (nodeMin.y + rA * ec.y - o.y) * gE.y;
227
- vec4 ty1 = (nodeMin.y + ru * ec.y - o.y) * gE.y;
228
- vec4 tz0 = (nodeMin.z + rB * ec.z - o.z) * gE.z;
229
- vec4 tz1 = (nodeMin.z + rv * ec.z - o.z) * gE.z;
230
- vec4 mK = 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, mK, greaterThan(mK, vec4(0.0)));
233
- distance = mix(distance, vec4(-1.0), greaterThan(mK, 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 (mg[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 nC = mg[el];
248
- int jI = int(nC);
249
- if ((nC & 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 fB {
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 nh(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 my(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 = nh(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 mB = bL(light, normalize(r.o - ve));
456
- if (mB <= 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 * mB * (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 ni;
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
- ni = m00.x;
512
+ oh = m00.x;
513
513
  } else if (rand < w01) {
514
- ni = m01.x;
514
+ oh = m01.x;
515
515
  } else if (rand < w02) {
516
- ni = m02.x;
516
+ oh = m02.x;
517
517
  } else if (rand < w10) {
518
- ni = m10.x;
518
+ oh = m10.x;
519
519
  } else if (rand < w11) {
520
- ni = m11.x;
520
+ oh = m11.x;
521
521
  } else if (rand < w12) {
522
- ni = m12.x;
522
+ oh = m12.x;
523
523
  } else if (rand < w20) {
524
- ni = m20.x;
524
+ oh = m20.x;
525
525
  } else if (rand < w21) {
526
- ni = m21.x;
526
+ oh = m21.x;
527
527
  } else {
528
- ni = m22.x;
528
+ oh = m22.x;
529
529
  }
530
- return int(ni);
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 oc, vec2 od, vec4 aT) {
538
- float determinant = oc.x * od.y - oc.y * od.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 * od.y - dp2 * oc.y) / determinant;
545
- vec3 db = (dp2 * oc.x - dp1 * od.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, fB 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 = gR(index.x, vertexColumns);
565
- ivec2 i1 = gR(index.y, vertexColumns);
566
- ivec2 i2 = gR(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,80 +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 lL = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_UV);
634
- int uvProjection = int(lL.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 = gI(uvProjection, si.position, normal, lL.zw);
637
- cX = uv;
636
+ uv = gU(uvProjection, si.position, normal, mw.zw);
637
+ dj = uv;
638
638
  } else {
639
- uv *= lL.zw;
640
- cX *= lL.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
647
  #ifdef USE_COAT_NORMAL_FRAMES
648
648
  si.coatNormal = normal;
649
649
  #ifdef NUM_COAT_NORMAL_MAPS
650
- float oU = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
650
+ float pQ = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
651
651
  #endif
652
652
  #endif
653
653
  vec4 directionMaterial = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_DIRECTION_NORMAL);
654
- float tm = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_FILM_TEXTURE).x;
655
- if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 || tm != 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
656
  #ifdef USE_COAT_NORMAL_FRAMES
657
657
  || fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_COAT).w > 0.0
658
658
  #endif
659
659
  ) {
660
660
  vec3 dp1 = tri.p0 - tri.p2;
661
661
  vec3 dp2 = tri.p1 - tri.p2;
662
- vec4 aT = vec4(0.0);
662
+ vec4 aX = vec4(0.0);
663
663
  #ifdef USE_TANGENT
664
- aT = barycentric.x * texelFetch(tangentBuffer, i0, 0)
664
+ aX = barycentric.x * texelFetch(tangentBuffer, i0, 0)
665
665
  + barycentric.y * texelFetch(tangentBuffer, i1, 0)
666
666
  + barycentric.z * texelFetch(tangentBuffer, i2, 0);
667
667
  #endif
668
- mat2x3 eS = eE(normal, dp1, dp2, uv0-uv2, uv1-uv2, aT);
669
- si.geometryTangent = eS[0];
670
- si.geometryBitangent = eS[1];
671
- mat2x3 fZ = 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;
672
672
  #ifdef NUM_ANISOTROPY_MAPS
673
673
  if (directionMaterial.x >= 0.0 && mapUvChannel[int(directionMaterial.x)] > 0.5) {
674
674
  vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
675
675
  vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
676
676
  vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
677
- fZ = 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));
678
678
  }
679
679
  #endif
680
- si.directionTangent = fZ[0];
681
- si.directionBitangent = fZ[1];
680
+ si.directionTangent = gm[0];
681
+ si.directionBitangent = gm[1];
682
682
  #if defined(USE_COAT_NORMAL_FRAMES) && defined(NUM_COAT_NORMAL_MAPS)
683
- if (oU >= 0.0) {
684
- int kC = int(oU);
685
- mat2x3 mh = eS;
686
- if (mapUvChannel[kC] > 0.5) {
683
+ if (pQ >= 0.0) {
684
+ int lg = int(pQ);
685
+ mat2x3 mU = fc;
686
+ if (mapUvChannel[lg] > 0.5) {
687
687
  vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
688
688
  vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
689
689
  vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
690
- mh = eE(normal, dp1, dp2, a-c, b-c,
691
- 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);
692
692
  }
693
- vec3 decoded = sampleMap(kC, getMapUvSet(kC, uv, cX)).rgb * 2.0 - 1.0;
694
- vec3 mapped = mh[0] * decoded.x * directionMaterial.z
695
- + mh[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;
696
696
  if (dot(mapped, mapped) > 1e-12) { si.coatNormal = normalize(mapped); }
697
697
  }
698
698
  #endif
699
699
  }
700
700
 
701
701
  si.uv = uv;
702
- si.uv1 = cX;
702
+ si.uv1 = dj;
703
703
 
704
704
  #ifdef USE_TANGENT
705
705
  vec3 t0 = texelFetch(tangentBuffer, i0, 0).xyz;
@@ -710,52 +710,52 @@ si.tangent = normalize(barycentric.x * t0 + barycentric.y * t1 + barycentric.z *
710
710
  #if defined(NUM_NORMAL_MAPS)
711
711
  vec3 dp1 = tri.p0 - tri.p2;
712
712
  vec3 dp2 = tri.p1 - tri.p2;
713
- vec2 oc = uv0 - uv2;
714
- vec2 od = uv1 - uv2;
715
- si.normal = ol(
716
- si.materialIndex, uv, normal, dp1, dp2, oc, od
713
+ vec2 oW = uv0 - uv2;
714
+ vec2 oX = uv1 - uv2;
715
+ si.normal = pd(
716
+ si.materialIndex, uv, normal, dp1, dp2, oW, oX
717
717
  );
718
718
  #else
719
719
  si.normal = normal;
720
720
  #endif
721
721
  }
722
722
 
723
- struct eC {
723
+ struct eK {
724
724
  float t;
725
725
  vec3 barycentric;
726
726
  };
727
727
 
728
- vec4 dp(int i) {
729
- return kG(bvhBuffer, i, bvhColumns);
728
+ vec4 dJ(int i) {
729
+ return lm(bvhBuffer, i, bvhColumns);
730
730
  }
731
731
 
732
- vec4 bv(int i) {
733
- return kG(instancesBuffer, i, instancesColumns);
732
+ vec4 bF(int i) {
733
+ return lm(instancesBuffer, i, instancesColumns);
734
734
  }
735
735
 
736
736
 
737
737
 
738
- uint qT(uint value) {
738
+ uint rY(uint value) {
739
739
  value -= (value >> 1u) & 0x55555555u;
740
740
  value = (value & 0x33333333u) + ((value >> 2u) & 0x33333333u);
741
741
  value = (value + (value >> 4u)) & 0x0f0f0f0fu;
742
742
  return (value * 0x01010101u) >> 24u;
743
743
  }
744
744
 
745
- vec4 fc(uint lU) {
745
+ vec4 fp(uint mE) {
746
746
  return vec4(
747
- float(lU & 0xffu),
748
- float((lU >> 8u) & 0xffu),
749
- float((lU >> 16u) & 0xffu),
750
- float(lU >> 24u)
747
+ float(mE & 0xffu),
748
+ float((mE >> 8u) & 0xffu),
749
+ float((mE >> 16u) & 0xffu),
750
+ float(mE >> 24u)
751
751
  ) / 255.0;
752
752
  }
753
753
 
754
754
 
755
755
 
756
756
 
757
- eC fM(vec3 o, vec3 d, fB tri, int ey, vec3 gQ, float tMax) {
758
- eC ti;
757
+ eK ga(vec3 o, vec3 d, fP tri, int eq, vec3 gY, float tMax) {
758
+ eK ti;
759
759
 
760
760
 
761
761
  vec3 p0t = tri.p0 - o;
@@ -763,20 +763,20 @@ vec3 p1t = tri.p1 - o;
763
763
  vec3 p2t = tri.p2 - o;
764
764
 
765
765
 
766
- if (ey == 0) {
766
+ if (eq == 0) {
767
767
  p0t = p0t.yzx;
768
768
  p1t = p1t.yzx;
769
769
  p2t = p2t.yzx;
770
- } else if (ey == 1) {
770
+ } else if (eq == 1) {
771
771
  p0t = p0t.zxy;
772
772
  p1t = p1t.zxy;
773
773
  p2t = p2t.zxy;
774
774
  }
775
775
 
776
776
 
777
- p0t.xy += gQ.xy * p0t.z;
778
- p1t.xy += gQ.xy * p1t.z;
779
- p2t.xy += gQ.xy * p2t.z;
777
+ p0t.xy += gY.xy * p0t.z;
778
+ p1t.xy += gY.xy * p1t.z;
779
+ p2t.xy += gY.xy * p2t.z;
780
780
 
781
781
 
782
782
  vec3 e = vec3(
@@ -786,9 +786,9 @@ p0t.x * p1t.y - p0t.y * p1t.x
786
786
  );
787
787
 
788
788
  #ifdef DEPTH_QUERY_MODE
789
- 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))
790
790
  + abs(vec3(p1t.y * p2t.x, p2t.y * p0t.x, p0t.y * p1t.x));
791
- 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));
792
792
  #endif
793
793
 
794
794
 
@@ -801,19 +801,19 @@ float det = e.x + e.y + e.z;
801
801
  if (det == 0.0) return ti;
802
802
  #endif
803
803
 
804
- p0t.z *= gQ.z;
805
- p1t.z *= gQ.z;
806
- p2t.z *= gQ.z;
807
- 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);
808
808
 
809
809
 
810
- if (abs(rn) > abs(tMax * det)) {
810
+ if (abs(sw) > abs(tMax * det)) {
811
811
  return ti;
812
812
  }
813
813
 
814
- float sw = 1. / det;
815
- ti.t = rn * sw;
816
- ti.barycentric = e * sw;
814
+ float tN = 1. / det;
815
+ ti.t = sw * tN;
816
+ ti.barycentric = e * tN;
817
817
 
818
818
  return ti;
819
819
  }
@@ -824,18 +824,18 @@ vec3 max;
824
824
  };
825
825
 
826
826
 
827
- vec3 fb(vec3 d) {
827
+ vec3 fo(vec3 d) {
828
828
  #ifdef DEPTH_QUERY_MODE
829
- vec3 ap = mix(d, mix(vec3(1e-20), vec3(-1e-20), lessThan(d, vec3(0.0))), lessThan(abs(d), vec3(1e-20)));
830
- 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;
831
831
  #else
832
832
  return 1.0 / d;
833
833
  #endif
834
834
  }
835
835
 
836
- vec3 eZ(vec3 gE, vec3 o) {
836
+ vec3 fk(vec3 gr, vec3 o) {
837
837
  #ifdef DEPTH_QUERY_MODE
838
- return abs(gE) * max(vec3(1.0), abs(o)) * 1e-6;
838
+ return abs(gr) * max(vec3(1.0), abs(o)) * 1e-6;
839
839
  #else
840
840
  return vec3(0.0);
841
841
  #endif
@@ -843,21 +843,21 @@ return vec3(0.0);
843
843
 
844
844
 
845
845
 
846
- 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) {
847
847
  #ifdef DEPTH_QUERY_MODE
848
- vec3 gE = fb(d);
849
- vec3 uR = (vK - o) * gE;
850
- vec3 uS = (vJ - o) * gE;
851
- vec3 bJ = eZ(gE, o);
848
+ vec3 gr = fo(d);
849
+ vec3 wG = (xq - o) * gr;
850
+ vec3 wI = (xp - o) * gr;
851
+ vec3 padding = fk(gr, o);
852
852
  #else
853
- vec3 uR = (vK - o) / d;
854
- vec3 uS = (vJ - o) / d;
855
- vec3 bJ = vec3(0.0);
853
+ vec3 wG = (xq - o) / d;
854
+ vec3 wI = (xp - o) / d;
855
+ vec3 padding = vec3(0.0);
856
856
  #endif
857
- vec3 mK = min(uR, uS) - bJ;
858
- vec3 rU = max(uR, uS) + bJ;
859
- float t0 = max(mK.x, max(mK.y, mK.z));
860
- 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));
861
861
 
862
862
  return (t0 > t1 || t0 > tMax) ? -1.0 : (t0 > 0.0 ? t0 : t1);
863
863
  }
@@ -866,12 +866,12 @@ int maxDimension(vec3 v) {
866
866
  return v.x > v.y ? (v.x > v.z ? 0 : 2) : (v.y > v.z ? 1 : 2);
867
867
  }
868
868
 
869
- vec3 mu(vec3 d, int ey) {
869
+ vec3 nk(vec3 d, int eq) {
870
870
 
871
871
 
872
- if (ey == 0) {
872
+ if (eq == 0) {
873
873
  return vec3(-d.y, -d.z, 1.0) / d.x;
874
- } else if (ey == 1) {
874
+ } else if (eq == 1) {
875
875
  return vec3(-d.z, -d.x, 1.0) / d.y;
876
876
  } else {
877
877
  return vec3(-d.x, -d.y, 1.0) / d.z;
@@ -879,50 +879,50 @@ return vec3(-d.x, -d.y, 1.0) / d.z;
879
879
  }
880
880
 
881
881
 
882
- void cZ(in Ray ray, inout ad si, bool doubleSided) {
882
+ void intersectScene(in Ray ray, inout SurfaceInteraction si, bool doubleSided) {
883
883
  si.hit = false;
884
884
 
885
885
  if (isEmptyScene) {
886
886
  return;
887
887
  }
888
888
 
889
- int ey = maxDimension(abs(ray.d));
890
- vec3 gQ = mu(ray.d, ey);
891
- int ao;
889
+ int eq = maxDimension(abs(ray.d));
890
+ vec3 gY = nk(ray.d, eq);
891
+ int ap;
892
892
 
893
893
  ${getBVHTraverseCode(glsl `
894
894
  si.triangleIndex = triangleIndex;
895
- lB = tri;
896
- hB = faceNormal;
897
- aB = hit.barycentric;
898
- hw = index;
899
- rb = true;
900
- ao = cf;
895
+ mk = tri;
896
+ hS = faceNormal;
897
+ aC = hit.barycentric;
898
+ hK = index;
899
+ sj = true;
900
+ ap = bY;
901
901
  `)}
902
902
 
903
- if (rb) {
904
- si.instanceIndex = ao;
905
- 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);
906
906
 
907
- ht(si, lB, aB, hw);
907
+ hH(si, mk, aC, hK);
908
908
  mat4 l2w = mat4(
909
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 5),
910
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 6),
911
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 7),
912
- 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)
913
913
  );
914
914
  mat4 w2l = mat4(
915
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 1),
916
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 2),
917
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 3),
918
- 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)
919
919
  );
920
- mat3 aD = transpose(mat3(w2l));
921
- si.faceNormal = normalize(aD * hB);
922
- si.vertexNormal = normalize(aD * si.vertexNormal);
923
- si.normal = normalize(aD * si.normal);
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
924
  #ifdef USE_COAT_NORMAL_FRAMES
925
- si.coatNormal = normalize(aD * si.coatNormal);
925
+ si.coatNormal = normalize(aH * si.coatNormal);
926
926
  #endif
927
927
  #ifdef USE_TANGENT
928
928
  if (dot(si.tangent, si.tangent) > 0.0) {
@@ -939,7 +939,7 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
939
939
  }
940
940
 
941
941
 
942
- 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) {
943
943
  si.hit = false;
944
944
 
945
945
  if (isEmptyScene) {
@@ -947,46 +947,46 @@ return;
947
947
  }
948
948
 
949
949
  bool doubleSided = true;
950
- int ey = maxDimension(abs(ray.d));
951
- vec3 gQ = mu(ray.d, ey);
952
- int ao;
950
+ int eq = maxDimension(abs(ray.d));
951
+ vec3 gY = nk(ray.d, eq);
952
+ int ap;
953
953
 
954
954
  ${getBVHTraverseCode(glsl `
955
955
  si.triangleIndex = triangleIndex;
956
- lB = tri;
957
- hB = faceNormal;
958
- aB = hit.barycentric;
959
- hw = index;
960
- rb = true;
961
- ao = cf;
956
+ mk = tri;
957
+ hS = faceNormal;
958
+ aC = hit.barycentric;
959
+ hK = index;
960
+ sj = true;
961
+ ap = bY;
962
962
  `, glsl `
963
- if (cf != instanceIndex) {
963
+ if (bY != instanceIndex) {
964
964
  continue;
965
965
  }
966
966
  `, 'maxDistance')}
967
967
 
968
- if (rb) {
969
- si.instanceIndex = ao;
970
- si.materialIndex = int(ae(floatBitsToInt(bv(ao * ${INSTANCE_VEC4_STRIDE}).z)).x);
971
- ht(si, lB, 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);
972
972
  mat4 l2w = mat4(
973
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 5),
974
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 6),
975
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 7),
976
- 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)
977
977
  );
978
978
  mat4 w2l = mat4(
979
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 1),
980
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 2),
981
- bv(ao * ${INSTANCE_VEC4_STRIDE} + 3),
982
- 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)
983
983
  );
984
- mat3 aD = transpose(mat3(w2l));
985
- si.faceNormal = normalize(aD * hB);
986
- si.vertexNormal = normalize(aD * si.vertexNormal);
987
- si.normal = normalize(aD * si.normal);
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
988
  #ifdef USE_COAT_NORMAL_FRAMES
989
- si.coatNormal = normalize(aD * si.coatNormal);
989
+ si.coatNormal = normalize(aH * si.coatNormal);
990
990
  #endif
991
991
  #ifdef USE_TANGENT
992
992
  if (dot(si.tangent, si.tangent) > 0.0) {
@@ -1002,35 +1002,35 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
1002
1002
  }
1003
1003
  }
1004
1004
 
1005
- bool ex(in Ray ray, float lightDistance, int jL) {
1005
+ bool intersectSceneShadow(in Ray ray, float lightDistance, int kn) {
1006
1006
 
1007
1007
  if (isEmptyScene) {
1008
1008
  return false;
1009
1009
  }
1010
1010
 
1011
1011
  bool doubleSided = true;
1012
- int ey = maxDimension(abs(ray.d));
1013
- vec3 gQ = mu(ray.d, ey);
1012
+ int eq = maxDimension(abs(ray.d));
1013
+ vec3 gY = nk(ray.d, eq);
1014
1014
 
1015
1015
  ${getBVHTraverseCode(glsl `
1016
1016
 
1017
1017
 
1018
- bool jt = true;
1018
+ bool jS = true;
1019
1019
  vec3 barycentric = hit.barycentric;
1020
1020
  vec3 position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
1021
1021
 
1022
- if (jt) {
1022
+ if (jS) {
1023
1023
  #ifdef HAS_ALPHA
1024
- int materialIndex = int(ae(floatBitsToInt(bv(cf * ${INSTANCE_VEC4_STRIDE}).z)).x);
1025
- ivec2 i0 = gR(index.x, vertexColumns);
1026
- ivec2 i1 = gR(index.y, vertexColumns);
1027
- ivec2 i2 = gR(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);
1028
1028
  ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
1029
1029
  ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
1030
1030
  ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
1031
1031
 
1032
1032
  if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
1033
- materialIndex = fm(m0, m1, m2, barycentric);
1033
+ materialIndex = fF(m0, m1, m2, barycentric);
1034
1034
  }
1035
1035
 
1036
1036
  int ii = materialIndex * MAT_DATA_SIZE;
@@ -1044,12 +1044,12 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
1044
1044
  vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
1045
1045
  vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
1046
1046
  vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
1047
- vec4 lL = fetchMatData(ii + MAT_ROW_UV);
1048
- int uvProjection = int(lL.r);
1047
+ vec4 mw = fetchMatData(ii + MAT_ROW_UV);
1048
+ int uvProjection = int(mw.r);
1049
1049
  if (uvProjection > 0) {
1050
- uv = gI(uvProjection, position, hB, lL.zw);
1050
+ uv = gU(uvProjection, position, hS, mw.zw);
1051
1051
  } else {
1052
- uv *= lL.zw;
1052
+ uv *= mw.zw;
1053
1053
  }
1054
1054
 
1055
1055
  alpha *= sampleMap(diffuseMapIndex, uv).a;
@@ -1063,32 +1063,32 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
1063
1063
  vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
1064
1064
  vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
1065
1065
  vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
1066
- vec4 lL = fetchMatData(ii + MAT_ROW_UV);
1067
- int uvProjection = int(lL.r);
1066
+ vec4 mw = fetchMatData(ii + MAT_ROW_UV);
1067
+ int uvProjection = int(mw.r);
1068
1068
  if (uvProjection > 0) {
1069
- uv = gI(uvProjection, position, hB, lL.zw);
1069
+ uv = gU(uvProjection, position, hS, mw.zw);
1070
1070
  } else {
1071
- uv *= lL.zw;
1071
+ uv *= mw.zw;
1072
1072
  }
1073
1073
  alpha *= sampleMap(alphaMapIndex, uv).g;
1074
1074
  }
1075
1075
  #endif
1076
1076
  float alphaCutoff = fetchMatData(ii + MAT_ROW_STANDALONE_MAPS).a;
1077
- alpha = lr(
1077
+ alpha = mb(
1078
1078
  alpha, int(fetchMatData(ii + MAT_ROW_ALPHA).w), alphaCutoff
1079
1079
  );
1080
- if (eo(0u) > alpha) {
1080
+ if (eC(0u) > alpha) {
1081
1081
 
1082
1082
  tMax = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
1083
- jt = false;
1083
+ jS = false;
1084
1084
  }
1085
1085
  #endif
1086
1086
  }
1087
- if (jt) {
1087
+ if (jS) {
1088
1088
  return true;
1089
1089
  }
1090
1090
  `, glsl `
1091
- if (triangleIndex == jL) {
1091
+ if (triangleIndex == kn) {
1092
1092
  continue;
1093
1093
  }
1094
1094
  `, 'min(max(lightDistance, 0.0), RAY_MAX_DISTANCE)')}