@zephyr3d/scene 0.9.25 → 0.9.27

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 (299) hide show
  1. package/dist/animation/animationset.js +92 -30
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  4. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  5. package/dist/animation/joint_dynamics/controller.js +7 -5
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  8. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  9. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  10. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -4
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/skeleton.js +79 -25
  14. package/dist/animation/skeleton.js.map +1 -1
  15. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  16. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  17. package/dist/animation/spring/spring_collider.js +4 -3
  18. package/dist/animation/spring/spring_collider.js.map +1 -1
  19. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  20. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  21. package/dist/animation/spring/spring_particle.js +2 -0
  22. package/dist/animation/spring/spring_particle.js.map +1 -1
  23. package/dist/animation/spring/spring_system.js +11 -3
  24. package/dist/animation/spring/spring_system.js.map +1 -1
  25. package/dist/animation/spring_modifier.js +10 -0
  26. package/dist/animation/spring_modifier.js.map +1 -1
  27. package/dist/app/engine.js +53 -43
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/scriptingsystem.js +119 -6
  30. package/dist/app/scriptingsystem.js.map +1 -1
  31. package/dist/app/scriptregistry.js +3 -2
  32. package/dist/app/scriptregistry.js.map +1 -1
  33. package/dist/asset/assetmanager.js +284 -67
  34. package/dist/asset/assetmanager.js.map +1 -1
  35. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  36. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  37. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  38. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  39. package/dist/asset/model.js +184 -69
  40. package/dist/asset/model.js.map +1 -1
  41. package/dist/camera/camera.js +268 -44
  42. package/dist/camera/camera.js.map +1 -1
  43. package/dist/camera/perspectivecamera.js +3 -1
  44. package/dist/camera/perspectivecamera.js.map +1 -1
  45. package/dist/index.d.ts +9044 -5139
  46. package/dist/index.js +17 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/material/eye.js +932 -0
  49. package/dist/material/eye.js.map +1 -0
  50. package/dist/material/hair.js +917 -0
  51. package/dist/material/hair.js.map +1 -0
  52. package/dist/material/hairstrand.js +842 -0
  53. package/dist/material/hairstrand.js.map +1 -0
  54. package/dist/material/hairstrand_data.js +162 -0
  55. package/dist/material/hairstrand_data.js.map +1 -0
  56. package/dist/material/lambert.js +5 -2
  57. package/dist/material/lambert.js.map +1 -1
  58. package/dist/material/material.js +48 -10
  59. package/dist/material/material.js.map +1 -1
  60. package/dist/material/meshmaterial.js +120 -19
  61. package/dist/material/meshmaterial.js.map +1 -1
  62. package/dist/material/mixins/albedocolor.js +1 -1
  63. package/dist/material/mixins/albedocolor.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  65. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  67. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  71. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  72. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  73. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  74. package/dist/material/mixins/lit.js +106 -19
  75. package/dist/material/mixins/lit.js.map +1 -1
  76. package/dist/material/mixins/pbr/common.js +4 -4
  77. package/dist/material/mixins/pbr/common.js.map +1 -1
  78. package/dist/material/mixins/texture.js +48 -11
  79. package/dist/material/mixins/texture.js.map +1 -1
  80. package/dist/material/mtoon.js +6 -5
  81. package/dist/material/mtoon.js.map +1 -1
  82. package/dist/material/pbrblueprint.js +146 -28
  83. package/dist/material/pbrblueprint.js.map +1 -1
  84. package/dist/material/pbrblueprint_instance.js +501 -0
  85. package/dist/material/pbrblueprint_instance.js.map +1 -0
  86. package/dist/material/pbrmr.js +15 -16
  87. package/dist/material/pbrmr.js.map +1 -1
  88. package/dist/material/shader/helper.js +734 -23
  89. package/dist/material/shader/helper.js.map +1 -1
  90. package/dist/material/shader/terrain_blend.js +55 -0
  91. package/dist/material/shader/terrain_blend.js.map +1 -0
  92. package/dist/material/skin.js +192 -32
  93. package/dist/material/skin.js.map +1 -1
  94. package/dist/material/spriteblueprint.js +16 -1
  95. package/dist/material/spriteblueprint.js.map +1 -1
  96. package/dist/material/subsurfaceprofile.js +86 -23
  97. package/dist/material/subsurfaceprofile.js.map +1 -1
  98. package/dist/material/water.js +2059 -72
  99. package/dist/material/water.js.map +1 -1
  100. package/dist/posteffect/bloom.js +167 -7
  101. package/dist/posteffect/bloom.js.map +1 -1
  102. package/dist/posteffect/coloradjust.js +2 -1
  103. package/dist/posteffect/coloradjust.js.map +1 -1
  104. package/dist/posteffect/compositor.js.map +1 -1
  105. package/dist/posteffect/fxaa.js +2 -1
  106. package/dist/posteffect/fxaa.js.map +1 -1
  107. package/dist/posteffect/grayscale.js +3 -1
  108. package/dist/posteffect/grayscale.js.map +1 -1
  109. package/dist/posteffect/motionblur.js +664 -56
  110. package/dist/posteffect/motionblur.js.map +1 -1
  111. package/dist/posteffect/posteffect.js +12 -1
  112. package/dist/posteffect/posteffect.js.map +1 -1
  113. package/dist/posteffect/sao.js +46 -44
  114. package/dist/posteffect/sao.js.map +1 -1
  115. package/dist/posteffect/skinsss.js +368 -69
  116. package/dist/posteffect/skinsss.js.map +1 -1
  117. package/dist/posteffect/ssgi.js +16 -9
  118. package/dist/posteffect/ssgi.js.map +1 -1
  119. package/dist/posteffect/ssr.js +3 -0
  120. package/dist/posteffect/ssr.js.map +1 -1
  121. package/dist/posteffect/sss.js +121 -36
  122. package/dist/posteffect/sss.js.map +1 -1
  123. package/dist/posteffect/taa.js.map +1 -1
  124. package/dist/posteffect/tonemap.js +44 -1
  125. package/dist/posteffect/tonemap.js.map +1 -1
  126. package/dist/render/abuffer_oit.js +8 -2
  127. package/dist/render/abuffer_oit.js.map +1 -1
  128. package/dist/render/clipmap.js +156 -5
  129. package/dist/render/clipmap.js.map +1 -1
  130. package/dist/render/cull_visitor.js +20 -0
  131. package/dist/render/cull_visitor.js.map +1 -1
  132. package/dist/render/depthpass.js +36 -2
  133. package/dist/render/depthpass.js.map +1 -1
  134. package/dist/render/drawable_mixin.js +26 -1
  135. package/dist/render/drawable_mixin.js.map +1 -1
  136. package/dist/render/dualdepthpeeling_oit.js +3 -2
  137. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  138. package/dist/render/envlight.js +1 -1
  139. package/dist/render/envlight.js.map +1 -1
  140. package/dist/render/fbm_wavegenerator.js +6 -3
  141. package/dist/render/fbm_wavegenerator.js.map +1 -1
  142. package/dist/render/fft_wavegenerator.js +57 -15
  143. package/dist/render/fft_wavegenerator.js.map +1 -1
  144. package/dist/render/gerstner_wavegenerator.js +130 -20
  145. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  146. package/dist/render/globalbindgroup_allocator.js +3 -0
  147. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  148. package/dist/render/hzb.js +80 -22
  149. package/dist/render/hzb.js.map +1 -1
  150. package/dist/render/lightpass.js +6 -3
  151. package/dist/render/lightpass.js.map +1 -1
  152. package/dist/render/oit.js +29 -0
  153. package/dist/render/oit.js.map +1 -0
  154. package/dist/render/render_queue.js +39 -0
  155. package/dist/render/render_queue.js.map +1 -1
  156. package/dist/render/renderer.js +4 -0
  157. package/dist/render/renderer.js.map +1 -1
  158. package/dist/render/rendergraph/blackboard.js +1 -0
  159. package/dist/render/rendergraph/blackboard.js.map +1 -1
  160. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  161. package/dist/render/rendergraph/executor.js +2 -0
  162. package/dist/render/rendergraph/executor.js.map +1 -1
  163. package/dist/render/rendergraph/forward_plus_builder.js +379 -10
  164. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  165. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  166. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  167. package/dist/render/rendergraph/history_resources.js +8 -1
  168. package/dist/render/rendergraph/history_resources.js.map +1 -1
  169. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  170. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  171. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  172. package/dist/render/rendergraph/types.js.map +1 -1
  173. package/dist/render/shadow_mask_pass.js +73 -8
  174. package/dist/render/shadow_mask_pass.js.map +1 -1
  175. package/dist/render/sky.js +166 -126
  176. package/dist/render/sky.js.map +1 -1
  177. package/dist/render/underwater.js +624 -0
  178. package/dist/render/underwater.js.map +1 -0
  179. package/dist/render/water_caustics.js +1380 -0
  180. package/dist/render/water_caustics.js.map +1 -0
  181. package/dist/render/weightedblended_oit.js +3 -2
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +8 -0
  184. package/dist/scene/basesprite.js.map +1 -1
  185. package/dist/scene/batchgroup.js +3 -0
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +4 -1
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/hair.js +963 -0
  190. package/dist/scene/hair.js.map +1 -0
  191. package/dist/scene/light.js +5 -1
  192. package/dist/scene/light.js.map +1 -1
  193. package/dist/scene/mesh.js +481 -47
  194. package/dist/scene/mesh.js.map +1 -1
  195. package/dist/scene/meshdrawable.js +6 -0
  196. package/dist/scene/meshdrawable.js.map +1 -1
  197. package/dist/scene/msdftext.js +3 -0
  198. package/dist/scene/msdftext.js.map +1 -1
  199. package/dist/scene/msdftextsprite.js +3 -0
  200. package/dist/scene/msdftextsprite.js.map +1 -1
  201. package/dist/scene/particlesys.js +6 -0
  202. package/dist/scene/particlesys.js.map +1 -1
  203. package/dist/scene/scene.js +3 -0
  204. package/dist/scene/scene.js.map +1 -1
  205. package/dist/scene/scene_node.js +6 -1
  206. package/dist/scene/scene_node.js.map +1 -1
  207. package/dist/scene/terrain-cm/grass.js +3 -0
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  214. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  215. package/dist/scene/water.js +546 -4
  216. package/dist/scene/water.js.map +1 -1
  217. package/dist/shaders/atmosphere.js.map +1 -1
  218. package/dist/shaders/diffusion.js +54 -0
  219. package/dist/shaders/diffusion.js.map +1 -0
  220. package/dist/shaders/shadow.js +33 -21
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/temporal.js +71 -33
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js +22 -19
  225. package/dist/shaders/water.js.map +1 -1
  226. package/dist/shaders/water_medium.js +56 -0
  227. package/dist/shaders/water_medium.js.map +1 -0
  228. package/dist/shadow/dom.js +546 -0
  229. package/dist/shadow/dom.js.map +1 -0
  230. package/dist/shadow/pcf_opt.js +3 -5
  231. package/dist/shadow/pcf_opt.js.map +1 -1
  232. package/dist/shadow/pcf_pd.js +1 -1
  233. package/dist/shadow/pcf_pd.js.map +1 -1
  234. package/dist/shadow/receiver_bias.js +41 -0
  235. package/dist/shadow/receiver_bias.js.map +1 -0
  236. package/dist/shadow/shader.js +20 -60
  237. package/dist/shadow/shader.js.map +1 -1
  238. package/dist/shadow/shadow_impl.js +89 -0
  239. package/dist/shadow/shadow_impl.js.map +1 -1
  240. package/dist/shadow/shadow_region.js +1 -1
  241. package/dist/shadow/shadow_region.js.map +1 -1
  242. package/dist/shadow/shadowmapper.js +150 -37
  243. package/dist/shadow/shadowmapper.js.map +1 -1
  244. package/dist/shapes/shape.js +11 -2
  245. package/dist/shapes/shape.js.map +1 -1
  246. package/dist/shapes/sphere.js +50 -9
  247. package/dist/shapes/sphere.js.map +1 -1
  248. package/dist/utility/blueprint/common/constants.js +112 -2
  249. package/dist/utility/blueprint/common/constants.js.map +1 -1
  250. package/dist/utility/blueprint/material/func.js +142 -49
  251. package/dist/utility/blueprint/material/func.js.map +1 -1
  252. package/dist/utility/blueprint/material/ir.js +490 -25
  253. package/dist/utility/blueprint/material/ir.js.map +1 -1
  254. package/dist/utility/blueprint/material/texture.js +898 -4
  255. package/dist/utility/blueprint/material/texture.js.map +1 -1
  256. package/dist/utility/serialization/manager.js +434 -101
  257. package/dist/utility/serialization/manager.js.map +1 -1
  258. package/dist/utility/serialization/scene/animation.js +401 -5
  259. package/dist/utility/serialization/scene/animation.js.map +1 -1
  260. package/dist/utility/serialization/scene/batch.js +4 -0
  261. package/dist/utility/serialization/scene/batch.js.map +1 -1
  262. package/dist/utility/serialization/scene/camera.js +186 -26
  263. package/dist/utility/serialization/scene/camera.js.map +1 -1
  264. package/dist/utility/serialization/scene/common.js +26 -5
  265. package/dist/utility/serialization/scene/common.js.map +1 -1
  266. package/dist/utility/serialization/scene/hair.js +1141 -0
  267. package/dist/utility/serialization/scene/hair.js.map +1 -0
  268. package/dist/utility/serialization/scene/light.js +84 -4
  269. package/dist/utility/serialization/scene/light.js.map +1 -1
  270. package/dist/utility/serialization/scene/material.js +1867 -166
  271. package/dist/utility/serialization/scene/material.js.map +1 -1
  272. package/dist/utility/serialization/scene/mesh.js +231 -14
  273. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  274. package/dist/utility/serialization/scene/node.js +141 -7
  275. package/dist/utility/serialization/scene/node.js.map +1 -1
  276. package/dist/utility/serialization/scene/particle.js +4 -0
  277. package/dist/utility/serialization/scene/particle.js.map +1 -1
  278. package/dist/utility/serialization/scene/primitive.js +18 -0
  279. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  280. package/dist/utility/serialization/scene/sprite.js +4 -0
  281. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  282. package/dist/utility/serialization/scene/terrain.js +4 -0
  283. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  284. package/dist/utility/serialization/scene/text.js +4 -0
  285. package/dist/utility/serialization/scene/text.js.map +1 -1
  286. package/dist/utility/serialization/scene/water.js +1105 -21
  287. package/dist/utility/serialization/scene/water.js.map +1 -1
  288. package/dist/utility/serialization/types.js.map +1 -1
  289. package/dist/utility/shprojector.js +9 -8
  290. package/dist/utility/shprojector.js.map +1 -1
  291. package/dist/values.js +49 -2
  292. package/dist/values.js.map +1 -1
  293. package/package.json +3 -3
  294. package/dist/render/rendergraph/frame_graph_context.js +0 -41
  295. package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
  296. package/dist/shaders/ssgi.js +0 -63
  297. package/dist/shaders/ssgi.js.map +0 -1
  298. package/dist/shaders/ssgi_reprojection.js +0 -118
  299. package/dist/shaders/ssgi_reprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n scope.$l.sssTransmissionMask = pb.float(0);\r\n scope.$l.sssTransmissionAuthor = pb.float(1);\r\n scope.$l.sssThicknessScale = pb.clamp(\r\n pb.div(scope.zThicknessFactor ?? 0, pb.add(scope.zThicknessFactor ?? 0, 1)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssThinAuthorMask = pb.sub(1, scope.sssThicknessScale);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.mul(\r\n scope.sssTransmissionAuthor,\r\n pb.clamp(this.sampleTransmissionTexture(scope).r, 0, 1)\r\n );\r\n }\r\n if (this.thicknessTexture) {\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.clamp(\r\n pb.mix(\r\n pb.sub(1, scope.sssThicknessSample),\r\n pb.sub(1, pb.mul(scope.sssThicknessSample, scope.sssThicknessScale)),\r\n pb.add(0.35, pb.mul(scope.sssThicknessScale, 0.65))\r\n ),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = pb.clamp(\r\n pb.max(scope.sssTransmissionMask, scope.sssAuthoredTransmissionMask),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n if (!hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssProfileFallbackMask = pb.clamp(\r\n pb.add(\r\n pb.mul(scope.sssMask, 0.12),\r\n pb.add(pb.mul(scope.sssStrength, 0.18), pb.mul(scope.sssWidth, 0.24))\r\n ),\r\n 0,\r\n 0.42\r\n );\r\n scope.sssTransmissionMask = pb.max(scope.sssTransmissionMask, scope.sssProfileFallbackMask);\r\n }\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","sssTransmissionAuthor","sssThicknessScale","clamp","zThicknessFactor","sssThinAuthorMask","sub","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","r","g","sampleTransmissionTexture","sssThicknessSample","sampleThicknessTexture","mix","sssAuthoredTransmissionMask","max","sssScatterStrengthMask","sssScatterWidthMask","sssStrength","sssWidthBase","sssWidth","sssProfileFallbackMask","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}
1
+ {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n // Negative alpha marks profiles that need conservative screen-space thin-region inference.\r\n scope.$l.sssTransmissionMask = pb.float(hasExplicitTransmissionAuthoring ? 0 : -1);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssTransmissionAuthor = pb.float(this.thicknessTexture ? 1 : 0);\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.clamp(\r\n pb.mul(this.sampleTransmissionTexture(scope).r, scope.zTransmissionFactor ?? 0),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssThinAuthorMask = pb.float(this.transmissionTexture ? 1 : 0);\r\n if (this.thicknessTexture) {\r\n // KHR_materials_volume stores thickness in G: zero is thin and one is thick.\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.sub(1, scope.sssThicknessSample);\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = scope.sssAuthoredTransmissionMask;\r\n }\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","clamp","r","g","sssTransmissionAuthor","sampleTransmissionTexture","zTransmissionFactor","sssThinAuthorMask","sssThicknessSample","sampleThicknessTexture","sub","sssAuthoredTransmissionMask","sssScatterStrengthMask","sssScatterWidthMask","max","sssStrength","sssWidthBase","sssWidth","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}