@meimu/mutracer 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/LICENSES/Classroom-CC0.txt +121 -0
  2. package/README.md +7 -7
  3. package/THIRD_PARTY_NOTICES.md +13 -8
  4. package/dist/assets/bvh.worker.js +1 -1
  5. package/dist/mutracer.umd.js +10421 -8363
  6. package/docs/api.md +202 -11
  7. package/docs/denoising.md +30 -15
  8. package/docs/materials.md +18 -27
  9. package/docs/performance.md +5 -2
  10. package/docs/progressive-rendering.md +32 -1
  11. package/docs/threejs.md +19 -10
  12. package/docs/updates.md +44 -2
  13. package/docs/viewer.md +41 -3
  14. package/lib/Display.d.ts +13 -2
  15. package/lib/Display.js +27 -6
  16. package/lib/Display.js.map +1 -1
  17. package/lib/Engine.d.ts +2 -0
  18. package/lib/Engine.js +52 -25
  19. package/lib/Engine.js.map +1 -1
  20. package/lib/Render.d.ts +44 -9
  21. package/lib/Render.js +115 -17
  22. package/lib/Render.js.map +1 -1
  23. package/lib/RenderLoop.d.ts +7 -1
  24. package/lib/RenderLoop.js +94 -13
  25. package/lib/RenderLoop.js.map +1 -1
  26. package/lib/main.d.ts +6 -3
  27. package/lib/main.js +1 -0
  28. package/lib/main.js.map +1 -1
  29. package/lib/math/access.d.ts +4 -0
  30. package/lib/math/access.js +10 -0
  31. package/lib/math/access.js.map +1 -0
  32. package/lib/math/mat3.d.ts +4 -0
  33. package/lib/math/mat3.js +54 -0
  34. package/lib/math/mat3.js.map +1 -0
  35. package/lib/math/mat4.d.ts +19 -0
  36. package/lib/math/mat4.js +413 -0
  37. package/lib/math/mat4.js.map +1 -0
  38. package/lib/math/storage.d.ts +6 -0
  39. package/lib/math/storage.js +22 -0
  40. package/lib/math/storage.js.map +1 -0
  41. package/lib/math/types.d.ts +3 -0
  42. package/lib/math/types.js +2 -0
  43. package/lib/math/types.js.map +1 -0
  44. package/lib/math/vec2.d.ts +13 -0
  45. package/lib/math/vec2.js +52 -0
  46. package/lib/math/vec2.js.map +1 -0
  47. package/lib/math/vec3.d.ts +23 -0
  48. package/lib/math/vec3.js +139 -0
  49. package/lib/math/vec3.js.map +1 -0
  50. package/lib/math.d.ts +5 -17
  51. package/lib/math.js +5 -55
  52. package/lib/math.js.map +1 -1
  53. package/lib/oidn.d.ts +1 -1
  54. package/lib/oidn.js +4 -2
  55. package/lib/oidn.js.map +1 -1
  56. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  57. package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
  58. package/lib/renderer/AovPrimitiveCache.js +48 -0
  59. package/lib/renderer/AovPrimitiveCache.js.map +1 -0
  60. package/lib/renderer/Box3.d.ts +5 -0
  61. package/lib/renderer/Box3.js +9 -0
  62. package/lib/renderer/Box3.js.map +1 -0
  63. package/lib/renderer/GPUTraceQueue.d.ts +10 -0
  64. package/lib/renderer/GPUTraceQueue.js +31 -0
  65. package/lib/renderer/GPUTraceQueue.js.map +1 -0
  66. package/lib/renderer/MaterialData.d.ts +15 -0
  67. package/lib/renderer/MaterialData.js +61 -0
  68. package/lib/renderer/MaterialData.js.map +1 -0
  69. package/lib/renderer/MaterialTable.d.ts +11 -98
  70. package/lib/renderer/MaterialTable.js +34 -412
  71. package/lib/renderer/MaterialTable.js.map +1 -1
  72. package/lib/renderer/RenderingPipeline.d.ts +32 -13
  73. package/lib/renderer/RenderingPipeline.js +1 -17
  74. package/lib/renderer/RenderingPipeline.js.map +1 -1
  75. package/lib/renderer/TileRender.d.ts +0 -1
  76. package/lib/renderer/TileRender.js +14 -1
  77. package/lib/renderer/TileRender.js.map +1 -1
  78. package/lib/renderer/WGPUAov.d.ts +39 -0
  79. package/lib/renderer/WGPUAov.js +239 -0
  80. package/lib/renderer/WGPUAov.js.map +1 -0
  81. package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
  82. package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
  83. package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
  84. package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
  85. package/lib/renderer/WGPUBindlessTextures.js +180 -0
  86. package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
  87. package/lib/renderer/WGPUBloomPass.js +17 -97
  88. package/lib/renderer/WGPUBloomPass.js.map +1 -1
  89. package/lib/renderer/WGPUComputePass.d.ts +1 -1
  90. package/lib/renderer/WGPUComputePass.js.map +1 -1
  91. package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
  92. package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
  93. package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
  94. package/lib/renderer/WGPUFullQuadPass.js +10 -9
  95. package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
  96. package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
  97. package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
  98. package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
  99. package/lib/renderer/WGPURayTraceOutput.js +26 -17
  100. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  101. package/lib/renderer/WGPURayTracePass.d.ts +36 -40
  102. package/lib/renderer/WGPURayTracePass.js +399 -548
  103. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  104. package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
  105. package/lib/renderer/WGPURenderingPipeline.js +239 -60
  106. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  107. package/lib/renderer/WGPUShaderCache.d.ts +2 -2
  108. package/lib/renderer/WGPUShaderCache.js +10 -5
  109. package/lib/renderer/WGPUShaderCache.js.map +1 -1
  110. package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
  111. package/lib/renderer/WGPUShaderCapabilities.js +54 -0
  112. package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
  113. package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
  114. package/lib/renderer/WGPUSkyBaker.js +85 -0
  115. package/lib/renderer/WGPUSkyBaker.js.map +1 -0
  116. package/lib/renderer/WebGLAov.d.ts +41 -0
  117. package/lib/renderer/WebGLAov.js +106 -0
  118. package/lib/renderer/WebGLAov.js.map +1 -0
  119. package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
  120. package/lib/renderer/WebGLFullQuadPass.js +18 -2
  121. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  122. package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
  123. package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
  124. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  125. package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
  126. package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
  127. package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
  128. package/lib/renderer/WebGLRayTracePass.js +83 -7
  129. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  130. package/lib/renderer/WebGLRenderingPipeline.js +116 -8
  131. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  132. package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
  133. package/lib/renderer/WebGLSkyBaker.js +422 -0
  134. package/lib/renderer/WebGLSkyBaker.js.map +1 -0
  135. package/lib/renderer/WebGLSkySource.d.ts +9 -0
  136. package/lib/renderer/WebGLSkySource.js +28 -0
  137. package/lib/renderer/WebGLSkySource.js.map +1 -0
  138. package/lib/renderer/accumulationTarget.d.ts +5 -0
  139. package/lib/renderer/accumulationTarget.js.map +1 -1
  140. package/lib/renderer/aov.d.ts +42 -0
  141. package/lib/renderer/aov.js +50 -0
  142. package/lib/renderer/aov.js.map +1 -0
  143. package/lib/renderer/aovDisplay.d.ts +14 -0
  144. package/lib/renderer/aovDisplay.js +32 -0
  145. package/lib/renderer/aovDisplay.js.map +1 -0
  146. package/lib/renderer/aovScene.d.ts +21 -0
  147. package/lib/renderer/aovScene.js +139 -0
  148. package/lib/renderer/aovScene.js.map +1 -0
  149. package/lib/renderer/binnedSahBvh.js +2 -1
  150. package/lib/renderer/binnedSahBvh.js.map +1 -1
  151. package/lib/renderer/bvhAccel.d.ts +20 -10
  152. package/lib/renderer/bvhAccel.js +168 -58
  153. package/lib/renderer/bvhAccel.js.map +1 -1
  154. package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
  155. package/lib/renderer/cameraSnapshot.js +2 -1
  156. package/lib/renderer/cameraSnapshot.js.map +1 -1
  157. package/lib/renderer/cameraUniform.d.ts +2 -0
  158. package/lib/renderer/cameraUniform.js +12 -0
  159. package/lib/renderer/cameraUniform.js.map +1 -0
  160. package/lib/renderer/committedScene.js +4 -0
  161. package/lib/renderer/committedScene.js.map +1 -1
  162. package/lib/renderer/denoiser.d.ts +3 -11
  163. package/lib/renderer/denoiser.js.map +1 -1
  164. package/lib/renderer/depthQuery.js +4 -1
  165. package/lib/renderer/depthQuery.js.map +1 -1
  166. package/lib/renderer/displacementPreparation.d.ts +11 -0
  167. package/lib/renderer/displacementPreparation.js +351 -0
  168. package/lib/renderer/displacementPreparation.js.map +1 -0
  169. package/lib/renderer/displacementRange.d.ts +1 -0
  170. package/lib/renderer/displacementRange.js +9 -0
  171. package/lib/renderer/displacementRange.js.map +1 -0
  172. package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
  173. package/lib/renderer/displayParityDiagnostics.js +2 -0
  174. package/lib/renderer/displayParityDiagnostics.js.map +1 -0
  175. package/lib/renderer/envMapCreation.d.ts +9 -8
  176. package/lib/renderer/envMapCreation.js +36 -12
  177. package/lib/renderer/envMapCreation.js.map +1 -1
  178. package/lib/renderer/envMapDistribution.d.ts +12 -2
  179. package/lib/renderer/envMapDistribution.js +43 -34
  180. package/lib/renderer/envMapDistribution.js.map +1 -1
  181. package/lib/renderer/geometryBvhBounds.d.ts +4 -0
  182. package/lib/renderer/geometryBvhBounds.js +82 -0
  183. package/lib/renderer/geometryBvhBounds.js.map +1 -0
  184. package/lib/renderer/geometryUpdateState.d.ts +32 -0
  185. package/lib/renderer/geometryUpdateState.js +2 -0
  186. package/lib/renderer/geometryUpdateState.js.map +1 -0
  187. package/lib/renderer/geometryUpdates.d.ts +17 -9
  188. package/lib/renderer/geometryUpdates.js +92 -33
  189. package/lib/renderer/geometryUpdates.js.map +1 -1
  190. package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
  191. package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
  192. package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
  193. package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
  194. package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
  195. package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
  196. package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
  197. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
  198. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
  199. package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
  200. package/lib/renderer/glsl/aovTrace.frag.js +121 -0
  201. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
  202. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  203. package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
  204. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  205. package/lib/renderer/glsl/chunks/intersect.glsl.js +437 -435
  206. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  207. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
  208. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  209. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
  210. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  211. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  212. package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
  213. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +51 -51
  214. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  215. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
  216. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +108 -108
  217. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  218. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
  219. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
  220. package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
  221. package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
  222. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  223. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
  224. package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
  225. package/lib/renderer/glsl/depthQuery.frag.js +7 -7
  226. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
  227. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
  228. package/lib/renderer/glsl/rayTrace.frag.js +191 -191
  229. package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
  230. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  231. package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
  232. package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
  233. package/lib/renderer/lightConstants.d.ts +10 -0
  234. package/lib/renderer/lightConstants.js +11 -0
  235. package/lib/renderer/lightConstants.js.map +1 -0
  236. package/lib/renderer/lightCore.d.ts +12 -0
  237. package/lib/renderer/lightCore.js +13 -0
  238. package/lib/renderer/lightCore.js.map +1 -0
  239. package/lib/renderer/lightSampling.d.ts +20 -17
  240. package/lib/renderer/lightSampling.js +123 -56
  241. package/lib/renderer/lightSampling.js.map +1 -1
  242. package/lib/renderer/lightsData.d.ts +21 -0
  243. package/lib/renderer/lightsData.js +192 -0
  244. package/lib/renderer/lightsData.js.map +1 -0
  245. package/lib/renderer/lightsUtil.d.ts +3 -26
  246. package/lib/renderer/lightsUtil.js +3 -153
  247. package/lib/renderer/lightsUtil.js.map +1 -1
  248. package/lib/renderer/materialBufferData.d.ts +70 -0
  249. package/lib/renderer/materialBufferData.js +2 -0
  250. package/lib/renderer/materialBufferData.js.map +1 -0
  251. package/lib/renderer/materialConstants.d.ts +11 -0
  252. package/lib/renderer/materialConstants.js +11 -0
  253. package/lib/renderer/materialConstants.js.map +1 -1
  254. package/lib/renderer/materialCore.d.ts +8 -0
  255. package/lib/renderer/materialCore.js +9 -0
  256. package/lib/renderer/materialCore.js.map +1 -0
  257. package/lib/renderer/materialEmission.d.ts +2 -2
  258. package/lib/renderer/materialEmission.js +3 -3
  259. package/lib/renderer/materialEmission.js.map +1 -1
  260. package/lib/renderer/materialLayout.d.ts +2 -101
  261. package/lib/renderer/materialLayout.js +110 -172
  262. package/lib/renderer/materialLayout.js.map +1 -1
  263. package/lib/renderer/materialLayoutSchema.d.ts +26 -0
  264. package/lib/renderer/materialLayoutSchema.js +172 -0
  265. package/lib/renderer/materialLayoutSchema.js.map +1 -0
  266. package/lib/renderer/materialParams.d.ts +69 -0
  267. package/lib/renderer/materialParams.js +272 -0
  268. package/lib/renderer/materialParams.js.map +1 -0
  269. package/lib/renderer/materialTextureSlots.d.ts +14 -324
  270. package/lib/renderer/materialTextureSlots.js +21 -8
  271. package/lib/renderer/materialTextureSlots.js.map +1 -1
  272. package/lib/renderer/materialTextures.d.ts +6 -0
  273. package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
  274. package/lib/renderer/materialTextures.js.map +1 -0
  275. package/lib/renderer/mergeMeshesToGeometry.js +6 -147
  276. package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
  277. package/lib/renderer/meshInstances.d.ts +4 -21
  278. package/lib/renderer/meshInstances.js +10 -56
  279. package/lib/renderer/meshInstances.js.map +1 -1
  280. package/lib/renderer/oidnNetwork.d.ts +2 -2
  281. package/lib/renderer/oidnNetwork.js +1 -1
  282. package/lib/renderer/oidnNetwork.js.map +1 -1
  283. package/lib/renderer/openPbrEnergyLut.js +850 -846
  284. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  285. package/lib/renderer/ownedDenoiser.d.ts +9 -0
  286. package/lib/renderer/ownedDenoiser.js +2 -0
  287. package/lib/renderer/ownedDenoiser.js.map +1 -0
  288. package/lib/renderer/packedMeshInstances.d.ts +23 -0
  289. package/lib/renderer/packedMeshInstances.js +80 -0
  290. package/lib/renderer/packedMeshInstances.js.map +1 -0
  291. package/lib/renderer/prepareMeshBVH.d.ts +12 -47
  292. package/lib/renderer/prepareMeshBVH.js +21 -642
  293. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  294. package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
  295. package/lib/renderer/proceduralEnvironmentPower.js +8 -0
  296. package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
  297. package/lib/renderer/progressiveScheduler.d.ts +1 -0
  298. package/lib/renderer/progressiveScheduler.js +3 -0
  299. package/lib/renderer/progressiveScheduler.js.map +1 -1
  300. package/lib/renderer/renderPipeline.d.ts +3 -1
  301. package/lib/renderer/renderPipeline.js.map +1 -1
  302. package/lib/renderer/renderingLimits.d.ts +9 -0
  303. package/lib/renderer/renderingLimits.js +18 -0
  304. package/lib/renderer/renderingLimits.js.map +1 -0
  305. package/lib/renderer/sceneAssembly.d.ts +73 -0
  306. package/lib/renderer/sceneAssembly.js +109 -0
  307. package/lib/renderer/sceneAssembly.js.map +1 -0
  308. package/lib/renderer/sceneChangeCore.d.ts +39 -0
  309. package/lib/renderer/sceneChangeCore.js +307 -0
  310. package/lib/renderer/sceneChangeCore.js.map +1 -0
  311. package/lib/renderer/sceneChangeDetector.d.ts +3 -6
  312. package/lib/renderer/sceneChangeDetector.js +24 -150
  313. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  314. package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
  315. package/lib/renderer/sceneLayoutSchema.js +111 -0
  316. package/lib/renderer/sceneLayoutSchema.js.map +1 -0
  317. package/lib/renderer/sceneLightChanges.d.ts +3 -3
  318. package/lib/renderer/sceneLightChanges.js.map +1 -1
  319. package/lib/renderer/scenePreparation.d.ts +55 -0
  320. package/lib/renderer/scenePreparation.js +360 -0
  321. package/lib/renderer/scenePreparation.js.map +1 -0
  322. package/lib/renderer/scratchSampling.js +18 -18
  323. package/lib/renderer/scratchSampling.js.map +1 -1
  324. package/lib/renderer/shader.d.ts +2 -0
  325. package/lib/renderer/shader.js +2 -0
  326. package/lib/renderer/shader.js.map +1 -1
  327. package/lib/renderer/shaderCapabilities.d.ts +23 -0
  328. package/lib/renderer/shaderCapabilities.js +55 -0
  329. package/lib/renderer/shaderCapabilities.js.map +1 -0
  330. package/lib/renderer/shaderCapacity.d.ts +2 -0
  331. package/lib/renderer/shaderCapacity.js +5 -0
  332. package/lib/renderer/shaderCapacity.js.map +1 -0
  333. package/lib/renderer/skyModel.d.ts +9 -0
  334. package/lib/renderer/skyModel.js +10 -0
  335. package/lib/renderer/skyModel.js.map +1 -0
  336. package/lib/renderer/textureAtlas.d.ts +60 -0
  337. package/lib/renderer/textureAtlas.js +145 -0
  338. package/lib/renderer/textureAtlas.js.map +1 -0
  339. package/lib/renderer/textureAtlasPixels.d.ts +7 -0
  340. package/lib/renderer/textureAtlasPixels.js +68 -0
  341. package/lib/renderer/textureAtlasPixels.js.map +1 -0
  342. package/lib/renderer/util.d.ts +1 -1
  343. package/lib/renderer/util.js.map +1 -1
  344. package/lib/renderer/webgl.d.ts +9 -2
  345. package/lib/renderer/webgl.js +54 -9
  346. package/lib/renderer/webgl.js.map +1 -1
  347. package/lib/renderer/wgpuBindless.d.ts +26 -0
  348. package/lib/renderer/wgpuBindless.js +95 -0
  349. package/lib/renderer/wgpuBindless.js.map +1 -0
  350. package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
  351. package/lib/renderer/wgpuBindlessSource.js +51 -0
  352. package/lib/renderer/wgpuBindlessSource.js.map +1 -0
  353. package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
  354. package/lib/renderer/wgpuMaterialConstants.js +52 -0
  355. package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
  356. package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
  357. package/lib/renderer/wgpuSceneUniform.js +125 -0
  358. package/lib/renderer/wgpuSceneUniform.js.map +1 -0
  359. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  360. package/lib/renderer/wgpuShaderSource.js +31 -0
  361. package/lib/renderer/wgpuShaderSource.js.map +1 -0
  362. package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
  363. package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
  364. package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
  365. package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
  366. package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
  367. package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
  368. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
  369. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
  370. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
  371. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
  372. package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
  373. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
  374. package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
  375. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
  376. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
  377. package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
  378. package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
  379. package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
  380. package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
  381. package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
  382. package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
  383. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  384. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  385. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
  386. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  387. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
  388. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +743 -706
  389. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  390. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
  391. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  392. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
  393. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +86 -83
  394. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  395. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
  396. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
  397. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
  398. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  399. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
  400. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
  401. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  402. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
  403. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
  404. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
  405. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
  406. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  407. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
  408. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
  409. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
  410. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
  411. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
  412. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
  413. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  414. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
  415. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
  416. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
  417. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
  418. package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
  419. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  420. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  421. package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
  422. package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
  423. package/lib/renderer/wgsl/jnlm.compute.js +315 -0
  424. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
  425. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  426. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
  427. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
  428. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
  429. package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
  430. package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
  431. package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
  432. package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
  433. package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
  434. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  435. package/lib/scene/Camera.js +7 -3
  436. package/lib/scene/Camera.js.map +1 -1
  437. package/lib/scene/EnvironmentLight.d.ts +5 -9
  438. package/lib/scene/EnvironmentLight.js +4 -14
  439. package/lib/scene/EnvironmentLight.js.map +1 -1
  440. package/lib/scene/EnvironmentLightState.d.ts +18 -0
  441. package/lib/scene/EnvironmentLightState.js +19 -0
  442. package/lib/scene/EnvironmentLightState.js.map +1 -0
  443. package/lib/scene/Geometry.d.ts +12 -6
  444. package/lib/scene/Geometry.js +37 -13
  445. package/lib/scene/Geometry.js.map +1 -1
  446. package/lib/scene/InstanceState.d.ts +39 -0
  447. package/lib/scene/InstanceState.js +77 -0
  448. package/lib/scene/InstanceState.js.map +1 -0
  449. package/lib/scene/InstancedMesh.d.ts +1 -1
  450. package/lib/scene/InstancedMesh.js +3 -0
  451. package/lib/scene/InstancedMesh.js.map +1 -1
  452. package/lib/scene/MaterialState.d.ts +209 -0
  453. package/lib/scene/MaterialState.js +231 -0
  454. package/lib/scene/MaterialState.js.map +1 -0
  455. package/lib/scene/Mesh.d.ts +4 -6
  456. package/lib/scene/Mesh.js +3 -11
  457. package/lib/scene/Mesh.js.map +1 -1
  458. package/lib/scene/MeshState.d.ts +20 -0
  459. package/lib/scene/MeshState.js +35 -0
  460. package/lib/scene/MeshState.js.map +1 -0
  461. package/lib/scene/OpenPBRMaterial.d.ts +7 -169
  462. package/lib/scene/OpenPBRMaterial.js +5 -223
  463. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  464. package/lib/scene/PixelTexture.d.ts +6 -0
  465. package/lib/scene/PixelTexture.js +10 -0
  466. package/lib/scene/PixelTexture.js.map +1 -0
  467. package/lib/scene/ProceduralSky.d.ts +24 -0
  468. package/lib/scene/ProceduralSky.js +40 -0
  469. package/lib/scene/ProceduralSky.js.map +1 -0
  470. package/lib/scene/RectLight.d.ts +2 -13
  471. package/lib/scene/RectLight.js +3 -21
  472. package/lib/scene/RectLight.js.map +1 -1
  473. package/lib/scene/RectLightState.d.ts +31 -0
  474. package/lib/scene/RectLightState.js +26 -0
  475. package/lib/scene/RectLightState.js.map +1 -0
  476. package/lib/scene/Scene.d.ts +15 -4
  477. package/lib/scene/Scene.js.map +1 -1
  478. package/lib/scene/SceneNode.js +7 -6
  479. package/lib/scene/SceneNode.js.map +1 -1
  480. package/lib/scene/Texture.d.ts +10 -41
  481. package/lib/scene/Texture.js +4 -33
  482. package/lib/scene/Texture.js.map +1 -1
  483. package/lib/scene/TextureState.d.ts +35 -0
  484. package/lib/scene/TextureState.js +35 -0
  485. package/lib/scene/TextureState.js.map +1 -0
  486. package/lib/scene/attributeData.d.ts +4 -0
  487. package/lib/scene/attributeData.js +10 -0
  488. package/lib/scene/attributeData.js.map +1 -0
  489. package/lib/scene/lightState.d.ts +8 -0
  490. package/lib/scene/lightState.js +2 -0
  491. package/lib/scene/lightState.js.map +1 -0
  492. package/lib/scene/openPbrSchema.d.ts +7 -12
  493. package/lib/scene/openPbrSchema.js +273 -28
  494. package/lib/scene/openPbrSchema.js.map +1 -1
  495. package/lib/scene/skyParameters.d.ts +20 -0
  496. package/lib/scene/skyParameters.js +28 -0
  497. package/lib/scene/skyParameters.js.map +1 -0
  498. package/lib/scene/textureData.d.ts +9 -0
  499. package/lib/scene/textureData.js +2 -0
  500. package/lib/scene/textureData.js.map +1 -0
  501. package/lib/scene/texturePixels.d.ts +6 -0
  502. package/lib/scene/texturePixels.js +10 -0
  503. package/lib/scene/texturePixels.js.map +1 -0
  504. package/lib/settings/display.d.ts +33 -0
  505. package/lib/settings/display.js +7 -0
  506. package/lib/settings/display.js.map +1 -1
  507. package/lib/settings/render.d.ts +25 -3
  508. package/lib/settings/render.js +3 -1
  509. package/lib/settings/render.js.map +1 -1
  510. package/lib/tinybvh/tinybvh.wasm +0 -0
  511. package/lib/util/commonGeometry.js +7 -7
  512. package/lib/util/commonGeometry.js.map +1 -1
  513. package/lib/util/fromTHREE.d.ts +4 -1
  514. package/lib/util/fromTHREE.js +18 -5
  515. package/lib/util/fromTHREE.js.map +1 -1
  516. package/lib/util/geometry.js +42 -29
  517. package/lib/util/geometry.js.map +1 -1
  518. package/lib/util/loadRGBE.js +3 -4
  519. package/lib/util/loadRGBE.js.map +1 -1
  520. package/lib/util/studioLighting.d.ts +18 -0
  521. package/lib/util/studioLighting.js +36 -0
  522. package/lib/util/studioLighting.js.map +1 -0
  523. package/lib/version.d.ts +1 -1
  524. package/lib/version.js +1 -1
  525. package/lib/version.js.map +1 -1
  526. package/llms.txt +4 -0
  527. package/package.json +31 -5
  528. package/lib/renderer/texturesFromMaterials.d.ts +0 -6
  529. package/lib/renderer/texturesFromMaterials.js.map +0 -1
@@ -26,18 +26,18 @@ const int OPENPBR_LOBE_DIFFUSE = 5;
26
26
  const int OPENPBR_LOBE_SUBSURFACE = 6;
27
27
  const int OPENPBR_LOBE_COUNT = 7;
28
28
 
29
- struct bj {
29
+ struct bq {
30
30
  vec3 tangent;
31
31
  vec3 bitangent;
32
32
  vec3 normal;
33
33
  };
34
34
 
35
35
  struct ag {
36
- J material;
37
- bj basis;
38
- bj coatBasis;
36
+ OpenPbrResolvedMaterial material;
37
+ bq basis;
38
+ bq coatBasis;
39
39
  bool directionFrames;
40
- #ifdef NUM_COAT_NORMAL_MAPS
40
+ #ifdef USE_COAT_NORMAL_FRAMES
41
41
  vec3 coatViewLocal;
42
42
  #endif
43
43
  vec3 viewLocal;
@@ -64,250 +64,250 @@ float weights[OPENPBR_LOBE_COUNT];
64
64
  float probabilities[OPENPBR_LOBE_COUNT];
65
65
  };
66
66
 
67
- float aw(vec3 color) {
67
+ float aE(vec3 color) {
68
68
  return dot(color, vec3(0.212671, 0.715160, 0.072169));
69
69
  }
70
70
 
71
- float cV(float bu) {
72
- float value = (bu - 1.0) / (bu + 1.0);
71
+ float dd(float bE) {
72
+ float value = (bE - 1.0) / (bE + 1.0);
73
73
  return value * value;
74
74
  }
75
75
 
76
- float aY(
77
- float bu,
76
+ float bi(
77
+ float bE,
78
78
  float specularWeight
79
79
  ) {
80
- float sR = min(
81
- cV(bu) * specularWeight,
80
+ float uh = min(
81
+ dd(bE) * specularWeight,
82
82
  0.9999
83
83
  );
84
- float sT = sqrt(sR);
85
- float lh = (1.0 + sT) / (1.0 - sT);
86
- return bu < 1.0 ? 1.0 / lh : lh;
84
+ float uj = sqrt(uh);
85
+ float lR = (1.0 + uj) / (1.0 - uj);
86
+ return bE < 1.0 ? 1.0 / lR : lR;
87
87
  }
88
88
 
89
- float af(float cc, float relativeIor) {
89
+ float af(float ci, float relativeIor) {
90
90
  if (abs(relativeIor - 1.0) < 1e-6) {
91
91
  return 0.0;
92
92
  }
93
- return cu(cc, relativeIor);
93
+ return cC(ci, relativeIor);
94
94
  }
95
95
 
96
- float aC(float ior) {
96
+ float aG(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 sl, int row) {
104
- return texelFetch(openPbrEnergyLut, ivec2(sl, row), 0).r;
103
+ float F(int tB, int row) {
104
+ return texelFetch(openPbrEnergyLut, ivec2(tB, row), 0).r;
105
105
  }
106
106
 
107
- float gd(
108
- float dJ,
109
- float bR,
110
- float hR
107
+ float gt(
108
+ float dU,
109
+ float bV,
110
+ float im
111
111
  ) {
112
- float bA = clamp(dJ, 0.0, 31.0);
113
- float aH = clamp(bR, 0.0, 31.0);
114
- float bt = clamp(hR, 0.0, 31.0);
115
- int dQ = int(floor(bA));
116
- int aN = int(floor(aH));
117
- int cI = int(floor(bt));
118
- int hE = min(dQ + 1, 31);
119
- int cp = min(aN + 1, 31);
120
- int eR = min(cI + 1, 31);
121
- float cq = bA - float(dQ);
122
- float cz = aH - float(aN);
123
- float kE = bt - float(cI);
124
-
125
- float uA = F(cI, dQ * 32 + aN);
126
- float uB = F(eR, dQ * 32 + aN);
127
- float uC = F(cI, dQ * 32 + cp);
128
- float uD = F(eR, dQ * 32 + cp);
129
- float uE = F(cI, hE * 32 + aN);
130
- float uF = F(eR, hE * 32 + aN);
131
- float uG = F(cI, hE * 32 + cp);
132
- float uH = F(eR, hE * 32 + cp);
133
- float v00 = mix(uA, uE, cq);
134
- float v01 = mix(uB, uF, cq);
135
- float v10 = mix(uC, uG, cq);
136
- float v11 = mix(uD, uH, cq);
112
+ float bH = clamp(dU, 0.0, 31.0);
113
+ float aL = clamp(bV, 0.0, 31.0);
114
+ float bD = clamp(im, 0.0, 31.0);
115
+ int ef = int(floor(bH));
116
+ int aT = int(floor(aL));
117
+ int cQ = int(floor(bD));
118
+ int hU = min(ef + 1, 31);
119
+ int cu = min(aT + 1, 31);
120
+ int fb = min(cQ + 1, 31);
121
+ float cv = bH - float(ef);
122
+ float cI = aL - float(aT);
123
+ float lj = bD - float(cQ);
124
+
125
+ float wb = F(cQ, ef * 32 + aT);
126
+ float wc = F(fb, ef * 32 + aT);
127
+ float wd = F(cQ, ef * 32 + cu);
128
+ float wf = F(fb, ef * 32 + cu);
129
+ float wg = F(cQ, hU * 32 + aT);
130
+ float wh = F(fb, hU * 32 + aT);
131
+ float wi = F(cQ, hU * 32 + cu);
132
+ float wj = F(fb, hU * 32 + cu);
133
+ float v00 = mix(wb, wg, cv);
134
+ float v01 = mix(wc, wh, cv);
135
+ float v10 = mix(wd, wi, cv);
136
+ float v11 = mix(wf, wj, cv);
137
137
  return mix(
138
- mix(v00, v10, cz),
139
- mix(v01, v11, cz),
140
- kE
141
- );
142
- }
143
-
144
- float gF(float dJ, float bR) {
145
- float bA = clamp(dJ, 0.0, 31.0);
146
- float aH = clamp(bR, 0.0, 31.0);
147
- int dQ = int(floor(bA));
148
- int aN = int(floor(aH));
149
- int hE = min(dQ + 1, 31);
150
- int cp = min(aN + 1, 31);
151
- float cq = bA - float(dQ);
152
- float cz = aH - float(aN);
153
- float v00 = F(aN, 1024 + dQ);
154
- float v01 = F(cp, 1024 + dQ);
155
- float v10 = F(aN, 1024 + hE);
156
- float v11 = F(cp, 1024 + hE);
138
+ mix(v00, v10, cI),
139
+ mix(v01, v11, cI),
140
+ lj
141
+ );
142
+ }
143
+
144
+ float gS(float dU, float bV) {
145
+ float bH = clamp(dU, 0.0, 31.0);
146
+ float aL = clamp(bV, 0.0, 31.0);
147
+ int ef = int(floor(bH));
148
+ int aT = int(floor(aL));
149
+ int hU = min(ef + 1, 31);
150
+ int cu = min(aT + 1, 31);
151
+ float cv = bH - float(ef);
152
+ float cI = aL - float(aT);
153
+ float v00 = F(aT, 1024 + ef);
154
+ float v01 = F(cu, 1024 + ef);
155
+ float v10 = F(aT, 1024 + hU);
156
+ float v11 = F(cu, 1024 + hU);
157
157
  return mix(
158
- mix(v00, v10, cq),
159
- mix(v01, v11, cq),
160
- cz
158
+ mix(v00, v10, cv),
159
+ mix(v01, v11, cv),
160
+ cI
161
161
  );
162
162
  }
163
163
 
164
164
 
165
165
 
166
- float ef(
167
- float dJ,
168
- float bR,
169
- float hR
166
+ float ev(
167
+ float dU,
168
+ float bV,
169
+ float im
170
170
  ) {
171
- float bA = clamp(dJ, 0.0, 31.0);
172
- float aH = clamp(bR, 0.0, 31.0);
173
- float bt = clamp(hR, 0.0, 31.0);
174
- int dQ = int(floor(bA));
175
- int aN = int(floor(aH));
176
- int cI = int(floor(bt));
177
- int hE = min(dQ + 1, 31);
178
- int cp = min(aN + 1, 31);
179
- int eR = min(cI + 1, 31);
180
- float cq = bA - float(dQ);
181
- float cz = aH - float(aN);
182
- float kE = bt - float(cI);
183
-
184
- float uA = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
185
- float uB = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + aN);
186
- float uC = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
187
- float uD = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dQ * 32 + cp);
188
- float uE = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
189
- float uF = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + aN);
190
- float uG = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
191
- float uH = F(eR, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hE * 32 + cp);
192
- float v00 = mix(uA, uE, cq);
193
- float v01 = mix(uB, uF, cq);
194
- float v10 = mix(uC, uG, cq);
195
- float v11 = mix(uD, uH, cq);
171
+ float bH = clamp(dU, 0.0, 31.0);
172
+ float aL = clamp(bV, 0.0, 31.0);
173
+ float bD = clamp(im, 0.0, 31.0);
174
+ int ef = int(floor(bH));
175
+ int aT = int(floor(aL));
176
+ int cQ = int(floor(bD));
177
+ int hU = min(ef + 1, 31);
178
+ int cu = min(aT + 1, 31);
179
+ int fb = min(cQ + 1, 31);
180
+ float cv = bH - float(ef);
181
+ float cI = aL - float(aT);
182
+ float lj = bD - float(cQ);
183
+
184
+ float wb = F(cQ, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + ef * 32 + aT);
185
+ float wc = F(fb, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + ef * 32 + aT);
186
+ float wd = F(cQ, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + ef * 32 + cu);
187
+ float wf = F(fb, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + ef * 32 + cu);
188
+ float wg = F(cQ, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hU * 32 + aT);
189
+ float wh = F(fb, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hU * 32 + aT);
190
+ float wi = F(cQ, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hU * 32 + cu);
191
+ float wj = F(fb, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hU * 32 + cu);
192
+ float v00 = mix(wb, wg, cv);
193
+ float v01 = mix(wc, wh, cv);
194
+ float v10 = mix(wd, wi, cv);
195
+ float v11 = mix(wf, wj, cv);
196
196
  return mix(
197
- mix(v00, v10, cz),
198
- mix(v01, v11, cz),
199
- kE
200
- );
201
- }
202
-
203
- float ee(float dJ, float bR) {
204
- float bA = clamp(dJ, 0.0, 31.0);
205
- float aH = clamp(bR, 0.0, 31.0);
206
- int dQ = int(floor(bA));
207
- int aN = int(floor(aH));
208
- int hE = min(dQ + 1, 31);
209
- int cp = min(aN + 1, 31);
210
- float cq = bA - float(dQ);
211
- float cz = aH - float(aN);
212
- float v00 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
213
- float v01 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + dQ);
214
- float v10 = F(aN, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
215
- float v11 = F(cp, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hE);
197
+ mix(v00, v10, cI),
198
+ mix(v01, v11, cI),
199
+ lj
200
+ );
201
+ }
202
+
203
+ float eu(float dU, float bV) {
204
+ float bH = clamp(dU, 0.0, 31.0);
205
+ float aL = clamp(bV, 0.0, 31.0);
206
+ int ef = int(floor(bH));
207
+ int aT = int(floor(aL));
208
+ int hU = min(ef + 1, 31);
209
+ int cu = min(aT + 1, 31);
210
+ float cv = bH - float(ef);
211
+ float cI = aL - float(aT);
212
+ float v00 = F(aT, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + ef);
213
+ float v01 = F(cu, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + ef);
214
+ float v10 = F(aT, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hU);
215
+ float v11 = F(cu, ${OPENPBR_DIELECTRIC_ENERGY_LUT_AVERAGE_ROW} + hU);
216
216
  return mix(
217
- mix(v00, v10, cq),
218
- mix(v01, v11, cq),
219
- cz
220
- );
221
- }
222
-
223
- float eG(float dJ, float bR) {
224
- float bA = clamp(dJ, 0.0, 31.0);
225
- float aH = clamp(bR, 0.0, 31.0);
226
- int dQ = int(floor(bA));
227
- int aN = int(floor(aH));
228
- int hE = min(dQ + 1, 31);
229
- int cp = min(aN + 1, 31);
230
- float cq = bA - float(dQ);
231
- float cz = aH - float(aN);
232
- float v00 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
233
- float v01 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + dQ);
234
- float v10 = F(aN, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
235
- float v11 = F(cp, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hE);
217
+ mix(v00, v10, cv),
218
+ mix(v01, v11, cv),
219
+ cI
220
+ );
221
+ }
222
+
223
+ float eR(float dU, float bV) {
224
+ float bH = clamp(dU, 0.0, 31.0);
225
+ float aL = clamp(bV, 0.0, 31.0);
226
+ int ef = int(floor(bH));
227
+ int aT = int(floor(aL));
228
+ int hU = min(ef + 1, 31);
229
+ int cu = min(aT + 1, 31);
230
+ float cv = bH - float(ef);
231
+ float cI = aL - float(aT);
232
+ float v00 = F(aT, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + ef);
233
+ float v01 = F(cu, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + ef);
234
+ float v10 = F(aT, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hU);
235
+ float v11 = F(cu, ${OPENPBR_DIELECTRIC_REFLECTION_RATIO_LUT_ROW} + hU);
236
236
  return mix(
237
- mix(v00, v10, cq),
238
- mix(v01, v11, cq),
239
- cz
237
+ mix(v00, v10, cv),
238
+ mix(v01, v11, cv),
239
+ cI
240
240
  );
241
241
  }
242
242
 
243
- float bO(float ior, float alpha, float au) {
244
- return ef(aC(ior), sqrt(alpha) * 31.0, au * 31.0);
243
+ float bb(float ior, float alpha, float cosine) {
244
+ return ev(aG(ior), sqrt(alpha) * 31.0, cosine * 31.0);
245
245
  }
246
- float cO(float ior, float alpha) {
247
- return ee(aC(ior), sqrt(alpha) * 31.0);
246
+ float bf(float ior, float alpha) {
247
+ return eu(aG(ior), sqrt(alpha) * 31.0);
248
248
  }
249
- float ch(float ior, float alpha) {
250
- return eG(aC(ior), sqrt(alpha) * 31.0);
249
+ float ck(float ior, float alpha) {
250
+ return eR(aG(ior), sqrt(alpha) * 31.0);
251
251
  }
252
252
 
253
253
 
254
- float bH(float alpha, float au) {
255
- float ie = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
- float bt = clamp(au * 31.0, 0.0, 31.0);
257
- int r0 = int(floor(ie));
258
- int c0 = int(floor(bt));
254
+ float aV(float alpha, float cosine) {
255
+ float iF = clamp(sqrt(alpha) * 31.0, 0.0, 31.0);
256
+ float bD = clamp(cosine * 31.0, 0.0, 31.0);
257
+ int r0 = int(floor(iF));
258
+ int c0 = int(floor(bD));
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(bt)),
263
- mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bt)),
264
- fract(ie));
262
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r0), fract(bD)),
263
+ mix(F(c0, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), F(c1, ${OPENPBR_METAL_ENERGY_LUT_ROW} + r1), fract(bD)),
264
+ fract(iF));
265
265
  }
266
266
 
267
- float cv(float alpha) {
267
+ float cD(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 bd(float value, float ior) {
275
275
  if (ior > 2.5 || ior < 0.4) {
276
- float tU = cV(2.5);
277
- float progress = (cV(ior) - tU) / (1.0 - tU);
276
+ float vu = dd(2.5);
277
+ float progress = (dd(ior) - vu) / (1.0 - vu);
278
278
  return (1.0 - progress) * value;
279
279
  }
280
280
  return value;
281
281
  }
282
282
 
283
- float aJ(
283
+ float aw(
284
284
  float ior,
285
285
  float alpha,
286
- float au
286
+ float cosine
287
287
  ) {
288
- float value = gd(
289
- aC(ior),
288
+ float value = gt(
289
+ aG(ior),
290
290
  sqrt(alpha) * 31.0,
291
- au * 31.0
291
+ cosine * 31.0
292
292
  );
293
- return aX(value, ior);
293
+ return bd(value, ior);
294
294
  }
295
295
 
296
- float cr(float ior, float alpha) {
297
- float value = gF(
298
- aC(ior),
296
+ float cA(float ior, float alpha) {
297
+ float value = gS(
298
+ aG(ior),
299
299
  sqrt(alpha) * 31.0
300
300
  );
301
- return aX(value, ior);
301
+ return bd(value, ior);
302
302
  }
303
303
 
304
- vec3 openpbr_to_world(bj basis, vec3 direction) {
304
+ vec3 openpbr_to_world(bq basis, vec3 direction) {
305
305
  return direction.x * basis.tangent
306
306
  + direction.y * basis.bitangent
307
307
  + direction.z * basis.normal;
308
308
  }
309
309
 
310
- vec3 openpbr_to_local(bj basis, vec3 direction) {
310
+ vec3 openpbr_to_local(bq basis, vec3 direction) {
311
311
  return vec3(
312
312
  dot(direction, basis.tangent),
313
313
  dot(direction, basis.bitangent),
@@ -315,19 +315,19 @@ dot(direction, basis.normal)
315
315
  );
316
316
  }
317
317
 
318
- bj fj(
319
- vec3 aT,
318
+ bq fD(
319
+ vec3 aX,
320
320
  vec3 normal,
321
321
  float anisotropy
322
322
  ) {
323
- bj basis;
323
+ bq basis;
324
324
  basis.normal = normal;
325
325
  basis.tangent = vec3(0.0);
326
326
  #ifdef USE_TANGENT
327
- basis.tangent = aT;
327
+ basis.tangent = aX;
328
328
  #endif
329
329
  if (dot(basis.tangent, basis.tangent) < 0.001 || anisotropy <= 0.0) {
330
- aL(normal, basis.tangent, basis.bitangent);
330
+ aP(normal, basis.tangent, basis.bitangent);
331
331
  }
332
332
  else {
333
333
  basis.bitangent = normalize(cross(normal, basis.tangent));
@@ -336,310 +336,310 @@ basis.tangent = normalize(cross(basis.bitangent, normal));
336
336
  return basis;
337
337
  }
338
338
 
339
- float ka(
340
- float av,
341
- float ak,
342
- float L,
343
- float S
339
+ float kF(
340
+ float aB,
341
+ float am,
342
+ float J,
343
+ float ae
344
344
  ) {
345
- return (av * L - ak * S)
346
- / (av * L + ak * S);
345
+ return (aB * J - am * ae)
346
+ / (aB * J + am * ae);
347
347
  }
348
348
 
349
- float jZ(
350
- float av,
351
- float ak,
352
- float L,
353
- float S
349
+ float kE(
350
+ float aB,
351
+ float am,
352
+ float J,
353
+ float ae
354
354
  ) {
355
- return (ak * L - av * S)
356
- / (av * S + ak * L);
355
+ return (am * J - aB * ae)
356
+ / (aB * ae + am * J);
357
357
  }
358
358
 
359
- float hc(
360
- float av,
361
- float ak,
362
- float L,
363
- float S
359
+ float ht(
360
+ float aB,
361
+ float am,
362
+ float J,
363
+ float ae
364
364
  ) {
365
- return 2.0 * av * L
366
- / (av * L + ak * S);
365
+ return 2.0 * aB * J
366
+ / (aB * J + am * ae);
367
367
  }
368
368
 
369
- float hb(
370
- float av,
371
- float ak,
372
- float L,
373
- float S
369
+ float hs(
370
+ float aB,
371
+ float am,
372
+ float J,
373
+ float ae
374
374
  ) {
375
- return 2.0 * av * L
376
- / (av * S + ak * L);
375
+ return 2.0 * aB * J
376
+ / (aB * ae + am * J);
377
377
  }
378
378
 
379
- vec2 aU(vec2 a, vec2 b) {
379
+ vec2 aY(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 aZ(vec2 a, vec2 b) {
384
- float ap = max(dot(b, b), 1e-9);
383
+ vec2 bj(vec2 a, vec2 b) {
384
+ float aq = max(dot(b, b), 1e-9);
385
385
  return vec2(
386
- (a.x * b.x + a.y * b.y) / ap,
387
- (a.y * b.x - a.x * b.y) / ap
386
+ (a.x * b.x + a.y * b.y) / aq,
387
+ (a.y * b.x - a.x * b.y) / aq
388
388
  );
389
389
  }
390
390
 
391
- vec2 hX(vec2 value) {
392
- float nK = length(value);
393
- float sP = sqrt(max(0.0, 0.5 * (nK + value.x)));
394
- float ff = sqrt(max(0.0, 0.5 * (nK - value.x)));
395
- return vec2(sP, value.y >= 0.0 ? ff : -ff);
391
+ vec2 iA(vec2 value) {
392
+ float gR = length(value);
393
+ float uf = sqrt(max(0.0, 0.5 * (gR + value.x)));
394
+ float fw = sqrt(max(0.0, 0.5 * (gR - value.x)));
395
+ return vec2(uf, value.y >= 0.0 ? fw : -fw);
396
396
  }
397
397
 
398
- vec2 bX(
399
- float L,
400
- float av,
401
- vec2 ak,
402
- bool qG
398
+ vec2 ce(
399
+ float J,
400
+ float aB,
401
+ vec2 am,
402
+ bool rM
403
403
  ) {
404
- float os = sqrt(max(0.0, 1.0 - L * L));
405
- vec2 sA = aZ(vec2(av, 0.0), ak);
406
- vec2 hA = sA * os;
407
- vec2 S = hX(
408
- vec2(1.0, 0.0) - aU(hA, hA)
404
+ float pg = sqrt(max(0.0, 1.0 - J * J));
405
+ vec2 tP = bj(vec2(aB, 0.0), am);
406
+ vec2 hQ = tP * pg;
407
+ vec2 ae = iA(
408
+ vec2(1.0, 0.0) - aY(hQ, hQ)
409
409
  );
410
- if (aU(ak, S).y < 0.0) {
411
- S = -S;
410
+ if (aY(am, ae).y < 0.0) {
411
+ ae = -ae;
412
412
  }
413
413
 
414
- vec2 fK = vec2(av * L, 0.0);
415
- vec2 eB = aU(ak, S);
416
- if (qG) {
417
- vec2 ci = ak * L;
418
- vec2 ce = S * av;
419
- return aZ(
420
- ci - ce,
421
- ci + ce
414
+ vec2 fZ = vec2(aB * J, 0.0);
415
+ vec2 eJ = aY(am, ae);
416
+ if (rM) {
417
+ vec2 cl = am * J;
418
+ vec2 cj = ae * aB;
419
+ return bj(
420
+ cl - cj,
421
+ cl + cj
422
422
  );
423
423
  }
424
- return aZ(
425
- fK - eB,
426
- fK + eB
424
+ return bj(
425
+ fZ - eJ,
426
+ fZ + eJ
427
427
  );
428
428
  }
429
429
 
430
- float eq(
431
- float iH,
432
- float gM,
433
- float oH,
434
- float mN,
435
- vec2 kf,
430
+ float eE(
431
+ float iZ,
432
+ float ha,
433
+ float pw,
434
+ float nL,
435
+ vec2 kL,
436
436
  float phase
437
437
  ) {
438
- vec2 nr = vec2(cos(phase), sin(phase));
439
- vec2 ia = aU(kf, nr);
440
- vec2 kO = ia * (gM * mN);
441
- vec2 ap = vec2(1.0, 0.0) - ia * oH;
442
- vec2 hz = vec2(iH, 0.0)
443
- + aZ(kO, ap);
444
- return dot(hz, hz);
438
+ vec2 ol = vec2(cos(phase), sin(phase));
439
+ vec2 iD = aY(kL, ol);
440
+ vec2 lv = iD * (ha * nL);
441
+ vec2 aq = vec2(1.0, 0.0) - iD * pw;
442
+ vec2 hP = vec2(iZ, 0.0)
443
+ + bj(lv, aq);
444
+ return dot(hP, hP);
445
445
  }
446
446
 
447
- float ar(
448
- float L,
447
+ float au(
448
+ float J,
449
449
  float wavelength,
450
+ float ct,
451
+ float aR,
450
452
  float cn,
451
- float aM,
452
- float ck,
453
- vec2 eu
453
+ vec2 eG
454
454
  ) {
455
- L = clamp(abs(L), 1e-5, 1.0);
456
- float hu = pow(aM / ck, 2.0)
457
- * (1.0 - L * L);
458
- if (hu >= 1.0) {
455
+ J = clamp(abs(J), 1e-5, 1.0);
456
+ float hI = pow(aR / cn, 2.0)
457
+ * (1.0 - J * J);
458
+ if (hI >= 1.0) {
459
459
  return 1.0;
460
460
  }
461
- float cU = sqrt(1.0 - hu);
462
- float lb = ka(
463
- aM, ck, L, cU
461
+ float dc = sqrt(1.0 - hI);
462
+ float lL = kF(
463
+ aR, cn, J, dc
464
464
  );
465
- float la = jZ(
466
- aM, ck, L, cU
465
+ float lK = kE(
466
+ aR, cn, J, dc
467
467
  );
468
- float jj = hc(
469
- aM, ck, L, cU
468
+ float jG = ht(
469
+ aR, cn, J, dc
470
470
  );
471
- float ji = hb(
472
- aM, ck, L, cU
471
+ float jF = hs(
472
+ aR, cn, J, dc
473
473
  );
474
- float gq = ck * cU
475
- / max(aM * L, 1e-9);
476
- vec2 tb = bX(
477
- cU, ck, eu, false
474
+ float gG = cn * dc
475
+ / max(aR * J, 1e-9);
476
+ vec2 ut = ce(
477
+ dc, cn, eG, false
478
478
  );
479
- vec2 ta = bX(
480
- cU, ck, eu, true
479
+ vec2 us = ce(
480
+ dc, cn, eG, true
481
481
  );
482
- float phase = 2.0 * PI * (2.0 * ck * cn * cU) / wavelength;
483
- float tJ = eq(
484
- lb,
485
- jj,
486
- -lb,
487
- jj * gq,
488
- tb,
482
+ float phase = 2.0 * PI * (2.0 * cn * ct * dc) / wavelength;
483
+ float uZ = eE(
484
+ lL,
485
+ jG,
486
+ -lL,
487
+ jG * gG,
488
+ ut,
489
489
  phase
490
490
  );
491
- float tI = eq(
492
- la,
493
- ji,
494
- -la,
495
- ji * gq,
496
- ta,
491
+ float uY = eE(
492
+ lK,
493
+ jF,
494
+ -lK,
495
+ jF * gG,
496
+ us,
497
497
  phase
498
498
  );
499
- return clamp(0.5 * (tJ + tI), 0.0, 1.0);
499
+ return clamp(0.5 * (uZ + uY), 0.0, 1.0);
500
500
  }
501
501
 
502
- vec3 hG(
503
- float L,
502
+ vec3 hW(
503
+ float J,
504
+ float ct,
504
505
  float cn,
505
- float ck,
506
- float eu,
507
- float aM
506
+ float eG,
507
+ float aR
508
508
  ) {
509
509
  return vec3(
510
- ar(
511
- L, 620.0, cn, aM, ck, vec2(eu, 0.0)
510
+ au(
511
+ J, 620.0, ct, aR, cn, vec2(eG, 0.0)
512
512
  ),
513
- ar(
514
- L, 540.0, cn, aM, ck, vec2(eu, 0.0)
513
+ au(
514
+ J, 540.0, ct, aR, cn, vec2(eG, 0.0)
515
515
  ),
516
- ar(
517
- L, 450.0, cn, aM, ck, vec2(eu, 0.0)
516
+ au(
517
+ J, 450.0, ct, aR, cn, vec2(eG, 0.0)
518
518
  )
519
519
  );
520
520
  }
521
521
 
522
522
 
523
523
 
524
- vec3 dU(float au, vec3 f0, vec3 tint) {
525
- vec3 rk = mix(f0, vec3(1.0), aE(au));
526
- if (all(equal(tint, vec3(1.0)))) { return rk; }
527
- float dk = 1.0 / 7.0;
528
- float ml = 1.0 - dk;
529
- vec3 fI = mix(f0, vec3(1.0), aE(dk));
530
- float di = 1.0 - au;
531
- float qt = au * aE(au) * di
532
- / (dk * pow(ml, 6.0));
533
- return clamp(rk - qt * (fI - tint * fI), vec3(0.0), vec3(1.0));
524
+ vec3 cw(float cosine, vec3 f0, vec3 tint) {
525
+ vec3 sr = mix(f0, vec3(1.0), aI(cosine));
526
+ if (all(equal(tint, vec3(1.0)))) { return sr; }
527
+ float dD = 1.0 / 7.0;
528
+ float mY = 1.0 - dD;
529
+ vec3 fX = mix(f0, vec3(1.0), aI(dD));
530
+ float dw = 1.0 - cosine;
531
+ float ru = cosine * aI(cosine) * dw
532
+ / (dD * pow(mY, 6.0));
533
+ return clamp(sr - ru * (fX - tint * fX), vec3(0.0), vec3(1.0));
534
534
  }
535
535
 
536
- vec2 cQ(float f0, float tp) {
537
- float dN = clamp(f0, 0.0, 0.99);
538
- float gL = sqrt(dN);
539
- float qF = (1.0 - dN) / (1.0 + dN);
540
- float qD = (1.0 + gL) / max(1.0 - gL, 1e-9);
541
- float ior = mix(qD, qF, clamp(tp, 0.0, 1.0));
542
- float jO = (
543
- (ior + 1.0) * (ior + 1.0) * dN
536
+ vec2 cX(float f0, float uN) {
537
+ float dY = clamp(f0, 0.0, 0.99);
538
+ float gZ = sqrt(dY);
539
+ float rK = (1.0 - dY) / (1.0 + dY);
540
+ float rH = (1.0 + gZ) / max(1.0 - gZ, 1e-9);
541
+ float ior = mix(rH, rK, clamp(uN, 0.0, 1.0));
542
+ float kp = (
543
+ (ior + 1.0) * (ior + 1.0) * dY
544
544
  - (ior - 1.0) * (ior - 1.0)
545
- ) / max(1.0 - dN, 1e-9);
546
- return vec2(ior, sqrt(max(jO, 0.0)));
545
+ ) / max(1.0 - dY, 1e-9);
546
+ return vec2(ior, sqrt(max(kp, 0.0)));
547
547
  }
548
548
 
549
- vec3 iY(
550
- float L,
549
+ vec3 jr(
550
+ float J,
551
+ float ct,
551
552
  float cn,
552
- float ck,
553
- vec3 rf,
554
- vec3 jW,
555
- float aM
553
+ vec3 sm,
554
+ vec3 kA,
555
+ float aR
556
556
  ) {
557
557
  return vec3(
558
- ar(
559
- L,
558
+ au(
559
+ J,
560
560
  620.0,
561
+ ct,
562
+ aR,
561
563
  cn,
562
- aM,
563
- ck,
564
- cQ(rf.r, jW.r)
564
+ cX(sm.r, kA.r)
565
565
  ),
566
- ar(
567
- L,
566
+ au(
567
+ J,
568
568
  540.0,
569
+ ct,
570
+ aR,
569
571
  cn,
570
- aM,
571
- ck,
572
- cQ(rf.g, jW.g)
572
+ cX(sm.g, kA.g)
573
573
  ),
574
- ar(
575
- L,
574
+ au(
575
+ J,
576
576
  450.0,
577
+ ct,
578
+ aR,
577
579
  cn,
578
- aM,
579
- ck,
580
- cQ(rf.b, jW.b)
580
+ cX(sm.b, kA.b)
581
581
  )
582
582
  );
583
583
  }
584
584
 
585
- float bN(float cn, float weight) {
586
- return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, cn);
585
+ float bS(float ct, float weight) {
586
+ return clamp(weight, 0.0, 1.0) * smoothstep(1e-9, 30.0, ct);
587
587
  }
588
588
 
589
- vec3 bW(
590
- vec3 ei,
591
- float L,
589
+ vec3 cc(
590
+ vec3 ey,
591
+ float J,
592
+ float ct,
592
593
  float cn,
593
- float ck,
594
- float eu,
594
+ float eG,
595
595
  float weight,
596
- float aM
596
+ float aR
597
597
  ) {
598
- vec3 pq = hG(
599
- L,
598
+ vec3 qn = hW(
599
+ J,
600
+ ct,
600
601
  cn,
601
- ck,
602
- eu,
603
- aM
602
+ eG,
603
+ aR
604
604
  );
605
605
  return mix(
606
- ei,
607
- pq,
608
- bN(cn, weight)
606
+ ey,
607
+ qn,
608
+ bS(ct, weight)
609
609
  );
610
610
  }
611
611
 
612
- vec3 lq(
613
- vec3 ei,
614
- float L,
612
+ vec3 lZ(
613
+ vec3 ey,
614
+ float J,
615
+ float ct,
615
616
  float cn,
616
- float ck,
617
- vec3 rf,
618
- vec3 jW,
617
+ vec3 sm,
618
+ vec3 kA,
619
619
  float weight,
620
- float aM
620
+ float aR
621
621
  ) {
622
- vec3 pq = iY(
623
- L,
622
+ vec3 qn = jr(
623
+ J,
624
+ ct,
624
625
  cn,
625
- ck,
626
- rf,
627
- jW,
628
- aM
626
+ sm,
627
+ kA,
628
+ aR
629
629
  );
630
630
  return mix(
631
- ei,
632
- pq,
633
- bN(cn, weight)
631
+ ey,
632
+ qn,
633
+ bS(ct, weight)
634
634
  );
635
635
  }
636
636
 
637
- vec3 cE(
638
- J material,
637
+ vec3 bJ(
638
+ OpenPbrResolvedMaterial material,
639
639
  vec3 color,
640
640
  vec3 viewLocal,
641
641
  vec3 lightLocal,
642
- float ft,
642
+ float fJ,
643
643
  out float pdf
644
644
  ) {
645
645
  pdf = 0.0;
@@ -648,50 +648,50 @@ return vec3(0.0);
648
648
  }
649
649
 
650
650
  float roughness = material.diffuseRoughness;
651
- float gW = 0.5 - 2.0 / (3.0 * PI);
652
- float oj = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
- float oB = lightLocal.z;
654
- float mB = viewLocal.z;
655
- float hP = dot(lightLocal, viewLocal) - oB * mB;
656
- float gT = hP > 0.0
657
- ? hP / max(max(oB, mB), 1e-7)
658
- : hP;
659
- float il = 1.0 / (1.0 + gW * roughness);
660
- vec3 nA = color * INVPI * il
661
- * (1.0 + roughness * gT);
662
-
663
- float dd = 1.0 - oB;
664
- float cP = 1.0 - mB;
665
- float ot = dd * (
666
- 0.0571085289 + dd * (
667
- 0.491881867 + dd * (
668
- -0.332181442 + dd * 0.0714429953
651
+ float hl = 0.5 - 2.0 / (3.0 * PI);
652
+ float pc = 2.0 / 3.0 - 28.0 / (15.0 * PI);
653
+ float pp = lightLocal.z;
654
+ float nt = viewLocal.z;
655
+ float directional = dot(lightLocal, viewLocal) - pp * nt;
656
+ float hh = directional > 0.0
657
+ ? directional / max(max(pp, nt), 1e-7)
658
+ : directional;
659
+ float iJ = 1.0 / (1.0 + hl * roughness);
660
+ vec3 ot = color * INVPI * iJ
661
+ * (1.0 + roughness * hh);
662
+
663
+ float dr = 1.0 - pp;
664
+ float outputComplement = 1.0 - nt;
665
+ float ph = dr * (
666
+ 0.0571085289 + dr * (
667
+ 0.491881867 + dr * (
668
+ -0.332181442 + dr * 0.0714429953
669
669
  )
670
670
  )
671
671
  );
672
- float nq = cP * (
673
- 0.0571085289 + cP * (
674
- 0.491881867 + cP * (
675
- -0.332181442 + cP * 0.0714429953
672
+ float outputGOverPi = outputComplement * (
673
+ 0.0571085289 + outputComplement * (
674
+ 0.491881867 + outputComplement * (
675
+ -0.332181442 + outputComplement * 0.0714429953
676
676
  )
677
677
  )
678
678
  );
679
- float pv = (1.0 + roughness * ot)
680
- / (1.0 + gW * roughness);
681
- float oD = (1.0 + roughness * nq)
682
- / (1.0 + gW * roughness);
683
- float fU = il * (1.0 + oj * roughness);
684
- vec3 hF = color * color * fU
685
- / max(vec3(1e-7), vec3(1.0) - color * (1.0 - fU));
686
- vec3 lF = hF * INVPI
687
- * max(1e-7, 1.0 - oD)
688
- * max(1e-7, 1.0 - pv)
689
- / max(1e-7, 1.0 - fU);
679
+ float qr = (1.0 + roughness * ph)
680
+ / (1.0 + hl * roughness);
681
+ float outputAlbedo = (1.0 + roughness * outputGOverPi)
682
+ / (1.0 + hl * roughness);
683
+ float gi = iJ * (1.0 + pc * roughness);
684
+ vec3 hV = color * color * gi
685
+ / max(vec3(1e-7), vec3(1.0) - color * (1.0 - gi));
686
+ vec3 mn = hV * INVPI
687
+ * max(1e-7, 1.0 - outputAlbedo)
688
+ * max(1e-7, 1.0 - qr)
689
+ / max(1e-7, 1.0 - gi);
690
690
  pdf = lightLocal.z * INVPI;
691
- return (nA + lF) * ft;
691
+ return (ot + mn) * fJ;
692
692
  }
693
693
 
694
- float aO(float viewCosine, float roughness) {
694
+ float aU(float viewCosine, float roughness) {
695
695
  float x = clamp(viewCosine, 0.0, 1.0);
696
696
  float y = clamp(roughness, 0.01, 1.0);
697
697
  float scale = y * (0.0206607 + 1.58491 * y)
@@ -705,8 +705,8 @@ 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 jY(
709
- J material,
708
+ vec3 kD(
709
+ OpenPbrResolvedMaterial material,
710
710
  vec3 viewLocal,
711
711
  vec3 lightLocal,
712
712
  out float pdf
@@ -715,7 +715,7 @@ pdf = 0.0;
715
715
  if (viewLocal.z <= 0.0 || lightLocal.z <= 0.0) {
716
716
  return vec3(0.0);
717
717
  }
718
- float albedo = aO(
718
+ float albedo = aU(
719
719
  viewLocal.z,
720
720
  material.fuzzRoughness
721
721
  );
@@ -723,12 +723,12 @@ pdf = lightLocal.z * INVPI;
723
723
  return material.fuzzColor * albedo * INVPI;
724
724
  }
725
725
 
726
- vec3 am(
727
- J material,
726
+ vec3 ao(
727
+ OpenPbrResolvedMaterial material,
728
728
  vec3 viewLocal,
729
729
  vec3 lightLocal,
730
- vec3 V,
731
- vec3 cK,
730
+ vec3 ad,
731
+ vec3 bG,
732
732
  out float pdf
733
733
  ) {
734
734
  pdf = 0.0;
@@ -737,24 +737,24 @@ return vec3(0.0);
737
737
  }
738
738
 
739
739
  vec2 alpha = vec2(material.alphaX, material.alphaY);
740
- float distribution = gK(V, alpha);
741
- float jV = bk(viewLocal, alpha);
742
- float ea = jV
743
- * bk(lightLocal, alpha);
740
+ float distribution = cW(ad, alpha);
741
+ float kz = aF(viewLocal, alpha);
742
+ float ep = kz
743
+ * aF(lightLocal, alpha);
744
744
 
745
- pdf = jV * distribution / (4.0 * max(viewLocal.z, 1e-8));
746
- return cK * distribution * ea
745
+ pdf = kz * distribution / (4.0 * max(viewLocal.z, 1e-8));
746
+ return bG * distribution * ep
747
747
  / (4.0 * max(lightLocal.z * viewLocal.z, 1e-8));
748
748
  }
749
749
 
750
- vec3 dl(
751
- J material,
750
+ vec3 dE(
751
+ OpenPbrResolvedMaterial material,
752
752
  float relativeIor,
753
753
  vec3 tint,
754
754
  vec3 viewLocal,
755
755
  vec3 lightLocal,
756
- vec3 V,
757
- vec3 cK,
756
+ vec3 ad,
757
+ vec3 bG,
758
758
  out float pdf
759
759
  ) {
760
760
  pdf = 0.0;
@@ -762,31 +762,31 @@ if (lightLocal.z >= 0.0) {
762
762
  return vec3(0.0);
763
763
  }
764
764
 
765
- float kL = dot(lightLocal, V);
766
- float bQ = dot(viewLocal, V);
765
+ float ls = dot(lightLocal, ad);
766
+ float bm = dot(viewLocal, ad);
767
767
 
768
768
 
769
- if (bQ <= 0.0 || kL >= 0.0) {
769
+ if (bm <= 0.0 || ls >= 0.0) {
770
770
  return vec3(0.0);
771
771
  }
772
772
  vec2 alpha = vec2(material.alphaX, material.alphaY);
773
- float distribution = gK(V, alpha);
774
- float jV = bk(viewLocal, alpha);
775
- float ea = jV
776
- * bk(lightLocal, alpha);
777
- float ap = kL + bQ * relativeIor;
778
- ap *= ap;
779
- float pJ = abs(kL) / max(ap, 1e-8);
780
- float ju = relativeIor * relativeIor;
781
-
782
- pdf = jV * max(0.0, bQ) * distribution * pJ
773
+ float distribution = cW(ad, alpha);
774
+ float kz = aF(viewLocal, alpha);
775
+ float ep = kz
776
+ * aF(lightLocal, alpha);
777
+ float aq = ls + bm * relativeIor;
778
+ aq *= aq;
779
+ float qw = abs(ls) / max(aq, 1e-8);
780
+ float jU = relativeIor * relativeIor;
781
+
782
+ pdf = kz * max(0.0, bm) * distribution * qw
783
783
  / max(viewLocal.z, 1e-8);
784
- return tint * (vec3(1.0) - cK) * distribution * ea
785
- * abs(bQ) * pJ * ju
784
+ return tint * (vec3(1.0) - bG) * distribution * ep
785
+ * abs(bm) * qw * jU
786
786
  / max(abs(lightLocal.z * viewLocal.z), 1e-8);
787
787
  }
788
788
 
789
- vec3 bn(J material) {
789
+ vec3 bh(OpenPbrResolvedMaterial material) {
790
790
  #ifdef HAS_MEDIUM
791
791
  if (material.mediumType > 0) {
792
792
  return vec3(1.0);
@@ -795,44 +795,44 @@ return vec3(1.0);
795
795
  return material.transmissionColor;
796
796
  }
797
797
 
798
- float cS(float ah) {
799
- return 2.0 * ah / (1.0 + ah);
798
+ float cZ(float ai) {
799
+ return 2.0 * ai / (1.0 + ai);
800
800
  }
801
801
 
802
- vec3 aP(
803
- vec3 ah,
802
+ vec3 av(
803
+ vec3 ai,
804
804
  float transmissionWeight
805
805
  ) {
806
- vec3 gk = 2.0 * ah
807
- / (vec3(1.0) + ah);
806
+ vec3 gA = 2.0 * ai
807
+ / (vec3(1.0) + ai);
808
808
  return mix(
809
- ah,
810
- gk,
809
+ ai,
810
+ gA,
811
811
  clamp(transmissionWeight, 0.0, 1.0)
812
812
  );
813
813
  }
814
814
 
815
- vec3 bG(
816
- J material,
817
- float L,
818
- float bu
815
+ vec3 bN(
816
+ OpenPbrResolvedMaterial material,
817
+ float J,
818
+ float bE
819
819
  ) {
820
- vec3 tint = bn(material);
820
+ vec3 tint = bh(material);
821
821
  if (!material.thinWalled) {
822
822
  return tint;
823
823
  }
824
- float iL = max(0.0, 1.0 - L * L);
825
- float dO = iL
826
- / max(bu * bu, 1e-9);
827
- if (dO >= 1.0) {
824
+ float jc = max(0.0, 1.0 - J * J);
825
+ float ea = jc
826
+ / max(bE * bE, 1e-9);
827
+ if (ea >= 1.0) {
828
828
  return vec3(0.0);
829
829
  }
830
- float S = sqrt(1.0 - dO);
831
- return pow(max(tint, vec3(0.0)), vec3(1.0 / max(S, 1e-5)));
830
+ float ae = sqrt(1.0 - ea);
831
+ return pow(max(tint, vec3(0.0)), vec3(1.0 / max(ae, 1e-5)));
832
832
  }
833
833
 
834
- vec3 dM(
835
- J material,
834
+ vec3 dX(
835
+ OpenPbrResolvedMaterial material,
836
836
  vec3 viewLocal,
837
837
  vec3 lightLocal,
838
838
  out float pdf
@@ -841,164 +841,164 @@ pdf = 0.0;
841
841
  if (viewLocal.z <= 0.0 || lightLocal.z >= 0.0) {
842
842
  return vec3(0.0);
843
843
  }
844
- float S = -lightLocal.z;
845
- float og = cu(
844
+ float ae = -lightLocal.z;
845
+ float oY = cC(
846
846
  viewLocal.z,
847
847
  material.relativeIor
848
848
  );
849
- pdf = S * INVPI;
850
- return vec3(1.0 - og) * INVPI;
849
+ pdf = ae * INVPI;
850
+ return vec3(1.0 - oY) * INVPI;
851
851
  }
852
852
 
853
- void dR(inout ag prepared) {
853
+ void eg(inout ag prepared) {
854
854
  float total = prepared.probabilities[OPENPBR_LOBE_FUZZ];
855
- for (int hU = 1; hU < OPENPBR_LOBE_COUNT; hU++) {
856
- total += prepared.probabilities[hU];
855
+ for (int jT = 1; jT < OPENPBR_LOBE_COUNT; jT++) {
856
+ total += prepared.probabilities[jT];
857
857
  }
858
858
  if (total <= 1e-8) {
859
- for (int hU = 0; hU < OPENPBR_LOBE_COUNT; hU++) {
860
- prepared.probabilities[hU] = 0.0;
859
+ for (int jT = 0; jT < OPENPBR_LOBE_COUNT; jT++) {
860
+ prepared.probabilities[jT] = 0.0;
861
861
  }
862
862
  return;
863
863
  }
864
- float ow = 1.0 / total;
865
- for (int hU = 0; hU < OPENPBR_LOBE_COUNT; hU++) {
866
- prepared.probabilities[hU] *= ow;
864
+ float pk = 1.0 / total;
865
+ for (int jT = 0; jT < OPENPBR_LOBE_COUNT; jT++) {
866
+ prepared.probabilities[jT] *= pk;
867
867
  }
868
868
  }
869
869
 
870
870
 
871
871
 
872
- float bM(float eta) {
872
+ float bR(float eta) {
873
873
  if (abs(eta - 1.0) < 1e-6) { return 0.0; }
874
874
  if (eta > 1.0) { return (eta - 1.0) / (4.08567 + 1.00071 * eta); }
875
875
  return 0.997118 + 0.1014 * eta - 0.965241 * eta * eta - 0.130607 * eta * eta * eta;
876
876
  }
877
877
 
878
- vec3 bP(vec3 f0, vec3 tint) {
879
- float dk = 1.0 / 7.0;
880
- vec3 fI = mix(f0, vec3(1.0), aE(dk));
881
- vec3 b = fI * (vec3(1.0) - tint) / (dk * pow(1.0 - dk, 6.0));
878
+ vec3 bU(vec3 f0, vec3 tint) {
879
+ float dD = 1.0 / 7.0;
880
+ vec3 fX = mix(f0, vec3(1.0), aI(dD));
881
+ vec3 b = fX * (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 cD(J material, float au) {
888
- if (au <= 0.0) { return vec3(1.0); }
889
- float lH = sqrt(max(0.0, 1.0 - (1.0 - au * au) / (material.coatIor * material.coatIor)));
890
- vec3 tD = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(lH, 1e-5)));
891
- return mix(vec3(1.0), tD, material.coatWeight);
887
+ vec3 cN(OpenPbrResolvedMaterial material, float cosine) {
888
+ if (cosine <= 0.0) { return vec3(1.0); }
889
+ float mp = sqrt(max(0.0, 1.0 - (1.0 - cosine * cosine) / (material.coatIor * material.coatIor)));
890
+ vec3 uT = pow(max(material.coatColor, vec3(0.0)), vec3(0.5 / max(mp, 1e-5)));
891
+ return mix(vec3(1.0), uT, material.coatWeight);
892
892
  }
893
893
 
894
- float gp(J material, float au) {
894
+ float gF(OpenPbrResolvedMaterial material, float cosine) {
895
895
  if (material.coatRoughness <= ROUGHNESS_MIN) {
896
- return af(au, 1.0 / material.coatIor);
896
+ return af(cosine, 1.0 / material.coatIor);
897
897
  }
898
898
 
899
899
 
900
- return clamp(1.0 - aJ(material.coatIor,
901
- material.coatRoughness * material.coatRoughness, au), 0.0, 1.0);
900
+ return clamp(1.0 - aw(material.coatIor,
901
+ material.coatRoughness * material.coatRoughness, cosine), 0.0, 1.0);
902
902
  }
903
903
 
904
- vec3 ha(ag prepared) {
905
- J material = prepared.material;
904
+ vec3 hr(ag prepared) {
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 ug = dielectric * material.transmissionWeight;
910
- float fO = bM(prepared.specularEtaTOverEtaI);
911
- float kU = bM(1.0 / prepared.transmissionReflectionIor);
912
- float pR = clamp(opaque * fO + (sss + ug) * kU + material.baseMetalness, 0.0, 1.0);
913
- float jp = mix(1.0, material.specularRoughness, pR);
914
- float ks = bM(material.coatIor);
909
+ float vI = dielectric * material.transmissionWeight;
910
+ float gd = bR(prepared.specularEtaTOverEtaI);
911
+ float lE = bR(1.0 / prepared.transmissionReflectionIor);
912
+ float qI = clamp(opaque * gd + (sss + vI) * lE + material.baseMetalness, 0.0, 1.0);
913
+ float jM = mix(1.0, material.specularRoughness, qI);
914
+ float ks = bR(material.coatIor);
915
915
  float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
916
- float k = mix(ks, kr, jp);
917
- vec3 eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
918
- + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fO)
919
- + sss * material.subsurfaceColor + vec3(ug);
920
- vec3 qU = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
- return mix(vec3(1.0), qU, material.coatWeight * material.coatDarkening);
916
+ float k = mix(ks, kr, jM);
917
+ vec3 eb = material.baseMetalness * material.specularWeight * bU(material.baseWeight * material.baseColor, material.specularColor)
918
+ + opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), gd)
919
+ + sss * material.subsurfaceColor + vec3(vI);
920
+ vec3 rZ = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
921
+ return mix(vec3(1.0), rZ, material.coatWeight * material.coatDarkening);
922
922
  }
923
923
 
924
- vec3 ds(ag prepared, float lm) {
924
+ vec3 cF(ag prepared, float lU) {
925
925
  if (prepared.material.coatWeight <= 0.0) { return vec3(1.0); }
926
926
  if (prepared.material.inside) {
927
927
 
928
- return cD(prepared.material, -lm);
928
+ return cN(prepared.material, -lU);
929
929
  }
930
930
 
931
- return prepared.coatBaseScale * cD(prepared.material, lm);
931
+ return prepared.coatBaseScale * cN(prepared.material, lU);
932
932
  }
933
933
 
934
934
 
935
- bj du(bj fallback, vec3 tangent, vec3 bitangent, vec2 direction) {
935
+ bq dM(bq 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);
939
939
  vec3 b = cross(fallback.normal, t) * (dot(cross(fallback.normal, t), bitangent) < 0.0 ? -1.0 : 1.0);
940
940
  t = t * direction.x + b * direction.y;
941
941
  if (dot(t, t) < 1e-8) { return fallback; }
942
- bj basis = fallback;
942
+ bq basis = fallback;
943
943
  basis.tangent = normalize(t);
944
944
  basis.bitangent = normalize(cross(basis.normal, basis.tangent));
945
945
  basis.tangent = normalize(cross(basis.bitangent, basis.normal));
946
946
  return basis;
947
947
  }
948
948
 
949
- ag eH(
949
+ ag ds(
950
950
  vec3 tangent,
951
- J material,
952
- vec3 bF,
951
+ OpenPbrResolvedMaterial material,
952
+ vec3 bM,
953
953
  vec3 normal
954
954
  ) {
955
955
  ag prepared;
956
956
  prepared.material = material;
957
- prepared.basis = fj(
957
+ prepared.basis = fD(
958
958
  tangent,
959
959
  normal,
960
960
  max(material.specularAnisotropy, material.coatAnisotropy)
961
961
  );
962
962
  prepared.coatBasis = prepared.basis;
963
963
  prepared.directionFrames = false;
964
- #ifdef NUM_COAT_NORMAL_MAPS
964
+ #ifdef USE_COAT_NORMAL_FRAMES
965
965
 
966
966
 
967
967
  if (material.coatNormalEnabled) {
968
- prepared.coatBasis = fj(material.geometryTangent, material.coatNormal, material.coatAnisotropy);
968
+ prepared.coatBasis = fD(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 = du(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 = du(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, bF);
981
- #ifdef NUM_COAT_NORMAL_MAPS
982
- prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bF);
980
+ prepared.viewLocal = openpbr_to_local(prepared.basis, bM);
981
+ #ifdef USE_COAT_NORMAL_FRAMES
982
+ prepared.coatViewLocal = openpbr_to_local(prepared.coatBasis, bM);
983
983
  #endif
984
984
  prepared.diffuseColor = material.baseColor;
985
985
 
986
- float cB = 1.0 - material.baseMetalness;
987
- float dL = cB
986
+ float cK = 1.0 - material.baseMetalness;
987
+ float dW = cK
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] = cB;
994
- prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cB
993
+ prepared.weights[OPENPBR_LOBE_SPECULAR] = cK;
994
+ prepared.weights[OPENPBR_LOBE_TRANSMISSION] = cK
995
995
  * material.transmissionWeight;
996
- prepared.weights[OPENPBR_LOBE_DIFFUSE] = dL
996
+ prepared.weights[OPENPBR_LOBE_DIFFUSE] = dW
997
997
  * (1.0 - material.subsurfaceWeight) * material.baseWeight;
998
- prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dL
998
+ prepared.weights[OPENPBR_LOBE_SUBSURFACE] = dW
999
999
  * material.subsurfaceWeight;
1000
1000
 
1001
- prepared.specularEtaTOverEtaI = aY(
1001
+ prepared.specularEtaTOverEtaI = bi(
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 cj = 1.0;
1012
- if (!material.inside) { cj = mix(1.0, material.coatIor, material.coatWeight); }
1013
- float bq = cj * aY(
1014
- material.specularIor / cj, material.specularWeight);
1015
- float er = bq / cj;
1016
- if (cj > bq && bq >= 1.0) {
1017
- er = 1.0 / er;
1018
- }
1019
- prepared.specularEtaTOverEtaI = er;
1020
- prepared.transmissionReflectionIor = 1.0 / er;
1021
- prepared.refractionEtaTOverEtaI = bq;
1011
+ float cm = 1.0;
1012
+ if (!material.inside) { cm = mix(1.0, material.coatIor, material.coatWeight); }
1013
+ float bB = cm * bi(
1014
+ material.specularIor / cm, material.specularWeight);
1015
+ float eF = bB / cm;
1016
+ if (cm > bB && bB >= 1.0) {
1017
+ eF = 1.0 / eF;
1018
+ }
1019
+ prepared.specularEtaTOverEtaI = eF;
1020
+ prepared.transmissionReflectionIor = 1.0 / eF;
1021
+ prepared.refractionEtaTOverEtaI = bB;
1022
1022
  if (material.inside) {
1023
- prepared.refractionEtaTOverEtaI = 1.0 / bq;
1024
- prepared.transmissionReflectionIor = bq;
1023
+ prepared.refractionEtaTOverEtaI = 1.0 / bB;
1024
+ prepared.transmissionReflectionIor = bB;
1025
1025
  }
1026
1026
  prepared.material.relativeIor = 1.0 / prepared.refractionEtaTOverEtaI;
1027
1027
  }
@@ -1043,88 +1043,88 @@ prepared.thinFilmBaseIor = prepared.refractionEtaTOverEtaI;
1043
1043
  prepared.specularAlpha = material.specularRoughness
1044
1044
  * material.specularRoughness;
1045
1045
  float viewCosine = abs(prepared.viewLocal.z);
1046
- float ah = af(
1046
+ float ai = af(
1047
1047
  viewCosine,
1048
1048
  1.0 / prepared.specularEtaTOverEtaI
1049
1049
  );
1050
- vec3 fw = material.specularColor * (
1050
+ vec3 fN = material.specularColor * (
1051
1051
  material.thinWalled
1052
1052
  ? mix(
1053
- ah,
1054
- cS(ah),
1053
+ ai,
1054
+ cZ(ai),
1055
1055
  material.transmissionWeight
1056
1056
  )
1057
- : ah
1057
+ : ai
1058
1058
  );
1059
- vec3 hV = material.specularWeight * dU(
1059
+ vec3 iv = material.specularWeight * cw(
1060
1060
  viewCosine,
1061
1061
  material.baseWeight * material.baseColor,
1062
1062
  material.specularColor
1063
1063
  );
1064
- float eO = material.thinWalled
1065
- ? cS(af(viewCosine, prepared.transmissionReflectionIor))
1064
+ float eZ = material.thinWalled
1065
+ ? cZ(af(viewCosine, prepared.transmissionReflectionIor))
1066
1066
  : af(viewCosine, prepared.transmissionReflectionIor);
1067
- vec3 gN = bG(
1067
+ vec3 hb = bN(
1068
1068
  material,
1069
1069
  viewCosine,
1070
1070
  prepared.refractionEtaTOverEtaI
1071
1071
  );
1072
- float iu = aJ(
1072
+ float iM = aw(
1073
1073
  prepared.specularEtaTOverEtaI,
1074
1074
  prepared.specularAlpha,
1075
1075
  viewCosine
1076
1076
  );
1077
- float gr = cr(
1077
+ float gH = cA(
1078
1078
  prepared.specularEtaTOverEtaI,
1079
1079
  prepared.specularAlpha
1080
1080
  );
1081
- prepared.diffuseSpecularEnergyCompensation = iu
1082
- / max(gr, 1e-12);
1081
+ prepared.diffuseSpecularEnergyCompensation = iM
1082
+ / max(gH, 1e-12);
1083
1083
 
1084
1084
  prepared.probabilities[OPENPBR_LOBE_FUZZ] = prepared.weights[OPENPBR_LOBE_FUZZ]
1085
- * aw(material.fuzzColor)
1086
- * max(aO(
1085
+ * aE(material.fuzzColor)
1086
+ * max(aU(
1087
1087
  viewCosine,
1088
1088
  material.fuzzRoughness
1089
1089
  ), 0.02);
1090
1090
  prepared.probabilities[OPENPBR_LOBE_COAT] = 0.0;
1091
1091
  prepared.coatBaseScale = vec3(1.0);
1092
1092
  if (material.coatWeight > 0.0 && !material.inside) {
1093
- #ifdef NUM_COAT_NORMAL_MAPS
1093
+ #ifdef USE_COAT_NORMAL_FRAMES
1094
1094
  float coatViewCosine = material.coatNormalEnabled ? max(prepared.coatViewLocal.z, 0.0) : viewCosine;
1095
- float kB = gp(material, coatViewCosine);
1095
+ float lf = gF(material, coatViewCosine);
1096
1096
  #else
1097
- float kB = gp(material, viewCosine);
1097
+ float lf = gF(material, viewCosine);
1098
1098
  #endif
1099
- prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * kB;
1100
- prepared.coatBaseScale = cD(material,
1101
- #ifdef NUM_COAT_NORMAL_MAPS
1099
+ prepared.probabilities[OPENPBR_LOBE_COAT] = prepared.weights[OPENPBR_LOBE_COAT] * lf;
1100
+ prepared.coatBaseScale = cN(material,
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] * kB) * ha(prepared);
1107
+ * (1.0 - prepared.weights[OPENPBR_LOBE_COAT] * lf) * hr(prepared);
1108
1108
  }
1109
1109
  prepared.probabilities[OPENPBR_LOBE_METAL] = prepared.weights[OPENPBR_LOBE_METAL]
1110
- * aw(hV);
1110
+ * aE(iv);
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 hL = bP(material.baseWeight * material.baseColor, material.specularColor);
1116
- prepared.metalMsScale = material.specularWeight * hL * hL;
1117
- float pV = bH(prepared.specularAlpha, viewCosine);
1118
- prepared.metalMsFactor = pV / max(cv(prepared.specularAlpha), 1e-12);
1119
- float fi = prepared.weights[OPENPBR_LOBE_METAL] * aw(prepared.metalMsScale) * pV;
1120
- prepared.probabilities[OPENPBR_LOBE_METAL] += fi;
1121
- prepared.metalMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1115
+ vec3 ig = bU(material.baseWeight * material.baseColor, material.specularColor);
1116
+ prepared.metalMsScale = material.specularWeight * ig * ig;
1117
+ float qO = aV(prepared.specularAlpha, viewCosine);
1118
+ prepared.metalMsFactor = qO / max(cD(prepared.specularAlpha), 1e-12);
1119
+ float fC = prepared.weights[OPENPBR_LOBE_METAL] * aE(prepared.metalMsScale) * qO;
1120
+ prepared.probabilities[OPENPBR_LOBE_METAL] += fC;
1121
+ prepared.metalMsProbability = fC / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1122
1122
  }
1123
1123
  prepared.probabilities[OPENPBR_LOBE_SPECULAR] = prepared.weights[OPENPBR_LOBE_SPECULAR]
1124
- * aw(fw);
1124
+ * aE(fN);
1125
1125
  prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] = prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1126
- * (1.0 - eO)
1127
- * aw(gN);
1126
+ * (1.0 - eZ)
1127
+ * aE(hb);
1128
1128
 
1129
1129
 
1130
1130
 
@@ -1139,127 +1139,127 @@ 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 lG = prepared.weights[OPENPBR_LOBE_TRANSMISSION] + prepared.weights[OPENPBR_LOBE_SUBSURFACE];
1143
- prepared.dielectricMsReflectionScale = (material.inside ? vec3(1.0) : material.specularColor) * lG;
1144
- prepared.dielectricMsTransmissionScale = gN * 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 = hb * prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1145
1145
  + vec3(prepared.weights[OPENPBR_LOBE_SUBSURFACE]);
1146
- prepared.dielectricMsReflectionRatio = ch(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1147
- prepared.dielectricMsViewLoss = bO(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1148
- vec3 nW = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
- float fi = aw(nW) * prepared.dielectricMsViewLoss;
1150
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fi;
1151
- prepared.dielectricMsProbability = fi / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1146
+ prepared.dielectricMsReflectionRatio = ck(prepared.refractionEtaTOverEtaI, prepared.specularAlpha);
1147
+ prepared.dielectricMsViewLoss = bb(prepared.refractionEtaTOverEtaI, prepared.specularAlpha, viewCosine);
1148
+ vec3 oR = mix(prepared.dielectricMsTransmissionScale, prepared.dielectricMsReflectionScale, prepared.dielectricMsReflectionRatio);
1149
+ float fC = aE(oR) * prepared.dielectricMsViewLoss;
1150
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] += fC;
1151
+ prepared.dielectricMsProbability = fC / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1152
1152
  }
1153
1153
  prepared.probabilities[OPENPBR_LOBE_DIFFUSE] = prepared.weights[OPENPBR_LOBE_DIFFUSE]
1154
- * aw(prepared.diffuseColor)
1154
+ * aE(prepared.diffuseColor)
1155
1155
  * prepared.diffuseSpecularEnergyCompensation;
1156
1156
  prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] = prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1157
- * (1.0 - eO)
1158
- * aw(material.subsurfaceColor)
1157
+ * (1.0 - eZ)
1158
+ * aE(material.subsurfaceColor)
1159
1159
  * prepared.diffuseSpecularEnergyCompensation;
1160
1160
 
1161
1161
 
1162
1162
  if (material.coatWeight > 0.0 && material.thinFilmWeight > 0.0) {
1163
- float lj = 0.02 * bN(material.thinFilmThickness, material.thinFilmWeight);
1164
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lj);
1165
- prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lj);
1163
+ float lS = 0.02 * bS(material.thinFilmThickness, material.thinFilmWeight);
1164
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] = max(prepared.probabilities[OPENPBR_LOBE_SPECULAR], prepared.weights[OPENPBR_LOBE_SPECULAR] * lS);
1165
+ prepared.probabilities[OPENPBR_LOBE_METAL] = max(prepared.probabilities[OPENPBR_LOBE_METAL], prepared.weights[OPENPBR_LOBE_METAL] * material.specularWeight * lS);
1166
1166
  }
1167
1167
  if (material.coatWeight > 0.0 && !material.inside) {
1168
- float gs = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
- prepared.probabilities[OPENPBR_LOBE_METAL] *= gs;
1170
- prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gs;
1171
- prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gs;
1172
- prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gs;
1173
- prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gs;
1174
- }
1175
- dR(prepared);
1168
+ float gI = max(max(prepared.coatBaseScale.x, prepared.coatBaseScale.y), prepared.coatBaseScale.z);
1169
+ prepared.probabilities[OPENPBR_LOBE_METAL] *= gI;
1170
+ prepared.probabilities[OPENPBR_LOBE_SPECULAR] *= gI;
1171
+ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] *= gI;
1172
+ prepared.probabilities[OPENPBR_LOBE_DIFFUSE] *= gI;
1173
+ prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] *= gI;
1174
+ }
1175
+ eg(prepared);
1176
1176
  return prepared;
1177
1177
  }
1178
1178
 
1179
- float cR(ag prepared, float au, bool reflection) {
1179
+ float cY(ag prepared, float cosine, bool reflection) {
1180
1180
  if (prepared.material.coatWeight <= 0.0) {
1181
- return af(au, prepared.material.relativeIor);
1181
+ return af(cosine, prepared.material.relativeIor);
1182
1182
  }
1183
- float kp = af(au, prepared.transmissionReflectionIor);
1184
- if (!reflection) { return kp; }
1185
- float nl = af(au, 1.0 / prepared.specularEtaTOverEtaI);
1186
- float rP = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
- return mix(nl, kp, rP);
1183
+ float kU = af(cosine, prepared.transmissionReflectionIor);
1184
+ if (!reflection) { return kU; }
1185
+ float oj = af(cosine, 1.0 / prepared.specularEtaTOverEtaI);
1186
+ float sQ = prepared.material.transmissionWeight + (1.0 - prepared.material.transmissionWeight) * prepared.material.subsurfaceWeight;
1187
+ return mix(oj, kU, sQ);
1188
1188
  }
1189
1189
 
1190
- vec3 bI(
1190
+ vec3 bO(
1191
1191
  ag prepared,
1192
1192
  vec3 lightDirection,
1193
1193
  out float pdf
1194
1194
  ) {
1195
- J material = prepared.material;
1195
+ OpenPbrResolvedMaterial material = prepared.material;
1196
1196
  vec3 viewLocal = prepared.viewLocal;
1197
1197
  vec3 lightLocal = openpbr_to_local(prepared.basis, lightDirection);
1198
1198
  bool reflection = lightLocal.z * viewLocal.z > 0.0;
1199
- #ifdef NUM_COAT_NORMAL_MAPS
1199
+ #ifdef USE_COAT_NORMAL_FRAMES
1200
1200
  bool independentCoat = material.coatNormalEnabled;
1201
1201
  bool geometricReflection = dot(material.geometricNormal, lightDirection) > 0.0;
1202
1202
  float coatLightCosine = dot(prepared.coatBasis.normal, lightDirection);
1203
1203
  bool coatReflection = geometricReflection && prepared.coatViewLocal.z > 0.0 && coatLightCosine > 0.0;
1204
1204
  #endif
1205
1205
 
1206
- vec3 V;
1206
+ vec3 ad;
1207
1207
  if (reflection) {
1208
- V = normalize(lightLocal + viewLocal);
1208
+ ad = normalize(lightLocal + viewLocal);
1209
1209
  }
1210
1210
  else {
1211
- V = normalize(lightLocal + viewLocal * material.relativeIor);
1211
+ ad = normalize(lightLocal + viewLocal * material.relativeIor);
1212
1212
  }
1213
- if (V.z < 0.0) {
1214
- V = -V;
1213
+ if (ad.z < 0.0) {
1214
+ ad = -ad;
1215
1215
  }
1216
1216
 
1217
1217
  vec3 response = vec3(0.0);
1218
1218
  pdf = 0.0;
1219
- float aI = 0.0;
1220
- float bQ = abs(dot(viewLocal, V));
1219
+ float aM = 0.0;
1220
+ float bm = abs(dot(viewLocal, ad));
1221
1221
  float diffuseSpecularEnergyCompensation =
1222
1222
  prepared.diffuseSpecularEnergyCompensation
1223
- * aJ(
1223
+ * aw(
1224
1224
  prepared.specularEtaTOverEtaI,
1225
1225
  prepared.specularAlpha,
1226
1226
  abs(lightLocal.z)
1227
1227
  );
1228
1228
 
1229
- #ifdef NUM_COAT_NORMAL_MAPS
1229
+ #ifdef USE_COAT_NORMAL_FRAMES
1230
1230
  if (!independentCoat || (lightLocal.z != 0.0 && reflection == geometricReflection)) {
1231
1231
  #endif
1232
1232
  if (reflection) {
1233
1233
  if (prepared.weights[OPENPBR_LOBE_DIFFUSE] > 0.0) {
1234
- response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * cE(
1234
+ response += prepared.weights[OPENPBR_LOBE_DIFFUSE] * bJ(
1235
1235
  material,
1236
1236
  prepared.diffuseColor,
1237
1237
  viewLocal,
1238
1238
  lightLocal,
1239
1239
  diffuseSpecularEnergyCompensation,
1240
- aI
1240
+ aM
1241
1241
  );
1242
- pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aI;
1242
+ pdf += prepared.probabilities[OPENPBR_LOBE_DIFFUSE] * aM;
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] * cE(
1246
+ response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE] * bJ(
1247
1247
  material,
1248
1248
  material.subsurfaceColor,
1249
1249
  viewLocal,
1250
1250
  lightLocal,
1251
1251
  diffuseSpecularEnergyCompensation,
1252
- aI
1252
+ aM
1253
1253
  );
1254
- pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aI;
1254
+ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * 0.5 * aM;
1255
1255
  }
1256
1256
 
1257
1257
  if (prepared.weights[OPENPBR_LOBE_SPECULAR] > 0.0) {
1258
- vec3 ct = vec3(cR(prepared, bQ, true));
1258
+ vec3 cB = vec3(cY(prepared, bm, true));
1259
1259
  if (material.thinFilmWeight > 0.0) {
1260
- ct = bW(
1261
- ct,
1262
- bQ,
1260
+ cB = cc(
1261
+ cB,
1262
+ bm,
1263
1263
  material.thinFilmThickness,
1264
1264
  material.thinFilmIor,
1265
1265
  prepared.thinFilmBaseIor,
@@ -1268,33 +1268,33 @@ prepared.thinFilmExteriorIor
1268
1268
  );
1269
1269
  }
1270
1270
  if (material.thinWalled) {
1271
- ct = aP(
1272
- ct,
1271
+ cB = av(
1272
+ cB,
1273
1273
  material.transmissionWeight
1274
1274
  );
1275
1275
  }
1276
- vec3 cK = material.specularColor * ct;
1277
- response += prepared.weights[OPENPBR_LOBE_SPECULAR] * am(
1276
+ vec3 bG = material.specularColor * cB;
1277
+ response += prepared.weights[OPENPBR_LOBE_SPECULAR] * ao(
1278
1278
  material,
1279
1279
  viewLocal,
1280
1280
  lightLocal,
1281
- V,
1282
- cK,
1283
- aI
1281
+ ad,
1282
+ bG,
1283
+ aM
1284
1284
  );
1285
- pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aI;
1285
+ pdf += prepared.probabilities[OPENPBR_LOBE_SPECULAR] * aM;
1286
1286
  }
1287
1287
 
1288
1288
  if (prepared.weights[OPENPBR_LOBE_METAL] > 0.0) {
1289
- vec3 cK = dU(
1290
- bQ,
1289
+ vec3 bG = cw(
1290
+ bm,
1291
1291
  material.baseWeight * material.baseColor,
1292
1292
  material.specularColor
1293
1293
  );
1294
1294
  if (material.thinFilmWeight > 0.0) {
1295
- cK = lq(
1296
- cK,
1297
- bQ,
1295
+ bG = lZ(
1296
+ bG,
1297
+ bm,
1298
1298
  material.thinFilmThickness,
1299
1299
  material.thinFilmIor,
1300
1300
  material.baseWeight * material.baseColor,
@@ -1303,29 +1303,29 @@ material.thinFilmWeight,
1303
1303
  prepared.thinFilmExteriorIor
1304
1304
  );
1305
1305
  }
1306
- cK *= material.specularWeight;
1307
- response += prepared.weights[OPENPBR_LOBE_METAL] * am(
1306
+ bG *= material.specularWeight;
1307
+ response += prepared.weights[OPENPBR_LOBE_METAL] * ao(
1308
1308
  material,
1309
1309
  viewLocal,
1310
1310
  lightLocal,
1311
- V,
1312
- cK,
1313
- aI
1311
+ ad,
1312
+ bG,
1313
+ aM
1314
1314
  );
1315
1315
  if (prepared.metalMsFactor > 0.0) {
1316
- float dW = min(prepared.metalMsFactor * bH(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1317
- response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * dW * INVPI;
1318
- aI = mix(aI, 0.5 * INVPI, prepared.metalMsProbability);
1316
+ float cL = min(prepared.metalMsFactor * aV(prepared.specularAlpha, lightLocal.z), 1.0 / max(lightLocal.z, 1e-8));
1317
+ response += prepared.weights[OPENPBR_LOBE_METAL] * prepared.metalMsScale * cL * INVPI;
1318
+ aM = mix(aM, 0.5 * INVPI, prepared.metalMsProbability);
1319
1319
  }
1320
- pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aI;
1320
+ pdf += prepared.probabilities[OPENPBR_LOBE_METAL] * aM;
1321
1321
  }
1322
1322
  }
1323
1323
  else {
1324
- vec3 cK = vec3(cR(prepared, bQ, false));
1324
+ vec3 bG = vec3(cY(prepared, bm, false));
1325
1325
  if (material.thinFilmWeight > 0.0) {
1326
- cK = bW(
1327
- cK,
1328
- bQ,
1326
+ bG = cc(
1327
+ bG,
1328
+ bm,
1329
1329
  material.thinFilmThickness,
1330
1330
  material.thinFilmIor,
1331
1331
  prepared.thinFilmBaseIor,
@@ -1335,17 +1335,17 @@ prepared.thinFilmExteriorIor
1335
1335
  }
1336
1336
  if (prepared.weights[OPENPBR_LOBE_TRANSMISSION] > 0.0) {
1337
1337
  if (material.thinWalled) {
1338
- vec3 kY = vec3(lightLocal.xy, -lightLocal.z);
1339
- vec3 df = normalize(kY + viewLocal);
1340
- if (df.z < 0.0) {
1341
- df = -df;
1338
+ vec3 lI = vec3(lightLocal.xy, -lightLocal.z);
1339
+ vec3 du = normalize(lI + viewLocal);
1340
+ if (du.z < 0.0) {
1341
+ du = -du;
1342
1342
  }
1343
- float nR = abs(dot(viewLocal, df));
1344
- vec3 lL = vec3(cR(prepared, nR, false));
1343
+ float oM = abs(dot(viewLocal, du));
1344
+ vec3 mv = vec3(cY(prepared, oM, false));
1345
1345
  if (material.thinFilmWeight > 0.0) {
1346
- lL = bW(
1347
- lL,
1348
- nR,
1346
+ mv = cc(
1347
+ mv,
1348
+ oM,
1349
1349
  material.thinFilmThickness,
1350
1350
  material.thinFilmIor,
1351
1351
  prepared.thinFilmBaseIor,
@@ -1353,66 +1353,66 @@ material.thinFilmWeight,
1353
1353
  prepared.thinFilmExteriorIor
1354
1354
  );
1355
1355
  }
1356
- vec3 gk = aP(
1357
- lL,
1356
+ vec3 gA = av(
1357
+ mv,
1358
1358
  1.0
1359
1359
  );
1360
- vec3 tint = bG(
1360
+ vec3 tint = bN(
1361
1361
  material,
1362
1362
  abs(viewLocal.z),
1363
1363
  prepared.refractionEtaTOverEtaI
1364
1364
  );
1365
1365
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1366
- * am(
1366
+ * ao(
1367
1367
  material,
1368
1368
  viewLocal,
1369
- kY,
1370
- df,
1371
- tint * (vec3(1.0) - gk),
1372
- aI
1369
+ lI,
1370
+ du,
1371
+ tint * (vec3(1.0) - gA),
1372
+ aM
1373
1373
  );
1374
1374
  }
1375
1375
  else {
1376
1376
  response += prepared.weights[OPENPBR_LOBE_TRANSMISSION]
1377
- * dl(
1377
+ * dE(
1378
1378
  material,
1379
1379
  material.relativeIor,
1380
- bn(material),
1380
+ bh(material),
1381
1381
  viewLocal,
1382
1382
  lightLocal,
1383
- V,
1384
- cK,
1385
- aI
1383
+ ad,
1384
+ bG,
1385
+ aM
1386
1386
  );
1387
1387
  }
1388
1388
  if (prepared.dielectricMsProbability > 0.0) {
1389
- aI *= 1.0 - prepared.dielectricMsProbability;
1389
+ aM *= 1.0 - prepared.dielectricMsProbability;
1390
1390
  }
1391
- pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aI;
1391
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * aM;
1392
1392
  }
1393
1393
  if (prepared.weights[OPENPBR_LOBE_SUBSURFACE] > 0.0) {
1394
1394
  if (material.thinWalled) {
1395
- vec3 oi = vec3(lightLocal.xy, -lightLocal.z);
1395
+ vec3 pb = vec3(lightLocal.xy, -lightLocal.z);
1396
1396
  response += 0.5 * prepared.weights[OPENPBR_LOBE_SUBSURFACE]
1397
- * cE(
1397
+ * bJ(
1398
1398
  material,
1399
1399
  material.subsurfaceColor,
1400
1400
  viewLocal,
1401
- oi,
1401
+ pb,
1402
1402
  diffuseSpecularEnergyCompensation,
1403
- aI
1403
+ aM
1404
1404
  );
1405
- aI *= 0.5;
1405
+ aM *= 0.5;
1406
1406
  }
1407
1407
  else {
1408
- response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dM(
1408
+ response += prepared.weights[OPENPBR_LOBE_SUBSURFACE] * dX(
1409
1409
  material,
1410
1410
  viewLocal,
1411
1411
  lightLocal,
1412
- aI
1412
+ aM
1413
1413
  );
1414
1414
  }
1415
- pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aI;
1415
+ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aM;
1416
1416
  }
1417
1417
  }
1418
1418
 
@@ -1420,143 +1420,143 @@ pdf += prepared.probabilities[OPENPBR_LOBE_SUBSURFACE] * aI;
1420
1420
 
1421
1421
 
1422
1422
  if (prepared.dielectricMsProbability > 0.0) {
1423
- float au = abs(lightLocal.z);
1424
- if (au > 0.0) {
1423
+ float cosine = abs(lightLocal.z);
1424
+ if (cosine > 0.0) {
1425
1425
  float ior = (reflection ? prepared.refractionEtaTOverEtaI : 1.0 / prepared.refractionEtaTOverEtaI);
1426
- float ja = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
- float tr = prepared.dielectricMsViewLoss * bO(ior, prepared.specularAlpha, au)
1428
- / max(cO(ior, prepared.specularAlpha), 1e-12);
1429
- float dW = min(tr * ja, 1.0 / au);
1426
+ float ju = (reflection ? prepared.dielectricMsReflectionRatio : 1.0 - prepared.dielectricMsReflectionRatio);
1427
+ float oZ = prepared.dielectricMsViewLoss * bb(ior, prepared.specularAlpha, cosine)
1428
+ / max(bf(ior, prepared.specularAlpha), 1e-12);
1429
+ float cL = min(oZ * ju, 1.0 / cosine);
1430
1430
  vec3 scale = (reflection ? prepared.dielectricMsReflectionScale : prepared.dielectricMsTransmissionScale);
1431
- response += scale * dW * INVPI;
1432
- pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * ja * 0.5 * INVPI;
1431
+ response += scale * cL * INVPI;
1432
+ pdf += prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] * prepared.dielectricMsProbability * ju * 0.5 * INVPI;
1433
1433
  }
1434
1434
  }
1435
1435
 
1436
- #ifdef NUM_COAT_NORMAL_MAPS
1436
+ #ifdef USE_COAT_NORMAL_FRAMES
1437
1437
  }
1438
1438
  #endif
1439
1439
  if (material.coatWeight > 0.0) {
1440
- response *= ds(prepared,
1441
- #ifdef NUM_COAT_NORMAL_MAPS
1440
+ response *= cF(prepared,
1441
+ #ifdef USE_COAT_NORMAL_FRAMES
1442
1442
  independentCoat ? coatLightCosine : lightLocal.z
1443
1443
  #else
1444
1444
  lightLocal.z
1445
1445
  #endif
1446
1446
  );
1447
1447
  }
1448
- #ifdef NUM_COAT_NORMAL_MAPS
1448
+ #ifdef USE_COAT_NORMAL_FRAMES
1449
1449
  if (independentCoat) { response *= abs(lightLocal.z); }
1450
1450
  #endif
1451
1451
 
1452
1452
  if (
1453
- #ifdef NUM_COAT_NORMAL_MAPS
1453
+ #ifdef USE_COAT_NORMAL_FRAMES
1454
1454
  (independentCoat ? coatReflection : reflection)
1455
1455
  #else
1456
1456
  reflection
1457
1457
  #endif
1458
1458
  && prepared.weights[OPENPBR_LOBE_COAT] > 0.0) {
1459
- vec3 dI = viewLocal;
1460
- vec3 kD = lightLocal;
1461
- vec3 gv = V;
1462
- float jK = bQ;
1459
+ vec3 dT = viewLocal;
1460
+ vec3 lh = lightLocal;
1461
+ vec3 gL = ad;
1462
+ float kk = bm;
1463
1463
  if (prepared.directionFrames) {
1464
- dI = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
- #ifdef NUM_COAT_NORMAL_MAPS
1466
- if (independentCoat) { dI = prepared.coatViewLocal; }
1464
+ dT = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal));
1465
+ #ifdef USE_COAT_NORMAL_FRAMES
1466
+ if (independentCoat) { dT = prepared.coatViewLocal; }
1467
1467
  #endif
1468
- kD = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
- gv = normalize(kD + dI);
1470
- if (gv.z < 0.0) { gv = -gv; }
1471
- jK = abs(dot(dI, gv));
1468
+ lh = openpbr_to_local(prepared.coatBasis, lightDirection);
1469
+ gL = normalize(lh + dT);
1470
+ if (gL.z < 0.0) { gL = -gL; }
1471
+ kk = abs(dot(dT, gL));
1472
1472
  }
1473
1473
 
1474
- vec3 lg = vec3(af(
1475
- jK,
1474
+ vec3 lQ = vec3(af(
1475
+ kk,
1476
1476
  1.0 / material.coatIor
1477
1477
  ));
1478
- J dH = material;
1479
- vec2 jx = aK(material.coatRoughness, material.coatAnisotropy);
1480
- dH.alphaX = jx.x;
1481
- dH.alphaY = jx.y;
1478
+ OpenPbrResolvedMaterial dS = material;
1479
+ vec2 jX = aN(material.coatRoughness, material.coatAnisotropy);
1480
+ dS.alphaX = jX.x;
1481
+ dS.alphaY = jX.y;
1482
1482
  response += prepared.weights[OPENPBR_LOBE_COAT]
1483
- #ifdef NUM_COAT_NORMAL_MAPS
1483
+ #ifdef USE_COAT_NORMAL_FRAMES
1484
1484
  * (independentCoat ? max(coatLightCosine, 0.0) : 1.0)
1485
1485
  #endif
1486
- * am(
1487
- dH,
1488
- dI,
1489
- kD,
1490
- gv,
1491
- lg,
1492
- aI
1486
+ * ao(
1487
+ dS,
1488
+ dT,
1489
+ lh,
1490
+ gL,
1491
+ lQ,
1492
+ aM
1493
1493
  );
1494
- pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aI;
1494
+ pdf += prepared.probabilities[OPENPBR_LOBE_COAT] * aM;
1495
1495
  }
1496
1496
 
1497
1497
  if (
1498
- #ifdef NUM_COAT_NORMAL_MAPS
1498
+ #ifdef USE_COAT_NORMAL_FRAMES
1499
1499
  (independentCoat ? geometricReflection : reflection)
1500
1500
  #else
1501
1501
  reflection
1502
1502
  #endif
1503
1503
  && prepared.weights[OPENPBR_LOBE_FUZZ] > 0.0) {
1504
- float qz = aO(
1504
+ float rC = aU(
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] * qz)
1510
+ vec3(1.0 - prepared.weights[OPENPBR_LOBE_FUZZ] * rC)
1511
1511
  );
1512
1512
  response += prepared.weights[OPENPBR_LOBE_FUZZ]
1513
- #ifdef NUM_COAT_NORMAL_MAPS
1513
+ #ifdef USE_COAT_NORMAL_FRAMES
1514
1514
  * (independentCoat ? max(lightLocal.z, 0.0) : 1.0)
1515
1515
  #endif
1516
- * jY(
1516
+ * kD(
1517
1517
  material,
1518
1518
  viewLocal,
1519
1519
  lightLocal,
1520
- aI
1520
+ aM
1521
1521
  );
1522
- pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aI;
1522
+ pdf += prepared.probabilities[OPENPBR_LOBE_FUZZ] * aM;
1523
1523
  }
1524
1524
 
1525
- #ifdef NUM_COAT_NORMAL_MAPS
1525
+ #ifdef USE_COAT_NORMAL_FRAMES
1526
1526
  if (independentCoat) { return response; }
1527
1527
  #endif
1528
1528
  return response * abs(lightLocal.z);
1529
1529
  }
1530
1530
 
1531
- vec3 ri(
1531
+ vec3 sp(
1532
1532
  vec3 tangent,
1533
- J material,
1534
- vec3 bF,
1533
+ OpenPbrResolvedMaterial material,
1534
+ vec3 bM,
1535
1535
  vec3 normal,
1536
1536
  vec3 lightDirection,
1537
1537
  out float pdf
1538
1538
  ) {
1539
- ag prepared = eH(
1539
+ ag prepared = ds(
1540
1540
  tangent,
1541
1541
  material,
1542
- bF,
1542
+ bM,
1543
1543
  normal
1544
1544
  );
1545
- return bI(prepared, lightDirection, pdf);
1545
+ return bO(prepared, lightDirection, pdf);
1546
1546
  }
1547
1547
 
1548
- float vW(
1548
+ float xN(
1549
1549
  vec3 tangent,
1550
- J material,
1551
- vec3 bF,
1550
+ OpenPbrResolvedMaterial material,
1551
+ vec3 bM,
1552
1552
  vec3 normal,
1553
1553
  vec3 lightDirection
1554
1554
  ) {
1555
1555
  float pdf;
1556
- ri(
1556
+ sp(
1557
1557
  tangent,
1558
1558
  material,
1559
- bF,
1559
+ bM,
1560
1560
  normal,
1561
1561
  lightDirection,
1562
1562
  pdf
@@ -1564,18 +1564,18 @@ pdf
1564
1564
  return pdf;
1565
1565
  }
1566
1566
 
1567
- vec3 dv(
1567
+ vec3 eN(
1568
1568
  ag prepared,
1569
- vec3 cm,
1569
+ vec3 cq,
1570
1570
  out vec3 lightDirection,
1571
1571
  out float pdf,
1572
1572
  out bool isTransmissionEvent
1573
1573
  ) {
1574
- J material = prepared.material;
1574
+ OpenPbrResolvedMaterial material = prepared.material;
1575
1575
  vec3 viewLocal = prepared.viewLocal;
1576
- float cy = cm.x;
1577
- float fu = cm.y;
1578
- float bm = cm.z;
1576
+ float cH = cq.x;
1577
+ float fL = cq.y;
1578
+ float bv = cq.z;
1579
1579
  pdf = 0.0;
1580
1580
  isTransmissionEvent = false;
1581
1581
  lightDirection = prepared.basis.normal;
@@ -1588,8 +1588,8 @@ 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 (bn(prepared.material) * ds(prepared,
1592
- #ifdef NUM_COAT_NORMAL_MAPS
1591
+ return (bh(prepared.material) * cF(prepared,
1592
+ #ifdef USE_COAT_NORMAL_FRAMES
1593
1593
  prepared.material.coatNormalEnabled ? dot(prepared.coatBasis.normal, lightDirection) : -prepared.viewLocal.z
1594
1594
  #else
1595
1595
  -prepared.viewLocal.z
@@ -1599,99 +1599,99 @@ prepared.material.coatNormalEnabled ? dot(prepared.coatBasis.normal, lightDirect
1599
1599
 
1600
1600
  float cdf[OPENPBR_LOBE_COUNT];
1601
1601
  cdf[OPENPBR_LOBE_FUZZ] = prepared.probabilities[OPENPBR_LOBE_FUZZ];
1602
- for (int hU = 1; hU < OPENPBR_LOBE_COUNT; hU++) {
1603
- cdf[hU] = cdf[hU - 1] + prepared.probabilities[hU];
1602
+ for (int jT = 1; jT < OPENPBR_LOBE_COUNT; jT++) {
1603
+ cdf[jT] = cdf[jT - 1] + prepared.probabilities[jT];
1604
1604
  }
1605
1605
  if (cdf[OPENPBR_LOBE_SUBSURFACE] <= 0.0) {
1606
1606
  return vec3(0.0);
1607
1607
  }
1608
1608
 
1609
1609
  vec3 lightLocal;
1610
- if (bm < cdf[OPENPBR_LOBE_FUZZ] || (
1611
- bm >= cdf[OPENPBR_LOBE_TRANSMISSION] && bm < cdf[OPENPBR_LOBE_DIFFUSE]
1610
+ if (bv < cdf[OPENPBR_LOBE_FUZZ] || (
1611
+ bv >= cdf[OPENPBR_LOBE_TRANSMISSION] && bv < cdf[OPENPBR_LOBE_DIFFUSE]
1612
1612
  )) {
1613
- lightLocal = bi(vec2(cy, fu));
1613
+ lightLocal = aO(vec2(cH, fL));
1614
1614
  }
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
- #ifdef NUM_COAT_NORMAL_MAPS
1619
- if (material.coatNormalEnabled) { dI = prepared.coatViewLocal; }
1615
+ else if (bv < cdf[OPENPBR_LOBE_COAT]) {
1616
+ vec3 dT = viewLocal;
1617
+ if (prepared.directionFrames) { dT = openpbr_to_local(prepared.coatBasis, openpbr_to_world(prepared.basis, viewLocal)); }
1618
+ #ifdef USE_COAT_NORMAL_FRAMES
1619
+ if (material.coatNormalEnabled) { dT = prepared.coatViewLocal; }
1620
1620
  #endif
1621
- vec3 V = aQ(
1622
- dI,
1621
+ vec3 ad = aD(
1622
+ dT,
1623
1623
 
1624
- aK(material.coatRoughness, material.coatAnisotropy),
1625
- vec2(cy, fu)
1624
+ aN(material.coatRoughness, material.coatAnisotropy),
1625
+ vec2(cH, fL)
1626
1626
  );
1627
- if (V.z < 0.0) {
1628
- V = -V;
1627
+ if (ad.z < 0.0) {
1628
+ ad = -ad;
1629
1629
  }
1630
- lightLocal = normalize(reflect(-dI, V));
1631
- #ifdef NUM_COAT_NORMAL_MAPS
1630
+ lightLocal = normalize(reflect(-dT, ad));
1631
+ #ifdef USE_COAT_NORMAL_FRAMES
1632
1632
  if (material.coatNormalEnabled) {
1633
1633
  lightDirection = openpbr_to_world(prepared.coatBasis, lightLocal);
1634
1634
  if (lightLocal.z <= 0.0 || dot(material.geometricNormal, lightDirection) <= 0.0) { return vec3(0.0); }
1635
- return bI(prepared, lightDirection, pdf);
1635
+ return bO(prepared, lightDirection, pdf);
1636
1636
  }
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 (bm < cdf[OPENPBR_LOBE_SPECULAR]) {
1641
- bool tw = bm < cdf[OPENPBR_LOBE_METAL];
1642
- float rM = (bm - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
- if (tw && rM < prepared.metalMsProbability) {
1644
- float z = cy;
1645
- float fl = sqrt(max(0.0, 1.0 - z * z));
1646
- float br = TWOPI * fu;
1647
- lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1640
+ else if (bv < cdf[OPENPBR_LOBE_SPECULAR]) {
1641
+ bool uP = bv < cdf[OPENPBR_LOBE_METAL];
1642
+ float sN = (bv - cdf[OPENPBR_LOBE_COAT]) / max(prepared.probabilities[OPENPBR_LOBE_METAL], 1e-12);
1643
+ if (uP && sN < prepared.metalMsProbability) {
1644
+ float z = cH;
1645
+ float ex = sqrt(max(0.0, 1.0 - z * z));
1646
+ float azimuth = TWOPI * fL;
1647
+ lightLocal = vec3(ex * cos(azimuth), ex * sin(azimuth), z);
1648
1648
  }
1649
1649
  else {
1650
- vec3 V = aQ(
1650
+ vec3 ad = aD(
1651
1651
  viewLocal,
1652
1652
  vec2(material.alphaX, material.alphaY),
1653
- vec2(cy, fu)
1653
+ vec2(cH, fL)
1654
1654
  );
1655
- if (V.z < 0.0) {
1656
- V = -V;
1655
+ if (ad.z < 0.0) {
1656
+ ad = -ad;
1657
1657
  }
1658
- lightLocal = normalize(reflect(-viewLocal, V));
1658
+ lightLocal = normalize(reflect(-viewLocal, ad));
1659
1659
  }
1660
1660
  }
1661
- else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1661
+ else if (bv < cdf[OPENPBR_LOBE_TRANSMISSION]) {
1662
1662
  isTransmissionEvent = true;
1663
1663
 
1664
1664
 
1665
- float us = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
- if (prepared.dielectricMsProbability > 0.0 && us < prepared.dielectricMsProbability) {
1667
- float ja = prepared.dielectricMsReflectionRatio;
1668
- bool lZ = cy < ja;
1665
+ float vS = (bv - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
1666
+ if (prepared.dielectricMsProbability > 0.0 && vS < prepared.dielectricMsProbability) {
1667
+ float ju = prepared.dielectricMsReflectionRatio;
1668
+ bool mJ = cH < ju;
1669
1669
  float z;
1670
- if (lZ) { z = min(cy / ja, 0.99999994); }
1671
- else { z = -min((cy - ja) / (1.0 - ja), 0.99999994); }
1672
- float fl = sqrt(max(0.0, 1.0 - z * z));
1673
- float br = TWOPI * fu;
1674
- lightLocal = vec3(fl * cos(br), fl * sin(br), z);
1675
- isTransmissionEvent = !lZ;
1670
+ if (mJ) { z = min(cH / ju, 0.99999994); }
1671
+ else { z = -min((cH - ju) / (1.0 - ju), 0.99999994); }
1672
+ float ex = sqrt(max(0.0, 1.0 - z * z));
1673
+ float azimuth = TWOPI * fL;
1674
+ lightLocal = vec3(ex * cos(azimuth), ex * sin(azimuth), z);
1675
+ isTransmissionEvent = !mJ;
1676
1676
  }
1677
1677
  else {
1678
- vec3 V = aQ(
1678
+ vec3 ad = aD(
1679
1679
  viewLocal,
1680
1680
  vec2(material.alphaX, material.alphaY),
1681
- vec2(cy, fu)
1681
+ vec2(cH, fL)
1682
1682
  );
1683
- if (V.z < 0.0) {
1684
- V = -V;
1683
+ if (ad.z < 0.0) {
1684
+ ad = -ad;
1685
1685
  }
1686
- float bQ = abs(dot(viewLocal, V));
1687
- vec3 cK = vec3(af(
1688
- bQ,
1686
+ float bm = abs(dot(viewLocal, ad));
1687
+ vec3 bG = vec3(af(
1688
+ bm,
1689
1689
  prepared.material.relativeIor
1690
1690
  ));
1691
1691
  if (material.thinFilmWeight > 0.0) {
1692
- cK = bW(
1693
- cK,
1694
- bQ,
1692
+ bG = cc(
1693
+ bG,
1694
+ bm,
1695
1695
  material.thinFilmThickness,
1696
1696
  material.thinFilmIor,
1697
1697
  prepared.thinFilmBaseIor,
@@ -1700,13 +1700,13 @@ prepared.thinFilmExteriorIor
1700
1700
  );
1701
1701
  }
1702
1702
  if (material.thinWalled) {
1703
- vec3 hZ = normalize(reflect(-viewLocal, V));
1704
- lightLocal = vec3(hZ.xy, -hZ.z);
1703
+ vec3 iC = normalize(reflect(-viewLocal, ad));
1704
+ lightLocal = vec3(iC.xy, -iC.z);
1705
1705
  }
1706
1706
  else {
1707
1707
  lightLocal = refract(
1708
1708
  -viewLocal,
1709
- V,
1709
+ ad,
1710
1710
  prepared.material.relativeIor
1711
1711
  );
1712
1712
  if (dot(lightLocal, lightLocal) <= 1e-8) {
@@ -1720,13 +1720,13 @@ lightLocal = normalize(lightLocal);
1720
1720
  else {
1721
1721
  isTransmissionEvent = true;
1722
1722
  if (material.thinWalled) {
1723
- float kK = cy;
1724
- bool pT = kK >= 0.5;
1725
- cy = pT
1726
- ? (kK - 0.5) * 2.0
1727
- : kK * 2.0;
1728
- lightLocal = bi(vec2(cy, fu));
1729
- if (pT) {
1723
+ float lq = cH;
1724
+ bool qL = lq >= 0.5;
1725
+ cH = qL
1726
+ ? (lq - 0.5) * 2.0
1727
+ : lq * 2.0;
1728
+ lightLocal = aO(vec2(cH, fL));
1729
+ if (qL) {
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 = bi(vec2(cy, fu));
1737
+ lightLocal = aO(vec2(cH, fL));
1738
1738
  lightLocal.z = -lightLocal.z;
1739
1739
  }
1740
1740
  }
@@ -1744,24 +1744,24 @@ lightDirection = openpbr_to_world(prepared.basis, lightLocal);
1744
1744
  if (lightLocal.z == 0.0 || (lightLocal.z < 0.0) != isTransmissionEvent) {
1745
1745
  return vec3(0.0);
1746
1746
  }
1747
- #ifdef NUM_COAT_NORMAL_MAPS
1747
+ #ifdef USE_COAT_NORMAL_FRAMES
1748
1748
  if (material.coatNormalEnabled &&
1749
1749
  ((dot(material.geometricNormal, lightDirection) <= 0.0) != isTransmissionEvent)) { return vec3(0.0); }
1750
1750
  #endif
1751
- return bI(prepared, lightDirection, pdf);
1751
+ return bO(prepared, lightDirection, pdf);
1752
1752
  }
1753
1753
 
1754
- vec3 sJ(
1754
+ vec3 tZ(
1755
1755
  vec3 tangent,
1756
- J material,
1757
- vec3 cm,
1758
- vec3 bF,
1756
+ OpenPbrResolvedMaterial material,
1757
+ vec3 cq,
1758
+ vec3 bM,
1759
1759
  vec3 normal,
1760
1760
  out vec3 lightDirection,
1761
1761
  out float pdf,
1762
1762
  out bool isTransmissionEvent
1763
1763
  ) {
1764
- ag prepared = eH(tangent, material, bF, normal);
1765
- return dv(prepared, cm, lightDirection, pdf, isTransmissionEvent);
1764
+ ag prepared = ds(tangent, material, bM, normal);
1765
+ return eN(prepared, cq, lightDirection, pdf, isTransmissionEvent);
1766
1766
  }`;
1767
1767
  //# sourceMappingURL=openPbrBsdf.glsl.js.map