@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
@@ -72,214 +72,214 @@ fn aB(color: vec3f) -> f32 {
72
72
  return dot(color, vec3f(0.212671, 0.715160, 0.072169));
73
73
  }
74
74
 
75
- fn cO(bq: f32) -> f32 {
76
- let value = (bq - 1.0) / (bq + 1.0);
75
+ fn cR(br: f32) -> f32 {
76
+ let value = (br - 1.0) / (br + 1.0);
77
77
  return value * value;
78
78
  }
79
79
 
80
- fn bb(
81
- bq: f32,
80
+ fn bc(
81
+ br: f32,
82
82
  specularWeight: f32
83
83
  ) -> f32 {
84
- let uj = min(
85
- cO(bq) * specularWeight,
84
+ let vT = min(
85
+ cR(br) * specularWeight,
86
86
  0.9999
87
87
  );
88
- let ul = sqrt(uj);
89
- let lC = (1.0 + ul) / (1.0 - ul);
90
- return select(lC, 1.0 / lC, bq < 1.0);
88
+ let vV = sqrt(vT);
89
+ let mt = (1.0 + vV) / (1.0 - vV);
90
+ return select(mt, 1.0 / mt, br < 1.0);
91
91
  }
92
92
 
93
- fn ae(ct: f32, relativeIor: f32) -> f32 {
93
+ fn ae(cv: f32, relativeIor: f32) -> f32 {
94
94
  if (abs(relativeIor - 1.0) < 1e-6) {
95
95
  return 0.0;
96
96
  }
97
- return sampling_dielectric_fresnel(ct, relativeIor);
97
+ return sampling_dielectric_fresnel(cv, relativeIor);
98
98
  }
99
99
 
100
- fn aE(ior: f32) -> f32 {
100
+ fn aF(ior: f32) -> f32 {
101
101
  if (ior < 1.0) {
102
102
  return 15.0 - ((1.0 / ior - 1.0) / 1.5) * 15.0;
103
103
  }
104
104
  return 16.0 + ((ior - 1.0) / 1.5) * 15.0;
105
105
  }
106
106
 
107
- fn F(tC: i32, row: i32) -> f32 {
108
- return textureLoad(openPbrEnergyLut, vec2i(tC, row), 0).r;
107
+ fn F(vc: i32, row: i32) -> f32 {
108
+ return textureLoad(openPbrEnergyLut, vec2i(vc, row), 0).r;
109
109
  }
110
110
 
111
- fn gd(
112
- dH: f32,
111
+ fn gu(
112
+ dJ: f32,
113
113
  bM: f32,
114
- hN: f32
114
+ iv: f32
115
115
  ) -> f32 {
116
- let br = clamp(dH, 0.0, 31.0);
116
+ let bw = clamp(dJ, 0.0, 31.0);
117
117
  let aK = clamp(bM, 0.0, 31.0);
118
- let bp = clamp(hN, 0.0, 31.0);
119
- let dP = i32(floor(br));
118
+ let bq = clamp(iv, 0.0, 31.0);
119
+ let dV = i32(floor(bw));
120
120
  let aP = i32(floor(aK));
121
- let cD = i32(floor(bp));
122
- let hB = min(dP + 1, 31);
123
- let ch = min(aP + 1, 31);
124
- let eK = min(cD + 1, 31);
125
- let ci = br - f32(dP);
126
- let cq = aK - f32(aP);
127
- let kR = bp - f32(cD);
128
-
129
- let wv = F(cD, dP * 32 + aP);
130
- let ww = F(eK, dP * 32 + aP);
131
- let wx = F(cD, dP * 32 + ch);
132
- let wy = F(eK, dP * 32 + ch);
133
- let wB = F(cD, hB * 32 + aP);
134
- let wC = F(eK, hB * 32 + aP);
135
- let wE = F(cD, hB * 32 + ch);
136
- let wF = F(eK, hB * 32 + ch);
137
- let v00 = mix(wv, wB, ci);
138
- let v01 = mix(ww, wC, ci);
139
- let v10 = mix(wx, wE, ci);
140
- let v11 = mix(wy, wF, ci);
121
+ let cG = i32(floor(bq));
122
+ let hX = min(dV + 1, 31);
123
+ let ci = min(aP + 1, 31);
124
+ let eU = min(cG + 1, 31);
125
+ let cj = bw - f32(dV);
126
+ let ct = aK - f32(aP);
127
+ let lK = bq - f32(cG);
128
+
129
+ let ys = F(cG, dV * 32 + aP);
130
+ let yt = F(eU, dV * 32 + aP);
131
+ let yu = F(cG, dV * 32 + ci);
132
+ let yv = F(eU, dV * 32 + ci);
133
+ let yw = F(cG, hX * 32 + aP);
134
+ let yA = F(eU, hX * 32 + aP);
135
+ let yB = F(cG, hX * 32 + ci);
136
+ let yC = F(eU, hX * 32 + ci);
137
+ let v00 = mix(ys, yw, cj);
138
+ let v01 = mix(yt, yA, cj);
139
+ let v10 = mix(yu, yB, cj);
140
+ let v11 = mix(yv, yC, cj);
141
141
  return mix(
142
- mix(v00, v10, cq),
143
- mix(v01, v11, cq),
144
- kR
142
+ mix(v00, v10, ct),
143
+ mix(v01, v11, ct),
144
+ lK
145
145
  );
146
146
  }
147
147
 
148
- fn gA(dH: f32, bM: f32) -> f32 {
149
- let br = clamp(dH, 0.0, 31.0);
148
+ fn gU(dJ: f32, bM: f32) -> f32 {
149
+ let bw = clamp(dJ, 0.0, 31.0);
150
150
  let aK = clamp(bM, 0.0, 31.0);
151
- let dP = i32(floor(br));
151
+ let dV = i32(floor(bw));
152
152
  let aP = i32(floor(aK));
153
- let hB = min(dP + 1, 31);
154
- let ch = min(aP + 1, 31);
155
- let ci = br - f32(dP);
156
- let cq = aK - f32(aP);
157
- let v00 = F(aP, 1024 + dP);
158
- let v01 = F(ch, 1024 + dP);
159
- let v10 = F(aP, 1024 + hB);
160
- let v11 = F(ch, 1024 + hB);
153
+ let hX = min(dV + 1, 31);
154
+ let ci = min(aP + 1, 31);
155
+ let cj = bw - f32(dV);
156
+ let ct = aK - f32(aP);
157
+ let v00 = F(aP, 1024 + dV);
158
+ let v01 = F(ci, 1024 + dV);
159
+ let v10 = F(aP, 1024 + hX);
160
+ let v11 = F(ci, 1024 + hX);
161
161
  return mix(
162
- mix(v00, v10, ci),
163
- mix(v01, v11, ci),
164
- cq
162
+ mix(v00, v10, cj),
163
+ mix(v01, v11, cj),
164
+ ct
165
165
  );
166
166
  }
167
167
 
168
168
 
169
169
 
170
- fn ee(
171
- dH: f32,
170
+ fn el(
171
+ dJ: f32,
172
172
  bM: f32,
173
- hN: f32
173
+ iv: f32
174
174
  ) -> f32 {
175
- let br = clamp(dH, 0.0, 31.0);
175
+ let bw = clamp(dJ, 0.0, 31.0);
176
176
  let aK = clamp(bM, 0.0, 31.0);
177
- let bp = clamp(hN, 0.0, 31.0);
178
- let dP = i32(floor(br));
177
+ let bq = clamp(iv, 0.0, 31.0);
178
+ let dV = i32(floor(bw));
179
179
  let aP = i32(floor(aK));
180
- let cD = i32(floor(bp));
181
- let hB = min(dP + 1, 31);
182
- let ch = min(aP + 1, 31);
183
- let eK = min(cD + 1, 31);
184
- let ci = br - f32(dP);
185
- let cq = aK - f32(aP);
186
- let kR = bp - f32(cD);
187
-
188
- let wv = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aP);
189
- let ww = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aP);
190
- let wx = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + ch);
191
- let wy = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + ch);
192
- let wB = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aP);
193
- let wC = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aP);
194
- let wE = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + ch);
195
- let wF = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + ch);
196
- let v00 = mix(wv, wB, ci);
197
- let v01 = mix(ww, wC, ci);
198
- let v10 = mix(wx, wE, ci);
199
- let v11 = mix(wy, wF, ci);
180
+ let cG = i32(floor(bq));
181
+ let hX = min(dV + 1, 31);
182
+ let ci = min(aP + 1, 31);
183
+ let eU = min(cG + 1, 31);
184
+ let cj = bw - f32(dV);
185
+ let ct = aK - f32(aP);
186
+ let lK = bq - f32(cG);
187
+
188
+ let ys = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + aP);
189
+ let yt = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + aP);
190
+ let yu = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + ci);
191
+ let yv = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + ci);
192
+ let yw = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + aP);
193
+ let yA = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + aP);
194
+ let yB = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + ci);
195
+ let yC = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + ci);
196
+ let v00 = mix(ys, yw, cj);
197
+ let v01 = mix(yt, yA, cj);
198
+ let v10 = mix(yu, yB, cj);
199
+ let v11 = mix(yv, yC, cj);
200
200
  return mix(
201
- mix(v00, v10, cq),
202
- mix(v01, v11, cq),
203
- kR
201
+ mix(v00, v10, ct),
202
+ mix(v01, v11, ct),
203
+ lK
204
204
  );
205
205
  }
206
206
 
207
- fn ec(dH: f32, bM: f32) -> f32 {
208
- let br = clamp(dH, 0.0, 31.0);
207
+ fn ek(dJ: f32, bM: f32) -> f32 {
208
+ let bw = clamp(dJ, 0.0, 31.0);
209
209
  let aK = clamp(bM, 0.0, 31.0);
210
- let dP = i32(floor(br));
210
+ let dV = i32(floor(bw));
211
211
  let aP = i32(floor(aK));
212
- let hB = min(dP + 1, 31);
213
- let ch = min(aP + 1, 31);
214
- let ci = br - f32(dP);
215
- let cq = aK - f32(aP);
216
- let v00 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
217
- let v01 = F(ch, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
218
- let v10 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
219
- let v11 = F(ch, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
212
+ let hX = min(dV + 1, 31);
213
+ let ci = min(aP + 1, 31);
214
+ let cj = bw - f32(dV);
215
+ let ct = aK - f32(aP);
216
+ let v00 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dV);
217
+ let v01 = F(ci, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dV);
218
+ let v10 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hX);
219
+ let v11 = F(ci, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hX);
220
220
  return mix(
221
- mix(v00, v10, ci),
222
- mix(v01, v11, ci),
223
- cq
221
+ mix(v00, v10, cj),
222
+ mix(v01, v11, cj),
223
+ ct
224
224
  );
225
225
  }
226
226
 
227
- fn eC(dH: f32, bM: f32) -> f32 {
228
- let br = clamp(dH, 0.0, 31.0);
227
+ fn eL(dJ: f32, bM: f32) -> f32 {
228
+ let bw = clamp(dJ, 0.0, 31.0);
229
229
  let aK = clamp(bM, 0.0, 31.0);
230
- let dP = i32(floor(br));
230
+ let dV = i32(floor(bw));
231
231
  let aP = i32(floor(aK));
232
- let hB = min(dP + 1, 31);
233
- let ch = min(aP + 1, 31);
234
- let ci = br - f32(dP);
235
- let cq = aK - f32(aP);
236
- let v00 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
237
- let v01 = F(ch, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
238
- let v10 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
239
- let v11 = F(ch, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
232
+ let hX = min(dV + 1, 31);
233
+ let ci = min(aP + 1, 31);
234
+ let cj = bw - f32(dV);
235
+ let ct = aK - f32(aP);
236
+ let v00 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dV);
237
+ let v01 = F(ci, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dV);
238
+ let v10 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hX);
239
+ let v11 = F(ci, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hX);
240
240
  return mix(
241
- mix(v00, v10, ci),
242
- mix(v01, v11, ci),
243
- cq
241
+ mix(v00, v10, cj),
242
+ mix(v01, v11, cj),
243
+ ct
244
244
  );
245
245
  }
246
246
 
247
247
  fn aV(ior: f32, alpha: f32, cosine: f32) -> f32 {
248
- return ee(aE(ior), sqrt(alpha) * 31.0, cosine * 31.0);
248
+ return el(aF(ior), sqrt(alpha) * 31.0, cosine * 31.0);
249
249
  }
250
- fn aY(ior: f32, alpha: f32) -> f32 {
251
- return ec(aE(ior), sqrt(alpha) * 31.0);
250
+ fn aZ(ior: f32, alpha: f32) -> f32 {
251
+ return ek(aF(ior), sqrt(alpha) * 31.0);
252
252
  }
253
- fn bU(ior: f32, alpha: f32) -> f32 {
254
- return eC(aE(ior), sqrt(alpha) * 31.0);
253
+ fn bW(ior: f32, alpha: f32) -> f32 {
254
+ return eL(aF(ior), sqrt(alpha) * 31.0);
255
255
  }
256
256
 
257
257
 
258
258
 
259
259
  fn aR(alpha: f32, cosine: f32) -> f32 {
260
- let ie = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
261
- let bp = clamp(cosine * 31.0, 0.0, 31.0);
262
- let r0 = i32(floor(ie));
263
- let c0 = i32(floor(bp));
260
+ let iL = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
261
+ let bq = clamp(cosine * 31.0, 0.0, 31.0);
262
+ let r0 = i32(floor(iL));
263
+ let c0 = i32(floor(bq));
264
264
  let r1 = min(r0 + 1, 31);
265
265
  let c1 = min(c0 + 1, 31);
266
266
  return mix(
267
- mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bp)),
268
- mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bp)),
269
- fract(ie));
267
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bq)),
268
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bq)),
269
+ fract(iL));
270
270
  }
271
271
 
272
- fn cl(alpha: f32) -> f32 {
272
+ fn cn(alpha: f32) -> f32 {
273
273
  let index = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
274
274
  let i0 = i32(floor(index));
275
275
  return mix(F(i0, ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}),
276
276
  F(min(i0 + 1, 31), ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}), fract(index));
277
277
  }
278
278
 
279
- fn aX(value: f32, ior: f32) -> f32 {
279
+ fn aY(value: f32, ior: f32) -> f32 {
280
280
  if ((ior > 2.5) | (ior < 0.4)) {
281
- let vH = cO(2.5);
282
- let progress = (cO(ior) - vH) / (1.0 - vH);
281
+ let xv = cR(2.5);
282
+ let progress = (cR(ior) - xv) / (1.0 - xv);
283
283
  return (1.0 - progress) * value;
284
284
  }
285
285
  return value;
@@ -290,20 +290,20 @@ ior: f32,
290
290
  alpha: f32,
291
291
  cosine: f32
292
292
  ) -> f32 {
293
- let value = gd(
294
- aE(ior),
293
+ let value = gu(
294
+ aF(ior),
295
295
  sqrt(alpha) * 31.0,
296
296
  cosine * 31.0
297
297
  );
298
- return aX(value, ior);
298
+ return aY(value, ior);
299
299
  }
300
300
 
301
- fn cj(ior: f32, alpha: f32) -> f32 {
302
- let value = gA(
303
- aE(ior),
301
+ fn ck(ior: f32, alpha: f32) -> f32 {
302
+ let value = gU(
303
+ aF(ior),
304
304
  sqrt(alpha) * 31.0
305
305
  );
306
- return aX(value, ior);
306
+ return aY(value, ior);
307
307
  }
308
308
 
309
309
  fn openpbr_to_world(basis: OpenPbrBasis, direction: vec3f) -> vec3f {
@@ -320,14 +320,14 @@ dot(direction, basis.normal)
320
320
  );
321
321
  }
322
322
 
323
- fn ff(
324
- aS: vec3f,
323
+ fn ft(
324
+ aT: vec3f,
325
325
  normal: vec3f,
326
326
  anisotropy: f32
327
327
  ) -> OpenPbrBasis {
328
328
  var basis: OpenPbrBasis;
329
329
  basis.normal = normal;
330
- var tangent = aS;
330
+ var tangent = aT;
331
331
  var bitangent = vec3f(0.0);
332
332
  if ((dot(tangent, tangent) < 0.001) | (anisotropy <= 0.0)) {
333
333
  sampling_orthonormal_basis(normal, &tangent, &bitangent);
@@ -341,7 +341,7 @@ basis.bitangent = bitangent;
341
341
  return basis;
342
342
  }
343
343
 
344
- fn ki(
344
+ fn kP(
345
345
  av: f32,
346
346
  ai: f32,
347
347
  J: f32,
@@ -351,7 +351,7 @@ return (av * J - ai * ad)
351
351
  / (av * J + ai * ad);
352
352
  }
353
353
 
354
- fn kh(
354
+ fn kO(
355
355
  av: f32,
356
356
  ai: f32,
357
357
  J: f32,
@@ -361,7 +361,7 @@ return (ai * J - av * ad)
361
361
  / (av * ad + ai * J);
362
362
  }
363
363
 
364
- fn gZ(
364
+ fn hx(
365
365
  av: f32,
366
366
  ai: f32,
367
367
  J: f32,
@@ -371,7 +371,7 @@ return 2.0 * av * J
371
371
  / (av * J + ai * ad);
372
372
  }
373
373
 
374
- fn gY(
374
+ fn hw(
375
375
  av: f32,
376
376
  ai: f32,
377
377
  J: f32,
@@ -381,11 +381,11 @@ return 2.0 * av * J
381
381
  / (av * ad + ai * J);
382
382
  }
383
383
 
384
- fn aT(a: vec2f, b: vec2f) -> vec2f {
384
+ fn aU(a: vec2f, b: vec2f) -> vec2f {
385
385
  return vec2f(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
386
386
  }
387
387
 
388
- fn bc(a: vec2f, b: vec2f) -> vec2f {
388
+ fn bd(a: vec2f, b: vec2f) -> vec2f {
389
389
  let ah = max(dot(b, b), 1e-9);
390
390
  return vec2f(
391
391
  (a.x * b.x + a.y * b.y) / ah,
@@ -393,101 +393,101 @@ return vec2f(
393
393
  );
394
394
  }
395
395
 
396
- fn hV(value: vec2f) -> vec2f {
397
- let gz = length(value);
398
- let ui = sqrt(max(0.0, 0.5 * (gz + value.x)));
399
- let fc = sqrt(max(0.0, 0.5 * (gz - value.x)));
400
- return vec2f(ui, select(-fc, fc, value.y >= 0.0));
396
+ fn iG(value: vec2f) -> vec2f {
397
+ let gT = length(value);
398
+ let vS = sqrt(max(0.0, 0.5 * (gT + value.x)));
399
+ let fo = sqrt(max(0.0, 0.5 * (gT - value.x)));
400
+ return vec2f(vS, select(-fo, fo, value.y >= 0.0));
401
401
  }
402
402
 
403
- fn bR(
403
+ fn bS(
404
404
  J: f32,
405
405
  av: f32,
406
406
  ai: vec2f,
407
- rH: bool
407
+ sX: bool
408
408
  ) -> vec2f {
409
- let oV = sqrt(max(0.0, 1.0 - J * J));
410
- let tR = bc(vec2f(av, 0.0), ai);
411
- let hx = tR * oV;
412
- var ad = hV(
413
- vec2f(1.0, 0.0) - aT(hx, hx)
409
+ let qd = sqrt(max(0.0, 1.0 - J * J));
410
+ let vA = bd(vec2f(av, 0.0), ai);
411
+ let hR = vA * qd;
412
+ var ad = iG(
413
+ vec2f(1.0, 0.0) - aU(hR, hR)
414
414
  );
415
- if (aT(ai, ad).y < 0.0) {
415
+ if (aU(ai, ad).y < 0.0) {
416
416
  ad = -ad;
417
417
  }
418
418
 
419
- let fL = vec2f(av * J, 0.0);
420
- let eu = aT(ai, ad);
421
- if (rH) {
422
- let bW = ai * J;
423
- let bT = ad * av;
424
- return bc(
425
- bW - bT,
426
- bW + bT
419
+ let fX = vec2f(av * J, 0.0);
420
+ let eC = aU(ai, ad);
421
+ if (sX) {
422
+ let bY = ai * J;
423
+ let bV = ad * av;
424
+ return bd(
425
+ bY - bV,
426
+ bY + bV
427
427
  );
428
428
  }
429
- return bc(
430
- fL - eu,
431
- fL + eu
429
+ return bd(
430
+ fX - eC,
431
+ fX + eC
432
432
  );
433
433
  }
434
434
 
435
- fn em(
436
- iI: f32,
437
- gJ: f32,
438
- pk: f32,
439
- nA: f32,
440
- ko: vec2f,
435
+ fn ev(
436
+ jh: f32,
437
+ hb: f32,
438
+ qu: f32,
439
+ ov: f32,
440
+ kV: vec2f,
441
441
  phase: f32
442
442
  ) -> f32 {
443
- let nZ = vec2f(cos(phase), sin(phase));
444
- let hY = aT(ko, nZ);
445
- let iF = hY * (gJ * nA);
446
- let ah = vec2f(1.0, 0.0) - hY * pk;
447
- let hw = vec2f(iI, 0.0)
448
- + bc(iF, ah);
449
- return dot(hw, hw);
443
+ let oY = vec2f(cos(phase), sin(phase));
444
+ let iJ = aU(kV, oY);
445
+ let je = iJ * (hb * ov);
446
+ let ah = vec2f(1.0, 0.0) - iJ * qu;
447
+ let hQ = vec2f(jh, 0.0)
448
+ + bd(je, ah);
449
+ return dot(hQ, hQ);
450
450
  }
451
451
 
452
452
  fn ap(
453
453
  J: f32,
454
454
  wavelength: f32,
455
- cf: f32,
455
+ ch: f32,
456
456
  aN: f32,
457
- bY: f32,
458
- ep: vec2f
457
+ ca: f32,
458
+ ey: vec2f
459
459
  ) -> f32 {
460
- let dd = clamp(abs(J), 1e-5, 1.0);
461
- let hp = pow(aN / bY, 2.0)
462
- * (1.0 - dd * dd);
463
- if (hp >= 1.0) {
460
+ let dg = clamp(abs(J), 1e-5, 1.0);
461
+ let hJ = pow(aN / ca, 2.0)
462
+ * (1.0 - dg * dg);
463
+ if (hJ >= 1.0) {
464
464
  return 1.0;
465
465
  }
466
- let cN = sqrt(1.0 - hp);
467
- let lq = ki(
468
- aN, bY, dd, cN
466
+ let cQ = sqrt(1.0 - hJ);
467
+ let ml = kP(
468
+ aN, ca, dg, cQ
469
469
  );
470
- let lp = kh(
471
- aN, bY, dd, cN
470
+ let mk = kO(
471
+ aN, ca, dg, cQ
472
472
  );
473
- let jm = gZ(
474
- aN, bY, dd, cN
473
+ let jQ = hx(
474
+ aN, ca, dg, cQ
475
475
  );
476
- let jl = gY(
477
- aN, bY, dd, cN
476
+ let jP = hw(
477
+ aN, ca, dg, cQ
478
478
  );
479
- let gp = bY * cN
480
- / max(aN * dd, 1e-9);
481
- let phase = 2.0 * PI * (2.0 * bY * cf * cN) / wavelength;
479
+ let gI = ca * cQ
480
+ / max(aN * dg, 1e-9);
481
+ let phase = 2.0 * PI * (2.0 * ca * ch * cQ) / wavelength;
482
482
  var reflectance = 0.0;
483
483
 
484
- for (var kn = 0u; kn < (rtUniform.loopUnrollGuard >> 1u); kn++) {
485
- let iI = select(lq, lp, kn == 1u);
486
- let gJ = select(jm, jl, kn == 1u);
487
- let ko = bR(
488
- cN, bY, ep, kn == 1u);
489
- reflectance += em(iI, gJ,
490
- -iI, gJ * gp, ko, phase);
484
+ for (var kU = 0u; kU < (rtUniform.loopUnrollGuard >> 1u); kU++) {
485
+ let jh = select(ml, mk, kU == 1u);
486
+ let hb = select(jQ, jP, kU == 1u);
487
+ let kV = bS(
488
+ cQ, ca, ey, kU == 1u);
489
+ reflectance += ev(jh, hb,
490
+ -jh, hb * gI, kV, phase);
491
491
  }
492
492
  return clamp(0.5 * reflectance, 0.0, 1.0);
493
493
  }
@@ -496,43 +496,43 @@ return clamp(0.5 * reflectance, 0.0, 1.0);
496
496
 
497
497
 
498
498
  fn openpbr_metal_fresnel(cosine: f32, f0: vec3f, tint: vec3f) -> vec3f {
499
- let sl = mix(f0, vec3f(1.0), aH(cosine));
500
- if (all(tint == vec3f(1.0))) { return sl; }
501
- let da = 1.0 / 7.0;
502
- let mK = 1.0 - da;
503
- let fJ = mix(f0, vec3f(1.0), aH(da));
504
- let cY = 1.0 - cosine;
505
- let rp = cosine * aH(cosine) * cY
506
- / (da * pow(mK, 6.0));
507
- return clamp(sl - rp * (fJ - tint * fJ), vec3f(0.0), vec3f(1.0));
508
- }
509
-
510
- fn cJ(f0: f32, uS: f32) -> vec2f {
511
- let dL = clamp(f0, 0.0, 0.99);
512
- let gI = sqrt(dL);
513
- let rF = (1.0 - dL) / (1.0 + dL);
514
- let rC = (1.0 + gI) / max(1.0 - gI, 1e-9);
515
- let ior = mix(rC, rF, clamp(uS, 0.0, 1.0));
516
- let jT = (
517
- (ior + 1.0) * (ior + 1.0) * dL
499
+ let tN = mix(f0, vec3f(1.0), aI(cosine));
500
+ if (all(tint == vec3f(1.0))) { return tN; }
501
+ let dd = 1.0 / 7.0;
502
+ let nM = 1.0 - dd;
503
+ let fV = mix(f0, vec3f(1.0), aI(dd));
504
+ let da = 1.0 - cosine;
505
+ let sG = cosine * aI(cosine) * da
506
+ / (dd * pow(nM, 6.0));
507
+ return clamp(tN - sG * (fV - tint * fV), vec3f(0.0), vec3f(1.0));
508
+ }
509
+
510
+ fn cL(f0: f32, wF: f32) -> vec2f {
511
+ let dP = clamp(f0, 0.0, 0.99);
512
+ let ha = sqrt(dP);
513
+ let sU = (1.0 - dP) / (1.0 + dP);
514
+ let sR = (1.0 + ha) / max(1.0 - ha, 1e-9);
515
+ let ior = mix(sR, sU, clamp(wF, 0.0, 1.0));
516
+ let kz = (
517
+ (ior + 1.0) * (ior + 1.0) * dP
518
518
  - (ior - 1.0) * (ior - 1.0)
519
- ) / max(1.0 - dL, 1e-9);
520
- return vec2f(ior, sqrt(max(jT, 0.0)));
519
+ ) / max(1.0 - dP, 1e-9);
520
+ return vec2f(ior, sqrt(max(kz, 0.0)));
521
521
  }
522
522
 
523
523
 
524
- fn bJ(cf: f32, weight: f32) -> f32 {
525
- return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cf);
524
+ fn bJ(ch: f32, weight: f32) -> f32 {
525
+ return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, ch);
526
526
  }
527
527
 
528
528
 
529
529
 
530
- fn bw(
530
+ fn bB(
531
531
  material: OpenPbrResolvedMaterial,
532
532
  color: vec3f,
533
533
  viewLocal: vec3f,
534
534
  lightLocal: vec3f,
535
- fl: f32,
535
+ fD: f32,
536
536
  pdf: ptr<function, f32>
537
537
  ) -> vec3f {
538
538
  *pdf = 0.0;
@@ -541,26 +541,26 @@ return vec3f(0.0);
541
541
  }
542
542
 
543
543
  let roughness = material.diffuseRoughness;
544
- let gS = 0.5 - 2.0 / (3.0 * PI);
545
- let oR = 2.0 / 3.0 - 28.0 / (15.0 * PI);
546
- let pe = lightLocal.z;
547
- let nd = viewLocal.z;
548
- let directional = dot(lightLocal, viewLocal) - pe * nd;
549
- let gP = select(
544
+ let hp = 0.5 - 2.0 / (3.0 * PI);
545
+ let pZ = 2.0 / 3.0 - 28.0 / (15.0 * PI);
546
+ let qn = lightLocal.z;
547
+ let oc = viewLocal.z;
548
+ let directional = dot(lightLocal, viewLocal) - qn * oc;
549
+ let hl = select(
550
550
  directional,
551
- directional / max(max(pe, nd), 1e-7),
551
+ directional / max(max(qn, oc), 1e-7),
552
552
  directional > 0.0
553
553
  );
554
- let il = 1.0 / (1.0 + gS * roughness);
555
- let oe = color * INVPI * il
556
- * (1.0 + roughness * gP);
557
-
558
- let cW = 1.0 - pe;
559
- let outputComplement = 1.0 - nd;
560
- let oW = cW * (
561
- 0.0571085289 + cW * (
562
- 0.491881867 + cW * (
563
- -0.332181442 + cW * 0.0714429953
554
+ let iQ = 1.0 / (1.0 + hp * roughness);
555
+ let pe = color * INVPI * iQ
556
+ * (1.0 + roughness * hl);
557
+
558
+ let cX = 1.0 - qn;
559
+ let outputComplement = 1.0 - oc;
560
+ let qe = cX * (
561
+ 0.0571085289 + cX * (
562
+ 0.491881867 + cX * (
563
+ -0.332181442 + cX * 0.0714429953
564
564
  )
565
565
  )
566
566
  );
@@ -571,19 +571,19 @@ let outputGOverPi = outputComplement * (
571
571
  )
572
572
  )
573
573
  );
574
- let qj = (1.0 + roughness * oW)
575
- / (1.0 + gS * roughness);
574
+ let rr = (1.0 + roughness * qe)
575
+ / (1.0 + hp * roughness);
576
576
  let outputAlbedo = (1.0 + roughness * outputGOverPi)
577
- / (1.0 + gS * roughness);
578
- let fU = il * (1.0 + oR * roughness);
579
- let hC = color * color * fU
580
- / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - fU));
581
- let lT = hC * INVPI
577
+ / (1.0 + hp * roughness);
578
+ let gk = iQ * (1.0 + pZ * roughness);
579
+ let hY = color * color * gk
580
+ / max(vec3f(1e-7), vec3f(1.0) - color * (1.0 - gk));
581
+ let mN = hY * INVPI
582
582
  * max(1e-7, 1.0 - outputAlbedo)
583
- * max(1e-7, 1.0 - qj)
584
- / max(1e-7, 1.0 - fU);
583
+ * max(1e-7, 1.0 - rr)
584
+ / max(1e-7, 1.0 - gk);
585
585
  *pdf = lightLocal.z * INVPI;
586
- return (oe + lT) * fl;
586
+ return (pe + mN) * fD;
587
587
  }
588
588
 
589
589
  fn aQ(viewCosine: f32, roughness: f32) -> f32 {
@@ -600,7 +600,7 @@ let gaussian = exp(-0.5 * pow((x - mean) / scale, 2.0))
600
600
  return max(gaussian + offset, 0.0);
601
601
  }
602
602
 
603
- fn kg(
603
+ fn kN(
604
604
  material: OpenPbrResolvedMaterial,
605
605
  viewLocal: vec3f,
606
606
  lightLocal: vec3f,
@@ -633,16 +633,16 @@ return vec3f(0.0);
633
633
 
634
634
  let alpha = vec2f(material.alphaX, material.alphaY);
635
635
  let distribution = sampling_ggx_ndf(aa, alpha);
636
- let kc = aD(viewLocal, alpha);
637
- let dY = kc
636
+ let kJ = aD(viewLocal, alpha);
637
+ let eh = kJ
638
638
  * aD(lightLocal, alpha);
639
639
 
640
- *pdf = kc * distribution / (4.0 * max(viewLocal.z, 1e-8));
641
- return fresnel * distribution * dY
640
+ *pdf = kJ * distribution / (4.0 * max(viewLocal.z, 1e-8));
641
+ return fresnel * distribution * eh
642
642
  / (4.0 * max(lightLocal.z * viewLocal.z, 1e-8));
643
643
  }
644
644
 
645
- fn dc(
645
+ fn df(
646
646
  material: OpenPbrResolvedMaterial,
647
647
  relativeIor: f32,
648
648
  tint: vec3f,
@@ -666,29 +666,29 @@ return vec3f(0.0);
666
666
  }
667
667
  let alpha = vec2f(material.alphaX, material.alphaY);
668
668
  let distribution = sampling_ggx_ndf(aa, alpha);
669
- let kc = aD(viewLocal, alpha);
670
- let dY = kc
669
+ let kJ = aD(viewLocal, alpha);
670
+ let eh = kJ
671
671
  * aD(lightLocal, alpha);
672
672
  var ah = lightHalf + viewHalf * relativeIor;
673
673
  ah *= ah;
674
- let qo = abs(lightHalf) / max(ah, 1e-8);
675
- let jB = relativeIor * relativeIor;
674
+ let rw = abs(lightHalf) / max(ah, 1e-8);
675
+ let ke = relativeIor * relativeIor;
676
676
 
677
- *pdf = kc * max(0.0, viewHalf) * distribution * qo
677
+ *pdf = kJ * max(0.0, viewHalf) * distribution * rw
678
678
  / max(viewLocal.z, 1e-8);
679
- return tint * (vec3f(1.0) - fresnel) * distribution * dY
680
- * abs(viewHalf) * qo * jB
679
+ return tint * (vec3f(1.0) - fresnel) * distribution * eh
680
+ * abs(viewHalf) * rw * ke
681
681
  / max(abs(lightLocal.z * viewLocal.z), 1e-8);
682
682
  }
683
683
 
684
- fn ba(material: OpenPbrResolvedMaterial) -> vec3f {
684
+ fn bb(material: OpenPbrResolvedMaterial) -> vec3f {
685
685
  if (HAS_MEDIUM & (material.mediumType > 0)) {
686
686
  return vec3f(1.0);
687
687
  }
688
688
  return material.transmissionColor;
689
689
  }
690
690
 
691
- fn cL(ag: f32) -> f32 {
691
+ fn cN(ag: f32) -> f32 {
692
692
  return 2.0 * ag / (1.0 + ag);
693
693
  }
694
694
 
@@ -696,11 +696,11 @@ fn aq(
696
696
  ag: vec3f,
697
697
  transmissionWeight: f32
698
698
  ) -> vec3f {
699
- let gk = 2.0 * ag
699
+ let gE = 2.0 * ag
700
700
  / (vec3f(1.0) + ag);
701
701
  return mix(
702
702
  ag,
703
- gk,
703
+ gE,
704
704
  clamp(transmissionWeight, 0.0, 1.0)
705
705
  );
706
706
  }
@@ -708,23 +708,23 @@ clamp(transmissionWeight, 0.0, 1.0)
708
708
  fn bF(
709
709
  material: OpenPbrResolvedMaterial,
710
710
  J: f32,
711
- bq: f32
711
+ br: f32
712
712
  ) -> vec3f {
713
- let tint = ba(material);
713
+ let tint = bb(material);
714
714
  if (!material.thinWalled) {
715
715
  return tint;
716
716
  }
717
- let iK = max(0.0, 1.0 - J * J);
718
- let dM = iK
719
- / max(bq * bq, 1e-9);
720
- if (dM >= 1.0) {
717
+ let jk = max(0.0, 1.0 - J * J);
718
+ let dR = jk
719
+ / max(br * br, 1e-9);
720
+ if (dR >= 1.0) {
721
721
  return vec3f(0.0);
722
722
  }
723
- let ad = sqrt(1.0 - dM);
723
+ let ad = sqrt(1.0 - dR);
724
724
  return pow(max(tint, vec3f(0.0)), vec3f(1.0 / max(ad, 1e-5)));
725
725
  }
726
726
 
727
- fn dK(
727
+ fn dO(
728
728
  material: OpenPbrResolvedMaterial,
729
729
  viewLocal: vec3f,
730
730
  lightLocal: vec3f,
@@ -735,31 +735,31 @@ if ((viewLocal.z <= 0.0) | (lightLocal.z >= 0.0)) {
735
735
  return vec3f(0.0);
736
736
  }
737
737
  let ad = -lightLocal.z;
738
- let oO = sampling_dielectric_fresnel(
738
+ let pW = sampling_dielectric_fresnel(
739
739
  viewLocal.z,
740
740
  material.relativeIor
741
741
  );
742
742
  *pdf = ad * INVPI;
743
- return vec3f(1.0 - oO) * INVPI;
743
+ return vec3f(1.0 - pW) * INVPI;
744
744
  }
745
745
 
746
- fn dQ(prepared: ptr<function, OpenPbrPreparedBsdf>) {
746
+ fn dW(prepared: ptr<function, OpenPbrPreparedBsdf>) {
747
747
 
748
748
 
749
- let sJ = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
749
+ let ui = min(OPENPBR_LOBE_COUNT, i32(rtUniform.loopUnrollGuard * 2u));
750
750
  var total = (*prepared).probabilities[OPENPBR_LOBE_FUZZ];
751
- for (var lobe = 1; lobe < sJ; lobe++) {
751
+ for (var lobe = 1; lobe < ui; lobe++) {
752
752
  total += (*prepared).probabilities[lobe];
753
753
  }
754
754
  if (total <= 1e-8) {
755
- for (var lobe = 0; lobe < sJ; lobe++) {
755
+ for (var lobe = 0; lobe < ui; lobe++) {
756
756
  (*prepared).probabilities[lobe] = 0.0;
757
757
  }
758
758
  return;
759
759
  }
760
- let oZ = 1.0 / total;
761
- for (var lobe = 0; lobe < sJ; lobe++) {
762
- (*prepared).probabilities[lobe] *= oZ;
760
+ let qh = 1.0 / total;
761
+ for (var lobe = 0; lobe < ui; lobe++) {
762
+ (*prepared).probabilities[lobe] *= qh;
763
763
  }
764
764
  }
765
765
 
@@ -772,22 +772,22 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
772
772
  }
773
773
 
774
774
  fn bL(f0: vec3f, tint: vec3f) -> vec3f {
775
- let da = 1.0 / 7.0;
776
- let fJ = mix(f0, vec3f(1.0), aH(da));
777
- let b = fJ * (vec3f(1.0) - tint) / (da * pow(1.0 - da, 6.0));
775
+ let dd = 1.0 / 7.0;
776
+ let fV = mix(f0, vec3f(1.0), aI(dd));
777
+ let b = fV * (vec3f(1.0) - tint) / (dd * pow(1.0 - dd, 6.0));
778
778
  return clamp(f0 + (vec3f(1.0) - f0) / 21.0 - b / 126.0, vec3f(0.0), vec3f(1.0));
779
779
  }
780
780
 
781
781
 
782
782
 
783
- fn cA(material: OpenPbrResolvedMaterial, cosine: f32) -> vec3f {
783
+ fn cC(material: OpenPbrResolvedMaterial, cosine: f32) -> vec3f {
784
784
  if (cosine <= 0.0) { return vec3f(1.0); }
785
- let lV = sqrt(max(0.0, 1.0 - (1.0 - cosine * cosine) / (material.coatIor * material.coatIor)));
786
- let uZ = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(lV, 1e-5)));
787
- return mix(vec3f(1.0), uZ, material.coatWeight);
785
+ let mP = sqrt(max(0.0, 1.0 - (1.0 - cosine * cosine) / (material.coatIor * material.coatIor)));
786
+ let wN = pow(max(material.coatColor, vec3f(0.0)), vec3f(0.5 / max(mP, 1e-5)));
787
+ return mix(vec3f(1.0), wN, material.coatWeight);
788
788
  }
789
789
 
790
- fn gn(material: OpenPbrResolvedMaterial, cosine: f32) -> f32 {
790
+ fn gH(material: OpenPbrResolvedMaterial, cosine: f32) -> f32 {
791
791
  if (material.coatRoughness <= ROUGHNESS_MIN) {
792
792
  return ae(cosine, 1.0 / material.coatIor);
793
793
  }
@@ -797,39 +797,39 @@ return clamp(1.0 - ar(material.coatIor,
797
797
  material.coatRoughness * material.coatRoughness, cosine), 0.0, 1.0);
798
798
  }
799
799
 
800
- fn gX(prepared: OpenPbrPreparedBsdf) -> vec3f {
800
+ fn hv(prepared: OpenPbrPreparedBsdf) -> vec3f {
801
801
  let material = prepared.material;
802
802
  let dielectric = 1.0 - material.baseMetalness;
803
803
  let opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
804
804
  let sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
805
- let vU = dielectric * material.transmissionWeight;
806
- let fP = bI(prepared.specularEtaTOverEtaI);
807
- let lg = bI(1.0 / prepared.transmissionReflectionIor);
808
- let qA = clamp(opaque * fP + (sss + vU) * lg + material.baseMetalness, 0.0, 1.0);
809
- let jt = mix(1.0, material.specularRoughness, qA);
805
+ let xQ = dielectric * material.transmissionWeight;
806
+ let gb = bI(prepared.specularEtaTOverEtaI);
807
+ let mc = bI(1.0 / prepared.transmissionReflectionIor);
808
+ let rO = clamp(opaque * gb + (sss + xQ) * mc + material.baseMetalness, 0.0, 1.0);
809
+ let jX = mix(1.0, material.specularRoughness, rO);
810
810
  let ks = bI(material.coatIor);
811
811
  let kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
812
- let k = mix(ks, kr, jt);
812
+ let k = mix(ks, kr, jX);
813
813
  let eb = material.baseMetalness * material.specularWeight * bL(material.baseWeight * material.baseColor, material.specularColor)
814
- + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), fP)
815
- + sss * material.subsurfaceColor + vec3f(vU);
816
- let rV = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
817
- return mix(vec3f(1.0), rV, material.coatWeight * material.coatDarkening);
814
+ + opaque * mix(material.baseWeight * material.baseColor, vec3f(1.0), gb)
815
+ + sss * material.subsurfaceColor + vec3f(xQ);
816
+ let tn = vec3f(1.0 - k) / max(vec3f(1.0) - eb * k, vec3f(1e-6));
817
+ return mix(vec3f(1.0), tn, material.coatWeight * material.coatDarkening);
818
818
  }
819
819
 
820
- fn cm(prepared: OpenPbrPreparedBsdf, lF: f32) -> vec3f {
820
+ fn cp(prepared: OpenPbrPreparedBsdf, mx: f32) -> vec3f {
821
821
  if (prepared.material.coatWeight <= 0.0) { return vec3f(1.0); }
822
822
  if (prepared.material.inside) {
823
823
 
824
- return cA(prepared.material, -lF);
824
+ return cC(prepared.material, -mx);
825
825
  }
826
826
 
827
- return prepared.coatBaseScale * cA(prepared.material, lF);
827
+ return prepared.coatBaseScale * cC(prepared.material, mx);
828
828
  }
829
829
 
830
830
 
831
831
  ${hasAnisotropyDirections ? /* wgsl */ `
832
- fn dk(fallback: OpenPbrBasis, tangent: vec3f, bitangent: vec3f, direction: vec2f) -> OpenPbrBasis {
832
+ fn dm(fallback: OpenPbrBasis, tangent: vec3f, bitangent: vec3f, direction: vec2f) -> OpenPbrBasis {
833
833
  var t = tangent - fallback.normal * dot(fallback.normal, tangent);
834
834
  if (dot(t, t) < 1e-8) { t = fallback.tangent; }
835
835
  t = normalize(t);
@@ -844,15 +844,15 @@ return basis;
844
844
  }
845
845
 
846
846
  ` : /* wgsl */ ``}
847
- fn bV(
847
+ fn bX(
848
848
  tangent: vec3f,
849
849
  material: OpenPbrResolvedMaterial,
850
- bD: vec3f,
850
+ bE: vec3f,
851
851
  normal: vec3f
852
852
  ) -> OpenPbrPreparedBsdf {
853
853
  var prepared: OpenPbrPreparedBsdf;
854
854
  prepared.material = material;
855
- prepared.basis = ff(
855
+ prepared.basis = ft(
856
856
  tangent,
857
857
  normal,
858
858
  max(material.specularAnisotropy, material.coatAnisotropy)
@@ -864,39 +864,39 @@ ${hasCoatNormals ? /* wgsl */ `
864
864
 
865
865
 
866
866
  if (material.coatNormalEnabled) {
867
- prepared.coatBasis = ff(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
867
+ prepared.coatBasis = ft(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
868
868
  prepared.directionFrames = true;
869
869
  }
870
870
  ` : ''}
871
871
  if ((material.specularAnisotropy > 0.0) & material.anisotropyDirectionEnabled) {
872
- prepared.basis = dk(prepared.basis, material.directionTangent, material.directionBitangent, material.anisotropyDirection);
872
+ prepared.basis = dm(prepared.basis, material.directionTangent, material.directionBitangent, material.anisotropyDirection);
873
873
  prepared.directionFrames = true;
874
874
  }
875
875
  if ((material.coatAnisotropy > 0.0) & (material.coatAnisotropyRotation != 0.0)) {
876
- prepared.coatBasis = dk(prepared.coatBasis, material.geometryTangent, material.geometryBitangent, vec2f(cos(material.coatAnisotropyRotation), sin(material.coatAnisotropyRotation)));
876
+ prepared.coatBasis = dm(prepared.coatBasis, material.geometryTangent, material.geometryBitangent, vec2f(cos(material.coatAnisotropyRotation), sin(material.coatAnisotropyRotation)));
877
877
  prepared.directionFrames = true;
878
878
  }
879
879
  ` : /* wgsl */ ``}
880
- prepared.viewLocal = openpbr_to_local(prepared.basis, bD);
881
- ${hasCoatNormals ? /* wgsl */ ` prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bD);` : ''}
880
+ prepared.viewLocal = openpbr_to_local(prepared.basis, bE);
881
+ ${hasCoatNormals ? /* wgsl */ ` prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bE);` : ''}
882
882
  prepared.diffuseColor = material.baseColor;
883
883
 
884
- let cu = 1.0 - material.baseMetalness;
885
- let dJ = cu
884
+ let cw = 1.0 - material.baseMetalness;
885
+ let dN = cw
886
886
  * (1.0 - material.transmissionWeight);
887
887
  prepared.weights[OPENPBR_LOBE_FUZZ] = material.fuzzWeight;
888
888
  prepared.weights[OPENPBR_LOBE_COAT] = material.coatWeight;
889
889
  if (material.inside) { prepared.weights[OPENPBR_LOBE_COAT] = 0.0; }
890
890
  prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
891
- prepared.weights[OPENPBR_LOBE_SPECULAR] = cu;
892
- prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cu
891
+ prepared.weights[OPENPBR_LOBE_SPECULAR] = cw;
892
+ prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cw
893
893
  * material.transmissionWeight;
894
- prepared.weights[OPENPBR_LOBE_DIFFUSE] = dJ
894
+ prepared.weights[OPENPBR_LOBE_DIFFUSE] = dN
895
895
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
896
- prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dJ
896
+ prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dN
897
897
  * material.subsurfaceWeight;
898
898
 
899
- prepared.specularEtaTOverEtaI = bb(
899
+ prepared.specularEtaTOverEtaI = bc(
900
900
  1.0 / material.relativeIor,
901
901
  material.specularWeight
902
902
  );
@@ -906,20 +906,20 @@ prepared.transmissionReflectionIor = prepared.material.relativeIor;
906
906
 
907
907
 
908
908
  if (material.coatWeight > 0.0) {
909
- var bX = 1.0;
910
- if (!material.inside) { bX = mix(1.0, material.coatIor, material.coatWeight); }
911
- let bn = bX * bb(
912
- material.specularIor / bX, material.specularWeight);
913
- var eo = bn / bX;
914
- if ((bX > bn) & (bn >= 1.0)) {
915
- eo = 1.0 / eo;
916
- }
917
- prepared.specularEtaTOverEtaI = eo;
918
- prepared.transmissionReflectionIor = 1.0 / eo;
919
- prepared.refractionEtaTOverEtaI = bn;
909
+ var bZ = 1.0;
910
+ if (!material.inside) { bZ = mix(1.0, material.coatIor, material.coatWeight); }
911
+ let bo = bZ * bc(
912
+ material.specularIor / bZ, material.specularWeight);
913
+ var ew = bo / bZ;
914
+ if ((bZ > bo) & (bo >= 1.0)) {
915
+ ew = 1.0 / ew;
916
+ }
917
+ prepared.specularEtaTOverEtaI = ew;
918
+ prepared.transmissionReflectionIor = 1.0 / ew;
919
+ prepared.refractionEtaTOverEtaI = bo;
920
920
  if (material.inside) {
921
- prepared.refractionEtaTOverEtaI = 1.0 / bn;
922
- prepared.transmissionReflectionIor = bn;
921
+ prepared.refractionEtaTOverEtaI = 1.0 / bo;
922
+ prepared.transmissionReflectionIor = bo;
923
923
  }
924
924
  prepared.material.relativeIor = 1.0 / prepared.refractionEtaTOverEtaI;
925
925
  }
@@ -945,41 +945,41 @@ let ag = ae(
945
945
  viewCosine,
946
946
  1.0 / prepared.specularEtaTOverEtaI
947
947
  );
948
- let fu = material.specularColor * select(
948
+ let fJ = material.specularColor * select(
949
949
  ag,
950
950
  mix(
951
951
  ag,
952
- cL(ag),
952
+ cN(ag),
953
953
  material.transmissionWeight
954
954
  ),
955
955
  material.thinWalled
956
956
  );
957
- let hS = material.specularWeight * openpbr_metal_fresnel(
957
+ let iD = material.specularWeight * openpbr_metal_fresnel(
958
958
  viewCosine,
959
959
  material.baseWeight * material.baseColor,
960
960
  material.specularColor
961
961
  );
962
- let eI = select(
962
+ let eS = select(
963
963
  ae(viewCosine, prepared.transmissionReflectionIor),
964
- cL(ae(viewCosine, prepared.transmissionReflectionIor)),
964
+ cN(ae(viewCosine, prepared.transmissionReflectionIor)),
965
965
  material.thinWalled
966
966
  );
967
- let gK = bF(
967
+ let hc = bF(
968
968
  material,
969
969
  viewCosine,
970
970
  prepared.refractionEtaTOverEtaI
971
971
  );
972
- let ir = ar(
972
+ let iT = ar(
973
973
  prepared.specularEtaTOverEtaI,
974
974
  prepared.specularAlpha,
975
975
  viewCosine
976
976
  );
977
- let gq = cj(
977
+ let gJ = ck(
978
978
  prepared.specularEtaTOverEtaI,
979
979
  prepared.specularAlpha
980
980
  );
981
- prepared.diffuseSpecularEnergyCompensation = ir
982
- / max(gq, 1e-12);
981
+ prepared.diffuseSpecularEnergyCompensation = iT
982
+ / max(gJ, 1e-12);
983
983
 
984
984
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
985
985
  * aB(material.fuzzColor)
@@ -991,32 +991,32 @@ prepared.probabilities[OPENPBR_LOBE_COAT] = 0.0;
991
991
  prepared.coatBaseScale = vec3f(1.0);
992
992
  if ((material.coatWeight > 0.0) & !material.inside) {
993
993
  ${hasCoatNormals ? /* wgsl */ `let coatViewCosine = select(viewCosine, max(prepared.coatViewLocal.z, 0.0), material.coatNormalEnabled);` : ''}
994
- let kO = gn(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
995
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kO;
996
- prepared.coatBaseScale = cA(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'})
997
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kO) * gX(prepared);
994
+ let lH = gH(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'});
995
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * lH;
996
+ prepared.coatBaseScale = cC(material, ${hasCoatNormals ? 'coatViewCosine' : 'viewCosine'})
997
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * lH) * hv(prepared);
998
998
  }
999
999
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1000
- * aB(hS);
1000
+ * aB(iD);
1001
1001
  prepared.metalMsScale = vec3f(0.0);
1002
1002
  prepared.metalMsFactor = 0.0;
1003
1003
  prepared.metalMsProbability = 0.0;
1004
1004
 
1005
1005
 
1006
1006
  if ((material.specularRoughness >= 0.04) & (prepared.weights[OPENPBR_LOBE_METAL] > 0.0)) {
1007
- let hI = bL(material.baseWeight * material.baseColor, material.specularColor);
1008
- prepared.metalMsScale = material.specularWeight * hI * hI;
1009
- let qF = aR(prepared.specularAlpha, viewCosine);
1010
- prepared.metalMsFactor = qF / max(cl(prepared.specularAlpha), 1e-12);
1011
- let fe = prepared.weights[OPENPBR_LOBE_METAL] * aB(prepared.metalMsScale) * qF;
1012
- prepared.probabilities[OPENPBR_LOBE_METAL] += fe;
1013
- prepared.metalMsProbability = fe / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1007
+ let il = bL(material.baseWeight * material.baseColor, material.specularColor);
1008
+ prepared.metalMsScale = material.specularWeight * il * il;
1009
+ let rT = aR(prepared.specularAlpha, viewCosine);
1010
+ prepared.metalMsFactor = rT / max(cn(prepared.specularAlpha), 1e-12);
1011
+ let fq = prepared.weights[OPENPBR_LOBE_METAL] * aB(prepared.metalMsScale) * rT;
1012
+ prepared.probabilities[OPENPBR_LOBE_METAL] += fq;
1013
+ prepared.metalMsProbability = fq / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1014
1014
  }
1015
1015
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1016
- * aB(fu);
1016
+ * aB(fJ);
1017
1017
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1018
- * (1.0 - eI)
1019
- * aB(gK);
1018
+ * (1.0 - eS)
1019
+ * aB(hc);
1020
1020
 
1021
1021
 
1022
1022
 
@@ -1031,59 +1031,59 @@ prepared.dielectricMsProbability = 0.0;
1031
1031
  if (!material.thinWalled & (material.transmissionWeight > 0.0) &
1032
1032
  (prepared.specularAlpha >= 0.0016) & (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) &
1033
1033
  (abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6)) {
1034
- let lU = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1035
- prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * lU;
1036
- prepared.dielectricMsTransmissionScale = gK * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1034
+ let mO = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1035
+ prepared.dielectricMsReflectionScale = select(material.specularColor, vec3f(1.0), material.inside) * mO;
1036
+ prepared.dielectricMsTransmissionScale = hc * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1037
1037
  + vec3f(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1038
- prepared.dielectricMsReflectionRatio = bU(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1038
+ prepared.dielectricMsReflectionRatio = bW(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1039
1039
  prepared.dielectricMsViewLoss = aV(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1040
- let oG = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1041
- let fe = aB(oG) * prepared.dielectricMsViewLoss;
1042
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fe;
1043
- prepared.dielectricMsProbability = fe / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1040
+ let pM = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1041
+ let fq = aB(pM) * prepared.dielectricMsViewLoss;
1042
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fq;
1043
+ prepared.dielectricMsProbability = fq / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1044
1044
  }
1045
1045
  prepared.probabilities[OPENPBR_LOBE_DIFFUSE] = prepared.weights[OPENPBR_LOBE_DIFFUSE]
1046
1046
  * aB(prepared.diffuseColor)
1047
1047
  * prepared.diffuseSpecularEnergyCompensation;
1048
1048
  prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1049
- * (1.0 - eI)
1049
+ * (1.0 - eS)
1050
1050
  * aB(material.subsurfaceColor)
1051
1051
  * prepared.diffuseSpecularEnergyCompensation;
1052
1052
 
1053
1053
 
1054
1054
  if ((material.coatWeight > 0.0) & HAS_THIN_FILM & (material.thinFilmWeight > 0.0)) {
1055
- let lD = 0.02 * bJ(material.thinFilmThickness, material.thinFilmWeight);
1056
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lD);
1057
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lD);
1055
+ let mv = 0.02 * bJ(material.thinFilmThickness, material.thinFilmWeight);
1056
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * mv);
1057
+ prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * mv);
1058
1058
  }
1059
1059
  if ((material.coatWeight > 0.0) & !material.inside) {
1060
- let gr = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1061
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gr;
1062
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gr;
1063
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gr;
1064
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gr;
1065
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gr;
1066
- }
1067
- dQ(&prepared);
1060
+ let gK = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1061
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gK;
1062
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gK;
1063
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gK;
1064
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gK;
1065
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gK;
1066
+ }
1067
+ dW(&prepared);
1068
1068
  return prepared;
1069
1069
  }
1070
1070
 
1071
1071
 
1072
- fn cK(prepared: OpenPbrPreparedBsdf, cosine: f32, reflection: bool) -> f32 {
1072
+ fn cM(prepared: OpenPbrPreparedBsdf, cosine: f32, reflection: bool) -> f32 {
1073
1073
  if (prepared.material.coatWeight <= 0.0) {
1074
1074
  return ae(cosine, prepared.material.relativeIor);
1075
1075
  }
1076
- let kA = ae(cosine, prepared.transmissionReflectionIor);
1077
- if (!reflection) { return kA; }
1078
- let nY = ae(cosine, 1.0 / prepared.specularEtaTOverEtaI);
1079
- let sN = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1080
- return mix(nY, kA, sN);
1076
+ let lk = ae(cosine, prepared.transmissionReflectionIor);
1077
+ if (!reflection) { return lk; }
1078
+ let oX = ae(cosine, 1.0 / prepared.specularEtaTOverEtaI);
1079
+ let um = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1080
+ return mix(oX, lk, um);
1081
1081
  }
1082
1082
 
1083
- fn nh(
1083
+ fn og(
1084
1084
  prepared: OpenPbrPreparedBsdf,
1085
1085
  lightDirection: vec3f,
1086
- gL: i32,
1086
+ hg: i32,
1087
1087
  pdf: ptr<function, f32>
1088
1088
  ) -> vec3f {
1089
1089
  let material = prepared.material;
@@ -1111,14 +1111,14 @@ aa = -aa;
1111
1111
  var response = vec3f(0.0);
1112
1112
  *pdf = 0.0;
1113
1113
  var lobePdf = 0.0;
1114
- let mA = gL < 0;
1115
- let wP = mA | (gL == OPENPBR_LOBE_FUZZ);
1116
- let uE = mA | (gL == OPENPBR_LOBE_COAT);
1117
- let tn = mA | (gL == OPENPBR_LOBE_METAL);
1118
- let qW = mA | (gL == OPENPBR_LOBE_SPECULAR);
1119
- let jJ = mA | (gL == OPENPBR_LOBE_TRANSMISSION);
1120
- let uJ = mA | (gL == OPENPBR_LOBE_DIFFUSE);
1121
- let pG = mA | (gL == OPENPBR_LOBE_SUBSURFACE);
1114
+ let nD = hg < 0;
1115
+ let yQ = nD | (hg == OPENPBR_LOBE_FUZZ);
1116
+ let wm = nD | (hg == OPENPBR_LOBE_COAT);
1117
+ let uT = nD | (hg == OPENPBR_LOBE_METAL);
1118
+ let sm = nD | (hg == OPENPBR_LOBE_SPECULAR);
1119
+ let ko = nD | (hg == OPENPBR_LOBE_TRANSMISSION);
1120
+ let ws = nD | (hg == OPENPBR_LOBE_DIFFUSE);
1121
+ let qJ = nD | (hg == OPENPBR_LOBE_SUBSURFACE);
1122
1122
  let viewHalf = abs(dot(viewLocal, aa));
1123
1123
 
1124
1124
 
@@ -1130,37 +1130,37 @@ thinWallHalf = normalize(vec3f(lightLocal.xy, -lightLocal.z) + viewLocal);
1130
1130
  if (thinWallHalf.z < 0.0) { thinWallHalf = -thinWallHalf; }
1131
1131
  dielectricViewHalf = abs(dot(viewLocal, thinWallHalf));
1132
1132
  }
1133
- let mP =
1134
- (reflection & (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) & qW) |
1135
- (!reflection & (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) & jJ);
1136
- let ra = reflection & (prepared.weights[OPENPBR_LOBE_METAL] > 0.0) & tn;
1137
- var oq: array<vec3f, 2>;
1138
- if (mP) {
1139
- oq[0] = vec3f(cK(prepared, dielectricViewHalf, reflection));
1133
+ let nR =
1134
+ (reflection & (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) & sm) |
1135
+ (!reflection & (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) & ko);
1136
+ let sr = reflection & (prepared.weights[OPENPBR_LOBE_METAL] > 0.0) & uT;
1137
+ var pk: array<vec3f, 2>;
1138
+ if (nR) {
1139
+ pk[0] = vec3f(cM(prepared, dielectricViewHalf, reflection));
1140
1140
  }
1141
- if (ra) {
1142
- oq[1] = openpbr_metal_fresnel(viewHalf, material.baseWeight * material.baseColor, material.specularColor);
1141
+ if (sr) {
1142
+ pk[1] = openpbr_metal_fresnel(viewHalf, material.baseWeight * material.baseColor, material.specularColor);
1143
1143
  }
1144
1144
  if (HAS_THIN_FILM & (material.thinFilmWeight > 0.0)) {
1145
- let vV = vec3f(620.0, 540.0, 450.0);
1145
+ let xR = vec3f(620.0, 540.0, 450.0);
1146
1146
 
1147
- for (var lf = 0u; lf < (rtUniform.loopUnrollGuard >> 1u); lf++) {
1148
- if (!select(mP, ra, lf == 1u)) { continue; }
1149
- var wY = vec3f(0.0);
1150
- let J = select(dielectricViewHalf, viewHalf, lf == 1u);
1147
+ for (var mb = 0u; mb < (rtUniform.loopUnrollGuard >> 1u); mb++) {
1148
+ if (!select(nR, sr, mb == 1u)) { continue; }
1149
+ var yY = vec3f(0.0);
1150
+ let J = select(dielectricViewHalf, viewHalf, mb == 1u);
1151
1151
  for (var channel = 0u; channel + 1u < rtUniform.loopUnrollGuard; channel++) {
1152
1152
  var ior = vec2f(prepared.thinFilmBaseIor, 0.0);
1153
- if (lf == 1u) {
1154
- ior = cJ(material.baseWeight * material.baseColor[channel], material.specularColor[channel]);
1153
+ if (mb == 1u) {
1154
+ ior = cL(material.baseWeight * material.baseColor[channel], material.specularColor[channel]);
1155
1155
  }
1156
- wY[channel] = ap(J,
1157
- vV[channel], material.thinFilmThickness, prepared.thinFilmExteriorIor, material.thinFilmIor, ior);
1156
+ yY[channel] = ap(J,
1157
+ xR[channel], material.thinFilmThickness, prepared.thinFilmExteriorIor, material.thinFilmIor, ior);
1158
1158
  }
1159
- oq[lf] = mix(oq[lf], wY,
1159
+ pk[mb] = mix(pk[mb], yY,
1160
1160
  bJ(material.thinFilmThickness, material.thinFilmWeight));
1161
1161
  }
1162
1162
  }
1163
- let ef = oq[0];
1163
+ let em = pk[0];
1164
1164
  let diffuseSpecularEnergyCompensation =
1165
1165
  prepared.diffuseSpecularEnergyCompensation
1166
1166
  * ar(
@@ -1174,8 +1174,8 @@ ${hasCoatNormals ? /* wgsl */ `
1174
1174
  if (!independentCoat | ((lightLocal.z != 0.0) & (reflection == geometricReflection))) {
1175
1175
  ` : ''}
1176
1176
  if (reflection) {
1177
- if ((prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0) & uJ) {
1178
- response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * bw(
1177
+ if ((prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0) & ws) {
1178
+ response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * bB(
1179
1179
  material,
1180
1180
  prepared.diffuseColor,
1181
1181
  viewLocal,
@@ -1186,8 +1186,8 @@ diffuseSpecularEnergyCompensation,
1186
1186
  *pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * lobePdf;
1187
1187
  }
1188
1188
 
1189
- if ((prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) & material.thinWalled & pG) {
1190
- response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * bw(
1189
+ if ((prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) & material.thinWalled & qJ) {
1190
+ response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * bB(
1191
1191
  material,
1192
1192
  material.subsurfaceColor,
1193
1193
  viewLocal,
@@ -1198,15 +1198,15 @@ diffuseSpecularEnergyCompensation,
1198
1198
  *pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * lobePdf;
1199
1199
  }
1200
1200
 
1201
- if ((prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) & qW) {
1202
- var ck = ef;
1201
+ if ((prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) & sm) {
1202
+ var cl = em;
1203
1203
  if (material.thinWalled) {
1204
- ck = aq(
1205
- ck,
1204
+ cl = aq(
1205
+ cl,
1206
1206
  material.transmissionWeight
1207
1207
  );
1208
1208
  }
1209
- let fresnel = material.specularColor * ck;
1209
+ let fresnel = material.specularColor * cl;
1210
1210
  response += prepared.weights[OPENPBR_LOBE_SPECULAR] * aj(
1211
1211
  material,
1212
1212
  viewLocal,
@@ -1218,8 +1218,8 @@ fresnel,
1218
1218
  *pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * lobePdf;
1219
1219
  }
1220
1220
 
1221
- if ((prepared.weights[OPENPBR_LOBE_METAL] > 0.0) & tn) {
1222
- let fresnel = material.specularWeight * oq[1];
1221
+ if ((prepared.weights[OPENPBR_LOBE_METAL] > 0.0) & uT) {
1222
+ let fresnel = material.specularWeight * pk[1];
1223
1223
  response += prepared.weights[OPENPBR_LOBE_METAL] * aj(
1224
1224
  material,
1225
1225
  viewLocal,
@@ -1229,20 +1229,20 @@ fresnel,
1229
1229
  &lobePdf
1230
1230
  );
1231
1231
  if (prepared.metalMsFactor > 0.0) {
1232
- let cv = min(prepared.metalMsFactor * aR(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1233
- response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * cv * INVPI;
1232
+ let cA = min(prepared.metalMsFactor * aR(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1233
+ response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * cA * INVPI;
1234
1234
  lobePdf = mix(lobePdf, 0.5 * INVPI, prepared.metalMsProbability);
1235
1235
  }
1236
1236
  *pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * lobePdf;
1237
1237
  }
1238
1238
  }
1239
1239
  else {
1240
- let fresnel = ef;
1241
- if ((prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) & jJ) {
1240
+ let fresnel = em;
1241
+ if ((prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) & ko) {
1242
1242
  if (material.thinWalled) {
1243
- let lm = vec3f(lightLocal.xy, -lightLocal.z);
1244
- let gk = aq(
1245
- ef,
1243
+ let mi = vec3f(lightLocal.xy, -lightLocal.z);
1244
+ let gE = aq(
1245
+ em,
1246
1246
  1.0
1247
1247
  );
1248
1248
  let tint = bF(
@@ -1254,18 +1254,18 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1254
1254
  * aj(
1255
1255
  material,
1256
1256
  viewLocal,
1257
- lm,
1257
+ mi,
1258
1258
  thinWallHalf,
1259
- tint * (vec3f(1.0) - gk),
1259
+ tint * (vec3f(1.0) - gE),
1260
1260
  &lobePdf
1261
1261
  );
1262
1262
  }
1263
1263
  else {
1264
1264
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1265
- * dc(
1265
+ * df(
1266
1266
  material,
1267
1267
  material.relativeIor,
1268
- ba(material),
1268
+ bb(material),
1269
1269
  viewLocal,
1270
1270
  lightLocal,
1271
1271
  aa,
@@ -1278,22 +1278,22 @@ lobePdf *= 1.0 - prepared.dielectricMsProbability;
1278
1278
  }
1279
1279
  *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * lobePdf;
1280
1280
  }
1281
- if ((prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) & pG) {
1281
+ if ((prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) & qJ) {
1282
1282
  if (material.thinWalled) {
1283
- let oQ = vec3f(lightLocal.xy, -lightLocal.z);
1283
+ let pY = vec3f(lightLocal.xy, -lightLocal.z);
1284
1284
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1285
- * bw(
1285
+ * bB(
1286
1286
  material,
1287
1287
  material.subsurfaceColor,
1288
1288
  viewLocal,
1289
- oQ,
1289
+ pY,
1290
1290
  diffuseSpecularEnergyCompensation,
1291
1291
  &lobePdf
1292
1292
  );
1293
1293
  lobePdf *= 0.5;
1294
1294
  }
1295
1295
  else {
1296
- response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dK(
1296
+ response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dO(
1297
1297
  material,
1298
1298
  viewLocal,
1299
1299
  lightLocal,
@@ -1307,23 +1307,23 @@ lightLocal,
1307
1307
 
1308
1308
 
1309
1309
 
1310
- if ((prepared.dielectricMsProbability > 0.0) & jJ) {
1310
+ if ((prepared.dielectricMsProbability > 0.0) & ko) {
1311
1311
  let cosine = abs(lightLocal.z);
1312
1312
  if (cosine > 0.0) {
1313
1313
  let ior = select(1.0 / prepared.refractionEtaTOverEtaI, prepared.refractionEtaTOverEtaI, reflection);
1314
- let iZ = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1315
- let oP = prepared.dielectricMsViewLoss * aV(ior, prepared.specularAlpha, cosine)
1316
- / max(aY(ior, prepared.specularAlpha), 1e-12);
1317
- let cv = min(oP * iZ, 1.0 / cosine);
1314
+ let fw = select(1.0 - prepared.dielectricMsReflectionRatio, prepared.dielectricMsReflectionRatio, reflection);
1315
+ let pX = prepared.dielectricMsViewLoss * aV(ior, prepared.specularAlpha, cosine)
1316
+ / max(aZ(ior, prepared.specularAlpha), 1e-12);
1317
+ let cA = min(pX * fw, 1.0 / cosine);
1318
1318
  let scale = select(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, reflection);
1319
- response += scale * cv * INVPI;
1320
- *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iZ * 0.5 * INVPI;
1319
+ response += scale * cA * INVPI;
1320
+ *pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * fw * 0.5 * INVPI;
1321
1321
  }
1322
1322
  }
1323
1323
 
1324
1324
  ${hasCoatNormals ? /* wgsl */ ` } ` : ''}
1325
1325
  if (material.coatWeight > 0.0) {
1326
- response *= cm(prepared, ${hasCoatNormals ? 'select(lightLocal.z, coatLightCosine, independentCoat)' : 'lightLocal.z'});
1326
+ response *= cp(prepared, ${hasCoatNormals ? 'select(lightLocal.z, coatLightCosine, independentCoat)' : 'lightLocal.z'});
1327
1327
  }
1328
1328
  ${hasCoatNormals ? /* wgsl */ `
1329
1329
 
@@ -1332,33 +1332,33 @@ if (independentCoat) { response *= abs(lightLocal.z); }
1332
1332
 
1333
1333
  ${hasAnisotropyDirections ? /* wgsl */ `
1334
1334
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} & (prepared.weights[OPENPBR_LOBE_COAT] > 0.0)) {
1335
- var dG = viewLocal;
1336
- var kQ = lightLocal;
1335
+ var dI = viewLocal;
1336
+ var lJ = lightLocal;
1337
1337
  var coatHalf = aa;
1338
1338
  var coatViewHalf = viewHalf;
1339
1339
  if (prepared.directionFrames) {
1340
- dG = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, independentCoat)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'};
1341
- kQ = openpbr_to_local(prepared.coatBasis, lightDirection);
1342
- coatHalf = normalize(kQ + dG);
1340
+ dI = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, independentCoat)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'};
1341
+ lJ = openpbr_to_local(prepared.coatBasis, lightDirection);
1342
+ coatHalf = normalize(lJ + dI);
1343
1343
  if (coatHalf.z < 0.0) { coatHalf = -coatHalf; }
1344
- coatViewHalf = abs(dot(dG, coatHalf));
1344
+ coatViewHalf = abs(dot(dI, coatHalf));
1345
1345
  }
1346
1346
 
1347
- let lB = vec3f(ae(
1347
+ let mr = vec3f(ae(
1348
1348
  coatViewHalf,
1349
1349
  1.0 / material.coatIor
1350
1350
  ));
1351
- var dF = material;
1352
- let jD = aL(material.coatRoughness, material.coatAnisotropy);
1353
- dF.alphaX = jD.x;
1354
- dF.alphaY = jD.y;
1355
- if (uE) {
1351
+ var dH = material;
1352
+ let kh = aL(material.coatRoughness, material.coatAnisotropy);
1353
+ dH.alphaX = kh.x;
1354
+ dH.alphaY = kh.y;
1355
+ if (wm) {
1356
1356
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * aj(
1357
- dF,
1358
- dG,
1359
- kQ,
1357
+ dH,
1358
+ dI,
1359
+ lJ,
1360
1360
  coatHalf,
1361
- lB,
1361
+ mr,
1362
1362
  &lobePdf
1363
1363
  );
1364
1364
  *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * lobePdf;
@@ -1366,21 +1366,21 @@ lB,
1366
1366
  }
1367
1367
  ` : /* wgsl */ `
1368
1368
  if (${hasCoatNormals ? 'select(reflection, coatReflection, independentCoat)' : 'reflection'} & (prepared.weights[OPENPBR_LOBE_COAT] > 0.0)) {
1369
- let lB = vec3f(ae(
1369
+ let mr = vec3f(ae(
1370
1370
  viewHalf,
1371
1371
  1.0 / material.coatIor
1372
1372
  ));
1373
- var dF = material;
1374
- let jD = aL(material.coatRoughness, material.coatAnisotropy);
1375
- dF.alphaX = jD.x;
1376
- dF.alphaY = jD.y;
1377
- if (uE) {
1373
+ var dH = material;
1374
+ let kh = aL(material.coatRoughness, material.coatAnisotropy);
1375
+ dH.alphaX = kh.x;
1376
+ dH.alphaY = kh.y;
1377
+ if (wm) {
1378
1378
  response += prepared.weights[OPENPBR_LOBE_COAT]${hasCoatNormals ? ' * select(1.0, max(coatLightCosine, 0.0), independentCoat)' : ''} * aj(
1379
- dF,
1379
+ dH,
1380
1380
  viewLocal,
1381
1381
  lightLocal,
1382
1382
  aa,
1383
- lB,
1383
+ mr,
1384
1384
  &lobePdf
1385
1385
  );
1386
1386
  *pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * lobePdf;
@@ -1389,16 +1389,16 @@ lB,
1389
1389
  `}
1390
1390
 
1391
1391
  if (${hasCoatNormals ? 'select(reflection, geometricReflection, independentCoat)' : 'reflection'} & (prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0)) {
1392
- let rt = aQ(
1392
+ let sL = aQ(
1393
1393
  abs(viewLocal.z),
1394
1394
  material.fuzzRoughness
1395
1395
  );
1396
1396
  response *= max(
1397
1397
  vec3f(0.0),
1398
- vec3f(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * rt)
1398
+ vec3f(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * sL)
1399
1399
  );
1400
- if (wP) {
1401
- response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * kg(
1400
+ if (yQ) {
1401
+ response += prepared.weights[OPENPBR_LOBE_FUZZ]${hasCoatNormals ? ' * select(1.0, max(lightLocal.z, 0.0), independentCoat)' : ''} * kN(
1402
1402
  material,
1403
1403
  viewLocal,
1404
1404
  lightLocal,
@@ -1416,25 +1416,25 @@ prepared: OpenPbrPreparedBsdf,
1416
1416
  lightDirection: vec3f,
1417
1417
  pdf: ptr<function, f32>
1418
1418
  ) -> vec3f {
1419
- return nh(prepared, lightDirection, -1, pdf);
1419
+ return og(prepared, lightDirection, -1, pdf);
1420
1420
  }
1421
1421
 
1422
1422
 
1423
1423
 
1424
1424
 
1425
1425
 
1426
- fn sj(
1426
+ fn tJ(
1427
1427
  tangent: vec3f,
1428
1428
  material: OpenPbrResolvedMaterial,
1429
- bD: vec3f,
1429
+ bE: vec3f,
1430
1430
  normal: vec3f,
1431
1431
  lightDirection: vec3f,
1432
1432
  pdf: ptr<function, f32>
1433
1433
  ) -> vec3f {
1434
- let prepared = bV(
1434
+ let prepared = bX(
1435
1435
  tangent,
1436
1436
  material,
1437
- bD,
1437
+ bE,
1438
1438
  normal
1439
1439
  );
1440
1440
  return openpbr_eval_prepared(prepared, lightDirection, pdf);
@@ -1444,22 +1444,22 @@ return openpbr_eval_prepared(prepared, lightDirection, pdf);
1444
1444
 
1445
1445
 
1446
1446
 
1447
- fn iW(
1447
+ fn jC(
1448
1448
  prepared: OpenPbrPreparedBsdf, cc: vec3f,
1449
1449
  lightDirection: ptr<function, vec3f>, isTransmissionEvent: ptr<function, bool>,
1450
- aO: ptr<function, f32>, bk: ptr<function, bool>,
1451
- cC: ptr<function, bool>, bh: ptr<function, u32>
1450
+ aO: ptr<function, f32>, bl: ptr<function, bool>,
1451
+ cE: ptr<function, bool>, bi: ptr<function, u32>
1452
1452
  ) -> bool {
1453
1453
  let material = prepared.material;
1454
1454
  let viewLocal = prepared.viewLocal;
1455
- var cp = cc.x;
1456
- let fp = cc.y;
1457
- let bl = cc.z;
1455
+ var cr = cc.x;
1456
+ let fG = cc.y;
1457
+ let bm = cc.z;
1458
1458
  *isTransmissionEvent = false;
1459
1459
  *aO = 1.0;
1460
- *bk = false;
1461
- *cC = false;
1462
- *bh = u32(OPENPBR_LOBE_DIFFUSE);
1460
+ *bl = false;
1461
+ *cE = false;
1462
+ *bi = u32(OPENPBR_LOBE_DIFFUSE);
1463
1463
  *lightDirection = prepared.basis.normal;
1464
1464
 
1465
1465
  var cdf: array<f32, OPENPBR_LOBE_COUNT>;
@@ -1470,40 +1470,40 @@ return false;
1470
1470
  }
1471
1471
 
1472
1472
  var lightLocal: vec3f;
1473
- if ((bl < cdf[OPENPBR_LOBE_FUZZ]) | (
1474
- (bl >= cdf[OPENPBR_LOBE_TRANSMISSION]) & (bl < cdf[OPENPBR_LOBE_DIFFUSE])
1473
+ if ((bm < cdf[OPENPBR_LOBE_FUZZ]) | (
1474
+ (bm >= cdf[OPENPBR_LOBE_TRANSMISSION]) & (bm < cdf[OPENPBR_LOBE_DIFFUSE])
1475
1475
  )) {
1476
- let qy = bl < cdf[OPENPBR_LOBE_FUZZ];
1476
+ let rL = bm < cdf[OPENPBR_LOBE_FUZZ];
1477
1477
  *aO = select(
1478
1478
  1.0,
1479
1479
  material.fuzzRoughness,
1480
- qy
1480
+ rL
1481
1481
  );
1482
- *cC = !qy;
1483
- *bh = select(
1482
+ *cE = !rL;
1483
+ *bi = select(
1484
1484
  u32(OPENPBR_LOBE_DIFFUSE),
1485
1485
  u32(OPENPBR_LOBE_FUZZ),
1486
- qy
1486
+ rL
1487
1487
  );
1488
- lightLocal = aM(vec2f(cp, fp));
1488
+ lightLocal = aM(vec2f(cr, fG));
1489
1489
  }
1490
1490
  ${hasAnisotropyDirections ? /* wgsl */ `
1491
- else if (bl < cdf[OPENPBR_LOBE_COAT]) {
1491
+ else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1492
1492
  *aO = material.coatRoughness;
1493
- *bk = true;
1494
- *bh = u32(OPENPBR_LOBE_COAT);
1495
- var dG = viewLocal;
1496
- if (prepared.directionFrames) { dG = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, material.coatNormalEnabled)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'}; }
1493
+ *bl = true;
1494
+ *bi = u32(OPENPBR_LOBE_COAT);
1495
+ var dI = viewLocal;
1496
+ if (prepared.directionFrames) { dI = ${hasCoatNormals ? 'select(openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)), prepared.coatViewLocal, material.coatNormalEnabled)' : 'openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal))'}; }
1497
1497
  var aa = aA(
1498
- dG,
1498
+ dI,
1499
1499
 
1500
1500
  aL(material.coatRoughness, material.coatAnisotropy),
1501
- vec2f(cp, fp)
1501
+ vec2f(cr, fG)
1502
1502
  );
1503
1503
  if (aa.z < 0.0) {
1504
1504
  aa = -aa;
1505
1505
  }
1506
- lightLocal = normalize(reflect(-dG, aa));
1506
+ lightLocal = normalize(reflect(-dI, aa));
1507
1507
  ${hasCoatNormals ? /* wgsl */ `
1508
1508
  if (material.coatNormalEnabled) {
1509
1509
 
@@ -1514,15 +1514,15 @@ return (lightLocal.z > 0.0) & (dot(material.geometricNormal, *lightDirection) >
1514
1514
  if (prepared.directionFrames) { lightLocal = openpbr_to_local(prepared.basis, openpbr_to_world(prepared.coatBasis, lightLocal)); }
1515
1515
  }
1516
1516
  ` : /* wgsl */ `
1517
- else if (bl < cdf[OPENPBR_LOBE_COAT]) {
1517
+ else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1518
1518
  *aO = material.coatRoughness;
1519
- *bk = true;
1520
- *bh = u32(OPENPBR_LOBE_COAT);
1519
+ *bl = true;
1520
+ *bi = u32(OPENPBR_LOBE_COAT);
1521
1521
  var aa = aA(
1522
1522
  viewLocal,
1523
1523
 
1524
1524
  aL(material.coatRoughness, material.coatAnisotropy),
1525
- vec2f(cp, fp)
1525
+ vec2f(cr, fG)
1526
1526
  );
1527
1527
  if (aa.z < 0.0) {
1528
1528
  aa = -aa;
@@ -1530,27 +1530,27 @@ aa = -aa;
1530
1530
  lightLocal = normalize(reflect(-viewLocal, aa));
1531
1531
  }
1532
1532
  `}
1533
- else if (bl < cdf[OPENPBR_LOBE_SPECULAR]) {
1533
+ else if (bm < cdf[OPENPBR_LOBE_SPECULAR]) {
1534
1534
  *aO = material.specularRoughness;
1535
- *bk = true;
1536
- *bh = select(
1535
+ *bl = true;
1536
+ *bi = select(
1537
1537
  u32(OPENPBR_LOBE_SPECULAR),
1538
1538
  u32(OPENPBR_LOBE_METAL),
1539
- bl < cdf[OPENPBR_LOBE_METAL]
1539
+ bm < cdf[OPENPBR_LOBE_METAL]
1540
1540
  );
1541
- let uU = bl < cdf[OPENPBR_LOBE_METAL];
1542
- let sK = (bl - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1543
- if (uU & (sK < prepared.metalMsProbability)) {
1544
- let z = cp;
1545
- let dr = sqrt(max(0.0, 1.0 - z * z));
1546
- let azimuth = TWOPI * fp;
1547
- lightLocal = vec3f(dr * cos(azimuth), dr * sin(azimuth), z);
1541
+ let wI = bm < cdf[OPENPBR_LOBE_METAL];
1542
+ let uj = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1543
+ if (wI & (uj < prepared.metalMsProbability)) {
1544
+ let z = cr;
1545
+ let dw = sqrt(max(0.0, 1.0 - z * z));
1546
+ let azimuth = TWOPI * fG;
1547
+ lightLocal = vec3f(dw * cos(azimuth), dw * sin(azimuth), z);
1548
1548
  }
1549
1549
  else {
1550
1550
  var aa = aA(
1551
1551
  viewLocal,
1552
1552
  vec2f(material.alphaX, material.alphaY),
1553
- vec2f(cp, fp)
1553
+ vec2f(cr, fG)
1554
1554
  );
1555
1555
  if (aa.z < 0.0) {
1556
1556
  aa = -aa;
@@ -1558,38 +1558,38 @@ aa = -aa;
1558
1558
  lightLocal = normalize(reflect(-viewLocal, aa));
1559
1559
  }
1560
1560
  }
1561
- else if (bl < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1561
+ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1562
1562
  *aO = material.specularRoughness;
1563
- *bk = true;
1563
+ *bl = true;
1564
1564
  *isTransmissionEvent = true;
1565
- *bh = u32(OPENPBR_LOBE_TRANSMISSION);
1565
+ *bi = u32(OPENPBR_LOBE_TRANSMISSION);
1566
1566
 
1567
1567
 
1568
- let wk = (bl - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1569
- if ((prepared.dielectricMsProbability > 0.0) & (wk < prepared.dielectricMsProbability)) {
1570
- let iZ = prepared.dielectricMsReflectionRatio;
1571
- let mv = cp < iZ;
1568
+ let yj = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1569
+ if ((prepared.dielectricMsProbability > 0.0) & (yj < prepared.dielectricMsProbability)) {
1570
+ let fw = prepared.dielectricMsReflectionRatio;
1571
+ let nt = cr < fw;
1572
1572
  var z: f32;
1573
- if (mv) { z = min(cp / iZ, 0.99999994); }
1574
- else { z = -min((cp - iZ) / (1.0 - iZ), 0.99999994); }
1575
- let dr = sqrt(max(0.0, 1.0 - z * z));
1576
- let azimuth = TWOPI * fp;
1577
- lightLocal = vec3f(dr * cos(azimuth), dr * sin(azimuth), z);
1578
- *isTransmissionEvent = !mv;
1579
- *bh = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), mv);
1573
+ if (nt) { z = min(cr / fw, 0.99999994); }
1574
+ else { z = -min((cr - fw) / (1.0 - fw), 0.99999994); }
1575
+ let dw = sqrt(max(0.0, 1.0 - z * z));
1576
+ let azimuth = TWOPI * fG;
1577
+ lightLocal = vec3f(dw * cos(azimuth), dw * sin(azimuth), z);
1578
+ *isTransmissionEvent = !nt;
1579
+ *bi = select(u32(OPENPBR_LOBE_TRANSMISSION), u32(OPENPBR_LOBE_SPECULAR), nt);
1580
1580
  }
1581
1581
  else {
1582
1582
  var aa = aA(
1583
1583
  viewLocal,
1584
1584
  vec2f(material.alphaX, material.alphaY),
1585
- vec2f(cp, fp)
1585
+ vec2f(cr, fG)
1586
1586
  );
1587
1587
  if (aa.z < 0.0) {
1588
1588
  aa = -aa;
1589
1589
  }
1590
1590
  if (material.thinWalled) {
1591
- let hX = normalize(reflect(-viewLocal, aa));
1592
- lightLocal = vec3f(hX.xy, -hX.z);
1591
+ let iI = normalize(reflect(-viewLocal, aa));
1592
+ lightLocal = vec3f(iI.xy, -iI.z);
1593
1593
  }
1594
1594
  else {
1595
1595
  lightLocal = refract(
@@ -1607,19 +1607,19 @@ lightLocal = normalize(lightLocal);
1607
1607
  }
1608
1608
  else {
1609
1609
  *aO = 1.0;
1610
- *cC = true;
1610
+ *cE = true;
1611
1611
  *isTransmissionEvent = true;
1612
- *bh = u32(OPENPBR_LOBE_SUBSURFACE);
1612
+ *bi = u32(OPENPBR_LOBE_SUBSURFACE);
1613
1613
  if (material.thinWalled) {
1614
- let qD = cp >= 0.5;
1615
- if (qD) {
1616
- cp = (cp - 0.5) * 2.0;
1614
+ let rR = cr >= 0.5;
1615
+ if (rR) {
1616
+ cr = (cr - 0.5) * 2.0;
1617
1617
  }
1618
1618
  else {
1619
- cp *= 2.0;
1619
+ cr *= 2.0;
1620
1620
  }
1621
- lightLocal = aM(vec2f(cp, fp));
1622
- if (qD) {
1621
+ lightLocal = aM(vec2f(cr, fG));
1622
+ if (rR) {
1623
1623
  lightLocal.z = -lightLocal.z;
1624
1624
  }
1625
1625
  else {
@@ -1627,7 +1627,7 @@ else {
1627
1627
  }
1628
1628
  }
1629
1629
  else {
1630
- lightLocal = aM(vec2f(cp, fp));
1630
+ lightLocal = aM(vec2f(cr, fG));
1631
1631
  lightLocal.z = -lightLocal.z;
1632
1632
  }
1633
1633
  }
@@ -1646,22 +1646,22 @@ if (material.coatNormalEnabled &
1646
1646
  return true;
1647
1647
  }
1648
1648
 
1649
- fn dl(
1649
+ fn dr(
1650
1650
  prepared: OpenPbrPreparedBsdf,
1651
1651
  cc: vec3f,
1652
1652
  lightDirection: ptr<function, vec3f>,
1653
1653
  pdf: ptr<function, f32>,
1654
1654
  isTransmissionEvent: ptr<function, bool>,
1655
1655
  aO: ptr<function, f32>,
1656
- bk: ptr<function, bool>,
1657
- cC: ptr<function, bool>,
1658
- bh: ptr<function, u32>,
1656
+ bl: ptr<function, bool>,
1657
+ cE: ptr<function, bool>,
1658
+ bi: ptr<function, u32>,
1659
1659
  marginalPdf: ptr<function, f32>,
1660
- jU: ptr<function, vec3f>
1660
+ kA: ptr<function, vec3f>
1661
1661
  ) -> vec3f {
1662
1662
  *pdf = 0.0;
1663
1663
  *marginalPdf = 0.0;
1664
- *jU = vec3f(0.0);
1664
+ *kA = vec3f(0.0);
1665
1665
 
1666
1666
 
1667
1667
 
@@ -1673,61 +1673,61 @@ if (!prepared.material.thinWalled &
1673
1673
  prepared.basis,
1674
1674
  -prepared.viewLocal
1675
1675
  );
1676
- let ov = ba(prepared.material)
1677
- * cm(prepared, ${hasCoatNormals ? 'select(-prepared.viewLocal.z, dot(prepared.coatBasis.normal, *lightDirection), prepared.material.coatNormalEnabled)' : '-prepared.viewLocal.z'});
1676
+ let pp = bb(prepared.material)
1677
+ * cp(prepared, ${hasCoatNormals ? 'select(-prepared.viewLocal.z, dot(prepared.coatBasis.normal, *lightDirection), prepared.material.coatNormalEnabled)' : '-prepared.viewLocal.z'});
1678
1678
  *pdf = 1.0;
1679
1679
  *marginalPdf = 1.0;
1680
- *jU = ov;
1680
+ *kA = pp;
1681
1681
  *isTransmissionEvent = true;
1682
1682
  *aO = 0.0;
1683
- *bk = true;
1684
- *cC = false;
1685
- *bh = u32(OPENPBR_LOBE_TRANSMISSION);
1686
- return ov;
1687
- }
1688
- if (!iW(prepared, cc, lightDirection,
1689
- isTransmissionEvent, aO, bk,
1690
- cC, bh)) { return vec3f(0.0); }
1683
+ *bl = true;
1684
+ *cE = false;
1685
+ *bi = u32(OPENPBR_LOBE_TRANSMISSION);
1686
+ return pp;
1687
+ }
1688
+ if (!jC(prepared, cc, lightDirection,
1689
+ isTransmissionEvent, aO, bl,
1690
+ cE, bi)) { return vec3f(0.0); }
1691
1691
  let response = openpbr_eval_prepared(prepared, *lightDirection, pdf);
1692
1692
  *marginalPdf = *pdf;
1693
- *jU = response;
1693
+ *kA = response;
1694
1694
  return response;
1695
1695
  }
1696
1696
 
1697
- fn uc(
1697
+ fn vL(
1698
1698
  tangent: vec3f,
1699
1699
  material: OpenPbrResolvedMaterial,
1700
1700
  cc: vec3f,
1701
- bD: vec3f,
1701
+ bE: vec3f,
1702
1702
  normal: vec3f,
1703
1703
  lightDirection: ptr<function, vec3f>,
1704
1704
  pdf: ptr<function, f32>,
1705
1705
  isTransmissionEvent: ptr<function, bool>,
1706
1706
  aO: ptr<function, f32>,
1707
- bk: ptr<function, bool>,
1708
- cC: ptr<function, bool>,
1709
- bh: ptr<function, u32>,
1707
+ bl: ptr<function, bool>,
1708
+ cE: ptr<function, bool>,
1709
+ bi: ptr<function, u32>,
1710
1710
  marginalPdf: ptr<function, f32>
1711
1711
  ) -> vec3f {
1712
- let prepared = bV(
1712
+ let prepared = bX(
1713
1713
  tangent,
1714
1714
  material,
1715
- bD,
1715
+ bE,
1716
1716
  normal
1717
1717
  );
1718
- var jU = vec3f(0.0);
1719
- return dl(
1718
+ var kA = vec3f(0.0);
1719
+ return dr(
1720
1720
  prepared,
1721
1721
  cc,
1722
1722
  lightDirection,
1723
1723
  pdf,
1724
1724
  isTransmissionEvent,
1725
1725
  aO,
1726
- bk,
1727
- cC,
1728
- bh,
1726
+ bl,
1727
+ cE,
1728
+ bi,
1729
1729
  marginalPdf,
1730
- &jU
1730
+ &kA
1731
1731
  );
1732
1732
  }`;
1733
1733
  }