@zephyr3d/scene 0.9.22 → 0.9.24

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 (234) hide show
  1. package/dist/animation/joint_dynamics/collision.js +1 -7
  2. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  3. package/dist/animation/joint_dynamics/constraints.js +2 -17
  4. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  5. package/dist/animation/joint_dynamics/controller.js +2 -20
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
  8. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  9. package/dist/animation/joint_dynamics/solver.js +14 -60
  10. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  11. package/dist/animation/joint_dynamics/types.js +3 -3
  12. package/dist/animation/joint_dynamics/types.js.map +1 -1
  13. package/dist/app/app.js +23 -0
  14. package/dist/app/app.js.map +1 -1
  15. package/dist/app/scriptregistry.js +16 -53
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +2 -0
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +22 -0
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/blitter/bilateralblur.js +3 -1
  22. package/dist/blitter/bilateralblur.js.map +1 -1
  23. package/dist/blitter/blitter.js +3 -3
  24. package/dist/blitter/blitter.js.map +1 -1
  25. package/dist/camera/camera.js +398 -45
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/camera/perspectivecamera.js +69 -2
  28. package/dist/camera/perspectivecamera.js.map +1 -1
  29. package/dist/index.d.ts +9113 -8740
  30. package/dist/index.js +10 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/material/blinn.js +1 -1
  33. package/dist/material/blinn.js.map +1 -1
  34. package/dist/material/lambert.js +3 -3
  35. package/dist/material/lambert.js.map +1 -1
  36. package/dist/material/material.js +8 -5
  37. package/dist/material/material.js.map +1 -1
  38. package/dist/material/meshmaterial.js +17 -10
  39. package/dist/material/meshmaterial.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  41. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  43. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
  45. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
  47. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  48. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
  49. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  50. package/dist/material/mixins/lit.js +33 -11
  51. package/dist/material/mixins/lit.js.map +1 -1
  52. package/dist/material/mixins/pbr/brdf.js +44 -12
  53. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  54. package/dist/material/mixins/pbr/common.js +149 -14
  55. package/dist/material/mixins/pbr/common.js.map +1 -1
  56. package/dist/material/mtoon.js +7 -4
  57. package/dist/material/mtoon.js.map +1 -1
  58. package/dist/material/pbrblueprint.js +5 -1
  59. package/dist/material/pbrblueprint.js.map +1 -1
  60. package/dist/material/pbrmr.js +1 -1
  61. package/dist/material/pbrmr.js.map +1 -1
  62. package/dist/material/pbrsg.js +1 -1
  63. package/dist/material/pbrsg.js.map +1 -1
  64. package/dist/material/shader/helper.js +512 -334
  65. package/dist/material/shader/helper.js.map +1 -1
  66. package/dist/material/skin.js +2 -2
  67. package/dist/material/skin.js.map +1 -1
  68. package/dist/material/terrain-cm.js +5 -5
  69. package/dist/material/terrain-cm.js.map +1 -1
  70. package/dist/material/water.js +6 -4
  71. package/dist/material/water.js.map +1 -1
  72. package/dist/posteffect/bloom.js +54 -4
  73. package/dist/posteffect/bloom.js.map +1 -1
  74. package/dist/posteffect/compositor.js +41 -0
  75. package/dist/posteffect/compositor.js.map +1 -1
  76. package/dist/posteffect/posteffect.js +35 -0
  77. package/dist/posteffect/posteffect.js.map +1 -1
  78. package/dist/posteffect/sao.js +7 -6
  79. package/dist/posteffect/sao.js.map +1 -1
  80. package/dist/posteffect/skinsss.js +3 -3
  81. package/dist/posteffect/skinsss.js.map +1 -1
  82. package/dist/posteffect/ssgi.js +988 -436
  83. package/dist/posteffect/ssgi.js.map +1 -1
  84. package/dist/posteffect/ssr.js +83 -45
  85. package/dist/posteffect/ssr.js.map +1 -1
  86. package/dist/posteffect/sss.js +18 -15
  87. package/dist/posteffect/sss.js.map +1 -1
  88. package/dist/posteffect/taa.js +5 -4
  89. package/dist/posteffect/taa.js.map +1 -1
  90. package/dist/posteffect/tonemap.js +15 -3
  91. package/dist/posteffect/tonemap.js.map +1 -1
  92. package/dist/render/abuffer_oit.js +2 -2
  93. package/dist/render/abuffer_oit.js.map +1 -1
  94. package/dist/render/cluster_light.js +22 -16
  95. package/dist/render/cluster_light.js.map +1 -1
  96. package/dist/render/drawable_mixin.js +8 -5
  97. package/dist/render/drawable_mixin.js.map +1 -1
  98. package/dist/render/dualdepthpeeling_oit.js +10 -5
  99. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  100. package/dist/render/envlight.js +298 -5
  101. package/dist/render/envlight.js.map +1 -1
  102. package/dist/render/gpu_picking.js +7 -5
  103. package/dist/render/gpu_picking.js.map +1 -1
  104. package/dist/render/hzb.js +28 -19
  105. package/dist/render/hzb.js.map +1 -1
  106. package/dist/render/lightpass.js +18 -4
  107. package/dist/render/lightpass.js.map +1 -1
  108. package/dist/render/render_queue.js +37 -4
  109. package/dist/render/render_queue.js.map +1 -1
  110. package/dist/render/renderer.js +8 -3
  111. package/dist/render/renderer.js.map +1 -1
  112. package/dist/render/rendergraph/blackboard.js +20 -48
  113. package/dist/render/rendergraph/blackboard.js.map +1 -1
  114. package/dist/render/rendergraph/device_pool_allocator.js +18 -58
  115. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  116. package/dist/render/rendergraph/executor.js +89 -115
  117. package/dist/render/rendergraph/executor.js.map +1 -1
  118. package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
  119. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  120. package/dist/render/rendergraph/frame_graph_context.js +1 -1
  121. package/dist/render/rendergraph/frame_graph_context.js.map +1 -1
  122. package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
  123. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
  124. package/dist/render/rendergraph/history_resource_manager.js +74 -140
  125. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  126. package/dist/render/rendergraph/history_resources.js +7 -5
  127. package/dist/render/rendergraph/history_resources.js.map +1 -1
  128. package/dist/render/rendergraph/render_context.js +19 -0
  129. package/dist/render/rendergraph/render_context.js.map +1 -0
  130. package/dist/render/rendergraph/render_pipeline.js +315 -0
  131. package/dist/render/rendergraph/render_pipeline.js.map +1 -0
  132. package/dist/render/rendergraph/rendergraph.js +158 -141
  133. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  134. package/dist/render/rendergraph/scene_render_context.js +267 -0
  135. package/dist/render/rendergraph/scene_render_context.js.map +1 -0
  136. package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
  137. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
  138. package/dist/render/rendergraph/types.js +19 -31
  139. package/dist/render/rendergraph/types.js.map +1 -1
  140. package/dist/render/renderpass.js +3 -3
  141. package/dist/render/renderpass.js.map +1 -1
  142. package/dist/render/shadow_mask_pass.js +7 -6
  143. package/dist/render/shadow_mask_pass.js.map +1 -1
  144. package/dist/render/sky.js +257 -95
  145. package/dist/render/sky.js.map +1 -1
  146. package/dist/render/weightedblended_oit.js +4 -3
  147. package/dist/render/weightedblended_oit.js.map +1 -1
  148. package/dist/scene/basesprite.js +2 -0
  149. package/dist/scene/basesprite.js.map +1 -1
  150. package/dist/scene/batchgroup.js +10 -0
  151. package/dist/scene/batchgroup.js.map +1 -1
  152. package/dist/scene/environment.js +61 -2
  153. package/dist/scene/environment.js.map +1 -1
  154. package/dist/scene/light.js +178 -10
  155. package/dist/scene/light.js.map +1 -1
  156. package/dist/scene/meshdrawable.js +89 -2
  157. package/dist/scene/meshdrawable.js.map +1 -1
  158. package/dist/scene/msdftext.js +2 -0
  159. package/dist/scene/msdftext.js.map +1 -1
  160. package/dist/scene/msdftextsprite.js +2 -0
  161. package/dist/scene/msdftextsprite.js.map +1 -1
  162. package/dist/scene/particlesys.js +2 -0
  163. package/dist/scene/particlesys.js.map +1 -1
  164. package/dist/scene/scene.js +34 -1
  165. package/dist/scene/scene.js.map +1 -1
  166. package/dist/scene/terrain-cm/grass.js +2 -1
  167. package/dist/scene/terrain-cm/grass.js.map +1 -1
  168. package/dist/scene/terrain-cm/terrain-cm.js +2 -0
  169. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  170. package/dist/scene/water.js +2 -0
  171. package/dist/scene/water.js.map +1 -1
  172. package/dist/shaders/atmosphere.js +5 -4
  173. package/dist/shaders/atmosphere.js.map +1 -1
  174. package/dist/shaders/fog.js +10 -3
  175. package/dist/shaders/fog.js.map +1 -1
  176. package/dist/shaders/shadow.js +149 -40
  177. package/dist/shaders/shadow.js.map +1 -1
  178. package/dist/shaders/ssgi_reprojection.js +118 -0
  179. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  180. package/dist/shaders/ssr.js +322 -154
  181. package/dist/shaders/ssr.js.map +1 -1
  182. package/dist/shadow/esm.js +10 -7
  183. package/dist/shadow/esm.js.map +1 -1
  184. package/dist/shadow/pcf_opt.js +12 -12
  185. package/dist/shadow/pcf_opt.js.map +1 -1
  186. package/dist/shadow/pcf_pd.js +12 -12
  187. package/dist/shadow/pcf_pd.js.map +1 -1
  188. package/dist/shadow/pcss.js +16 -11
  189. package/dist/shadow/pcss.js.map +1 -1
  190. package/dist/shadow/shadow_impl.js +29 -3
  191. package/dist/shadow/shadow_impl.js.map +1 -1
  192. package/dist/shadow/shadowmapper.js +5 -2
  193. package/dist/shadow/shadowmapper.js.map +1 -1
  194. package/dist/shadow/ssm.js +13 -13
  195. package/dist/shadow/ssm.js.map +1 -1
  196. package/dist/shadow/vsm.js +7 -7
  197. package/dist/shadow/vsm.js.map +1 -1
  198. package/dist/utility/physical.js +74 -0
  199. package/dist/utility/physical.js.map +1 -0
  200. package/dist/utility/rendermipmap.js +2 -2
  201. package/dist/utility/rendermipmap.js.map +1 -1
  202. package/dist/utility/serialization/manager.js +3 -1
  203. package/dist/utility/serialization/manager.js.map +1 -1
  204. package/dist/utility/serialization/scene/animation.js +3 -1
  205. package/dist/utility/serialization/scene/animation.js.map +1 -1
  206. package/dist/utility/serialization/scene/batch.js +3 -1
  207. package/dist/utility/serialization/scene/batch.js.map +1 -1
  208. package/dist/utility/serialization/scene/camera.js +598 -2
  209. package/dist/utility/serialization/scene/camera.js.map +1 -1
  210. package/dist/utility/serialization/scene/light.js +180 -9
  211. package/dist/utility/serialization/scene/light.js.map +1 -1
  212. package/dist/utility/serialization/scene/material.js +43 -3
  213. package/dist/utility/serialization/scene/material.js.map +1 -1
  214. package/dist/utility/serialization/scene/mesh.js +3 -1
  215. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  216. package/dist/utility/serialization/scene/node.js +3 -1
  217. package/dist/utility/serialization/scene/node.js.map +1 -1
  218. package/dist/utility/serialization/scene/particle.js +3 -1
  219. package/dist/utility/serialization/scene/particle.js.map +1 -1
  220. package/dist/utility/serialization/scene/primitive.js +2 -0
  221. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  222. package/dist/utility/serialization/scene/scene.js +70 -0
  223. package/dist/utility/serialization/scene/scene.js.map +1 -1
  224. package/dist/utility/serialization/scene/sprite.js +3 -1
  225. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  226. package/dist/utility/serialization/scene/terrain.js +3 -1
  227. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  228. package/dist/utility/serialization/scene/text.js +3 -0
  229. package/dist/utility/serialization/scene/text.js.map +1 -1
  230. package/dist/utility/serialization/scene/water.js +3 -1
  231. package/dist/utility/serialization/scene/water.js.map +1 -1
  232. package/dist/values.js +59 -65
  233. package/dist/values.js.map +1 -1
  234. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"pbrmetallicroughness.js","sources":["../../../../src/material/mixins/lightmodel/pbrmetallicroughness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport {\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n MaterialVaryingFlags,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../../values';\r\n\r\n/**\r\n * Reflection modes for PBRMetallicRoughness material\r\n * @public\r\n */\r\nexport type PBRReflectionMode = 'none' | 'ggx' | 'anisotropic' | 'glint';\r\n\r\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n};\r\n\r\n/**\r\n * Interface for PBRMetallicRoughness lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRMetallicRoughness = {\r\n metallic: number;\r\n roughness: number;\r\n specularFactor: Vector4;\r\n reflectionMode: PBRReflectionMode;\r\n anisotropy: number;\r\n anisotropyDirection: number;\r\n anisotropyDirectionScaleBias: Vector2;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp,\r\n outSSSTransmission?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateSpecularFactor(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<\r\n ['metallicRoughness', 'occlusion', 'specular', 'specularColor', 'anisotropyDirection']\r\n >;\r\n\r\n/**\r\n * PBRMetallicRoughness lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRMetallicRoughness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrMetallicRoughnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n }\r\n const S = applyMaterialMixins(\r\n BaseCls,\r\n mixinPBRCommon,\r\n mixinLight,\r\n mixinTextureProps('metallicRoughness'),\r\n mixinTextureProps('specular'),\r\n mixinTextureProps('specularColor'),\r\n mixinTextureProps('anisotropyDirection')\r\n );\r\n const METALLIC_UNIFORM = S.defineInstanceUniform('metallic', 'float', 'Metallic');\r\n const ROUGHNESS_UNIFORM = S.defineInstanceUniform('roughness', 'float', 'Roughness');\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgba', 'SpecularFactor');\r\n\r\n return class extends S {\r\n static readonly pbrMetallicRoughnessMixed = true;\r\n private _metallic: number;\r\n private _roughness: number;\r\n private readonly _specularFactor: Vector4;\r\n private _reflectionMode: PBRReflectionMode;\r\n private _anisotropy: number;\r\n private _anisotropyDirection: number;\r\n private readonly _anisotropyDirectionScaleBias: Vector2;\r\n constructor() {\r\n super();\r\n this._metallic = 1;\r\n this._roughness = 1;\r\n this._specularFactor = Vector4.one();\r\n this._reflectionMode = 'ggx';\r\n this._anisotropy = 0.75;\r\n this._anisotropyDirection = 0;\r\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.metallic = other.metallic;\r\n this.roughness = other.roughness;\r\n this.specularFactor = other.specularFactor;\r\n this.reflectionMode = other.reflectionMode;\r\n this.anisotropy = other.anisotropy;\r\n this.anisotropyDirection = other.anisotropyDirection;\r\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\r\n }\r\n get metallic() {\r\n return this._metallic;\r\n }\r\n set metallic(val) {\r\n if (val !== this._metallic) {\r\n this._metallic = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get roughness() {\r\n return this._roughness;\r\n }\r\n set roughness(val) {\r\n if (val !== this._roughness) {\r\n this._roughness = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get specularFactor(): Immutable<Vector4> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector4>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp,\r\n outTransmissionColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this as any;\r\n const funcName = `Z_PBRMR_DirectLighting${outDiffuseColor ? '_D' : ''}${outTransmissionColor ? '_T' : ''}`;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : []),\r\n ...(outTransmissionColor ? [pb.vec3('outTransmissionColor').inout()] : [])\r\n ],\r\n function () {\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.anisotropy = this.zAnisotropy;\r\n this.$l.anisotropyDirection = this.zAnisotropyDirection;\r\n this.$l.anisotropyDirectionScaleBias = this.zAnisotropyDirectionScaleBias;\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.specularLightDir = this.L;\r\n this.$if(pb.greaterThan(this.sourceRadiusFactor, 0), function () {\r\n this.$l.reflectionVec = pb.reflect(pb.neg(this.viewVec), this.normal);\r\n this.$l.centerToRay = pb.sub(\r\n pb.mul(this.reflectionVec, pb.dot(this.L, this.reflectionVec)),\r\n this.L\r\n );\r\n this.$l.centerToRayLength = pb.length(this.centerToRay);\r\n this.$l.sphereLightBlend = pb.clamp(\r\n pb.div(this.sourceRadiusFactor, pb.max(this.centerToRayLength, 0.0001)),\r\n 0,\r\n 1\r\n );\r\n this.specularLightDir = pb.normalize(\r\n pb.add(this.L, pb.mul(this.centerToRay, this.sphereLightBlend))\r\n );\r\n });\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.specularLightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.H), 0, 1);\r\n this.$l.specularNoL = pb.clamp(pb.dot(this.normal, this.specularLightDir), 0, 1);\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n if (that.iridescence) {\r\n this.$l.F = pb.mix(\r\n this.schlickFresnel,\r\n this.data.iridescenceFresnel,\r\n this.data.iridescenceFactor.x\r\n );\r\n } else {\r\n this.$l.F = this.schlickFresnel;\r\n }\r\n if (that.sheen) {\r\n this.$l.sheenAlbedoScaling = that.getSheenAlbedoScalingForDirect(\r\n this,\r\n this.NoV,\r\n this.NoL,\r\n this.data.sheenColor,\r\n this.data.sheenRoughness\r\n );\r\n }\r\n this.$l.alphaRoughness = pb.mul(this.data.roughness, this.data.roughness);\r\n this.$l.specularRoughness = pb.sqrt(this.alphaRoughness);\r\n this.$l.Dggx = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.D = this.Dggx;\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(this.anisotropyDirection, Math.PI / 180);\r\n if (that.anisotropyDirectionTexture) {\r\n this.$l.dirSample = that.sampleAnisotropyDirectionTexture(this);\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.dirSample.r, this.anisotropyDirectionScaleBias.x),\r\n this.anisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n }\r\n this.$l.anisoAngle = this.dirAngle;\r\n this.$l.up = pb.vec3(0, 1, 0);\r\n this.$l.t0 = pb.normalize(pb.cross(this.up, this.normal));\r\n this.$if(pb.lessThan(pb.length(this.t0), 0.001), function () {\r\n this.t0 = pb.normalize(pb.cross(pb.vec3(1, 0, 0), this.normal));\r\n });\r\n this.$l.b0 = pb.normalize(pb.cross(this.normal, this.t0));\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.anisoAngle)), pb.mul(this.b0, pb.sin(this.anisoAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.anisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.anisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n }).$elseif(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.Dggx, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.specularNoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n this.D,\r\n this.V,\r\n this.F,\r\n this.data.specularWeight,\r\n this.specularScale\r\n );\r\n if (that.sheen) {\r\n this.specular = pb.mul(this.specular, this.sheenAlbedoScaling);\r\n }\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n if (that.iridescence) {\r\n this.$l.iridescenceFresnelMax = pb.vec3(\r\n pb.max(\r\n pb.max(this.data.iridescenceFresnel.r, this.data.iridescenceFresnel.g),\r\n this.data.iridescenceFresnel.b\r\n )\r\n );\r\n this.F = pb.mix(this.schlickFresnel, this.iridescenceFresnelMax, this.data.iridescenceFactor.x);\r\n }\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), pb.mul(this.F, this.data.specularWeight)),\r\n pb.div(this.data.diffuse.rgb, Math.PI)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n if (\r\n (that.transmission || outTransmissionColor) &&\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n this.$l.transmissionRay = that.getVolumeTransmissionRay(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.data.thicknessFactor,\r\n this.data.f0.a\r\n );\r\n this.$l.pointToLight = pb.normalize(pb.sub(this.L, this.transmissionRay));\r\n this.$l.transmittedLight = pb.mul(\r\n this.lightColor,\r\n that.getPunctualRadianceTransmission(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pointToLight,\r\n this.alphaRoughness,\r\n this.data.f0.rgb,\r\n this.data.f90.rgb,\r\n this.data.diffuse.rgb,\r\n this.data.f0.a\r\n )\r\n );\r\n this.transmittedLight = that.applyVolumeAttenuation(\r\n this,\r\n this.transmittedLight,\r\n pb.length(this.transmissionRay),\r\n this.data.attenuationColor,\r\n this.data.attenuationDistance\r\n );\r\n this.$l.transmissionContribution = pb.mul(this.transmittedLight, this.data.transmissionFactor);\r\n if (outTransmissionColor) {\r\n this.outTransmissionColor = pb.add(this.outTransmissionColor, this.transmissionContribution);\r\n }\r\n if (that.transmission) {\r\n this.diffuse = pb.mix(this.diffuse, this.transmittedLight, this.data.transmissionFactor);\r\n }\r\n }\r\n if (that.sheen) {\r\n this.diffuse = pb.mul(this.diffuse, this.sheenAlbedoScaling);\r\n }\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.diffuse);\r\n }\r\n if (that.sheen) {\r\n this.$l.sheenD = that.D_Charlie(this, this.NoH, this.data.sheenRoughness);\r\n this.$l.sheenV = that.V_Sheen(this, this.NoL, this.NoV, this.data.sheenRoughness);\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.lightColor, this.data.sheenColor, this.sheenD, this.sheenV)\r\n );\r\n }\r\n if (that.clearcoat) {\r\n this.$l.clearcoatAlphaRoughness = pb.mul(this.data.ccFactor.y, this.data.ccFactor.y);\r\n this.alphaRoughness = this.clearcoatAlphaRoughness;\r\n this.NoH = pb.clamp(pb.dot(this.data.ccNormal, this.H), 0, 1);\r\n this.NoL = pb.clamp(pb.dot(this.data.ccNormal, this.specularLightDir), 0, 1);\r\n this.ccF0 = pb.vec3(pb.pow(pb.div(pb.sub(this.data.f0.a, 1), pb.add(this.data.f0.a, 1)), 2));\r\n this.F = that.fresnelSchlick(this, this.VoH, this.ccF0, pb.vec3(1));\r\n this.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.V = that.visGGX(this, this.data.ccNoV, this.NoL, this.alphaRoughness);\r\n this.outColor = pb.add(this.outColor, pb.mul(this.D, this.V, this.F, this.data.ccFactor.x));\r\n }\r\n });\r\n }\r\n );\r\n if (outDiffuseColor && outTransmissionColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor,\r\n outTransmissionColor\r\n );\r\n } else if (outDiffuseColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor\r\n );\r\n } else if (outTransmissionColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outTransmissionColor\r\n );\r\n } else {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n }\r\n get reflectionMode() {\r\n return this._reflectionMode;\r\n }\r\n set reflectionMode(val: PBRReflectionMode) {\r\n if (val !== this._reflectionMode) {\r\n this._reflectionMode = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropy() {\r\n return this._anisotropy;\r\n }\r\n set anisotropy(val) {\r\n const clamped = Math.max(-0.95, Math.min(0.95, val));\r\n if (clamped !== this._anisotropy) {\r\n this._anisotropy = clamped;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirection() {\r\n return this._anisotropyDirection;\r\n }\r\n set anisotropyDirection(val) {\r\n if (val !== this._anisotropyDirection) {\r\n this._anisotropyDirection = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\r\n return this._anisotropyDirectionScaleBias;\r\n }\r\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\r\n this._anisotropyDirectionScaleBias.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n calculateAnisotropyDirectionScaleBias(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirectionScaleBias as PBShaderExp;\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp,\r\n outSSSTransmission?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_PBRMetallicRoughnessLight${outRoughness ? '_R' : ''}${outSSSDiffuse ? '_D' : ''}${outSSSTransmission ? '_T' : ''}`;\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outSSSDiffuse ? [pb.vec4('outSSSDiffuse').out()] : []),\r\n ...(outSSSTransmission ? [pb.vec4('outSSSTransmission').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.sssDiffuseColor = pb.vec3(0);\r\n this.$l.sssTransmissionColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? that.calculateEmissiveColor(this) : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness && outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness,\r\n this.sssDiffuseColor\r\n );\r\n } else if (outRoughness && outSSSTransmission) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else if (outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n undefined,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.rectColorIntensity = colorIntensity;\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(posRange.xyz, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.normal, this.rectL), 0, 1);\r\n this.$l.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));\r\n this.rectColorIntensity = pb.vec4(\r\n colorIntensity.rgb,\r\n pb.mul(colorIntensity.a, this.rectShadow)\r\n );\r\n }\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n this.rectColorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n if (outSSSDiffuse) {\r\n if (outSSSTransmission) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor,\r\n this.sssTransmissionColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n }\r\n } else if (outSSSTransmission) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n undefined,\r\n this.sssTransmissionColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n });\r\n if (outSSSDiffuse) {\r\n this.outSSSDiffuse = pb.vec4(this.sssDiffuseColor, this.albedo.a);\r\n }\r\n if (outSSSTransmission) {\r\n this.outSSSTransmission = pb.vec4(this.sssTransmissionColor, this.albedo.a);\r\n }\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness && outSSSDiffuse && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSDiffuse, outSSSTransmission)\r\n : outRoughness && outSSSDiffuse\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSDiffuse)\r\n : outRoughness && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSTransmission)\r\n : outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : outSSSDiffuse && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outSSSDiffuse, outSSSTransmission)\r\n : outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outSSSDiffuse)\r\n : outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outSSSTransmission)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zMetallic = this.getInstancedUniform(scope, METALLIC_UNIFORM);\r\n scope.$outputs.zRoughness = this.getInstancedUniform(scope, ROUGHNESS_UNIFORM);\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n const pb = scope.$builder;\r\n if (!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zMetallic = pb.float().uniform(2);\r\n scope.zRoughness = pb.float().uniform(2);\r\n scope.zSpecularFactor = pb.vec4().uniform(2);\r\n }\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n scope.zAnisotropy = pb.float().uniform(2);\r\n scope.zAnisotropyDirection = pb.float().uniform(2);\r\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zMetallic', this._metallic);\r\n bindGroup.setValue('zRoughness', this._roughness);\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n }\r\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\r\n bindGroup.setValue('zAnisotropy', this._anisotropy);\r\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\r\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\r\n }\r\n }\r\n calculateMetallic(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zMetallic : scope.zMetallic) as PBShaderExp;\r\n }\r\n calculateRoughness(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zRoughness : scope.zRoughness) as PBShaderExp;\r\n }\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const metallic = this.calculateMetallic(scope, albedo, normal);\r\n const roughness = this.calculateRoughness(scope, albedo, normal);\r\n const specularFactor = this.calculateSpecularFactor(scope, albedo, normal);\r\n const reflectionMode = this.calculateReflectionMode(scope) as PBShaderExp;\r\n if (this.metallicRoughnessTexture) {\r\n scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);\r\n data.metallic = pb.mul(metallic, scope.metallicRoughnessSample.z);\r\n data.roughness = pb.mul(roughness, scope.metallicRoughnessSample.y);\r\n } else {\r\n data.metallic = metallic;\r\n data.roughness = roughness;\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n if (this.specularColorTexture) {\r\n scope.$l.specularColor = pb.mul(specularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);\r\n } else {\r\n scope.$l.specularColor = specularFactor.rgb;\r\n }\r\n if (this.specularTexture) {\r\n data.specularWeight = pb.mul(specularFactor.a, this.sampleSpecularTexture(scope).a);\r\n } else {\r\n data.specularWeight = specularFactor.a;\r\n }\r\n data.specularWeight = pb.mul(\r\n data.specularWeight,\r\n pb.float(pb.notEqual(reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n data.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(this.getF0(scope).rgb, scope.specularColor), pb.vec3(1)),\r\n albedo.rgb,\r\n data.metallic\r\n ),\r\n this.getF0(scope).a\r\n );\r\n data.f90 = pb.vec3(1);\r\n data.diffuse = pb.vec4(pb.mix(albedo.rgb, pb.vec3(0), data.metallic), albedo.a);\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n }\r\n calculateReflectionMode(scope: PBInsideFunctionScope) {\r\n return scope.zReflectionMode as PBShaderExp;\r\n }\r\n calculateAnisotropy(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropy as PBShaderExp;\r\n }\r\n calculateAnisotropyDirection(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirection as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRMetallicRoughness","BaseCls","pbrMetallicRoughnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","METALLIC_UNIFORM","defineInstanceUniform","ROUGHNESS_UNIFORM","SPECULAR_FACTOR_UNFORM","_metallic","_roughness","_specularFactor","_reflectionMode","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector4","one","Vector2","copyFrom","other","metallic","roughness","specularFactor","reflectionMode","anisotropy","anisotropyDirection","anisotropyDirectionScaleBias","val","uniformChanged","equalsTo","set","directLighting","scope","lightDir","lightColor","normal","viewVec","commonData","diffuseScale","specularScale","sourceRadiusFactor","outColor","outDiffuseColor","outTransmissionColor","pb","$builder","that","funcName","func","vec3","getCommonDatasStruct","float","inout","$l","zReflectionMode","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","NoL","clamp","dot","L","NoV","$if","greaterThan","specularLightDir","reflectionVec","reflect","neg","centerToRay","sub","mul","centerToRayLength","length","sphereLightBlend","div","max","normalize","add","H","NoH","specularNoL","VoH","schlickFresnel","fresnelSchlick","data","f0","rgb","f90","iridescence","F","mix","iridescenceFresnel","iridescenceFactor","x","sheen","sheenAlbedoScaling","getSheenAlbedoScalingForDirect","sheenColor","sheenRoughness","alphaRoughness","specularRoughness","sqrt","Dggx","distributionGGX","D","equal","dirAngle","Math","PI","anisotropyDirectionTexture","dirSample","sampleAnisotropyDirectionTexture","r","y","anisoAngle","up","t0","cross","lessThan","b0","tangent","cos","sin","bitangent","ToH","BoH","at","ab","anisoDenom","pow","$elseif","glintNoise","fract","glintMask","smoothStep","V","visGGX","specular","specularWeight","iridescenceFresnelMax","g","b","diffuseBRDF","diffuse","transmission","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","transmissionRay","getVolumeTransmissionRay","thicknessFactor","a","pointToLight","transmittedLight","getPunctualRadianceTransmission","applyVolumeAttenuation","attenuationColor","attenuationDistance","transmissionContribution","transmissionFactor","sheenD","D_Charlie","sheenV","V_Sheen","clearcoat","clearcoatAlphaRoughness","ccFactor","ccNormal","ccF0","ccNoV","$g","clamped","min","calculateAnisotropyDirectionScaleBias","PBRLight","worldPos","albedo","TBN","outRoughness","outSSSDiffuse","outSSSTransmission","baseLightPass","lightBlending","mat3","vec4","out","pbrData","getCommonData","lightingColor","sssDiffuseColor","sssTransmissionColor","emissiveColor","calculateEmissiveColor","indirectLighting","undefined","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","LIGHT_TYPE_RECT","rectColorIntensity","rectL","xyz","rectNoL","rectShadow","calculateShadow","directRectLight","$else","LIGHT_TYPE_POINT","z","distance","lightAtten","calculateLightAttenuation","calculateLightDirection","$return","getGlobalScope","vertexShader","needFragmentColor","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zMetallic","getInstancedUniform","zRoughness","zSpecularFactor","fragmentShader","uniform","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","calculateMetallic","_albedo","_normal","instancing","$inputs","calculateRoughness","calculateSpecularFactor","calculateCommonData","calculateReflectionMode","metallicRoughnessTexture","metallicRoughnessSample","sampleMetallicRoughnessTexture","ShaderHelper","getCameraRoughnessFactor","specularColorTexture","specularColor","sampleSpecularColorTexture","specularTexture","sampleSpecularTexture","notEqual","getF0","calculateAnisotropy","calculateAnisotropyDirection"],"mappings":"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"}
1
+ {"version":3,"file":"pbrmetallicroughness.js","sources":["../../../../src/material/mixins/lightmodel/pbrmetallicroughness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport {\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n MaterialVaryingFlags,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../../values';\r\n\r\n/**\r\n * Reflection modes for PBRMetallicRoughness material\r\n * @public\r\n */\r\nexport type PBRReflectionMode = 'none' | 'ggx' | 'anisotropic' | 'glint';\r\n\r\nconst PBR_REFLECTION_MODE: Record<PBRReflectionMode, number> = {\r\n none: 0,\r\n ggx: 1,\r\n anisotropic: 2,\r\n glint: 3\r\n};\r\n\r\n/**\r\n * Interface for PBRMetallicRoughness lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinPBRMetallicRoughness = {\r\n metallic: number;\r\n roughness: number;\r\n specularFactor: Vector4;\r\n reflectionMode: PBRReflectionMode;\r\n anisotropy: number;\r\n anisotropyDirection: number;\r\n anisotropyDirectionScaleBias: Vector2;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp,\r\n outSSSTransmission?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateMetallic(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateRoughness(scope: PBInsideFunctionScope, albedo: PBShaderExp, normal: PBShaderExp): PBShaderExp;\r\n calculateSpecularFactor(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<\r\n ['metallicRoughness', 'occlusion', 'specular', 'specularColor', 'anisotropyDirection']\r\n >;\r\n\r\n/**\r\n * PBRMetallicRoughness lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinPBRMetallicRoughness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrMetallicRoughnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n }\r\n const S = applyMaterialMixins(\r\n BaseCls,\r\n mixinPBRCommon,\r\n mixinLight,\r\n mixinTextureProps('metallicRoughness'),\r\n mixinTextureProps('specular'),\r\n mixinTextureProps('specularColor'),\r\n mixinTextureProps('anisotropyDirection')\r\n );\r\n const METALLIC_UNIFORM = S.defineInstanceUniform('metallic', 'float', 'Metallic');\r\n const ROUGHNESS_UNIFORM = S.defineInstanceUniform('roughness', 'float', 'Roughness');\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgba', 'SpecularFactor');\r\n\r\n return class extends S {\r\n static readonly pbrMetallicRoughnessMixed = true;\r\n private _metallic: number;\r\n private _roughness: number;\r\n private readonly _specularFactor: Vector4;\r\n private _reflectionMode: PBRReflectionMode;\r\n private _anisotropy: number;\r\n private _anisotropyDirection: number;\r\n private readonly _anisotropyDirectionScaleBias: Vector2;\r\n constructor() {\r\n super();\r\n this._metallic = 1;\r\n this._roughness = 1;\r\n this._specularFactor = Vector4.one();\r\n this._reflectionMode = 'ggx';\r\n this._anisotropy = 0.75;\r\n this._anisotropyDirection = 0;\r\n this._anisotropyDirectionScaleBias = new Vector2(1, 0);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.metallic = other.metallic;\r\n this.roughness = other.roughness;\r\n this.specularFactor = other.specularFactor;\r\n this.reflectionMode = other.reflectionMode;\r\n this.anisotropy = other.anisotropy;\r\n this.anisotropyDirection = other.anisotropyDirection;\r\n this.anisotropyDirectionScaleBias = other.anisotropyDirectionScaleBias;\r\n }\r\n get metallic() {\r\n return this._metallic;\r\n }\r\n set metallic(val) {\r\n if (val !== this._metallic) {\r\n this._metallic = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get roughness() {\r\n return this._roughness;\r\n }\r\n set roughness(val) {\r\n if (val !== this._roughness) {\r\n this._roughness = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get specularFactor(): Immutable<Vector4> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector4>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n directLighting(\r\n scope: PBInsideFunctionScope,\r\n lightDir: PBShaderExp,\r\n lightColor: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n commonData: PBShaderExp,\r\n diffuseScale: PBShaderExp,\r\n specularScale: PBShaderExp,\r\n sourceRadiusFactor: PBShaderExp,\r\n outColor: PBShaderExp,\r\n outDiffuseColor?: PBShaderExp,\r\n outTransmissionColor?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this as any;\r\n const funcName = `Z_PBRMR_DirectLighting${outDiffuseColor ? '_D' : ''}${outTransmissionColor ? '_T' : ''}`;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('L'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n that.getCommonDatasStruct(scope)('data'),\r\n pb.float('diffuseScale'),\r\n pb.float('specularScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outColor').inout(),\r\n ...(outDiffuseColor ? [pb.vec3('outDiffuseColor').inout()] : []),\r\n ...(outTransmissionColor ? [pb.vec3('outTransmissionColor').inout()] : [])\r\n ],\r\n function () {\r\n this.$l.reflectionMode = this.zReflectionMode;\r\n this.$l.anisotropy = this.zAnisotropy;\r\n this.$l.anisotropyDirection = this.zAnisotropyDirection;\r\n this.$l.anisotropyDirectionScaleBias = this.zAnisotropyDirectionScaleBias;\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.specularLightDir = this.L;\r\n this.$if(pb.greaterThan(this.sourceRadiusFactor, 0), function () {\r\n this.$l.reflectionVec = pb.reflect(pb.neg(this.viewVec), this.normal);\r\n this.$l.centerToRay = pb.sub(\r\n pb.mul(this.reflectionVec, pb.dot(this.L, this.reflectionVec)),\r\n this.L\r\n );\r\n this.$l.centerToRayLength = pb.length(this.centerToRay);\r\n this.$l.sphereLightBlend = pb.clamp(\r\n pb.div(this.sourceRadiusFactor, pb.max(this.centerToRayLength, 0.0001)),\r\n 0,\r\n 1\r\n );\r\n this.specularLightDir = pb.normalize(\r\n pb.add(this.L, pb.mul(this.centerToRay, this.sphereLightBlend))\r\n );\r\n });\r\n this.$l.H = pb.normalize(pb.add(this.viewVec, this.specularLightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.H), 0, 1);\r\n this.$l.specularNoL = pb.clamp(pb.dot(this.normal, this.specularLightDir), 0, 1);\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewVec, this.H), 0, 1);\r\n this.$l.schlickFresnel = that.fresnelSchlick(this, this.VoH, this.data.f0.rgb, this.data.f90);\r\n if (that.iridescence) {\r\n this.$l.F = pb.mix(\r\n this.schlickFresnel,\r\n this.data.iridescenceFresnel,\r\n this.data.iridescenceFactor.x\r\n );\r\n } else {\r\n this.$l.F = this.schlickFresnel;\r\n }\r\n if (that.sheen) {\r\n this.$l.sheenAlbedoScaling = that.getSheenAlbedoScalingForDirect(\r\n this,\r\n this.NoV,\r\n this.NoL,\r\n this.data.sheenColor,\r\n this.data.sheenRoughness\r\n );\r\n }\r\n this.$l.alphaRoughness = pb.mul(this.data.roughness, this.data.roughness);\r\n this.$l.specularRoughness = pb.sqrt(this.alphaRoughness);\r\n this.$l.Dggx = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.D = this.Dggx;\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.anisotropic), function () {\r\n this.$l.dirAngle = pb.mul(this.anisotropyDirection, Math.PI / 180);\r\n if (that.anisotropyDirectionTexture) {\r\n this.$l.dirSample = that.sampleAnisotropyDirectionTexture(this);\r\n this.$l.dirAngle = pb.mul(\r\n pb.add(\r\n pb.mul(this.dirSample.r, this.anisotropyDirectionScaleBias.x),\r\n this.anisotropyDirectionScaleBias.y\r\n ),\r\n Math.PI / 180\r\n );\r\n }\r\n this.$l.anisoAngle = this.dirAngle;\r\n this.$l.up = pb.vec3(0, 1, 0);\r\n this.$l.t0 = pb.normalize(pb.cross(this.up, this.normal));\r\n this.$if(pb.lessThan(pb.length(this.t0), 0.001), function () {\r\n this.t0 = pb.normalize(pb.cross(pb.vec3(1, 0, 0), this.normal));\r\n });\r\n this.$l.b0 = pb.normalize(pb.cross(this.normal, this.t0));\r\n this.$l.tangent = pb.normalize(\r\n pb.add(pb.mul(this.t0, pb.cos(this.anisoAngle)), pb.mul(this.b0, pb.sin(this.anisoAngle)))\r\n );\r\n this.$l.bitangent = pb.normalize(pb.cross(this.normal, this.tangent));\r\n this.$l.ToH = pb.dot(this.tangent, this.H);\r\n this.$l.BoH = pb.dot(this.bitangent, this.H);\r\n this.$l.at = pb.max(pb.mul(this.alphaRoughness, pb.add(1, this.anisotropy)), 0.0001);\r\n this.$l.ab = pb.max(pb.mul(this.alphaRoughness, pb.sub(1, this.anisotropy)), 0.0001);\r\n this.$l.anisoDenom = pb.mul(\r\n Math.PI,\r\n this.at,\r\n this.ab,\r\n pb.pow(\r\n pb.add(\r\n pb.div(pb.mul(this.ToH, this.ToH), pb.mul(this.at, this.at)),\r\n pb.div(pb.mul(this.BoH, this.BoH), pb.mul(this.ab, this.ab)),\r\n pb.mul(this.NoH, this.NoH)\r\n ),\r\n 2\r\n )\r\n );\r\n this.D = pb.div(1, pb.max(this.anisoDenom, 0.0001));\r\n }).$elseif(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.glint), function () {\r\n this.$l.glintNoise = pb.fract(\r\n pb.mul(\r\n pb.sin(pb.add(pb.dot(this.H, pb.vec3(127.1, 311.7, 74.7)), pb.mul(this.NoH, 43.1))),\r\n 43758.5453\r\n )\r\n );\r\n this.$l.glintMask = pb.smoothStep(0.97, 1, this.glintNoise);\r\n this.D = pb.mul(this.Dggx, pb.add(1, pb.mul(this.glintMask, 8)));\r\n });\r\n this.$l.V = that.visGGX(this, this.NoV, this.specularNoL, this.alphaRoughness);\r\n this.$l.specular = pb.mul(\r\n this.lightColor,\r\n this.D,\r\n this.V,\r\n this.F,\r\n this.data.specularWeight,\r\n this.specularScale\r\n );\r\n if (that.sheen) {\r\n this.specular = pb.mul(this.specular, this.sheenAlbedoScaling);\r\n }\r\n this.$if(pb.equal(this.reflectionMode, PBR_REFLECTION_MODE.none), function () {\r\n this.specular = pb.vec3(0);\r\n });\r\n this.outColor = pb.add(this.outColor, this.specular);\r\n if (that.iridescence) {\r\n this.$l.iridescenceFresnelMax = pb.vec3(\r\n pb.max(\r\n pb.max(this.data.iridescenceFresnel.r, this.data.iridescenceFresnel.g),\r\n this.data.iridescenceFresnel.b\r\n )\r\n );\r\n this.F = pb.mix(this.schlickFresnel, this.iridescenceFresnelMax, this.data.iridescenceFactor.x);\r\n }\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), pb.mul(this.F, this.data.specularWeight)),\r\n pb.div(this.data.diffuse.rgb, Math.PI)\r\n );\r\n this.$l.diffuse = pb.mul(\r\n this.lightColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffuseScale\r\n );\r\n if (\r\n (that.transmission || outTransmissionColor) &&\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n this.$l.transmissionRay = that.getVolumeTransmissionRay(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.data.thicknessFactor,\r\n this.data.f0.a\r\n );\r\n this.$l.pointToLight = pb.normalize(pb.sub(this.L, this.transmissionRay));\r\n this.$l.transmittedLight = pb.mul(\r\n this.lightColor,\r\n that.getPunctualRadianceTransmission(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pointToLight,\r\n this.alphaRoughness,\r\n this.data.f0.rgb,\r\n this.data.f90.rgb,\r\n this.data.diffuse.rgb,\r\n this.data.f0.a\r\n )\r\n );\r\n this.transmittedLight = that.applyVolumeAttenuation(\r\n this,\r\n this.transmittedLight,\r\n pb.length(this.transmissionRay),\r\n this.data.attenuationColor,\r\n this.data.attenuationDistance\r\n );\r\n this.$l.transmissionContribution = pb.mul(this.transmittedLight, this.data.transmissionFactor);\r\n if (outTransmissionColor) {\r\n this.outTransmissionColor = pb.add(this.outTransmissionColor, this.transmissionContribution);\r\n }\r\n if (that.transmission) {\r\n this.diffuse = pb.mix(this.diffuse, this.transmittedLight, this.data.transmissionFactor);\r\n }\r\n }\r\n if (that.sheen) {\r\n this.diffuse = pb.mul(this.diffuse, this.sheenAlbedoScaling);\r\n }\r\n this.outColor = pb.add(this.outColor, this.diffuse);\r\n if (outDiffuseColor) {\r\n this.outDiffuseColor = pb.add(this.outDiffuseColor, this.diffuse);\r\n }\r\n if (that.sheen) {\r\n this.$l.sheenD = that.D_Charlie(this, this.NoH, this.data.sheenRoughness);\r\n this.$l.sheenV = that.V_Sheen(this, this.NoL, this.NoV, this.data.sheenRoughness);\r\n this.outColor = pb.add(\r\n this.outColor,\r\n pb.mul(this.lightColor, this.data.sheenColor, this.sheenD, this.sheenV)\r\n );\r\n }\r\n if (that.clearcoat) {\r\n this.$l.clearcoatAlphaRoughness = pb.mul(this.data.ccFactor.y, this.data.ccFactor.y);\r\n this.alphaRoughness = this.clearcoatAlphaRoughness;\r\n this.NoH = pb.clamp(pb.dot(this.data.ccNormal, this.H), 0, 1);\r\n this.NoL = pb.clamp(pb.dot(this.data.ccNormal, this.specularLightDir), 0, 1);\r\n this.ccF0 = pb.vec3(pb.pow(pb.div(pb.sub(this.data.f0.a, 1), pb.add(this.data.f0.a, 1)), 2));\r\n this.F = that.fresnelSchlick(this, this.VoH, this.ccF0, pb.vec3(1));\r\n this.D = that.distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.V = that.visGGX(this, this.data.ccNoV, this.NoL, this.alphaRoughness);\r\n this.outColor = pb.add(this.outColor, pb.mul(this.D, this.V, this.F, this.data.ccFactor.x));\r\n }\r\n });\r\n }\r\n );\r\n if (outDiffuseColor && outTransmissionColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor,\r\n outTransmissionColor\r\n );\r\n } else if (outDiffuseColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outDiffuseColor\r\n );\r\n } else if (outTransmissionColor) {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor,\r\n outTransmissionColor\r\n );\r\n } else {\r\n scope.$g[funcName](\r\n lightDir,\r\n lightColor,\r\n normal,\r\n viewVec,\r\n commonData,\r\n diffuseScale,\r\n specularScale,\r\n sourceRadiusFactor,\r\n outColor\r\n );\r\n }\r\n }\r\n get reflectionMode() {\r\n return this._reflectionMode;\r\n }\r\n set reflectionMode(val: PBRReflectionMode) {\r\n if (val !== this._reflectionMode) {\r\n this._reflectionMode = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropy() {\r\n return this._anisotropy;\r\n }\r\n set anisotropy(val) {\r\n const clamped = Math.max(-0.95, Math.min(0.95, val));\r\n if (clamped !== this._anisotropy) {\r\n this._anisotropy = clamped;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirection() {\r\n return this._anisotropyDirection;\r\n }\r\n set anisotropyDirection(val) {\r\n if (val !== this._anisotropyDirection) {\r\n this._anisotropyDirection = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get anisotropyDirectionScaleBias(): Immutable<Vector2> {\r\n return this._anisotropyDirectionScaleBias;\r\n }\r\n set anisotropyDirectionScaleBias(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._anisotropyDirectionScaleBias)) {\r\n this._anisotropyDirectionScaleBias.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n calculateAnisotropyDirectionScaleBias(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirectionScaleBias as PBShaderExp;\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp,\r\n outSSSDiffuse?: PBShaderExp,\r\n outSSSTransmission?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_PBRMetallicRoughnessLight${outRoughness ? '_R' : ''}${outSSSDiffuse ? '_D' : ''}${outSSSTransmission ? '_T' : ''}`;\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : []),\r\n ...(outSSSDiffuse ? [pb.vec4('outSSSDiffuse').out()] : []),\r\n ...(outSSSTransmission ? [pb.vec4('outSSSTransmission').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.sssDiffuseColor = pb.vec3(0);\r\n this.$l.sssTransmissionColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? that.calculateEmissiveColor(this) : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness && outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness,\r\n this.sssDiffuseColor\r\n );\r\n } else if (outRoughness && outSSSTransmission) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else if (outSSSDiffuse) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n undefined,\r\n this.sssDiffuseColor\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.rectColorIntensity = colorIntensity;\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(posRange.xyz, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.normal, this.rectL), 0, 1);\r\n this.$l.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));\r\n this.rectColorIntensity = pb.vec4(\r\n colorIntensity.rgb,\r\n pb.mul(colorIntensity.a, this.rectShadow)\r\n );\r\n }\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n this.rectColorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n if (outSSSDiffuse) {\r\n if (outSSSTransmission) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor,\r\n this.sssTransmissionColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n this.sssDiffuseColor\r\n );\r\n }\r\n } else if (outSSSTransmission) {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor,\r\n undefined,\r\n this.sssTransmissionColor\r\n );\r\n } else {\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n }\r\n });\r\n });\r\n if (outSSSDiffuse) {\r\n this.outSSSDiffuse = pb.vec4(this.sssDiffuseColor, this.albedo.a);\r\n }\r\n if (outSSSTransmission) {\r\n this.outSSSTransmission = pb.vec4(this.sssTransmissionColor, this.albedo.a);\r\n }\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness && outSSSDiffuse && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSDiffuse, outSSSTransmission)\r\n : outRoughness && outSSSDiffuse\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSDiffuse)\r\n : outRoughness && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness, outSSSTransmission)\r\n : outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : outSSSDiffuse && outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outSSSDiffuse, outSSSTransmission)\r\n : outSSSDiffuse\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outSSSDiffuse)\r\n : outSSSTransmission\r\n ? pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, TBN, viewVec, albedo, outSSSTransmission)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zMetallic = this.getInstancedUniform(scope, METALLIC_UNIFORM);\r\n scope.$outputs.zRoughness = this.getInstancedUniform(scope, ROUGHNESS_UNIFORM);\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n const pb = scope.$builder;\r\n if (!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zMetallic = pb.float().uniform(2);\r\n scope.zRoughness = pb.float().uniform(2);\r\n scope.zSpecularFactor = pb.vec4().uniform(2);\r\n }\r\n scope.zReflectionMode = pb.float().uniform(2);\r\n scope.zAnisotropy = pb.float().uniform(2);\r\n scope.zAnisotropyDirection = pb.float().uniform(2);\r\n scope.zAnisotropyDirectionScaleBias = pb.vec2().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx)) {\r\n if (!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zMetallic', this._metallic);\r\n bindGroup.setValue('zRoughness', this._roughness);\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n }\r\n bindGroup.setValue('zReflectionMode', PBR_REFLECTION_MODE[this._reflectionMode]);\r\n bindGroup.setValue('zAnisotropy', this._anisotropy);\r\n bindGroup.setValue('zAnisotropyDirection', this._anisotropyDirection);\r\n bindGroup.setValue('zAnisotropyDirectionScaleBias', this._anisotropyDirectionScaleBias);\r\n }\r\n }\r\n calculateMetallic(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zMetallic : scope.zMetallic) as PBShaderExp;\r\n }\r\n calculateRoughness(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zRoughness : scope.zRoughness) as PBShaderExp;\r\n }\r\n calculateSpecularFactor(scope: PBInsideFunctionScope, _albedo: PBShaderExp, _normal: PBShaderExp) {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const metallic = this.calculateMetallic(scope, albedo, normal);\r\n const roughness = this.calculateRoughness(scope, albedo, normal);\r\n const specularFactor = this.calculateSpecularFactor(scope, albedo, normal);\r\n const reflectionMode = this.calculateReflectionMode(scope) as PBShaderExp;\r\n if (this.metallicRoughnessTexture) {\r\n scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);\r\n data.metallic = pb.mul(metallic, scope.metallicRoughnessSample.z);\r\n data.roughness = pb.mul(roughness, scope.metallicRoughnessSample.y);\r\n } else {\r\n data.metallic = metallic;\r\n data.roughness = roughness;\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n if (this.specularColorTexture) {\r\n scope.$l.specularColor = pb.mul(specularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);\r\n } else {\r\n scope.$l.specularColor = specularFactor.rgb;\r\n }\r\n if (this.specularTexture) {\r\n data.specularWeight = pb.mul(specularFactor.a, this.sampleSpecularTexture(scope).a);\r\n } else {\r\n data.specularWeight = specularFactor.a;\r\n }\r\n data.specularWeight = pb.mul(\r\n data.specularWeight,\r\n pb.float(pb.notEqual(reflectionMode, PBR_REFLECTION_MODE.none))\r\n );\r\n data.f0 = pb.vec4(\r\n pb.mix(\r\n pb.min(pb.mul(this.getF0(scope).rgb, scope.specularColor), pb.vec3(1)),\r\n albedo.rgb,\r\n data.metallic\r\n ),\r\n this.getF0(scope).a\r\n );\r\n data.f90 = pb.vec3(1);\r\n data.diffuse = pb.vec4(pb.mix(albedo.rgb, pb.vec3(0), data.metallic), albedo.a);\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n }\r\n calculateReflectionMode(scope: PBInsideFunctionScope) {\r\n return scope.zReflectionMode as PBShaderExp;\r\n }\r\n calculateAnisotropy(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropy as PBShaderExp;\r\n }\r\n calculateAnisotropyDirection(scope: PBInsideFunctionScope) {\r\n return scope.zAnisotropyDirection as PBShaderExp;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRMetallicRoughness };\r\n}\r\n"],"names":["PBR_REFLECTION_MODE","none","ggx","anisotropic","glint","mixinPBRMetallicRoughness","BaseCls","pbrMetallicRoughnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","METALLIC_UNIFORM","defineInstanceUniform","ROUGHNESS_UNIFORM","SPECULAR_FACTOR_UNFORM","_metallic","_roughness","_specularFactor","_reflectionMode","_anisotropy","_anisotropyDirection","_anisotropyDirectionScaleBias","Vector4","one","Vector2","copyFrom","other","metallic","roughness","specularFactor","reflectionMode","anisotropy","anisotropyDirection","anisotropyDirectionScaleBias","val","uniformChanged","equalsTo","set","directLighting","scope","lightDir","lightColor","normal","viewVec","commonData","diffuseScale","specularScale","sourceRadiusFactor","outColor","outDiffuseColor","outTransmissionColor","pb","$builder","that","funcName","func","vec3","getCommonDatasStruct","float","inout","$l","zReflectionMode","zAnisotropy","zAnisotropyDirection","zAnisotropyDirectionScaleBias","NoL","clamp","dot","L","NoV","$if","greaterThan","specularLightDir","reflectionVec","reflect","neg","centerToRay","sub","mul","centerToRayLength","length","sphereLightBlend","div","max","normalize","add","H","NoH","specularNoL","VoH","schlickFresnel","fresnelSchlick","data","f0","rgb","f90","iridescence","F","mix","iridescenceFresnel","iridescenceFactor","x","sheen","sheenAlbedoScaling","getSheenAlbedoScalingForDirect","sheenColor","sheenRoughness","alphaRoughness","specularRoughness","sqrt","Dggx","distributionGGX","D","equal","dirAngle","Math","PI","anisotropyDirectionTexture","dirSample","sampleAnisotropyDirectionTexture","r","y","anisoAngle","up","t0","cross","lessThan","b0","tangent","cos","sin","bitangent","ToH","BoH","at","ab","anisoDenom","pow","$elseif","glintNoise","fract","glintMask","smoothStep","V","visGGX","specular","specularWeight","iridescenceFresnelMax","g","b","diffuseBRDF","diffuse","transmission","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","transmissionRay","getVolumeTransmissionRay","thicknessFactor","a","pointToLight","transmittedLight","getPunctualRadianceTransmission","applyVolumeAttenuation","attenuationColor","attenuationDistance","transmissionContribution","transmissionFactor","sheenD","D_Charlie","sheenV","V_Sheen","clearcoat","clearcoatAlphaRoughness","ccFactor","ccNormal","ccF0","ccNoV","$g","clamped","min","calculateAnisotropyDirectionScaleBias","PBRLight","worldPos","albedo","TBN","outRoughness","outSSSDiffuse","outSSSTransmission","baseLightPass","lightBlending","mat3","vec4","out","pbrData","getCommonData","lightingColor","sssDiffuseColor","sssTransmissionColor","emissiveColor","calculateEmissiveColor","indirectLighting","undefined","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","LIGHT_TYPE_RECT","rectColorIntensity","rectL","xyz","rectNoL","rectShadow","calculateShadow","directRectLight","$else","LIGHT_TYPE_POINT","z","distance","lightAtten","calculateLightAttenuation","calculateLightDirection","$return","getGlobalScope","vertexShader","needFragmentColor","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zMetallic","getInstancedUniform","zRoughness","zSpecularFactor","fragmentShader","uniform","vec2","applyUniformValues","bindGroup","ctx","pass","setValue","calculateMetallic","_albedo","_normal","instancing","$inputs","calculateRoughness","calculateSpecularFactor","calculateCommonData","calculateReflectionMode","metallicRoughnessTexture","metallicRoughnessSample","sampleMetallicRoughnessTexture","ShaderHelper","getCameraRoughnessFactor","specularColorTexture","specularColor","sampleSpecularColorTexture","specularTexture","sampleSpecularTexture","notEqual","getF0","calculateAnisotropy","calculateAnisotropyDirection"],"mappings":"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"}
@@ -120,7 +120,7 @@ import { MaterialVaryingFlags, LIGHT_TYPE_RECT, LIGHT_TYPE_POINT } from '../../.
120
120
  this.specularScale = extra.y;
121
121
  this.sourceRadiusFactor = pb.div(extra.z, pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001));
122
122
  });
123
- this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
123
+ this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff, extra);
124
124
  this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
125
125
  this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
126
126
  this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);
@@ -1 +1 @@
1
- {"version":3,"file":"pbrspecularglossness.js","sources":["../../../../src/material/mixins/lightmodel/pbrspecularglossness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, MaterialVaryingFlags } from '../../../values';\r\n\r\n/**\r\n * Interface for PBRSpecularGlossiness mixin\r\n * @public\r\n */\r\nexport type IMixinPBRSpecularGlossiness = {\r\n specularFactor: Vector3;\r\n glossinessFactor: number;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<['specular']>;\r\n\r\n/**\r\n * PBRSpecularGlossiness mixin\r\n *\r\n * @param BaseCls - Base class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nexport function mixinPBRSpecularGlossness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrSpecularGlossnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRSpecularGlossiness };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinPBRCommon, mixinLight, mixinTextureProps('specular'));\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgb', 'SpecularFactor');\r\n const GLOSSINESS_FACTOR_UNIFORM = S.defineInstanceUniform('glossinessFactor', 'float', 'GlossinessFactor');\r\n return class extends S {\r\n static readonly pbrSpecularGlossnessMixed = true;\r\n private readonly _specularFactor: Vector3;\r\n private _glossinessFactor: number;\r\n constructor() {\r\n super();\r\n this._specularFactor = Vector3.one();\r\n this._glossinessFactor = 1;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.specularFactor = other.specularFactor;\r\n this.glossinessFactor = other.glossinessFactor;\r\n }\r\n get specularFactor(): Immutable<Vector3> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get glossinessFactor() {\r\n return this._glossinessFactor;\r\n }\r\n set glossinessFactor(val) {\r\n if (val !== this._glossinessFactor) {\r\n this._glossinessFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n scope.$outputs.zGlossinessFactor = this.getInstancedUniform(scope, GLOSSINESS_FACTOR_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n const pb = scope.$builder;\r\n scope.zSpecularFactor = pb.vec3().uniform(2);\r\n scope.zGlossinessFactor = pb.float().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n bindGroup.setValue('zGlossinessFactor', this._glossinessFactor);\r\n }\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRSpecularGlossinessLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? that.calculateEmissiveColor(this) : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.rectColorIntensity = colorIntensity;\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(posRange.xyz, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.normal, this.rectL), 0, 1);\r\n this.$l.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));\r\n this.rectColorIntensity = pb.vec4(\r\n colorIntensity.rgb,\r\n pb.mul(colorIntensity.a, this.rectShadow)\r\n );\r\n }\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n this.rectColorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n });\r\n });\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n const pb = scope.$builder;\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n const specularFactor = instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor;\r\n const glossinessFactor = instancing ? scope.$inputs.zGlossinessFactor : scope.zGlossinessFactor;\r\n if (this.specularTexture) {\r\n scope.$l.specularTextureSample = this.sampleSpecularTexture(scope);\r\n data.roughness = pb.sub(1, pb.mul(glossinessFactor, scope.specularTextureSample.a));\r\n data.f0 = pb.vec4(pb.mul(scope.specularTextureSample.rgb, specularFactor), this.getF0(scope).a);\r\n } else {\r\n data.roughness = pb.sub(1, glossinessFactor);\r\n data.f0 = pb.vec4(specularFactor, this.getF0(scope).a);\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n data.metallic = pb.max(pb.max(data.f0.r, data.f0.g), data.f0.b);\r\n data.diffuse = pb.vec4(pb.mul(albedo.rgb, pb.sub(1, data.metallic)), albedo.a);\r\n data.specularWeight = 1;\r\n data.f90 = pb.vec3(1);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRSpecularGlossiness };\r\n}\r\n"],"names":["mixinPBRSpecularGlossness","BaseCls","pbrSpecularGlossnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","SPECULAR_FACTOR_UNFORM","defineInstanceUniform","GLOSSINESS_FACTOR_UNIFORM","_specularFactor","_glossinessFactor","Vector3","one","copyFrom","other","specularFactor","glossinessFactor","val","equalsTo","set","uniformChanged","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zSpecularFactor","getInstancedUniform","zGlossinessFactor","fragmentShader","pb","$builder","vec3","uniform","float","applyUniformValues","bindGroup","ctx","pass","setValue","PBRLight","worldPos","normal","viewVec","albedo","TBN","outRoughness","funcName","that","baseLightPass","lightBlending","func","mat3","vec4","out","$l","pbrData","getCommonData","lightingColor","emissiveColor","calculateEmissiveColor","indirectLighting","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","$if","equal","LIGHT_TYPE_RECT","rectColorIntensity","rectL","normalize","sub","xyz","rectNoL","clamp","dot","rectShadow","calculateShadow","max","rgb","mul","a","directRectLight","$else","diffuse","specular","diffuseScale","specularScale","sourceRadiusFactor","LIGHT_TYPE_POINT","x","y","div","z","distance","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","lightColor","directLighting","$return","add","getGlobalScope","calculateCommonData","data","instancing","$inputs","specularTexture","specularTextureSample","sampleSpecularTexture","roughness","f0","getF0","ShaderHelper","getCameraRoughnessFactor","metallic","r","g","b","specularWeight","f90"],"mappings":"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"}
1
+ {"version":3,"file":"pbrspecularglossness.js","sources":["../../../../src/material/mixins/lightmodel/pbrspecularglossness.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from '../texture';\r\nimport { mixinTextureProps } from '../texture';\r\nimport type { IMixinPBRCommon } from '../pbr/common';\r\nimport { mixinPBRCommon } from '../pbr/common';\r\nimport type { DrawContext } from '../../../render';\r\nimport type { Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, MaterialVaryingFlags } from '../../../values';\r\n\r\n/**\r\n * Interface for PBRSpecularGlossiness mixin\r\n * @public\r\n */\r\nexport type IMixinPBRSpecularGlossiness = {\r\n specularFactor: Vector3;\r\n glossinessFactor: number;\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ): void;\r\n} & IMixinPBRCommon &\r\n IMixinLight &\r\n TextureMixinInstanceTypes<['specular']>;\r\n\r\n/**\r\n * PBRSpecularGlossiness mixin\r\n *\r\n * @param BaseCls - Base class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nexport function mixinPBRSpecularGlossness<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).pbrSpecularGlossnessMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinPBRSpecularGlossiness };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinPBRCommon, mixinLight, mixinTextureProps('specular'));\r\n const SPECULAR_FACTOR_UNFORM = S.defineInstanceUniform('specularFactor', 'rgb', 'SpecularFactor');\r\n const GLOSSINESS_FACTOR_UNIFORM = S.defineInstanceUniform('glossinessFactor', 'float', 'GlossinessFactor');\r\n return class extends S {\r\n static readonly pbrSpecularGlossnessMixed = true;\r\n private readonly _specularFactor: Vector3;\r\n private _glossinessFactor: number;\r\n constructor() {\r\n super();\r\n this._specularFactor = Vector3.one();\r\n this._glossinessFactor = 1;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.specularFactor = other.specularFactor;\r\n this.glossinessFactor = other.glossinessFactor;\r\n }\r\n get specularFactor(): Immutable<Vector3> {\r\n return this._specularFactor;\r\n }\r\n set specularFactor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._specularFactor)) {\r\n this._specularFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get glossinessFactor() {\r\n return this._glossinessFactor;\r\n }\r\n set glossinessFactor(val) {\r\n if (val !== this._glossinessFactor) {\r\n this._glossinessFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zSpecularFactor = this.getInstancedUniform(scope, SPECULAR_FACTOR_UNFORM);\r\n scope.$outputs.zGlossinessFactor = this.getInstancedUniform(scope, GLOSSINESS_FACTOR_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n const pb = scope.$builder;\r\n scope.zSpecularFactor = pb.vec3().uniform(2);\r\n scope.zGlossinessFactor = pb.float().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zSpecularFactor', this._specularFactor);\r\n bindGroup.setValue('zGlossinessFactor', this._glossinessFactor);\r\n }\r\n }\r\n PBRLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n TBN: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_PBRSpecularGlossinessLight';\r\n const that = this;\r\n const baseLightPass = !that.drawContext.lightBlending;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.mat3('TBN'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n this.$l.pbrData = that.getCommonData(this, this.albedo, this.normal, this.viewVec, this.TBN);\r\n this.$l.lightingColor = pb.vec3(0);\r\n this.$l.emissiveColor = baseLightPass ? that.calculateEmissiveColor(this) : pb.vec3(0);\r\n if (baseLightPass) {\r\n if (outRoughness) {\r\n that.indirectLighting(\r\n this,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.lightingColor,\r\n this.outRoughness\r\n );\r\n } else {\r\n that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);\r\n }\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\r\n this.$l.rectColorIntensity = colorIntensity;\r\n if (shadow) {\r\n this.$l.rectL = pb.normalize(pb.sub(posRange.xyz, this.worldPos));\r\n this.$l.rectNoL = pb.clamp(pb.dot(this.normal, this.rectL), 0, 1);\r\n this.$l.rectShadow = that.calculateShadow(this, this.worldPos, pb.max(this.rectNoL, 1e-5));\r\n this.rectColorIntensity = pb.vec4(\r\n colorIntensity.rgb,\r\n pb.mul(colorIntensity.a, this.rectShadow)\r\n );\r\n }\r\n that.directRectLight(\r\n this,\r\n this.worldPos,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n posRange,\r\n dirCutoff,\r\n extra,\r\n this.rectColorIntensity,\r\n this.lightingColor\r\n );\r\n }).$else(function () {\r\n this.$l.diffuse = pb.vec3();\r\n this.$l.specular = pb.vec3();\r\n this.$l.diffuseScale = pb.float(1);\r\n this.$l.specularScale = pb.float(1);\r\n this.$l.sourceRadiusFactor = pb.float(0);\r\n this.$if(pb.equal(type, LIGHT_TYPE_POINT), function () {\r\n this.diffuseScale = extra.x;\r\n this.specularScale = extra.y;\r\n this.sourceRadiusFactor = pb.div(\r\n extra.z,\r\n pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001)\r\n );\r\n });\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);\r\n if (shadow) {\r\n this.lightColor = pb.mul(\r\n this.lightColor,\r\n that.calculateShadow(this, this.worldPos, this.NoL)\r\n );\r\n }\r\n that.directLighting(\r\n this,\r\n this.lightDir,\r\n this.lightColor,\r\n this.normal,\r\n this.viewVec,\r\n this.pbrData,\r\n this.diffuseScale,\r\n this.specularScale,\r\n this.sourceRadiusFactor,\r\n this.lightingColor\r\n );\r\n });\r\n });\r\n this.$return(pb.add(this.lightingColor, this.emissiveColor));\r\n }\r\n );\r\n return (\r\n outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo)\r\n ) as PBShaderExp;\r\n }\r\n calculateCommonData(\r\n scope: PBInsideFunctionScope,\r\n albedo: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n TBN: PBShaderExp,\r\n data: PBShaderExp\r\n ) {\r\n super.calculateCommonData(scope, albedo, normal, viewVec, TBN, data);\r\n const pb = scope.$builder;\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n const specularFactor = instancing ? scope.$inputs.zSpecularFactor : scope.zSpecularFactor;\r\n const glossinessFactor = instancing ? scope.$inputs.zGlossinessFactor : scope.zGlossinessFactor;\r\n if (this.specularTexture) {\r\n scope.$l.specularTextureSample = this.sampleSpecularTexture(scope);\r\n data.roughness = pb.sub(1, pb.mul(glossinessFactor, scope.specularTextureSample.a));\r\n data.f0 = pb.vec4(pb.mul(scope.specularTextureSample.rgb, specularFactor), this.getF0(scope).a);\r\n } else {\r\n data.roughness = pb.sub(1, glossinessFactor);\r\n data.f0 = pb.vec4(specularFactor, this.getF0(scope).a);\r\n }\r\n data.roughness = pb.mul(data.roughness, ShaderHelper.getCameraRoughnessFactor(scope));\r\n data.metallic = pb.max(pb.max(data.f0.r, data.f0.g), data.f0.b);\r\n data.diffuse = pb.vec4(pb.mul(albedo.rgb, pb.sub(1, data.metallic)), albedo.a);\r\n data.specularWeight = 1;\r\n data.f90 = pb.vec3(1);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinPBRSpecularGlossiness };\r\n}\r\n"],"names":["mixinPBRSpecularGlossness","BaseCls","pbrSpecularGlossnessMixed","S","applyMaterialMixins","mixinPBRCommon","mixinLight","mixinTextureProps","SPECULAR_FACTOR_UNFORM","defineInstanceUniform","GLOSSINESS_FACTOR_UNIFORM","_specularFactor","_glossinessFactor","Vector3","one","copyFrom","other","specularFactor","glossinessFactor","val","equalsTo","set","uniformChanged","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zSpecularFactor","getInstancedUniform","zGlossinessFactor","fragmentShader","pb","$builder","vec3","uniform","float","applyUniformValues","bindGroup","ctx","pass","setValue","PBRLight","worldPos","normal","viewVec","albedo","TBN","outRoughness","funcName","that","baseLightPass","lightBlending","func","mat3","vec4","out","$l","pbrData","getCommonData","lightingColor","emissiveColor","calculateEmissiveColor","indirectLighting","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","$if","equal","LIGHT_TYPE_RECT","rectColorIntensity","rectL","normalize","sub","xyz","rectNoL","clamp","dot","rectShadow","calculateShadow","max","rgb","mul","a","directRectLight","$else","diffuse","specular","diffuseScale","specularScale","sourceRadiusFactor","LIGHT_TYPE_POINT","x","y","div","z","distance","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","lightColor","directLighting","$return","add","getGlobalScope","calculateCommonData","data","instancing","$inputs","specularTexture","specularTextureSample","sampleSpecularTexture","roughness","f0","getF0","ShaderHelper","getCameraRoughnessFactor","metallic","r","g","b","specularWeight","f90"],"mappings":"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"}
@@ -283,7 +283,7 @@ import { ShaderHelper } from '../shader/helper.js';
283
283
  console.warn('getEnvLightIrradiance(): No need to calculate environment lighting');
284
284
  return scope.$builder.vec3(0);
285
285
  }
286
- return this.drawContext.env.light.envLight.hasIrradiance() ? scope.$builder.mul(this.drawContext.env.light.envLight.getIrradiance(scope, normal).rgb, ShaderHelper.getEnvLightStrength(scope)) : scope.$builder.vec3(0);
286
+ return this.drawContext.env.light.envLight.hasIrradiance() ? this.drawContext.SSGI && this.drawContext.SSGIIrradianceHistoryTexture && this.drawContext.SSGISurfaceHistoryTexture && (this.drawContext.device.type !== 'webgpu' || this.drawContext.motionVectorTexture) ? this.drawContext.env.light.envLight.getIrradiance(scope, normal, this.drawContext).rgb : scope.$builder.mul(this.drawContext.env.light.envLight.getIrradiance(scope, normal, this.drawContext).rgb, ShaderHelper.getEnvLightStrength(scope)) : scope.$builder.vec3(0);
287
287
  }
288
288
  /**
289
289
  * Get Radiance of current environment light
@@ -353,25 +353,47 @@ import { ShaderHelper } from '../shader/helper.js';
353
353
  });
354
354
  return pb.getGlobalScope()[funcName](worldPos, posRange);
355
355
  }
356
- calculateSpotLightAttenuation(scope, worldPos, posRange, dirCutoff) {
356
+ calculateSpotLightAttenuation(scope, worldPos, posRange, dirCutoff, angleScaleOffset) {
357
357
  const pb = scope.$builder;
358
- const funcName = 'Z_calculateSpotLightAttenuation';
358
+ const physical = this.drawContext.scene.lightingMode === 'physical';
359
+ // The two modes emit different falloff and cone-attenuation bodies, so they must not share a
360
+ // cached function under one name.
361
+ const funcName = physical ? 'Z_calculateSpotLightAttenuationPhysical' : 'Z_calculateSpotLightAttenuation';
359
362
  pb.func(funcName, [
360
363
  pb.vec3('worldPos'),
361
364
  pb.vec4('posRange'),
362
- pb.vec4('dirCutoff')
365
+ pb.vec4('dirCutoff'),
366
+ pb.vec2('angleScaleOffset')
363
367
  ], function() {
364
368
  this.$l.dist = pb.distance(this.posRange.xyz, this.worldPos);
365
- this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.posRange.w)));
366
- this.$l.spotFactor = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);
367
- this.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.spotFactor);
368
- this.$return(pb.mul(this.spotFactor, this.falloff, this.falloff));
369
+ if (physical) {
370
+ this.$l.dist2 = pb.mul(this.dist, this.dist);
371
+ this.$l.lightAtten = pb.div(1, pb.max(this.dist2, 0.0001));
372
+ this.$l.range2 = pb.mul(this.posRange.w, this.posRange.w);
373
+ this.$l.f = pb.div(this.dist2, pb.max(this.range2, 0.0001));
374
+ this.$l.f2 = pb.clamp(pb.sub(1, pb.mul(this.f, this.f)), 0, 1);
375
+ this.$l.falloff = pb.mul(this.lightAtten, this.f2, this.f2);
376
+ } else {
377
+ this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.posRange.w)));
378
+ this.falloff = pb.mul(this.falloff, this.falloff);
379
+ }
380
+ this.$l.cd = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);
381
+ if (physical) {
382
+ // Filament's getAngleAttenuation: saturate(cd * scale + offset) squared. The scale/offset
383
+ // pair is derived CPU-side from the cone half-angles and already guards inner == outer.
384
+ this.$l.spotFactor = pb.clamp(pb.add(pb.mul(this.cd, this.angleScaleOffset.x), this.angleScaleOffset.y), 0, 1);
385
+ this.spotFactor = pb.mul(this.spotFactor, this.spotFactor);
386
+ } else {
387
+ this.$l.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.cd);
388
+ }
389
+ this.$return(pb.mul(this.spotFactor, this.falloff));
369
390
  });
370
- return pb.getGlobalScope()[funcName](worldPos, posRange, dirCutoff);
391
+ const resolvedScaleOffset = physical && angleScaleOffset ? angleScaleOffset : pb.vec2(0);
392
+ return pb.getGlobalScope()[funcName](worldPos, posRange, dirCutoff, resolvedScaleOffset);
371
393
  }
372
- calculateLightAttenuation(scope, type, worldPos, posRange, dirCutoff) {
394
+ calculateLightAttenuation(scope, type, worldPos, posRange, dirCutoff, extra) {
373
395
  const pb = scope.$builder;
374
- return scope.$choice(pb.equal(type, LIGHT_TYPE_DIRECTIONAL), pb.float(1), scope.$choice(pb.equal(type, LIGHT_TYPE_POINT), this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange), scope.$choice(pb.equal(type, LIGHT_TYPE_RECT), this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange), this.calculateSpotLightAttenuation(scope, worldPos.xyz, posRange, dirCutoff))));
396
+ return scope.$choice(pb.equal(type, LIGHT_TYPE_DIRECTIONAL), pb.float(1), scope.$choice(pb.equal(type, LIGHT_TYPE_POINT), this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange), scope.$choice(pb.equal(type, LIGHT_TYPE_RECT), this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange), this.calculateSpotLightAttenuation(scope, worldPos.xyz, posRange, dirCutoff, extra?.xy))));
375
397
  }
376
398
  calculateLightDirection(scope, type, worldPos, posRange, dirCutoff) {
377
399
  const pb = scope.$builder;