@meimu/mutracer 0.3.0 → 0.3.1

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 (304) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSES/FidelityFX-FSR.txt +19 -0
  3. package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
  4. package/THIRD_PARTY_NOTICES.md +18 -4
  5. package/dist/assets/bvh.worker.js +1 -1
  6. package/dist/mutracer.umd.js +6260 -5580
  7. package/docs/api.md +45 -18
  8. package/docs/materials.md +4 -2
  9. package/docs/performance.md +7 -0
  10. package/docs/post-processing.md +62 -9
  11. package/docs/progressive-rendering.md +3 -0
  12. package/docs/sampling.md +4 -0
  13. package/docs/technical/acceleration.md +52 -0
  14. package/docs/technical/aovs.md +79 -0
  15. package/docs/technical/caustics.md +109 -0
  16. package/docs/technical/continuous-spectrum.md +29 -0
  17. package/docs/technical/display-upscale.md +82 -0
  18. package/docs/technical/openpbr.md +99 -0
  19. package/docs/technical/pbrt-import.md +168 -0
  20. package/docs/technical/tiling.md +74 -0
  21. package/docs/technical/webgl.md +53 -0
  22. package/docs/viewer.md +11 -1
  23. package/lib/Display.d.ts +19 -5
  24. package/lib/Display.js +10 -7
  25. package/lib/Display.js.map +1 -1
  26. package/lib/Engine.d.ts +2 -1
  27. package/lib/Engine.js +30 -2
  28. package/lib/Engine.js.map +1 -1
  29. package/lib/Render.d.ts +20 -11
  30. package/lib/Render.js +32 -7
  31. package/lib/Render.js.map +1 -1
  32. package/lib/main.d.ts +3 -1
  33. package/lib/main.js +1 -0
  34. package/lib/main.js.map +1 -1
  35. package/lib/oidn.d.ts +1 -1
  36. package/lib/renderer/AovPrimitiveCache.js +39 -8
  37. package/lib/renderer/AovPrimitiveCache.js.map +1 -1
  38. package/lib/renderer/DisplayPostProcess.d.ts +8 -3
  39. package/lib/renderer/DisplayPostProcess.js +51 -18
  40. package/lib/renderer/DisplayPostProcess.js.map +1 -1
  41. package/lib/renderer/MaterialData.js +7 -2
  42. package/lib/renderer/MaterialData.js.map +1 -1
  43. package/lib/renderer/RenderingPipeline.d.ts +7 -1
  44. package/lib/renderer/RenderingPipeline.js.map +1 -1
  45. package/lib/renderer/TileRender.d.ts +2 -2
  46. package/lib/renderer/TileRender.js +128 -7
  47. package/lib/renderer/TileRender.js.map +1 -1
  48. package/lib/renderer/WGPUAov.d.ts +6 -1
  49. package/lib/renderer/WGPUAov.js +108 -14
  50. package/lib/renderer/WGPUAov.js.map +1 -1
  51. package/lib/renderer/WGPUCanvasSurface.js +12 -1
  52. package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
  53. package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
  54. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  55. package/lib/renderer/WGPURayTraceOutput.js +12 -12
  56. package/lib/renderer/WGPURayTracePass.d.ts +17 -4
  57. package/lib/renderer/WGPURayTracePass.js +194 -71
  58. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  59. package/lib/renderer/WGPURenderingPipeline.js +46 -40
  60. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  61. package/lib/renderer/WebGLAov.js +3 -3
  62. package/lib/renderer/WebGLAov.js.map +1 -1
  63. package/lib/renderer/WebGLFullQuadPass.d.ts +1 -1
  64. package/lib/renderer/WebGLFullQuadPass.js +8 -2
  65. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  66. package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
  67. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  68. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  69. package/lib/renderer/WebGLRayTracePass.d.ts +14 -10
  70. package/lib/renderer/WebGLRayTracePass.js +115 -111
  71. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  72. package/lib/renderer/WebGLRenderingPipeline.js +10 -3
  73. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  74. package/lib/renderer/WebGLSkyBaker.js +57 -57
  75. package/lib/renderer/aov.d.ts +13 -1
  76. package/lib/renderer/aov.js +21 -2
  77. package/lib/renderer/aov.js.map +1 -1
  78. package/lib/renderer/aovDisplay.js +2 -2
  79. package/lib/renderer/aovDisplay.js.map +1 -1
  80. package/lib/renderer/binnedSahBvh.d.ts +2 -1
  81. package/lib/renderer/binnedSahBvh.js +24 -17
  82. package/lib/renderer/binnedSahBvh.js.map +1 -1
  83. package/lib/renderer/bvhAccel.d.ts +3 -1
  84. package/lib/renderer/bvhAccel.js +36 -6
  85. package/lib/renderer/bvhAccel.js.map +1 -1
  86. package/lib/renderer/cameraUniform.d.ts +1 -1
  87. package/lib/renderer/cameraUniform.js +6 -2
  88. package/lib/renderer/cameraUniform.js.map +1 -1
  89. package/lib/renderer/compactVertices.d.ts +14 -0
  90. package/lib/renderer/compactVertices.js +124 -0
  91. package/lib/renderer/compactVertices.js.map +1 -0
  92. package/lib/renderer/easu.d.ts +11 -0
  93. package/lib/renderer/easu.js +156 -0
  94. package/lib/renderer/easu.js.map +1 -0
  95. package/lib/renderer/geometryUpdateState.d.ts +1 -0
  96. package/lib/renderer/geometryUpdateState.js.map +1 -1
  97. package/lib/renderer/geometryUpdates.js +3 -2
  98. package/lib/renderer/geometryUpdates.js.map +1 -1
  99. package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
  100. package/lib/renderer/glsl/aovReflectance.glsl.js +35 -35
  101. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
  102. package/lib/renderer/glsl/aovTrace.frag.js +44 -36
  103. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
  104. package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
  105. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
  106. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
  107. package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
  108. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
  109. package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
  110. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +8 -8
  111. package/lib/renderer/glsl/chunks/envMap.glsl.js +67 -67
  112. package/lib/renderer/glsl/chunks/intersect.glsl.js +390 -375
  113. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  114. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +120 -120
  115. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +562 -562
  116. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  117. package/lib/renderer/glsl/chunks/random.glsl.js +4 -4
  118. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +37 -35
  119. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  120. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +70 -74
  121. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  122. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -1
  123. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +107 -88
  124. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  125. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +11 -11
  126. package/lib/renderer/glsl/chunks/sampling.glsl.js +77 -77
  127. package/lib/renderer/glsl/chunks/sobol.glsl.js +70 -70
  128. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
  129. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
  130. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
  131. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  132. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  133. package/lib/renderer/glsl/depthQuery.frag.js +12 -6
  134. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  135. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
  136. package/lib/renderer/glsl/rayTrace.frag.js +233 -170
  137. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  138. package/lib/renderer/glsl/shadowCatcher.frag.js +10 -9
  139. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  140. package/lib/renderer/glsl/webglPipeline.frag.js +58 -58
  141. package/lib/renderer/gpuMemory.js +1 -1
  142. package/lib/renderer/gpuMemory.js.map +1 -1
  143. package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
  144. package/lib/renderer/openPbrEnergyLut.js +18 -1
  145. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  146. package/lib/renderer/pathLimits.d.ts +5 -4
  147. package/lib/renderer/pathLimits.js +6 -5
  148. package/lib/renderer/pathLimits.js.map +1 -1
  149. package/lib/renderer/prepareMeshBVH.d.ts +2 -0
  150. package/lib/renderer/prepareMeshBVH.js +5 -3
  151. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  152. package/lib/renderer/progressiveScheduler.js +1 -1
  153. package/lib/renderer/progressiveScheduler.js.map +1 -1
  154. package/lib/renderer/renderPipeline.d.ts +4 -0
  155. package/lib/renderer/renderPipeline.js +1 -0
  156. package/lib/renderer/renderPipeline.js.map +1 -1
  157. package/lib/renderer/researchTransport.d.ts +1 -1
  158. package/lib/renderer/researchTransport.js.map +1 -1
  159. package/lib/renderer/sceneAssembly.d.ts +1 -1
  160. package/lib/renderer/sceneAssembly.js +4 -3
  161. package/lib/renderer/sceneAssembly.js.map +1 -1
  162. package/lib/renderer/sceneChangeDetector.d.ts +1 -1
  163. package/lib/renderer/sceneChangeDetector.js +3 -1
  164. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  165. package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
  166. package/lib/renderer/sceneLayoutSchema.js +2 -2
  167. package/lib/renderer/sceneLayoutSchema.js.map +1 -1
  168. package/lib/renderer/scenePreparation.d.ts +3 -2
  169. package/lib/renderer/scenePreparation.js +18 -2
  170. package/lib/renderer/scenePreparation.js.map +1 -1
  171. package/lib/renderer/scratchSampling.js +6 -6
  172. package/lib/renderer/spectrum.js +2 -2
  173. package/lib/renderer/staticBvhPreparation.d.ts +9 -0
  174. package/lib/renderer/staticBvhPreparation.js +8 -2
  175. package/lib/renderer/staticBvhPreparation.js.map +1 -1
  176. package/lib/renderer/surfaceHit.d.ts +10 -0
  177. package/lib/renderer/surfaceHit.js +22 -0
  178. package/lib/renderer/surfaceHit.js.map +1 -0
  179. package/lib/renderer/tangentRequirements.d.ts +2 -0
  180. package/lib/renderer/tangentRequirements.js +7 -0
  181. package/lib/renderer/tangentRequirements.js.map +1 -0
  182. package/lib/renderer/textureAtlas.d.ts +4 -0
  183. package/lib/renderer/textureAtlas.js +48 -2
  184. package/lib/renderer/textureAtlas.js.map +1 -1
  185. package/lib/renderer/webgl.js +4 -0
  186. package/lib/renderer/webgl.js.map +1 -1
  187. package/lib/renderer/webglVertexAttributes.d.ts +17 -0
  188. package/lib/renderer/webglVertexAttributes.js +44 -0
  189. package/lib/renderer/webglVertexAttributes.js.map +1 -0
  190. package/lib/renderer/wgpuBindlessSource.js +2 -2
  191. package/lib/renderer/wgpuMaterialConstants.js +4 -3
  192. package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
  193. package/lib/renderer/wgpuSceneUniform.js +2 -2
  194. package/lib/renderer/wgpuSceneUniform.js.map +1 -1
  195. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  196. package/lib/renderer/wgpuShaderSource.js +1 -1
  197. package/lib/renderer/wgpuShaderSource.js.map +1 -1
  198. package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
  199. package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
  200. package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
  201. package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
  202. package/lib/renderer/wgsl/aovReflectance.wgsl.js +39 -39
  203. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
  204. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
  205. package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
  206. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
  207. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
  208. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
  209. package/lib/renderer/wgsl/aovTrace.wgsl.js +31 -31
  210. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
  211. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
  212. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
  213. package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
  214. package/lib/renderer/wgsl/causticLight.compute.d.ts +1 -1
  215. package/lib/renderer/wgsl/causticLight.compute.js +121 -119
  216. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -1
  217. package/lib/renderer/wgsl/chunks/background.wgsl.js +46 -46
  218. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +4 -4
  219. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +3 -3
  220. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +3 -3
  221. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  222. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +30 -30
  223. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
  224. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +550 -542
  225. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  226. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
  227. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +18 -16
  228. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  229. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
  230. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +70 -69
  231. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  232. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +593 -593
  233. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +118 -118
  234. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  235. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +4 -1
  236. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +32 -26
  237. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  238. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +114 -114
  239. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  240. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +159 -137
  241. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  242. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +8 -8
  243. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +74 -74
  244. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +74 -74
  245. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
  246. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
  247. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
  248. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  249. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
  250. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
  251. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
  252. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
  253. package/lib/renderer/wgsl/compose.frag.wgsl.js +99 -97
  254. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  255. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  256. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  257. package/lib/renderer/wgsl/depthQuery.wgsl.js +11 -2
  258. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  259. package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
  260. package/lib/renderer/wgsl/easu.wgsl.js +80 -0
  261. package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
  262. package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
  263. package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
  264. package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
  265. package/lib/renderer/wgsl/jnlm.compute.js +74 -74
  266. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
  267. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  268. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
  269. package/lib/renderer/wgsl/photonMap.compute.js +89 -89
  270. package/lib/renderer/wgsl/proceduralSky.compute.js +61 -61
  271. package/lib/renderer/wgsl/rayTrace.compute.d.ts +14 -0
  272. package/lib/renderer/wgsl/rayTrace.compute.js +395 -333
  273. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  274. package/lib/scene/Scene.js.map +1 -1
  275. package/lib/settings/render.d.ts +11 -0
  276. package/lib/settings/render.js +1 -0
  277. package/lib/settings/render.js.map +1 -1
  278. package/lib/util/fromTHREE.js +21 -14
  279. package/lib/util/fromTHREE.js.map +1 -1
  280. package/lib/version.d.ts +1 -1
  281. package/lib/version.js +1 -1
  282. package/lib/version.js.map +1 -1
  283. package/package.json +5 -2
  284. package/lib/oidnBundledWeights.cdn.d.ts +0 -2
  285. package/lib/oidnBundledWeights.cdn.js +0 -5
  286. package/lib/oidnBundledWeights.cdn.js.map +0 -1
  287. package/lib/renderer/bvh.worker.d.ts +0 -1
  288. package/lib/renderer/bvh.worker.js +0 -16
  289. package/lib/renderer/bvh.worker.js.map +0 -1
  290. package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
  291. package/lib/renderer/bvhWorkerBuild.js +0 -17
  292. package/lib/renderer/bvhWorkerBuild.js.map +0 -1
  293. package/lib/renderer/lightCore.d.ts +0 -12
  294. package/lib/renderer/lightCore.js +0 -13
  295. package/lib/renderer/lightCore.js.map +0 -1
  296. package/lib/renderer/materialCore.d.ts +0 -8
  297. package/lib/renderer/materialCore.js +0 -9
  298. package/lib/renderer/materialCore.js.map +0 -1
  299. package/lib/scene/PixelTexture.d.ts +0 -6
  300. package/lib/scene/PixelTexture.js +0 -10
  301. package/lib/scene/PixelTexture.js.map +0 -1
  302. package/lib/util/studioLighting.d.ts +0 -18
  303. package/lib/util/studioLighting.js +0 -36
  304. package/lib/util/studioLighting.js.map +0 -1
@@ -1,56 +1,56 @@
1
1
  const displacementCommon = /*wgsl*/ `
2
2
 
3
3
 
4
- struct jI {
4
+ struct kn {
5
5
  barycentric: vec3f,
6
6
  t: f32,
7
7
  normal: vec3f,
8
8
 
9
9
  }
10
10
 
11
- fn xp(
11
+ fn zq(
12
12
  uu: f32,
13
- vK: vec3f, vL: vec3f,
13
+ xC: vec3f, xE: vec3f,
14
14
  eAC: vec3f, eBD: vec3f,
15
- iM: vec3f,
16
- qK: f32,
17
- qM: ptr<function, f32>
15
+ jn: vec3f,
16
+ rZ: f32,
17
+ sb: ptr<function, f32>
18
18
  ) -> bool {
19
19
  if (uu >= 0.0 && uu <= 1.0) {
20
- let pAB = mix(vK, vL, uu);
20
+ let pAB = mix(xC, xE, uu);
21
21
  let pCD = mix(eAC, eBD, uu);
22
- var n = cross(iM, pCD);
23
- let xH = 1.0 / dot(n, n);
22
+ var n = cross(jn, pCD);
23
+ let zH = 1.0 / dot(n, n);
24
24
  n = cross(n, pAB);
25
- let tt = dot(n, pCD) * xH;
26
- let vv = dot(n, iM) * xH;
27
- if (vv >= 0.0 && vv <= 1.0 && tt > qK && tt < *qM) {
28
- *qM = tt;
25
+ let tt = dot(n, pCD) * zH;
26
+ let vv = dot(n, jn) * zH;
27
+ if (vv >= 0.0 && vv <= 1.0 && tt > rZ && tt < *sb) {
28
+ *sb = tt;
29
29
  return true;
30
30
  }
31
31
  }
32
32
  return false;
33
33
  }
34
34
 
35
- fn hc(
36
- qx: vec3f, iM: vec3f, qK: f32, uR: f32,
35
+ fn hA(
36
+ rK: vec3f, jn: vec3f, rZ: f32, wE: f32,
37
37
  pA: vec3f, pB: vec3f, pC: vec3f, pD: vec3f,
38
- qM: ptr<function, f32>
38
+ sb: ptr<function, f32>
39
39
  ) -> bool {
40
40
  let eAB = pB - pA;
41
41
  let eAC = pC - pA;
42
42
  let eBD = pD - pB;
43
43
  let eCD = pD - pC;
44
- let vK = pA - qx;
45
- let vL = pB - qx;
44
+ let xC = pA - rK;
45
+ let xE = pB - rK;
46
46
 
47
47
  var u1: f32;
48
48
  var u2: f32;
49
49
  {
50
50
  let qN = cross(eAB, -eCD);
51
- let a = dot(qN, iM);
52
- var b = dot(cross(vL, iM), eBD);
53
- let c = dot(cross(vK, iM), eAC);
51
+ let a = dot(qN, jn);
52
+ var b = dot(cross(xE, jn), eBD);
53
+ let c = dot(cross(xC, jn), eAC);
54
54
  b -= a + c;
55
55
 
56
56
  let det = b * b - 4.0 * a * c;
@@ -62,19 +62,19 @@ if (a == 0.0) {
62
62
  u1 = -c / b;
63
63
  u2 = -1.0;
64
64
  } else {
65
- let yg = sqrt(det);
66
- let yN = -0.5 * (b + sign(b) * yg);
67
- u1 = yN / a;
68
- u2 = c / yN;
65
+ let Ad = sqrt(det);
66
+ let AO = -0.5 * (b + sign(b) * Ad);
67
+ u1 = AO / a;
68
+ u2 = c / AO;
69
69
  }
70
70
  }
71
71
 
72
- *qM = uR;
72
+ *sb = wE;
73
73
 
74
74
  var hit = false;
75
75
 
76
- hit = xp(u1, vK, vL, eAC, eBD, iM, qK, qM) ||
77
- xp(u2, vK, vL, eAC, eBD, iM, qK, qM);
76
+ hit = zq(u1, xC, xE, eAC, eBD, jn, rZ, sb) ||
77
+ zq(u2, xC, xE, eAC, eBD, jn, rZ, sb);
78
78
  if (!hit) {
79
79
  return false;
80
80
  }
@@ -82,8 +82,8 @@ return false;
82
82
  return true;
83
83
  }
84
84
 
85
- fn tO(
86
- qx: vec3f, iM: vec3f, qK: f32, uR: f32,
85
+ fn vt(
86
+ rK: vec3f, jn: vec3f, rZ: f32, wE: f32,
87
87
  pA: vec3f, pB: vec3f, pC: vec3f,
88
88
  pD: vec3f, pE: vec3f, pF: vec3f,
89
89
 
@@ -93,50 +93,50 @@ bN: ptr<function, f32>
93
93
  *bO = INF;
94
94
  *bN = -INF;
95
95
 
96
- let yv = maxDimension(abs(iM));
97
- let gH = mU(iM, yv);
96
+ let Aw = maxDimension(abs(jn));
97
+ let gZ = nV(jn, Aw);
98
98
  var tt: f32;
99
99
 
100
- tt = fM(
101
- qx, iM,
102
- fw(pC, pB, pA), yv, gH, INF
100
+ tt = fY(
101
+ rK, jn,
102
+ fL(pC, pB, pA), Aw, gZ, INF
103
103
  ).t;
104
104
  if (tt > 0.0) {
105
105
  *bO = min(*bO, tt);
106
106
  *bN = max(*bN, tt);
107
107
  }
108
- tt = fM(
109
- qx, iM,
110
- fw(pD, pE, pF), yv, gH, INF
108
+ tt = fY(
109
+ rK, jn,
110
+ fL(pD, pE, pF), Aw, gZ, INF
111
111
  ).t;
112
112
  if (tt > 0.0) {
113
113
  *bO = min(*bO, tt);
114
114
  *bN = max(*bN, tt);
115
115
  }
116
- if (hc(
117
- qx, iM, -INF, INF,
116
+ if (hA(
117
+ rK, jn, -INF, INF,
118
118
  pA, pB, pD, pE,
119
119
  &tt)) {
120
120
  *bO = min(*bO, tt);
121
121
  *bN = max(*bN, tt);
122
122
  }
123
- if (hc(
124
- qx, iM, -INF, INF,
123
+ if (hA(
124
+ rK, jn, -INF, INF,
125
125
  pB, pC, pE, pF,
126
126
  &tt)) {
127
127
  *bO = min(*bO, tt);
128
128
  *bN = max(*bN, tt);
129
129
  }
130
- if (hc(
131
- qx, iM, -INF, INF,
130
+ if (hA(
131
+ rK, jn, -INF, INF,
132
132
  pC, pA, pF, pD,
133
133
  &tt)) {
134
134
  *bO = min(*bO, tt);
135
135
  *bN = max(*bN, tt);
136
136
  }
137
137
 
138
- *bO = max(*bO, qK);
139
- *bN = min(*bN, uR);
138
+ *bO = max(*bO, rZ);
139
+ *bN = min(*bN, wE);
140
140
 
141
141
  return *bO <= *bN && *bN > 0.0;
142
142
  }
@@ -145,7 +145,7 @@ export default /* wgsl */ `
145
145
 
146
146
  ${displacementCommon}
147
147
 
148
- fn mg(p: vec3f, p0: vec3f, p1: vec3f, p2: vec3f) -> vec3f {
148
+ fn mY(p: vec3f, p0: vec3f, p1: vec3f, p2: vec3f) -> vec3f {
149
149
  let v0 = p1 - p0;
150
150
  let v1 = p2 - p0;
151
151
  let v2 = p - p0;
@@ -156,9 +156,9 @@ let d11 = dot(v1, v1);
156
156
  let d20 = dot(v2, v0);
157
157
  let d21 = dot(v2, v1);
158
158
 
159
- let vF = 1.0 / (d00 * d11 - d01 * d01);
160
- let v = clamp((d11 * d20 - d01 * d21) * vF, 0.0, 1.0);
161
- let w = clamp((d00 * d21 - d01 * d20) * vF, 0.0, 1.0);
159
+ let xt = 1.0 / (d00 * d11 - d01 * d01);
160
+ let v = clamp((d11 * d20 - d01 * d21) * xt, 0.0, 1.0);
161
+ let w = clamp((d00 * d21 - d01 * d20) * xt, 0.0, 1.0);
162
162
  let u = 1.0 - v - w;
163
163
 
164
164
  return vec3f(u, v, w);
@@ -166,59 +166,59 @@ return vec3f(u, v, w);
166
166
 
167
167
 
168
168
 
169
- fn pS(
170
- rl: vec3f, rP: vec3f, yR: f32,
169
+ fn qW(
170
+ sC: vec3f, th: vec3f, AU: f32,
171
171
  _pA: vec3f, _pB: vec3f, _pC: vec3f,
172
172
  _nA: vec3f, _nB: vec3f, _nC: vec3f,
173
- xQ: vec2f, xR: vec2f, xS: vec2f,
173
+ zN: vec2f, zO: vec2f, zP: vec2f,
174
174
 
175
- jW: i32,
176
- xP: vec2f,
175
+ kC: i32,
176
+ zM: vec2f,
177
177
 
178
- yE: f32, yD: f32,
178
+ AC: f32, AB: f32,
179
179
  hScale: f32,
180
- wG: f32,
181
- vR: f32,
180
+ yF: f32,
181
+ xM: f32,
182
182
  uvProjection: i32,
183
183
  uvScale: vec2f,
184
- ym: bool,
185
- se: bool
186
- ) -> jI {
184
+ Ak: bool,
185
+ tE: bool
186
+ ) -> kn {
187
187
 
188
188
 
189
189
 
190
- let DT = select(max(abs(hScale) / 32.0, 1e-12), vR, vR > 0.0);
191
- let dt = DT / length(rP);
190
+ let DT = select(max(abs(hScale) / 32.0, 1e-12), xM, xM > 0.0);
191
+ let dt = DT / length(th);
192
192
  let dbx = 0.001;
193
193
  let dby = 0.001;
194
194
 
195
- var result: jI;
195
+ var result: kn;
196
196
  result.t = INF;
197
197
 
198
198
  var bO = INF;
199
199
  var bN = -INF;
200
200
 
201
- let sb = sign(hScale);
202
- let wZ = abs(hScale);
201
+ let tC = sign(hScale);
202
+ let yZ = abs(hScale);
203
203
 
204
- let uG = sb * normalize(cross(_pB - _pA, _pC - _pA));
204
+ let wp = tC * normalize(cross(_pB - _pA, _pC - _pA));
205
205
 
206
206
 
207
- let dA = dot(_nA, uG);
208
- let dB = dot(_nB, uG);
209
- let dC = dot(_nC, uG);
207
+ let dA = dot(_nA, wp);
208
+ let dB = dot(_nB, wp);
209
+ let dC = dot(_nC, wp);
210
210
 
211
- var minH = yE * hScale * min(min(dA, dB), dC);
212
- var maxH = yD * hScale * max(max(dA, dB), dC);
211
+ var minH = AC * hScale * min(min(dA, dB), dC);
212
+ var maxH = AB * hScale * max(max(dA, dB), dC);
213
213
 
214
214
 
215
215
 
216
216
 
217
- let vM = abs(maxH) - abs(minH);
217
+ let xG = abs(maxH) - abs(minH);
218
218
 
219
219
 
220
220
  minH = sign(minH) * max(abs(minH) - DT * 2.0, 0.0);
221
- if (vM < DT * 2.0) {
221
+ if (xG < DT * 2.0) {
222
222
  maxH = sign(maxH) * min(abs(maxH) + DT * 2.0, abs(hScale));
223
223
  }
224
224
 
@@ -230,8 +230,8 @@ let pD = _pA + _nA * maxH / dA;
230
230
  let pE = _pB + _nB * maxH / dB;
231
231
  let pF = _pC + _nC * maxH / dC;
232
232
 
233
- if (!tO(
234
- rl, rP, 0.0, INF,
233
+ if (!vt(
234
+ sC, th, 0.0, INF,
235
235
  pA, pB, pC,
236
236
  pD, pE, pF,
237
237
 
@@ -240,59 +240,59 @@ pD, pE, pF,
240
240
  return result;
241
241
  }
242
242
 
243
- var yO = false;
243
+ var AQ = false;
244
244
 
245
245
  if (bN == bO) {
246
246
  bO = 0.0;
247
247
  }
248
248
 
249
- var t = bO + dt * ek(2u);
250
- var s = rl + rP * t;
251
- var vE = dot(s - _pA, uG);
252
- var hSurf = select(0.0, INF, sb < 0.0);
249
+ var t = bO + dt * cm(2u);
250
+ var s = sC + th * t;
251
+ var xr = dot(s - _pA, wp);
252
+ var hSurf = select(0.0, INF, tC < 0.0);
253
253
 
254
- var c0 = _pA + _nA * vE / dA;
255
- var c1 = _pB + _nB * vE / dB;
256
- var c2 = _pC + _nC * vE / dC;
254
+ var c0 = _pA + _nA * xr / dA;
255
+ var c1 = _pB + _nB * xr / dB;
256
+ var c2 = _pC + _nC * xr / dC;
257
257
 
258
- var vc: vec3f;
258
+ var wQ: vec3f;
259
259
 
260
- vE = abs(vE);
260
+ xr = abs(xr);
261
261
 
262
- var hDiff = vE - hSurf;
263
- var qL = hDiff;
262
+ var hDiff = xr - hSurf;
263
+ var sa = hDiff;
264
264
  var step = 0;
265
265
 
266
266
  while (true) {
267
267
 
268
- let b = mg(s, c0, c1, c2);
268
+ let b = mY(s, c0, c1, c2);
269
269
 
270
- vc = _pA * b.x + _pB * b.y + _pC * b.z;
270
+ wQ = _pA * b.x + _pB * b.y + _pC * b.z;
271
271
 
272
- vE = distance(vc, s);
272
+ xr = distance(wQ, s);
273
273
 
274
274
  var uv: vec2f;
275
275
  if (uvProjection > 0) {
276
276
  let n = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
277
- uv = gE(uvProjection, vc - (_nA * b.x + _nB * b.y + _nC * b.z) * wG, n) * uvScale;
277
+ uv = gW(uvProjection, wQ - (_nA * b.x + _nB * b.y + _nC * b.z) * yF, n) * uvScale;
278
278
  }
279
279
  else {
280
- uv = xQ * b.x + xR * b.y + xS * b.z;
280
+ uv = zN * b.x + zO * b.y + zP * b.z;
281
281
  }
282
- let h = sampleMap(jW, uv).x;
282
+ let h = sampleMap(kC, uv).x;
283
283
 
284
- hSurf = max(wZ * h, DT);
284
+ hSurf = max(yZ * h, DT);
285
285
 
286
286
 
287
- let dh = dot(uG, s - c0);
287
+ let dh = dot(wp, s - c0);
288
288
  c0 = c0 + _nA * dh / dA;
289
289
  c1 = c1 + _nB * dh / dB;
290
290
  c2 = c2 + _nC * dh / dC;
291
291
 
292
- qL = hDiff;
293
- hDiff = vE - hSurf;
292
+ sa = hDiff;
293
+ hDiff = xr - hSurf;
294
294
 
295
- if (!(select(hDiff * sb, hDiff * qL, se) > 0.0
295
+ if (!(select(hDiff * tC, hDiff * sa, tE) > 0.0
296
296
  && t < bN + dt)
297
297
 
298
298
  && step > 0) {
@@ -301,15 +301,15 @@ break;
301
301
 
302
302
  step++;
303
303
  t = t + dt;
304
- s = s + rP * dt;
304
+ s = s + th * dt;
305
305
  }
306
306
 
307
- if (select(hDiff * sb, hDiff * qL, se) <= 0.0) {
308
- let dtt = dt * (abs(hDiff) / (abs(qL) + abs(hDiff) + EPS));
307
+ if (select(hDiff * tC, hDiff * sa, tE) <= 0.0) {
308
+ let dtt = dt * (abs(hDiff) / (abs(sa) + abs(hDiff) + EPS));
309
309
  t = t - dtt;
310
310
 
311
- let yP = rl + rP * t;
312
- let b = mg(yP, c0, c1, c2);
311
+ let AS = sC + th * t;
312
+ let b = mY(AS, c0, c1, c2);
313
313
 
314
314
  let N = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
315
315
 
@@ -317,33 +317,33 @@ let p_a = _pA * b.x + _pB * b.y + _pC * b.z;
317
317
  let p_b = _pA * (b.x + dbx) + _pB * b.y + _pC * (b.z - dbx);
318
318
  let p_c = _pA * b.x + _pB * (b.y + dby) + _pC * (b.z - dby);
319
319
 
320
- var yA: vec2f;
321
- var yB: vec2f;
322
- var yC: vec2f;
320
+ var Ay: vec2f;
321
+ var Az: vec2f;
322
+ var AA: vec2f;
323
323
 
324
324
  if (uvProjection > 0) {
325
325
  let NA = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
326
326
  let NB = normalize(_nA * (b.x + dbx) + _nB * b.y + _nC * (b.z - dbx));
327
327
  let NC = normalize(_nA * b.x + _nB * (b.y + dby) + _nC * (b.z - dby));
328
- yA = gE(uvProjection, p_a - (_nA * b.x + _nB * b.y + _nC * b.z) * wG, NA) * uvScale;
329
- yB = gE(uvProjection, p_b - (_nA * (b.x + dbx) + _nB * b.y + _nC * (b.z - dbx)) * wG, NB) * uvScale;
330
- yC = gE(uvProjection, p_c - (_nA * b.x + _nB * (b.y + dby) + _nC * (b.z - dby)) * wG, NC) * uvScale;
328
+ Ay = gW(uvProjection, p_a - (_nA * b.x + _nB * b.y + _nC * b.z) * yF, NA) * uvScale;
329
+ Az = gW(uvProjection, p_b - (_nA * (b.x + dbx) + _nB * b.y + _nC * (b.z - dbx)) * yF, NB) * uvScale;
330
+ AA = gW(uvProjection, p_c - (_nA * b.x + _nB * (b.y + dby) + _nC * (b.z - dby)) * yF, NC) * uvScale;
331
331
  }
332
332
  else {
333
- yA = xQ * b.x + xR * b.y + xS * b.z;
334
- yB = xQ * (b.x + dbx) + xR * b.y + xS * (b.z - dbx);
335
- yC = xQ * b.x + xR * (b.y + dby) + xS * (b.z - dby);
333
+ Ay = zN * b.x + zO * b.y + zP * b.z;
334
+ Az = zN * (b.x + dbx) + zO * b.y + zP * (b.z - dbx);
335
+ AA = zN * b.x + zO * (b.y + dby) + zP * (b.z - dby);
336
336
  }
337
337
 
338
- let s_a = p_a + sb * N * sampleMap(jW, yA).x * hScale;
339
- let s_b = p_b + sb * N * sampleMap(jW, yB).x * hScale;
340
- let s_c = p_c + sb * N * sampleMap(jW, yC).x * hScale;
338
+ let s_a = p_a + tC * N * sampleMap(kC, Ay).x * hScale;
339
+ let s_b = p_b + tC * N * sampleMap(kC, Az).x * hScale;
340
+ let s_c = p_c + tC * N * sampleMap(kC, AA).x * hScale;
341
341
 
342
- let N_s = -sb * normalize(cross(s_c - s_a, s_b - s_a));
342
+ let N_s = -tC * normalize(cross(s_c - s_a, s_b - s_a));
343
343
 
344
344
  result.t = t;
345
345
  result.barycentric = b;
346
- result.normal = normalize(N_s - uG + sb * N);
346
+ result.normal = normalize(N_s - wp + tC * N);
347
347
  }
348
348
 
349
349
  return result;
@@ -4,13 +4,13 @@
4
4
  export default /* wgsl */ `
5
5
  var<private> s0: vec4u;
6
6
 
7
- fn fi(p: vec2u, frame: i32) {
7
+ fn fA(p: vec2u, frame: i32) {
8
8
 
9
9
  s0 = vec4u(p, u32(frame), u32(p.x) + u32(p.y));
10
10
  }
11
11
 
12
12
 
13
- fn xF() {
13
+ fn zF() {
14
14
  s0 = s0 * 1664525u + 1013904223u;
15
15
  s0.x += s0.y*s0.w; s0.y += s0.z*s0.x; s0.z += s0.x*s0.y; s0.w += s0.y*s0.z;
16
16
  s0 = s0 ^ (s0>>vec4(16u));
@@ -18,7 +18,7 @@ s0.x += s0.y*s0.w; s0.y += s0.z*s0.x; s0.z += s0.x*s0.y; s0.w += s0.y*s0.z;
18
18
  }
19
19
 
20
20
  fn rand() -> f32 {
21
- xF(); return f32(s0.x)/f32(0xffffffffu);
21
+ zF(); return f32(s0.x)/f32(0xffffffffu);
22
22
  }
23
23
 
24
24
  `;
@@ -1,7 +1,10 @@
1
- export default function rayTraceCore({ hasAnisotropyDirections, hasCoatNormals, hasSceneAlpha, caustics, lightCapabilities }: {
1
+ export default function rayTraceCore({ independentTextures, compactVertices, hasAnisotropyDirections, hasCoatNormals, hasSceneAlpha, cameraProjectionInverse, caustics, lightCapabilities }: {
2
+ independentTextures?: boolean;
3
+ compactVertices?: boolean;
2
4
  hasAnisotropyDirections?: boolean;
3
5
  hasCoatNormals?: boolean;
4
6
  hasSceneAlpha?: boolean;
7
+ cameraProjectionInverse?: boolean;
5
8
  caustics?: boolean;
6
9
  lightCapabilities?: number;
7
10
  }): string;
@@ -1,8 +1,11 @@
1
+ import { vertexAttributeReaders } from './vertexAttributes.wgsl.js';
1
2
  import { materialBufferWgsl } from '../../materialLayoutSchema.js';
2
3
  import { ALL_LIGHT_SHADER_CAPABILITIES, LIGHT_SHADER_CAPABILITIES } from '../../shaderCapabilities.js';
3
4
  import { ShadowCatcherMaterial, UnlitMaterial } from '../../../constants.js';
4
5
  import { CONSTANT_DIRECTIONAL_LIGHT, CONSTANT_RECT_LIGHT, CONSTANT_SPHERE_LIGHT, CONSTANT_SPOT_LIGHT } from '../../lightConstants.js';
5
- export default function rayTraceCore({ hasAnisotropyDirections = true, hasCoatNormals = false, hasSceneAlpha = true, caustics = false, lightCapabilities = ALL_LIGHT_SHADER_CAPABILITIES }) {
6
+ export default function rayTraceCore({
7
+ // Independent mapInfo starts with image width, height and binding-array index.
8
+ independentTextures = false, compactVertices = false, hasAnisotropyDirections = true, hasCoatNormals = false, hasSceneAlpha = true, cameraProjectionInverse = false, caustics = false, lightCapabilities = ALL_LIGHT_SHADER_CAPABILITIES }) {
6
9
  return /*wgsl*/ `
7
10
 
8
11
  const luminance = vec3f(0.2126, 0.7152, 0.0722);
@@ -149,6 +152,8 @@ thinWalled: bool,
149
152
  };
150
153
 
151
154
  struct Path {
155
+
156
+ scatteringMediumEntered: bool,
152
157
  ray: Ray,
153
158
  li: vec3f,
154
159
  alpha: f32,
@@ -219,7 +224,7 @@ secondaryUv1: vec2f,
219
224
  secondaryUv2: vec2f,
220
225
  };
221
226
 
222
- struct pW {
227
+ struct ra {
223
228
  probability: f32,
224
229
  aliasIndex: i32,
225
230
  sourceType: i32,
@@ -232,7 +237,7 @@ struct CameraUniform {
232
237
  viewProjectionInv: mat4x4<f32>,
233
238
  viewInv: mat4x4<f32>,
234
239
  apertureRadius: f32,
235
- focusDistance: f32,
240
+ focusDistance: f32,${cameraProjectionInverse ? '\n projectionInv: mat4x4<f32>,' : ''}
236
241
  };
237
242
 
238
243
  struct RayTraceUniform {
@@ -277,15 +282,16 @@ backgroundMapRotation: mat4x4f,
277
282
 
278
283
  @group(0) @binding(0) var<storage, read> bvhBuffer: array<vec4f>;
279
284
  @group(0) @binding(1) var<storage, read> instancesBuffer: array<vec4f>;
280
- @group(0) @binding(2) var<storage, read> attrBuffers: array<${hasAnisotropyDirections ? /* wgsl */ `vec4f` : /* wgsl */ `vec3f`}>;
285
+ @group(0) @binding(2) var<storage, read> attrBuffers: array<${compactVertices ? 'u32' : hasAnisotropyDirections ? 'vec4f' : 'vec3f'}>;
286
+ ${vertexAttributeReaders(compactVertices, hasAnisotropyDirections)}
281
287
  @group(0) @binding(3) var<storage, read> materialsBuffer: array<MaterialBuffer>;
282
288
 
283
289
 
284
290
  @group(1) @binding(0) var mapSampler: sampler;
285
- @group(1) @binding(1) var map: texture_2d_array<f32>;
291
+ @group(1) @binding(1) var map: ${independentTextures ? 'binding_array<texture_2d<f32>>' : 'texture_2d_array<f32>'};
286
292
 
287
293
 
288
- @group(1) @binding(3) var<uniform> mapInfo: array<vec4f, NUM_MAPS * 3>;
294
+ @group(1) @binding(3) var<${independentTextures ? 'storage, read' : 'uniform'}> mapInfo: array<vec4f, NUM_MAPS * 3>;
289
295
  @group(1) @binding(4) var envMap: texture_2d<f32>;
290
296
  @group(1) @binding(5) var envMapDistribution: texture_2d<f32>;
291
297
  @group(1) @binding(6) var backgroundMap: texture_2d<f32>;
@@ -293,15 +299,15 @@ backgroundMapRotation: mat4x4f,
293
299
  @group(1) @binding(9) var openPbrEnergyLut: texture_2d<f32>;
294
300
  @group(1) @binding(10) var adaptiveSampleTargets: texture_2d<f32>;
295
301
 
296
- fn cF(dV: i32, lK: i32) -> f32 {
297
- let im = dV + lK / 4;
302
+ fn cI(ec: i32, mC: i32) -> f32 {
303
+ let iR = ec + mC / 4;
298
304
  let width = rtUniform.lightSamplingTextureWidth;
299
- let packed = textureLoad(lightSamplingData, vec2i(im % width, im / width), 0);
300
- return packed[lK % 4];
305
+ let packed = textureLoad(lightSamplingData, vec2i(iR % width, iR / width), 0);
306
+ return packed[mC % 4];
301
307
  }
302
308
 
303
- fn ld(dV: i32, uv: vec2f) -> f32 {
304
- if (dV < 0) { return 1.0; }
309
+ fn lW(ec: i32, uv: vec2f) -> f32 {
310
+ if (ec < 0) { return 1.0; }
305
311
  let pixel = fract(uv) * 128.0 - vec2f(0.5);
306
312
  let x0 = i32(floor(pixel.x));
307
313
  let y0 = i32(floor(pixel.y));
@@ -311,26 +317,26 @@ let xa = select(x0, 127, x0 < 0);
311
317
  let xb = select(x0 + 1, 0, x0 >= 127);
312
318
  let ya = select(y0, 127, y0 < 0);
313
319
  let yb = select(y0 + 1, 0, y0 >= 127);
314
- let a = cF(dV, ya * 128 + xa);
315
- let b = cF(dV, ya * 128 + xb);
316
- let c = cF(dV, yb * 128 + xa);
317
- let d = cF(dV, yb * 128 + xb);
320
+ let a = cI(ec, ya * 128 + xa);
321
+ let b = cI(ec, ya * 128 + xb);
322
+ let c = cI(ec, yb * 128 + xa);
323
+ let d = cI(ec, yb * 128 + xb);
318
324
  return mix(mix(a, b, fx), mix(c, d, fx), fy);
319
325
  }
320
326
 
321
- fn evaluateSpotEmissionMultiplier(light: Light, dI: vec3f) -> f32 {
327
+ fn evaluateSpotEmissionMultiplier(light: Light, dL: vec3f) -> f32 {
322
328
  let axis = normalize(light.u);
323
- let ct = dot(axis, dI);
324
- var vw = select(0.0, 1.0, ct >= light.v.x);
329
+ let cv = dot(axis, dL);
330
+ var xm = select(0.0, 1.0, cv >= light.v.x);
325
331
  if (light.v.y > light.v.x + 1e-6) {
326
- vw = smoothstep(light.v.x, light.v.y, ct);
332
+ xm = smoothstep(light.v.x, light.v.y, cv);
327
333
  }
328
- if (vw <= 0.0 || light.textureIndex < 0.0) { return vw; }
329
- let vX = light.iesReference;
330
- let xN = cross(axis, vX);
331
- let vertical = acos(clamp(ct, -1.0, 1.0));
332
- let horizontal = atan2(dot(dI, xN), dot(dI, vX));
333
- return vw * ld(i32(light.textureIndex), vec2f(vertical / PI, horizontal / TWOPI + 0.5));
334
+ if (xm <= 0.0 || light.textureIndex < 0.0) { return xm; }
335
+ let xT = light.iesReference;
336
+ let zK = cross(axis, xT);
337
+ let vertical = acos(clamp(cv, -1.0, 1.0));
338
+ let horizontal = atan2(dot(dL, zK), dot(dL, xT));
339
+ return xm * lW(i32(light.textureIndex), vec2f(vertical / PI, horizontal / TWOPI + 0.5));
334
340
  }
335
341
 
336
342