@zephyr3d/scene 0.9.6 → 0.9.8
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.
- package/dist/animation/animationset.js +52 -55
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +92 -32
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +71 -27
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +4 -3
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/skeleton.js +7 -10
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/app/engine.js +3 -9
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +47 -16
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +3 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +346 -7
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +7 -3
- package/dist/avatar/wardrobe.js.map +1 -1
- package/dist/camera/camera.js +240 -34
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +1350 -622
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +23 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +178 -23
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +4 -4
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +2 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +100 -27
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +1 -1
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +276 -65
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -3
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +2 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/mtoon.js +574 -0
- package/dist/material/mtoon.js.map +1 -0
- package/dist/material/pbrblueprint.js +494 -331
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +118 -100
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +45 -15
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +812 -0
- package/dist/material/subsurfaceprofile.js.map +1 -0
- package/dist/material/unlit.js +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/compositor.js +46 -11
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/ssr.js +413 -87
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +1053 -0
- package/dist/posteffect/sss.js.map +1 -0
- package/dist/posteffect/taa.js +61 -60
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +63 -12
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +6 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +1 -5
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +2 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +2 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +2 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +2 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/lightpass.js +105 -18
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +51 -8
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +73 -59
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +8 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +481 -95
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +55 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +10 -4
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sky.js +31 -1
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +23 -5
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +4 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -1
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +11 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +21 -3
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +29 -14
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +5 -2
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +5 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +3 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +6 -5
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +4 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +2 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -2
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +4 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +26 -393
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +112 -12
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +2 -2
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +19 -10
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +58 -7
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +6 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +229 -0
- package/dist/shadow/shadow_region.js.map +1 -0
- package/dist/shadow/shadowmapper.js +67 -59
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +45 -19
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +8 -8
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +31 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +1 -17
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +66 -98
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +5 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +249 -54
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +37 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +42 -3
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1112 -646
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +7 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +31 -12
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +3 -1
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +18 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +5 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -1
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +6 -0
- package/dist/utility/textures/ltcdata.js.map +1 -0
- package/dist/utility/textures/ltclut.js +61 -0
- package/dist/utility/textures/ltclut.js.map +1 -0
- package/dist/values.js +9 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -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, Immutable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\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 /** @internal */\r\n private static readonly FEATURE_SUBSURFACE_SCATTERING = this.defineFeature();\r\n private readonly _subsurfaceColor: Vector3;\r\n private _subsurfaceScale: number;\r\n private _subsurfacePower: number;\r\n private _subsurfaceIntensity: number;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceColor = new Vector3(1, 0.3, 0.2);\r\n this._subsurfaceScale = 0.5;\r\n this._subsurfacePower = 1.5;\r\n this._subsurfaceIntensity = 0.5;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, false);\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.subsurfaceScattering = other.subsurfaceScattering;\r\n this.subsurfaceColor = other.subsurfaceColor;\r\n this.subsurfaceScale = other.subsurfaceScale;\r\n this.subsurfacePower = other.subsurfacePower;\r\n this.subsurfaceIntensity = other.subsurfaceIntensity;\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 /** true if subsurface scattering is enabled */\r\n get subsurfaceScattering() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING);\r\n }\r\n set subsurfaceScattering(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_SUBSURFACE_SCATTERING, !!val);\r\n }\r\n /** subsurface scattering color tint */\r\n get subsurfaceColor(): Immutable<Vector3> {\r\n return this._subsurfaceColor;\r\n }\r\n set subsurfaceColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._subsurfaceColor)) {\r\n this._subsurfaceColor.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** wrap factor for the scattering profile */\r\n get subsurfaceScale() {\r\n return this._subsurfaceScale;\r\n }\r\n set subsurfaceScale(val: number) {\r\n if (val !== this._subsurfaceScale) {\r\n this._subsurfaceScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** profile exponent for the scattering profile */\r\n get subsurfacePower() {\r\n return this._subsurfacePower;\r\n }\r\n set subsurfacePower(val: number) {\r\n if (val !== this._subsurfacePower) {\r\n this._subsurfacePower = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** final intensity of scattering contribution */\r\n get subsurfaceIntensity() {\r\n return this._subsurfaceIntensity;\r\n }\r\n set subsurfaceIntensity(val: number) {\r\n if (val !== this._subsurfaceIntensity) {\r\n this._subsurfaceIntensity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n private getSubsurfaceColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceColor : scope.zSubsurfaceColor) as PBShaderExp;\r\n }\r\n private getSubsurfaceScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceScale : scope.zSubsurfaceScale) as PBShaderExp;\r\n }\r\n private getSubsurfacePower(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfacePower : scope.zSubsurfacePower) as PBShaderExp;\r\n }\r\n private getSubsurfaceIntensity(scope: PBInsideFunctionScope): PBShaderExp {\r\n const instancing = !!(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING);\r\n return (instancing ? scope.$inputs.zSubsurfaceIntensity : scope.zSubsurfaceIntensity) 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 if (this.transmission) {\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 if (\r\n this.subsurfaceScattering &&\r\n this.needFragmentColor() &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n scope.zSubsurfaceColor = pb.vec3().uniform(2);\r\n scope.zSubsurfaceScale = pb.float().uniform(2);\r\n scope.zSubsurfacePower = pb.float().uniform(2);\r\n scope.zSubsurfaceIntensity = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColor()) {\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 (this.drawContext.renderPass!.type === 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 (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\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 if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\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 );\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 if (this.subsurfaceScattering) {\r\n scope.$l.NoV = pb.clamp(pb.dot(scope.normalInfo.normal, scope.viewVec), 0, 1);\r\n scope.$l.wrapNdotV = pb.clamp(\r\n pb.div(\r\n pb.add(pb.sub(1, scope.NoV), this.getSubsurfaceScale(scope)),\r\n pb.add(1, this.getSubsurfaceScale(scope))\r\n ),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssFactor = pb.mul(\r\n pb.pow(scope.wrapNdotV, this.getSubsurfacePower(scope)),\r\n this.getSubsurfaceIntensity(scope)\r\n );\r\n if (this.subsurfaceTexture) {\r\n scope.sssFactor = pb.mul(scope.sssFactor, this.sampleSubsurfaceTexture(scope).r);\r\n }\r\n scope.litColor = pb.add(\r\n scope.litColor,\r\n pb.mul(scope.albedo.rgb, this.getSubsurfaceColor(scope), scope.sssFactor)\r\n );\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\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.subsurfaceScattering &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zSubsurfaceColor', this._subsurfaceColor);\r\n bindGroup.setValue('zSubsurfaceScale', this._subsurfaceScale);\r\n bindGroup.setValue('zSubsurfacePower', this._subsurfacePower);\r\n bindGroup.setValue('zSubsurfaceIntensity', this._subsurfaceIntensity);\r\n }\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","FEATURE_SUBSURFACE_SCATTERING","_subsurfaceColor","_subsurfaceScale","_subsurfacePower","_subsurfaceIntensity","Vector3","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceScattering","subsurfaceColor","subsurfaceScale","subsurfacePower","subsurfaceIntensity","featureUsed","val","equalsTo","set","uniformChanged","getSubsurfaceColor","scope","instancing","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zSubsurfaceColor","getSubsurfaceScale","zSubsurfaceScale","getSubsurfacePower","zSubsurfacePower","getSubsurfaceIntensity","zSubsurfaceIntensity","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColor","renderPass","type","RENDER_PASS_TYPE_LIGHT","uniform","float","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","NoV","clamp","dot","wrapNdotV","sub","sssFactor","pow","subsurfaceTexture","sampleSubsurfaceTexture","r","rgb","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":";;;;;;;;AAWA;;;AAGC,IACM,MAAMA,4BAAAA,SACHC,oBACNC,YACAC,EAAAA,yBAAAA,EACAC,kBACAC,iBAAkB,CAAA,YAAA,CAAA,CAAA,CAAA;AAIpB,qBACA,OAAwBC,qBAAAA,GAAwB,IAAI,CAACC,aAAa,EAAG;AACrE,qBACA,OAAwBC,sBAAAA,GAAyB,IAAI,CAACD,aAAa,EAAG;AACtE,qBACA,OAAwBE,6BAAAA,GAAgC,IAAI,CAACF,aAAa,EAAG;IAC5DG,gBAA0B;IACnCC,gBAAyB;IACzBC,gBAAyB;IACzBC,oBAA6B;AACrC;;AAEC,MACD,WAAc,EAAA;QACZ,KAAK,EAAA;AACL,QAAA,IAAI,CAACH,gBAAgB,GAAG,IAAII,OAAAA,CAAQ,GAAG,GAAK,EAAA,GAAA,CAAA;QAC5C,IAAI,CAACH,gBAAgB,GAAG,GAAA;QACxB,IAAI,CAACC,gBAAgB,GAAG,GAAA;QACxB,IAAI,CAACC,oBAAoB,GAAG,GAAA;AAC5B,QAAA,IAAI,CAACE,UAAU,CAACf,4BAAAA,CAA6BM,qBAAqB,EAAE,IAAA,CAAA;AACpE,QAAA,IAAI,CAACS,UAAU,CAACf,4BAAAA,CAA6BS,6BAA6B,EAAE,KAAA,CAAA;QAC5E,IAAI,CAACO,YAAY,GAAG,KAAA;QACpB,IAAI,CAACC,kBAAkB,GAAG,GAAA;QAC1B,IAAI,CAACC,eAAe,GAAG,IAAA;AACvB,QAAA,IAAI,CAACC,gBAAgB,GAAG,IAAIL,OAAAA,CAAQ,GAAG,GAAK,EAAA,GAAA,CAAA;QAC5C,IAAI,CAACM,mBAAmB,GAAG,GAAA;AAC7B;IACAC,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAItB,4BAAAA,EAAAA;QAClBsB,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACAC,IAAAA,QAAAA,CAASD,KAAW,EAAE;AACpB,QAAA,KAAK,CAACC,QAASD,CAAAA,KAAAA,CAAAA;AACf,QAAA,IAAI,CAACE,YAAY,GAAGF,KAAAA,CAAME,YAAY;AACtC,QAAA,IAAI,CAACC,aAAa,GAAGH,KAAAA,CAAMG,aAAa;AACxC,QAAA,IAAI,CAACC,oBAAoB,GAAGJ,KAAAA,CAAMI,oBAAoB;AACtD,QAAA,IAAI,CAACC,eAAe,GAAGL,KAAAA,CAAMK,eAAe;AAC5C,QAAA,IAAI,CAACC,eAAe,GAAGN,KAAAA,CAAMM,eAAe;AAC5C,QAAA,IAAI,CAACC,eAAe,GAAGP,KAAAA,CAAMO,eAAe;AAC5C,QAAA,IAAI,CAACC,mBAAmB,GAAGR,KAAAA,CAAMQ,mBAAmB;AACtD;oDAEA,IAAIN,YAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAACO,WAAW,CAAU/B,6BAA6BM,qBAAqB,CAAA;AACrF;IACA,IAAIkB,YAAAA,CAAaQ,GAAG,EAAE;AACpB,QAAA,IAAI,CAACjB,UAAU,CAACf,6BAA6BM,qBAAqB,EAAE,CAAC,CAAC0B,GAAAA,CAAAA;AACxE;oDAEA,IAAIP,aAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAACM,WAAW,CAAU/B,6BAA6BQ,sBAAsB,CAAA;AACtF;IACA,IAAIiB,aAAAA,CAAcO,GAAG,EAAE;AACrB,QAAA,IAAI,CAACjB,UAAU,CAACf,6BAA6BQ,sBAAsB,EAAE,CAAC,CAACwB,GAAAA,CAAAA;AACzE;oDAEA,IAAIN,oBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAACK,WAAW,CAAU/B,6BAA6BS,6BAA6B,CAAA;AAC7F;IACA,IAAIiB,oBAAAA,CAAqBM,GAAG,EAAE;AAC5B,QAAA,IAAI,CAACjB,UAAU,CAACf,6BAA6BS,6BAA6B,EAAE,CAAC,CAACuB,GAAAA,CAAAA;AAChF;4CAEA,IAAIL,eAAsC,GAAA;QACxC,OAAO,IAAI,CAACjB,gBAAgB;AAC9B;IACA,IAAIiB,eAAAA,CAAgBK,GAAuB,EAAE;AAC3C,QAAA,IAAI,CAACA,GAAIC,CAAAA,QAAQ,CAAC,IAAI,CAACvB,gBAAgB,CAAG,EAAA;AACxC,YAAA,IAAI,CAACA,gBAAgB,CAACwB,GAAG,CAACF,GAAAA,CAAAA;AAC1B,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;kDAEA,IAAIP,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACjB,gBAAgB;AAC9B;IACA,IAAIiB,eAAAA,CAAgBI,GAAW,EAAE;AAC/B,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACrB,gBAAgB,EAAE;YACjC,IAAI,CAACA,gBAAgB,GAAGqB,GAAAA;AACxB,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;uDAEA,IAAIN,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACjB,gBAAgB;AAC9B;IACA,IAAIiB,eAAAA,CAAgBG,GAAW,EAAE;AAC/B,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACpB,gBAAgB,EAAE;YACjC,IAAI,CAACA,gBAAgB,GAAGoB,GAAAA;AACxB,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;sDAEA,IAAIL,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAACjB,oBAAoB;AAClC;IACA,IAAIiB,mBAAAA,CAAoBE,GAAW,EAAE;AACnC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACnB,oBAAoB,EAAE;YACrC,IAAI,CAACA,oBAAoB,GAAGmB,GAAAA;AAC5B,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;AACQC,IAAAA,kBAAAA,CAAmBC,KAA4B,EAAe;AACpE,QAAA,MAAMC,UAAa,GAAA,CAAC,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAD;AACrF,QAAA,OAAQJ,aAAaD,KAAMM,CAAAA,OAAO,CAACC,gBAAgB,GAAGP,MAAMO,gBAAgB;AAC9E;AACQC,IAAAA,kBAAAA,CAAmBR,KAA4B,EAAe;AACpE,QAAA,MAAMC,UAAa,GAAA,CAAC,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAD;AACrF,QAAA,OAAQJ,aAAaD,KAAMM,CAAAA,OAAO,CAACG,gBAAgB,GAAGT,MAAMS,gBAAgB;AAC9E;AACQC,IAAAA,kBAAAA,CAAmBV,KAA4B,EAAe;AACpE,QAAA,MAAMC,UAAa,GAAA,CAAC,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAD;AACrF,QAAA,OAAQJ,aAAaD,KAAMM,CAAAA,OAAO,CAACK,gBAAgB,GAAGX,MAAMW,gBAAgB;AAC9E;AACQC,IAAAA,sBAAAA,CAAuBZ,KAA4B,EAAe;AACxE,QAAA,MAAMC,UAAa,GAAA,CAAC,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAD;AACrF,QAAA,OAAQJ,aAAaD,KAAMM,CAAAA,OAAO,CAACO,oBAAoB,GAAGb,MAAMa,oBAAoB;AACtF;AACAC,IAAAA,YAAAA,CAAad,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACc,YAAad,CAAAA,KAAAA,CAAAA;QACnB,MAAMe,EAAAA,GAAKf,MAAMgB,QAAQ;QACzB,MAAMC,WAAAA,GAAcC,YAAaC,CAAAA,cAAc,CAACnB,KAAAA,CAAAA;AAChDA,QAAAA,KAAAA,CAAMoB,EAAE,CAACC,IAAI,GAAGH,YAAAA,CAAaI,qBAAqB,CAACtB,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMuB,QAAQ,CAACC,QAAQ,GAAGT,GAAGU,GAAG,CAACR,WAAaF,EAAAA,EAAAA,CAAGW,IAAI,CAAC1B,KAAAA,CAAMqB,IAAI,EAAE,IAAIM,GAAG;AACzE3B,QAAAA,KAAAA,CAAMoB,EAAE,CAACQ,KAAK,GAAGb,EAAGU,CAAAA,GAAG,CAACP,YAAaW,CAAAA,uBAAuB,CAAC7B,KAAAA,CAAAA,EAAQe,GAAGW,IAAI,CAAC1B,MAAMuB,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA;AACtGN,QAAAA,YAAAA,CAAaY,oBAAoB,CAAC9B,KAAOA,EAAAA,KAAAA,CAAM4B,KAAK,CAAA;QACpD,IAAI,IAAI,CAACjD,YAAY,EAAE;YACrBqB,KAAMuB,CAAAA,QAAQ,CAACQ,QAAQ,GAAGhB,EAAAA,CAAGiB,GAAG,CAACjB,EAAGU,CAAAA,GAAG,CAACV,EAAAA,CAAGkB,GAAG,CAACjC,MAAM4B,KAAK,CAACM,EAAE,EAAElC,KAAM4B,CAAAA,KAAK,CAACO,CAAC,CAAG,EAAA,GAAA,CAAA,EAAMpB,EAAGqB,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;AAC7FpC,YAAAA,KAAAA,CAAMuB,QAAQ,CAACc,UAAU,GAAGtB,GAAGuB,IAAI,CACjCvB,EAAGwB,CAAAA,MAAM,CAACtB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,EAC5BZ,EAAGwB,CAAAA,MAAM,CAACtB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,EAC5BZ,EAAGwB,CAAAA,MAAM,CAACtB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,CAAA;AAEhC;QACA,IAAI,IAAI,CAACxC,YAAY,EAAE;AACrBa,YAAAA,KAAAA,CAAMoB,EAAE,CAACoB,KAAK,GAAGtB,YAAAA,CAAauB,mBAAmB,CAACzC,KAAAA,CAAAA;AAClDA,YAAAA,KAAAA,CAAMuB,QAAQ,CAACmB,KAAK,GAAG3B,EAAGU,CAAAA,GAAG,CAACP,YAAayB,CAAAA,eAAe,CAAC3C,KAAAA,CAAAA,EAAQe,GAAGW,IAAI,CAAC1B,MAAMwC,KAAK,EAAE,IAAIb,GAAG;YAC/F,IAAI,IAAI,CAACvC,aAAa,EAAE;AACtBY,gBAAAA,KAAAA,CAAMoB,EAAE,CAACwB,QAAQ,GAAG1B,YAAAA,CAAa2B,oBAAoB,CAAC7C,KAAAA,CAAAA;gBACtDA,KAAMuB,CAAAA,QAAQ,CAACuB,QAAQ,GAAG/B,GAAGU,GAAG,CAC9BP,aAAayB,eAAe,CAAC3C,QAC7Be,EAAGW,CAAAA,IAAI,CAAC1B,KAAM4C,CAAAA,QAAQ,CAACjB,GAAG,EAAE,IAC5BA,GAAG;gBACL3B,KAAMuB,CAAAA,QAAQ,CAACwB,SAAS,GAAGhC,GAAGU,GAAG,CAC/BV,EAAGiC,CAAAA,KAAK,CAAChD,KAAAA,CAAMuB,QAAQ,CAACmB,KAAK,EAAE1C,KAAAA,CAAMuB,QAAQ,CAACuB,QAAQ,CACtD9C,EAAAA,KAAAA,CAAM4C,QAAQ,CAACT,CAAC,CAAA;AAEpB;AACF;AACF;AACAc,IAAAA,cAAAA,CAAejD,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACiD,cAAejD,CAAAA,KAAAA,CAAAA;QACrB,MAAMe,EAAAA,GAAKf,MAAMgB,QAAQ;AACzB,QAAA,IACE,IAAI,CAAC3B,oBAAoB,IACzB,IAAI,CAAC6D,iBAAiB,EAAA,IACtB,IAAI,CAAChD,WAAW,CAACiD,UAAU,CAAEC,IAAI,KAAKC,sBACtC,EAAA;AACArD,YAAAA,KAAAA,CAAMO,gBAAgB,GAAGQ,EAAAA,CAAGuB,IAAI,EAAA,CAAGgB,OAAO,CAAC,CAAA,CAAA;AAC3CtD,YAAAA,KAAAA,CAAMS,gBAAgB,GAAGM,EAAAA,CAAGwC,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC5CtD,YAAAA,KAAAA,CAAMW,gBAAgB,GAAGI,EAAAA,CAAGwC,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC5CtD,YAAAA,KAAAA,CAAMa,oBAAoB,GAAGE,EAAAA,CAAGwC,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAClD;QACA,IAAI,IAAI,CAACJ,iBAAiB,EAAI,EAAA;AAC5BlD,YAAAA,KAAAA,CAAMoB,EAAE,CAACoC,MAAM,GAAG,IAAI,CAACC,oBAAoB,CAACzD,KAAAA,CAAAA;YAC5C,IAAI,IAAI,CAAC0D,WAAW,EAAE;gBACpB1D,KAAMwD,CAAAA,MAAM,GAAGzC,EAAAA,CAAGU,GAAG,CAACzB,KAAMwD,CAAAA,MAAM,EAAE,IAAI,CAACG,cAAc,CAAC3D,KAAAA,CAAAA,CAAAA;AAC1D;YACA,IAAI,IAAI,CAACE,WAAW,CAACiD,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;gBAChErD,KAAMoB,CAAAA,EAAE,CAACwC,UAAU,GAAG,IAAI,CAACC,qBAAqB,CAC9C7D,KAAAA,EACAA,KAAMM,CAAAA,OAAO,CAACkB,QAAQ,EACtBxB,KAAAA,CAAMM,OAAO,CAACoC,KAAK,EACnB1C,KAAMM,CAAAA,OAAO,CAACwC,QAAQ,EACtB9C,KAAAA,CAAMM,OAAO,CAACyC,SAAS,CAAA;AAEzB/C,gBAAAA,KAAAA,CAAMoB,EAAE,CAAC0C,OAAO,GAAG,IAAI,CAACC,mBAAmB,CAAC/D,KAAOA,EAAAA,KAAAA,CAAMM,OAAO,CAACkB,QAAQ,CAAA;gBACzE,IAAI,IAAI,CAACtB,WAAW,CAACC,aAAa,GAAGC,oBAAAA,CAAqB4D,mBAAmB,EAAE;AAC7EhE,oBAAAA,KAAAA,CAAMoB,EAAE,CAAC6C,YAAY,GAAGlD,GAAGW,IAAI,EAAA;AAC/B1B,oBAAAA,KAAAA,CAAMoB,EAAE,CAAC8C,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/BnE,KACAA,EAAAA,KAAAA,CAAMM,OAAO,CAACkB,QAAQ,EACtBxB,KAAAA,CAAM4D,UAAU,CAACQ,MAAM,EACvBpE,KAAM8D,CAAAA,OAAO,EACb9D,KAAMwD,CAAAA,MAAM,EACZxD,KAAAA,CAAM4D,UAAU,CAACS,GAAG,EACpBrE,MAAMiE,YAAY,CAAA;oBAEpB,IAAI,IAAI,CAAC5E,oBAAoB,EAAE;AAC7BW,wBAAAA,KAAAA,CAAMoB,EAAE,CAACkD,GAAG,GAAGvD,EAAGwD,CAAAA,KAAK,CAACxD,EAAGyD,CAAAA,GAAG,CAACxE,KAAAA,CAAM4D,UAAU,CAACQ,MAAM,EAAEpE,KAAM8D,CAAAA,OAAO,GAAG,CAAG,EAAA,CAAA,CAAA;AAC3E9D,wBAAAA,KAAAA,CAAMoB,EAAE,CAACqD,SAAS,GAAG1D,GAAGwD,KAAK,CAC3BxD,EAAGkB,CAAAA,GAAG,CACJlB,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAG2D,GAAG,CAAC,CAAA,EAAG1E,KAAMsE,CAAAA,GAAG,CAAG,EAAA,IAAI,CAAC9D,kBAAkB,CAACR,KACrDe,CAAAA,CAAAA,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,GAAG,IAAI,CAACxB,kBAAkB,CAACR,UAEpC,CACA,EAAA,CAAA,CAAA;wBAEFA,KAAMoB,CAAAA,EAAE,CAACuD,SAAS,GAAG5D,GAAGU,GAAG,CACzBV,GAAG6D,GAAG,CAAC5E,MAAMyE,SAAS,EAAE,IAAI,CAAC/D,kBAAkB,CAACV,KAChD,CAAA,CAAA,EAAA,IAAI,CAACY,sBAAsB,CAACZ,KAAAA,CAAAA,CAAAA;wBAE9B,IAAI,IAAI,CAAC6E,iBAAiB,EAAE;AAC1B7E,4BAAAA,KAAAA,CAAM2E,SAAS,GAAG5D,EAAGU,CAAAA,GAAG,CAACzB,KAAAA,CAAM2E,SAAS,EAAE,IAAI,CAACG,uBAAuB,CAAC9E,OAAO+E,CAAC,CAAA;AACjF;wBACA/E,KAAMkE,CAAAA,QAAQ,GAAGnD,EAAGiB,CAAAA,GAAG,CACrBhC,KAAMkE,CAAAA,QAAQ,EACdnD,EAAAA,CAAGU,GAAG,CAACzB,MAAMwD,MAAM,CAACwB,GAAG,EAAE,IAAI,CAACjF,kBAAkB,CAACC,KAAQA,CAAAA,EAAAA,KAAAA,CAAM2E,SAAS,CAAA,CAAA;AAE5E;AACA;;;;;AAKA,aACA,IAAI,CAACM,mBAAmB,CACtBjF,KACAA,EAAAA,KAAAA,CAAMM,OAAO,CAACkB,QAAQ,EACtBT,EAAGW,CAAAA,IAAI,CAAC1B,KAAMkE,CAAAA,QAAQ,EAAElE,KAAMwD,CAAAA,MAAM,CAAC0B,CAAC,CAAA,EACtClF,KAAMiE,CAAAA,YAAY,EAClBlD,EAAGW,CAAAA,IAAI,CAACX,EAAGiB,CAAAA,GAAG,CAACjB,EAAGU,CAAAA,GAAG,CAACzB,KAAM4D,CAAAA,UAAU,CAACQ,MAAM,EAAE,MAAMrD,EAAGuB,CAAAA,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;iBAEjE,MAAA;AACLtC,oBAAAA,KAAAA,CAAMoB,EAAE,CAAC8C,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/BnE,KACAA,EAAAA,KAAAA,CAAMM,OAAO,CAACkB,QAAQ,EACtBxB,KAAM4D,CAAAA,UAAU,CAACQ,MAAM,EACvBpE,KAAAA,CAAM8D,OAAO,EACb9D,KAAMwD,CAAAA,MAAM,EACZxD,KAAAA,CAAM4D,UAAU,CAACS,GAAG,CAAA;oBAEtB,IAAI,IAAI,CAAChF,oBAAoB,EAAE;AAC7BW,wBAAAA,KAAAA,CAAMoB,EAAE,CAACkD,GAAG,GAAGvD,EAAGwD,CAAAA,KAAK,CAACxD,EAAGyD,CAAAA,GAAG,CAACxE,KAAAA,CAAM4D,UAAU,CAACQ,MAAM,EAAEpE,KAAM8D,CAAAA,OAAO,GAAG,CAAG,EAAA,CAAA,CAAA;AAC3E9D,wBAAAA,KAAAA,CAAMoB,EAAE,CAACqD,SAAS,GAAG1D,GAAGwD,KAAK,CAC3BxD,EAAGkB,CAAAA,GAAG,CACJlB,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAG2D,GAAG,CAAC,CAAA,EAAG1E,KAAMsE,CAAAA,GAAG,CAAG,EAAA,IAAI,CAAC9D,kBAAkB,CAACR,KACrDe,CAAAA,CAAAA,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,GAAG,IAAI,CAACxB,kBAAkB,CAACR,UAEpC,CACA,EAAA,CAAA,CAAA;wBAEFA,KAAMoB,CAAAA,EAAE,CAACuD,SAAS,GAAG5D,GAAGU,GAAG,CACzBV,GAAG6D,GAAG,CAAC5E,MAAMyE,SAAS,EAAE,IAAI,CAAC/D,kBAAkB,CAACV,KAChD,CAAA,CAAA,EAAA,IAAI,CAACY,sBAAsB,CAACZ,KAAAA,CAAAA,CAAAA;wBAE9B,IAAI,IAAI,CAAC6E,iBAAiB,EAAE;AAC1B7E,4BAAAA,KAAAA,CAAM2E,SAAS,GAAG5D,EAAGU,CAAAA,GAAG,CAACzB,KAAAA,CAAM2E,SAAS,EAAE,IAAI,CAACG,uBAAuB,CAAC9E,OAAO+E,CAAC,CAAA;AACjF;wBACA/E,KAAMkE,CAAAA,QAAQ,GAAGnD,EAAGiB,CAAAA,GAAG,CACrBhC,KAAMkE,CAAAA,QAAQ,EACdnD,EAAAA,CAAGU,GAAG,CAACzB,MAAMwD,MAAM,CAACwB,GAAG,EAAE,IAAI,CAACjF,kBAAkB,CAACC,KAAQA,CAAAA,EAAAA,KAAAA,CAAM2E,SAAS,CAAA,CAAA;AAE5E;AACA,oBAAA,IAAI,CAACM,mBAAmB,CAACjF,OAAOA,KAAMM,CAAAA,OAAO,CAACkB,QAAQ,EAAET,EAAGW,CAAAA,IAAI,CAAC1B,KAAMkE,CAAAA,QAAQ,EAAElE,KAAMwD,CAAAA,MAAM,CAAC0B,CAAC,CAAA,CAAA;AAChG;aACK,MAAA;gBACL,IAAI,CAACD,mBAAmB,CAACjF,KAAOA,EAAAA,KAAAA,CAAMM,OAAO,CAACkB,QAAQ,EAAExB,KAAAA,CAAMwD,MAAM,CAAA;AACtE;SACK,MAAA;YACL,IAAI,CAACyB,mBAAmB,CAACjF,KAAAA,EAAOA,MAAMM,OAAO,CAACkB,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACA2D,IAAAA,kBAAAA,CAAmBC,SAAoB,EAAEC,GAAgB,EAAEC,IAAY,EAAE;QACvE,KAAK,CAACH,kBAAmBC,CAAAA,SAAAA,EAAWC,GAAKC,EAAAA,IAAAA,CAAAA;QACzC,IACE,IAAI,CAACjG,oBAAoB,IACzB,IAAI,CAAC6D,iBAAiB,CAACmC,GAAAA,CAAAA,IACvBA,GAAIlC,CAAAA,UAAU,CAAEC,IAAI,KAAKC,sBACzB,IAAA,EAAEgC,GAAAA,CAAIlF,aAAa,GAAGC,oBAAAA,CAAqBC,UAAS,CACpD,EAAA;AACA+E,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAClH,gBAAgB,CAAA;AAC5D+G,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAACjH,gBAAgB,CAAA;AAC5D8G,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAChH,gBAAgB,CAAA;AAC5D6G,YAAAA,SAAAA,CAAUG,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAAC/G,oBAAoB,CAAA;AACtE;AACF;AACF;;;;"}
|
|
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 (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\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","SSR_STORE_ROUGHNESS","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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"}
|
package/dist/material/pbrsg.js
CHANGED
|
@@ -63,7 +63,7 @@ import { RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags } from '../values.js';
|
|
|
63
63
|
fragmentShader(scope) {
|
|
64
64
|
super.fragmentShader(scope);
|
|
65
65
|
const pb = scope.$builder;
|
|
66
|
-
if (this.
|
|
66
|
+
if (this.needFragmentColorInput()) {
|
|
67
67
|
scope.$l.albedo = this.calculateAlbedoColor(scope);
|
|
68
68
|
if (this.vertexColor) {
|
|
69
69
|
scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrsg.js","sources":["../../src/material/pbrsg.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { mixinPBRSpecularGlossness } from './mixins/lightmodel/pbrspecularglossness';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * PBRSpecularGlossinessMaterial class\r\n * @public\r\n */\r\nexport class PBRSpecularGlossinessMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRSpecularGlossness, mixinVertexColor)\r\n implements Clonable<PBRSpecularGlossinessMaterial>\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 /**\r\n * Creates an instance of PBRSpecularGlossinessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n }\r\n clone() {\r\n const other = new PBRSpecularGlossinessMaterial();\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 }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT, !!val);\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 if (this.transmission) {\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 if (this.needFragmentColor()) {\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 (this.drawContext.renderPass!.type === 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 (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\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 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 );\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 this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\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}\r\n"],"names":["PBRSpecularGlossinessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRSpecularGlossness","mixinVertexColor","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","useFeature","clone","other","copyFrom","vertexNormal","vertexTangent","featureUsed","val","vertexShader","scope","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","transmission","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColor","albedo","calculateAlbedoColor","vertexColor","getVertexColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","outputFragmentColor","a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pbrsg.js","sources":["../../src/material/pbrsg.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { mixinPBRSpecularGlossness } from './mixins/lightmodel/pbrspecularglossness';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * PBRSpecularGlossinessMaterial class\r\n * @public\r\n */\r\nexport class PBRSpecularGlossinessMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinPBRSpecularGlossness, mixinVertexColor)\r\n implements Clonable<PBRSpecularGlossinessMaterial>\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 /**\r\n * Creates an instance of PBRSpecularGlossinessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n }\r\n clone() {\r\n const other = new PBRSpecularGlossinessMaterial();\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 }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRSpecularGlossinessMaterial.FEATURE_VERTEX_TANGENT, !!val);\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 if (this.transmission) {\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 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 (this.drawContext.renderPass!.type === 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 (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4();\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 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 );\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 this.outputFragmentColor(scope, scope.$inputs.worldPos, pb.vec4(scope.litColor, scope.albedo.a));\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}\r\n"],"names":["PBRSpecularGlossinessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRSpecularGlossness","mixinVertexColor","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","useFeature","clone","other","copyFrom","vertexNormal","vertexTangent","featureUsed","val","vertexShader","scope","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","transmission","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","litColor","PBRLight","normal","TBN","outputFragmentColor","a"],"mappings":";;;;;;AAQA;;;AAGC,IACM,MAAMA,6BACHC,SAAAA,mBAAAA,CAAoBC,cAAcC,yBAA2BC,EAAAA,gBAAAA,CAAAA,CAAAA;AAGrE,qBACA,OAAwBC,qBAAAA,GAAwB,IAAI,CAACC,aAAa,EAAG;AACrE,qBACA,OAAwBC,sBAAAA,GAAyB,IAAI,CAACD,aAAa,EAAG;AACtE;;AAEC,MACD,WAAc,EAAA;QACZ,KAAK,EAAA;AACL,QAAA,IAAI,CAACE,UAAU,CAACR,6BAAAA,CAA8BK,qBAAqB,EAAE,IAAA,CAAA;AACvE;IACAI,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIV,6BAAAA,EAAAA;QAClBU,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACAC,IAAAA,QAAAA,CAASD,KAAW,EAAE;AACpB,QAAA,KAAK,CAACC,QAASD,CAAAA,KAAAA,CAAAA;AACf,QAAA,IAAI,CAACE,YAAY,GAAGF,KAAAA,CAAME,YAAY;AACtC,QAAA,IAAI,CAACC,aAAa,GAAGH,KAAAA,CAAMG,aAAa;AAC1C;oDAEA,IAAID,YAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAACE,WAAW,CAAUd,8BAA8BK,qBAAqB,CAAA;AACtF;IACA,IAAIO,YAAAA,CAAaG,GAAG,EAAE;AACpB,QAAA,IAAI,CAACP,UAAU,CAACR,8BAA8BK,qBAAqB,EAAE,CAAC,CAACU,GAAAA,CAAAA;AACzE;oDAEA,IAAIF,aAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAACC,WAAW,CAAUd,8BAA8BO,sBAAsB,CAAA;AACvF;IACA,IAAIM,aAAAA,CAAcE,GAAG,EAAE;AACrB,QAAA,IAAI,CAACP,UAAU,CAACR,8BAA8BO,sBAAsB,EAAE,CAAC,CAACQ,GAAAA,CAAAA;AAC1E;AACAC,IAAAA,YAAAA,CAAaC,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;QACnB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;QACzB,MAAMC,WAAAA,GAAcC,YAAaC,CAAAA,cAAc,CAACL,KAAAA,CAAAA;AAChDA,QAAAA,KAAAA,CAAMM,EAAE,CAACC,IAAI,GAAGH,YAAAA,CAAaI,qBAAqB,CAACR,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMS,QAAQ,CAACC,QAAQ,GAAGT,GAAGU,GAAG,CAACR,WAAaF,EAAAA,EAAAA,CAAGW,IAAI,CAACZ,KAAAA,CAAMO,IAAI,EAAE,IAAIM,GAAG;AACzEb,QAAAA,KAAAA,CAAMM,EAAE,CAACQ,KAAK,GAAGb,EAAGU,CAAAA,GAAG,CAACP,YAAaW,CAAAA,uBAAuB,CAACf,KAAAA,CAAAA,EAAQC,GAAGW,IAAI,CAACZ,MAAMS,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA;AACtGN,QAAAA,YAAAA,CAAaY,oBAAoB,CAAChB,KAAOA,EAAAA,KAAAA,CAAMc,KAAK,CAAA;QACpD,IAAI,IAAI,CAACG,YAAY,EAAE;YACrBjB,KAAMS,CAAAA,QAAQ,CAACS,QAAQ,GAAGjB,EAAAA,CAAGkB,GAAG,CAAClB,EAAGU,CAAAA,GAAG,CAACV,EAAAA,CAAGmB,GAAG,CAACpB,MAAMc,KAAK,CAACO,EAAE,EAAErB,KAAMc,CAAAA,KAAK,CAACQ,CAAC,CAAG,EAAA,GAAA,CAAA,EAAMrB,EAAGsB,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;AAC7FvB,YAAAA,KAAAA,CAAMS,QAAQ,CAACe,UAAU,GAAGvB,GAAGwB,IAAI,CACjCxB,EAAGyB,CAAAA,MAAM,CAACvB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,EAC5BZ,EAAGyB,CAAAA,MAAM,CAACvB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,EAC5BZ,EAAGyB,CAAAA,MAAM,CAACvB,WAAW,CAAC,CAAA,CAAE,CAACU,GAAG,CAAA,CAAA;AAEhC;QACA,IAAI,IAAI,CAAClB,YAAY,EAAE;AACrBK,YAAAA,KAAAA,CAAMM,EAAE,CAACqB,KAAK,GAAGvB,YAAAA,CAAawB,mBAAmB,CAAC5B,KAAAA,CAAAA;AAClDA,YAAAA,KAAAA,CAAMS,QAAQ,CAACoB,KAAK,GAAG5B,EAAGU,CAAAA,GAAG,CAACP,YAAa0B,CAAAA,eAAe,CAAC9B,KAAAA,CAAAA,EAAQC,GAAGW,IAAI,CAACZ,MAAM2B,KAAK,EAAE,IAAId,GAAG;YAC/F,IAAI,IAAI,CAACjB,aAAa,EAAE;AACtBI,gBAAAA,KAAAA,CAAMM,EAAE,CAACyB,QAAQ,GAAG3B,YAAAA,CAAa4B,oBAAoB,CAAChC,KAAAA,CAAAA;gBACtDA,KAAMS,CAAAA,QAAQ,CAACwB,QAAQ,GAAGhC,GAAGU,GAAG,CAC9BP,aAAa0B,eAAe,CAAC9B,QAC7BC,EAAGW,CAAAA,IAAI,CAACZ,KAAM+B,CAAAA,QAAQ,CAAClB,GAAG,EAAE,IAC5BA,GAAG;gBACLb,KAAMS,CAAAA,QAAQ,CAACyB,SAAS,GAAGjC,GAAGU,GAAG,CAC/BV,EAAGkC,CAAAA,KAAK,CAACnC,KAAAA,CAAMS,QAAQ,CAACoB,KAAK,EAAE7B,KAAAA,CAAMS,QAAQ,CAACwB,QAAQ,CACtDjC,EAAAA,KAAAA,CAAM+B,QAAQ,CAACT,CAAC,CAAA;AAEpB;AACF;AACF;AACAc,IAAAA,cAAAA,CAAepC,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACoC,cAAepC,CAAAA,KAAAA,CAAAA;QACrB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;QACzB,IAAI,IAAI,CAACmC,sBAAsB,EAAI,EAAA;AACjCrC,YAAAA,KAAAA,CAAMM,EAAE,CAACgC,MAAM,GAAG,IAAI,CAACC,oBAAoB,CAACvC,KAAAA,CAAAA;YAC5C,IAAI,IAAI,CAACwC,WAAW,EAAE;gBACpBxC,KAAMsC,CAAAA,MAAM,GAAGrC,EAAAA,CAAGU,GAAG,CAACX,KAAMsC,CAAAA,MAAM,EAAE,IAAI,CAACG,cAAc,CAACzC,KAAAA,CAAAA,CAAAA;AAC1D;YACA,IAAI,IAAI,CAAC0C,WAAW,CAACC,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;gBAChE7C,KAAMM,CAAAA,EAAE,CAACwC,UAAU,GAAG,IAAI,CAACC,qBAAqB,CAC9C/C,KAAAA,EACAA,KAAMgD,CAAAA,OAAO,CAACtC,QAAQ,EACtBV,KAAAA,CAAMgD,OAAO,CAACnB,KAAK,EACnB7B,KAAMgD,CAAAA,OAAO,CAACf,QAAQ,EACtBjC,KAAAA,CAAMgD,OAAO,CAACd,SAAS,CAAA;AAEzBlC,gBAAAA,KAAAA,CAAMM,EAAE,CAAC2C,OAAO,GAAG,IAAI,CAACC,mBAAmB,CAAClD,KAAOA,EAAAA,KAAAA,CAAMgD,OAAO,CAACtC,QAAQ,CAAA;gBACzE,IAAI,IAAI,CAACgC,WAAW,CAACS,aAAa,GAAGC,oBAAAA,CAAqBC,mBAAmB,EAAE;AAC7ErD,oBAAAA,KAAAA,CAAMM,EAAE,CAACgD,YAAY,GAAGrD,GAAGW,IAAI,EAAA;AAC/BZ,oBAAAA,KAAAA,CAAMM,EAAE,CAACiD,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/BxD,KACAA,EAAAA,KAAAA,CAAMgD,OAAO,CAACtC,QAAQ,EACtBV,KAAAA,CAAM8C,UAAU,CAACW,MAAM,EACvBzD,KAAMiD,CAAAA,OAAO,EACbjD,KAAMsC,CAAAA,MAAM,EACZtC,KAAAA,CAAM8C,UAAU,CAACY,GAAG,EACpB1D,MAAMsD,YAAY,CAAA;AAEpB;;;;;AAKA,aACA,IAAI,CAACK,mBAAmB,CACtB3D,KACAA,EAAAA,KAAAA,CAAMgD,OAAO,CAACtC,QAAQ,EACtBT,EAAGW,CAAAA,IAAI,CAACZ,KAAMuD,CAAAA,QAAQ,EAAEvD,KAAMsC,CAAAA,MAAM,CAACsB,CAAC,CAAA,EACtC5D,KAAMsD,CAAAA,YAAY,EAClBrD,EAAGW,CAAAA,IAAI,CAACX,EAAGkB,CAAAA,GAAG,CAAClB,EAAGU,CAAAA,GAAG,CAACX,KAAM8C,CAAAA,UAAU,CAACW,MAAM,EAAE,MAAMxD,EAAGwB,CAAAA,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;iBAEjE,MAAA;AACLzB,oBAAAA,KAAAA,CAAMM,EAAE,CAACiD,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/BxD,KACAA,EAAAA,KAAAA,CAAMgD,OAAO,CAACtC,QAAQ,EACtBV,KAAM8C,CAAAA,UAAU,CAACW,MAAM,EACvBzD,KAAAA,CAAMiD,OAAO,EACbjD,KAAMsC,CAAAA,MAAM,EACZtC,KAAAA,CAAM8C,UAAU,CAACY,GAAG,CAAA;AAEtB,oBAAA,IAAI,CAACC,mBAAmB,CAAC3D,OAAOA,KAAMgD,CAAAA,OAAO,CAACtC,QAAQ,EAAET,EAAGW,CAAAA,IAAI,CAACZ,KAAMuD,CAAAA,QAAQ,EAAEvD,KAAMsC,CAAAA,MAAM,CAACsB,CAAC,CAAA,CAAA;AAChG;aACK,MAAA;gBACL,IAAI,CAACD,mBAAmB,CAAC3D,KAAOA,EAAAA,KAAAA,CAAMgD,OAAO,CAACtC,QAAQ,EAAEV,KAAAA,CAAMsC,MAAM,CAAA;AACtE;SACK,MAAA;YACL,IAAI,CAACqB,mBAAmB,CAAC3D,KAAAA,EAAOA,MAAMgD,OAAO,CAACtC,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Vector3, Vector4, Vector2 } from '@zephyr3d/base';
|
|
2
|
-
import { RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_SHADOWMAP, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags, MORPH_WEIGHTS_VECTOR_COUNT, MORPH_TARGET_POSITION, MORPH_TARGET_NORMAL, MORPH_TARGET_TANGENT, MORPH_ATTRIBUTE_VECTOR_COUNT } from '../../values.js';
|
|
2
|
+
import { RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_SHADOWMAP, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags, MAX_CLUSTERED_LIGHTS, MORPH_WEIGHTS_VECTOR_COUNT, MORPH_TARGET_POSITION, MORPH_TARGET_NORMAL, MORPH_TARGET_TANGENT, MORPH_ATTRIBUTE_VECTOR_COUNT } from '../../values.js';
|
|
3
3
|
import { ProgramBuilder } from '@zephyr3d/device';
|
|
4
4
|
import { decodeNormalizedFloatFromRGBA, linearToGamma } from '../../shaders/misc.js';
|
|
5
5
|
import { fetchSampler } from '../../utility/misc.js';
|
|
@@ -45,7 +45,6 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
45
45
|
/** @internal */ static _drawableBindGroupLayouts = {};
|
|
46
46
|
/** @internal */ static _lightUniformShadow = {
|
|
47
47
|
sunDir: new Vector3(),
|
|
48
|
-
envLightStrength: 1,
|
|
49
48
|
shadowCascades: 1,
|
|
50
49
|
positionAndRange: new Vector4(),
|
|
51
50
|
directionAndCutoff: new Vector4(),
|
|
@@ -55,7 +54,10 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
55
54
|
depthBiasValues: new Vector4(),
|
|
56
55
|
shadowCameraParams: new Vector4(),
|
|
57
56
|
depthBiasScales: new Vector4(),
|
|
58
|
-
shadowMatrices: new Float32Array(16 * 4)
|
|
57
|
+
shadowMatrices: new Float32Array(16 * 4),
|
|
58
|
+
shadowStrength: 1,
|
|
59
|
+
envLightStrength: 1,
|
|
60
|
+
envLightSpecularStrength: 1
|
|
59
61
|
};
|
|
60
62
|
/** @internal */ static _fogUniforms = {
|
|
61
63
|
withAerialPerspective: 0,
|
|
@@ -164,6 +166,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
164
166
|
pb.vec2('renderSize'),
|
|
165
167
|
pb.vec2('jitterValue'),
|
|
166
168
|
pb.float('roughnessFactor'),
|
|
169
|
+
pb.float('shadowDebugCascades'),
|
|
167
170
|
pb.float('frameDeltaTime'),
|
|
168
171
|
pb.float('elapsedTime'),
|
|
169
172
|
pb.int('framestamp')
|
|
@@ -207,10 +210,13 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
207
210
|
pb.vec4('shadowCameraParams'),
|
|
208
211
|
pb.vec4('depthBiasScales'),
|
|
209
212
|
pb.vec4[16]('shadowMatrices'),
|
|
210
|
-
pb.float('
|
|
213
|
+
pb.float('shadowStrength'),
|
|
214
|
+
pb.float('envLightStrength'),
|
|
215
|
+
pb.float('envLightSpecularStrength')
|
|
211
216
|
]) : pb.defineStruct([
|
|
212
217
|
pb.vec3('sunDir'),
|
|
213
218
|
pb.float('envLightStrength'),
|
|
219
|
+
pb.float('envLightSpecularStrength'),
|
|
214
220
|
pb.vec4('clusterParams'),
|
|
215
221
|
pb.ivec4('countParams'),
|
|
216
222
|
pb.ivec2('lightIndexTexSize')
|
|
@@ -218,7 +224,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
218
224
|
scope.camera = cameraStruct().uniform(0);
|
|
219
225
|
scope.light = lightStruct().uniform(0);
|
|
220
226
|
if (useClusteredLighting) {
|
|
221
|
-
scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(
|
|
227
|
+
scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 4]().uniformBuffer(0);
|
|
222
228
|
scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE] = (pb.getDevice().type === 'webgl' ? pb.tex2D() : pb.utex2D()).uniform(0);
|
|
223
229
|
}
|
|
224
230
|
scope[UNIFORM_NAME_BAKED_SKY_MAP] = pb.texCube().uniform(0);
|
|
@@ -657,6 +663,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
657
663
|
worldMatrix: camera.worldMatrix,
|
|
658
664
|
params: new Vector4(camera.getNearPlane(), camera.getFarPlane(), ctx.flip ? -1 : 1, linear ? 0 : 1),
|
|
659
665
|
roughnessFactor: camera.SSR ? camera.ssrRoughnessFactor : 1,
|
|
666
|
+
shadowDebugCascades: camera.shadowDebugCascades ? 1 : 0,
|
|
660
667
|
frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,
|
|
661
668
|
elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,
|
|
662
669
|
framestamp: ctx.device.frameInfo.frameCounter
|
|
@@ -708,6 +715,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
708
715
|
clusterParams: clusterParams,
|
|
709
716
|
countParams: countParams,
|
|
710
717
|
envLightStrength: ctx.env.light.strength ?? 0,
|
|
718
|
+
envLightSpecularStrength: ctx.env.light.specularStrength ?? 1,
|
|
711
719
|
lightIndexTexSize: new Int32Array([
|
|
712
720
|
lightIndexTexture.width,
|
|
713
721
|
lightIndexTexture.height
|
|
@@ -723,7 +731,6 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
723
731
|
/** @internal */ static setLightUniformsShadow(bindGroup, ctx, light) {
|
|
724
732
|
const shadowMapParams = ctx.shadowMapInfo.get(light);
|
|
725
733
|
this._lightUniformShadow.sunDir = ctx.sunLight ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1) : this.defaultSunDir;
|
|
726
|
-
this._lightUniformShadow.envLightStrength = ctx.env?.light.strength ?? 0;
|
|
727
734
|
this._lightUniformShadow.shadowCascades = shadowMapParams.numShadowCascades;
|
|
728
735
|
this._lightUniformShadow.positionAndRange.set(light.positionAndRange);
|
|
729
736
|
this._lightUniformShadow.directionAndCutoff.set(light.directionAndCutoff);
|
|
@@ -734,6 +741,9 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
734
741
|
this._lightUniformShadow.shadowCameraParams.set(shadowMapParams.cameraParams);
|
|
735
742
|
this._lightUniformShadow.depthBiasScales.set(shadowMapParams.depthBiasScales);
|
|
736
743
|
this._lightUniformShadow.shadowMatrices.set(shadowMapParams.shadowMatrices);
|
|
744
|
+
this._lightUniformShadow.shadowStrength = light.shadow.shadowStrength;
|
|
745
|
+
this._lightUniformShadow.envLightStrength = ctx.env?.light.strength ?? 0;
|
|
746
|
+
this._lightUniformShadow.envLightSpecularStrength = ctx.env?.light.specularStrength ?? 1;
|
|
737
747
|
bindGroup.setValue('light', this._lightUniformShadow);
|
|
738
748
|
bindGroup.setTexture(UNIFORM_NAME_SHADOW_MAP, shadowMapParams.shadowMap, shadowMapParams.shadowMapSampler);
|
|
739
749
|
bindGroup.setTexture(UNIFORM_NAME_BAKED_SKY_MAP, ctx.scene.env.sky.getBakedSkyTexture(ctx));
|
|
@@ -753,6 +763,17 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
753
763
|
return scope.light.envLightStrength;
|
|
754
764
|
}
|
|
755
765
|
/**
|
|
766
|
+
* Gets the uniform variable of type float which holds the specular strength of the environment light
|
|
767
|
+
*
|
|
768
|
+
* @remarks
|
|
769
|
+
* This function can only be used in the fragment shader
|
|
770
|
+
*
|
|
771
|
+
* @param scope - Current shader scope
|
|
772
|
+
* @returns The uniform variable which presents the specular strength of the environment light
|
|
773
|
+
*/ static getEnvLightSpecularStrength(scope) {
|
|
774
|
+
return scope.light.envLightSpecularStrength ?? scope.$builder.float(1);
|
|
775
|
+
}
|
|
776
|
+
/**
|
|
756
777
|
* Gets current scene color texture
|
|
757
778
|
* @param scope - Current shader scope
|
|
758
779
|
* @returns current scene color texture
|
|
@@ -1078,15 +1099,24 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1078
1099
|
}
|
|
1079
1100
|
const shadowMapParams = ctx.shadowMapInfo.get(ctx.currentShadowLight);
|
|
1080
1101
|
this.$l.shadow = shadowMapParams.impl.computeShadowCSM(shadowMapParams, this, this.shadowVertex, this.NoL, this.split);
|
|
1102
|
+
this.shadow = pb.clamp(this.shadow, 0, 1);
|
|
1081
1103
|
this.$l.shadowDistance = that.getShadowCameraParams(scope).w;
|
|
1082
1104
|
this.shadow = pb.mix(this.shadow, 1, pb.smoothStep(pb.mul(this.shadowDistance, 0.8), this.shadowDistance, pb.distance(that.getCameraPosition(this), this.worldPos)));
|
|
1105
|
+
this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);
|
|
1106
|
+
this.shadow = pb.clamp(this.shadow, 0, 1);
|
|
1107
|
+
this.$if(pb.greaterThan(this.camera.shadowDebugCascades, 0.5), function() {
|
|
1108
|
+
this.shadow = pb.add(pb.mul(pb.float(this.split), 0.2), 0.2);
|
|
1109
|
+
});
|
|
1083
1110
|
this.$return(this.shadow);
|
|
1084
1111
|
} else {
|
|
1085
1112
|
this.$l.shadowVertex = that.calculateShadowSpaceVertex(this, pb.vec4(this.worldPos, 1));
|
|
1086
1113
|
const shadowMapParams = ctx.shadowMapInfo.get(ctx.currentShadowLight);
|
|
1087
1114
|
this.$l.shadow = shadowMapParams.impl.computeShadow(shadowMapParams, this, this.shadowVertex, this.NoL);
|
|
1115
|
+
this.shadow = pb.clamp(this.shadow, 0, 1);
|
|
1088
1116
|
this.$l.shadowDistance = that.getShadowCameraParams(scope).w;
|
|
1089
1117
|
this.shadow = pb.mix(this.shadow, 1, pb.smoothStep(pb.mul(this.shadowDistance, 0.8), this.shadowDistance, pb.distance(that.getCameraPosition(this), this.worldPos)));
|
|
1118
|
+
this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);
|
|
1119
|
+
this.shadow = pb.clamp(this.shadow, 0, 1);
|
|
1090
1120
|
this.$return(this.shadow);
|
|
1091
1121
|
}
|
|
1092
1122
|
});
|
|
@@ -1101,9 +1131,14 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1101
1131
|
pb.vec3('worldPos'),
|
|
1102
1132
|
pb.vec4('color').inout()
|
|
1103
1133
|
], function() {
|
|
1134
|
+
this.$if(pb.notEqual(this.fog.additive, 0), function() {
|
|
1135
|
+
this.$return();
|
|
1136
|
+
});
|
|
1104
1137
|
this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));
|
|
1105
1138
|
this.$l.fogging = calculateFog(this, this.fog.withAerialPerspective, this.fog.fogType, this.fog.atmosphereParams, this.fog.heightFogParams, this.uv, false, that.getCameraPosition(this).xyz, this.worldPos, this.fog.additive, this[UNIFORM_NAME_AERIALPERSPECTIVE_LUT], this[UNIFORM_NAME_SKYDISTANTLIGHT_LUT]);
|
|
1106
|
-
this.
|
|
1139
|
+
this.$l.foggingAlpha = pb.sub(1, pb.mul(pb.sub(1, this.fogging.a), this.color.a));
|
|
1140
|
+
this.$l.foggingRGB = pb.mul(this.fogging.rgb, this.color.a);
|
|
1141
|
+
this.color = pb.vec4(pb.add(pb.mul(this.color.rgb, this.foggingAlpha), this.foggingRGB), this.color.a);
|
|
1107
1142
|
//this.color = pb.vec4(pb.vec3(pb.mix(this.u0, this.u1, this.factor)), this.color.a);
|
|
1108
1143
|
});
|
|
1109
1144
|
scope[funcName](worldPos, color);
|
|
@@ -1119,7 +1154,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1119
1154
|
*/ static linearDepthToNonLinear(scope, depth, nearFar) {
|
|
1120
1155
|
const pb = scope.$builder;
|
|
1121
1156
|
nearFar = nearFar ?? this.getCameraParams(scope);
|
|
1122
|
-
return pb.
|
|
1157
|
+
return pb.div(pb.sub(nearFar.y, pb.div(pb.mul(nearFar.x, nearFar.y), depth)), pb.sub(nearFar.y, nearFar.x));
|
|
1123
1158
|
}
|
|
1124
1159
|
/**
|
|
1125
1160
|
* Calculates the linear depth from non-linear depth
|
|
@@ -1131,8 +1166,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1131
1166
|
*/ static nonLinearDepthToLinear(scope, depth, nearFar) {
|
|
1132
1167
|
const pb = scope.$builder;
|
|
1133
1168
|
nearFar = nearFar ?? this.getCameraParams(scope);
|
|
1134
|
-
return pb.div(pb.mul(nearFar.x, nearFar.y
|
|
1135
|
-
//return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.y, nearFar.x, depth));
|
|
1169
|
+
return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.y, nearFar.x, depth));
|
|
1136
1170
|
}
|
|
1137
1171
|
/**
|
|
1138
1172
|
* Calculates the normalized linear depth from non-linear depth
|
|
@@ -1144,8 +1178,7 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1144
1178
|
*/ static nonLinearDepthToLinearNormalized(scope, depth, nearFar) {
|
|
1145
1179
|
const pb = scope.$builder;
|
|
1146
1180
|
nearFar = nearFar ?? this.getCameraParams(scope);
|
|
1147
|
-
|
|
1148
|
-
return pb.div(pb.sub(this.nonLinearDepthToLinear(scope, depth, nearFar), nearFar.x), pb.sub(nearFar.y, nearFar.x));
|
|
1181
|
+
return pb.div(nearFar.x, pb.mix(nearFar.y, nearFar.x, depth));
|
|
1149
1182
|
}
|
|
1150
1183
|
/**
|
|
1151
1184
|
* Sample linear depth from linear depth texture
|
|
@@ -1208,9 +1241,6 @@ const UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';
|
|
|
1208
1241
|
});
|
|
1209
1242
|
return pb.getGlobalScope()[funcName](outputColor);
|
|
1210
1243
|
}
|
|
1211
|
-
static getMaxClusteredLightCount() {
|
|
1212
|
-
return getDevice().type === 'webgl' ? 127 : 255;
|
|
1213
|
-
}
|
|
1214
1244
|
}
|
|
1215
1245
|
|
|
1216
1246
|
export { ShaderHelper };
|