@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
@@ -68,213 +68,213 @@ float aB(vec3 color) {
68
68
  return dot(color, vec3(0.212671, 0.715160, 0.072169));
69
69
  }
70
70
 
71
- float cO(float bq) {
72
- float value = (bq - 1.0) / (bq + 1.0);
71
+ float cR(float br) {
72
+ float value = (br - 1.0) / (br + 1.0);
73
73
  return value * value;
74
74
  }
75
75
 
76
- float bb(
77
- float bq,
76
+ float bc(
77
+ float br,
78
78
  float specularWeight
79
79
  ) {
80
- float uj = min(
81
- cO(bq) * specularWeight,
80
+ float vT = min(
81
+ cR(br) * specularWeight,
82
82
  0.9999
83
83
  );
84
- float ul = sqrt(uj);
85
- float lC = (1.0 + ul) / (1.0 - ul);
86
- return bq < 1.0 ? 1.0 / lC : lC;
84
+ float vV = sqrt(vT);
85
+ float mt = (1.0 + vV) / (1.0 - vV);
86
+ return br < 1.0 ? 1.0 / mt : mt;
87
87
  }
88
88
 
89
- float ae(float ct, float relativeIor) {
89
+ float ae(float cv, float relativeIor) {
90
90
  if (abs(relativeIor - 1.0) < 1e-6) {
91
91
  return 0.0;
92
92
  }
93
- return sampling_dielectric_fresnel(ct, relativeIor);
93
+ return sampling_dielectric_fresnel(cv, relativeIor);
94
94
  }
95
95
 
96
- float aE(float ior) {
96
+ float aF(float ior) {
97
97
  if (ior < 1.0) {
98
98
  return 15.0 - ((1.0 / ior - 1.0) / 1.5) * 15.0;
99
99
  }
100
100
  return 16.0 + ((ior - 1.0) / 1.5) * 15.0;
101
101
  }
102
102
 
103
- float F(int tC, int row) {
104
- return texelFetch(openPbrEnergyLut, ivec2(tC, row), 0).r;
103
+ float F(int vc, int row) {
104
+ return texelFetch(openPbrEnergyLut, ivec2(vc, row), 0).r;
105
105
  }
106
106
 
107
- float gd(
108
- float dH,
107
+ float gu(
108
+ float dJ,
109
109
  float bM,
110
- float hN
110
+ float iv
111
111
  ) {
112
- float br = clamp(dH, 0.0, 31.0);
112
+ float bw = clamp(dJ, 0.0, 31.0);
113
113
  float aK = clamp(bM, 0.0, 31.0);
114
- float bp = clamp(hN, 0.0, 31.0);
115
- int dP = int(floor(br));
114
+ float bq = clamp(iv, 0.0, 31.0);
115
+ int dV = int(floor(bw));
116
116
  int aP = int(floor(aK));
117
- int cD = int(floor(bp));
118
- int hB = min(dP + 1, 31);
119
- int ch = min(aP + 1, 31);
120
- int eK = min(cD + 1, 31);
121
- float ci = br - float(dP);
122
- float cq = aK - float(aP);
123
- float kR = bp - float(cD);
124
-
125
- float wv = F(cD, dP * 32 + aP);
126
- float ww = F(eK, dP * 32 + aP);
127
- float wx = F(cD, dP * 32 + ch);
128
- float wy = F(eK, dP * 32 + ch);
129
- float wB = F(cD, hB * 32 + aP);
130
- float wC = F(eK, hB * 32 + aP);
131
- float wE = F(cD, hB * 32 + ch);
132
- float wF = F(eK, hB * 32 + ch);
133
- float v00 = mix(wv, wB, ci);
134
- float v01 = mix(ww, wC, ci);
135
- float v10 = mix(wx, wE, ci);
136
- float v11 = mix(wy, wF, ci);
117
+ int cG = int(floor(bq));
118
+ int hX = min(dV + 1, 31);
119
+ int ci = min(aP + 1, 31);
120
+ int eU = min(cG + 1, 31);
121
+ float cj = bw - float(dV);
122
+ float ct = aK - float(aP);
123
+ float lK = bq - float(cG);
124
+
125
+ float ys = F(cG, dV * 32 + aP);
126
+ float yt = F(eU, dV * 32 + aP);
127
+ float yu = F(cG, dV * 32 + ci);
128
+ float yv = F(eU, dV * 32 + ci);
129
+ float yw = F(cG, hX * 32 + aP);
130
+ float yA = F(eU, hX * 32 + aP);
131
+ float yB = F(cG, hX * 32 + ci);
132
+ float yC = F(eU, hX * 32 + ci);
133
+ float v00 = mix(ys, yw, cj);
134
+ float v01 = mix(yt, yA, cj);
135
+ float v10 = mix(yu, yB, cj);
136
+ float v11 = mix(yv, yC, cj);
137
137
  return mix(
138
- mix(v00, v10, cq),
139
- mix(v01, v11, cq),
140
- kR
138
+ mix(v00, v10, ct),
139
+ mix(v01, v11, ct),
140
+ lK
141
141
  );
142
142
  }
143
143
 
144
- float gA(float dH, float bM) {
145
- float br = clamp(dH, 0.0, 31.0);
144
+ float gU(float dJ, float bM) {
145
+ float bw = clamp(dJ, 0.0, 31.0);
146
146
  float aK = clamp(bM, 0.0, 31.0);
147
- int dP = int(floor(br));
147
+ int dV = int(floor(bw));
148
148
  int aP = int(floor(aK));
149
- int hB = min(dP + 1, 31);
150
- int ch = min(aP + 1, 31);
151
- float ci = br - float(dP);
152
- float cq = aK - float(aP);
153
- float v00 = F(aP, 1024 + dP);
154
- float v01 = F(ch, 1024 + dP);
155
- float v10 = F(aP, 1024 + hB);
156
- float v11 = F(ch, 1024 + hB);
149
+ int hX = min(dV + 1, 31);
150
+ int ci = min(aP + 1, 31);
151
+ float cj = bw - float(dV);
152
+ float ct = aK - float(aP);
153
+ float v00 = F(aP, 1024 + dV);
154
+ float v01 = F(ci, 1024 + dV);
155
+ float v10 = F(aP, 1024 + hX);
156
+ float v11 = F(ci, 1024 + hX);
157
157
  return mix(
158
- mix(v00, v10, ci),
159
- mix(v01, v11, ci),
160
- cq
158
+ mix(v00, v10, cj),
159
+ mix(v01, v11, cj),
160
+ ct
161
161
  );
162
162
  }
163
163
 
164
164
 
165
165
 
166
- float ee(
167
- float dH,
166
+ float el(
167
+ float dJ,
168
168
  float bM,
169
- float hN
169
+ float iv
170
170
  ) {
171
- float br = clamp(dH, 0.0, 31.0);
171
+ float bw = clamp(dJ, 0.0, 31.0);
172
172
  float aK = clamp(bM, 0.0, 31.0);
173
- float bp = clamp(hN, 0.0, 31.0);
174
- int dP = int(floor(br));
173
+ float bq = clamp(iv, 0.0, 31.0);
174
+ int dV = int(floor(bw));
175
175
  int aP = int(floor(aK));
176
- int cD = int(floor(bp));
177
- int hB = min(dP + 1, 31);
178
- int ch = min(aP + 1, 31);
179
- int eK = min(cD + 1, 31);
180
- float ci = br - float(dP);
181
- float cq = aK - float(aP);
182
- float kR = bp - float(cD);
183
-
184
- float wv = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aP);
185
- float ww = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aP);
186
- float wx = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + ch);
187
- float wy = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + ch);
188
- float wB = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aP);
189
- float wC = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aP);
190
- float wE = F(cD, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + ch);
191
- float wF = F(eK, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + ch);
192
- float v00 = mix(wv, wB, ci);
193
- float v01 = mix(ww, wC, ci);
194
- float v10 = mix(wx, wE, ci);
195
- float v11 = mix(wy, wF, ci);
176
+ int cG = int(floor(bq));
177
+ int hX = min(dV + 1, 31);
178
+ int ci = min(aP + 1, 31);
179
+ int eU = min(cG + 1, 31);
180
+ float cj = bw - float(dV);
181
+ float ct = aK - float(aP);
182
+ float lK = bq - float(cG);
183
+
184
+ float ys = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + aP);
185
+ float yt = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + aP);
186
+ float yu = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + ci);
187
+ float yv = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dV * 32 + ci);
188
+ float yw = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + aP);
189
+ float yA = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + aP);
190
+ float yB = F(cG, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + ci);
191
+ float yC = F(eU, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hX * 32 + ci);
192
+ float v00 = mix(ys, yw, cj);
193
+ float v01 = mix(yt, yA, cj);
194
+ float v10 = mix(yu, yB, cj);
195
+ float v11 = mix(yv, yC, cj);
196
196
  return mix(
197
- mix(v00, v10, cq),
198
- mix(v01, v11, cq),
199
- kR
197
+ mix(v00, v10, ct),
198
+ mix(v01, v11, ct),
199
+ lK
200
200
  );
201
201
  }
202
202
 
203
- float ec(float dH, float bM) {
204
- float br = clamp(dH, 0.0, 31.0);
203
+ float ek(float dJ, float bM) {
204
+ float bw = clamp(dJ, 0.0, 31.0);
205
205
  float aK = clamp(bM, 0.0, 31.0);
206
- int dP = int(floor(br));
206
+ int dV = int(floor(bw));
207
207
  int aP = int(floor(aK));
208
- int hB = min(dP + 1, 31);
209
- int ch = min(aP + 1, 31);
210
- float ci = br - float(dP);
211
- float cq = aK - float(aP);
212
- float v00 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
213
- float v01 = F(ch, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dP);
214
- float v10 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
215
- float v11 = F(ch, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hB);
208
+ int hX = min(dV + 1, 31);
209
+ int ci = min(aP + 1, 31);
210
+ float cj = bw - float(dV);
211
+ float ct = aK - float(aP);
212
+ float v00 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dV);
213
+ float v01 = F(ci, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dV);
214
+ float v10 = F(aP, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hX);
215
+ float v11 = F(ci, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hX);
216
216
  return mix(
217
- mix(v00, v10, ci),
218
- mix(v01, v11, ci),
219
- cq
217
+ mix(v00, v10, cj),
218
+ mix(v01, v11, cj),
219
+ ct
220
220
  );
221
221
  }
222
222
 
223
- float eC(float dH, float bM) {
224
- float br = clamp(dH, 0.0, 31.0);
223
+ float eL(float dJ, float bM) {
224
+ float bw = clamp(dJ, 0.0, 31.0);
225
225
  float aK = clamp(bM, 0.0, 31.0);
226
- int dP = int(floor(br));
226
+ int dV = int(floor(bw));
227
227
  int aP = int(floor(aK));
228
- int hB = min(dP + 1, 31);
229
- int ch = min(aP + 1, 31);
230
- float ci = br - float(dP);
231
- float cq = aK - float(aP);
232
- float v00 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
233
- float v01 = F(ch, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dP);
234
- float v10 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
235
- float v11 = F(ch, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hB);
228
+ int hX = min(dV + 1, 31);
229
+ int ci = min(aP + 1, 31);
230
+ float cj = bw - float(dV);
231
+ float ct = aK - float(aP);
232
+ float v00 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dV);
233
+ float v01 = F(ci, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dV);
234
+ float v10 = F(aP, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hX);
235
+ float v11 = F(ci, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hX);
236
236
  return mix(
237
- mix(v00, v10, ci),
238
- mix(v01, v11, ci),
239
- cq
237
+ mix(v00, v10, cj),
238
+ mix(v01, v11, cj),
239
+ ct
240
240
  );
241
241
  }
242
242
 
243
243
  float aV(float ior, float alpha, float cosine) {
244
- return ee(aE(ior), sqrt(alpha) * 31.0, cosine * 31.0);
244
+ return el(aF(ior), sqrt(alpha) * 31.0, cosine * 31.0);
245
245
  }
246
- float aY(float ior, float alpha) {
247
- return ec(aE(ior), sqrt(alpha) * 31.0);
246
+ float aZ(float ior, float alpha) {
247
+ return ek(aF(ior), sqrt(alpha) * 31.0);
248
248
  }
249
- float bU(float ior, float alpha) {
250
- return eC(aE(ior), sqrt(alpha) * 31.0);
249
+ float bW(float ior, float alpha) {
250
+ return eL(aF(ior), sqrt(alpha) * 31.0);
251
251
  }
252
252
 
253
253
 
254
254
  float aR(float alpha, float cosine) {
255
- float ie = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
- float bp = clamp(cosine * 31.0, 0.0, 31.0);
257
- int r0 = int(floor(ie));
258
- int c0 = int(floor(bp));
255
+ float iL = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
+ float bq = clamp(cosine * 31.0, 0.0, 31.0);
257
+ int r0 = int(floor(iL));
258
+ int c0 = int(floor(bq));
259
259
  int r1 = min(r0 + 1, 31);
260
260
  int c1 = min(c0 + 1, 31);
261
261
  return mix(
262
- mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bp)),
263
- mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bp)),
264
- fract(ie));
262
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bq)),
263
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bq)),
264
+ fract(iL));
265
265
  }
266
266
 
267
- float cl(float alpha) {
267
+ float cn(float alpha) {
268
268
  float index = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
269
269
  int i0 = int(floor(index));
270
270
  return mix(F(i0, ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}),
271
271
  F(min(i0 + 1, 31), ${OPENPBR_METAL_ENERGY_LUT_AVERAGE_ROW}), fract(index));
272
272
  }
273
273
 
274
- float aX(float value, float ior) {
274
+ float aY(float value, float ior) {
275
275
  if (ior > 2.5 || ior < 0.4) {
276
- float vH = cO(2.5);
277
- float progress = (cO(ior) - vH) / (1.0 - vH);
276
+ float xv = cR(2.5);
277
+ float progress = (cR(ior) - xv) / (1.0 - xv);
278
278
  return (1.0 - progress) * value;
279
279
  }
280
280
  return value;
@@ -285,20 +285,20 @@ float ior,
285
285
  float alpha,
286
286
  float cosine
287
287
  ) {
288
- float value = gd(
289
- aE(ior),
288
+ float value = gu(
289
+ aF(ior),
290
290
  sqrt(alpha) * 31.0,
291
291
  cosine * 31.0
292
292
  );
293
- return aX(value, ior);
293
+ return aY(value, ior);
294
294
  }
295
295
 
296
- float cj(float ior, float alpha) {
297
- float value = gA(
298
- aE(ior),
296
+ float ck(float ior, float alpha) {
297
+ float value = gU(
298
+ aF(ior),
299
299
  sqrt(alpha) * 31.0
300
300
  );
301
- return aX(value, ior);
301
+ return aY(value, ior);
302
302
  }
303
303
 
304
304
  vec3 openpbr_to_world(OpenPbrBasis basis, vec3 direction) {
@@ -315,8 +315,8 @@ dot(direction, basis.normal)
315
315
  );
316
316
  }
317
317
 
318
- OpenPbrBasis ff(
319
- vec3 aS,
318
+ OpenPbrBasis ft(
319
+ vec3 aT,
320
320
  vec3 normal,
321
321
  float anisotropy
322
322
  ) {
@@ -324,7 +324,7 @@ OpenPbrBasis basis;
324
324
  basis.normal = normal;
325
325
  basis.tangent = vec3(0.0);
326
326
  #ifdef USE_TANGENT
327
- basis.tangent = aS;
327
+ basis.tangent = aT;
328
328
  #endif
329
329
  if (dot(basis.tangent, basis.tangent) < 0.001 || anisotropy <= 0.0) {
330
330
  sampling_orthonormal_basis(normal, basis.tangent, basis.bitangent);
@@ -336,7 +336,7 @@ basis.tangent = normalize(cross(basis.bitangent, normal));
336
336
  return basis;
337
337
  }
338
338
 
339
- float ki(
339
+ float kP(
340
340
  float av,
341
341
  float ai,
342
342
  float J,
@@ -346,7 +346,7 @@ return (av * J - ai * ad)
346
346
  / (av * J + ai * ad);
347
347
  }
348
348
 
349
- float kh(
349
+ float kO(
350
350
  float av,
351
351
  float ai,
352
352
  float J,
@@ -356,7 +356,7 @@ return (ai * J - av * ad)
356
356
  / (av * ad + ai * J);
357
357
  }
358
358
 
359
- float gZ(
359
+ float hx(
360
360
  float av,
361
361
  float ai,
362
362
  float J,
@@ -366,7 +366,7 @@ return 2.0 * av * J
366
366
  / (av * J + ai * ad);
367
367
  }
368
368
 
369
- float gY(
369
+ float hw(
370
370
  float av,
371
371
  float ai,
372
372
  float J,
@@ -376,11 +376,11 @@ return 2.0 * av * J
376
376
  / (av * ad + ai * J);
377
377
  }
378
378
 
379
- vec2 aT(vec2 a, vec2 b) {
379
+ vec2 aU(vec2 a, vec2 b) {
380
380
  return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
381
381
  }
382
382
 
383
- vec2 bc(vec2 a, vec2 b) {
383
+ vec2 bd(vec2 a, vec2 b) {
384
384
  float ah = max(dot(b, b), 1e-9);
385
385
  return vec2(
386
386
  (a.x * b.x + a.y * b.y) / ah,
@@ -388,133 +388,133 @@ return vec2(
388
388
  );
389
389
  }
390
390
 
391
- vec2 hV(vec2 value) {
392
- float gz = length(value);
393
- float ui = sqrt(max(0.0, 0.5 * (gz + value.x)));
394
- float fc = sqrt(max(0.0, 0.5 * (gz - value.x)));
395
- return vec2(ui, value.y >= 0.0 ? fc : -fc);
391
+ vec2 iG(vec2 value) {
392
+ float gT = length(value);
393
+ float vS = sqrt(max(0.0, 0.5 * (gT + value.x)));
394
+ float fo = sqrt(max(0.0, 0.5 * (gT - value.x)));
395
+ return vec2(vS, value.y >= 0.0 ? fo : -fo);
396
396
  }
397
397
 
398
- vec2 bR(
398
+ vec2 bS(
399
399
  float J,
400
400
  float av,
401
401
  vec2 ai,
402
- bool rH
402
+ bool sX
403
403
  ) {
404
- float oV = sqrt(max(0.0, 1.0 - J * J));
405
- vec2 tR = bc(vec2(av, 0.0), ai);
406
- vec2 hx = tR * oV;
407
- vec2 ad = hV(
408
- vec2(1.0, 0.0) - aT(hx, hx)
404
+ float qd = sqrt(max(0.0, 1.0 - J * J));
405
+ vec2 vA = bd(vec2(av, 0.0), ai);
406
+ vec2 hR = vA * qd;
407
+ vec2 ad = iG(
408
+ vec2(1.0, 0.0) - aU(hR, hR)
409
409
  );
410
- if (aT(ai, ad).y < 0.0) {
410
+ if (aU(ai, ad).y < 0.0) {
411
411
  ad = -ad;
412
412
  }
413
413
 
414
- vec2 fL = vec2(av * J, 0.0);
415
- vec2 eu = aT(ai, ad);
416
- if (rH) {
417
- vec2 bW = ai * J;
418
- vec2 bT = ad * av;
419
- return bc(
420
- bW - bT,
421
- bW + bT
414
+ vec2 fX = vec2(av * J, 0.0);
415
+ vec2 eC = aU(ai, ad);
416
+ if (sX) {
417
+ vec2 bY = ai * J;
418
+ vec2 bV = ad * av;
419
+ return bd(
420
+ bY - bV,
421
+ bY + bV
422
422
  );
423
423
  }
424
- return bc(
425
- fL - eu,
426
- fL + eu
424
+ return bd(
425
+ fX - eC,
426
+ fX + eC
427
427
  );
428
428
  }
429
429
 
430
- float em(
431
- float iI,
432
- float gJ,
433
- float pk,
434
- float nA,
435
- vec2 ko,
430
+ float ev(
431
+ float jh,
432
+ float hb,
433
+ float qu,
434
+ float ov,
435
+ vec2 kV,
436
436
  float phase
437
437
  ) {
438
- vec2 nZ = vec2(cos(phase), sin(phase));
439
- vec2 hY = aT(ko, nZ);
440
- vec2 iF = hY * (gJ * nA);
441
- vec2 ah = vec2(1.0, 0.0) - hY * pk;
442
- vec2 hw = vec2(iI, 0.0)
443
- + bc(iF, ah);
444
- return dot(hw, hw);
438
+ vec2 oY = vec2(cos(phase), sin(phase));
439
+ vec2 iJ = aU(kV, oY);
440
+ vec2 je = iJ * (hb * ov);
441
+ vec2 ah = vec2(1.0, 0.0) - iJ * qu;
442
+ vec2 hQ = vec2(jh, 0.0)
443
+ + bd(je, ah);
444
+ return dot(hQ, hQ);
445
445
  }
446
446
 
447
447
  float ap(
448
448
  float J,
449
449
  float wavelength,
450
- float cf,
450
+ float ch,
451
451
  float aN,
452
- float bY,
453
- vec2 ep
452
+ float ca,
453
+ vec2 ey
454
454
  ) {
455
455
  J = clamp(abs(J), 1e-5, 1.0);
456
- float hp = pow(aN / bY, 2.0)
456
+ float hJ = pow(aN / ca, 2.0)
457
457
  * (1.0 - J * J);
458
- if (hp >= 1.0) {
458
+ if (hJ >= 1.0) {
459
459
  return 1.0;
460
460
  }
461
- float cN = sqrt(1.0 - hp);
462
- float lq = ki(
463
- aN, bY, J, cN
461
+ float cQ = sqrt(1.0 - hJ);
462
+ float ml = kP(
463
+ aN, ca, J, cQ
464
464
  );
465
- float lp = kh(
466
- aN, bY, J, cN
465
+ float mk = kO(
466
+ aN, ca, J, cQ
467
467
  );
468
- float jm = gZ(
469
- aN, bY, J, cN
468
+ float jQ = hx(
469
+ aN, ca, J, cQ
470
470
  );
471
- float jl = gY(
472
- aN, bY, J, cN
471
+ float jP = hw(
472
+ aN, ca, J, cQ
473
473
  );
474
- float gp = bY * cN
474
+ float gI = ca * cQ
475
475
  / max(aN * J, 1e-9);
476
- vec2 uB = bR(
477
- cN, bY, ep, false
478
- );
479
- vec2 uA = bR(
480
- cN, bY, ep, true
481
- );
482
- float phase = 2.0 * PI * (2.0 * bY * cf * cN) / wavelength;
483
- float vh = em(
484
- lq,
485
- jm,
486
- -lq,
487
- jm * gp,
488
- uB,
476
+ vec2 wh = bS(
477
+ cQ, ca, ey, false
478
+ );
479
+ vec2 wg = bS(
480
+ cQ, ca, ey, true
481
+ );
482
+ float phase = 2.0 * PI * (2.0 * ca * ch * cQ) / wavelength;
483
+ float wV = ev(
484
+ ml,
485
+ jQ,
486
+ -ml,
487
+ jQ * gI,
488
+ wh,
489
489
  phase
490
490
  );
491
- float vg = em(
492
- lp,
493
- jl,
494
- -lp,
495
- jl * gp,
496
- uA,
491
+ float wU = ev(
492
+ mk,
493
+ jP,
494
+ -mk,
495
+ jP * gI,
496
+ wg,
497
497
  phase
498
498
  );
499
- return clamp(0.5 * (vh + vg), 0.0, 1.0);
499
+ return clamp(0.5 * (wV + wU), 0.0, 1.0);
500
500
  }
501
501
 
502
- vec3 hD(
502
+ vec3 hZ(
503
503
  float J,
504
- float cf,
505
- float bY,
506
- float ep,
504
+ float ch,
505
+ float ca,
506
+ float ey,
507
507
  float aN
508
508
  ) {
509
509
  return vec3(
510
510
  ap(
511
- J, 620.0, cf, aN, bY, vec2(ep, 0.0)
511
+ J, 620.0, ch, aN, ca, vec2(ey, 0.0)
512
512
  ),
513
513
  ap(
514
- J, 540.0, cf, aN, bY, vec2(ep, 0.0)
514
+ J, 540.0, ch, aN, ca, vec2(ey, 0.0)
515
515
  ),
516
516
  ap(
517
- J, 450.0, cf, aN, bY, vec2(ep, 0.0)
517
+ J, 450.0, ch, aN, ca, vec2(ey, 0.0)
518
518
  )
519
519
  );
520
520
  }
@@ -522,124 +522,124 @@ J, 450.0, cf, aN, bY, vec2(ep, 0.0)
522
522
 
523
523
 
524
524
  vec3 openpbr_metal_fresnel(float cosine, vec3 f0, vec3 tint) {
525
- vec3 sl = mix(f0, vec3(1.0), aH(cosine));
526
- if (all(equal(tint, vec3(1.0)))) { return sl; }
527
- float da = 1.0 / 7.0;
528
- float mK = 1.0 - da;
529
- vec3 fJ = mix(f0, vec3(1.0), aH(da));
530
- float cY = 1.0 - cosine;
531
- float rp = cosine * aH(cosine) * cY
532
- / (da * pow(mK, 6.0));
533
- return clamp(sl - rp * (fJ - tint * fJ), vec3(0.0), vec3(1.0));
534
- }
535
-
536
- vec2 cJ(float f0, float uS) {
537
- float dL = clamp(f0, 0.0, 0.99);
538
- float gI = sqrt(dL);
539
- float rF = (1.0 - dL) / (1.0 + dL);
540
- float rC = (1.0 + gI) / max(1.0 - gI, 1e-9);
541
- float ior = mix(rC, rF, clamp(uS, 0.0, 1.0));
542
- float jT = (
543
- (ior + 1.0) * (ior + 1.0) * dL
525
+ vec3 tN = mix(f0, vec3(1.0), aI(cosine));
526
+ if (all(equal(tint, vec3(1.0)))) { return tN; }
527
+ float dd = 1.0 / 7.0;
528
+ float nM = 1.0 - dd;
529
+ vec3 fV = mix(f0, vec3(1.0), aI(dd));
530
+ float da = 1.0 - cosine;
531
+ float sG = cosine * aI(cosine) * da
532
+ / (dd * pow(nM, 6.0));
533
+ return clamp(tN - sG * (fV - tint * fV), vec3(0.0), vec3(1.0));
534
+ }
535
+
536
+ vec2 cL(float f0, float wF) {
537
+ float dP = clamp(f0, 0.0, 0.99);
538
+ float ha = sqrt(dP);
539
+ float sU = (1.0 - dP) / (1.0 + dP);
540
+ float sR = (1.0 + ha) / max(1.0 - ha, 1e-9);
541
+ float ior = mix(sR, sU, clamp(wF, 0.0, 1.0));
542
+ float kz = (
543
+ (ior + 1.0) * (ior + 1.0) * dP
544
544
  - (ior - 1.0) * (ior - 1.0)
545
- ) / max(1.0 - dL, 1e-9);
546
- return vec2(ior, sqrt(max(jT, 0.0)));
545
+ ) / max(1.0 - dP, 1e-9);
546
+ return vec2(ior, sqrt(max(kz, 0.0)));
547
547
  }
548
548
 
549
- vec3 iX(
549
+ vec3 jD(
550
550
  float J,
551
- float cf,
552
- float bY,
553
- vec3 sg,
554
- vec3 kd,
551
+ float ch,
552
+ float ca,
553
+ vec3 tG,
554
+ vec3 kK,
555
555
  float aN
556
556
  ) {
557
557
  return vec3(
558
558
  ap(
559
559
  J,
560
560
  620.0,
561
- cf,
561
+ ch,
562
562
  aN,
563
- bY,
564
- cJ(sg.r, kd.r)
563
+ ca,
564
+ cL(tG.r, kK.r)
565
565
  ),
566
566
  ap(
567
567
  J,
568
568
  540.0,
569
- cf,
569
+ ch,
570
570
  aN,
571
- bY,
572
- cJ(sg.g, kd.g)
571
+ ca,
572
+ cL(tG.g, kK.g)
573
573
  ),
574
574
  ap(
575
575
  J,
576
576
  450.0,
577
- cf,
577
+ ch,
578
578
  aN,
579
- bY,
580
- cJ(sg.b, kd.b)
579
+ ca,
580
+ cL(tG.b, kK.b)
581
581
  )
582
582
  );
583
583
  }
584
584
 
585
- float bJ(float cf, float weight) {
586
- return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cf);
585
+ float bJ(float ch, float weight) {
586
+ return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, ch);
587
587
  }
588
588
 
589
- vec3 bQ(
590
- vec3 ef,
589
+ vec3 bR(
590
+ vec3 em,
591
591
  float J,
592
- float cf,
593
- float bY,
594
- float ep,
592
+ float ch,
593
+ float ca,
594
+ float ey,
595
595
  float weight,
596
596
  float aN
597
597
  ) {
598
- vec3 qe = hD(
598
+ vec3 rm = hZ(
599
599
  J,
600
- cf,
601
- bY,
602
- ep,
600
+ ch,
601
+ ca,
602
+ ey,
603
603
  aN
604
604
  );
605
605
  return mix(
606
- ef,
607
- qe,
608
- bJ(cf, weight)
606
+ em,
607
+ rm,
608
+ bJ(ch, weight)
609
609
  );
610
610
  }
611
611
 
612
- vec3 lI(
613
- vec3 ef,
612
+ vec3 mA(
613
+ vec3 em,
614
614
  float J,
615
- float cf,
616
- float bY,
617
- vec3 sg,
618
- vec3 kd,
615
+ float ch,
616
+ float ca,
617
+ vec3 tG,
618
+ vec3 kK,
619
619
  float weight,
620
620
  float aN
621
621
  ) {
622
- vec3 qe = iX(
622
+ vec3 rm = jD(
623
623
  J,
624
- cf,
625
- bY,
626
- sg,
627
- kd,
624
+ ch,
625
+ ca,
626
+ tG,
627
+ kK,
628
628
  aN
629
629
  );
630
630
  return mix(
631
- ef,
632
- qe,
633
- bJ(cf, weight)
631
+ em,
632
+ rm,
633
+ bJ(ch, weight)
634
634
  );
635
635
  }
636
636
 
637
- vec3 bw(
637
+ vec3 bB(
638
638
  OpenPbrResolvedMaterial material,
639
639
  vec3 color,
640
640
  vec3 viewLocal,
641
641
  vec3 lightLocal,
642
- float fl,
642
+ float fD,
643
643
  out float pdf
644
644
  ) {
645
645
  pdf = 0.0;
@@ -648,24 +648,24 @@ return vec3(0.0);
648
648
  }
649
649
 
650
650
  float roughness = material.diffuseRoughness;
651
- float gS = 0.5 - 2.0 / (3.0 * PI);
652
- float oR = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
- float pe = lightLocal.z;
654
- float nd = viewLocal.z;
655
- float directional = dot(lightLocal, viewLocal) - pe * nd;
656
- float gP = directional > 0.0
657
- ? directional / max(max(pe, nd), 1e-7)
651
+ float hp = 0.5 - 2.0 / (3.0 * PI);
652
+ float pZ = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
+ float qn = lightLocal.z;
654
+ float oc = viewLocal.z;
655
+ float directional = dot(lightLocal, viewLocal) - qn * oc;
656
+ float hl = directional > 0.0
657
+ ? directional / max(max(qn, oc), 1e-7)
658
658
  : directional;
659
- float il = 1.0 / (1.0 + gS * roughness);
660
- vec3 oe = color * INVPI * il
661
- * (1.0 + roughness * gP);
662
-
663
- float cW = 1.0 - pe;
664
- float outputComplement = 1.0 - nd;
665
- float oW = cW * (
666
- 0.0571085289 + cW * (
667
- 0.491881867 + cW * (
668
- -0.332181442 + cW * 0.0714429953
659
+ float iQ = 1.0 / (1.0 + hp * roughness);
660
+ vec3 pe = color * INVPI * iQ
661
+ * (1.0 + roughness * hl);
662
+
663
+ float cX = 1.0 - qn;
664
+ float outputComplement = 1.0 - oc;
665
+ float qe = cX * (
666
+ 0.0571085289 + cX * (
667
+ 0.491881867 + cX * (
668
+ -0.332181442 + cX * 0.0714429953
669
669
  )
670
670
  )
671
671
  );
@@ -676,19 +676,19 @@ float outputGOverPi = outputComplement * (
676
676
  )
677
677
  )
678
678
  );
679
- float qj = (1.0 + roughness * oW)
680
- / (1.0 + gS * roughness);
679
+ float rr = (1.0 + roughness * qe)
680
+ / (1.0 + hp * roughness);
681
681
  float outputAlbedo = (1.0 + roughness * outputGOverPi)
682
- / (1.0 + gS * roughness);
683
- float fU = il * (1.0 + oR * roughness);
684
- vec3 hC = color * color * fU
685
- / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fU));
686
- vec3 lT = hC * INVPI
682
+ / (1.0 + hp * roughness);
683
+ float gk = iQ * (1.0 + pZ * roughness);
684
+ vec3 hY = color * color * gk
685
+ / max(vec3(1e-7), vec3(1.0) - color * (1.0 - gk));
686
+ vec3 mN = hY * INVPI
687
687
  * max(1e-7, 1.0 - outputAlbedo)
688
- * max(1e-7, 1.0 - qj)
689
- / max(1e-7, 1.0 - fU);
688
+ * max(1e-7, 1.0 - rr)
689
+ / max(1e-7, 1.0 - gk);
690
690
  pdf = lightLocal.z * INVPI;
691
- return (oe + lT) * fl;
691
+ return (pe + mN) * fD;
692
692
  }
693
693
 
694
694
  float aQ(float viewCosine, float roughness) {
@@ -705,7 +705,7 @@ float gaussian = exp(-0.5 * pow((x - mean) / scale, 2.0))
705
705
  return max(gaussian + offset, 0.0);
706
706
  }
707
707
 
708
- vec3 kg(
708
+ vec3 kN(
709
709
  OpenPbrResolvedMaterial material,
710
710
  vec3 viewLocal,
711
711
  vec3 lightLocal,
@@ -738,16 +738,16 @@ return vec3(0.0);
738
738
 
739
739
  vec2 alpha = vec2(material.alphaX, material.alphaY);
740
740
  float distribution = sampling_ggx_ndf(aa, alpha);
741
- float kc = aD(viewLocal, alpha);
742
- float dY = kc
741
+ float kJ = aD(viewLocal, alpha);
742
+ float eh = kJ
743
743
  * aD(lightLocal, alpha);
744
744
 
745
- pdf = kc * distribution / (4.0 * max(viewLocal.z, 1e-8));
746
- return fresnel * distribution * dY
745
+ pdf = kJ * distribution / (4.0 * max(viewLocal.z, 1e-8));
746
+ return fresnel * distribution * eh
747
747
  / (4.0 * max(lightLocal.z * viewLocal.z, 1e-8));
748
748
  }
749
749
 
750
- vec3 dc(
750
+ vec3 df(
751
751
  OpenPbrResolvedMaterial material,
752
752
  float relativeIor,
753
753
  vec3 tint,
@@ -771,22 +771,22 @@ return vec3(0.0);
771
771
  }
772
772
  vec2 alpha = vec2(material.alphaX, material.alphaY);
773
773
  float distribution = sampling_ggx_ndf(aa, alpha);
774
- float kc = aD(viewLocal, alpha);
775
- float dY = kc
774
+ float kJ = aD(viewLocal, alpha);
775
+ float eh = kJ
776
776
  * aD(lightLocal, alpha);
777
777
  float ah = lightHalf + viewHalf * relativeIor;
778
778
  ah *= ah;
779
- float qo = abs(lightHalf) / max(ah, 1e-8);
780
- float jB = relativeIor * relativeIor;
779
+ float rw = abs(lightHalf) / max(ah, 1e-8);
780
+ float ke = relativeIor * relativeIor;
781
781
 
782
- pdf = kc * max(0.0, viewHalf) * distribution * qo
782
+ pdf = kJ * max(0.0, viewHalf) * distribution * rw
783
783
  / max(viewLocal.z, 1e-8);
784
- return tint * (vec3(1.0) - fresnel) * distribution * dY
785
- * abs(viewHalf) * qo * jB
784
+ return tint * (vec3(1.0) - fresnel) * distribution * eh
785
+ * abs(viewHalf) * rw * ke
786
786
  / max(abs(lightLocal.z * viewLocal.z), 1e-8);
787
787
  }
788
788
 
789
- vec3 ba(OpenPbrResolvedMaterial material) {
789
+ vec3 bb(OpenPbrResolvedMaterial material) {
790
790
  #ifdef HAS_MEDIUM
791
791
  if (material.mediumType > 0) {
792
792
  return vec3(1.0);
@@ -795,7 +795,7 @@ return vec3(1.0);
795
795
  return material.transmissionColor;
796
796
  }
797
797
 
798
- float cL(float ag) {
798
+ float cN(float ag) {
799
799
  return 2.0 * ag / (1.0 + ag);
800
800
  }
801
801
 
@@ -803,11 +803,11 @@ vec3 aq(
803
803
  vec3 ag,
804
804
  float transmissionWeight
805
805
  ) {
806
- vec3 gk = 2.0 * ag
806
+ vec3 gE = 2.0 * ag
807
807
  / (vec3(1.0) + ag);
808
808
  return mix(
809
809
  ag,
810
- gk,
810
+ gE,
811
811
  clamp(transmissionWeight, 0.0, 1.0)
812
812
  );
813
813
  }
@@ -815,23 +815,23 @@ clamp(transmissionWeight, 0.0, 1.0)
815
815
  vec3 bF(
816
816
  OpenPbrResolvedMaterial material,
817
817
  float J,
818
- float bq
818
+ float br
819
819
  ) {
820
- vec3 tint = ba(material);
820
+ vec3 tint = bb(material);
821
821
  if (!material.thinWalled) {
822
822
  return tint;
823
823
  }
824
- float iK = max(0.0, 1.0 - J * J);
825
- float dM = iK
826
- / max(bq * bq, 1e-9);
827
- if (dM >= 1.0) {
824
+ float jk = max(0.0, 1.0 - J * J);
825
+ float dR = jk
826
+ / max(br * br, 1e-9);
827
+ if (dR >= 1.0) {
828
828
  return vec3(0.0);
829
829
  }
830
- float ad = sqrt(1.0 - dM);
830
+ float ad = sqrt(1.0 - dR);
831
831
  return pow(max(tint, vec3(0.0)), vec3(1.0 / max(ad, 1e-5)));
832
832
  }
833
833
 
834
- vec3 dK(
834
+ vec3 dO(
835
835
  OpenPbrResolvedMaterial material,
836
836
  vec3 viewLocal,
837
837
  vec3 lightLocal,
@@ -842,15 +842,15 @@ if (viewLocal.z <= 0.0 || lightLocal.z >= 0.0) {
842
842
  return vec3(0.0);
843
843
  }
844
844
  float ad = -lightLocal.z;
845
- float oO = sampling_dielectric_fresnel(
845
+ float pW = sampling_dielectric_fresnel(
846
846
  viewLocal.z,
847
847
  material.relativeIor
848
848
  );
849
849
  pdf = ad * INVPI;
850
- return vec3(1.0 - oO) * INVPI;
850
+ return vec3(1.0 - pW) * INVPI;
851
851
  }
852
852
 
853
- void dQ(inout OpenPbrPreparedBsdf prepared) {
853
+ void dW(inout OpenPbrPreparedBsdf prepared) {
854
854
  float total = prepared.probabilities[OPENPBR_LOBE_FUZZ];
855
855
  for (int lobe = 1; lobe < OPENPBR_LOBE_COUNT; lobe++) {
856
856
  total += prepared.probabilities[lobe];
@@ -861,9 +861,9 @@ prepared.probabilities[lobe] = 0.0;
861
861
  }
862
862
  return;
863
863
  }
864
- float oZ = 1.0 / total;
864
+ float qh = 1.0 / total;
865
865
  for (int lobe = 0; lobe < OPENPBR_LOBE_COUNT; lobe++) {
866
- prepared.probabilities[lobe] *= oZ;
866
+ prepared.probabilities[lobe] *= qh;
867
867
  }
868
868
  }
869
869
 
@@ -876,22 +876,22 @@ return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * e
876
876
  }
877
877
 
878
878
  vec3 bL(vec3 f0, vec3 tint) {
879
- float da = 1.0 / 7.0;
880
- vec3 fJ = mix(f0, vec3(1.0), aH(da));
881
- vec3 b = fJ * (vec3(1.0) - tint) / (da * pow(1.0 - da, 6.0));
879
+ float dd = 1.0 / 7.0;
880
+ vec3 fV = mix(f0, vec3(1.0), aI(dd));
881
+ vec3 b = fV * (vec3(1.0) - tint) / (dd * pow(1.0 - dd, 6.0));
882
882
  return clamp(f0 + (vec3(1.0) - f0) / 21.0 - b / 126.0, vec3(0.0), vec3(1.0));
883
883
  }
884
884
 
885
885
 
886
886
 
887
- vec3 cA(OpenPbrResolvedMaterial material, float cosine) {
887
+ vec3 cC(OpenPbrResolvedMaterial material, float cosine) {
888
888
  if (cosine <= 0.0) { return vec3(1.0); }
889
- float lV = sqrt(max(0.0, 1.0 - (1.0 - cosine * cosine) / (material.coatIor * material.coatIor)));
890
- vec3 uZ = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lV, 1e-5)));
891
- return mix(vec3(1.0), uZ, material.coatWeight);
889
+ float mP = sqrt(max(0.0, 1.0 - (1.0 - cosine * cosine) / (material.coatIor * material.coatIor)));
890
+ vec3 wN = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(mP, 1e-5)));
891
+ return mix(vec3(1.0), wN, material.coatWeight);
892
892
  }
893
893
 
894
- float gn(OpenPbrResolvedMaterial material, float cosine) {
894
+ float gH(OpenPbrResolvedMaterial material, float cosine) {
895
895
  if (material.coatRoughness <= ROUGHNESS_MIN) {
896
896
  return ae(cosine, 1.0 / material.coatIor);
897
897
  }
@@ -901,38 +901,38 @@ return clamp(1.0 - ar(material.coatIor,
901
901
  material.coatRoughness * material.coatRoughness, cosine), 0.0, 1.0);
902
902
  }
903
903
 
904
- vec3 gX(OpenPbrPreparedBsdf prepared) {
904
+ vec3 hv(OpenPbrPreparedBsdf prepared) {
905
905
  OpenPbrResolvedMaterial material = prepared.material;
906
906
  float dielectric = 1.0 - material.baseMetalness;
907
907
  float opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
908
908
  float sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
909
- float vU = dielectric * material.transmissionWeight;
910
- float fP = bI(prepared.specularEtaTOverEtaI);
911
- float lg = bI(1.0 / prepared.transmissionReflectionIor);
912
- float qA = clamp(opaque * fP + (sss + vU) * lg + material.baseMetalness, 0.0, 1.0);
913
- float jt = mix(1.0, material.specularRoughness, qA);
909
+ float xQ = dielectric * material.transmissionWeight;
910
+ float gb = bI(prepared.specularEtaTOverEtaI);
911
+ float mc = bI(1.0 / prepared.transmissionReflectionIor);
912
+ float rO = clamp(opaque * gb + (sss + xQ) * mc + material.baseMetalness, 0.0, 1.0);
913
+ float jX = mix(1.0, material.specularRoughness, rO);
914
914
  float ks = bI(material.coatIor);
915
915
  float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
916
- float k = mix(ks, kr, jt);
916
+ float k = mix(ks, kr, jX);
917
917
  vec3 eb = material.baseMetalness * material.specularWeight * bL(material.baseWeight * material.baseColor, material.specularColor)
918
- + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fP)
919
- + sss * material.subsurfaceColor + vec3(vU);
920
- vec3 rV = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
- return mix(vec3(1.0), rV, material.coatWeight * material.coatDarkening);
918
+ + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), gb)
919
+ + sss * material.subsurfaceColor + vec3(xQ);
920
+ vec3 tn = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
+ return mix(vec3(1.0), tn, material.coatWeight * material.coatDarkening);
922
922
  }
923
923
 
924
- vec3 cm(OpenPbrPreparedBsdf prepared, float lF) {
924
+ vec3 cp(OpenPbrPreparedBsdf prepared, float mx) {
925
925
  if (prepared.material.coatWeight <= 0.0) { return vec3(1.0); }
926
926
  if (prepared.material.inside) {
927
927
 
928
- return cA(prepared.material, -lF);
928
+ return cC(prepared.material, -mx);
929
929
  }
930
930
 
931
- return prepared.coatBaseScale * cA(prepared.material, lF);
931
+ return prepared.coatBaseScale * cC(prepared.material, mx);
932
932
  }
933
933
 
934
934
 
935
- OpenPbrBasis dk(OpenPbrBasis fallback, vec3 tangent, vec3 bitangent, vec2 direction) {
935
+ OpenPbrBasis dm(OpenPbrBasis fallback, vec3 tangent, vec3 bitangent, vec2 direction) {
936
936
  vec3 t = tangent - fallback.normal * dot(fallback.normal, tangent);
937
937
  if (dot(t, t) < 1e-8) { t = fallback.tangent; }
938
938
  t = normalize(t);
@@ -946,15 +946,15 @@ basis.tangent = normalize(cross(basis.bitangent, basis.normal));
946
946
  return basis;
947
947
  }
948
948
 
949
- OpenPbrPreparedBsdf bV(
949
+ OpenPbrPreparedBsdf bX(
950
950
  vec3 tangent,
951
951
  OpenPbrResolvedMaterial material,
952
- vec3 bD,
952
+ vec3 bE,
953
953
  vec3 normal
954
954
  ) {
955
955
  OpenPbrPreparedBsdf prepared;
956
956
  prepared.material = material;
957
- prepared.basis = ff(
957
+ prepared.basis = ft(
958
958
  tangent,
959
959
  normal,
960
960
  max(material.specularAnisotropy, material.coatAnisotropy)
@@ -965,40 +965,40 @@ prepared.directionFrames = false;
965
965
 
966
966
 
967
967
  if (material.coatNormalEnabled) {
968
- prepared.coatBasis = ff(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
968
+ prepared.coatBasis = ft(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
969
969
  prepared.directionFrames = true;
970
970
  }
971
971
  #endif
972
972
  if (material.specularAnisotropy > 0.0 && material.anisotropyDirectionEnabled) {
973
- prepared.basis = dk(prepared.basis, material.directionTangent, material.directionBitangent, material.anisotropyDirection);
973
+ prepared.basis = dm(prepared.basis, material.directionTangent, material.directionBitangent, material.anisotropyDirection);
974
974
  prepared.directionFrames = true;
975
975
  }
976
976
  if (material.coatAnisotropy > 0.0 && material.coatAnisotropyRotation != 0.0) {
977
- prepared.coatBasis = dk(prepared.coatBasis, material.geometryTangent, material.geometryBitangent, vec2(cos(material.coatAnisotropyRotation), sin(material.coatAnisotropyRotation)));
977
+ prepared.coatBasis = dm(prepared.coatBasis, material.geometryTangent, material.geometryBitangent, vec2(cos(material.coatAnisotropyRotation), sin(material.coatAnisotropyRotation)));
978
978
  prepared.directionFrames = true;
979
979
  }
980
- prepared.viewLocal = openpbr_to_local(prepared.basis, bD);
980
+ prepared.viewLocal = openpbr_to_local(prepared.basis, bE);
981
981
  #ifdef USE_COAT_NORMAL_FRAMES
982
- prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bD);
982
+ prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bE);
983
983
  #endif
984
984
  prepared.diffuseColor = material.baseColor;
985
985
 
986
- float cu = 1.0 - material.baseMetalness;
987
- float dJ = cu
986
+ float cw = 1.0 - material.baseMetalness;
987
+ float dN = cw
988
988
  * (1.0 - material.transmissionWeight);
989
989
  prepared.weights[OPENPBR_LOBE_FUZZ] = material.fuzzWeight;
990
990
  prepared.weights[OPENPBR_LOBE_COAT] = material.coatWeight;
991
991
  if (material.inside) { prepared.weights[OPENPBR_LOBE_COAT] = 0.0; }
992
992
  prepared.weights[OPENPBR_LOBE_METAL] = material.baseMetalness;
993
- prepared.weights[OPENPBR_LOBE_SPECULAR] = cu;
994
- prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cu
993
+ prepared.weights[OPENPBR_LOBE_SPECULAR] = cw;
994
+ prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cw
995
995
  * material.transmissionWeight;
996
- prepared.weights[OPENPBR_LOBE_DIFFUSE] = dJ
996
+ prepared.weights[OPENPBR_LOBE_DIFFUSE] = dN
997
997
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
998
- prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dJ
998
+ prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dN
999
999
  * material.subsurfaceWeight;
1000
1000
 
1001
- prepared.specularEtaTOverEtaI = bb(
1001
+ prepared.specularEtaTOverEtaI = bc(
1002
1002
  1.0 / material.relativeIor,
1003
1003
  material.specularWeight
1004
1004
  );
@@ -1008,20 +1008,20 @@ prepared.transmissionReflectionIor = prepared.material.relativeIor;
1008
1008
 
1009
1009
 
1010
1010
  if (material.coatWeight > 0.0) {
1011
- float bX = 1.0;
1012
- if (!material.inside) { bX = mix(1.0, material.coatIor, material.coatWeight); }
1013
- float bn = bX * bb(
1014
- material.specularIor / bX, material.specularWeight);
1015
- float eo = bn / bX;
1016
- if (bX > bn && bn >= 1.0) {
1017
- eo = 1.0 / eo;
1018
- }
1019
- prepared.specularEtaTOverEtaI = eo;
1020
- prepared.transmissionReflectionIor = 1.0 / eo;
1021
- prepared.refractionEtaTOverEtaI = bn;
1011
+ float bZ = 1.0;
1012
+ if (!material.inside) { bZ = mix(1.0, material.coatIor, material.coatWeight); }
1013
+ float bo = bZ * bc(
1014
+ material.specularIor / bZ, material.specularWeight);
1015
+ float ew = bo / bZ;
1016
+ if (bZ > bo && bo >= 1.0) {
1017
+ ew = 1.0 / ew;
1018
+ }
1019
+ prepared.specularEtaTOverEtaI = ew;
1020
+ prepared.transmissionReflectionIor = 1.0 / ew;
1021
+ prepared.refractionEtaTOverEtaI = bo;
1022
1022
  if (material.inside) {
1023
- prepared.refractionEtaTOverEtaI = 1.0 / bn;
1024
- prepared.transmissionReflectionIor = bn;
1023
+ prepared.refractionEtaTOverEtaI = 1.0 / bo;
1024
+ prepared.transmissionReflectionIor = bo;
1025
1025
  }
1026
1026
  prepared.material.relativeIor = 1.0 / prepared.refractionEtaTOverEtaI;
1027
1027
  }
@@ -1047,39 +1047,39 @@ float ag = ae(
1047
1047
  viewCosine,
1048
1048
  1.0 / prepared.specularEtaTOverEtaI
1049
1049
  );
1050
- vec3 fu = material.specularColor * (
1050
+ vec3 fJ = material.specularColor * (
1051
1051
  material.thinWalled
1052
1052
  ? mix(
1053
1053
  ag,
1054
- cL(ag),
1054
+ cN(ag),
1055
1055
  material.transmissionWeight
1056
1056
  )
1057
1057
  : ag
1058
1058
  );
1059
- vec3 hS = material.specularWeight * openpbr_metal_fresnel(
1059
+ vec3 iD = material.specularWeight * openpbr_metal_fresnel(
1060
1060
  viewCosine,
1061
1061
  material.baseWeight * material.baseColor,
1062
1062
  material.specularColor
1063
1063
  );
1064
- float eI = material.thinWalled
1065
- ? cL(ae(viewCosine, prepared.transmissionReflectionIor))
1064
+ float eS = material.thinWalled
1065
+ ? cN(ae(viewCosine, prepared.transmissionReflectionIor))
1066
1066
  : ae(viewCosine, prepared.transmissionReflectionIor);
1067
- vec3 gK = bF(
1067
+ vec3 hc = bF(
1068
1068
  material,
1069
1069
  viewCosine,
1070
1070
  prepared.refractionEtaTOverEtaI
1071
1071
  );
1072
- float ir = ar(
1072
+ float iT = ar(
1073
1073
  prepared.specularEtaTOverEtaI,
1074
1074
  prepared.specularAlpha,
1075
1075
  viewCosine
1076
1076
  );
1077
- float gq = cj(
1077
+ float gJ = ck(
1078
1078
  prepared.specularEtaTOverEtaI,
1079
1079
  prepared.specularAlpha
1080
1080
  );
1081
- prepared.diffuseSpecularEnergyCompensation = ir
1082
- / max(gq, 1e-12);
1081
+ prepared.diffuseSpecularEnergyCompensation = iT
1082
+ / max(gJ, 1e-12);
1083
1083
 
1084
1084
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
1085
1085
  * aB(material.fuzzColor)
@@ -1092,39 +1092,39 @@ prepared.coatBaseScale = vec3(1.0);
1092
1092
  if (material.coatWeight > 0.0 && !material.inside) {
1093
1093
  #ifdef USE_COAT_NORMAL_FRAMES
1094
1094
  float coatViewCosine = material.coatNormalEnabled ? max(prepared.coatViewLocal.z, 0.0) : viewCosine;
1095
- float kO = gn(material, coatViewCosine);
1095
+ float lH = gH(material, coatViewCosine);
1096
1096
  #else
1097
- float kO = gn(material, viewCosine);
1097
+ float lH = gH(material, viewCosine);
1098
1098
  #endif
1099
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kO;
1100
- prepared.coatBaseScale = cA(material,
1099
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * lH;
1100
+ prepared.coatBaseScale = cC(material,
1101
1101
  #ifdef USE_COAT_NORMAL_FRAMES
1102
1102
  coatViewCosine
1103
1103
  #else
1104
1104
  viewCosine
1105
1105
  #endif
1106
1106
  )
1107
- * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * kO) * gX(prepared);
1107
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * lH) * hv(prepared);
1108
1108
  }
1109
1109
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1110
- * aB(hS);
1110
+ * aB(iD);
1111
1111
  prepared.metalMsScale = vec3(0.0);
1112
1112
  prepared.metalMsFactor = 0.0;
1113
1113
  prepared.metalMsProbability = 0.0;
1114
1114
  if (material.specularRoughness >= 0.04 && prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
1115
- vec3 hI = bL(material.baseWeight * material.baseColor, material.specularColor);
1116
- prepared.metalMsScale = material.specularWeight * hI * hI;
1117
- float qF = aR(prepared.specularAlpha, viewCosine);
1118
- prepared.metalMsFactor = qF / max(cl(prepared.specularAlpha), 1e-12);
1119
- float fe = prepared.weights[OPENPBR_LOBE_METAL] * aB(prepared.metalMsScale) * qF;
1120
- prepared.probabilities[OPENPBR_LOBE_METAL] += fe;
1121
- prepared.metalMsProbability = fe / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1115
+ vec3 il = bL(material.baseWeight * material.baseColor, material.specularColor);
1116
+ prepared.metalMsScale = material.specularWeight * il * il;
1117
+ float rT = aR(prepared.specularAlpha, viewCosine);
1118
+ prepared.metalMsFactor = rT / max(cn(prepared.specularAlpha), 1e-12);
1119
+ float fq = prepared.weights[OPENPBR_LOBE_METAL] * aB(prepared.metalMsScale) * rT;
1120
+ prepared.probabilities[OPENPBR_LOBE_METAL] += fq;
1121
+ prepared.metalMsProbability = fq / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1122
1122
  }
1123
1123
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1124
- * aB(fu);
1124
+ * aB(fJ);
1125
1125
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1126
- * (1.0 - eI)
1127
- * aB(gK);
1126
+ * (1.0 - eS)
1127
+ * aB(hc);
1128
1128
 
1129
1129
 
1130
1130
 
@@ -1139,52 +1139,52 @@ prepared.dielectricMsProbability = 0.0;
1139
1139
  if (!material.thinWalled && material.transmissionWeight > 0.0 &&
1140
1140
  prepared.specularAlpha >= 0.0016 && prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0 &&
1141
1141
  abs(prepared.refractionEtaTOverEtaI - 1.0) > 1e-6) {
1142
- float lU = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
- prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lU;
1144
- prepared.dielectricMsTransmissionScale = gK * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1142
+ float mO = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
+ prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * mO;
1144
+ prepared.dielectricMsTransmissionScale = hc * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1145
1145
  + vec3(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1146
- prepared.dielectricMsReflectionRatio = bU(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1146
+ prepared.dielectricMsReflectionRatio = bW(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1147
1147
  prepared.dielectricMsViewLoss = aV(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1148
- vec3 oG = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
- float fe = aB(oG) * prepared.dielectricMsViewLoss;
1150
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fe;
1151
- prepared.dielectricMsProbability = fe / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1148
+ vec3 pM = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
+ float fq = aB(pM) * prepared.dielectricMsViewLoss;
1150
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fq;
1151
+ prepared.dielectricMsProbability = fq / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1152
1152
  }
1153
1153
  prepared.probabilities[OPENPBR_LOBE_DIFFUSE] = prepared.weights[OPENPBR_LOBE_DIFFUSE]
1154
1154
  * aB(prepared.diffuseColor)
1155
1155
  * prepared.diffuseSpecularEnergyCompensation;
1156
1156
  prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1157
- * (1.0 - eI)
1157
+ * (1.0 - eS)
1158
1158
  * aB(material.subsurfaceColor)
1159
1159
  * prepared.diffuseSpecularEnergyCompensation;
1160
1160
 
1161
1161
 
1162
1162
  if (material.coatWeight > 0.0 && material.thinFilmWeight > 0.0) {
1163
- float lD = 0.02 * bJ(material.thinFilmThickness, material.thinFilmWeight);
1164
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lD);
1165
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lD);
1163
+ float mv = 0.02 * bJ(material.thinFilmThickness, material.thinFilmWeight);
1164
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * mv);
1165
+ prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * mv);
1166
1166
  }
1167
1167
  if (material.coatWeight > 0.0 && !material.inside) {
1168
- float gr = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gr;
1170
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gr;
1171
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gr;
1172
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gr;
1173
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gr;
1174
- }
1175
- dQ(prepared);
1168
+ float gK = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gK;
1170
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gK;
1171
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gK;
1172
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gK;
1173
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gK;
1174
+ }
1175
+ dW(prepared);
1176
1176
  return prepared;
1177
1177
  }
1178
1178
 
1179
- float cK(OpenPbrPreparedBsdf prepared, float cosine, bool reflection) {
1179
+ float cM(OpenPbrPreparedBsdf prepared, float cosine, bool reflection) {
1180
1180
  if (prepared.material.coatWeight <= 0.0) {
1181
1181
  return ae(cosine, prepared.material.relativeIor);
1182
1182
  }
1183
- float kA = ae(cosine, prepared.transmissionReflectionIor);
1184
- if (!reflection) { return kA; }
1185
- float nY = ae(cosine, 1.0 / prepared.specularEtaTOverEtaI);
1186
- float sN = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
- return mix(nY, kA, sN);
1183
+ float lk = ae(cosine, prepared.transmissionReflectionIor);
1184
+ if (!reflection) { return lk; }
1185
+ float oX = ae(cosine, 1.0 / prepared.specularEtaTOverEtaI);
1186
+ float um = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
+ return mix(oX, lk, um);
1188
1188
  }
1189
1189
 
1190
1190
  vec3 openpbr_eval_prepared(
@@ -1231,7 +1231,7 @@ if (!independentCoat || (lightLocal.z != 0.0 && reflection == geometricReflectio
1231
1231
  #endif
1232
1232
  if (reflection) {
1233
1233
  if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0) {
1234
- response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * bw(
1234
+ response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * bB(
1235
1235
  material,
1236
1236
  prepared.diffuseColor,
1237
1237
  viewLocal,
@@ -1243,7 +1243,7 @@ pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * lobePdf;
1243
1243
  }
1244
1244
 
1245
1245
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0 && material.thinWalled) {
1246
- response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * bw(
1246
+ response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * bB(
1247
1247
  material,
1248
1248
  material.subsurfaceColor,
1249
1249
  viewLocal,
@@ -1255,10 +1255,10 @@ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * lobePdf;
1255
1255
  }
1256
1256
 
1257
1257
  if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) {
1258
- vec3 ck = vec3(cK(prepared, viewHalf, true));
1258
+ vec3 cl = vec3(cM(prepared, viewHalf, true));
1259
1259
  if (material.thinFilmWeight > 0.0) {
1260
- ck = bQ(
1261
- ck,
1260
+ cl = bR(
1261
+ cl,
1262
1262
  viewHalf,
1263
1263
  material.thinFilmThickness,
1264
1264
  material.thinFilmIor,
@@ -1268,12 +1268,12 @@ prepared.thinFilmExteriorIor
1268
1268
  );
1269
1269
  }
1270
1270
  if (material.thinWalled) {
1271
- ck = aq(
1272
- ck,
1271
+ cl = aq(
1272
+ cl,
1273
1273
  material.transmissionWeight
1274
1274
  );
1275
1275
  }
1276
- vec3 fresnel = material.specularColor * ck;
1276
+ vec3 fresnel = material.specularColor * cl;
1277
1277
  response += prepared.weights[OPENPBR_LOBE_SPECULAR] * aj(
1278
1278
  material,
1279
1279
  viewLocal,
@@ -1292,7 +1292,7 @@ material.baseWeight * material.baseColor,
1292
1292
  material.specularColor
1293
1293
  );
1294
1294
  if (material.thinFilmWeight > 0.0) {
1295
- fresnel = lI(
1295
+ fresnel = mA(
1296
1296
  fresnel,
1297
1297
  viewHalf,
1298
1298
  material.thinFilmThickness,
@@ -1313,17 +1313,17 @@ fresnel,
1313
1313
  lobePdf
1314
1314
  );
1315
1315
  if (prepared.metalMsFactor > 0.0) {
1316
- float cv = min(prepared.metalMsFactor * aR(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1317
- response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * cv * INVPI;
1316
+ float cA = min(prepared.metalMsFactor * aR(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1317
+ response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * cA * INVPI;
1318
1318
  lobePdf = mix(lobePdf, 0.5 * INVPI, prepared.metalMsProbability);
1319
1319
  }
1320
1320
  pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * lobePdf;
1321
1321
  }
1322
1322
  }
1323
1323
  else {
1324
- vec3 fresnel = vec3(cK(prepared, viewHalf, false));
1324
+ vec3 fresnel = vec3(cM(prepared, viewHalf, false));
1325
1325
  if (material.thinFilmWeight > 0.0) {
1326
- fresnel = bQ(
1326
+ fresnel = bR(
1327
1327
  fresnel,
1328
1328
  viewHalf,
1329
1329
  material.thinFilmThickness,
@@ -1335,16 +1335,16 @@ prepared.thinFilmExteriorIor
1335
1335
  }
1336
1336
  if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) {
1337
1337
  if (material.thinWalled) {
1338
- vec3 lm = vec3(lightLocal.xy, -lightLocal.z);
1339
- vec3 thinWallHalf = normalize(lm + viewLocal);
1338
+ vec3 mi = vec3(lightLocal.xy, -lightLocal.z);
1339
+ vec3 thinWallHalf = normalize(mi + viewLocal);
1340
1340
  if (thinWallHalf.z < 0.0) {
1341
1341
  thinWallHalf = -thinWallHalf;
1342
1342
  }
1343
1343
  float thinWallViewHalf = abs(dot(viewLocal, thinWallHalf));
1344
- vec3 lZ = vec3(cK(prepared, thinWallViewHalf, false));
1344
+ vec3 mT = vec3(cM(prepared, thinWallViewHalf, false));
1345
1345
  if (material.thinFilmWeight > 0.0) {
1346
- lZ = bQ(
1347
- lZ,
1346
+ mT = bR(
1347
+ mT,
1348
1348
  thinWallViewHalf,
1349
1349
  material.thinFilmThickness,
1350
1350
  material.thinFilmIor,
@@ -1353,8 +1353,8 @@ material.thinFilmWeight,
1353
1353
  prepared.thinFilmExteriorIor
1354
1354
  );
1355
1355
  }
1356
- vec3 gk = aq(
1357
- lZ,
1356
+ vec3 gE = aq(
1357
+ mT,
1358
1358
  1.0
1359
1359
  );
1360
1360
  vec3 tint = bF(
@@ -1366,18 +1366,18 @@ response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1366
1366
  * aj(
1367
1367
  material,
1368
1368
  viewLocal,
1369
- lm,
1369
+ mi,
1370
1370
  thinWallHalf,
1371
- tint * (vec3(1.0) - gk),
1371
+ tint * (vec3(1.0) - gE),
1372
1372
  lobePdf
1373
1373
  );
1374
1374
  }
1375
1375
  else {
1376
1376
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1377
- * dc(
1377
+ * df(
1378
1378
  material,
1379
1379
  material.relativeIor,
1380
- ba(material),
1380
+ bb(material),
1381
1381
  viewLocal,
1382
1382
  lightLocal,
1383
1383
  aa,
@@ -1392,20 +1392,20 @@ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * lobePdf;
1392
1392
  }
1393
1393
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) {
1394
1394
  if (material.thinWalled) {
1395
- vec3 oQ = vec3(lightLocal.xy, -lightLocal.z);
1395
+ vec3 pY = vec3(lightLocal.xy, -lightLocal.z);
1396
1396
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1397
- * bw(
1397
+ * bB(
1398
1398
  material,
1399
1399
  material.subsurfaceColor,
1400
1400
  viewLocal,
1401
- oQ,
1401
+ pY,
1402
1402
  diffuseSpecularEnergyCompensation,
1403
1403
  lobePdf
1404
1404
  );
1405
1405
  lobePdf *= 0.5;
1406
1406
  }
1407
1407
  else {
1408
- response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dK(
1408
+ response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dO(
1409
1409
  material,
1410
1410
  viewLocal,
1411
1411
  lightLocal,
@@ -1423,13 +1423,13 @@ if (prepared.dielectricMsProbability > 0.0) {
1423
1423
  float cosine = abs(lightLocal.z);
1424
1424
  if (cosine > 0.0) {
1425
1425
  float ior = (reflection ? prepared.refractionEtaTOverEtaI : 1.0 / prepared.refractionEtaTOverEtaI);
1426
- float iZ = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
- float oP = prepared.dielectricMsViewLoss * aV(ior, prepared.specularAlpha, cosine)
1428
- / max(aY(ior, prepared.specularAlpha), 1e-12);
1429
- float cv = min(oP * iZ, 1.0 / cosine);
1426
+ float fw = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
+ float pX = prepared.dielectricMsViewLoss * aV(ior, prepared.specularAlpha, cosine)
1428
+ / max(aZ(ior, prepared.specularAlpha), 1e-12);
1429
+ float cA = min(pX * fw, 1.0 / cosine);
1430
1430
  vec3 scale = (reflection ? prepared.dielectricMsReflectionScale : prepared.dielectricMsTransmissionScale);
1431
- response += scale * cv * INVPI;
1432
- pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * iZ * 0.5 * INVPI;
1431
+ response += scale * cA * INVPI;
1432
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * fw * 0.5 * INVPI;
1433
1433
  }
1434
1434
  }
1435
1435
 
@@ -1437,7 +1437,7 @@ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMs
1437
1437
  }
1438
1438
  #endif
1439
1439
  if (material.coatWeight > 0.0) {
1440
- response *= cm(prepared,
1440
+ response *= cp(prepared,
1441
1441
  #ifdef USE_COAT_NORMAL_FRAMES
1442
1442
  independentCoat ? coatLightCosine : lightLocal.z
1443
1443
  #else
@@ -1456,39 +1456,39 @@ if (
1456
1456
  reflection
1457
1457
  #endif
1458
1458
  && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1459
- vec3 dG = viewLocal;
1460
- vec3 kQ = lightLocal;
1459
+ vec3 dI = viewLocal;
1460
+ vec3 lJ = lightLocal;
1461
1461
  vec3 coatHalf = aa;
1462
1462
  float coatViewHalf = viewHalf;
1463
1463
  if (prepared.directionFrames) {
1464
- dG = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1464
+ dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
1465
  #ifdef USE_COAT_NORMAL_FRAMES
1466
- if (independentCoat) { dG = prepared.coatViewLocal; }
1466
+ if (independentCoat) { dI = prepared.coatViewLocal; }
1467
1467
  #endif
1468
- kQ = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
- coatHalf = normalize(kQ + dG);
1468
+ lJ = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
+ coatHalf = normalize(lJ + dI);
1470
1470
  if (coatHalf.z < 0.0) { coatHalf = -coatHalf; }
1471
- coatViewHalf = abs(dot(dG, coatHalf));
1471
+ coatViewHalf = abs(dot(dI, coatHalf));
1472
1472
  }
1473
1473
 
1474
- vec3 lB = vec3(ae(
1474
+ vec3 mr = vec3(ae(
1475
1475
  coatViewHalf,
1476
1476
  1.0 / material.coatIor
1477
1477
  ));
1478
- OpenPbrResolvedMaterial dF = material;
1479
- vec2 jD = aL(material.coatRoughness, material.coatAnisotropy);
1480
- dF.alphaX = jD.x;
1481
- dF.alphaY = jD.y;
1478
+ OpenPbrResolvedMaterial dH = material;
1479
+ vec2 kh = aL(material.coatRoughness, material.coatAnisotropy);
1480
+ dH.alphaX = kh.x;
1481
+ dH.alphaY = kh.y;
1482
1482
  response += prepared.weights[OPENPBR_LOBE_COAT]
1483
1483
  #ifdef USE_COAT_NORMAL_FRAMES
1484
1484
  * (independentCoat ? max(coatLightCosine, 0.0) : 1.0)
1485
1485
  #endif
1486
1486
  * aj(
1487
- dF,
1488
- dG,
1489
- kQ,
1487
+ dH,
1488
+ dI,
1489
+ lJ,
1490
1490
  coatHalf,
1491
- lB,
1491
+ mr,
1492
1492
  lobePdf
1493
1493
  );
1494
1494
  pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * lobePdf;
@@ -1501,19 +1501,19 @@ if (
1501
1501
  reflection
1502
1502
  #endif
1503
1503
  && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1504
- float rt = aQ(
1504
+ float sL = aQ(
1505
1505
  abs(viewLocal.z),
1506
1506
  material.fuzzRoughness
1507
1507
  );
1508
1508
  response *= max(
1509
1509
  vec3(0.0),
1510
- vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * rt)
1510
+ vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * sL)
1511
1511
  );
1512
1512
  response += prepared.weights[OPENPBR_LOBE_FUZZ]
1513
1513
  #ifdef USE_COAT_NORMAL_FRAMES
1514
1514
  * (independentCoat ? max(lightLocal.z, 0.0) : 1.0)
1515
1515
  #endif
1516
- * kg(
1516
+ * kN(
1517
1517
  material,
1518
1518
  viewLocal,
1519
1519
  lightLocal,
@@ -1528,18 +1528,18 @@ if (independentCoat) { return response; }
1528
1528
  return response * abs(lightLocal.z);
1529
1529
  }
1530
1530
 
1531
- vec3 sj(
1531
+ vec3 tJ(
1532
1532
  vec3 tangent,
1533
1533
  OpenPbrResolvedMaterial material,
1534
- vec3 bD,
1534
+ vec3 bE,
1535
1535
  vec3 normal,
1536
1536
  vec3 lightDirection,
1537
1537
  out float pdf
1538
1538
  ) {
1539
- OpenPbrPreparedBsdf prepared = bV(
1539
+ OpenPbrPreparedBsdf prepared = bX(
1540
1540
  tangent,
1541
1541
  material,
1542
- bD,
1542
+ bE,
1543
1543
  normal
1544
1544
  );
1545
1545
  return openpbr_eval_prepared(prepared, lightDirection, pdf);
@@ -1548,15 +1548,15 @@ return openpbr_eval_prepared(prepared, lightDirection, pdf);
1548
1548
  float openpbr_pdf(
1549
1549
  vec3 tangent,
1550
1550
  OpenPbrResolvedMaterial material,
1551
- vec3 bD,
1551
+ vec3 bE,
1552
1552
  vec3 normal,
1553
1553
  vec3 lightDirection
1554
1554
  ) {
1555
1555
  float pdf;
1556
- sj(
1556
+ tJ(
1557
1557
  tangent,
1558
1558
  material,
1559
- bD,
1559
+ bE,
1560
1560
  normal,
1561
1561
  lightDirection,
1562
1562
  pdf
@@ -1564,7 +1564,7 @@ pdf
1564
1564
  return pdf;
1565
1565
  }
1566
1566
 
1567
- vec3 dl(
1567
+ vec3 dr(
1568
1568
  OpenPbrPreparedBsdf prepared,
1569
1569
  vec3 cc,
1570
1570
  out vec3 lightDirection,
@@ -1573,9 +1573,9 @@ out bool isTransmissionEvent
1573
1573
  ) {
1574
1574
  OpenPbrResolvedMaterial material = prepared.material;
1575
1575
  vec3 viewLocal = prepared.viewLocal;
1576
- float cp = cc.x;
1577
- float fp = cc.y;
1578
- float bl = cc.z;
1576
+ float cr = cc.x;
1577
+ float fG = cc.y;
1578
+ float bm = cc.z;
1579
1579
  pdf = 0.0;
1580
1580
  isTransmissionEvent = false;
1581
1581
  lightDirection = prepared.basis.normal;
@@ -1588,7 +1588,7 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6) {
1588
1588
  lightDirection = openpbr_to_world(prepared.basis, -viewLocal);
1589
1589
  pdf = 1.0;
1590
1590
  isTransmissionEvent = true;
1591
- return (ba(prepared.material) * cm(prepared,
1591
+ return (bb(prepared.material) * cp(prepared,
1592
1592
  #ifdef USE_COAT_NORMAL_FRAMES
1593
1593
  prepared.material.coatNormalEnabled ? dot(prepared.coatBasis.normal, lightDirection) : -prepared.viewLocal.z
1594
1594
  #else
@@ -1607,27 +1607,27 @@ return vec3(0.0);
1607
1607
  }
1608
1608
 
1609
1609
  vec3 lightLocal;
1610
- if (bl < cdf[OPENPBR_LOBE_FUZZ] || (
1611
- bl >= cdf[OPENPBR_LOBE_TRANSMISSION] && bl < cdf[OPENPBR_LOBE_DIFFUSE]
1610
+ if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1611
+ bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1612
1612
  )) {
1613
- lightLocal = aM(vec2(cp, fp));
1613
+ lightLocal = aM(vec2(cr, fG));
1614
1614
  }
1615
- else if (bl < cdf[OPENPBR_LOBE_COAT]) {
1616
- vec3 dG = viewLocal;
1617
- if (prepared.directionFrames) { dG = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1615
+ else if (bm < cdf[OPENPBR_LOBE_COAT]) {
1616
+ vec3 dI = viewLocal;
1617
+ if (prepared.directionFrames) { dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1618
1618
  #ifdef USE_COAT_NORMAL_FRAMES
1619
- if (material.coatNormalEnabled) { dG = prepared.coatViewLocal; }
1619
+ if (material.coatNormalEnabled) { dI = prepared.coatViewLocal; }
1620
1620
  #endif
1621
1621
  vec3 aa = aA(
1622
- dG,
1622
+ dI,
1623
1623
 
1624
1624
  aL(material.coatRoughness, material.coatAnisotropy),
1625
- vec2(cp, fp)
1625
+ vec2(cr, fG)
1626
1626
  );
1627
1627
  if (aa.z < 0.0) {
1628
1628
  aa = -aa;
1629
1629
  }
1630
- lightLocal = normalize(reflect(-dG, aa));
1630
+ lightLocal = normalize(reflect(-dI, aa));
1631
1631
  #ifdef USE_COAT_NORMAL_FRAMES
1632
1632
  if (material.coatNormalEnabled) {
1633
1633
  lightDirection = openpbr_to_world(prepared.coatBasis, lightLocal);
@@ -1637,20 +1637,20 @@ return openpbr_eval_prepared(prepared, lightDirection, pdf);
1637
1637
  #endif
1638
1638
  if (prepared.directionFrames) { lightLocal = openpbr_to_local(prepared.basis, openpbr_to_world(prepared.coatBasis, lightLocal)); }
1639
1639
  }
1640
- else if (bl < cdf[OPENPBR_LOBE_SPECULAR]) {
1641
- bool uU = bl < cdf[OPENPBR_LOBE_METAL];
1642
- float sK = (bl - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
- if (uU && sK < prepared.metalMsProbability) {
1644
- float z = cp;
1645
- float dr = sqrt(max(0.0, 1.0 - z * z));
1646
- float azimuth = TWOPI * fp;
1647
- lightLocal = vec3(dr * cos(azimuth), dr * sin(azimuth), z);
1640
+ else if (bm < cdf[OPENPBR_LOBE_SPECULAR]) {
1641
+ bool wI = bm < cdf[OPENPBR_LOBE_METAL];
1642
+ float uj = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
+ if (wI && uj < prepared.metalMsProbability) {
1644
+ float z = cr;
1645
+ float dw = sqrt(max(0.0, 1.0 - z * z));
1646
+ float azimuth = TWOPI * fG;
1647
+ lightLocal = vec3(dw * cos(azimuth), dw * sin(azimuth), z);
1648
1648
  }
1649
1649
  else {
1650
1650
  vec3 aa = aA(
1651
1651
  viewLocal,
1652
1652
  vec2(material.alphaX, material.alphaY),
1653
- vec2(cp, fp)
1653
+ vec2(cr, fG)
1654
1654
  );
1655
1655
  if (aa.z < 0.0) {
1656
1656
  aa = -aa;
@@ -1658,27 +1658,27 @@ aa = -aa;
1658
1658
  lightLocal = normalize(reflect(-viewLocal, aa));
1659
1659
  }
1660
1660
  }
1661
- else if (bl < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1661
+ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1662
1662
  isTransmissionEvent = true;
1663
1663
 
1664
1664
 
1665
- float wk = (bl - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
- if (prepared.dielectricMsProbability > 0.0 && wk < prepared.dielectricMsProbability) {
1667
- float iZ = prepared.dielectricMsReflectionRatio;
1668
- bool mv = cp < iZ;
1665
+ float yj = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
+ if (prepared.dielectricMsProbability > 0.0 && yj < prepared.dielectricMsProbability) {
1667
+ float fw = prepared.dielectricMsReflectionRatio;
1668
+ bool nt = cr < fw;
1669
1669
  float z;
1670
- if (mv) { z = min(cp / iZ, 0.99999994); }
1671
- else { z = -min((cp - iZ) / (1.0 - iZ), 0.99999994); }
1672
- float dr = sqrt(max(0.0, 1.0 - z * z));
1673
- float azimuth = TWOPI * fp;
1674
- lightLocal = vec3(dr * cos(azimuth), dr * sin(azimuth), z);
1675
- isTransmissionEvent = !mv;
1670
+ if (nt) { z = min(cr / fw, 0.99999994); }
1671
+ else { z = -min((cr - fw) / (1.0 - fw), 0.99999994); }
1672
+ float dw = sqrt(max(0.0, 1.0 - z * z));
1673
+ float azimuth = TWOPI * fG;
1674
+ lightLocal = vec3(dw * cos(azimuth), dw * sin(azimuth), z);
1675
+ isTransmissionEvent = !nt;
1676
1676
  }
1677
1677
  else {
1678
1678
  vec3 aa = aA(
1679
1679
  viewLocal,
1680
1680
  vec2(material.alphaX, material.alphaY),
1681
- vec2(cp, fp)
1681
+ vec2(cr, fG)
1682
1682
  );
1683
1683
  if (aa.z < 0.0) {
1684
1684
  aa = -aa;
@@ -1689,7 +1689,7 @@ viewHalf,
1689
1689
  prepared.material.relativeIor
1690
1690
  ));
1691
1691
  if (material.thinFilmWeight > 0.0) {
1692
- fresnel = bQ(
1692
+ fresnel = bR(
1693
1693
  fresnel,
1694
1694
  viewHalf,
1695
1695
  material.thinFilmThickness,
@@ -1700,8 +1700,8 @@ prepared.thinFilmExteriorIor
1700
1700
  );
1701
1701
  }
1702
1702
  if (material.thinWalled) {
1703
- vec3 hX = normalize(reflect(-viewLocal, aa));
1704
- lightLocal = vec3(hX.xy, -hX.z);
1703
+ vec3 iI = normalize(reflect(-viewLocal, aa));
1704
+ lightLocal = vec3(iI.xy, -iI.z);
1705
1705
  }
1706
1706
  else {
1707
1707
  lightLocal = refract(
@@ -1720,13 +1720,13 @@ lightLocal = normalize(lightLocal);
1720
1720
  else {
1721
1721
  isTransmissionEvent = true;
1722
1722
  if (material.thinWalled) {
1723
- float kW = cp;
1724
- bool qD = kW >= 0.5;
1725
- cp = qD
1726
- ? (kW - 0.5) * 2.0
1727
- : kW * 2.0;
1728
- lightLocal = aM(vec2(cp, fp));
1729
- if (qD) {
1723
+ float lP = cr;
1724
+ bool rR = lP >= 0.5;
1725
+ cr = rR
1726
+ ? (lP - 0.5) * 2.0
1727
+ : lP * 2.0;
1728
+ lightLocal = aM(vec2(cr, fG));
1729
+ if (rR) {
1730
1730
  lightLocal.z = -lightLocal.z;
1731
1731
  }
1732
1732
  else {
@@ -1734,7 +1734,7 @@ isTransmissionEvent = false;
1734
1734
  }
1735
1735
  }
1736
1736
  else {
1737
- lightLocal = aM(vec2(cp, fp));
1737
+ lightLocal = aM(vec2(cr, fG));
1738
1738
  lightLocal.z = -lightLocal.z;
1739
1739
  }
1740
1740
  }
@@ -1751,17 +1751,17 @@ if (material.coatNormalEnabled &&
1751
1751
  return openpbr_eval_prepared(prepared, lightDirection, pdf);
1752
1752
  }
1753
1753
 
1754
- vec3 uc(
1754
+ vec3 vL(
1755
1755
  vec3 tangent,
1756
1756
  OpenPbrResolvedMaterial material,
1757
1757
  vec3 cc,
1758
- vec3 bD,
1758
+ vec3 bE,
1759
1759
  vec3 normal,
1760
1760
  out vec3 lightDirection,
1761
1761
  out float pdf,
1762
1762
  out bool isTransmissionEvent
1763
1763
  ) {
1764
- OpenPbrPreparedBsdf prepared = bV(tangent, material, bD, normal);
1765
- return dl(prepared, cc, lightDirection, pdf, isTransmissionEvent);
1764
+ OpenPbrPreparedBsdf prepared = bX(tangent, material, bE, normal);
1765
+ return dr(prepared, cc, lightDirection, pdf, isTransmissionEvent);
1766
1766
  }`;
1767
1767
  //# sourceMappingURL=openPbrBsdf.glsl.js.map