@zephyr3d/scene 0.9.16 → 0.9.18
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 +8 -6
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/morphtargetgrouptrack.js +11 -3
- package/dist/animation/morphtargetgrouptrack.js.map +1 -1
- package/dist/material/mtoon.js +20 -2
- package/dist/material/mtoon.js.map +1 -1
- package/dist/scene/light.js +10 -8
- package/dist/scene/light.js.map +1 -1
- package/dist/shaders/shadow.js +116 -3
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/pcss.js +2 -1
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadowmapper.js +2 -2
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/utility/serialization/manager.js +2 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +36 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +20 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 if (val !== this._outlineWidthFactor) {\r\n this._outlineWidthFactor = val;\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 if (this.outlineWidthMode === 'worldCoordinates') {\r\n scope.worldPos = pb.add(scope.worldPos, pb.mul(scope.worldOutlineNormal, scope.width));\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\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","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","width","outlineWidthTex","uvIndex","outlineWidthMultiplyTexCoordIndex","semantic","$getVertexAttrib","attrib","outlineWidthTextureMatrix","mat4","outlineUv","xy","g","clipNormalPos","getViewProjectionMatrix","clipPos","screenNormal","w","getRenderSize","zw","$outputs","setClipSpacePosition","fragmentShader","albedo","outlineLighting","outputFragmentColor","drawContext","shadingShiftTexture","sampleShadingShiftTexture","getShadingShiftTexCoord","r","calculateViewVector","directLighting","giLighting","emission","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,IAAIA,GAAQ,KAAA,IAAI,CAACX,mBAAmB,EAAE;YACpC,IAAI,CAACA,mBAAmB,GAAGW,GAAAA;AAC3B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAImB,kBAAyC,GAAA;QAC3C,OAAO,IAAI,CAAC1C,mBAAmB;AACjC;IACA,IAAI0C,kBAAAA,CAAmBrB,GAAuB,EAAE;AAC9C,QAAA,IAAI,CAACrB,mBAAmB,CAACsB,GAAG,CAACD,GAAAA,CAAAA;AAC7B,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAIoB,wBAAmC,GAAA;QACrC,OAAO,IAAI,CAAChC,yBAAyB;AACvC;IACA,IAAIgC,wBAAAA,CAAyBtB,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,IAAIuB,qBAAiC,GAAA;QACnC,OAAO,IAAI,CAAC9B,sBAAsB;AACpC;IACA,IAAI8B,qBAAAA,CAAsBvB,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,IAAIsB,uBAAkC,GAAA;QACpC,OAAO,IAAI,CAAC9B,wBAAwB;AACtC;IACA,IAAI8B,uBAAAA,CAAwBxB,GAAW,EAAE;QACvC,MAAMyB,MAAAA,GAASlB,IAAKmB,CAAAA,KAAK,CAAC1B,GAAAA,CAAAA;AAC1B,QAAA,IAAIyB,MAAW,KAAA,IAAI,CAAC/B,wBAAwB,EAAE;YAC5C,IAAI,CAACA,wBAAwB,GAAG+B,MAAAA;AAChC,YAAA,IAAI,CAACvB,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIyB,6BAAwC,GAAA;AAC1C,QAAA,OAAO,IAAI,CAAC/C,kBAAkB,CAACgD,CAAC;AAClC;IACA,IAAID,6BAAAA,CAA8B3B,GAAW,EAAE;AAC7C,QAAA,IAAIA,QAAQ,IAAI,CAACpB,kBAAkB,CAACgD,CAAC,EAAE;AACrC,YAAA,IAAI,CAAChD,kBAAkB,CAACgD,CAAC,GAAG5B,GAAAA;AAC5B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI2B,6BAAwC,GAAA;AAC1C,QAAA,OAAO,IAAI,CAACjD,kBAAkB,CAACkD,CAAC;AAClC;IACA,IAAID,6BAAAA,CAA8B7B,GAAW,EAAE;AAC7C,QAAA,IAAIA,QAAQ,IAAI,CAACpB,kBAAkB,CAACkD,CAAC,EAAE;AACrC,YAAA,IAAI,CAAClD,kBAAkB,CAACkD,CAAC,GAAG9B,GAAAA;AAC5B,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI6B,8BAAyC,GAAA;QAC3C,OAAO,IAAI,CAACxC,+BAA+B;AAC7C;IACA,IAAIwC,8BAAAA,CAA+B/B,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,IAAI8B,aAAoC,GAAA;QACtC,OAAO,IAAI,CAACnD,cAAc;AAC5B;IACA,IAAImD,aAAAA,CAAchC,GAAuB,EAAE;AACzC,QAAA,IAAI,CAACnB,cAAc,CAACoB,GAAG,CAACD,GAAAA,CAAAA;AACxB,QAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACA,IAAA,IAAI+B,gBAA2B,GAAA;QAC7B,OAAO,IAAI,CAACzC,iBAAiB;AAC/B;IACA,IAAIyC,gBAAAA,CAAiBjC,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;IACAgC,KAAuB,GAAA;AACrB,QAAA,MAAMC,QAAQ,IAAI/D,aAAAA,EAAAA;QAClB+D,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,CAACpC,gBAAgB,GAAGoC,KAAAA,CAAMpC,gBAAgB;AAC9C,QAAA,IAAI,CAACI,kBAAkB,GAAGgC,KAAAA,CAAMhC,kBAAkB;AAClD,QAAA,IAAI,CAACC,wBAAwB,GAAG+B,KAAAA,CAAM/B,wBAAwB;AAC9D,QAAA,IAAI,CAACC,kBAAkB,GAAG8B,KAAAA,CAAM9B,kBAAkB;AAClD,QAAA,IAAI,CAACK,oBAAoB,GAAGyB,KAAAA,CAAMzB,oBAAoB;AACtD,QAAA,IAAI,CAACE,YAAY,GAAGuB,KAAAA,CAAMvB,YAAY;AACtC,QAAA,IAAI,CAACC,wBAAwB,GAAGsB,KAAAA,CAAMtB,wBAAwB;AAC9D,QAAA,IAAI,CAACC,+BAA+B,GAAGqB,KAAAA,CAAMrB,+BAA+B;AAC5E,QAAA,IAAI,CAACC,uBAAuB,GAAGoB,KAAAA,CAAMpB,uBAAuB;AAC5D,QAAA,IAAI,CAACC,oBAAoB,GAAGmB,KAAAA,CAAMnB,oBAAoB;AACtD,QAAA,IAAI,CAACnB,gBAAgB,GAAGsC,KAAAA,CAAMtC,gBAAgB;AAC9C,QAAA,IAAI,CAACuB,kBAAkB,GAAGe,KAAAA,CAAMf,kBAAkB;AAClD,QAAA,IAAI,CAACC,kBAAkB,GAAGc,KAAAA,CAAMd,kBAAkB;AAClD,QAAA,IAAI,CAACC,wBAAwB,GAAGa,KAAAA,CAAMb,wBAAwB;AAC9D,QAAA,IAAI,CAACxB,yBAAyB,GAAGqC,KAAAA,CAAMrC,yBAAyB;AAChE,QAAA,IAAI,CAACyB,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,CAAC,IAAA,CAAA;SACtE,MAAA,IAAI,IAAI,CAAC3D,sBAAsB,IAAI,IAAI,CAAC6C,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;AACAE,IAAAA,IAAAA,CAAKC,SAAoB,EAAEX,GAAgB,EAAEY,YAAAA,GAAe,CAAC,EAAQ;AACnE,QAAA,MAAMC,WAAW,IAAI;AACrB,QAAA,IAAI,IAAI,CAACtC,SAAS,GAAG,KAAKyB,GAAIc,CAAAA,UAAU,CAAEC,IAAI,KAAKC,sBAAAA,IAA0B,CAAChB,GAAAA,CAAIiB,aAAa,EAAE;;AAE/FJ,YAAAA,QAAAA,CAASK,IAAI,CAAClB,GAAImB,CAAAA,MAAM,EAAE,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACC,aAAa,CAAC,CAAA,EAAGT,WAAWX,GAAKY,EAAAA,YAAAA,CAAAA;AACtCC,YAAAA,QAAAA,CAASK,IAAI,CAAClB,GAAImB,CAAAA,MAAM,EAAE,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACC,aAAa,CAAC,CAAA,EAAGT,WAAWX,GAAKY,EAAAA,YAAAA,CAAAA;SACjC,MAAA;YACJvF,YAAagG,CAAAA,SAAS,CAA2CX,IAAI,CAACY,IAAI,CACzE,IAAI,EACJX,SAAAA,EACAX,GACAY,EAAAA,YAAAA,CAAAA;AAEJ;AACF;AACAQ,IAAAA,aAAAA,CAAcrB,IAAY,EAAEY,SAAoB,EAAEX,GAAgB,EAAEY,YAAoB,EAAQ;AAC9F,QAAA,IAAIb,IAAO,GAAA,CAAA,KAAMC,GAAAA,CAAIc,UAAU,CAAEC,IAAI,KAAKC,sBAA0BhB,IAAAA,GAAAA,CAAIiB,aAAY,CAAI,EAAA;AACtF,YAAA;AACF;AACA,QAAA,KAAK,CAACG,aAAAA,CAAcrB,IAAMY,EAAAA,SAAAA,EAAWX,GAAKY,EAAAA,YAAAA,CAAAA;AAC5C;AACAW,IAAAA,kBAAAA,CAAmBC,SAAoB,EAAExB,GAAgB,EAAED,IAAY,EAAQ;QAC7E,KAAK,CAACwB,kBAAmBC,CAAAA,SAAAA,EAAWxB,GAAKD,EAAAA,IAAAA,CAAAA;AACzC,QAAA,IAAI,IAAI,CAAC0B,sBAAsB,CAACzB,GAAM,CAAA,EAAA;AACpCwB,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAC7F,iBAAiB,CAAA;AAC7D2F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAACvF,mBAAmB,CAAA;AACjEqF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAACtF,yBAAyB,CAAA;AAC7EoF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAACrF,mBAAmB,CAAA;AACjEmF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACpF,qBAAqB,CAAA;AACrEkF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,cAAgB,EAAA,IAAI,CAAC5F,aAAa,CAAA;AACrD0F,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAAC3F,yBAAyB,CAAA;AAC7EyF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,iCAAmC,EAAA,IAAI,CAACnF,gCAAgC,CAAA;AAC3FiF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,yBAA2B,EAAA,IAAI,CAAClF,wBAAwB,CAAA;AAC3EgF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,sBAAwB,EAAA,IAAI,CAACjF,qBAAqB,CAAA;AACrE+E,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,mBAAqB,EAAA,IAAI,CAACzF,kBAAkB,CAAA;AAC/DuF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,gCAAkC,EAAA,IAAI,CAAC9E,+BAA+B,CAAA;AACzF4E,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAACxF,cAAc,CAAA;AACvDsF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,kBAAoB,EAAA,IAAI,CAAC7E,iBAAiB,CAAA;SACxD,MAAA,IAAIkD,IAAO,GAAA,CAAA,IAAK,IAAI,CAAC4B,2BAA2B,IAAI,IAAI,CAACC,cAAc,EAAI,EAAA;AAChFJ,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,mBAAqB,EAAA,IAAI,CAACzF,kBAAkB,CAAA;AAC/DuF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,gCAAkC,EAAA,IAAI,CAAC9E,+BAA+B,CAAA;AAC3F;AACA,QAAA,IAAImD,OAAO,CAAG,EAAA;AACZyB,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAAChF,mBAAmB,CAAA;YACjE,IAAI,IAAI,CAACiF,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,IAAIlC,OAAO,CAAKC,IAAAA,GAAAA,CAAIc,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;AAC/DQ,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,oBAAsB,EAAA,IAAI,CAAC1F,mBAAmB,CAAA;AACjEwF,YAAAA,SAAAA,CAAUE,QAAQ,CAAC,0BAA4B,EAAA,IAAI,CAAC/E,yBAAyB,CAAA;AAC/E;AACF;IACQiF,cAA0B,GAAA;AAChC,QAAA,OACE,IAAI,CAAC3F,kBAAkB,CAACgD,CAAC,KAAK,CAC9B,IAAA,IAAI,CAAChD,kBAAkB,CAACkD,CAAC,KAAK,KAC9B,IAAI,CAACvC,+BAA+B,KAAK,CAAA;AAE7C;IACQsF,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,KAAM/C,CAAAA,8BAA8B,EAAE;AACzC+C,YAAAA,KAAAA,CAAM/C,8BAA8B,GAAGiD,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,CAACnE,8BAA8B,EAAE,IAAI,CAAC8D,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,CAAC/E,CAAC,CAAA,EAAGoD,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACG,CAAC,EAAE,IAAI,CAACE,UAAU,CAAC7E,CAAC,CAC1EkD,CAAAA,EAAAA,EAAAA,CAAG8B,GAAG,CAAC9B,GAAGsB,GAAG,CAACtB,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACN,CAAC,CAAA,EAAG,IAAI,CAACE,UAAU,CAAC/E,CAAC,GAAGoD,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACI,UAAU,CAAC7E,CAAC,CAEpFkD,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,CAAM/E,gBAAgB,EACtB,IAAI,CAAC6H,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,CAAM/E,gBAAgB;AAC5B;IACQgI,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,IAAKqE,CAAAA,yBAAyB,CAAC,IAAI,EAAE9F,IAAM,EAAA,IAAI,CAAC2E,QAAQ,EAAEa,QAAUC,EAAAA,SAAAA,CAAAA;AACzF,gBAAA,IAAI,CAACvD,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,CAACzG,kBAAkB,CAAA,CAAA,EAC9D2E,GAAGvE,GAAG,CAACuE,GAAG4B,GAAG,CAAC,GAAG5B,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAACjG,kBAAkB,EAAE,CAAA,CAAA,CAAA,EAAK,WAExD,CACA,EAAA,CAAA,CAAA;AAEF,gBAAA,IAAI,CAACuF,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,MAAMpE,oBAAoB,CAAA;AAC7E,QAAA,OAAOsE,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,QAAQlJ,CAAC,CAAA,CAAA,CAAA;AACzEkD,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,MAAMlE,YAAY,EAAE,IAAI,CAAC2K,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,CAAM/D,uBAAuB,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,EACzEiE,EAAGvE,CAAAA,GAAG,CAACqE,KAAAA,CAAMhE,+BAA+B,EAAE,OAAA,CAAA,CAAA;AAEhDgE,QAAAA,KAAAA,CAAMkG,GAAG,GAAGhG,EAAG8B,CAAAA,GAAG,CAAChC,KAAMkG,CAAAA,GAAG,EAAEhG,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAMjE,wBAAwB,EAAEiE,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,MAAM9D,oBAAoB,CAAA,CAAA;AAClF;AACQ8K,IAAAA,sBAAAA,CAAuBhH,KAA4B,EAAe;QACxE,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,QAAA,OAAO,IAAI,CAAC8G,eAAe,GACvB/G,EAAAA,CAAGsB,GAAG,CACJxB,KAAAA,CAAM9C,aAAa,EACnB8C,MAAM7C,gBAAgB,EACtB,IAAI,CAAC+J,qBAAqB,CAAClH,KAAAA,EAAO,IAAI,CAACD,gBAAgB,CAACC,KAAAA,EAAO,IAAI,CAACmH,mBAAmB,CAACnH,KAAAA,CAAAA,CAAAA,CAAAA,CAASgD,GAAG,CAAA,GAEtG9C,GAAGsB,GAAG,CAACxB,MAAM9C,aAAa,EAAE8C,MAAM7C,gBAAgB,CAAA;AACxD;AACAiK,IAAAA,YAAAA,CAAapH,KAAsB,EAAQ;AACzC,QAAA,KAAK,CAACoH,YAAapH,CAAAA,KAAAA,CAAAA;QACnB,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;AACzBH,QAAAA,KAAAA,CAAMc,EAAE,CAACuG,IAAI,GAAGhG,YAAAA,CAAaiG,qBAAqB,CAACtH,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMc,EAAE,CAACyG,KAAK,GAAGlG,YAAAA,CAAamG,mBAAmB,CAACxH,KAAAA,CAAAA;QAClD,IAAI,IAAI,CAACpC,IAAI,GAAG,KAAK,IAAI,CAAC5C,yBAAyB,EAAE;YACnDgF,KAAMc,CAAAA,EAAE,CAAC2G,YAAY,GAAGpG,aAAaqG,oBAAoB,CAAC1H,OAAO2H,GAAG;AACtE;QACA3H,KAAMc,CAAAA,EAAE,CAAC8G,WAAW,GAAG1H,GAAGgD,SAAS,CACjChD,GAAGsB,GAAG,CAACH,aAAawG,eAAe,CAAC7H,QAAQE,EAAG4H,CAAAA,IAAI,CAAC9H,KAAMuH,CAAAA,KAAK,EAAE,CAAA,CAAA,CAAA,CAAII,GAAG,CAAA;AAE1E3H,QAAAA,KAAAA,CAAMc,EAAE,CAACiH,kBAAkB,GACzB,IAAI,CAACnK,IAAI,GAAG,CAAA,IAAK,IAAI,CAAC5C,yBAAyB,GAC3CkF,GAAGgD,SAAS,CAAChD,EAAGsB,CAAAA,GAAG,CAACH,YAAAA,CAAawG,eAAe,CAAC7H,QAAQE,EAAG4H,CAAAA,IAAI,CAAC9H,KAAAA,CAAMyH,YAAY,EAAE,CAAA,CAAA,CAAA,CAAIE,GAAG,CAAA,GAC5F3H,MAAM4H,WAAW;AACvB5H,QAAAA,KAAAA,CAAMc,EAAE,CAACyC,QAAQ,GAAGrD,EAAGsB,CAAAA,GAAG,CAACH,YAAa2G,CAAAA,cAAc,CAAChI,KAAAA,CAAAA,EAAQE,GAAG4H,IAAI,CAAC9H,MAAMqH,IAAI,EAAE,IAAIM,GAAG;AAC1F,QAAA,IAAI,IAAI,CAAC/J,IAAI,GAAG,CAAG,EAAA;AACjBoC,YAAAA,KAAAA,CAAM1D,kBAAkB,GAAG4D,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAMc,EAAE,CAACmH,KAAK,GAAGjI,MAAM1D,kBAAkB;YACzC,IAAI,IAAI,CAACkD,2BAA2B,EAAE;AACpCQ,gBAAAA,KAAAA,CAAMkI,eAAe,GAAGhI,EAAAA,CAAGU,KAAK,EAAA,CAAGJ,OAAO,CAAC,CAAA,CAAA;gBAC3C,MAAM2H,OAAAA,GAAU,IAAI,CAACC,iCAAiC;AACtD,gBAAA,MAAMC,QAAW,GAAA,CAAC,QAAQ,EAAEF,OAAS,CAAA,CAAA;AACrC,gBAAA,IAAI,CAACnI,KAAAA,CAAMsI,gBAAgB,CAACD,QAAW,CAAA,EAAA;oBACrCrI,KAAMmD,CAAAA,OAAO,CAACkF,QAAS,CAAA,GAAGnI,GAAGK,IAAI,EAAA,CAAGgI,MAAM,CAACF,QAAAA,CAAAA;AAC7C;gBACA,IAAI,IAAI,CAACvI,kCAAkC,EAAE;AAC3CE,oBAAAA,KAAAA,CAAMwI,yBAAyB,GAAGtI,EAAAA,CAAGuI,IAAI,EAAA,CAAGjI,OAAO,CAAC,CAAA,CAAA;oBACpDR,KAAMc,CAAAA,EAAE,CAAC4H,SAAS,GAAGxI,EAAAA,CAAGsB,GAAG,CACzBxB,KAAAA,CAAMwI,yBAAyB,EAC/BtI,EAAG4H,CAAAA,IAAI,CAAC,IAAI,CAAC/H,gBAAgB,CAACC,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACkF,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAClEM,EAAE;iBACC,MAAA;AACL3I,oBAAAA,KAAAA,CAAMc,EAAE,CAAC4H,SAAS,GAAG,IAAI,CAAC3I,gBAAgB,CAACC,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACkF,QAAS,CAAA,CAAA;AAC3E;AACArI,gBAAAA,KAAAA,CAAMiI,KAAK,GAAG/H,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAMiI,KAAK,EAAE/H,EAAAA,CAAGiB,kBAAkB,CAACnB,MAAMkI,eAAe,EAAElI,MAAM0I,SAAS,EAAE,GAAGE,CAAC,CAAA;AACtG;AACA,YAAA,IAAI,IAAI,CAAC7N,gBAAgB,KAAK,kBAAoB,EAAA;AAChDiF,gBAAAA,KAAAA,CAAMuD,QAAQ,GAAGrD,EAAG8B,CAAAA,GAAG,CAAChC,KAAMuD,CAAAA,QAAQ,EAAErD,EAAAA,CAAGsB,GAAG,CAACxB,KAAAA,CAAM+H,kBAAkB,EAAE/H,MAAMiI,KAAK,CAAA,CAAA;AACtF,aAAA,MAAO,IAAI,IAAI,CAAClN,gBAAgB,KAAK,mBAAqB,EAAA;gBACxDiF,KAAMc,CAAAA,EAAE,CAAC+H,aAAa,GAAG3I,GAAGsB,GAAG,CAC7BH,YAAayH,CAAAA,uBAAuB,CAAC9I,KAAAA,CAAAA,EACrCE,GAAG4H,IAAI,CAAC5H,GAAG8B,GAAG,CAAChC,MAAMuD,QAAQ,EAAEvD,KAAM+H,CAAAA,kBAAkB,CAAG,EAAA,CAAA,CAAA,CAAA;AAE5D/H,gBAAAA,KAAAA,CAAMc,EAAE,CAACiI,OAAO,GAAG7I,EAAAA,CAAGsB,GAAG,CAACH,YAAAA,CAAayH,uBAAuB,CAAC9I,QAAQE,EAAG4H,CAAAA,IAAI,CAAC9H,KAAAA,CAAMuD,QAAQ,EAAE,CAAA,CAAA,CAAA;AAC/FvD,gBAAAA,KAAAA,CAAMc,EAAE,CAACkI,YAAY,GAAG9I,EAAAA,CAAG4B,GAAG,CAC5B5B,EAAAA,CAAGkF,GAAG,CAACpF,MAAM6I,aAAa,CAACF,EAAE,EAAEzI,EAAAA,CAAGvE,GAAG,CAACqE,KAAAA,CAAM6I,aAAa,CAACI,CAAC,EAAE,OAAA,CAAA,CAAA,EAC7D/I,GAAGkF,GAAG,CAACpF,MAAM+I,OAAO,CAACJ,EAAE,EAAEzI,GAAGvE,GAAG,CAACqE,MAAM+I,OAAO,CAACE,CAAC,EAAE,OAAA,CAAA,CAAA,CAAA;AAEnDjJ,gBAAAA,KAAAA,CAAMgJ,YAAY,GAAG9I,EAAGgD,CAAAA,SAAS,CAC/BhD,EAAAA,CAAGsB,GAAG,CACJxB,KAAMgJ,CAAAA,YAAY,EAClB9I,EAAAA,CAAGK,IAAI,CAAC,CAAGL,EAAAA,EAAAA,CAAGkF,GAAG,CAAC/D,YAAa6H,CAAAA,aAAa,CAAClJ,KAAAA,CAAAA,CAAOlD,CAAC,EAAEuE,YAAa6H,CAAAA,aAAa,CAAClJ,KAAAA,CAAAA,CAAOhD,CAAC,CAAA,CAAA,CAAA,CAAA;;AAK9FgD,gBAAAA,KAAAA,CAAM+I,OAAO,GAAG7I,EAAG4H,CAAAA,IAAI,CACrB5H,EAAAA,CAAG8B,GAAG,CAAChC,KAAM+I,CAAAA,OAAO,CAACJ,EAAE,EAAEzI,EAAGsB,CAAAA,GAAG,CAACxB,KAAAA,CAAMgJ,YAAY,EAAEhJ,KAAMiI,CAAAA,KAAK,EAAEjI,KAAAA,CAAM+I,OAAO,CAACE,CAAC,CAAA,CAAA,EAChFjJ,KAAM+I,CAAAA,OAAO,CAACI,EAAE,CAAA;AAElBnJ,gBAAAA,KAAAA,CAAMoJ,QAAQ,CAAC7F,QAAQ,GAAGvD,MAAMuD,QAAQ;AACxCvD,gBAAAA,KAAAA,CAAMoJ,QAAQ,CAAChG,KAAK,GAAGpD,MAAM+H,kBAAkB;AAC/C1G,gBAAAA,YAAAA,CAAagI,oBAAoB,CAACrJ,KAAOA,EAAAA,KAAAA,CAAM+I,OAAO,CAAA;AACtD,gBAAA;AACF;AACF;AACA/I,QAAAA,KAAAA,CAAMoJ,QAAQ,CAAC7F,QAAQ,GAAGvD,MAAMuD,QAAQ;AACxCvD,QAAAA,KAAAA,CAAMoJ,QAAQ,CAAChG,KAAK,GAAG,IAAI,CAACxF,IAAI,GAAG,CAAIoC,GAAAA,KAAAA,CAAM+H,kBAAkB,GAAG/H,MAAM4H,WAAW;AACnFvG,QAAAA,YAAAA,CAAagI,oBAAoB,CAC/BrJ,KAAAA,EACAE,EAAGsB,CAAAA,GAAG,CAACH,YAAayH,CAAAA,uBAAuB,CAAC9I,KAAAA,CAAAA,EAAQE,GAAG4H,IAAI,CAAC9H,MAAMoJ,QAAQ,CAAC7F,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;AAEzF;AACA+F,IAAAA,cAAAA,CAAetJ,KAAsB,EAAQ;AAC3C,QAAA,KAAK,CAACsJ,cAAetJ,CAAAA,KAAAA,CAAAA;QACrB,MAAME,EAAAA,GAAKF,MAAMG,QAAQ;QACzB,IAAI,IAAI,CAACb,sBAAsB,EAAI,EAAA;AACjCU,YAAAA,KAAAA,CAAM/E,gBAAgB,GAAGiF,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AAC3CR,YAAAA,KAAAA,CAAM3E,kBAAkB,GAAG6E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAM1E,wBAAwB,GAAG4E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACpDR,YAAAA,KAAAA,CAAMzE,kBAAkB,GAAG2E,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC9CR,YAAAA,KAAAA,CAAMpE,oBAAoB,GAAGsE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAChDR,YAAAA,KAAAA,CAAMlE,YAAY,GAAGoE,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACvCR,YAAAA,KAAAA,CAAMjE,wBAAwB,GAAGmE,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACnDR,YAAAA,KAAAA,CAAMhE,+BAA+B,GAAGkE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC3DR,YAAAA,KAAAA,CAAM/D,uBAAuB,GAAGiE,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACnDR,YAAAA,KAAAA,CAAM9D,oBAAoB,GAAGgE,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,CAAM/C,8BAA8B,GAAGiD,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC1DR,YAAAA,KAAAA,CAAM9C,aAAa,GAAGgD,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AACxCR,YAAAA,KAAAA,CAAM7C,gBAAgB,GAAG+C,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AAC5C,YAAA,IAAI,IAAI,CAAC5C,IAAI,GAAG,CAAG,EAAA;AACjBoC,gBAAAA,KAAAA,CAAMzD,kBAAkB,GAAG2D,EAAAA,CAAGwD,IAAI,EAAA,CAAGlD,OAAO,CAAC,CAAA,CAAA;AAC7CR,gBAAAA,KAAAA,CAAMxD,wBAAwB,GAAG0D,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACpDR,gBAAAA,KAAAA,CAAMc,EAAE,CAACyI,MAAM,GAAG,IAAI,CAAC7G,YAAY,CAAC1C,KAAO,EAAA,IAAI,CAACoC,cAAc,CAACpC,KAAAA,CAAAA,CAAAA;AAC/DA,gBAAAA,KAAAA,CAAMc,EAAE,CAAC0I,eAAe,GAAGtJ,EAAAA,CAAGoF,GAAG,CAACpF,EAAAA,CAAGwD,IAAI,CAAC,IAAI1D,KAAMuJ,CAAAA,MAAM,CAACvG,GAAG,EAAEhD,MAAMxD,wBAAwB,CAAA;gBAC9F,IAAI,CAACiN,mBAAmB,CACtBzJ,KACAA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,EACtBrD,EAAAA,CAAG4H,IAAI,CAAC5H,GAAGsB,GAAG,CAACxB,KAAMzD,CAAAA,kBAAkB,EAAEyD,KAAAA,CAAMwJ,eAAe,CAAGxJ,EAAAA,KAAAA,CAAMuJ,MAAM,CAACzE,CAAC,CAAA,CAAA;aAE5E,MAAA;AACL9E,gBAAAA,KAAAA,CAAMc,EAAE,CAACb,EAAE,GAAG,IAAI,CAACmC,cAAc,CAACpC,KAAAA,CAAAA;gBAClCA,KAAMc,CAAAA,EAAE,CAACyI,MAAM,GAAG,IAAI,CAAC7G,YAAY,CAAC1C,KAAOA,EAAAA,KAAAA,CAAMC,EAAE,CAAA;gBACnD,IAAI,IAAI,CAACyJ,WAAW,CAAC/K,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,MAAM3E,kBAAkB;oBAChD,IAAI,IAAI,CAACsO,mBAAmB,EAAE;AAC5B3J,wBAAAA,KAAAA,CAAMiE,YAAY,GAAG/D,EAAG8B,CAAAA,GAAG,CACzBhC,KAAAA,CAAMiE,YAAY,EAClB/D,EAAGsB,CAAAA,GAAG,CACJ,IAAI,CAACoI,yBAAyB,CAC5B5J,KAAAA,EACA,IAAI,CAACD,gBAAgB,CAACC,KAAO,EAAA,IAAI,CAAC6J,uBAAuB,CAAC7J,KAAAA,CAAAA,CAAAA,CAAAA,CAC1D8J,CAAC,EACH9J,MAAM1E,wBAAwB,CAAA,CAAA;AAGpC;AACA0E,oBAAAA,KAAAA,CAAMc,EAAE,CAACkD,UAAU,GAAG,IAAI,CAACpB,gBAAgB,CAAC5C,KAAAA,CAAAA;AAC5CA,oBAAAA,KAAAA,CAAMc,EAAE,CAACkF,OAAO,GAAG,IAAI,CAAC+D,mBAAmB,CAAC/J,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,CAAA;oBACzEvD,KAAMc,CAAAA,EAAE,CAACkJ,cAAc,GAAG,IAAI,CAACnG,4BAA4B,CACzD7D,KAAAA,EACAA,KAAMmD,CAAAA,OAAO,CAACI,QAAQ,EACtBvD,KAAM8D,CAAAA,MAAM,EACZ9D,KAAAA,CAAMuJ,MAAM,CAACvG,GAAG,EAChBhD,KAAMgE,CAAAA,UAAU,EAChBhE,KAAAA,CAAMiE,YAAY,CAAA;AAEpBjE,oBAAAA,KAAAA,CAAMc,EAAE,CAACmJ,UAAU,GAAG,IAAI,CAACxE,gBAAgB,CAACzF,KAAAA,EAAOA,MAAM8D,MAAM,EAAE9D,KAAMuJ,CAAAA,MAAM,CAACvG,GAAG,CAAA;oBACjFhD,KAAMc,CAAAA,EAAE,CAACmF,QAAQ,GAAG/F,EAAAA,CAAGvE,GAAG,CAACqE,KAAMgK,CAAAA,cAAc,EAAEhK,KAAAA,CAAMiK,UAAU,CAAA;AACjEjK,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,CAACoJ,QAAQ,GAAG,IAAI,CAAClD,sBAAsB,CAAChH,KAAAA,CAAAA;oBAChDA,KAAMc,CAAAA,EAAE,CAACqJ,QAAQ,GAAGjK,EAAAA,CAAG4H,IAAI,CACzB5H,EAAAA,CAAG8B,GAAG,CAAChC,KAAMgK,CAAAA,cAAc,EAAEhK,KAAMiK,CAAAA,UAAU,EAAEjK,KAAAA,CAAMkG,GAAG,EAAElG,KAAMkK,CAAAA,QAAQ,CACxElK,EAAAA,KAAAA,CAAMuJ,MAAM,CAACzE,CAAC,CAAA;AAEhB,oBAAA,IAAI,CAAC2E,mBAAmB,CACtBzJ,KAAAA,EACAA,MAAMmD,OAAO,CAACI,QAAQ,EACtBvD,MAAMmK,QAAQ,EACdjK,EAAG4H,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,EACjB5H,GAAG4H,IAAI,CAAC5H,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,CAAC+F,mBAAmB,CAACzJ,KAAOA,EAAAA,KAAAA,CAAMmD,OAAO,CAACI,QAAQ,EAAEvD,KAAAA,CAAMuJ,MAAM,CAAA;AACtE;AACF;SACK,MAAA;YACL,IAAI,CAACE,mBAAmB,CAACzJ,KAAAA,EAAOA,MAAMmD,OAAO,CAACI,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}
|
|
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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"}
|
package/dist/scene/light.js
CHANGED
|
@@ -297,7 +297,7 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
297
297
|
* @param scene - The scene to which the light belongs
|
|
298
298
|
*/ constructor(scene){
|
|
299
299
|
super(scene, LIGHT_TYPE_POINT);
|
|
300
|
-
this._range =
|
|
300
|
+
this._range = 0;
|
|
301
301
|
this._diffuseScale = 1;
|
|
302
302
|
this._specularScale = 1;
|
|
303
303
|
this._sourceRadius = 0;
|
|
@@ -383,15 +383,16 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
383
383
|
return true;
|
|
384
384
|
}
|
|
385
385
|
/** @internal */ computeBoundingVolume() {
|
|
386
|
+
const range = this.positionAndRange.w;
|
|
386
387
|
const bbox = new BoundingBox();
|
|
387
|
-
bbox.minPoint = new Vector3(-
|
|
388
|
-
bbox.maxPoint = new Vector3(
|
|
388
|
+
bbox.minPoint = new Vector3(-range, -range, -range);
|
|
389
|
+
bbox.maxPoint = new Vector3(range, range, range);
|
|
389
390
|
return bbox;
|
|
390
391
|
}
|
|
391
392
|
/** @internal */ computeUniforms() {
|
|
392
393
|
const a = this.worldMatrix.getRow(3);
|
|
393
394
|
const b = this.worldMatrix.getRow(2);
|
|
394
|
-
const range = this.range
|
|
395
|
+
const range = this.range <= 0 ? 32 * Math.sqrt(Math.max(0.0001, this.intensity * Math.max(this._diffuseScale, this._specularScale))) : this.range;
|
|
395
396
|
this._positionRange = new Vector4(a.x, a.y, a.z, range);
|
|
396
397
|
this._directionCutoff = new Vector4(b.x, b.y, b.z, -1);
|
|
397
398
|
this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);
|
|
@@ -409,7 +410,7 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
409
410
|
* @param scene - The scene to which the light belongs
|
|
410
411
|
*/ constructor(scene){
|
|
411
412
|
super(scene, LIGHT_TYPE_SPOT);
|
|
412
|
-
this._range =
|
|
413
|
+
this._range = 0;
|
|
413
414
|
this._cutoff = Math.cos(Math.PI / 4);
|
|
414
415
|
this.invalidateBoundingVolume();
|
|
415
416
|
}
|
|
@@ -460,15 +461,16 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
460
461
|
/** @internal */ computeBoundingVolume() {
|
|
461
462
|
const bbox = new BoundingBox();
|
|
462
463
|
const cosCutoff = Math.cos(this._cutoff);
|
|
463
|
-
const
|
|
464
|
+
const range = this.positionAndRange.w;
|
|
465
|
+
const r = range / cosCutoff * Math.sqrt(1 - cosCutoff * cosCutoff);
|
|
464
466
|
bbox.minPoint = new Vector3(-r, -r, 0);
|
|
465
|
-
bbox.maxPoint = new Vector3(r, r,
|
|
467
|
+
bbox.maxPoint = new Vector3(r, r, range);
|
|
466
468
|
return bbox;
|
|
467
469
|
}
|
|
468
470
|
/** @internal */ computeUniforms() {
|
|
469
471
|
const a = this.worldMatrix.getRow(3);
|
|
470
472
|
const b = this.worldMatrix.getRow(2).scaleBy(-1);
|
|
471
|
-
const range = this.range
|
|
473
|
+
const range = this.range <= 0 ? 32 * Math.sqrt(Math.max(0.0001, this.intensity)) : this.range;
|
|
472
474
|
this._positionRange = new Vector4(a.x, a.y, a.z, range);
|
|
473
475
|
this._directionCutoff = new Vector4(b.x, b.y, b.z, this.cutoff);
|
|
474
476
|
this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);
|