@zephyr3d/scene 0.9.22 → 0.9.23
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/joint_dynamics/collision.js +1 -7
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +2 -17
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +2 -20
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +14 -60
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +3 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/app/app.js +23 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/scriptregistry.js +16 -53
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -0
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +22 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +3 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +3 -3
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/camera/camera.js +398 -45
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +69 -2
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9113 -8734
- package/dist/index.js +9 -1
- 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 +3 -3
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +8 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +17 -10
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +33 -11
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +44 -12
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +149 -14
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +7 -4
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +5 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +1 -1
- 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 +186 -11
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/skin.js +2 -2
- package/dist/material/skin.js.map +1 -1
- package/dist/material/terrain-cm.js +5 -5
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/water.js +6 -4
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +54 -4
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +41 -0
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/posteffect.js +35 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +7 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +3 -3
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +988 -436
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +83 -45
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +18 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +5 -4
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +15 -3
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +2 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +12 -6
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable_mixin.js +8 -5
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +10 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +298 -5
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gpu_picking.js +7 -5
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +28 -19
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +18 -4
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +37 -4
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +8 -3
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +20 -48
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +18 -58
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +89 -115
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +1 -1
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
- package/dist/render/rendergraph/history_resource_manager.js +74 -140
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +7 -5
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/render_context.js +19 -0
- package/dist/render/rendergraph/render_context.js.map +1 -0
- package/dist/render/rendergraph/render_pipeline.js +315 -0
- package/dist/render/rendergraph/render_pipeline.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +158 -141
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +267 -0
- package/dist/render/rendergraph/scene_render_context.js.map +1 -0
- package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
- package/dist/render/rendergraph/types.js +19 -31
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +3 -3
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +7 -6
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +197 -35
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +4 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +2 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +10 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +61 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +178 -10
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/meshdrawable.js +89 -2
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +2 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +2 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +2 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +34 -1
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +2 -1
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +2 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +2 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +5 -4
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +10 -3
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/shadow.js +96 -29
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +322 -154
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shadow/esm.js +10 -7
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -12
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -12
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +15 -11
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +20 -2
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +5 -2
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +13 -13
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +7 -7
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/physical.js +74 -0
- package/dist/utility/physical.js.map +1 -0
- package/dist/utility/rendermipmap.js +2 -2
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/manager.js +3 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +3 -1
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +3 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +598 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +180 -9
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +43 -3
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +3 -1
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +3 -1
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +3 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +2 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +70 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +3 -1
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +3 -1
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +3 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/values.js +2 -3
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
package/dist/material/mtoon.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector3, Vector2 } from '@zephyr3d/base';
|
|
1
|
+
import { Vector3, Vector2, DEPTH_COMPARE_CLOSER } from '@zephyr3d/base';
|
|
2
2
|
import { applyMaterialMixins, MeshMaterial } from './meshmaterial.js';
|
|
3
3
|
import { mixinAlbedoColor } from './mixins/albedocolor.js';
|
|
4
4
|
import { mixinLambert } from './mixins/lightmodel/lambert.js';
|
|
@@ -293,7 +293,7 @@ const ToonMaterialBase = applyMaterialMixins(MeshMaterial, mixinAlbedoColor, mix
|
|
|
293
293
|
if (pass > 0) {
|
|
294
294
|
stateSet.useRasterizerState().cullMode = 'front';
|
|
295
295
|
stateSet.defaultBlendingState();
|
|
296
|
-
stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc(
|
|
296
|
+
stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc(DEPTH_COMPARE_CLOSER);
|
|
297
297
|
} else if (this._transparentWithZWrite && this.isTransparentPass(pass, ctx)) {
|
|
298
298
|
stateSet.useDepthState().enableTest(true).enableWrite(true);
|
|
299
299
|
}
|
|
@@ -423,7 +423,7 @@ const ToonMaterialBase = applyMaterialMixins(MeshMaterial, mixinAlbedoColor, mix
|
|
|
423
423
|
], function() {
|
|
424
424
|
this.$l.directColor = pb.vec3(0);
|
|
425
425
|
that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, extra, shadow) {
|
|
426
|
-
this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
|
|
426
|
+
this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff, extra);
|
|
427
427
|
this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
|
|
428
428
|
this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
|
|
429
429
|
this.$l.NoL = pb.dot(this.normal, this.lightDir);
|
|
@@ -469,7 +469,10 @@ const ToonMaterialBase = applyMaterialMixins(MeshMaterial, mixinAlbedoColor, mix
|
|
|
469
469
|
}
|
|
470
470
|
calculateMToonEmission(scope) {
|
|
471
471
|
const pb = scope.$builder;
|
|
472
|
-
|
|
472
|
+
const emission = this.emissiveTexture ? pb.mul(scope.emissiveColor, scope.emissiveStrength, this.sampleEmissiveTexture(scope, this.applyUVAnimation(scope, this.getEmissiveTexCoord(scope))).rgb) : pb.mul(scope.emissiveColor, scope.emissiveStrength);
|
|
473
|
+
// Material-authored emitters are not covered by the CPU-side light pre-exposure, so a physical
|
|
474
|
+
// scene exposes them here. The factor is 1 in legacy.
|
|
475
|
+
return pb.mul(emission, ShaderHelper.getPreExposureUniform(scope));
|
|
473
476
|
}
|
|
474
477
|
vertexShader(scope) {
|
|
475
478
|
super.vertexShader(scope);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtoon.js","sources":["../../src/material/mtoon.ts"],"sourcesContent":["import type { Immutable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinLambert } from './mixins/lightmodel/lambert';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\n\r\n/**\r\n * MToonMaterial outline width mode.\r\n *\r\n * @public\r\n */\r\nexport type MToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype RuntimeMaterialPassMethods = {\r\n bind(device: DrawContext['device'], pass: number): boolean;\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances?: number): void;\r\n};\r\n\r\nconst ToonMaterialBase = applyMaterialMixins(\r\n MeshMaterial,\r\n mixinAlbedoColor,\r\n mixinLambert,\r\n mixinTextureProps('shadeMultiply'),\r\n mixinTextureProps('shadingShift'),\r\n mixinTextureProps('matcap'),\r\n mixinTextureProps('rimMultiply'),\r\n mixinTextureProps('outlineWidthMultiply'),\r\n mixinTextureProps('uvAnimationMask'),\r\n mixinTextureProps('emissive')\r\n);\r\n\r\n/**\r\n * MToonMaterial is a material that implements the MToon shader, which is a stylized shader commonly used for rendering anime-style characters. It supports features such as rim lighting, matcap, and outline rendering.\r\n *\r\n * @public\r\n */\r\nexport class MToonMaterial extends ToonMaterialBase {\r\n private static readonly FEATURE_OUTLINE_WIDTH_MODE = this.defineFeature();\r\n private static readonly FEATURE_OUTLINE_TANGENT_NORMALS = this.defineFeature();\r\n private readonly _shadeColorFactor: Vector3;\r\n private readonly _matcapFactor: Vector3;\r\n private readonly _parametricRimColorFactor: Vector3;\r\n private readonly _outlineColorFactor: Vector3;\r\n private readonly _uvAnimationScroll: Vector2;\r\n private readonly _emissiveColor: Vector3;\r\n private _shadingShiftFactor: number;\r\n private _shadingShiftTextureScale: number;\r\n private _shadingToonyFactor: number;\r\n private _giEqualizationFactor: number;\r\n private _parametricRimFresnelPowerFactor: number;\r\n private _parametricRimLiftFactor: number;\r\n private _rimLightingMixFactor: number;\r\n private _outlineWidthFactor: number;\r\n private _outlineLightingMixFactor: number;\r\n private _uvAnimationRotationSpeedFactor: number;\r\n private _emissiveStrength: number;\r\n private _transparentWithZWrite: boolean;\r\n private _renderQueueOffsetNumber: number;\r\n constructor() {\r\n super();\r\n this._shadeColorFactor = new Vector3(0, 0, 0);\r\n this._matcapFactor = new Vector3(1, 1, 1);\r\n this._parametricRimColorFactor = new Vector3(0, 0, 0);\r\n this._outlineColorFactor = new Vector3(0, 0, 0);\r\n this._uvAnimationScroll = new Vector2(0, 0);\r\n this._emissiveColor = new Vector3(0, 0, 0);\r\n this._shadingShiftFactor = 0;\r\n this._shadingShiftTextureScale = 1;\r\n this._shadingToonyFactor = 0.9;\r\n this._giEqualizationFactor = 0.9;\r\n this._parametricRimFresnelPowerFactor = 5;\r\n this._parametricRimLiftFactor = 0;\r\n this._rimLightingMixFactor = 1;\r\n this._outlineWidthFactor = 0;\r\n this._outlineLightingMixFactor = 1;\r\n this._uvAnimationRotationSpeedFactor = 0;\r\n this._emissiveStrength = 1;\r\n this._transparentWithZWrite = false;\r\n this._renderQueueOffsetNumber = 0;\r\n this.outlineWidthMode = 'none';\r\n this.outlineUsesTangentNormals = false;\r\n }\r\n get shadeColorFactor(): Immutable<Vector3> {\r\n return this._shadeColorFactor;\r\n }\r\n set shadeColorFactor(val: Immutable<Vector3>) {\r\n this._shadeColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get shadingShiftFactor(): number {\r\n return this._shadingShiftFactor;\r\n }\r\n set shadingShiftFactor(val: number) {\r\n if (val !== this._shadingShiftFactor) {\r\n this._shadingShiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingShiftTextureScale(): number {\r\n return this._shadingShiftTextureScale;\r\n }\r\n set shadingShiftTextureScale(val: number) {\r\n if (val !== this._shadingShiftTextureScale) {\r\n this._shadingShiftTextureScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingToonyFactor(): number {\r\n return this._shadingToonyFactor;\r\n }\r\n set shadingToonyFactor(val: number) {\r\n const toony = Math.min(Math.max(val, 0), 0.99);\r\n if (toony !== this._shadingToonyFactor) {\r\n this._shadingToonyFactor = toony;\r\n this.uniformChanged();\r\n }\r\n }\r\n get giEqualizationFactor(): number {\r\n return this._giEqualizationFactor;\r\n }\r\n set giEqualizationFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._giEqualizationFactor) {\r\n this._giEqualizationFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get matcapFactor(): Immutable<Vector3> {\r\n return this._matcapFactor;\r\n }\r\n set matcapFactor(val: Immutable<Vector3>) {\r\n this._matcapFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimColorFactor(): Immutable<Vector3> {\r\n return this._parametricRimColorFactor;\r\n }\r\n set parametricRimColorFactor(val: Immutable<Vector3>) {\r\n this._parametricRimColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimFresnelPowerFactor(): number {\r\n return this._parametricRimFresnelPowerFactor;\r\n }\r\n set parametricRimFresnelPowerFactor(val: number) {\r\n if (val !== this._parametricRimFresnelPowerFactor) {\r\n this._parametricRimFresnelPowerFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get parametricRimLiftFactor(): number {\r\n return this._parametricRimLiftFactor;\r\n }\r\n set parametricRimLiftFactor(val: number) {\r\n if (val !== this._parametricRimLiftFactor) {\r\n this._parametricRimLiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get rimLightingMixFactor(): number {\r\n return this._rimLightingMixFactor;\r\n }\r\n set rimLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._rimLightingMixFactor) {\r\n this._rimLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineWidthMode(): MToonOutlineWidthMode {\r\n return this.featureUsed<MToonOutlineWidthMode>(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE);\r\n }\r\n set outlineWidthMode(val: MToonOutlineWidthMode) {\r\n if (val !== 'none' && this.numPasses < 2) {\r\n this.numPasses = 2;\r\n }\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE, val);\r\n this.numPasses = val === 'none' ? 1 : 2;\r\n }\r\n get outlineWidthFactor(): number {\r\n return this._outlineWidthFactor;\r\n }\r\n set outlineWidthFactor(val: number) {\r\n const width = Math.max(val, 0);\r\n if (width !== this._outlineWidthFactor) {\r\n this._outlineWidthFactor = width;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineColorFactor(): Immutable<Vector3> {\r\n return this._outlineColorFactor;\r\n }\r\n set outlineColorFactor(val: Immutable<Vector3>) {\r\n this._outlineColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get outlineLightingMixFactor(): number {\r\n return this._outlineLightingMixFactor;\r\n }\r\n set outlineLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._outlineLightingMixFactor) {\r\n this._outlineLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineUsesTangentNormals(): boolean {\r\n return !!this.featureUsed<boolean>(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS);\r\n }\r\n set outlineUsesTangentNormals(val: boolean) {\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS, !!val);\r\n }\r\n get transparentWithZWrite(): boolean {\r\n return this._transparentWithZWrite;\r\n }\r\n set transparentWithZWrite(val: boolean) {\r\n if (!!val !== this._transparentWithZWrite) {\r\n this._transparentWithZWrite = !!val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get renderQueueOffsetNumber(): number {\r\n return this._renderQueueOffsetNumber;\r\n }\r\n set renderQueueOffsetNumber(val: number) {\r\n const offset = Math.trunc(val);\r\n if (offset !== this._renderQueueOffsetNumber) {\r\n this._renderQueueOffsetNumber = offset;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollXSpeedFactor(): number {\r\n return this._uvAnimationScroll.x;\r\n }\r\n set uvAnimationScrollXSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.x) {\r\n this._uvAnimationScroll.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollYSpeedFactor(): number {\r\n return this._uvAnimationScroll.y;\r\n }\r\n set uvAnimationScrollYSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.y) {\r\n this._uvAnimationScroll.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationRotationSpeedFactor(): number {\r\n return this._uvAnimationRotationSpeedFactor;\r\n }\r\n set uvAnimationRotationSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationRotationSpeedFactor) {\r\n this._uvAnimationRotationSpeedFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get emissiveColor(): Immutable<Vector3> {\r\n return this._emissiveColor;\r\n }\r\n set emissiveColor(val: Immutable<Vector3>) {\r\n this._emissiveColor.set(val);\r\n this.uniformChanged();\r\n }\r\n get emissiveStrength(): number {\r\n return this._emissiveStrength;\r\n }\r\n set emissiveStrength(val: number) {\r\n if (val !== this._emissiveStrength) {\r\n this._emissiveStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n clone(): MToonMaterial {\r\n const other = new MToonMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shadeColorFactor = other.shadeColorFactor;\r\n this.shadingShiftFactor = other.shadingShiftFactor;\r\n this.shadingShiftTextureScale = other.shadingShiftTextureScale;\r\n this.shadingToonyFactor = other.shadingToonyFactor;\r\n this.giEqualizationFactor = other.giEqualizationFactor;\r\n this.matcapFactor = other.matcapFactor;\r\n this.parametricRimColorFactor = other.parametricRimColorFactor;\r\n this.parametricRimFresnelPowerFactor = other.parametricRimFresnelPowerFactor;\r\n this.parametricRimLiftFactor = other.parametricRimLiftFactor;\r\n this.rimLightingMixFactor = other.rimLightingMixFactor;\r\n this.outlineWidthMode = other.outlineWidthMode;\r\n this.outlineWidthFactor = other.outlineWidthFactor;\r\n this.outlineColorFactor = other.outlineColorFactor;\r\n this.outlineLightingMixFactor = other.outlineLightingMixFactor;\r\n this.outlineUsesTangentNormals = other.outlineUsesTangentNormals;\r\n this.transparentWithZWrite = other.transparentWithZWrite;\r\n this.renderQueueOffsetNumber = other.renderQueueOffsetNumber;\r\n this.uvAnimationScrollXSpeedFactor = other.uvAnimationScrollXSpeedFactor;\r\n this.uvAnimationScrollYSpeedFactor = other.uvAnimationScrollYSpeedFactor;\r\n this.uvAnimationRotationSpeedFactor = other.uvAnimationRotationSpeedFactor;\r\n this.emissiveColor = other.emissiveColor;\r\n this.emissiveStrength = other.emissiveStrength;\r\n }\r\n getQueueType() {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n passToHash(pass: number): string {\r\n return super.passToHash(pass > 0 ? 1 : 0);\r\n }\r\n isTransparentPass(pass: number, ctx?: DrawContext): boolean {\r\n return pass === 0 && super.isTransparentPass(pass, ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n if (pass > 0) {\r\n stateSet.useRasterizerState().cullMode = 'front';\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc('lt');\r\n } else if (this._transparentWithZWrite && this.isTransparentPass(pass, ctx)) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(true);\r\n }\r\n }\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0): void {\r\n const material = this as unknown as RuntimeMaterialPassMethods;\r\n if (this.numPasses > 1 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !ctx.lightBlending) {\r\n // Draw the inflated hull first so the regular pass hides interior outline fragments.\r\n material.bind(ctx.device, 1);\r\n this.drawPrimitive(1, primitive, ctx, numInstances);\r\n material.bind(ctx.device, 0);\r\n this.drawPrimitive(0, primitive, ctx, numInstances);\r\n } else {\r\n (MeshMaterial.prototype as unknown as RuntimeMaterialPassMethods).draw.call(\r\n this,\r\n primitive,\r\n ctx,\r\n numInstances\r\n );\r\n }\r\n }\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (pass > 0 && (ctx.renderPass!.type !== RENDER_PASS_TYPE_LIGHT || ctx.lightBlending)) {\r\n return;\r\n }\r\n super.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n bindGroup.setValue('shadeColorFactor', this._shadeColorFactor);\r\n bindGroup.setValue('shadingShiftFactor', this._shadingShiftFactor);\r\n bindGroup.setValue('shadingShiftTextureScale', this._shadingShiftTextureScale);\r\n bindGroup.setValue('shadingToonyFactor', this._shadingToonyFactor);\r\n bindGroup.setValue('giEqualizationFactor', this._giEqualizationFactor);\r\n bindGroup.setValue('matcapFactor', this._matcapFactor);\r\n bindGroup.setValue('parametricRimColorFactor', this._parametricRimColorFactor);\r\n bindGroup.setValue('parametricRimFresnelPowerFactor', this._parametricRimFresnelPowerFactor);\r\n bindGroup.setValue('parametricRimLiftFactor', this._parametricRimLiftFactor);\r\n bindGroup.setValue('rimLightingMixFactor', this._rimLightingMixFactor);\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n bindGroup.setValue('emissiveColor', this._emissiveColor);\r\n bindGroup.setValue('emissiveStrength', this._emissiveStrength);\r\n } else if (pass > 0 && this.outlineWidthMultiplyTexture && this.usesAnimatedUV()) {\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n }\r\n if (pass > 0) {\r\n bindGroup.setValue('outlineWidthFactor', this._outlineWidthFactor);\r\n if (this.outlineWidthMultiplyTexture) {\r\n bindGroup.setTexture(\r\n 'outlineWidthTex',\r\n this.outlineWidthMultiplyTexture,\r\n this.outlineWidthMultiplyTextureSampler\r\n );\r\n if (this.uvAnimationMaskTexture && this.usesAnimatedUV()) {\r\n bindGroup.setTexture(\r\n 'uvAnimationMaskTex',\r\n this.uvAnimationMaskTexture,\r\n this.uvAnimationMaskTextureSampler\r\n );\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n bindGroup.setValue('outlineWidthTextureMatrix', this.outlineWidthMultiplyTexCoordMatrix);\r\n }\r\n }\r\n }\r\n if (pass > 0 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n bindGroup.setValue('outlineColorFactor', this._outlineColorFactor);\r\n bindGroup.setValue('outlineLightingMixFactor', this._outlineLightingMixFactor);\r\n }\r\n }\r\n private usesAnimatedUV(): boolean {\r\n return (\r\n this._uvAnimationScroll.x !== 0 ||\r\n this._uvAnimationScroll.y !== 0 ||\r\n this._uvAnimationRotationSpeedFactor !== 0\r\n );\r\n }\r\n private applyUVAnimation(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n if (!this.usesAnimatedUV()) {\r\n return uv;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = 'Z_mtoonUVAnimation';\r\n const that = this;\r\n if (!scope.uvAnimationScroll) {\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n }\r\n if (!scope.uvAnimationRotationSpeedFactor) {\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n }\r\n if (that.uvAnimationMaskTexture && pb.shaderKind !== 'fragment' && !scope.uvAnimationMaskTex) {\r\n scope.uvAnimationMaskTex = pb.tex2D().uniform(2);\r\n }\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.mask = that.uvAnimationMaskTexture\r\n ? pb.shaderKind === 'fragment'\r\n ? pb.textureSample(that.getUvAnimationMaskTextureUniform(this), this.uv).b\r\n : pb.textureSampleLevel(this.uvAnimationMaskTex, this.uv, 0).b\r\n : pb.float(1);\r\n this.$l.time = ShaderHelper.getElapsedTime(this);\r\n this.$l.rotation = pb.mul(this.time, this.uvAnimationRotationSpeedFactor, this.mask);\r\n this.$l.c = pb.cos(this.rotation);\r\n this.$l.s = pb.sin(this.rotation);\r\n this.$l.centeredUv = pb.sub(this.uv, pb.vec2(0.5));\r\n this.$l.rotatedUv = pb.add(\r\n pb.vec2(\r\n pb.add(pb.mul(this.c, this.centeredUv.x), pb.mul(this.s, this.centeredUv.y)),\r\n pb.add(pb.mul(pb.neg(this.s), this.centeredUv.x), pb.mul(this.c, this.centeredUv.y))\r\n ),\r\n pb.vec2(0.5)\r\n );\r\n this.$return(pb.add(this.rotatedUv, pb.mul(this.uvAnimationScroll, this.time, this.mask)));\r\n });\r\n return pb.getGlobalScope()[funcName](uv);\r\n }\r\n private getMToonBaseUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.albedoTexture\r\n ? this.applyUVAnimation(scope, this.getAlbedoTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private getMToonNormalUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.normalTexture\r\n ? this.applyUVAnimation(scope, this.getNormalTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private sampleAlbedo(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n return this.calculateAlbedoColor(scope, uv);\r\n }\r\n private sampleShadeColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return this.shadeMultiplyTexture\r\n ? pb.mul(\r\n scope.shadeColorFactor,\r\n this.sampleShadeMultiplyTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadeMultiplyTexCoord(scope))\r\n ).rgb\r\n )\r\n : scope.shadeColorFactor;\r\n }\r\n private sampleNormal(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.normalTexture) {\r\n return pb.normalize(scope.$inputs.wNorm);\r\n }\r\n scope.$l.TBN = this.calculateTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm);\r\n scope.$l.normalTex = pb.sub(pb.mul(this.sampleNormalTexture(scope, uv).rgb, 2), pb.vec3(1));\r\n scope.normalTex = pb.mul(scope.normalTex, pb.vec3(pb.vec3(this.getUniformNormalScale(scope)).xx, 1));\r\n return pb.normalize(pb.mul(scope.TBN, scope.normalTex));\r\n }\r\n private calculateMToonDirectLighting(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp,\r\n shadeColor: PBShaderExp,\r\n shadingShift: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_mtoonDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('baseColor'),\r\n pb.vec3('shadeColor'),\r\n pb.float('shadingShift')\r\n ],\r\n function () {\r\n this.$l.directColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.shiftedShading = pb.add(this.NoL, this.shadingShift);\r\n this.$l.shading = pb.clamp(\r\n pb.div(\r\n pb.sub(this.shiftedShading, pb.add(-1, this.shadingToonyFactor)),\r\n pb.max(pb.sub(2, pb.mul(this.shadingToonyFactor, 2)), 0.00001)\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.lightDiffuse = pb.mix(this.shadeColor, this.baseColor, this.shading);\r\n if (shadow) {\r\n this.$l.shadowValue = that.calculateShadow(this, this.worldPos, pb.clamp(this.NoL, 0, 1));\r\n this.lightDiffuse = pb.mix(this.shadeColor, this.lightDiffuse, this.shadowValue);\r\n }\r\n this.directColor = pb.add(this.directColor, pb.mul(this.lightDiffuse, this.lightColor));\r\n });\r\n this.$return(this.directColor);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](worldPos, normal, baseColor, shadeColor, shadingShift);\r\n }\r\n private calculateMToonGI(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateEnvLight()) {\r\n return pb.vec3(0);\r\n }\r\n scope.$l.rawGi = this.getEnvLightIrradiance(scope, normal);\r\n scope.$l.uniformGi = pb.mul(\r\n pb.add(\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, 1, 0)),\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, -1, 0))\r\n ),\r\n 0.5\r\n );\r\n scope.$l.gi = pb.mix(scope.rawGi, scope.uniformGi, scope.giEqualizationFactor);\r\n return pb.mul(scope.gi, baseColor);\r\n }\r\n private calculateMToonRim(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n uv: PBShaderExp,\r\n lighting: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n scope.$l.rim = pb.vec3(0);\r\n if (this.matcapTexture) {\r\n scope.$l.worldViewX = pb.normalize(pb.vec3(viewVec.z, 0, pb.neg(viewVec.x)));\r\n scope.$l.worldViewY = pb.normalize(pb.cross(viewVec, scope.worldViewX));\r\n scope.$l.matcapUv = pb.add(\r\n pb.mul(pb.vec2(pb.dot(scope.worldViewX, normal), pb.dot(scope.worldViewY, normal)), 0.495),\r\n pb.vec2(0.5)\r\n );\r\n scope.rim = pb.add(\r\n scope.rim,\r\n pb.mul(scope.matcapFactor, this.sampleMatcapTexture(scope, scope.matcapUv).rgb)\r\n );\r\n }\r\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\r\n scope.$l.parametricRim = pb.pow(\r\n pb.clamp(pb.add(pb.sub(1, scope.NoV), scope.parametricRimLiftFactor), 0, 1),\r\n pb.max(scope.parametricRimFresnelPowerFactor, 0.00001)\r\n );\r\n scope.rim = pb.add(scope.rim, pb.mul(scope.parametricRimColorFactor, scope.parametricRim));\r\n if (this.rimMultiplyTexture) {\r\n scope.rim = pb.mul(\r\n scope.rim,\r\n this.sampleRimMultiplyTexture(scope, this.applyUVAnimation(scope, this.getRimMultiplyTexCoord(scope)))\r\n .rgb\r\n );\r\n }\r\n return pb.mul(scope.rim, pb.mix(pb.vec3(1), lighting, scope.rimLightingMixFactor));\r\n }\r\n private calculateMToonEmission(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return this.emissiveTexture\r\n ? pb.mul(\r\n scope.emissiveColor,\r\n scope.emissiveStrength,\r\n this.sampleEmissiveTexture(scope, this.applyUVAnimation(scope, this.getEmissiveTexCoord(scope))).rgb\r\n )\r\n : pb.mul(scope.emissiveColor, scope.emissiveStrength);\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n if (this.pass > 0 && this.outlineUsesTangentNormals) {\r\n scope.$l.oOutlineNorm = ShaderHelper.resolveVertexTangent(scope).xyz;\r\n }\r\n scope.$l.worldNormal = pb.normalize(\r\n pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz\r\n );\r\n scope.$l.worldOutlineNormal =\r\n this.pass > 0 && this.outlineUsesTangentNormals\r\n ? pb.normalize(pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oOutlineNorm, 0)).xyz)\r\n : scope.worldNormal;\r\n scope.$l.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n if (this.pass > 0) {\r\n scope.outlineWidthFactor = pb.float().uniform(2);\r\n scope.$l.width = scope.outlineWidthFactor;\r\n if (this.outlineWidthMultiplyTexture) {\r\n scope.outlineWidthTex = pb.tex2D().uniform(2);\r\n const uvIndex = this.outlineWidthMultiplyTexCoordIndex;\r\n const semantic = `texCoord${uvIndex}` as any;\r\n if (!scope.$getVertexAttrib(semantic)) {\r\n scope.$inputs[semantic] = pb.vec2().attrib(semantic);\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n scope.outlineWidthTextureMatrix = pb.mat4().uniform(2);\r\n scope.$l.outlineUv = pb.mul(\r\n scope.outlineWidthTextureMatrix,\r\n pb.vec4(this.applyUVAnimation(scope, scope.$inputs[semantic]), 0, 1)\r\n ).xy;\r\n } else {\r\n scope.$l.outlineUv = this.applyUVAnimation(scope, scope.$inputs[semantic]);\r\n }\r\n scope.width = pb.mul(scope.width, pb.textureSampleLevel(scope.outlineWidthTex, scope.outlineUv, 0).g);\r\n }\r\n scope.width = pb.max(scope.width, 0);\r\n scope.$l.hasOutlineWidth = pb.float(pb.greaterThan(scope.width, 0));\r\n if (this.outlineWidthMode === 'worldCoordinates') {\r\n scope.$l.baseClipPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.worldPos, 1)\r\n );\r\n scope.worldPos = pb.add(scope.worldPos, pb.mul(scope.worldOutlineNormal, scope.width));\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.baseNdc = pb.div(scope.baseClipPos.xy, pb.max(scope.baseClipPos.w, 0.00001));\r\n scope.$l.inflatedNdc = pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001));\r\n scope.$l.outlineNdcDelta = pb.sub(scope.inflatedNdc, scope.baseNdc);\r\n scope.$l.outlinePixelWidth = pb.length(\r\n pb.mul(scope.outlineNdcDelta, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.$l.outlinePixelScale = pb.mix(\r\n 1,\r\n pb.div(pb.max(scope.outlinePixelWidth, 1), pb.max(scope.outlinePixelWidth, 0.00001)),\r\n scope.hasOutlineWidth\r\n );\r\n scope.$l.adjustedNdc = pb.add(scope.baseNdc, pb.mul(scope.outlineNdcDelta, scope.outlinePixelScale));\r\n scope.clipPos = pb.vec4(pb.mul(scope.adjustedNdc, scope.clipPos.w), scope.clipPos.zw);\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n } else if (this.outlineWidthMode === 'screenCoordinates') {\r\n scope.$l.clipNormalPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(pb.add(scope.worldPos, scope.worldOutlineNormal), 1)\r\n );\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.screenNormal = pb.sub(\r\n pb.div(scope.clipNormalPos.xy, pb.max(scope.clipNormalPos.w, 0.00001)),\r\n pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001))\r\n );\r\n scope.screenNormal = pb.normalize(\r\n pb.mul(\r\n scope.screenNormal,\r\n pb.vec2(1, pb.div(ShaderHelper.getRenderSize(scope).x, ShaderHelper.getRenderSize(scope).y))\r\n )\r\n );\r\n scope.$l.screenUnitPixels = pb.length(\r\n pb.mul(scope.screenNormal, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.width = pb.mul(\r\n pb.max(scope.width, pb.div(1, pb.max(scope.screenUnitPixels, 0.00001))),\r\n scope.hasOutlineWidth\r\n );\r\n\r\n //scope.clipPos.xy = pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w));\r\n scope.clipPos = pb.vec4(\r\n pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w)),\r\n scope.clipPos.zw\r\n );\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n }\r\n }\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = this.pass > 0 ? scope.worldOutlineNormal : scope.worldNormal;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.shadeColorFactor = pb.vec3().uniform(2);\r\n scope.shadingShiftFactor = pb.float().uniform(2);\r\n scope.shadingShiftTextureScale = pb.float().uniform(2);\r\n scope.shadingToonyFactor = pb.float().uniform(2);\r\n scope.giEqualizationFactor = pb.float().uniform(2);\r\n scope.matcapFactor = pb.vec3().uniform(2);\r\n scope.parametricRimColorFactor = pb.vec3().uniform(2);\r\n scope.parametricRimFresnelPowerFactor = pb.float().uniform(2);\r\n scope.parametricRimLiftFactor = pb.float().uniform(2);\r\n scope.rimLightingMixFactor = pb.float().uniform(2);\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n scope.emissiveColor = pb.vec3().uniform(2);\r\n scope.emissiveStrength = pb.float().uniform(2);\r\n if (this.pass > 0) {\r\n scope.outlineColorFactor = pb.vec3().uniform(2);\r\n scope.outlineLightingMixFactor = pb.float().uniform(2);\r\n scope.$l.albedo = this.sampleAlbedo(scope, this.getMToonBaseUV(scope));\r\n scope.$l.outlineLighting = pb.mix(pb.vec3(1), scope.albedo.rgb, scope.outlineLightingMixFactor);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(pb.mul(scope.outlineColorFactor, scope.outlineLighting), scope.albedo.a)\r\n );\r\n } else {\r\n scope.$l.uv = this.getMToonBaseUV(scope);\r\n scope.$l.albedo = this.sampleAlbedo(scope, scope.uv);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normal = this.sampleNormal(scope, this.getMToonNormalUV(scope));\r\n scope.$l.shadingShift = scope.shadingShiftFactor;\r\n if (this.shadingShiftTexture) {\r\n scope.shadingShift = pb.add(\r\n scope.shadingShift,\r\n pb.mul(\r\n this.sampleShadingShiftTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadingShiftTexCoord(scope))\r\n ).r,\r\n scope.shadingShiftTextureScale\r\n )\r\n );\r\n }\r\n scope.$l.shadeColor = this.sampleShadeColor(scope);\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.directLighting = this.calculateMToonDirectLighting(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normal,\r\n scope.albedo.rgb,\r\n scope.shadeColor,\r\n scope.shadingShift\r\n );\r\n scope.$l.giLighting = this.calculateMToonGI(scope, scope.normal, scope.albedo.rgb);\r\n scope.$l.lighting = pb.max(scope.directLighting, scope.giLighting);\r\n scope.$l.rim = this.calculateMToonRim(scope, scope.normal, scope.viewVec, scope.uv, scope.lighting);\r\n scope.$l.emission = this.calculateMToonEmission(scope);\r\n scope.$l.outColor = pb.vec4(\r\n pb.add(scope.directLighting, scope.giLighting, scope.rim, scope.emission),\r\n scope.albedo.a\r\n );\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n pb.vec4(1, 1, 0, 1),\r\n pb.vec4(pb.add(pb.mul(scope.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["ToonMaterialBase","applyMaterialMixins","MeshMaterial","mixinAlbedoColor","mixinLambert","mixinTextureProps","MToonMaterial","FEATURE_OUTLINE_WIDTH_MODE","defineFeature","FEATURE_OUTLINE_TANGENT_NORMALS","_shadeColorFactor","_matcapFactor","_parametricRimColorFactor","_outlineColorFactor","_uvAnimationScroll","_emissiveColor","_shadingShiftFactor","_shadingShiftTextureScale","_shadingToonyFactor","_giEqualizationFactor","_parametricRimFresnelPowerFactor","_parametricRimLiftFactor","_rimLightingMixFactor","_outlineWidthFactor","_outlineLightingMixFactor","_uvAnimationRotationSpeedFactor","_emissiveStrength","_transparentWithZWrite","_renderQueueOffsetNumber","Vector3","Vector2","outlineWidthMode","outlineUsesTangentNormals","shadeColorFactor","val","set","uniformChanged","shadingShiftFactor","shadingShiftTextureScale","shadingToonyFactor","toony","Math","min","max","giEqualizationFactor","factor","matcapFactor","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimLightingMixFactor","featureUsed","numPasses","useFeature","outlineWidthFactor","width","outlineColorFactor","outlineLightingMixFactor","transparentWithZWrite","renderQueueOffsetNumber","offset","trunc","uvAnimationScrollXSpeedFactor","x","uvAnimationScrollYSpeedFactor","y","uvAnimationRotationSpeedFactor","emissiveColor","emissiveStrength","clone","other","copyFrom","getQueueType","isTransparentPass","QUEUE_TRANSPARENT","QUEUE_OPAQUE","passToHash","pass","ctx","updateRenderStates","stateSet","useRasterizerState","cullMode","defaultBlendingState","useDepthState","enableTest","enableWrite","setCompareFunc","draw","primitive","numInstances","material","renderPass","type","RENDER_PASS_TYPE_LIGHT","lightBlending","bind","device","drawPrimitive","prototype","call","applyUniformValues","bindGroup","needFragmentColorInput","setValue","outlineWidthMultiplyTexture","usesAnimatedUV","setTexture","outlineWidthMultiplyTextureSampler","uvAnimationMaskTexture","uvAnimationMaskTextureSampler","outlineWidthMultiplyTexCoordMatrix","applyUVAnimation","scope","uv","pb","$builder","funcName","that","uvAnimationScroll","vec2","uniform","float","shaderKind","uvAnimationMaskTex","tex2D","func","$l","mask","textureSample","getUvAnimationMaskTextureUniform","b","textureSampleLevel","time","ShaderHelper","getElapsedTime","rotation","mul","c","cos","s","sin","centeredUv","sub","rotatedUv","add","neg","$return","getGlobalScope","getMToonBaseUV","albedoTexture","getAlbedoTexCoord","getMToonNormalUV","normalTexture","getNormalTexCoord","sampleAlbedo","calculateAlbedoColor","sampleShadeColor","shadeMultiplyTexture","sampleShadeMultiplyTexture","getShadeMultiplyTexCoord","rgb","sampleNormal","normalize","$inputs","wNorm","TBN","calculateTBN","worldPos","normalTex","sampleNormalTexture","vec3","getUniformNormalScale","xx","calculateMToonDirectLighting","normal","baseColor","shadeColor","shadingShift","directColor","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","lightColor","a","NoL","dot","shiftedShading","shading","clamp","div","lightDiffuse","mix","shadowValue","calculateShadow","calculateMToonGI","needCalculateEnvLight","rawGi","getEnvLightIrradiance","uniformGi","gi","calculateMToonRim","viewVec","lighting","rim","matcapTexture","worldViewX","z","worldViewY","cross","matcapUv","sampleMatcapTexture","NoV","parametricRim","pow","rimMultiplyTexture","sampleRimMultiplyTexture","getRimMultiplyTexCoord","calculateMToonEmission","emissiveTexture","sampleEmissiveTexture","getEmissiveTexCoord","vertexShader","oPos","resolveVertexPosition","oNorm","resolveVertexNormal","oOutlineNorm","resolveVertexTangent","xyz","worldNormal","getNormalMatrix","vec4","worldOutlineNormal","getWorldMatrix","outlineWidthTex","uvIndex","outlineWidthMultiplyTexCoordIndex","semantic","$getVertexAttrib","attrib","outlineWidthTextureMatrix","mat4","outlineUv","xy","g","hasOutlineWidth","greaterThan","baseClipPos","getViewProjectionMatrix","clipPos","baseNdc","w","inflatedNdc","outlineNdcDelta","outlinePixelWidth","length","getRenderSize","outlinePixelScale","adjustedNdc","zw","$outputs","setClipSpacePosition","clipNormalPos","screenNormal","screenUnitPixels","fragmentShader","albedo","outlineLighting","outputFragmentColor","drawContext","shadingShiftTexture","sampleShadingShiftTexture","getShadingShiftTexCoord","r","calculateViewVector","directLighting","giLighting","emission","outColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mtoon.js","sources":["../../src/material/mtoon.ts"],"sourcesContent":["import type { Immutable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_CLOSER, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinLambert } from './mixins/lightmodel/lambert';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\n\r\n/**\r\n * MToonMaterial outline width mode.\r\n *\r\n * @public\r\n */\r\nexport type MToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype RuntimeMaterialPassMethods = {\r\n bind(device: DrawContext['device'], pass: number): boolean;\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances?: number): void;\r\n};\r\n\r\nconst ToonMaterialBase = applyMaterialMixins(\r\n MeshMaterial,\r\n mixinAlbedoColor,\r\n mixinLambert,\r\n mixinTextureProps('shadeMultiply'),\r\n mixinTextureProps('shadingShift'),\r\n mixinTextureProps('matcap'),\r\n mixinTextureProps('rimMultiply'),\r\n mixinTextureProps('outlineWidthMultiply'),\r\n mixinTextureProps('uvAnimationMask'),\r\n mixinTextureProps('emissive')\r\n);\r\n\r\n/**\r\n * MToonMaterial is a material that implements the MToon shader, which is a stylized shader commonly used for rendering anime-style characters. It supports features such as rim lighting, matcap, and outline rendering.\r\n *\r\n * @public\r\n */\r\nexport class MToonMaterial extends ToonMaterialBase {\r\n private static readonly FEATURE_OUTLINE_WIDTH_MODE = this.defineFeature();\r\n private static readonly FEATURE_OUTLINE_TANGENT_NORMALS = this.defineFeature();\r\n private readonly _shadeColorFactor: Vector3;\r\n private readonly _matcapFactor: Vector3;\r\n private readonly _parametricRimColorFactor: Vector3;\r\n private readonly _outlineColorFactor: Vector3;\r\n private readonly _uvAnimationScroll: Vector2;\r\n private readonly _emissiveColor: Vector3;\r\n private _shadingShiftFactor: number;\r\n private _shadingShiftTextureScale: number;\r\n private _shadingToonyFactor: number;\r\n private _giEqualizationFactor: number;\r\n private _parametricRimFresnelPowerFactor: number;\r\n private _parametricRimLiftFactor: number;\r\n private _rimLightingMixFactor: number;\r\n private _outlineWidthFactor: number;\r\n private _outlineLightingMixFactor: number;\r\n private _uvAnimationRotationSpeedFactor: number;\r\n private _emissiveStrength: number;\r\n private _transparentWithZWrite: boolean;\r\n private _renderQueueOffsetNumber: number;\r\n constructor() {\r\n super();\r\n this._shadeColorFactor = new Vector3(0, 0, 0);\r\n this._matcapFactor = new Vector3(1, 1, 1);\r\n this._parametricRimColorFactor = new Vector3(0, 0, 0);\r\n this._outlineColorFactor = new Vector3(0, 0, 0);\r\n this._uvAnimationScroll = new Vector2(0, 0);\r\n this._emissiveColor = new Vector3(0, 0, 0);\r\n this._shadingShiftFactor = 0;\r\n this._shadingShiftTextureScale = 1;\r\n this._shadingToonyFactor = 0.9;\r\n this._giEqualizationFactor = 0.9;\r\n this._parametricRimFresnelPowerFactor = 5;\r\n this._parametricRimLiftFactor = 0;\r\n this._rimLightingMixFactor = 1;\r\n this._outlineWidthFactor = 0;\r\n this._outlineLightingMixFactor = 1;\r\n this._uvAnimationRotationSpeedFactor = 0;\r\n this._emissiveStrength = 1;\r\n this._transparentWithZWrite = false;\r\n this._renderQueueOffsetNumber = 0;\r\n this.outlineWidthMode = 'none';\r\n this.outlineUsesTangentNormals = false;\r\n }\r\n get shadeColorFactor(): Immutable<Vector3> {\r\n return this._shadeColorFactor;\r\n }\r\n set shadeColorFactor(val: Immutable<Vector3>) {\r\n this._shadeColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get shadingShiftFactor(): number {\r\n return this._shadingShiftFactor;\r\n }\r\n set shadingShiftFactor(val: number) {\r\n if (val !== this._shadingShiftFactor) {\r\n this._shadingShiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingShiftTextureScale(): number {\r\n return this._shadingShiftTextureScale;\r\n }\r\n set shadingShiftTextureScale(val: number) {\r\n if (val !== this._shadingShiftTextureScale) {\r\n this._shadingShiftTextureScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingToonyFactor(): number {\r\n return this._shadingToonyFactor;\r\n }\r\n set shadingToonyFactor(val: number) {\r\n const toony = Math.min(Math.max(val, 0), 0.99);\r\n if (toony !== this._shadingToonyFactor) {\r\n this._shadingToonyFactor = toony;\r\n this.uniformChanged();\r\n }\r\n }\r\n get giEqualizationFactor(): number {\r\n return this._giEqualizationFactor;\r\n }\r\n set giEqualizationFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._giEqualizationFactor) {\r\n this._giEqualizationFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get matcapFactor(): Immutable<Vector3> {\r\n return this._matcapFactor;\r\n }\r\n set matcapFactor(val: Immutable<Vector3>) {\r\n this._matcapFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimColorFactor(): Immutable<Vector3> {\r\n return this._parametricRimColorFactor;\r\n }\r\n set parametricRimColorFactor(val: Immutable<Vector3>) {\r\n this._parametricRimColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimFresnelPowerFactor(): number {\r\n return this._parametricRimFresnelPowerFactor;\r\n }\r\n set parametricRimFresnelPowerFactor(val: number) {\r\n if (val !== this._parametricRimFresnelPowerFactor) {\r\n this._parametricRimFresnelPowerFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get parametricRimLiftFactor(): number {\r\n return this._parametricRimLiftFactor;\r\n }\r\n set parametricRimLiftFactor(val: number) {\r\n if (val !== this._parametricRimLiftFactor) {\r\n this._parametricRimLiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get rimLightingMixFactor(): number {\r\n return this._rimLightingMixFactor;\r\n }\r\n set rimLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._rimLightingMixFactor) {\r\n this._rimLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineWidthMode(): MToonOutlineWidthMode {\r\n return this.featureUsed<MToonOutlineWidthMode>(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE);\r\n }\r\n set outlineWidthMode(val: MToonOutlineWidthMode) {\r\n if (val !== 'none' && this.numPasses < 2) {\r\n this.numPasses = 2;\r\n }\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE, val);\r\n this.numPasses = val === 'none' ? 1 : 2;\r\n }\r\n get outlineWidthFactor(): number {\r\n return this._outlineWidthFactor;\r\n }\r\n set outlineWidthFactor(val: number) {\r\n const width = Math.max(val, 0);\r\n if (width !== this._outlineWidthFactor) {\r\n this._outlineWidthFactor = width;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineColorFactor(): Immutable<Vector3> {\r\n return this._outlineColorFactor;\r\n }\r\n set outlineColorFactor(val: Immutable<Vector3>) {\r\n this._outlineColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get outlineLightingMixFactor(): number {\r\n return this._outlineLightingMixFactor;\r\n }\r\n set outlineLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._outlineLightingMixFactor) {\r\n this._outlineLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineUsesTangentNormals(): boolean {\r\n return !!this.featureUsed<boolean>(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS);\r\n }\r\n set outlineUsesTangentNormals(val: boolean) {\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS, !!val);\r\n }\r\n get transparentWithZWrite(): boolean {\r\n return this._transparentWithZWrite;\r\n }\r\n set transparentWithZWrite(val: boolean) {\r\n if (!!val !== this._transparentWithZWrite) {\r\n this._transparentWithZWrite = !!val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get renderQueueOffsetNumber(): number {\r\n return this._renderQueueOffsetNumber;\r\n }\r\n set renderQueueOffsetNumber(val: number) {\r\n const offset = Math.trunc(val);\r\n if (offset !== this._renderQueueOffsetNumber) {\r\n this._renderQueueOffsetNumber = offset;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollXSpeedFactor(): number {\r\n return this._uvAnimationScroll.x;\r\n }\r\n set uvAnimationScrollXSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.x) {\r\n this._uvAnimationScroll.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollYSpeedFactor(): number {\r\n return this._uvAnimationScroll.y;\r\n }\r\n set uvAnimationScrollYSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.y) {\r\n this._uvAnimationScroll.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationRotationSpeedFactor(): number {\r\n return this._uvAnimationRotationSpeedFactor;\r\n }\r\n set uvAnimationRotationSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationRotationSpeedFactor) {\r\n this._uvAnimationRotationSpeedFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get emissiveColor(): Immutable<Vector3> {\r\n return this._emissiveColor;\r\n }\r\n set emissiveColor(val: Immutable<Vector3>) {\r\n this._emissiveColor.set(val);\r\n this.uniformChanged();\r\n }\r\n get emissiveStrength(): number {\r\n return this._emissiveStrength;\r\n }\r\n set emissiveStrength(val: number) {\r\n if (val !== this._emissiveStrength) {\r\n this._emissiveStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n clone(): MToonMaterial {\r\n const other = new MToonMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shadeColorFactor = other.shadeColorFactor;\r\n this.shadingShiftFactor = other.shadingShiftFactor;\r\n this.shadingShiftTextureScale = other.shadingShiftTextureScale;\r\n this.shadingToonyFactor = other.shadingToonyFactor;\r\n this.giEqualizationFactor = other.giEqualizationFactor;\r\n this.matcapFactor = other.matcapFactor;\r\n this.parametricRimColorFactor = other.parametricRimColorFactor;\r\n this.parametricRimFresnelPowerFactor = other.parametricRimFresnelPowerFactor;\r\n this.parametricRimLiftFactor = other.parametricRimLiftFactor;\r\n this.rimLightingMixFactor = other.rimLightingMixFactor;\r\n this.outlineWidthMode = other.outlineWidthMode;\r\n this.outlineWidthFactor = other.outlineWidthFactor;\r\n this.outlineColorFactor = other.outlineColorFactor;\r\n this.outlineLightingMixFactor = other.outlineLightingMixFactor;\r\n this.outlineUsesTangentNormals = other.outlineUsesTangentNormals;\r\n this.transparentWithZWrite = other.transparentWithZWrite;\r\n this.renderQueueOffsetNumber = other.renderQueueOffsetNumber;\r\n this.uvAnimationScrollXSpeedFactor = other.uvAnimationScrollXSpeedFactor;\r\n this.uvAnimationScrollYSpeedFactor = other.uvAnimationScrollYSpeedFactor;\r\n this.uvAnimationRotationSpeedFactor = other.uvAnimationRotationSpeedFactor;\r\n this.emissiveColor = other.emissiveColor;\r\n this.emissiveStrength = other.emissiveStrength;\r\n }\r\n getQueueType() {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n passToHash(pass: number): string {\r\n return super.passToHash(pass > 0 ? 1 : 0);\r\n }\r\n isTransparentPass(pass: number, ctx?: DrawContext): boolean {\r\n return pass === 0 && super.isTransparentPass(pass, ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n if (pass > 0) {\r\n stateSet.useRasterizerState().cullMode = 'front';\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc(DEPTH_COMPARE_CLOSER);\r\n } else if (this._transparentWithZWrite && this.isTransparentPass(pass, ctx)) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(true);\r\n }\r\n }\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0): void {\r\n const material = this as unknown as RuntimeMaterialPassMethods;\r\n if (this.numPasses > 1 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !ctx.lightBlending) {\r\n // Draw the inflated hull first so the regular pass hides interior outline fragments.\r\n material.bind(ctx.device, 1);\r\n this.drawPrimitive(1, primitive, ctx, numInstances);\r\n material.bind(ctx.device, 0);\r\n this.drawPrimitive(0, primitive, ctx, numInstances);\r\n } else {\r\n (MeshMaterial.prototype as unknown as RuntimeMaterialPassMethods).draw.call(\r\n this,\r\n primitive,\r\n ctx,\r\n numInstances\r\n );\r\n }\r\n }\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (pass > 0 && (ctx.renderPass!.type !== RENDER_PASS_TYPE_LIGHT || ctx.lightBlending)) {\r\n return;\r\n }\r\n super.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n bindGroup.setValue('shadeColorFactor', this._shadeColorFactor);\r\n bindGroup.setValue('shadingShiftFactor', this._shadingShiftFactor);\r\n bindGroup.setValue('shadingShiftTextureScale', this._shadingShiftTextureScale);\r\n bindGroup.setValue('shadingToonyFactor', this._shadingToonyFactor);\r\n bindGroup.setValue('giEqualizationFactor', this._giEqualizationFactor);\r\n bindGroup.setValue('matcapFactor', this._matcapFactor);\r\n bindGroup.setValue('parametricRimColorFactor', this._parametricRimColorFactor);\r\n bindGroup.setValue('parametricRimFresnelPowerFactor', this._parametricRimFresnelPowerFactor);\r\n bindGroup.setValue('parametricRimLiftFactor', this._parametricRimLiftFactor);\r\n bindGroup.setValue('rimLightingMixFactor', this._rimLightingMixFactor);\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n bindGroup.setValue('emissiveColor', this._emissiveColor);\r\n bindGroup.setValue('emissiveStrength', this._emissiveStrength);\r\n } else if (pass > 0 && this.outlineWidthMultiplyTexture && this.usesAnimatedUV()) {\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n }\r\n if (pass > 0) {\r\n bindGroup.setValue('outlineWidthFactor', this._outlineWidthFactor);\r\n if (this.outlineWidthMultiplyTexture) {\r\n bindGroup.setTexture(\r\n 'outlineWidthTex',\r\n this.outlineWidthMultiplyTexture,\r\n this.outlineWidthMultiplyTextureSampler\r\n );\r\n if (this.uvAnimationMaskTexture && this.usesAnimatedUV()) {\r\n bindGroup.setTexture(\r\n 'uvAnimationMaskTex',\r\n this.uvAnimationMaskTexture,\r\n this.uvAnimationMaskTextureSampler\r\n );\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n bindGroup.setValue('outlineWidthTextureMatrix', this.outlineWidthMultiplyTexCoordMatrix);\r\n }\r\n }\r\n }\r\n if (pass > 0 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n bindGroup.setValue('outlineColorFactor', this._outlineColorFactor);\r\n bindGroup.setValue('outlineLightingMixFactor', this._outlineLightingMixFactor);\r\n }\r\n }\r\n private usesAnimatedUV(): boolean {\r\n return (\r\n this._uvAnimationScroll.x !== 0 ||\r\n this._uvAnimationScroll.y !== 0 ||\r\n this._uvAnimationRotationSpeedFactor !== 0\r\n );\r\n }\r\n private applyUVAnimation(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n if (!this.usesAnimatedUV()) {\r\n return uv;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = 'Z_mtoonUVAnimation';\r\n const that = this;\r\n if (!scope.uvAnimationScroll) {\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n }\r\n if (!scope.uvAnimationRotationSpeedFactor) {\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n }\r\n if (that.uvAnimationMaskTexture && pb.shaderKind !== 'fragment' && !scope.uvAnimationMaskTex) {\r\n scope.uvAnimationMaskTex = pb.tex2D().uniform(2);\r\n }\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.mask = that.uvAnimationMaskTexture\r\n ? pb.shaderKind === 'fragment'\r\n ? pb.textureSample(that.getUvAnimationMaskTextureUniform(this), this.uv).b\r\n : pb.textureSampleLevel(this.uvAnimationMaskTex, this.uv, 0).b\r\n : pb.float(1);\r\n this.$l.time = ShaderHelper.getElapsedTime(this);\r\n this.$l.rotation = pb.mul(this.time, this.uvAnimationRotationSpeedFactor, this.mask);\r\n this.$l.c = pb.cos(this.rotation);\r\n this.$l.s = pb.sin(this.rotation);\r\n this.$l.centeredUv = pb.sub(this.uv, pb.vec2(0.5));\r\n this.$l.rotatedUv = pb.add(\r\n pb.vec2(\r\n pb.add(pb.mul(this.c, this.centeredUv.x), pb.mul(this.s, this.centeredUv.y)),\r\n pb.add(pb.mul(pb.neg(this.s), this.centeredUv.x), pb.mul(this.c, this.centeredUv.y))\r\n ),\r\n pb.vec2(0.5)\r\n );\r\n this.$return(pb.add(this.rotatedUv, pb.mul(this.uvAnimationScroll, this.time, this.mask)));\r\n });\r\n return pb.getGlobalScope()[funcName](uv);\r\n }\r\n private getMToonBaseUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.albedoTexture\r\n ? this.applyUVAnimation(scope, this.getAlbedoTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private getMToonNormalUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.normalTexture\r\n ? this.applyUVAnimation(scope, this.getNormalTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private sampleAlbedo(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n return this.calculateAlbedoColor(scope, uv);\r\n }\r\n private sampleShadeColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return this.shadeMultiplyTexture\r\n ? pb.mul(\r\n scope.shadeColorFactor,\r\n this.sampleShadeMultiplyTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadeMultiplyTexCoord(scope))\r\n ).rgb\r\n )\r\n : scope.shadeColorFactor;\r\n }\r\n private sampleNormal(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.normalTexture) {\r\n return pb.normalize(scope.$inputs.wNorm);\r\n }\r\n scope.$l.TBN = this.calculateTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm);\r\n scope.$l.normalTex = pb.sub(pb.mul(this.sampleNormalTexture(scope, uv).rgb, 2), pb.vec3(1));\r\n scope.normalTex = pb.mul(scope.normalTex, pb.vec3(pb.vec3(this.getUniformNormalScale(scope)).xx, 1));\r\n return pb.normalize(pb.mul(scope.TBN, scope.normalTex));\r\n }\r\n private calculateMToonDirectLighting(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp,\r\n shadeColor: PBShaderExp,\r\n shadingShift: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_mtoonDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('baseColor'),\r\n pb.vec3('shadeColor'),\r\n pb.float('shadingShift')\r\n ],\r\n function () {\r\n this.$l.directColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.shiftedShading = pb.add(this.NoL, this.shadingShift);\r\n this.$l.shading = pb.clamp(\r\n pb.div(\r\n pb.sub(this.shiftedShading, pb.add(-1, this.shadingToonyFactor)),\r\n pb.max(pb.sub(2, pb.mul(this.shadingToonyFactor, 2)), 0.00001)\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.lightDiffuse = pb.mix(this.shadeColor, this.baseColor, this.shading);\r\n if (shadow) {\r\n this.$l.shadowValue = that.calculateShadow(this, this.worldPos, pb.clamp(this.NoL, 0, 1));\r\n this.lightDiffuse = pb.mix(this.shadeColor, this.lightDiffuse, this.shadowValue);\r\n }\r\n this.directColor = pb.add(this.directColor, pb.mul(this.lightDiffuse, this.lightColor));\r\n });\r\n this.$return(this.directColor);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](worldPos, normal, baseColor, shadeColor, shadingShift);\r\n }\r\n private calculateMToonGI(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateEnvLight()) {\r\n return pb.vec3(0);\r\n }\r\n scope.$l.rawGi = this.getEnvLightIrradiance(scope, normal);\r\n scope.$l.uniformGi = pb.mul(\r\n pb.add(\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, 1, 0)),\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, -1, 0))\r\n ),\r\n 0.5\r\n );\r\n scope.$l.gi = pb.mix(scope.rawGi, scope.uniformGi, scope.giEqualizationFactor);\r\n return pb.mul(scope.gi, baseColor);\r\n }\r\n private calculateMToonRim(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n uv: PBShaderExp,\r\n lighting: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n scope.$l.rim = pb.vec3(0);\r\n if (this.matcapTexture) {\r\n scope.$l.worldViewX = pb.normalize(pb.vec3(viewVec.z, 0, pb.neg(viewVec.x)));\r\n scope.$l.worldViewY = pb.normalize(pb.cross(viewVec, scope.worldViewX));\r\n scope.$l.matcapUv = pb.add(\r\n pb.mul(pb.vec2(pb.dot(scope.worldViewX, normal), pb.dot(scope.worldViewY, normal)), 0.495),\r\n pb.vec2(0.5)\r\n );\r\n scope.rim = pb.add(\r\n scope.rim,\r\n pb.mul(scope.matcapFactor, this.sampleMatcapTexture(scope, scope.matcapUv).rgb)\r\n );\r\n }\r\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\r\n scope.$l.parametricRim = pb.pow(\r\n pb.clamp(pb.add(pb.sub(1, scope.NoV), scope.parametricRimLiftFactor), 0, 1),\r\n pb.max(scope.parametricRimFresnelPowerFactor, 0.00001)\r\n );\r\n scope.rim = pb.add(scope.rim, pb.mul(scope.parametricRimColorFactor, scope.parametricRim));\r\n if (this.rimMultiplyTexture) {\r\n scope.rim = pb.mul(\r\n scope.rim,\r\n this.sampleRimMultiplyTexture(scope, this.applyUVAnimation(scope, this.getRimMultiplyTexCoord(scope)))\r\n .rgb\r\n );\r\n }\r\n return pb.mul(scope.rim, pb.mix(pb.vec3(1), lighting, scope.rimLightingMixFactor));\r\n }\r\n private calculateMToonEmission(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n const emission = this.emissiveTexture\r\n ? pb.mul(\r\n scope.emissiveColor,\r\n scope.emissiveStrength,\r\n this.sampleEmissiveTexture(scope, this.applyUVAnimation(scope, this.getEmissiveTexCoord(scope))).rgb\r\n )\r\n : pb.mul(scope.emissiveColor, scope.emissiveStrength);\r\n // Material-authored emitters are not covered by the CPU-side light pre-exposure, so a physical\r\n // scene exposes them here. The factor is 1 in legacy.\r\n return pb.mul(emission, ShaderHelper.getPreExposureUniform(scope)) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n if (this.pass > 0 && this.outlineUsesTangentNormals) {\r\n scope.$l.oOutlineNorm = ShaderHelper.resolveVertexTangent(scope).xyz;\r\n }\r\n scope.$l.worldNormal = pb.normalize(\r\n pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz\r\n );\r\n scope.$l.worldOutlineNormal =\r\n this.pass > 0 && this.outlineUsesTangentNormals\r\n ? pb.normalize(pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oOutlineNorm, 0)).xyz)\r\n : scope.worldNormal;\r\n scope.$l.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n if (this.pass > 0) {\r\n scope.outlineWidthFactor = pb.float().uniform(2);\r\n scope.$l.width = scope.outlineWidthFactor;\r\n if (this.outlineWidthMultiplyTexture) {\r\n scope.outlineWidthTex = pb.tex2D().uniform(2);\r\n const uvIndex = this.outlineWidthMultiplyTexCoordIndex;\r\n const semantic = `texCoord${uvIndex}` as any;\r\n if (!scope.$getVertexAttrib(semantic)) {\r\n scope.$inputs[semantic] = pb.vec2().attrib(semantic);\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n scope.outlineWidthTextureMatrix = pb.mat4().uniform(2);\r\n scope.$l.outlineUv = pb.mul(\r\n scope.outlineWidthTextureMatrix,\r\n pb.vec4(this.applyUVAnimation(scope, scope.$inputs[semantic]), 0, 1)\r\n ).xy;\r\n } else {\r\n scope.$l.outlineUv = this.applyUVAnimation(scope, scope.$inputs[semantic]);\r\n }\r\n scope.width = pb.mul(scope.width, pb.textureSampleLevel(scope.outlineWidthTex, scope.outlineUv, 0).g);\r\n }\r\n scope.width = pb.max(scope.width, 0);\r\n scope.$l.hasOutlineWidth = pb.float(pb.greaterThan(scope.width, 0));\r\n if (this.outlineWidthMode === 'worldCoordinates') {\r\n scope.$l.baseClipPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.worldPos, 1)\r\n );\r\n scope.worldPos = pb.add(scope.worldPos, pb.mul(scope.worldOutlineNormal, scope.width));\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.baseNdc = pb.div(scope.baseClipPos.xy, pb.max(scope.baseClipPos.w, 0.00001));\r\n scope.$l.inflatedNdc = pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001));\r\n scope.$l.outlineNdcDelta = pb.sub(scope.inflatedNdc, scope.baseNdc);\r\n scope.$l.outlinePixelWidth = pb.length(\r\n pb.mul(scope.outlineNdcDelta, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.$l.outlinePixelScale = pb.mix(\r\n 1,\r\n pb.div(pb.max(scope.outlinePixelWidth, 1), pb.max(scope.outlinePixelWidth, 0.00001)),\r\n scope.hasOutlineWidth\r\n );\r\n scope.$l.adjustedNdc = pb.add(scope.baseNdc, pb.mul(scope.outlineNdcDelta, scope.outlinePixelScale));\r\n scope.clipPos = pb.vec4(pb.mul(scope.adjustedNdc, scope.clipPos.w), scope.clipPos.zw);\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n } else if (this.outlineWidthMode === 'screenCoordinates') {\r\n scope.$l.clipNormalPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(pb.add(scope.worldPos, scope.worldOutlineNormal), 1)\r\n );\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.screenNormal = pb.sub(\r\n pb.div(scope.clipNormalPos.xy, pb.max(scope.clipNormalPos.w, 0.00001)),\r\n pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001))\r\n );\r\n scope.screenNormal = pb.normalize(\r\n pb.mul(\r\n scope.screenNormal,\r\n pb.vec2(1, pb.div(ShaderHelper.getRenderSize(scope).x, ShaderHelper.getRenderSize(scope).y))\r\n )\r\n );\r\n scope.$l.screenUnitPixels = pb.length(\r\n pb.mul(scope.screenNormal, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.width = pb.mul(\r\n pb.max(scope.width, pb.div(1, pb.max(scope.screenUnitPixels, 0.00001))),\r\n scope.hasOutlineWidth\r\n );\r\n\r\n //scope.clipPos.xy = pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w));\r\n scope.clipPos = pb.vec4(\r\n pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w)),\r\n scope.clipPos.zw\r\n );\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n }\r\n }\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = this.pass > 0 ? scope.worldOutlineNormal : scope.worldNormal;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.shadeColorFactor = pb.vec3().uniform(2);\r\n scope.shadingShiftFactor = pb.float().uniform(2);\r\n scope.shadingShiftTextureScale = pb.float().uniform(2);\r\n scope.shadingToonyFactor = pb.float().uniform(2);\r\n scope.giEqualizationFactor = pb.float().uniform(2);\r\n scope.matcapFactor = pb.vec3().uniform(2);\r\n scope.parametricRimColorFactor = pb.vec3().uniform(2);\r\n scope.parametricRimFresnelPowerFactor = pb.float().uniform(2);\r\n scope.parametricRimLiftFactor = pb.float().uniform(2);\r\n scope.rimLightingMixFactor = pb.float().uniform(2);\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n scope.emissiveColor = pb.vec3().uniform(2);\r\n scope.emissiveStrength = pb.float().uniform(2);\r\n if (this.pass > 0) {\r\n scope.outlineColorFactor = pb.vec3().uniform(2);\r\n scope.outlineLightingMixFactor = pb.float().uniform(2);\r\n scope.$l.albedo = this.sampleAlbedo(scope, this.getMToonBaseUV(scope));\r\n scope.$l.outlineLighting = pb.mix(pb.vec3(1), scope.albedo.rgb, scope.outlineLightingMixFactor);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(pb.mul(scope.outlineColorFactor, scope.outlineLighting), scope.albedo.a)\r\n );\r\n } else {\r\n scope.$l.uv = this.getMToonBaseUV(scope);\r\n scope.$l.albedo = this.sampleAlbedo(scope, scope.uv);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normal = this.sampleNormal(scope, this.getMToonNormalUV(scope));\r\n scope.$l.shadingShift = scope.shadingShiftFactor;\r\n if (this.shadingShiftTexture) {\r\n scope.shadingShift = pb.add(\r\n scope.shadingShift,\r\n pb.mul(\r\n this.sampleShadingShiftTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadingShiftTexCoord(scope))\r\n ).r,\r\n scope.shadingShiftTextureScale\r\n )\r\n );\r\n }\r\n scope.$l.shadeColor = this.sampleShadeColor(scope);\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.directLighting = this.calculateMToonDirectLighting(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normal,\r\n scope.albedo.rgb,\r\n scope.shadeColor,\r\n scope.shadingShift\r\n );\r\n scope.$l.giLighting = this.calculateMToonGI(scope, scope.normal, scope.albedo.rgb);\r\n scope.$l.lighting = pb.max(scope.directLighting, scope.giLighting);\r\n scope.$l.rim = this.calculateMToonRim(scope, scope.normal, scope.viewVec, scope.uv, scope.lighting);\r\n scope.$l.emission = this.calculateMToonEmission(scope);\r\n scope.$l.outColor = pb.vec4(\r\n pb.add(scope.directLighting, scope.giLighting, scope.rim, scope.emission),\r\n scope.albedo.a\r\n );\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n pb.vec4(1, 1, 0, 1),\r\n pb.vec4(pb.add(pb.mul(scope.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["ToonMaterialBase","applyMaterialMixins","MeshMaterial","mixinAlbedoColor","mixinLambert","mixinTextureProps","MToonMaterial","FEATURE_OUTLINE_WIDTH_MODE","defineFeature","FEATURE_OUTLINE_TANGENT_NORMALS","_shadeColorFactor","_matcapFactor","_parametricRimColorFactor","_outlineColorFactor","_uvAnimationScroll","_emissiveColor","_shadingShiftFactor","_shadingShiftTextureScale","_shadingToonyFactor","_giEqualizationFactor","_parametricRimFresnelPowerFactor","_parametricRimLiftFactor","_rimLightingMixFactor","_outlineWidthFactor","_outlineLightingMixFactor","_uvAnimationRotationSpeedFactor","_emissiveStrength","_transparentWithZWrite","_renderQueueOffsetNumber","Vector3","Vector2","outlineWidthMode","outlineUsesTangentNormals","shadeColorFactor","val","set","uniformChanged","shadingShiftFactor","shadingShiftTextureScale","shadingToonyFactor","toony","Math","min","max","giEqualizationFactor","factor","matcapFactor","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimLightingMixFactor","featureUsed","numPasses","useFeature","outlineWidthFactor","width","outlineColorFactor","outlineLightingMixFactor","transparentWithZWrite","renderQueueOffsetNumber","offset","trunc","uvAnimationScrollXSpeedFactor","x","uvAnimationScrollYSpeedFactor","y","uvAnimationRotationSpeedFactor","emissiveColor","emissiveStrength","clone","other","copyFrom","getQueueType","isTransparentPass","QUEUE_TRANSPARENT","QUEUE_OPAQUE","passToHash","pass","ctx","updateRenderStates","stateSet","useRasterizerState","cullMode","defaultBlendingState","useDepthState","enableTest","enableWrite","setCompareFunc","DEPTH_COMPARE_CLOSER","draw","primitive","numInstances","material","renderPass","type","RENDER_PASS_TYPE_LIGHT","lightBlending","bind","device","drawPrimitive","prototype","call","applyUniformValues","bindGroup","needFragmentColorInput","setValue","outlineWidthMultiplyTexture","usesAnimatedUV","setTexture","outlineWidthMultiplyTextureSampler","uvAnimationMaskTexture","uvAnimationMaskTextureSampler","outlineWidthMultiplyTexCoordMatrix","applyUVAnimation","scope","uv","pb","$builder","funcName","that","uvAnimationScroll","vec2","uniform","float","shaderKind","uvAnimationMaskTex","tex2D","func","$l","mask","textureSample","getUvAnimationMaskTextureUniform","b","textureSampleLevel","time","ShaderHelper","getElapsedTime","rotation","mul","c","cos","s","sin","centeredUv","sub","rotatedUv","add","neg","$return","getGlobalScope","getMToonBaseUV","albedoTexture","getAlbedoTexCoord","getMToonNormalUV","normalTexture","getNormalTexCoord","sampleAlbedo","calculateAlbedoColor","sampleShadeColor","shadeMultiplyTexture","sampleShadeMultiplyTexture","getShadeMultiplyTexCoord","rgb","sampleNormal","normalize","$inputs","wNorm","TBN","calculateTBN","worldPos","normalTex","sampleNormalTexture","vec3","getUniformNormalScale","xx","calculateMToonDirectLighting","normal","baseColor","shadeColor","shadingShift","directColor","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","lightColor","a","NoL","dot","shiftedShading","shading","clamp","div","lightDiffuse","mix","shadowValue","calculateShadow","calculateMToonGI","needCalculateEnvLight","rawGi","getEnvLightIrradiance","uniformGi","gi","calculateMToonRim","viewVec","lighting","rim","matcapTexture","worldViewX","z","worldViewY","cross","matcapUv","sampleMatcapTexture","NoV","parametricRim","pow","rimMultiplyTexture","sampleRimMultiplyTexture","getRimMultiplyTexCoord","calculateMToonEmission","emission","emissiveTexture","sampleEmissiveTexture","getEmissiveTexCoord","getPreExposureUniform","vertexShader","oPos","resolveVertexPosition","oNorm","resolveVertexNormal","oOutlineNorm","resolveVertexTangent","xyz","worldNormal","getNormalMatrix","vec4","worldOutlineNormal","getWorldMatrix","outlineWidthTex","uvIndex","outlineWidthMultiplyTexCoordIndex","semantic","$getVertexAttrib","attrib","outlineWidthTextureMatrix","mat4","outlineUv","xy","g","hasOutlineWidth","greaterThan","baseClipPos","getViewProjectionMatrix","clipPos","baseNdc","w","inflatedNdc","outlineNdcDelta","outlinePixelWidth","length","getRenderSize","outlinePixelScale","adjustedNdc","zw","$outputs","setClipSpacePosition","clipNormalPos","screenNormal","screenUnitPixels","fragmentShader","albedo","outlineLighting","outputFragmentColor","drawContext","shadingShiftTexture","sampleShadingShiftTexture","getShadingShiftTexCoord","r","calculateViewVector","directLighting","giLighting","outColor"],"mappings":";;;;;;;;AA6BA,MAAMA,mBAAmBC,mBACvBC,CAAAA,YAAAA,EACAC,gBACAC,EAAAA,YAAAA,EACAC,kBAAkB,eAClBA,CAAAA,EAAAA,iBAAAA,CAAkB,cAClBA,CAAAA,EAAAA,iBAAAA,CAAkB,WAClBA,iBAAkB,CAAA,aAAA,CAAA,EAClBA,kBAAkB,sBAClBA,CAAAA,EAAAA,iBAAAA,CAAkB,oBAClBA,iBAAkB,CAAA,UAAA,CAAA,CAAA;AAGpB;;;;IAKO,MAAMC,aAAsBN,SAAAA,gBAAAA,CAAAA;AACjC,IAAA,OAAwBO,0BAA6B,GAAA,IAAI,CAACC,aAAa,EAAG;AAC1E,IAAA,OAAwBC,+BAAkC,GAAA,IAAI,CAACD,aAAa,EAAG;IAC9DE,iBAA2B;IAC3BC,aAAuB;IACvBC,yBAAmC;IACnCC,mBAA6B;IAC7BC,kBAA4B;IAC5BC,cAAwB;IACjCC,mBAA4B;IAC5BC,yBAAkC;IAClCC,mBAA4B;IAC5BC,qBAA8B;IAC9BC,gCAAyC;IACzCC,wBAAiC;IACjCC,qBAA8B;IAC9BC,mBAA4B;IAC5BC,yBAAkC;IAClCC,+BAAwC;IACxCC,iBAA0B;IAC1BC,sBAAgC;IAChCC,wBAAiC;IACzC,WAAc,EAAA;QACZ,KAAK,EAAA;AACL,QAAA,IAAI,CAAClB,iBAAiB,GAAG,IAAImB,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;AAC3C,QAAA,IAAI,CAAClB,aAAa,GAAG,IAAIkB,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACjB,yBAAyB,GAAG,IAAIiB,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;AACnD,QAAA,IAAI,CAAChB,mBAAmB,GAAG,IAAIgB,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACf,kBAAkB,GAAG,IAAIgB,QAAQ,CAAG,EAAA,CAAA,CAAA;AACzC,QAAA,IAAI,CAACf,cAAc,GAAG,IAAIc,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;QACxC,IAAI,CAACb,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,yBAAyB,GAAG,CAAA;QACjC,IAAI,CAACC,mBAAmB,GAAG,GAAA;QAC3B,IAAI,CAACC,qBAAqB,GAAG,GAAA;QAC7B,IAAI,CAACC,gCAAgC,GAAG,CAAA;QACxC,IAAI,CAACC,wBAAwB,GAAG,CAAA;QAChC,IAAI,CAACC,qBAAqB,GAAG,CAAA;QAC7B,IAAI,CAACC,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,yBAAyB,GAAG,CAAA;QACjC,IAAI,CAACC,+BAA+B,GAAG,CAAA;QACvC,IAAI,CAACC,iBAAiB,GAAG,CAAA;QACzB,IAAI,CAACC,sBAAsB,GAAG,KAAA;QAC9B,IAAI,CAACC,wBAAwB,GAAG,CAAA;QAChC,IAAI,CAACG,gBAAgB,GAAG,MAAA;QACxB,IAAI,CAACC,yBAAyB,GAAG,KAAA;AACnC;AACA,IAAA,IAAIC,gBAAuC,GAAA;QACzC,OAAO,IAAI,CAACvB,iBAAiB;AAC/B;IACA,IAAIuB,gBAAAA,CAAiBC,GAAuB,EAAE;AAC5C,QAAA,IAAI,CAACxB,iBAAiB,CAACyB,GAAG,CAACD,GAAAA,CAAAA;AAC3B,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIC,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAACrB,mBAAmB;AACjC;IACA,IAAIqB,kBAAAA,CAAmBH,GAAW,EAAE;AAClC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAAClB,mBAAmB,EAAE;YACpC,IAAI,CAACA,mBAAmB,GAAGkB,GAAAA;AAC3B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIE,wBAAmC,GAAA;QACrC,OAAO,IAAI,CAACrB,yBAAyB;AACvC;IACA,IAAIqB,wBAAAA,CAAyBJ,GAAW,EAAE;AACxC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACjB,yBAAyB,EAAE;YAC1C,IAAI,CAACA,yBAAyB,GAAGiB,GAAAA;AACjC,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIG,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAACrB,mBAAmB;AACjC;IACA,IAAIqB,kBAAAA,CAAmBL,GAAW,EAAE;QAClC,MAAMM,KAAAA,GAAQC,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAACT,KAAK,CAAI,CAAA,EAAA,IAAA,CAAA;AACzC,QAAA,IAAIM,KAAU,KAAA,IAAI,CAACtB,mBAAmB,EAAE;YACtC,IAAI,CAACA,mBAAmB,GAAGsB,KAAAA;AAC3B,YAAA,IAAI,CAACJ,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIQ,oBAA+B,GAAA;QACjC,OAAO,IAAI,CAACzB,qBAAqB;AACnC;IACA,IAAIyB,oBAAAA,CAAqBV,GAAW,EAAE;QACpC,MAAMW,MAAAA,GAASJ,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAACT,KAAK,CAAI,CAAA,EAAA,CAAA,CAAA;AAC1C,QAAA,IAAIW,MAAW,KAAA,IAAI,CAAC1B,qBAAqB,EAAE;YACzC,IAAI,CAACA,qBAAqB,GAAG0B,MAAAA;AAC7B,YAAA,IAAI,CAACT,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIU,YAAmC,GAAA;QACrC,OAAO,IAAI,CAACnC,aAAa;AAC3B;IACA,IAAImC,YAAAA,CAAaZ,GAAuB,EAAE;AACxC,QAAA,IAAI,CAACvB,aAAa,CAACwB,GAAG,CAACD,GAAAA,CAAAA;AACvB,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIW,wBAA+C,GAAA;QACjD,OAAO,IAAI,CAACnC,yBAAyB;AACvC;IACA,IAAImC,wBAAAA,CAAyBb,GAAuB,EAAE;AACpD,QAAA,IAAI,CAACtB,yBAAyB,CAACuB,GAAG,CAACD,GAAAA,CAAAA;AACnC,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIY,+BAA0C,GAAA;QAC5C,OAAO,IAAI,CAAC5B,gCAAgC;AAC9C;IACA,IAAI4B,+BAAAA,CAAgCd,GAAW,EAAE;AAC/C,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACd,gCAAgC,EAAE;YACjD,IAAI,CAACA,gCAAgC,GAAGc,GAAAA;AACxC,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIa,uBAAkC,GAAA;QACpC,OAAO,IAAI,CAAC5B,wBAAwB;AACtC;IACA,IAAI4B,uBAAAA,CAAwBf,GAAW,EAAE;AACvC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACb,wBAAwB,EAAE;YACzC,IAAI,CAACA,wBAAwB,GAAGa,GAAAA;AAChC,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIc,oBAA+B,GAAA;QACjC,OAAO,IAAI,CAAC5B,qBAAqB;AACnC;IACA,IAAI4B,oBAAAA,CAAqBhB,GAAW,EAAE;QACpC,MAAMW,MAAAA,GAASJ,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAACT,KAAK,CAAI,CAAA,EAAA,CAAA,CAAA;AAC1C,QAAA,IAAIW,MAAW,KAAA,IAAI,CAACvB,qBAAqB,EAAE;YACzC,IAAI,CAACA,qBAAqB,GAAGuB,MAAAA;AAC7B,YAAA,IAAI,CAACT,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIL,gBAA0C,GAAA;AAC5C,QAAA,OAAO,IAAI,CAACoB,WAAW,CAAwB7C,cAAcC,0BAA0B,CAAA;AACzF;IACA,IAAIwB,gBAAAA,CAAiBG,GAA0B,EAAE;AAC/C,QAAA,IAAIA,QAAQ,MAAU,IAAA,IAAI,CAACkB,SAAS,GAAG,CAAG,EAAA;YACxC,IAAI,CAACA,SAAS,GAAG,CAAA;AACnB;AACA,QAAA,IAAI,CAACC,UAAU,CAAC/C,aAAAA,CAAcC,0BAA0B,EAAE2B,GAAAA,CAAAA;AAC1D,QAAA,IAAI,CAACkB,SAAS,GAAGlB,GAAAA,KAAQ,SAAS,CAAI,GAAA,CAAA;AACxC;AACA,IAAA,IAAIoB,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAAC/B,mBAAmB;AACjC;IACA,IAAI+B,kBAAAA,CAAmBpB,GAAW,EAAE;AAClC,QAAA,MAAMqB,KAAQd,GAAAA,IAAAA,CAAKE,GAAG,CAACT,GAAK,EAAA,CAAA,CAAA;AAC5B,QAAA,IAAIqB,KAAU,KAAA,IAAI,CAAChC,mBAAmB,EAAE;YACtC,IAAI,CAACA,mBAAmB,GAAGgC,KAAAA;AAC3B,YAAA,IAAI,CAACnB,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIoB,kBAAyC,GAAA;QAC3C,OAAO,IAAI,CAAC3C,mBAAmB;AACjC;IACA,IAAI2C,kBAAAA,CAAmBtB,GAAuB,EAAE;AAC9C,QAAA,IAAI,CAACrB,mBAAmB,CAACsB,GAAG,CAACD,GAAAA,CAAAA;AAC7B,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIqB,wBAAmC,GAAA;QACrC,OAAO,IAAI,CAACjC,yBAAyB;AACvC;IACA,IAAIiC,wBAAAA,CAAyBvB,GAAW,EAAE;QACxC,MAAMW,MAAAA,GAASJ,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAACT,KAAK,CAAI,CAAA,EAAA,CAAA,CAAA;AAC1C,QAAA,IAAIW,MAAW,KAAA,IAAI,CAACrB,yBAAyB,EAAE;YAC7C,IAAI,CAACA,yBAAyB,GAAGqB,MAAAA;AACjC,YAAA,IAAI,CAACT,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIJ,yBAAqC,GAAA;AACvC,QAAA,OAAO,CAAC,CAAC,IAAI,CAACmB,WAAW,CAAU7C,cAAcG,+BAA+B,CAAA;AAClF;IACA,IAAIuB,yBAAAA,CAA0BE,GAAY,EAAE;AAC1C,QAAA,IAAI,CAACmB,UAAU,CAAC/C,cAAcG,+BAA+B,EAAE,CAAC,CAACyB,GAAAA,CAAAA;AACnE;AACA,IAAA,IAAIwB,qBAAiC,GAAA;QACnC,OAAO,IAAI,CAAC/B,sBAAsB;AACpC;IACA,IAAI+B,qBAAAA,CAAsBxB,GAAY,EAAE;AACtC,QAAA,IAAI,CAAC,CAACA,GAAAA,KAAQ,IAAI,CAACP,sBAAsB,EAAE;AACzC,YAAA,IAAI,CAACA,sBAAsB,GAAG,CAAC,CAACO,GAAAA;AAChC,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIuB,uBAAkC,GAAA;QACpC,OAAO,IAAI,CAAC/B,wBAAwB;AACtC;IACA,IAAI+B,uBAAAA,CAAwBzB,GAAW,EAAE;QACvC,MAAM0B,MAAAA,GAASnB,IAAKoB,CAAAA,KAAK,CAAC3B,GAAAA,CAAAA;AAC1B,QAAA,IAAI0B,MAAW,KAAA,IAAI,CAAChC,wBAAwB,EAAE;YAC5C,IAAI,CAACA,wBAAwB,GAAGgC,MAAAA;AAChC,YAAA,IAAI,CAACxB,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI0B,6BAAwC,GAAA;AAC1C,QAAA,OAAO,IAAI,CAAChD,kBAAkB,CAACiD,CAAC;AAClC;IACA,IAAID,6BAAAA,CAA8B5B,GAAW,EAAE;AAC7C,QAAA,IAAIA,QAAQ,IAAI,CAACpB,kBAAkB,CAACiD,CAAC,EAAE;AACrC,YAAA,IAAI,CAACjD,kBAAkB,CAACiD,CAAC,GAAG7B,GAAAA;AAC5B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI4B,6BAAwC,GAAA;AAC1C,QAAA,OAAO,IAAI,CAAClD,kBAAkB,CAACmD,CAAC;AAClC;IACA,IAAID,6BAAAA,CAA8B9B,GAAW,EAAE;AAC7C,QAAA,IAAIA,QAAQ,IAAI,CAACpB,kBAAkB,CAACmD,CAAC,EAAE;AACrC,YAAA,IAAI,CAACnD,kBAAkB,CAACmD,CAAC,GAAG/B,GAAAA;AAC5B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI8B,8BAAyC,GAAA;QAC3C,OAAO,IAAI,CAACzC,+BAA+B;AAC7C;IACA,IAAIyC,8BAAAA,CAA+BhC,GAAW,EAAE;AAC9C,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACT,+BAA+B,EAAE;YAChD,IAAI,CAACA,+BAA+B,GAAGS,GAAAA;AACvC,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI+B,aAAoC,GAAA;QACtC,OAAO,IAAI,CAACpD,cAAc;AAC5B;IACA,IAAIoD,aAAAA,CAAcjC,GAAuB,EAAE;AACzC,QAAA,IAAI,CAACnB,cAAc,CAACoB,GAAG,CAACD,GAAAA,CAAAA;AACxB,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIgC,gBAA2B,GAAA;QAC7B,OAAO,IAAI,CAAC1C,iBAAiB;AAC/B;IACA,IAAI0C,gBAAAA,CAAiBlC,GAAW,EAAE;AAChC,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACR,iBAAiB,EAAE;YAClC,IAAI,CAACA,iBAAiB,GAAGQ,GAAAA;AACzB,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;IACAiC,KAAuB,GAAA;AACrB,QAAA,MAAMC,QAAQ,IAAIhE,aAAAA,EAAAA;QAClBgE,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,CAACrC,gBAAgB,GAAGqC,KAAAA,CAAMrC,gBAAgB;AAC9C,QAAA,IAAI,CAACI,kBAAkB,GAAGiC,KAAAA,CAAMjC,kBAAkB;AAClD,QAAA,IAAI,CAACC,wBAAwB,GAAGgC,KAAAA,CAAMhC,wBAAwB;AAC9D,QAAA,IAAI,CAACC,kBAAkB,GAAG+B,KAAAA,CAAM/B,kBAAkB;AAClD,QAAA,IAAI,CAACK,oBAAoB,GAAG0B,KAAAA,CAAM1B,oBAAoB;AACtD,QAAA,IAAI,CAACE,YAAY,GAAGwB,KAAAA,CAAMxB,YAAY;AACtC,QAAA,IAAI,CAACC,wBAAwB,GAAGuB,KAAAA,CAAMvB,wBAAwB;AAC9D,QAAA,IAAI,CAACC,+BAA+B,GAAGsB,KAAAA,CAAMtB,+BAA+B;AAC5E,QAAA,IAAI,CAACC,uBAAuB,GAAGqB,KAAAA,CAAMrB,uBAAuB;AAC5D,QAAA,IAAI,CAACC,oBAAoB,GAAGoB,KAAAA,CAAMpB,oBAAoB;AACtD,QAAA,IAAI,CAACnB,gBAAgB,GAAGuC,KAAAA,CAAMvC,gBAAgB;AAC9C,QAAA,IAAI,CAACuB,kBAAkB,GAAGgB,KAAAA,CAAMhB,kBAAkB;AAClD,QAAA,IAAI,CAACE,kBAAkB,GAAGc,KAAAA,CAAMd,kBAAkB;AAClD,QAAA,IAAI,CAACC,wBAAwB,GAAGa,KAAAA,CAAMb,wBAAwB;AAC9D,QAAA,IAAI,CAACzB,yBAAyB,GAAGsC,KAAAA,CAAMtC,yBAAyB;AAChE,QAAA,IAAI,CAAC0B,qBAAqB,GAAGY,KAAAA,CAAMZ,qBAAqB;AACxD,QAAA,IAAI,CAACC,uBAAuB,GAAGW,KAAAA,CAAMX,uBAAuB;AAC5D,QAAA,IAAI,CAACG,6BAA6B,GAAGQ,KAAAA,CAAMR,6BAA6B;AACxE,QAAA,IAAI,CAACE,6BAA6B,GAAGM,KAAAA,CAAMN,6BAA6B;AACxE,QAAA,IAAI,CAACE,8BAA8B,GAAGI,KAAAA,CAAMJ,8BAA8B;AAC1E,QAAA,IAAI,CAACC,aAAa,GAAGG,KAAAA,CAAMH,aAAa;AACxC,QAAA,IAAI,CAACC,gBAAgB,GAAGE,KAAAA,CAAMF,gBAAgB;AAChD;IACAI,YAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAACC,iBAAiB,CAAC,KAAKC,iBAAoBC,GAAAA,YAAAA;AACzD;AACAC,IAAAA,UAAAA,CAAWC,IAAY,EAAU;AAC/B,QAAA,OAAO,KAAK,CAACD,UAAWC,CAAAA,IAAAA,GAAO,IAAI,CAAI,GAAA,CAAA,CAAA;AACzC;IACAJ,iBAAkBI,CAAAA,IAAY,EAAEC,GAAiB,EAAW;AAC1D,QAAA,OAAOD,IAAS,KAAA,CAAA,IAAK,KAAK,CAACJ,kBAAkBI,IAAMC,EAAAA,GAAAA,CAAAA;AACrD;AACUC,IAAAA,kBAAAA,CAAmBF,IAAY,EAAEG,QAAwB,EAAEF,GAAgB,EAAQ;QAC3F,KAAK,CAACC,kBAAmBF,CAAAA,IAAAA,EAAMG,QAAUF,EAAAA,GAAAA,CAAAA;AACzC,QAAA,IAAID,OAAO,CAAG,EAAA;YACZG,QAASC,CAAAA,kBAAkB,EAAGC,CAAAA,QAAQ,GAAG,OAAA;AACzCF,YAAAA,QAAAA,CAASG,oBAAoB,EAAA;YAC7BH,QAASI,CAAAA,aAAa,GAAGC,UAAU,CAAC,MAAMC,WAAW,CAAC,IAAMC,CAAAA,CAAAA,cAAc,CAACC,oBAAAA,CAAAA;SACtE,MAAA,IAAI,IAAI,CAAC7D,sBAAsB,IAAI,IAAI,CAAC8C,iBAAiB,CAACI,IAAAA,EAAMC,GAAM,CAAA,EAAA;AAC3EE,YAAAA,QAAAA,CAASI,aAAa,EAAGC,CAAAA,UAAU,CAAC,IAAA,CAAA,CAAMC,WAAW,CAAC,IAAA,CAAA;AACxD;AACF;AACAG,IAAAA,IAAAA,CAAKC,SAAoB,EAAEZ,GAAgB,EAAEa,YAAAA,GAAe,CAAC,EAAQ;AACnE,QAAA,MAAMC,WAAW,IAAI;AACrB,QAAA,IAAI,IAAI,CAACxC,SAAS,GAAG,KAAK0B,GAAIe,CAAAA,UAAU,CAAEC,IAAI,KAAKC,sBAAAA,IAA0B,CAACjB,GAAAA,CAAIkB,aAAa,EAAE;;AAE/FJ,YAAAA,QAAAA,CAASK,IAAI,CAACnB,GAAIoB,CAAAA,MAAM,EAAE,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACC,aAAa,CAAC,CAAA,EAAGT,WAAWZ,GAAKa,EAAAA,YAAAA,CAAAA;AACtCC,YAAAA,QAAAA,CAASK,IAAI,CAACnB,GAAIoB,CAAAA,MAAM,EAAE,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACC,aAAa,CAAC,CAAA,EAAGT,WAAWZ,GAAKa,EAAAA,YAAAA,CAAAA;SACjC,MAAA;YACJzF,YAAakG,CAAAA,SAAS,CAA2CX,IAAI,CAACY,IAAI,CACzE,IAAI,EACJX,SAAAA,EACAZ,GACAa,EAAAA,YAAAA,CAAAA;AAEJ;AACF;AACAQ,IAAAA,aAAAA,CAActB,IAAY,EAAEa,SAAoB,EAAEZ,GAAgB,EAAEa,YAAoB,EAAQ;AAC9F,QAAA,IAAId,IAAO,GAAA,CAAA,KAAMC,GAAAA,CAAIe,UAAU,CAAEC,IAAI,KAAKC,sBAA0BjB,IAAAA,GAAAA,CAAIkB,aAAY,CAAI,EAAA;AACtF,YAAA;AACF;AACA,QAAA,KAAK,CAACG,aAAAA,CAActB,IAAMa,EAAAA,SAAAA,EAAWZ,GAAKa,EAAAA,YAAAA,CAAAA;AAC5C;AACAW,IAAAA,kBAAAA,CAAmBC,SAAoB,EAAEzB,GAAgB,EAAED,IAAY,EAAQ;QAC7E,KAAK,CAACyB,kBAAmBC,CAAAA,SAAAA,EAAWzB,GAAKD,EAAAA,IAAAA,CAAAA;AACzC,QAAA,IAAI,IAAI,CAAC2B,sBAAsB,CAAC1B,GAAM,CAAA,EAAA;AACpCyB,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAC/F,iBAAiB,CAAA;AAC7D6F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAACzF,mBAAmB,CAAA;AACjEuF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAACxF,yBAAyB,CAAA;AAC7EsF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAACvF,mBAAmB,CAAA;AACjEqF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACtF,qBAAqB,CAAA;AACrEoF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,cAAgB,EAAA,IAAI,CAAC9F,aAAa,CAAA;AACrD4F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAAC7F,yBAAyB,CAAA;AAC7E2F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,iCAAmC,EAAA,IAAI,CAACrF,gCAAgC,CAAA;AAC3FmF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,yBAA2B,EAAA,IAAI,CAACpF,wBAAwB,CAAA;AAC3EkF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACnF,qBAAqB,CAAA;AACrEiF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,mBAAqB,EAAA,IAAI,CAAC3F,kBAAkB,CAAA;AAC/DyF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,gCAAkC,EAAA,IAAI,CAAChF,+BAA+B,CAAA;AACzF8E,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAAC1F,cAAc,CAAA;AACvDwF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAC/E,iBAAiB,CAAA;SACxD,MAAA,IAAImD,IAAO,GAAA,CAAA,IAAK,IAAI,CAAC6B,2BAA2B,IAAI,IAAI,CAACC,cAAc,EAAI,EAAA;AAChFJ,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,mBAAqB,EAAA,IAAI,CAAC3F,kBAAkB,CAAA;AAC/DyF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,gCAAkC,EAAA,IAAI,CAAChF,+BAA+B,CAAA;AAC3F;AACA,QAAA,IAAIoD,OAAO,CAAG,EAAA;AACZ0B,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAAClF,mBAAmB,CAAA;YACjE,IAAI,IAAI,CAACmF,2BAA2B,EAAE;gBACpCH,SAAUK,CAAAA,UAAU,CAClB,iBACA,EAAA,IAAI,CAACF,2BAA2B,EAChC,IAAI,CAACG,kCAAkC,CAAA;AAEzC,gBAAA,IAAI,IAAI,CAACC,sBAAsB,IAAI,IAAI,CAACH,cAAc,EAAI,EAAA;oBACxDJ,SAAUK,CAAAA,UAAU,CAClB,oBACA,EAAA,IAAI,CAACE,sBAAsB,EAC3B,IAAI,CAACC,6BAA6B,CAAA;AAEtC;gBACA,IAAI,IAAI,CAACC,kCAAkC,EAAE;AAC3CT,oBAAAA,SAAAA,CAAUE,QAAQ,CAAC,2BAA6B,EAAA,IAAI,CAACO,kCAAkC,CAAA;AACzF;AACF;AACF;AACA,QAAA,IAAInC,OAAO,CAAKC,IAAAA,GAAAA,CAAIe,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;AAC/DQ,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAAC5F,mBAAmB,CAAA;AACjE0F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAACjF,yBAAyB,CAAA;AAC/E;AACF;IACQmF,cAA0B,GAAA;AAChC,QAAA,OACE,IAAI,CAAC7F,kBAAkB,CAACiD,CAAC,KAAK,CAC9B,IAAA,IAAI,CAACjD,kBAAkB,CAACmD,CAAC,KAAK,KAC9B,IAAI,CAACxC,+BAA+B,KAAK,CAAA;AAE7C;IACQwF,gBAAiBC,CAAAA,KAA4B,EAAEC,EAAe,EAAe;AACnF,QAAA,IAAI,CAAC,IAAI,CAACR,cAAc,EAAI,EAAA;YAC1B,OAAOQ,EAAAA;AACT;QACA,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,MAAMC,QAAW,GAAA,oBAAA;AACjB,QAAA,MAAMC,OAAO,IAAI;QACjB,IAAI,CAACL,KAAMM,CAAAA,iBAAiB,EAAE;AAC5BN,YAAAA,KAAAA,CAAMM,iBAAiB,GAAGJ,EAAAA,CAAGK,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AAC9C;QACA,IAAI,CAACR,KAAMhD,CAAAA,8BAA8B,EAAE;AACzCgD,YAAAA,KAAAA,CAAMhD,8BAA8B,GAAGkD,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC5D;QACA,IAAIH,IAAAA,CAAKT,sBAAsB,IAAIM,EAAGQ,CAAAA,UAAU,KAAK,UAAc,IAAA,CAACV,KAAMW,CAAAA,kBAAkB,EAAE;AAC5FX,YAAAA,KAAAA,CAAMW,kBAAkB,GAAGT,EAAAA,CAAGU,KAAK,EAAA,CAAGJ,OAAO,CAAC,CAAA,CAAA;AAChD;QACAN,EAAGW,CAAAA,IAAI,CAACT,QAAU,EAAA;AAACF,YAAAA,EAAAA,CAAGK,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AACjC,YAAA,IAAI,CAACO,EAAE,CAACC,IAAI,GAAGV,IAAAA,CAAKT,sBAAsB,GACtCM,EAAAA,CAAGQ,UAAU,KAAK,UAAA,GAChBR,GAAGc,aAAa,CAACX,KAAKY,gCAAgC,CAAC,IAAI,CAAG,EAAA,IAAI,CAAChB,EAAE,EAAEiB,CAAC,GACxEhB,GAAGiB,kBAAkB,CAAC,IAAI,CAACR,kBAAkB,EAAE,IAAI,CAACV,EAAE,EAAE,CAAA,CAAA,CAAGiB,CAAC,GAC9DhB,EAAAA,CAAGO,KAAK,CAAC,CAAA,CAAA;YACb,IAAI,CAACK,EAAE,CAACM,IAAI,GAAGC,YAAaC,CAAAA,cAAc,CAAC,IAAI,CAAA;AAC/C,YAAA,IAAI,CAACR,EAAE,CAACS,QAAQ,GAAGrB,EAAAA,CAAGsB,GAAG,CAAC,IAAI,CAACJ,IAAI,EAAE,IAAI,CAACpE,8BAA8B,EAAE,IAAI,CAAC+D,IAAI,CAAA;YACnF,IAAI,CAACD,EAAE,CAACW,CAAC,GAAGvB,GAAGwB,GAAG,CAAC,IAAI,CAACH,QAAQ,CAAA;YAChC,IAAI,CAACT,EAAE,CAACa,CAAC,GAAGzB,GAAG0B,GAAG,CAAC,IAAI,CAACL,QAAQ,CAAA;AAChC,YAAA,IAAI,CAACT,EAAE,CAACe,UAAU,GAAG3B,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAAC7B,EAAE,EAAEC,EAAAA,CAAGK,IAAI,CAAC,GAAA,CAAA,CAAA;AAC7C,YAAA,IAAI,CAACO,EAAE,CAACiB,SAAS,GAAG7B,EAAG8B,CAAAA,GAAG,CACxB9B,EAAAA,CAAGK,IAAI,CACLL,EAAAA,CAAG8B,GAAG,CAAC9B,GAAGsB,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACI,UAAU,CAAChF,CAAC,CAAA,EAAGqD,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACG,CAAC,EAAE,IAAI,CAACE,UAAU,CAAC9E,CAAC,CAC1EmD,CAAAA,EAAAA,EAAAA,CAAG8B,GAAG,CAAC9B,GAAGsB,GAAG,CAACtB,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACN,CAAC,CAAA,EAAG,IAAI,CAACE,UAAU,CAAChF,CAAC,GAAGqD,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACI,UAAU,CAAC9E,CAAC,CAEpFmD,CAAAA,CAAAA,EAAAA,EAAAA,CAAGK,IAAI,CAAC,GAAA,CAAA,CAAA;YAEV,IAAI,CAAC2B,OAAO,CAAChC,EAAAA,CAAG8B,GAAG,CAAC,IAAI,CAACD,SAAS,EAAE7B,EAAAA,CAAGsB,GAAG,CAAC,IAAI,CAAClB,iBAAiB,EAAE,IAAI,CAACc,IAAI,EAAE,IAAI,CAACL,IAAI,CAAA,CAAA,CAAA;AACzF,SAAA,CAAA;AACA,QAAA,OAAOb,EAAGiC,CAAAA,cAAc,EAAE,CAAC/B,SAAS,CAACH,EAAAA,CAAAA;AACvC;AACQmC,IAAAA,cAAAA,CAAepC,KAA4B,EAAe;AAChE,QAAA,OAAO,IAAI,CAACqC,aAAa,GACrB,IAAI,CAACtC,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAACsC,iBAAiB,CAACtC,KAAAA,CAAAA,CAAAA,GACpDA,MAAMG,QAAQ,CAACI,IAAI,CAAC,CAAA,CAAA;AAC1B;AACQgC,IAAAA,gBAAAA,CAAiBvC,KAA4B,EAAe;AAClE,QAAA,OAAO,IAAI,CAACwC,aAAa,GACrB,IAAI,CAACzC,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAACyC,iBAAiB,CAACzC,KAAAA,CAAAA,CAAAA,GACpDA,MAAMG,QAAQ,CAACI,IAAI,CAAC,CAAA,CAAA;AAC1B;IACQmC,YAAa1C,CAAAA,KAA4B,EAAEC,EAAe,EAAe;AAC/E,QAAA,OAAO,IAAI,CAAC0C,oBAAoB,CAAC3C,KAAOC,EAAAA,EAAAA,CAAAA;AAC1C;AACQ2C,IAAAA,gBAAAA,CAAiB5C,KAA4B,EAAe;QAClE,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,OAAO,IAAI,CAAC0C,oBAAoB,GAC5B3C,EAAGsB,CAAAA,GAAG,CACJxB,KAAAA,CAAMjF,gBAAgB,EACtB,IAAI,CAAC+H,0BAA0B,CAC7B9C,KACA,EAAA,IAAI,CAACD,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAAC+C,wBAAwB,CAAC/C,KAC3DgD,CAAAA,CAAAA,CAAAA,CAAAA,GAAG,CAEPhD,GAAAA,KAAAA,CAAMjF,gBAAgB;AAC5B;IACQkI,YAAajD,CAAAA,KAA4B,EAAEC,EAAe,EAAe;QAC/E,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,IAAI,CAAC,IAAI,CAACqC,aAAa,EAAE;AACvB,YAAA,OAAOtC,GAAGgD,SAAS,CAAClD,KAAMmD,CAAAA,OAAO,CAACC,KAAK,CAAA;AACzC;AACApD,QAAAA,KAAAA,CAAMc,EAAE,CAACuC,GAAG,GAAG,IAAI,CAACC,YAAY,CAACtD,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,EAAEvD,KAAMmD,CAAAA,OAAO,CAACC,KAAK,CAAA;QACnFpD,KAAMc,CAAAA,EAAE,CAAC0C,SAAS,GAAGtD,GAAG4B,GAAG,CAAC5B,GAAGsB,GAAG,CAAC,IAAI,CAACiC,mBAAmB,CAACzD,KAAOC,EAAAA,EAAAA,CAAAA,CAAI+C,GAAG,EAAE,CAAA,CAAA,EAAI9C,EAAGwD,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA;QACxF1D,KAAMwD,CAAAA,SAAS,GAAGtD,EAAGsB,CAAAA,GAAG,CAACxB,KAAMwD,CAAAA,SAAS,EAAEtD,EAAGwD,CAAAA,IAAI,CAACxD,EAAGwD,CAAAA,IAAI,CAAC,IAAI,CAACC,qBAAqB,CAAC3D,KAAAA,CAAAA,CAAAA,CAAQ4D,EAAE,EAAE,CAAA,CAAA,CAAA;QACjG,OAAO1D,EAAAA,CAAGgD,SAAS,CAAChD,EAAGsB,CAAAA,GAAG,CAACxB,KAAMqD,CAAAA,GAAG,EAAErD,KAAAA,CAAMwD,SAAS,CAAA,CAAA;AACvD;IACQK,4BACN7D,CAAAA,KAA4B,EAC5BuD,QAAqB,EACrBO,MAAmB,EACnBC,SAAsB,EACtBC,UAAuB,EACvBC,YAAyB,EACZ;QACb,MAAM/D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,MAAME,OAAO,IAAI;AACjB,QAAA,MAAMD,QAAW,GAAA,uBAAA;QACjBF,EAAGW,CAAAA,IAAI,CACLT,QACA,EAAA;AACEF,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,UAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,QAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,WAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,YAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGO,KAAK,CAAC,cAAA;SACV,EACD,WAAA;AACE,YAAA,IAAI,CAACK,EAAE,CAACoD,WAAW,GAAGhE,EAAAA,CAAGwD,IAAI,CAAC,CAAA,CAAA;AAC9BrD,YAAAA,IAAAA,CAAK8D,YAAY,CAAC,IAAI,EAAE,SAAUvF,IAAI,EAAEwF,QAAQ,EAAEC,SAAS,EAAEC,cAAc,EAAEC,KAAK,EAAEC,MAAM,EAAA;AACxF,gBAAA,IAAI,CAAC1D,EAAE,CAAC2D,UAAU,GAAGpE,KAAKqE,yBAAyB,CACjD,IAAI,EACJ9F,MACA,IAAI,CAAC2E,QAAQ,EACba,UACAC,SACAE,EAAAA,KAAAA,CAAAA;AAEF,gBAAA,IAAI,CAACzD,EAAE,CAAC6D,QAAQ,GAAGtE,IAAKuE,CAAAA,uBAAuB,CAAC,IAAI,EAAEhG,IAAM,EAAA,IAAI,CAAC2E,QAAQ,EAAEa,QAAUC,EAAAA,SAAAA,CAAAA;AACrF,gBAAA,IAAI,CAACvD,EAAE,CAAC+D,UAAU,GAAG3E,GAAGsB,GAAG,CAAC8C,cAAetB,CAAAA,GAAG,EAAEsB,cAAeQ,CAAAA,CAAC,EAAE,IAAI,CAACL,UAAU,CAAA;AACjF,gBAAA,IAAI,CAAC3D,EAAE,CAACiE,GAAG,GAAG7E,EAAG8E,CAAAA,GAAG,CAAC,IAAI,CAAClB,MAAM,EAAE,IAAI,CAACa,QAAQ,CAAA;AAC/C,gBAAA,IAAI,CAAC7D,EAAE,CAACmE,cAAc,GAAG/E,EAAG8B,CAAAA,GAAG,CAAC,IAAI,CAAC+C,GAAG,EAAE,IAAI,CAACd,YAAY,CAAA;AAC3D,gBAAA,IAAI,CAACnD,EAAE,CAACoE,OAAO,GAAGhF,EAAAA,CAAGiF,KAAK,CACxBjF,EAAAA,CAAGkF,GAAG,CACJlF,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAACmD,cAAc,EAAE/E,GAAG8B,GAAG,CAAC,EAAI,EAAA,IAAI,CAAC3G,kBAAkB,CAAA,CAAA,EAC9D6E,GAAGzE,GAAG,CAACyE,GAAG4B,GAAG,CAAC,GAAG5B,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACnG,kBAAkB,EAAE,CAAA,CAAA,CAAA,EAAK,WAExD,CACA,EAAA,CAAA,CAAA;AAEF,gBAAA,IAAI,CAACyF,EAAE,CAACuE,YAAY,GAAGnF,EAAAA,CAAGoF,GAAG,CAAC,IAAI,CAACtB,UAAU,EAAE,IAAI,CAACD,SAAS,EAAE,IAAI,CAACmB,OAAO,CAAA;AAC3E,gBAAA,IAAIV,MAAQ,EAAA;oBACV,IAAI,CAAC1D,EAAE,CAACyE,WAAW,GAAGlF,IAAKmF,CAAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAACjC,QAAQ,EAAErD,EAAGiF,CAAAA,KAAK,CAAC,IAAI,CAACJ,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA;AACtF,oBAAA,IAAI,CAACM,YAAY,GAAGnF,EAAGoF,CAAAA,GAAG,CAAC,IAAI,CAACtB,UAAU,EAAE,IAAI,CAACqB,YAAY,EAAE,IAAI,CAACE,WAAW,CAAA;AACjF;AACA,gBAAA,IAAI,CAACrB,WAAW,GAAGhE,GAAG8B,GAAG,CAAC,IAAI,CAACkC,WAAW,EAAEhE,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAAC6D,YAAY,EAAE,IAAI,CAACR,UAAU,CAAA,CAAA;AACvF,aAAA,CAAA;AACA,YAAA,IAAI,CAAC3C,OAAO,CAAC,IAAI,CAACgC,WAAW,CAAA;AAC/B,SAAA,CAAA;QAEF,OAAOhE,EAAAA,CAAGiC,cAAc,EAAE,CAAC/B,SAAS,CAACmD,QAAAA,EAAUO,MAAQC,EAAAA,SAAAA,EAAWC,UAAYC,EAAAA,YAAAA,CAAAA;AAChF;AACQwB,IAAAA,gBAAAA,CACNzF,KAA4B,EAC5B8D,MAAmB,EACnBC,SAAsB,EACT;QACb,MAAM7D,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,IAAI,CAAC,IAAI,CAACuF,qBAAqB,EAAI,EAAA;YACjC,OAAOxF,EAAAA,CAAGwD,IAAI,CAAC,CAAA,CAAA;AACjB;QACA1D,KAAMc,CAAAA,EAAE,CAAC6E,KAAK,GAAG,IAAI,CAACC,qBAAqB,CAAC5F,KAAO8D,EAAAA,MAAAA,CAAAA;AACnD9D,QAAAA,KAAAA,CAAMc,EAAE,CAAC+E,SAAS,GAAG3F,GAAGsB,GAAG,CACzBtB,EAAG8B,CAAAA,GAAG,CACJ,IAAI,CAAC4D,qBAAqB,CAAC5F,KAAOE,EAAAA,EAAAA,CAAGwD,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAChD,CAAA,CAAA,EAAA,IAAI,CAACkC,qBAAqB,CAAC5F,KAAOE,EAAAA,EAAAA,CAAGwD,IAAI,CAAC,CAAG,EAAA,IAAI,CAEnD,CAAA,CAAA,CAAA,EAAA,GAAA,CAAA;AAEF1D,QAAAA,KAAAA,CAAMc,EAAE,CAACgF,EAAE,GAAG5F,GAAGoF,GAAG,CAACtF,KAAM2F,CAAAA,KAAK,EAAE3F,KAAAA,CAAM6F,SAAS,EAAE7F,MAAMtE,oBAAoB,CAAA;AAC7E,QAAA,OAAOwE,EAAGsB,CAAAA,GAAG,CAACxB,KAAAA,CAAM8F,EAAE,EAAE/B,SAAAA,CAAAA;AAC1B;IACQgC,iBACN/F,CAAAA,KAA4B,EAC5B8D,MAAmB,EACnBkC,OAAoB,EACpB/F,EAAe,EACfgG,QAAqB,EACR;QACb,MAAM/F,EAAAA,GAAKF,MAAMG,QAAQ;AACzBH,QAAAA,KAAAA,CAAMc,EAAE,CAACoF,GAAG,GAAGhG,EAAAA,CAAGwD,IAAI,CAAC,CAAA,CAAA;QACvB,IAAI,IAAI,CAACyC,aAAa,EAAE;AACtBnG,YAAAA,KAAAA,CAAMc,EAAE,CAACsF,UAAU,GAAGlG,EAAGgD,CAAAA,SAAS,CAAChD,EAAGwD,CAAAA,IAAI,CAACsC,OAAAA,CAAQK,CAAC,EAAE,CAAA,EAAGnG,GAAG+B,GAAG,CAAC+D,QAAQnJ,CAAC,CAAA,CAAA,CAAA;AACzEmD,YAAAA,KAAAA,CAAMc,EAAE,CAACwF,UAAU,GAAGpG,EAAGgD,CAAAA,SAAS,CAAChD,EAAAA,CAAGqG,KAAK,CAACP,OAAShG,EAAAA,KAAAA,CAAMoG,UAAU,CAAA,CAAA;AACrEpG,YAAAA,KAAAA,CAAMc,EAAE,CAAC0F,QAAQ,GAAGtG,EAAG8B,CAAAA,GAAG,CACxB9B,EAAAA,CAAGsB,GAAG,CAACtB,EAAGK,CAAAA,IAAI,CAACL,EAAG8E,CAAAA,GAAG,CAAChF,KAAAA,CAAMoG,UAAU,EAAEtC,MAAS5D,CAAAA,EAAAA,EAAAA,CAAG8E,GAAG,CAAChF,KAAMsG,CAAAA,UAAU,EAAExC,MAAAA,CAAAA,CAAAA,EAAU,KACpF5D,CAAAA,EAAAA,EAAAA,CAAGK,IAAI,CAAC,GAAA,CAAA,CAAA;YAEVP,KAAMkG,CAAAA,GAAG,GAAGhG,EAAG8B,CAAAA,GAAG,CAChBhC,KAAMkG,CAAAA,GAAG,EACThG,EAAAA,CAAGsB,GAAG,CAACxB,MAAMpE,YAAY,EAAE,IAAI,CAAC6K,mBAAmB,CAACzG,KAAOA,EAAAA,KAAAA,CAAMwG,QAAQ,CAAA,CAAExD,GAAG,CAAA,CAAA;AAElF;AACAhD,QAAAA,KAAAA,CAAMc,EAAE,CAAC4F,GAAG,GAAGxG,EAAGiF,CAAAA,KAAK,CAACjF,EAAAA,CAAG8E,GAAG,CAAClB,MAAQkC,EAAAA,OAAAA,CAAAA,EAAU,CAAG,EAAA,CAAA,CAAA;AACpDhG,QAAAA,KAAAA,CAAMc,EAAE,CAAC6F,aAAa,GAAGzG,EAAG0G,CAAAA,GAAG,CAC7B1G,EAAAA,CAAGiF,KAAK,CAACjF,EAAG8B,CAAAA,GAAG,CAAC9B,EAAG4B,CAAAA,GAAG,CAAC,CAAA,EAAG9B,KAAM0G,CAAAA,GAAG,CAAG1G,EAAAA,KAAAA,CAAMjE,uBAAuB,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,EACzEmE,EAAGzE,CAAAA,GAAG,CAACuE,KAAAA,CAAMlE,+BAA+B,EAAE,OAAA,CAAA,CAAA;AAEhDkE,QAAAA,KAAAA,CAAMkG,GAAG,GAAGhG,EAAG8B,CAAAA,GAAG,CAAChC,KAAMkG,CAAAA,GAAG,EAAEhG,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAMnE,wBAAwB,EAAEmE,MAAM2G,aAAa,CAAA,CAAA;QACxF,IAAI,IAAI,CAACE,kBAAkB,EAAE;YAC3B7G,KAAMkG,CAAAA,GAAG,GAAGhG,EAAGsB,CAAAA,GAAG,CAChBxB,KAAMkG,CAAAA,GAAG,EACT,IAAI,CAACY,wBAAwB,CAAC9G,KAAO,EAAA,IAAI,CAACD,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAAC+G,sBAAsB,CAAC/G,KAAAA,CAAAA,CAAAA,CAAAA,CAC3FgD,GAAG,CAAA;AAEV;AACA,QAAA,OAAO9C,EAAGsB,CAAAA,GAAG,CAACxB,KAAAA,CAAMkG,GAAG,EAAEhG,EAAAA,CAAGoF,GAAG,CAACpF,GAAGwD,IAAI,CAAC,CAAIuC,CAAAA,EAAAA,QAAAA,EAAUjG,MAAMhE,oBAAoB,CAAA,CAAA;AAClF;AACQgL,IAAAA,sBAAAA,CAAuBhH,KAA4B,EAAe;QACxE,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,MAAM8G,WAAW,IAAI,CAACC,eAAe,GACjChH,GAAGsB,GAAG,CACJxB,KAAM/C,CAAAA,aAAa,EACnB+C,KAAM9C,CAAAA,gBAAgB,EACtB,IAAI,CAACiK,qBAAqB,CAACnH,KAAAA,EAAO,IAAI,CAACD,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAACoH,mBAAmB,CAACpH,KAAAA,CAAAA,CAAAA,CAAAA,CAASgD,GAAG,CAAA,GAEtG9C,GAAGsB,GAAG,CAACxB,MAAM/C,aAAa,EAAE+C,MAAM9C,gBAAgB,CAAA;;;AAGtD,QAAA,OAAOgD,GAAGsB,GAAG,CAACyF,QAAU5F,EAAAA,YAAAA,CAAagG,qBAAqB,CAACrH,KAAAA,CAAAA,CAAAA;AAC7D;AACAsH,IAAAA,YAAAA,CAAatH,KAAsB,EAAQ;AACzC,QAAA,KAAK,CAACsH,YAAatH,CAAAA,KAAAA,CAAAA;QACnB,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;AACzBH,QAAAA,KAAAA,CAAMc,EAAE,CAACyG,IAAI,GAAGlG,YAAAA,CAAamG,qBAAqB,CAACxH,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMc,EAAE,CAAC2G,KAAK,GAAGpG,YAAAA,CAAaqG,mBAAmB,CAAC1H,KAAAA,CAAAA;QAClD,IAAI,IAAI,CAACrC,IAAI,GAAG,KAAK,IAAI,CAAC7C,yBAAyB,EAAE;YACnDkF,KAAMc,CAAAA,EAAE,CAAC6G,YAAY,GAAGtG,aAAauG,oBAAoB,CAAC5H,OAAO6H,GAAG;AACtE;QACA7H,KAAMc,CAAAA,EAAE,CAACgH,WAAW,GAAG5H,GAAGgD,SAAS,CACjChD,GAAGsB,GAAG,CAACH,aAAa0G,eAAe,CAAC/H,QAAQE,EAAG8H,CAAAA,IAAI,CAAChI,KAAMyH,CAAAA,KAAK,EAAE,CAAA,CAAA,CAAA,CAAII,GAAG,CAAA;AAE1E7H,QAAAA,KAAAA,CAAMc,EAAE,CAACmH,kBAAkB,GACzB,IAAI,CAACtK,IAAI,GAAG,CAAA,IAAK,IAAI,CAAC7C,yBAAyB,GAC3CoF,GAAGgD,SAAS,CAAChD,EAAGsB,CAAAA,GAAG,CAACH,YAAAA,CAAa0G,eAAe,CAAC/H,QAAQE,EAAG8H,CAAAA,IAAI,CAAChI,KAAAA,CAAM2H,YAAY,EAAE,CAAA,CAAA,CAAA,CAAIE,GAAG,CAAA,GAC5F7H,MAAM8H,WAAW;AACvB9H,QAAAA,KAAAA,CAAMc,EAAE,CAACyC,QAAQ,GAAGrD,EAAGsB,CAAAA,GAAG,CAACH,YAAa6G,CAAAA,cAAc,CAAClI,KAAAA,CAAAA,EAAQE,GAAG8H,IAAI,CAAChI,MAAMuH,IAAI,EAAE,IAAIM,GAAG;AAC1F,QAAA,IAAI,IAAI,CAAClK,IAAI,GAAG,CAAG,EAAA;AACjBqC,YAAAA,KAAAA,CAAM5D,kBAAkB,GAAG8D,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAMc,EAAE,CAACzE,KAAK,GAAG2D,MAAM5D,kBAAkB;YACzC,IAAI,IAAI,CAACoD,2BAA2B,EAAE;AACpCQ,gBAAAA,KAAAA,CAAMmI,eAAe,GAAGjI,EAAAA,CAAGU,KAAK,EAAA,CAAGJ,OAAO,CAAC,CAAA,CAAA;gBAC3C,MAAM4H,OAAAA,GAAU,IAAI,CAACC,iCAAiC;AACtD,gBAAA,MAAMC,QAAW,GAAA,CAAC,QAAQ,EAAEF,OAAS,CAAA,CAAA;AACrC,gBAAA,IAAI,CAACpI,KAAAA,CAAMuI,gBAAgB,CAACD,QAAW,CAAA,EAAA;oBACrCtI,KAAMmD,CAAAA,OAAO,CAACmF,QAAS,CAAA,GAAGpI,GAAGK,IAAI,EAAA,CAAGiI,MAAM,CAACF,QAAAA,CAAAA;AAC7C;gBACA,IAAI,IAAI,CAACxI,kCAAkC,EAAE;AAC3CE,oBAAAA,KAAAA,CAAMyI,yBAAyB,GAAGvI,EAAAA,CAAGwI,IAAI,EAAA,CAAGlI,OAAO,CAAC,CAAA,CAAA;oBACpDR,KAAMc,CAAAA,EAAE,CAAC6H,SAAS,GAAGzI,EAAAA,CAAGsB,GAAG,CACzBxB,KAAAA,CAAMyI,yBAAyB,EAC/BvI,EAAG8H,CAAAA,IAAI,CAAC,IAAI,CAACjI,gBAAgB,CAACC,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACmF,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAClEM,EAAE;iBACC,MAAA;AACL5I,oBAAAA,KAAAA,CAAMc,EAAE,CAAC6H,SAAS,GAAG,IAAI,CAAC5I,gBAAgB,CAACC,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACmF,QAAS,CAAA,CAAA;AAC3E;AACAtI,gBAAAA,KAAAA,CAAM3D,KAAK,GAAG6D,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAM3D,KAAK,EAAE6D,EAAAA,CAAGiB,kBAAkB,CAACnB,MAAMmI,eAAe,EAAEnI,MAAM2I,SAAS,EAAE,GAAGE,CAAC,CAAA;AACtG;AACA7I,YAAAA,KAAAA,CAAM3D,KAAK,GAAG6D,EAAAA,CAAGzE,GAAG,CAACuE,KAAAA,CAAM3D,KAAK,EAAE,CAAA,CAAA;AAClC2D,YAAAA,KAAAA,CAAMc,EAAE,CAACgI,eAAe,GAAG5I,EAAGO,CAAAA,KAAK,CAACP,EAAAA,CAAG6I,WAAW,CAAC/I,KAAM3D,CAAAA,KAAK,EAAE,CAAA,CAAA,CAAA;AAChE,YAAA,IAAI,IAAI,CAACxB,gBAAgB,KAAK,kBAAoB,EAAA;AAChDmF,gBAAAA,KAAAA,CAAMc,EAAE,CAACkI,WAAW,GAAG9I,EAAAA,CAAGsB,GAAG,CAC3BH,YAAAA,CAAa4H,uBAAuB,CAACjJ,QACrCE,EAAG8H,CAAAA,IAAI,CAAChI,KAAAA,CAAMuD,QAAQ,EAAE,CAAA,CAAA,CAAA;AAE1BvD,gBAAAA,KAAAA,CAAMuD,QAAQ,GAAGrD,EAAG8B,CAAAA,GAAG,CAAChC,KAAMuD,CAAAA,QAAQ,EAAErD,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAMiI,kBAAkB,EAAEjI,MAAM3D,KAAK,CAAA,CAAA;AACpF2D,gBAAAA,KAAAA,CAAMc,EAAE,CAACoI,OAAO,GAAGhJ,EAAAA,CAAGsB,GAAG,CAACH,YAAAA,CAAa4H,uBAAuB,CAACjJ,QAAQE,EAAG8H,CAAAA,IAAI,CAAChI,KAAAA,CAAMuD,QAAQ,EAAE,CAAA,CAAA,CAAA;AAC/FvD,gBAAAA,KAAAA,CAAMc,EAAE,CAACqI,OAAO,GAAGjJ,EAAGkF,CAAAA,GAAG,CAACpF,KAAMgJ,CAAAA,WAAW,CAACJ,EAAE,EAAE1I,GAAGzE,GAAG,CAACuE,MAAMgJ,WAAW,CAACI,CAAC,EAAE,OAAA,CAAA,CAAA;AAC5EpJ,gBAAAA,KAAAA,CAAMc,EAAE,CAACuI,WAAW,GAAGnJ,EAAGkF,CAAAA,GAAG,CAACpF,KAAMkJ,CAAAA,OAAO,CAACN,EAAE,EAAE1I,GAAGzE,GAAG,CAACuE,MAAMkJ,OAAO,CAACE,CAAC,EAAE,OAAA,CAAA,CAAA;gBACxEpJ,KAAMc,CAAAA,EAAE,CAACwI,eAAe,GAAGpJ,EAAAA,CAAG4B,GAAG,CAAC9B,KAAMqJ,CAAAA,WAAW,EAAErJ,KAAAA,CAAMmJ,OAAO,CAAA;AAClEnJ,gBAAAA,KAAAA,CAAMc,EAAE,CAACyI,iBAAiB,GAAGrJ,EAAAA,CAAGsJ,MAAM,CACpCtJ,EAAAA,CAAGsB,GAAG,CAACxB,MAAMsJ,eAAe,EAAEjI,YAAaoI,CAAAA,aAAa,CAACzJ,KAAQ,CAAA,EAAA,GAAA,CAAA,CAAA;gBAEnEA,KAAMc,CAAAA,EAAE,CAAC4I,iBAAiB,GAAGxJ,EAAAA,CAAGoF,GAAG,CACjC,CACApF,EAAAA,EAAAA,CAAGkF,GAAG,CAAClF,EAAGzE,CAAAA,GAAG,CAACuE,KAAMuJ,CAAAA,iBAAiB,EAAE,CAAA,CAAA,EAAIrJ,EAAGzE,CAAAA,GAAG,CAACuE,KAAAA,CAAMuJ,iBAAiB,EAAE,OAC3EvJ,CAAAA,CAAAA,EAAAA,KAAAA,CAAM8I,eAAe,CAAA;AAEvB9I,gBAAAA,KAAAA,CAAMc,EAAE,CAAC6I,WAAW,GAAGzJ,EAAAA,CAAG8B,GAAG,CAAChC,KAAAA,CAAMmJ,OAAO,EAAEjJ,GAAGsB,GAAG,CAACxB,MAAMsJ,eAAe,EAAEtJ,MAAM0J,iBAAiB,CAAA,CAAA;AAClG1J,gBAAAA,KAAAA,CAAMkJ,OAAO,GAAGhJ,EAAAA,CAAG8H,IAAI,CAAC9H,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAM2J,WAAW,EAAE3J,KAAAA,CAAMkJ,OAAO,CAACE,CAAC,GAAGpJ,KAAMkJ,CAAAA,OAAO,CAACU,EAAE,CAAA;AACpF5J,gBAAAA,KAAAA,CAAM6J,QAAQ,CAACtG,QAAQ,GAAGvD,MAAMuD,QAAQ;AACxCvD,gBAAAA,KAAAA,CAAM6J,QAAQ,CAACzG,KAAK,GAAGpD,MAAMiI,kBAAkB;AAC/C5G,gBAAAA,YAAAA,CAAayI,oBAAoB,CAAC9J,KAAOA,EAAAA,KAAAA,CAAMkJ,OAAO,CAAA;AACtD,gBAAA;AACF,aAAA,MAAO,IAAI,IAAI,CAACrO,gBAAgB,KAAK,mBAAqB,EAAA;gBACxDmF,KAAMc,CAAAA,EAAE,CAACiJ,aAAa,GAAG7J,GAAGsB,GAAG,CAC7BH,YAAa4H,CAAAA,uBAAuB,CAACjJ,KAAAA,CAAAA,EACrCE,GAAG8H,IAAI,CAAC9H,GAAG8B,GAAG,CAAChC,MAAMuD,QAAQ,EAAEvD,KAAMiI,CAAAA,kBAAkB,CAAG,EAAA,CAAA,CAAA,CAAA;AAE5DjI,gBAAAA,KAAAA,CAAMc,EAAE,CAACoI,OAAO,GAAGhJ,EAAAA,CAAGsB,GAAG,CAACH,YAAAA,CAAa4H,uBAAuB,CAACjJ,QAAQE,EAAG8H,CAAAA,IAAI,CAAChI,KAAAA,CAAMuD,QAAQ,EAAE,CAAA,CAAA,CAAA;AAC/FvD,gBAAAA,KAAAA,CAAMc,EAAE,CAACkJ,YAAY,GAAG9J,EAAAA,CAAG4B,GAAG,CAC5B5B,EAAAA,CAAGkF,GAAG,CAACpF,MAAM+J,aAAa,CAACnB,EAAE,EAAE1I,EAAAA,CAAGzE,GAAG,CAACuE,KAAAA,CAAM+J,aAAa,CAACX,CAAC,EAAE,OAAA,CAAA,CAAA,EAC7DlJ,GAAGkF,GAAG,CAACpF,MAAMkJ,OAAO,CAACN,EAAE,EAAE1I,GAAGzE,GAAG,CAACuE,MAAMkJ,OAAO,CAACE,CAAC,EAAE,OAAA,CAAA,CAAA,CAAA;AAEnDpJ,gBAAAA,KAAAA,CAAMgK,YAAY,GAAG9J,EAAGgD,CAAAA,SAAS,CAC/BhD,EAAAA,CAAGsB,GAAG,CACJxB,KAAMgK,CAAAA,YAAY,EAClB9J,EAAAA,CAAGK,IAAI,CAAC,CAAGL,EAAAA,EAAAA,CAAGkF,GAAG,CAAC/D,YAAaoI,CAAAA,aAAa,CAACzJ,KAAAA,CAAAA,CAAOnD,CAAC,EAAEwE,YAAaoI,CAAAA,aAAa,CAACzJ,KAAAA,CAAAA,CAAOjD,CAAC,CAAA,CAAA,CAAA,CAAA;AAG9FiD,gBAAAA,KAAAA,CAAMc,EAAE,CAACmJ,gBAAgB,GAAG/J,EAAAA,CAAGsJ,MAAM,CACnCtJ,EAAAA,CAAGsB,GAAG,CAACxB,MAAMgK,YAAY,EAAE3I,YAAaoI,CAAAA,aAAa,CAACzJ,KAAQ,CAAA,EAAA,GAAA,CAAA,CAAA;gBAEhEA,KAAM3D,CAAAA,KAAK,GAAG6D,EAAGsB,CAAAA,GAAG,CAClBtB,EAAGzE,CAAAA,GAAG,CAACuE,KAAAA,CAAM3D,KAAK,EAAE6D,GAAGkF,GAAG,CAAC,CAAGlF,EAAAA,EAAAA,CAAGzE,GAAG,CAACuE,MAAMiK,gBAAgB,EAAE,OAC7DjK,CAAAA,CAAAA,CAAAA,EAAAA,KAAAA,CAAM8I,eAAe,CAAA;;AAIvB9I,gBAAAA,KAAAA,CAAMkJ,OAAO,GAAGhJ,EAAG8H,CAAAA,IAAI,CACrB9H,EAAAA,CAAG8B,GAAG,CAAChC,KAAMkJ,CAAAA,OAAO,CAACN,EAAE,EAAE1I,EAAGsB,CAAAA,GAAG,CAACxB,KAAAA,CAAMgK,YAAY,EAAEhK,KAAM3D,CAAAA,KAAK,EAAE2D,KAAAA,CAAMkJ,OAAO,CAACE,CAAC,CAAA,CAAA,EAChFpJ,KAAMkJ,CAAAA,OAAO,CAACU,EAAE,CAAA;AAElB5J,gBAAAA,KAAAA,CAAM6J,QAAQ,CAACtG,QAAQ,GAAGvD,MAAMuD,QAAQ;AACxCvD,gBAAAA,KAAAA,CAAM6J,QAAQ,CAACzG,KAAK,GAAGpD,MAAMiI,kBAAkB;AAC/C5G,gBAAAA,YAAAA,CAAayI,oBAAoB,CAAC9J,KAAOA,EAAAA,KAAAA,CAAMkJ,OAAO,CAAA;AACtD,gBAAA;AACF;AACF;AACAlJ,QAAAA,KAAAA,CAAM6J,QAAQ,CAACtG,QAAQ,GAAGvD,MAAMuD,QAAQ;AACxCvD,QAAAA,KAAAA,CAAM6J,QAAQ,CAACzG,KAAK,GAAG,IAAI,CAACzF,IAAI,GAAG,CAAIqC,GAAAA,KAAAA,CAAMiI,kBAAkB,GAAGjI,MAAM8H,WAAW;AACnFzG,QAAAA,YAAAA,CAAayI,oBAAoB,CAC/B9J,KAAAA,EACAE,EAAGsB,CAAAA,GAAG,CAACH,YAAa4H,CAAAA,uBAAuB,CAACjJ,KAAAA,CAAAA,EAAQE,GAAG8H,IAAI,CAAChI,MAAM6J,QAAQ,CAACtG,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;AAEzF;AACA2G,IAAAA,cAAAA,CAAelK,KAAsB,EAAQ;AAC3C,QAAA,KAAK,CAACkK,cAAelK,CAAAA,KAAAA,CAAAA;QACrB,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;QACzB,IAAI,IAAI,CAACb,sBAAsB,EAAI,EAAA;AACjCU,YAAAA,KAAAA,CAAMjF,gBAAgB,GAAGmF,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AAC3CR,YAAAA,KAAAA,CAAM7E,kBAAkB,GAAG+E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAM5E,wBAAwB,GAAG8E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACpDR,YAAAA,KAAAA,CAAM3E,kBAAkB,GAAG6E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAMtE,oBAAoB,GAAGwE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAChDR,YAAAA,KAAAA,CAAMpE,YAAY,GAAGsE,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACvCR,YAAAA,KAAAA,CAAMnE,wBAAwB,GAAGqE,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACnDR,YAAAA,KAAAA,CAAMlE,+BAA+B,GAAGoE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC3DR,YAAAA,KAAAA,CAAMjE,uBAAuB,GAAGmE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACnDR,YAAAA,KAAAA,CAAMhE,oBAAoB,GAAGkE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAChDR,YAAAA,KAAAA,CAAMM,iBAAiB,GAAGJ,EAAAA,CAAGK,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AAC5CR,YAAAA,KAAAA,CAAMhD,8BAA8B,GAAGkD,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC1DR,YAAAA,KAAAA,CAAM/C,aAAa,GAAGiD,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACxCR,YAAAA,KAAAA,CAAM9C,gBAAgB,GAAGgD,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC5C,YAAA,IAAI,IAAI,CAAC7C,IAAI,GAAG,CAAG,EAAA;AACjBqC,gBAAAA,KAAAA,CAAM1D,kBAAkB,GAAG4D,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AAC7CR,gBAAAA,KAAAA,CAAMzD,wBAAwB,GAAG2D,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACpDR,gBAAAA,KAAAA,CAAMc,EAAE,CAACqJ,MAAM,GAAG,IAAI,CAACzH,YAAY,CAAC1C,KAAO,EAAA,IAAI,CAACoC,cAAc,CAACpC,KAAAA,CAAAA,CAAAA;AAC/DA,gBAAAA,KAAAA,CAAMc,EAAE,CAACsJ,eAAe,GAAGlK,EAAAA,CAAGoF,GAAG,CAACpF,EAAAA,CAAGwD,IAAI,CAAC,IAAI1D,KAAMmK,CAAAA,MAAM,CAACnH,GAAG,EAAEhD,MAAMzD,wBAAwB,CAAA;gBAC9F,IAAI,CAAC8N,mBAAmB,CACtBrK,KACAA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,EACtBrD,EAAAA,CAAG8H,IAAI,CAAC9H,GAAGsB,GAAG,CAACxB,KAAM1D,CAAAA,kBAAkB,EAAE0D,KAAAA,CAAMoK,eAAe,CAAGpK,EAAAA,KAAAA,CAAMmK,MAAM,CAACrF,CAAC,CAAA,CAAA;aAE5E,MAAA;AACL9E,gBAAAA,KAAAA,CAAMc,EAAE,CAACb,EAAE,GAAG,IAAI,CAACmC,cAAc,CAACpC,KAAAA,CAAAA;gBAClCA,KAAMc,CAAAA,EAAE,CAACqJ,MAAM,GAAG,IAAI,CAACzH,YAAY,CAAC1C,KAAOA,EAAAA,KAAAA,CAAMC,EAAE,CAAA;gBACnD,IAAI,IAAI,CAACqK,WAAW,CAAC3L,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;AAChEmB,oBAAAA,KAAAA,CAAMc,EAAE,CAACgD,MAAM,GAAG,IAAI,CAACb,YAAY,CAACjD,KAAO,EAAA,IAAI,CAACuC,gBAAgB,CAACvC,KAAAA,CAAAA,CAAAA;AACjEA,oBAAAA,KAAAA,CAAMc,EAAE,CAACmD,YAAY,GAAGjE,MAAM7E,kBAAkB;oBAChD,IAAI,IAAI,CAACoP,mBAAmB,EAAE;AAC5BvK,wBAAAA,KAAAA,CAAMiE,YAAY,GAAG/D,EAAG8B,CAAAA,GAAG,CACzBhC,KAAAA,CAAMiE,YAAY,EAClB/D,EAAGsB,CAAAA,GAAG,CACJ,IAAI,CAACgJ,yBAAyB,CAC5BxK,KAAAA,EACA,IAAI,CAACD,gBAAgB,CAACC,KAAO,EAAA,IAAI,CAACyK,uBAAuB,CAACzK,KAAAA,CAAAA,CAAAA,CAAAA,CAC1D0K,CAAC,EACH1K,MAAM5E,wBAAwB,CAAA,CAAA;AAGpC;AACA4E,oBAAAA,KAAAA,CAAMc,EAAE,CAACkD,UAAU,GAAG,IAAI,CAACpB,gBAAgB,CAAC5C,KAAAA,CAAAA;AAC5CA,oBAAAA,KAAAA,CAAMc,EAAE,CAACkF,OAAO,GAAG,IAAI,CAAC2E,mBAAmB,CAAC3K,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,CAAA;oBACzEvD,KAAMc,CAAAA,EAAE,CAAC8J,cAAc,GAAG,IAAI,CAAC/G,4BAA4B,CACzD7D,KAAAA,EACAA,KAAMmD,CAAAA,OAAO,CAACI,QAAQ,EACtBvD,KAAM8D,CAAAA,MAAM,EACZ9D,KAAAA,CAAMmK,MAAM,CAACnH,GAAG,EAChBhD,KAAMgE,CAAAA,UAAU,EAChBhE,KAAAA,CAAMiE,YAAY,CAAA;AAEpBjE,oBAAAA,KAAAA,CAAMc,EAAE,CAAC+J,UAAU,GAAG,IAAI,CAACpF,gBAAgB,CAACzF,KAAAA,EAAOA,MAAM8D,MAAM,EAAE9D,KAAMmK,CAAAA,MAAM,CAACnH,GAAG,CAAA;oBACjFhD,KAAMc,CAAAA,EAAE,CAACmF,QAAQ,GAAG/F,EAAAA,CAAGzE,GAAG,CAACuE,KAAM4K,CAAAA,cAAc,EAAE5K,KAAAA,CAAM6K,UAAU,CAAA;AACjE7K,oBAAAA,KAAAA,CAAMc,EAAE,CAACoF,GAAG,GAAG,IAAI,CAACH,iBAAiB,CAAC/F,KAAAA,EAAOA,MAAM8D,MAAM,EAAE9D,MAAMgG,OAAO,EAAEhG,MAAMC,EAAE,EAAED,MAAMiG,QAAQ,CAAA;AAClGjG,oBAAAA,KAAAA,CAAMc,EAAE,CAACmG,QAAQ,GAAG,IAAI,CAACD,sBAAsB,CAAChH,KAAAA,CAAAA;oBAChDA,KAAMc,CAAAA,EAAE,CAACgK,QAAQ,GAAG5K,EAAAA,CAAG8H,IAAI,CACzB9H,EAAAA,CAAG8B,GAAG,CAAChC,KAAM4K,CAAAA,cAAc,EAAE5K,KAAM6K,CAAAA,UAAU,EAAE7K,KAAAA,CAAMkG,GAAG,EAAElG,KAAMiH,CAAAA,QAAQ,CACxEjH,EAAAA,KAAAA,CAAMmK,MAAM,CAACrF,CAAC,CAAA;AAEhB,oBAAA,IAAI,CAACuF,mBAAmB,CACtBrK,KAAAA,EACAA,MAAMmD,OAAO,CAACI,QAAQ,EACtBvD,MAAM8K,QAAQ,EACd5K,EAAG8H,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,EACjB9H,GAAG8H,IAAI,CAAC9H,EAAG8B,CAAAA,GAAG,CAAC9B,EAAGsB,CAAAA,GAAG,CAACxB,KAAAA,CAAM8D,MAAM,EAAE,GAAA,CAAA,EAAM5D,EAAGwD,CAAAA,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;iBAEtD,MAAA;oBACL,IAAI,CAAC2G,mBAAmB,CAACrK,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,EAAEvD,KAAAA,CAAMmK,MAAM,CAAA;AACtE;AACF;SACK,MAAA;YACL,IAAI,CAACE,mBAAmB,CAACrK,KAAAA,EAAOA,MAAMmD,OAAO,CAACI,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}
|
|
@@ -340,7 +340,11 @@ const DEFAULT_OUTPUT_NAMES = [
|
|
|
340
340
|
calculateEmissiveColor(scope) {
|
|
341
341
|
const emissive = this.getBlueprintOutput(scope, 'Emissive');
|
|
342
342
|
if (emissive !== undefined) {
|
|
343
|
-
|
|
343
|
+
// This bypasses the base implementation, so it has to apply the camera pre-exposure itself.
|
|
344
|
+
// A blueprint has no per-material exposure weight, so the emitter always follows exposure.
|
|
345
|
+
// The graph output replaces emissiveColor * emissiveLuminance outright, so under physical
|
|
346
|
+
// lighting it is a cd/m² luminance: emit hundreds to thousands, not the [0,1] of legacy.
|
|
347
|
+
return scope.$builder.mul(this.toVec3(scope, emissive), ShaderHelper.getPreExposureUniform(scope));
|
|
344
348
|
}
|
|
345
349
|
return super.calculateEmissiveColor(scope);
|
|
346
350
|
}
|