@zephyr3d/scene 0.7.0 → 0.7.1
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/animation.js +4 -15
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +22 -9
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +1 -0
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +0 -1
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +7 -1
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -3
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +37 -41
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +0 -1
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +0 -1
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +7 -14
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +0 -1
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +13 -4
- package/dist/app/api.js.map +1 -1
- package/dist/app/app.js +13 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +33 -45
- package/dist/app/engine.js.map +1 -1
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +10 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +11 -22
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +79 -58
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +5 -5
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +6 -2
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +6 -2
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +22 -15
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +2 -1
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +2 -2
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +9 -11
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +1 -3
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +121 -37
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +19 -17
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +45 -43
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +27 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +26 -17
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +14453 -15609
- package/dist/index.js +17 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +11 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +10 -9
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +3 -3
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -0
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js.map +1 -1
- package/dist/material/pbrblueprint.js +180 -22
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +36 -53
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +0 -1
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +7 -5
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -6
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +0 -10
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +4 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +15 -17
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +3 -4
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +8 -4
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +67 -64
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +1 -2
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +13 -13
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -7
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +4 -5
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +10 -5
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +16 -22
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +27 -52
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +4 -5
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +16 -14
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +4 -2
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +9 -10
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +22 -4
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +93 -15
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +25 -22
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +0 -16
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +7 -4
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +20 -35
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +5 -4
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +65 -48
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +35 -30
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +17 -29
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +1 -1
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +3 -1
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +6 -18
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +9 -3
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +2 -2
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +2 -2
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +2 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +2 -2
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +5 -6
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +2 -2
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/aabbtree.js +1 -1
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +578 -104
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +471 -9
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/common.js +1 -1
- package/dist/utility/blueprint/common.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +9 -5
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +288 -80
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +92 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +62 -45
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/blueprint/node.js +28 -1
- package/dist/utility/blueprint/node.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js.map +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +1 -1
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/json.js +19 -15
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +89 -22
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +23 -21
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -3
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +97 -9
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +102 -28
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +14 -12
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +154 -26
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +71 -100
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +3 -2
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +42 -9
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +7 -5
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -15
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +3 -2
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +8 -6
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +11 -9
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +14 -14
- package/dist/values.js.map +1 -1
- package/package.json +80 -80
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terrain-cm.js","sources":["../../src/material/terrain-cm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n GPUDataBuffer,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport type { DrawContext } from '../render';\r\nimport { MaterialVaryingFlags, MAX_TERRAIN_MIPMAP_LEVELS } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { mixinLight } from './mixins/lit';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype ClipmapTerrainDetailMapInfo = {\r\n detailMap: DRef<Texture2DArray>;\r\n detailNormalMap?: DRef<Texture2DArray>;\r\n detailMapList: DRef<Texture2D>[];\r\n detailNormalMapList: DRef<Texture2D>[];\r\n splatMap: DRef<Texture2DArray | Texture2D>;\r\n detailMapParams: Float32Array<ArrayBuffer>;\r\n numDetailMaps: number;\r\n};\r\n\r\nconst MAX_DETAIL_MAPS = 8;\r\n\r\n/**\r\n * Terrain debug rendering mode\r\n * @public\r\n */\r\nexport type TerrainDebugMode =\r\n | 'none'\r\n | 'vertex_normal'\r\n | 'detail_normal'\r\n | 'tangent'\r\n | 'uv'\r\n | 'bitangent'\r\n | 'albedo';\r\n\r\n/**\r\n * Default material type of clipmap terrain\r\n * @public\r\n */\r\nexport class ClipmapTerrainMaterial extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinLight,\r\n mixinPBRMetallicRoughness\r\n) {\r\n private static readonly FEATURE_DETAIL_MAP = this.defineFeature();\r\n private static readonly FEATURE_DEBUG_MODE = this.defineFeature();\r\n private static readonly _defaultDetailMap: DRef<Texture2D> = new DRef();\r\n private static readonly _defaultNormalMap: DRef<Texture2D> = new DRef();\r\n private readonly _region: Vector4;\r\n private readonly _clipmapGridInfo: Vector4;\r\n private readonly _heightMap: DRef<Texture2D>;\r\n private readonly _terrainScale: Vector3;\r\n private _detailMapInfo: ClipmapTerrainDetailMapInfo;\r\n private readonly _detailMapSize: number;\r\n private readonly _splatMapSize: number;\r\n private readonly _heightMapSize: Vector4;\r\n private readonly _levelDataBuffer: DRef<GPUDataBuffer>;\r\n constructor(heightMap: Texture2D) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.albedoTexCoordIndex = -1;\r\n this.normalTexCoordIndex = -1;\r\n this._region = new Vector4(-99999, -99999, 99999, 99999);\r\n this._clipmapGridInfo = new Vector4();\r\n this._heightMap = new DRef(heightMap);\r\n this._detailMapSize = 256;\r\n this._splatMapSize = 512;\r\n this._levelDataBuffer = new DRef(\r\n getDevice().createBuffer(MAX_TERRAIN_MIPMAP_LEVELS * 4 * 2 * 4, { usage: 'uniform' })\r\n );\r\n this._detailMapInfo = this.createDetailMapInfo();\r\n this._terrainScale = Vector3.one();\r\n this._heightMapSize = new Vector4(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, 0);\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, 'none');\r\n }\r\n static get MAX_DETAIL_MAP_COUNT() {\r\n return MAX_DETAIL_MAPS;\r\n }\r\n get debugMode(): TerrainDebugMode {\r\n return this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE);\r\n }\r\n set debugMode(mode: TerrainDebugMode) {\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, mode);\r\n }\r\n /** @internal */\r\n setLevelData(data: Float32Array<ArrayBuffer>, length: number) {\r\n this._levelDataBuffer.get().bufferSubData(0, data, 0, length);\r\n }\r\n /** @internal */\r\n get region() {\r\n return this._region;\r\n }\r\n set region(val: Vector4) {\r\n if (!val.equalsTo(this._region)) {\r\n this._region.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number) {\r\n if (\r\n this._clipmapGridInfo.x !== gridScale ||\r\n this._clipmapGridInfo.y !== gridOffsetX ||\r\n this._clipmapGridInfo.z !== gridOffsetY\r\n ) {\r\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** @internal */\r\n get terrainScale() {\r\n return this._terrainScale;\r\n }\r\n set terrainScale(val: Vector3) {\r\n if (!this._terrainScale.equalsTo(val)) {\r\n this._terrainScale.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get numDetailMaps() {\r\n return this._detailMapInfo.numDetailMaps;\r\n }\r\n set numDetailMaps(val: number) {\r\n if (val > MAX_DETAIL_MAPS || val < 0 || !Number.isInteger(val)) {\r\n console.error('Invalid number of detail maps');\r\n return;\r\n }\r\n if (getDevice().type === 'webgl' && val > 4) {\r\n console.error('Only 4 detail map layers is supported for WebGL1');\r\n return;\r\n }\r\n const n = this._detailMapInfo.numDetailMaps;\r\n const defaultDetailMap = ClipmapTerrainMaterial.getDefaultDetailMap();\r\n const defaultNormalMap = ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (val > n) {\r\n this._detailMapInfo.numDetailMaps = val;\r\n for (let i = n; i < val; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n } else if (val < n) {\r\n for (let i = val; i < n; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n this._detailMapInfo.numDetailMaps = val;\r\n }\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, this._detailMapInfo.numDetailMaps);\r\n }\r\n getSplatMap() {\r\n return this._detailMapInfo.splatMap?.get() ?? null;\r\n }\r\n setSplatMap(tex: Texture2DArray) {\r\n if (tex !== this._detailMapInfo.splatMap.get()) {\r\n if (!tex || tex.depth !== MAX_DETAIL_MAPS >> 2) {\r\n console.error('Invalid splat map');\r\n return;\r\n }\r\n this._detailMapInfo.splatMap.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapUVScale(index: number): number {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4];\r\n }\r\n setDetailMapUVScale(index: number, scale: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4] !== scale) {\r\n this._detailMapInfo.detailMapParams[index * 4] = scale;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapRoughness(index: number): number {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4 + 1];\r\n }\r\n setDetailMapRoughness(index: number, val: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4 + 1] !== val) {\r\n this._detailMapInfo.detailMapParams[index * 4 + 1] = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMap(index: number): Texture2D {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailMapList[index].get();\r\n }\r\n setDetailMap(index: number, albedoMap: Texture2D) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n albedoMap = albedoMap ?? ClipmapTerrainMaterial.getDefaultDetailMap();\r\n if (!this._detailMapInfo.detailMapList[index]) {\r\n this._detailMapInfo.detailMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailMapList[index].set(\r\n albedoMap === ClipmapTerrainMaterial.getDefaultDetailMap() ? null : albedoMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailMap.get()], null);\r\n blitter.blit(\r\n albedoMap,\r\n fb,\r\n index,\r\n albedoMap.width === this._detailMapSize && albedoMap.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n getDetailNormalMap(index: number): Texture2D {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailNormalMapList[index].get();\r\n }\r\n setDetailNormalMap(index: number, normalMap: Texture2D) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n normalMap = normalMap ?? ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (!this._detailMapInfo.detailNormalMapList[index]) {\r\n this._detailMapInfo.detailNormalMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailNormalMapList[index].set(\r\n normalMap === ClipmapTerrainMaterial.getDefaultNormalMap() ? null : normalMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailNormalMap.get()], null);\r\n blitter.blit(\r\n normalMap,\r\n fb,\r\n index,\r\n normalMap.width === this._detailMapSize && normalMap.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n /** @internal */\r\n update(region: Vector4, terrainScale: Vector3) {\r\n if (!region.equalsTo(this._region) || !terrainScale.equalsTo(this._terrainScale)) {\r\n this._region.set(region);\r\n this._terrainScale.set(terrainScale);\r\n this.uniformChanged();\r\n }\r\n }\r\n get heightMap() {\r\n return this._heightMap.get();\r\n }\r\n set heightMap(val: Texture2D) {\r\n if (val !== this._heightMap.get()) {\r\n this._heightMap.set(val);\r\n this._heightMapSize.setXYZW(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.uniformChanged();\r\n }\r\n }\r\n needSceneColor(): boolean {\r\n return false;\r\n }\r\n needSceneDepth(): boolean {\r\n return false;\r\n }\r\n supportInstancing(): boolean {\r\n return false;\r\n }\r\n supportLighting(): boolean {\r\n return true;\r\n }\r\n getMetallicRoughnessTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n sampleDetailNormalMap(scope: PBInsideFunctionScope, index: number, texCoord: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const sample =\r\n this.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(scope[`detailNormalMap${index}`], texCoord).rgb\r\n : pb.textureArraySample(scope.detailNormalMap, texCoord, index).rgb;\r\n const normal = pb.sub(pb.mul(sample, 2), pb.vec3(1));\r\n return pb.normalize(normal);\r\n }\r\n calculateDetailNormal(scope: PBInsideFunctionScope, TBN: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainNormal';\r\n pb.func(funcName, [pb.mat3('TBN')], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n this.$l.detailNormal = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n this.detailNormal = pb.add(\r\n this.detailNormal,\r\n pb.mul(that.sampleDetailNormalMap(this, i, uv), this[`mask${i >> 2}`][i & 3])\r\n );\r\n }\r\n this.$return(pb.normalize(pb.mul(this.TBN, this.detailNormal)));\r\n });\r\n return pb.getGlobalScope()[funcName](TBN);\r\n }\r\n getNormalTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n calculateAlbedoColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainAlbedo';\r\n pb.func(funcName, [], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps === 0) {\r\n this.$l.checkerPos = pb.mul(this.$inputs.uv, pb.sub(this.region.zw, this.region.xy));\r\n this.$l.ddx = pb.dpdx(this.checkerPos);\r\n this.$l.ddy = pb.dpdy(this.checkerPos);\r\n this.$l.w = pb.add(pb.max(pb.abs(this.ddx), pb.abs(this.ddy)), 0.01);\r\n this.$l.i = pb.div(\r\n pb.mul(\r\n 2,\r\n pb.sub(\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.sub(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5)),\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.add(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5))\r\n )\r\n ),\r\n this.w\r\n );\r\n this.$l.changeRate = pb.add(pb.length(this.ddx), pb.length(this.ddy));\r\n this.$l.fadeStart = pb.float(0);\r\n this.$l.fadeEnd = pb.float(10);\r\n this.$l.fadeFactor = pb.sub(1, pb.smoothStep(this.fadeStart, this.fadeEnd, this.changeRate));\r\n this.$l.checker = pb.mix(0.5, pb.sub(0.5, pb.mul(0.5, this.i.x, this.i.y)), this.fadeFactor);\r\n this.$l.checkerColor = pb.mix(pb.vec3(0.4), pb.vec3(1), pb.vec3(this.checker));\r\n this.$return(pb.vec4(this.checkerColor, 1));\r\n } else {\r\n this.$l.color = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n const sample =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this[`detailAlbedoMap${i}`], uv).rgb\r\n : pb.textureArraySample(this.detailAlbedoMap, uv, i).rgb;\r\n this.color = pb.add(this.color, pb.mul(sample, this[`mask${i >> 2}`][i & 3]));\r\n }\r\n this.$return(pb.vec4(this.color, 1));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName]();\r\n }\r\n sampleHeightMap(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n pos: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const morphRange = 0.5;\r\n pb.func(\r\n 'sampleHeightMap',\r\n [pb.vec2('uv'), pb.vec2('pos'), pb.vec4('levelStart'), pb.vec4('levelDiff')],\r\n function () {\r\n this.$l.h1 = pb.textureSampleLevel(this.heightMap, this.uv, this.$inputs.miplevel).r;\r\n this.$l.ratio = pb.mul(pb.sub(this.pos.xyxy, this.levelStart), this.levelDiff);\r\n this.$l.maxVal = pb.clamp(\r\n pb.max(pb.max(this.ratio.x, this.ratio.y), pb.max(this.ratio.z, this.ratio.w)),\r\n 0,\r\n 1\r\n );\r\n this.$l.morphFactor = pb.float(0);\r\n this.$if(pb.greaterThan(this.maxVal, 1 - morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(this.heightMap, this.uv, pb.add(this.$inputs.miplevel, 1)).r;\r\n this.morphFactor = pb.div(pb.sub(this.maxVal, 1 - morphRange), morphRange * 2);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$if(pb.lessThan(this.maxVal, morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(\r\n this.heightMap,\r\n this.uv,\r\n pb.max(pb.sub(this.$inputs.miplevel, 1), 0)\r\n ).r;\r\n this.morphFactor = pb.mul(pb.add(pb.div(this.maxVal, morphRange), 1), 0.5);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$return(this.h1);\r\n }\r\n );\r\n return scope.sampleHeightMap(uv, pos, levelStart, levelDiff);\r\n }\r\n calculateTerrainTBN(\r\n scope: PBInsideFunctionScope,\r\n clipmapPos: PBShaderExp,\r\n uv: PBShaderExp,\r\n texSize: PBShaderExp,\r\n scale: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp,\r\n normal: PBShaderExp\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'calcTerrainTBN',\r\n [\r\n pb.vec2('clipmapPos'),\r\n pb.vec2('uv'),\r\n pb.vec4('texSize'),\r\n pb.vec3('scale'),\r\n pb.vec4('levelStart'),\r\n pb.vec4('levelDiff'),\r\n pb.vec3('t').out(),\r\n pb.vec3('b').out(),\r\n pb.vec3('n').out()\r\n ],\r\n function () {\r\n this.$l.texelSize = pb.mul(this.texSize.zw, pb.exp2(this.$inputs.miplevel));\r\n this.$l.delta = pb.exp2(pb.add(this.$inputs.miplevel, 1));\r\n this.$l.hL = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hR = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hD = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hU = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.dHdU = pb.div(\r\n pb.mul(pb.sub(this.hR, this.hL), this.scale.y),\r\n pb.mul(this.scale.x, this.delta)\r\n );\r\n this.$l.dHdV = pb.div(\r\n pb.mul(pb.sub(this.hD, this.hU), this.scale.y),\r\n pb.mul(this.scale.z, this.delta)\r\n );\r\n this.t = pb.normalize(pb.vec3(1, this.dHdU, 0));\r\n this.b = pb.normalize(pb.vec3(0, this.dHdV, 1));\r\n this.n = pb.normalize(pb.cross(this.b, this.t));\r\n }\r\n );\r\n return scope.calcTerrainTBN(\r\n clipmapPos,\r\n uv,\r\n texSize,\r\n scale,\r\n levelStart,\r\n levelDiff,\r\n tangent,\r\n bitangent,\r\n normal\r\n );\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.position = pb.vec3().attrib('position');\r\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\r\n scope.$inputs.miplevel = pb.float().attrib('texCoord1');\r\n scope.clipmapGridInfo = pb.vec4().uniform(2);\r\n scope.levelData = pb.vec4[MAX_TERRAIN_MIPMAP_LEVELS * 2]().uniformBuffer(2);\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec4().uniform(2);\r\n scope.region = pb.vec4().uniform(2);\r\n scope.terrainScale = pb.vec3().uniform(2);\r\n\r\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\r\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\r\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\r\n scope.$l.clipmapMatrix = pb.mat4(\r\n pb.mul(scope.c, scope.scale2),\r\n pb.mul(scope.s, scope.scale2),\r\n 0,\r\n 0,\r\n pb.neg(pb.mul(scope.s, scope.scale2)),\r\n pb.mul(scope.c, scope.scale2),\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\r\n 0,\r\n 1\r\n );\r\n\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\r\n\r\n scope.$l.clipmapWorldPos = pb.mul(\r\n ShaderHelper.getWorldMatrix(scope),\r\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\r\n ).xyz;\r\n scope.$outputs.uv = pb.div(\r\n pb.sub(scope.clipmapWorldPos.xz, scope.region.xy),\r\n pb.sub(scope.region.zw, scope.region.xy)\r\n );\r\n\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.$l.levelStart = pb.vec4();\r\n scope.$l.levelDiff = pb.vec4();\r\n scope.$l.index = pb.mul(pb.int(scope.$inputs.miplevel), 2);\r\n scope.$for(pb.int('i'), 0, 32, function () {\r\n this.$if(pb.equal(this.i, this.index), function () {\r\n this.levelStart = this.levelData.at(this.i);\r\n this.levelDiff = this.levelData.at(pb.add(this.i, 1));\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n scope.$l.levelStart = scope.levelData.at(pb.mul(pb.int(scope.$inputs.miplevel), 2));\r\n scope.$l.levelDiff = scope.levelData.at(pb.add(pb.mul(pb.int(scope.$inputs.miplevel), 2), 1));\r\n }\r\n\r\n scope.$l.height = this.sampleHeightMap(\r\n scope,\r\n scope.$outputs.uv,\r\n scope.clipmapWorldPos.xz,\r\n scope.levelStart,\r\n scope.levelDiff\r\n );\r\n scope.$outputs.worldPos = pb.add(\r\n scope.clipmapWorldPos,\r\n pb.vec3(0, pb.mul(scope.height, scope.terrainScale.y), 0)\r\n );\r\n scope.$l.t = pb.vec3();\r\n scope.$l.b = pb.vec3();\r\n scope.$l.n = pb.vec3();\r\n this.calculateTerrainTBN(\r\n scope,\r\n scope.clipmapWorldPos.xz,\r\n scope.$outputs.uv,\r\n scope.heightMapSize,\r\n scope.terrainScale,\r\n scope.levelStart,\r\n scope.levelDiff,\r\n scope.t,\r\n scope.b,\r\n scope.n\r\n );\r\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\r\n scope.$outputs.worldTangent = scope.t;\r\n scope.$outputs.worldBinormal = scope.b;\r\n scope.$outputs.worldNormal = scope.n;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n scope.region = pb.vec4().uniform(2);\r\n scope.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(scope.$inputs.uv, pb.vec2(0))),\r\n pb.any(pb.greaterThan(scope.$inputs.uv, pb.vec2(1)))\r\n );\r\n scope.$if(scope.discardable, function () {\r\n pb.discard();\r\n });\r\n if (this.needFragmentColor()) {\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n const numDetailMaps = this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps > 0) {\r\n scope.detailParams = pb.vec4[numDetailMaps]().uniform(2);\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.splatMap = pb.tex2D().uniform(2);\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n scope[`detailAlbedoMap${i}`] = pb.tex2D().uniform(2);\r\n scope[`detailNormalMap${i}`] = pb.tex2D().uniform(2);\r\n }\r\n } else {\r\n scope.splatMap = pb.tex2DArray().uniform(2);\r\n scope.detailAlbedoMap = pb.tex2DArray().uniform(2);\r\n scope.detailNormalMap = pb.tex2DArray().uniform(2);\r\n }\r\n }\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.$l.worldNormal = pb.normalize(scope.$inputs.worldNormal);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNormal,\r\n scope.$inputs.worldTangent,\r\n scope.$inputs.worldBinormal\r\n );\r\n if (this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP) > 0) {\r\n scope.normalInfo.normal = this.calculateDetailNormal(scope, scope.normalInfo.TBN);\r\n }\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n switch (this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE)) {\r\n case 'albedo':\r\n scope.$l.outColor = scope.albedo;\r\n break;\r\n case 'vertex_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[2], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'detail_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'tangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[0], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'bitangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[1], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'uv':\r\n scope.$l.outColor = pb.vec4(scope.$inputs.uv, 0, 1);\r\n break;\r\n default:\r\n scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n break;\r\n }\r\n //scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4(0, 0, 0, 0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n scope.outColor\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\r\n bindGroup.setValue('region', this._region);\r\n bindGroup.setValue('terrainScale', this._terrainScale);\r\n bindGroup.setTexture('heightMap', this._heightMap.get(), fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setBuffer('levelData', this._levelDataBuffer.get());\r\n if (this.needFragmentColor(ctx)) {\r\n if (this._detailMapInfo.numDetailMaps > 0) {\r\n bindGroup.setTexture('splatMap', this._detailMapInfo.splatMap.get());\r\n if (ctx.device.type === 'webgl') {\r\n for (let i = 0; i < this._detailMapInfo.numDetailMaps; i++) {\r\n bindGroup.setTexture(\r\n `detailAlbedoMap${i}`,\r\n this._detailMapInfo.detailMapList[i]?.get() ?? ClipmapTerrainMaterial.getDefaultDetailMap(),\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n `detailNormalMap${i}`,\r\n this._detailMapInfo.detailNormalMapList[i]?.get() ??\r\n ClipmapTerrainMaterial.getDefaultNormalMap(),\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n } else {\r\n bindGroup.setTexture(\r\n 'detailAlbedoMap',\r\n this._detailMapInfo.detailMap.get(),\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n 'detailNormalMap',\r\n this._detailMapInfo.detailNormalMap.get(),\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n bindGroup.setValue('detailParams', this._detailMapInfo.detailMapParams);\r\n }\r\n }\r\n }\r\n private createDetailMapInfo(): ClipmapTerrainDetailMapInfo {\r\n const device = getDevice();\r\n const isWebGL1 = device.type === 'webgl';\r\n const detailMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const detailNormalMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const splatMap = isWebGL1\r\n ? device.createTexture2D('rgba8unorm', this._splatMapSize, this._splatMapSize)\r\n : device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._splatMapSize,\r\n this._splatMapSize,\r\n MAX_DETAIL_MAPS >> 2\r\n );\r\n device.pushDeviceStates();\r\n if (!isWebGL1) {\r\n const fbDetail = device.createFrameBuffer([detailMap], null);\r\n device.setFramebuffer(fbDetail);\r\n for (let i = 0; i < detailMap.depth; i++) {\r\n fbDetail.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(Vector4.zero(), 1, 0);\r\n }\r\n fbDetail.dispose();\r\n const fbNormal = device.createFrameBuffer([detailNormalMap], null);\r\n device.setFramebuffer(fbNormal);\r\n for (let i = 0; i < detailNormalMap.depth; i++) {\r\n fbNormal.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(new Vector4(0.5, 0.5, 1, 1), 1, 0);\r\n }\r\n fbNormal.dispose();\r\n }\r\n const fbSplat = device.createFrameBuffer([splatMap], null);\r\n device.setFramebuffer(fbSplat);\r\n for (let i = 0; i < splatMap.depth; i++) {\r\n fbSplat.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(i === 0 ? new Vector4(1, 0, 0, 0) : Vector4.zero(), 1, 0);\r\n }\r\n device.popDeviceStates();\r\n fbSplat.dispose();\r\n return {\r\n detailMap: new DRef(detailMap),\r\n detailNormalMap: new DRef(detailNormalMap),\r\n detailMapList: [],\r\n detailNormalMapList: [],\r\n splatMap: new DRef(splatMap),\r\n detailMapParams: new Float32Array(MAX_DETAIL_MAPS * 4),\r\n numDetailMaps: 0\r\n };\r\n }\r\n\r\n protected onDispose(): void {\r\n super.onDispose();\r\n this._heightMap.dispose();\r\n this._levelDataBuffer.dispose();\r\n if (this._detailMapInfo) {\r\n this._detailMapInfo.detailMap?.dispose();\r\n this._detailMapInfo.detailNormalMap?.dispose();\r\n this._detailMapInfo.splatMap?.dispose();\r\n for (const tex of this._detailMapInfo.detailMapList) {\r\n tex.dispose();\r\n }\r\n for (const tex of this._detailMapInfo.detailNormalMapList) {\r\n tex.dispose();\r\n }\r\n this._detailMapInfo = null;\r\n }\r\n }\r\n static getDefaultDetailMap() {\r\n if (!ClipmapTerrainMaterial._defaultDetailMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1);\r\n tex.update(new Uint8Array([0, 0, 0, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultDetailMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultDetailMap.get();\r\n }\r\n static getDefaultNormalMap() {\r\n if (!ClipmapTerrainMaterial._defaultNormalMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1);\r\n tex.update(new Uint8Array([128, 128, 255, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultNormalMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultNormalMap.get();\r\n }\r\n}\r\n"],"names":["MAX_DETAIL_MAPS","ClipmapTerrainMaterial","applyMaterialMixins","MeshMaterial","mixinLight","mixinPBRMetallicRoughness","FEATURE_DETAIL_MAP","defineFeature","FEATURE_DEBUG_MODE","_defaultDetailMap","DRef","_defaultNormalMap","_region","_clipmapGridInfo","_heightMap","_terrainScale","_detailMapInfo","_detailMapSize","_splatMapSize","_heightMapSize","_levelDataBuffer","heightMap","metallic","roughness","albedoTexCoordIndex","normalTexCoordIndex","Vector4","getDevice","createBuffer","MAX_TERRAIN_MIPMAP_LEVELS","usage","createDetailMapInfo","Vector3","one","width","height","useFeature","MAX_DETAIL_MAP_COUNT","debugMode","featureUsed","mode","setLevelData","data","length","get","bufferSubData","region","val","equalsTo","set","uniformChanged","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","setXYZW","terrainScale","numDetailMaps","Number","isInteger","console","error","type","n","defaultDetailMap","getDefaultDetailMap","defaultNormalMap","getDefaultNormalMap","i","setDetailMap","setDetailNormalMap","setDetailMapUVScale","setDetailMapRoughness","detailMapList","dispose","detailNormalMapList","getSplatMap","splatMap","setSplatMap","tex","depth","getDetailMapUVScale","index","detailMapParams","scale","getDetailMapRoughness","getDetailMap","albedoMap","blitter","CopyBlitter","fb","createFrameBuffer","detailMap","blit","fetchSampler","getDetailNormalMap","normalMap","detailNormalMap","update","needSceneColor","needSceneDepth","supportInstancing","supportLighting","getMetallicRoughnessTexCoord","scope","$inputs","uv","sampleDetailNormalMap","texCoord","pb","$builder","sample","drawContext","device","textureSample","rgb","textureArraySample","normal","sub","mul","vec3","normalize","calculateDetailNormal","TBN","that","funcName","func","mat3","$l","detailNormal","detailParams","add","$return","getGlobalScope","getNormalTexCoord","calculateAlbedoColor","checkerPos","zw","xy","ddx","dpdx","ddy","dpdy","w","max","abs","div","fract","changeRate","fadeStart","float","fadeEnd","fadeFactor","smoothStep","checker","mix","checkerColor","vec4","color","detailAlbedoMap","sampleHeightMap","pos","levelStart","levelDiff","morphRange","vec2","h1","textureSampleLevel","miplevel","r","ratio","xyxy","maxVal","clamp","morphFactor","$if","greaterThan","h2","lessThan","calculateTerrainTBN","clipmapPos","texSize","tangent","bitangent","out","texelSize","exp2","delta","hL","hR","hD","hU","dHdU","dHdV","t","b","cross","calcTerrainTBN","vertexShader","position","attrib","clipmapInfo","clipmapGridInfo","uniform","levelData","uniformBuffer","tex2D","heightMapSize","s","sin","c","cos","scale2","clipmapMatrix","mat4","neg","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","$outputs","xz","int","$for","equal","at","$break","worldPos","worldTangent","worldBinormal","worldNormal","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","discardable","or","any","discard","needFragmentColor","tex2DArray","albedo","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","litColor","PBRLight","outColor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","setBuffer","isWebGL1","createTexture2DArray","createTexture2D","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","fbNormal","fbSplat","popDeviceStates","Float32Array","onDispose","Uint8Array"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"terrain-cm.js","sources":["../../src/material/terrain-cm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n GPUDataBuffer,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport type { DrawContext } from '../render';\r\nimport { MaterialVaryingFlags, MAX_TERRAIN_MIPMAP_LEVELS } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { mixinLight } from './mixins/lit';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype ClipmapTerrainDetailMapInfo = {\r\n detailMap: DRef<Texture2DArray>;\r\n detailNormalMap?: DRef<Texture2DArray>;\r\n detailMapList: DRef<Texture2D>[];\r\n detailNormalMapList: DRef<Texture2D>[];\r\n splatMap: DRef<Texture2DArray | Texture2D>;\r\n detailMapParams: Float32Array<ArrayBuffer>;\r\n numDetailMaps: number;\r\n};\r\n\r\nconst MAX_DETAIL_MAPS = 8;\r\n\r\n/**\r\n * Terrain debug rendering mode\r\n * @public\r\n */\r\nexport type TerrainDebugMode =\r\n | 'none'\r\n | 'vertex_normal'\r\n | 'detail_normal'\r\n | 'tangent'\r\n | 'uv'\r\n | 'bitangent'\r\n | 'albedo';\r\n\r\n/**\r\n * Default material type of clipmap terrain\r\n * @public\r\n */\r\nexport class ClipmapTerrainMaterial extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinLight,\r\n mixinPBRMetallicRoughness\r\n) {\r\n private static readonly FEATURE_DETAIL_MAP = this.defineFeature();\r\n private static readonly FEATURE_DEBUG_MODE = this.defineFeature();\r\n private static readonly _defaultDetailMap: DRef<Texture2D> = new DRef();\r\n private static readonly _defaultNormalMap: DRef<Texture2D> = new DRef();\r\n private readonly _region: Vector4;\r\n private readonly _clipmapGridInfo: Vector4;\r\n private readonly _heightMap: DRef<Texture2D>;\r\n private readonly _terrainScale: Vector3;\r\n private _detailMapInfo: ClipmapTerrainDetailMapInfo;\r\n private readonly _detailMapSize: number;\r\n private readonly _splatMapSize: number;\r\n private readonly _heightMapSize: Vector4;\r\n private readonly _levelDataBuffer: DRef<GPUDataBuffer>;\r\n constructor(heightMap: Texture2D) {\r\n super();\r\n this.metallic = 0;\r\n this.roughness = 1;\r\n this.albedoTexCoordIndex = -1;\r\n this.normalTexCoordIndex = -1;\r\n this._region = new Vector4(-99999, -99999, 99999, 99999);\r\n this._clipmapGridInfo = new Vector4();\r\n this._heightMap = new DRef(heightMap);\r\n this._detailMapSize = 256;\r\n this._splatMapSize = 512;\r\n this._levelDataBuffer = new DRef(\r\n getDevice().createBuffer(MAX_TERRAIN_MIPMAP_LEVELS * 4 * 2 * 4, { usage: 'uniform' })\r\n );\r\n this._detailMapInfo = this.createDetailMapInfo();\r\n this._terrainScale = Vector3.one();\r\n this._heightMapSize = new Vector4(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, 0);\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, 'none');\r\n }\r\n static get MAX_DETAIL_MAP_COUNT() {\r\n return MAX_DETAIL_MAPS;\r\n }\r\n get debugMode() {\r\n return this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE);\r\n }\r\n set debugMode(mode) {\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE, mode);\r\n }\r\n /** @internal */\r\n setLevelData(data: Float32Array<ArrayBuffer>, length: number) {\r\n this._levelDataBuffer.get()!.bufferSubData(0, data, 0, length);\r\n }\r\n /** @internal */\r\n get region() {\r\n return this._region;\r\n }\r\n set region(val: Vector4) {\r\n if (!val.equalsTo(this._region)) {\r\n this._region.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number) {\r\n if (\r\n this._clipmapGridInfo.x !== gridScale ||\r\n this._clipmapGridInfo.y !== gridOffsetX ||\r\n this._clipmapGridInfo.z !== gridOffsetY\r\n ) {\r\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n /** @internal */\r\n get terrainScale() {\r\n return this._terrainScale;\r\n }\r\n set terrainScale(val: Vector3) {\r\n if (!this._terrainScale.equalsTo(val)) {\r\n this._terrainScale.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get numDetailMaps() {\r\n return this._detailMapInfo.numDetailMaps;\r\n }\r\n set numDetailMaps(val: number) {\r\n if (val > MAX_DETAIL_MAPS || val < 0 || !Number.isInteger(val)) {\r\n console.error('Invalid number of detail maps');\r\n return;\r\n }\r\n if (getDevice().type === 'webgl' && val > 4) {\r\n console.error('Only 4 detail map layers is supported for WebGL1');\r\n return;\r\n }\r\n const n = this._detailMapInfo.numDetailMaps;\r\n const defaultDetailMap = ClipmapTerrainMaterial.getDefaultDetailMap();\r\n const defaultNormalMap = ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (val > n) {\r\n this._detailMapInfo.numDetailMaps = val;\r\n for (let i = n; i < val; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n } else if (val < n) {\r\n for (let i = val; i < n; i++) {\r\n this.setDetailMap(i, defaultDetailMap);\r\n this.setDetailNormalMap(i, defaultNormalMap);\r\n this.setDetailMapUVScale(i, 80);\r\n this.setDetailMapRoughness(i, 1);\r\n this._detailMapInfo.detailMapList[i].dispose();\r\n this._detailMapInfo.detailNormalMapList[i].dispose();\r\n }\r\n this._detailMapInfo.numDetailMaps = val;\r\n }\r\n this.useFeature(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP, this._detailMapInfo.numDetailMaps);\r\n }\r\n getSplatMap() {\r\n return this._detailMapInfo.splatMap?.get() ?? null;\r\n }\r\n setSplatMap(tex: Texture2DArray) {\r\n if (tex !== this._detailMapInfo.splatMap.get()) {\r\n if (!tex || tex.depth !== MAX_DETAIL_MAPS >> 2) {\r\n console.error('Invalid splat map');\r\n return;\r\n }\r\n this._detailMapInfo.splatMap.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapUVScale(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4];\r\n }\r\n setDetailMapUVScale(index: number, scale: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4] !== scale) {\r\n this._detailMapInfo.detailMapParams[index * 4] = scale;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMapRoughness(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return 0;\r\n }\r\n return this._detailMapInfo.detailMapParams[index * 4 + 1];\r\n }\r\n setDetailMapRoughness(index: number, val: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n if (this._detailMapInfo.detailMapParams[index * 4 + 1] !== val) {\r\n this._detailMapInfo.detailMapParams[index * 4 + 1] = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n getDetailMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailMapList[index].get();\r\n }\r\n setDetailMap(index: number, albedoMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n albedoMap = albedoMap ?? ClipmapTerrainMaterial.getDefaultDetailMap();\r\n if (!this._detailMapInfo.detailMapList[index]) {\r\n this._detailMapInfo.detailMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailMapList[index].set(\r\n albedoMap === ClipmapTerrainMaterial.getDefaultDetailMap() ? null : albedoMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailMap!.get()!], null);\r\n blitter.blit(\r\n albedoMap!,\r\n fb,\r\n index,\r\n albedoMap!.width === this._detailMapSize && albedoMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n getDetailNormalMap(index: number) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return null;\r\n }\r\n return this._detailMapInfo.detailNormalMapList[index].get();\r\n }\r\n setDetailNormalMap(index: number, normalMap: Nullable<Texture2D>) {\r\n if (index >= this._detailMapInfo.numDetailMaps || index < 0 || !Number.isInteger(index)) {\r\n console.error('Invalid detail map index');\r\n return;\r\n }\r\n normalMap = normalMap ?? ClipmapTerrainMaterial.getDefaultNormalMap();\r\n if (!this._detailMapInfo.detailNormalMapList[index]) {\r\n this._detailMapInfo.detailNormalMapList[index] = new DRef();\r\n }\r\n this._detailMapInfo.detailNormalMapList[index].set(\r\n normalMap === ClipmapTerrainMaterial.getDefaultNormalMap() ? null : normalMap\r\n );\r\n if (getDevice().type !== 'webgl') {\r\n const blitter = new CopyBlitter();\r\n const fb = getDevice().createFrameBuffer([this._detailMapInfo.detailNormalMap!.get()!], null);\r\n blitter.blit(\r\n normalMap!,\r\n fb,\r\n index,\r\n normalMap!.width === this._detailMapSize && normalMap!.height === this._detailMapSize\r\n ? fetchSampler('clamp_nearest_nomip')\r\n : fetchSampler('clamp_linear_nomip')\r\n );\r\n fb.dispose();\r\n }\r\n }\r\n /** @internal */\r\n update(region: Vector4, terrainScale: Vector3) {\r\n if (!region.equalsTo(this._region) || !terrainScale.equalsTo(this._terrainScale)) {\r\n this._region.set(region);\r\n this._terrainScale.set(terrainScale);\r\n this.uniformChanged();\r\n }\r\n }\r\n get heightMap() {\r\n return this._heightMap.get()!;\r\n }\r\n set heightMap(val: Texture2D) {\r\n if (val !== this._heightMap.get()) {\r\n this._heightMap.set(val);\r\n this._heightMapSize.setXYZW(\r\n this.heightMap.width,\r\n this.heightMap.height,\r\n 1 / this.heightMap.width,\r\n 1 / this.heightMap.height\r\n );\r\n this.uniformChanged();\r\n }\r\n }\r\n needSceneColor() {\r\n return false;\r\n }\r\n needSceneDepth() {\r\n return false;\r\n }\r\n supportInstancing() {\r\n return false;\r\n }\r\n supportLighting() {\r\n return true;\r\n }\r\n getMetallicRoughnessTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n sampleDetailNormalMap(scope: PBInsideFunctionScope, index: number, texCoord: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const sample =\r\n this.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(scope[`detailNormalMap${index}`], texCoord).rgb\r\n : pb.textureArraySample(scope.detailNormalMap, texCoord, index).rgb;\r\n const normal = pb.sub(pb.mul(sample, 2), pb.vec3(1));\r\n return pb.normalize(normal);\r\n }\r\n calculateDetailNormal(scope: PBInsideFunctionScope, TBN: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainNormal';\r\n pb.func(funcName, [pb.mat3('TBN')], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n this.$l.detailNormal = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n this.detailNormal = pb.add(\r\n this.detailNormal,\r\n pb.mul(that.sampleDetailNormalMap(this, i, uv), this[`mask${i >> 2}`][i & 3])\r\n );\r\n }\r\n this.$return(pb.normalize(pb.mul(this.TBN, this.detailNormal)));\r\n });\r\n return pb.getGlobalScope()[funcName](TBN);\r\n }\r\n getNormalTexCoord: (scope: PBInsideFunctionScope) => PBShaderExp = function (scope) {\r\n return scope.$inputs.uv;\r\n };\r\n calculateAlbedoColor(scope: PBInsideFunctionScope) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcName = 'getTerrainAlbedo';\r\n pb.func(funcName, [], function () {\r\n const numDetailMaps = that.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps === 0) {\r\n this.$l.checkerPos = pb.mul(this.$inputs.uv, pb.sub(this.region.zw, this.region.xy));\r\n this.$l.ddx = pb.dpdx(this.checkerPos);\r\n this.$l.ddy = pb.dpdy(this.checkerPos);\r\n this.$l.w = pb.add(pb.max(pb.abs(this.ddx), pb.abs(this.ddy)), 0.01);\r\n this.$l.i = pb.div(\r\n pb.mul(\r\n 2,\r\n pb.sub(\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.sub(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5)),\r\n pb.abs(pb.sub(pb.fract(pb.mul(pb.add(this.checkerPos, pb.mul(this.w, 0.5)), 0.5)), 0.5))\r\n )\r\n ),\r\n this.w\r\n );\r\n this.$l.changeRate = pb.add(pb.length(this.ddx), pb.length(this.ddy));\r\n this.$l.fadeStart = pb.float(0);\r\n this.$l.fadeEnd = pb.float(10);\r\n this.$l.fadeFactor = pb.sub(1, pb.smoothStep(this.fadeStart, this.fadeEnd, this.changeRate));\r\n this.$l.checker = pb.mix(0.5, pb.sub(0.5, pb.mul(0.5, this.i.x, this.i.y)), this.fadeFactor);\r\n this.$l.checkerColor = pb.mix(pb.vec3(0.4), pb.vec3(1), pb.vec3(this.checker));\r\n this.$return(pb.vec4(this.checkerColor, 1));\r\n } else {\r\n this.$l.color = pb.vec3(0);\r\n for (let i = 0; i < (numDetailMaps + 3) >> 2; i++) {\r\n this.$l[`mask${i}`] =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this.splatMap, this.$inputs.uv)\r\n : pb.textureArraySample(this.splatMap, this.$inputs.uv, i);\r\n }\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n const uv = pb.mul(this.$inputs.uv, this.detailParams[i].x);\r\n const sample =\r\n that.drawContext.device.type === 'webgl'\r\n ? pb.textureSample(this[`detailAlbedoMap${i}`], uv).rgb\r\n : pb.textureArraySample(this.detailAlbedoMap, uv, i).rgb;\r\n this.color = pb.add(this.color, pb.mul(sample, this[`mask${i >> 2}`][i & 3]));\r\n }\r\n this.$return(pb.vec4(this.color, 1));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName]() as PBShaderExp;\r\n }\r\n sampleHeightMap(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n pos: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const morphRange = 0.5;\r\n pb.func(\r\n 'sampleHeightMap',\r\n [pb.vec2('uv'), pb.vec2('pos'), pb.vec4('levelStart'), pb.vec4('levelDiff')],\r\n function () {\r\n this.$l.h1 = pb.textureSampleLevel(this.heightMap, this.uv, this.$inputs.miplevel).r;\r\n this.$l.ratio = pb.mul(pb.sub(this.pos.xyxy, this.levelStart), this.levelDiff);\r\n this.$l.maxVal = pb.clamp(\r\n pb.max(pb.max(this.ratio.x, this.ratio.y), pb.max(this.ratio.z, this.ratio.w)),\r\n 0,\r\n 1\r\n );\r\n this.$l.morphFactor = pb.float(0);\r\n this.$if(pb.greaterThan(this.maxVal, 1 - morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(this.heightMap, this.uv, pb.add(this.$inputs.miplevel, 1)).r;\r\n this.morphFactor = pb.div(pb.sub(this.maxVal, 1 - morphRange), morphRange * 2);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$if(pb.lessThan(this.maxVal, morphRange), function () {\r\n this.$l.h2 = pb.textureSampleLevel(\r\n this.heightMap,\r\n this.uv,\r\n pb.max(pb.sub(this.$inputs.miplevel, 1), 0)\r\n ).r;\r\n this.morphFactor = pb.mul(pb.add(pb.div(this.maxVal, morphRange), 1), 0.5);\r\n this.h1 = pb.mix(this.h1, this.h2, this.morphFactor);\r\n });\r\n this.$return(this.h1);\r\n }\r\n );\r\n return scope.sampleHeightMap(uv, pos, levelStart, levelDiff);\r\n }\r\n calculateTerrainTBN(\r\n scope: PBInsideFunctionScope,\r\n clipmapPos: PBShaderExp,\r\n uv: PBShaderExp,\r\n texSize: PBShaderExp,\r\n scale: PBShaderExp,\r\n levelStart: PBShaderExp,\r\n levelDiff: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp,\r\n normal: PBShaderExp\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'calcTerrainTBN',\r\n [\r\n pb.vec2('clipmapPos'),\r\n pb.vec2('uv'),\r\n pb.vec4('texSize'),\r\n pb.vec3('scale'),\r\n pb.vec4('levelStart'),\r\n pb.vec4('levelDiff'),\r\n pb.vec3('t').out(),\r\n pb.vec3('b').out(),\r\n pb.vec3('n').out()\r\n ],\r\n function () {\r\n this.$l.texelSize = pb.mul(this.texSize.zw, pb.exp2(this.$inputs.miplevel));\r\n this.$l.delta = pb.exp2(pb.add(this.$inputs.miplevel, 1));\r\n this.$l.hL = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hR = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(this.texelSize.x, 0)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hD = that.sampleHeightMap(\r\n this,\r\n pb.add(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.hU = that.sampleHeightMap(\r\n this,\r\n pb.sub(this.uv, pb.vec2(0, this.texelSize.y)),\r\n this.clipmapPos,\r\n this.levelStart,\r\n this.levelDiff\r\n );\r\n this.$l.dHdU = pb.div(\r\n pb.mul(pb.sub(this.hR, this.hL), this.scale.y),\r\n pb.mul(this.scale.x, this.delta)\r\n );\r\n this.$l.dHdV = pb.div(\r\n pb.mul(pb.sub(this.hD, this.hU), this.scale.y),\r\n pb.mul(this.scale.z, this.delta)\r\n );\r\n this.t = pb.normalize(pb.vec3(1, this.dHdU, 0));\r\n this.b = pb.normalize(pb.vec3(0, this.dHdV, 1));\r\n this.n = pb.normalize(pb.cross(this.b, this.t));\r\n }\r\n );\r\n return scope.calcTerrainTBN(\r\n clipmapPos,\r\n uv,\r\n texSize,\r\n scale,\r\n levelStart,\r\n levelDiff,\r\n tangent,\r\n bitangent,\r\n normal\r\n ) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$inputs.position = pb.vec3().attrib('position');\r\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\r\n scope.$inputs.miplevel = pb.float().attrib('texCoord1');\r\n scope.clipmapGridInfo = pb.vec4().uniform(2);\r\n scope.levelData = pb.vec4[MAX_TERRAIN_MIPMAP_LEVELS * 2]().uniformBuffer(2);\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n scope.heightMapSize = pb.vec4().uniform(2);\r\n scope.region = pb.vec4().uniform(2);\r\n scope.terrainScale = pb.vec3().uniform(2);\r\n\r\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\r\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\r\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\r\n scope.$l.clipmapMatrix = pb.mat4(\r\n pb.mul(scope.c, scope.scale2),\r\n pb.mul(scope.s, scope.scale2),\r\n 0,\r\n 0,\r\n pb.neg(pb.mul(scope.s, scope.scale2)),\r\n pb.mul(scope.c, scope.scale2),\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\r\n 0,\r\n 1\r\n );\r\n\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\r\n\r\n scope.$l.clipmapWorldPos = pb.mul(\r\n ShaderHelper.getWorldMatrix(scope),\r\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\r\n ).xyz;\r\n scope.$outputs.uv = pb.div(\r\n pb.sub(scope.clipmapWorldPos.xz, scope.region.xy),\r\n pb.sub(scope.region.zw, scope.region.xy)\r\n );\r\n\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.$l.levelStart = pb.vec4();\r\n scope.$l.levelDiff = pb.vec4();\r\n scope.$l.index = pb.mul(pb.int(scope.$inputs.miplevel), 2);\r\n scope.$for(pb.int('i'), 0, 32, function () {\r\n this.$if(pb.equal(this.i, this.index), function () {\r\n this.levelStart = this.levelData.at(this.i);\r\n this.levelDiff = this.levelData.at(pb.add(this.i, 1));\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n scope.$l.levelStart = scope.levelData.at(pb.mul(pb.int(scope.$inputs.miplevel), 2));\r\n scope.$l.levelDiff = scope.levelData.at(pb.add(pb.mul(pb.int(scope.$inputs.miplevel), 2), 1));\r\n }\r\n\r\n scope.$l.height = this.sampleHeightMap(\r\n scope,\r\n scope.$outputs.uv,\r\n scope.clipmapWorldPos.xz,\r\n scope.levelStart,\r\n scope.levelDiff\r\n );\r\n scope.$outputs.worldPos = pb.add(\r\n scope.clipmapWorldPos,\r\n pb.vec3(0, pb.mul(scope.height, scope.terrainScale.y), 0)\r\n );\r\n scope.$l.t = pb.vec3();\r\n scope.$l.b = pb.vec3();\r\n scope.$l.n = pb.vec3();\r\n this.calculateTerrainTBN(\r\n scope,\r\n scope.clipmapWorldPos.xz,\r\n scope.$outputs.uv,\r\n scope.heightMapSize,\r\n scope.terrainScale,\r\n scope.levelStart,\r\n scope.levelDiff,\r\n scope.t,\r\n scope.b,\r\n scope.n\r\n );\r\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\r\n scope.$outputs.worldTangent = scope.t;\r\n scope.$outputs.worldBinormal = scope.b;\r\n scope.$outputs.worldNormal = scope.n;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n scope.region = pb.vec4().uniform(2);\r\n scope.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(scope.$inputs.uv, pb.vec2(0))),\r\n pb.any(pb.greaterThan(scope.$inputs.uv, pb.vec2(1)))\r\n );\r\n scope.$if(scope.discardable, function () {\r\n pb.discard();\r\n });\r\n if (this.needFragmentColor()) {\r\n scope.heightMap = pb.tex2D().uniform(2);\r\n const numDetailMaps = this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP);\r\n if (numDetailMaps > 0) {\r\n scope.detailParams = pb.vec4[numDetailMaps]().uniform(2);\r\n if (this.drawContext.device.type === 'webgl') {\r\n scope.splatMap = pb.tex2D().uniform(2);\r\n for (let i = 0; i < numDetailMaps; i++) {\r\n scope[`detailAlbedoMap${i}`] = pb.tex2D().uniform(2);\r\n scope[`detailNormalMap${i}`] = pb.tex2D().uniform(2);\r\n }\r\n } else {\r\n scope.splatMap = pb.tex2DArray().uniform(2);\r\n scope.detailAlbedoMap = pb.tex2DArray().uniform(2);\r\n scope.detailNormalMap = pb.tex2DArray().uniform(2);\r\n }\r\n }\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n scope.$l.worldNormal = pb.normalize(scope.$inputs.worldNormal);\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.worldNormal,\r\n scope.$inputs.worldTangent,\r\n scope.$inputs.worldBinormal\r\n );\r\n if (this.featureUsed<number>(ClipmapTerrainMaterial.FEATURE_DETAIL_MAP) > 0) {\r\n scope.normalInfo.normal = this.calculateDetailNormal(scope, scope.normalInfo.TBN);\r\n }\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n switch (this.featureUsed<TerrainDebugMode>(ClipmapTerrainMaterial.FEATURE_DEBUG_MODE)) {\r\n case 'albedo':\r\n scope.$l.outColor = scope.albedo;\r\n break;\r\n case 'vertex_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[2], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'detail_normal':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'tangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[0], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'bitangent':\r\n scope.$l.outColor = pb.vec4(pb.add(pb.mul(scope.normalInfo.TBN[1], 0.5), pb.vec3(0.5)), 1);\r\n break;\r\n case 'uv':\r\n scope.$l.outColor = pb.vec4(scope.$inputs.uv, 0, 1);\r\n break;\r\n default:\r\n scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n break;\r\n }\r\n //scope.$l.outColor = pb.vec4(scope.litColor, 1);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$l.outRoughness = pb.vec4(0, 0, 0, 0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n scope.outColor\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\r\n bindGroup.setValue('region', this._region);\r\n bindGroup.setValue('terrainScale', this._terrainScale);\r\n bindGroup.setTexture('heightMap', this._heightMap.get()!, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('heightMapSize', this._heightMapSize);\r\n bindGroup.setBuffer('levelData', this._levelDataBuffer.get()!);\r\n if (this.needFragmentColor(ctx)) {\r\n if (this._detailMapInfo.numDetailMaps > 0) {\r\n bindGroup.setTexture('splatMap', this._detailMapInfo.splatMap.get()!);\r\n if (ctx.device.type === 'webgl') {\r\n for (let i = 0; i < this._detailMapInfo.numDetailMaps; i++) {\r\n bindGroup.setTexture(\r\n `detailAlbedoMap${i}`,\r\n this._detailMapInfo.detailMapList[i]?.get() ?? ClipmapTerrainMaterial.getDefaultDetailMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n `detailNormalMap${i}`,\r\n this._detailMapInfo.detailNormalMapList[i]?.get() ??\r\n ClipmapTerrainMaterial.getDefaultNormalMap()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n } else {\r\n bindGroup.setTexture(\r\n 'detailAlbedoMap',\r\n this._detailMapInfo.detailMap.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setTexture(\r\n 'detailNormalMap',\r\n this._detailMapInfo.detailNormalMap!.get()!,\r\n fetchSampler('repeat_linear')\r\n );\r\n }\r\n bindGroup.setValue('detailParams', this._detailMapInfo.detailMapParams);\r\n }\r\n }\r\n }\r\n private createDetailMapInfo() {\r\n const device = getDevice();\r\n const isWebGL1 = device.type === 'webgl';\r\n const detailMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const detailNormalMap = isWebGL1\r\n ? null\r\n : device.createTexture2DArray('rgba8unorm', this._detailMapSize, this._detailMapSize, MAX_DETAIL_MAPS);\r\n const splatMap = isWebGL1\r\n ? device.createTexture2D('rgba8unorm', this._splatMapSize, this._splatMapSize)\r\n : device.createTexture2DArray(\r\n 'rgba8unorm',\r\n this._splatMapSize,\r\n this._splatMapSize,\r\n MAX_DETAIL_MAPS >> 2\r\n );\r\n device.pushDeviceStates();\r\n if (!isWebGL1) {\r\n const fbDetail = device.createFrameBuffer([detailMap!], null);\r\n device.setFramebuffer(fbDetail);\r\n for (let i = 0; i < detailMap!.depth; i++) {\r\n fbDetail.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(Vector4.zero(), 1, 0);\r\n }\r\n fbDetail.dispose();\r\n const fbNormal = device.createFrameBuffer([detailNormalMap!], null);\r\n device.setFramebuffer(fbNormal);\r\n for (let i = 0; i < detailNormalMap!.depth; i++) {\r\n fbNormal.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(new Vector4(0.5, 0.5, 1, 1), 1, 0);\r\n }\r\n fbNormal.dispose();\r\n }\r\n const fbSplat = device.createFrameBuffer([splatMap!], null);\r\n device.setFramebuffer(fbSplat);\r\n for (let i = 0; i < splatMap!.depth; i++) {\r\n fbSplat.setColorAttachmentLayer(0, i);\r\n device.clearFrameBuffer(i === 0 ? new Vector4(1, 0, 0, 0) : Vector4.zero(), 1, 0);\r\n }\r\n device.popDeviceStates();\r\n fbSplat.dispose();\r\n return {\r\n detailMap: new DRef(detailMap),\r\n detailNormalMap: new DRef(detailNormalMap),\r\n detailMapList: [],\r\n detailNormalMapList: [],\r\n splatMap: new DRef(splatMap),\r\n detailMapParams: new Float32Array(MAX_DETAIL_MAPS * 4),\r\n numDetailMaps: 0\r\n };\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n this._heightMap.dispose();\r\n this._levelDataBuffer.dispose();\r\n if (this._detailMapInfo) {\r\n this._detailMapInfo.detailMap?.dispose();\r\n this._detailMapInfo.detailNormalMap?.dispose();\r\n this._detailMapInfo.splatMap?.dispose();\r\n for (const tex of this._detailMapInfo.detailMapList) {\r\n tex.dispose();\r\n }\r\n for (const tex of this._detailMapInfo.detailNormalMapList) {\r\n tex.dispose();\r\n }\r\n }\r\n }\r\n static getDefaultDetailMap() {\r\n if (!ClipmapTerrainMaterial._defaultDetailMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([0, 0, 0, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultDetailMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultDetailMap.get();\r\n }\r\n static getDefaultNormalMap() {\r\n if (!ClipmapTerrainMaterial._defaultNormalMap.get()) {\r\n const device = getDevice();\r\n const tex = device.createTexture2D('rgba8unorm', 1, 1)!;\r\n tex.update(new Uint8Array([128, 128, 255, 255]), 0, 0, 1, 1);\r\n ClipmapTerrainMaterial._defaultNormalMap.set(tex);\r\n }\r\n return ClipmapTerrainMaterial._defaultNormalMap.get();\r\n }\r\n}\r\n"],"names":["MAX_DETAIL_MAPS","ClipmapTerrainMaterial","applyMaterialMixins","MeshMaterial","mixinLight","mixinPBRMetallicRoughness","FEATURE_DETAIL_MAP","defineFeature","FEATURE_DEBUG_MODE","_defaultDetailMap","DRef","_defaultNormalMap","_region","_clipmapGridInfo","_heightMap","_terrainScale","_detailMapInfo","_detailMapSize","_splatMapSize","_heightMapSize","_levelDataBuffer","heightMap","metallic","roughness","albedoTexCoordIndex","normalTexCoordIndex","Vector4","getDevice","createBuffer","MAX_TERRAIN_MIPMAP_LEVELS","usage","createDetailMapInfo","Vector3","one","width","height","useFeature","MAX_DETAIL_MAP_COUNT","debugMode","featureUsed","mode","setLevelData","data","length","get","bufferSubData","region","val","equalsTo","set","uniformChanged","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","setXYZW","terrainScale","numDetailMaps","Number","isInteger","console","error","type","n","defaultDetailMap","getDefaultDetailMap","defaultNormalMap","getDefaultNormalMap","i","setDetailMap","setDetailNormalMap","setDetailMapUVScale","setDetailMapRoughness","detailMapList","dispose","detailNormalMapList","getSplatMap","splatMap","setSplatMap","tex","depth","getDetailMapUVScale","index","detailMapParams","scale","getDetailMapRoughness","getDetailMap","albedoMap","blitter","CopyBlitter","fb","createFrameBuffer","detailMap","blit","fetchSampler","getDetailNormalMap","normalMap","detailNormalMap","update","needSceneColor","needSceneDepth","supportInstancing","supportLighting","getMetallicRoughnessTexCoord","scope","$inputs","uv","sampleDetailNormalMap","texCoord","pb","$builder","sample","drawContext","device","textureSample","rgb","textureArraySample","normal","sub","mul","vec3","normalize","calculateDetailNormal","TBN","that","funcName","func","mat3","$l","detailNormal","detailParams","add","$return","getGlobalScope","getNormalTexCoord","calculateAlbedoColor","checkerPos","zw","xy","ddx","dpdx","ddy","dpdy","w","max","abs","div","fract","changeRate","fadeStart","float","fadeEnd","fadeFactor","smoothStep","checker","mix","checkerColor","vec4","color","detailAlbedoMap","sampleHeightMap","pos","levelStart","levelDiff","morphRange","vec2","h1","textureSampleLevel","miplevel","r","ratio","xyxy","maxVal","clamp","morphFactor","$if","greaterThan","h2","lessThan","calculateTerrainTBN","clipmapPos","texSize","tangent","bitangent","out","texelSize","exp2","delta","hL","hR","hD","hU","dHdU","dHdV","t","b","cross","calcTerrainTBN","vertexShader","position","attrib","clipmapInfo","clipmapGridInfo","uniform","levelData","uniformBuffer","tex2D","heightMapSize","s","sin","c","cos","scale2","clipmapMatrix","mat4","neg","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","$outputs","xz","int","$for","equal","at","$break","worldPos","worldTangent","worldBinormal","worldNormal","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","discardable","or","any","discard","needFragmentColor","tex2DArray","albedo","normalInfo","calculateNormalAndTBN","viewVec","calculateViewVector","litColor","PBRLight","outColor","materialFlags","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","outRoughness","outputFragmentColor","applyUniformValues","bindGroup","ctx","pass","setValue","setTexture","setBuffer","isWebGL1","createTexture2DArray","createTexture2D","pushDeviceStates","fbDetail","setFramebuffer","setColorAttachmentLayer","clearFrameBuffer","zero","fbNormal","fbSplat","popDeviceStates","Float32Array","onDispose","Uint8Array"],"mappings":";;;;;;;;;;;;AA+BA,MAAMA,eAAkB,GAAA,CAAA;AAexB;;;AAGC,IACM,MAAMC,sBAA+BC,SAAAA,mBAAAA,CAC1CC,cACAC,UACAC,EAAAA,yBAAAA,CAAAA,CAAAA;AAEA,IAAA,OAAwBC,kBAAqB,GAAA,IAAI,CAACC,aAAa,EAAG;AAClE,IAAA,OAAwBC,kBAAqB,GAAA,IAAI,CAACD,aAAa,EAAG;IAClE,OAAwBE,iBAAAA,GAAqC,IAAIC,IAAO,EAAA;IACxE,OAAwBC,iBAAAA,GAAqC,IAAID,IAAO,EAAA;IACvDE,OAAiB;IACjBC,gBAA0B;IAC1BC,UAA4B;IAC5BC,aAAuB;IAChCC,cAA4C;IACnCC,cAAuB;IACvBC,aAAsB;IACtBC,cAAwB;IACxBC,gBAAsC;AACvD,IAAA,WAAA,CAAYC,SAAoB,CAAE;QAChC,KAAK,EAAA;QACL,IAAI,CAACC,QAAQ,GAAG,CAAA;QAChB,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,mBAAmB,GAAG,EAAC;QAC5B,IAAI,CAACC,mBAAmB,GAAG,EAAC;QAC5B,IAAI,CAACb,OAAO,GAAG,IAAIc,QAAQ,MAAC,EAAO,MAAC,EAAO,KAAO,EAAA,KAAA,CAAA;QAClD,IAAI,CAACb,gBAAgB,GAAG,IAAIa,OAAAA,EAAAA;AAC5B,QAAA,IAAI,CAACZ,UAAU,GAAG,IAAIJ,IAAKW,CAAAA,SAAAA,CAAAA;QAC3B,IAAI,CAACJ,cAAc,GAAG,GAAA;QACtB,IAAI,CAACC,aAAa,GAAG,GAAA;QACrB,IAAI,CAACE,gBAAgB,GAAG,IAAIV,IAAAA,CAC1BiB,SAAYC,EAAAA,CAAAA,YAAY,CAACC,yBAAAA,GAA4B,CAAI,GAAA,CAAA,GAAI,CAAG,EAAA;YAAEC,KAAO,EAAA;AAAU,SAAA,CAAA,CAAA;AAErF,QAAA,IAAI,CAACd,cAAc,GAAG,IAAI,CAACe,mBAAmB,EAAA;AAC9C,QAAA,IAAI,CAAChB,aAAa,GAAGiB,OAAAA,CAAQC,GAAG,EAAA;AAChC,QAAA,IAAI,CAACd,cAAc,GAAG,IAAIO,OACxB,CAAA,IAAI,CAACL,SAAS,CAACa,KAAK,EACpB,IAAI,CAACb,SAAS,CAACc,MAAM,EACrB,CAAA,GAAI,IAAI,CAACd,SAAS,CAACa,KAAK,EACxB,CAAI,GAAA,IAAI,CAACb,SAAS,CAACc,MAAM,CAAA;AAE3B,QAAA,IAAI,CAACC,UAAU,CAACnC,sBAAAA,CAAuBK,kBAAkB,EAAE,CAAA,CAAA;AAC3D,QAAA,IAAI,CAAC8B,UAAU,CAACnC,sBAAAA,CAAuBO,kBAAkB,EAAE,MAAA,CAAA;AAC7D;AACA,IAAA,WAAW6B,oBAAuB,GAAA;QAChC,OAAOrC,eAAAA;AACT;AACA,IAAA,IAAIsC,SAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAACC,WAAW,CAAmBtC,uBAAuBO,kBAAkB,CAAA;AACrF;IACA,IAAI8B,SAAAA,CAAUE,IAAI,EAAE;AAClB,QAAA,IAAI,CAACJ,UAAU,CAACnC,sBAAAA,CAAuBO,kBAAkB,EAAEgC,IAAAA,CAAAA;AAC7D;AACA,qBACAC,YAAAA,CAAaC,IAA+B,EAAEC,MAAc,EAAE;QAC5D,IAAI,CAACvB,gBAAgB,CAACwB,GAAG,GAAIC,aAAa,CAAC,CAAGH,EAAAA,IAAAA,EAAM,CAAGC,EAAAA,MAAAA,CAAAA;AACzD;qBAEA,IAAIG,MAAS,GAAA;QACX,OAAO,IAAI,CAAClC,OAAO;AACrB;IACA,IAAIkC,MAAAA,CAAOC,GAAY,EAAE;AACvB,QAAA,IAAI,CAACA,GAAIC,CAAAA,QAAQ,CAAC,IAAI,CAACpC,OAAO,CAAG,EAAA;AAC/B,YAAA,IAAI,CAACA,OAAO,CAACqC,GAAG,CAACF,GAAAA,CAAAA;AACjB,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;AACAC,IAAAA,kBAAAA,CAAmBC,SAAiB,EAAEC,WAAmB,EAAEC,WAAmB,EAAE;QAC9E,IACE,IAAI,CAACzC,gBAAgB,CAAC0C,CAAC,KAAKH,SAAAA,IAC5B,IAAI,CAACvC,gBAAgB,CAAC2C,CAAC,KAAKH,eAC5B,IAAI,CAACxC,gBAAgB,CAAC4C,CAAC,KAAKH,WAC5B,EAAA;AACA,YAAA,IAAI,CAACzC,gBAAgB,CAAC6C,OAAO,CAACN,SAAAA,EAAWC,aAAaC,WAAa,EAAA,CAAA,CAAA;AACnE,YAAA,IAAI,CAACJ,cAAc,EAAA;AACrB;AACF;qBAEA,IAAIS,YAAe,GAAA;QACjB,OAAO,IAAI,CAAC5C,aAAa;AAC3B;IACA,IAAI4C,YAAAA,CAAaZ,GAAY,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAChC,aAAa,CAACiC,QAAQ,CAACD,GAAM,CAAA,EAAA;AACrC,YAAA,IAAI,CAAChC,aAAa,CAACkC,GAAG,CAACF,GAAAA,CAAAA;AACvB,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAIU,aAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC5C,cAAc,CAAC4C,aAAa;AAC1C;IACA,IAAIA,aAAAA,CAAcb,GAAW,EAAE;QAC7B,IAAIA,GAAAA,GAAM/C,mBAAmB+C,GAAM,GAAA,CAAA,IAAK,CAACc,MAAOC,CAAAA,SAAS,CAACf,GAAM,CAAA,EAAA;AAC9DgB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,+BAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,IAAIrC,SAAYsC,EAAAA,CAAAA,IAAI,KAAK,OAAA,IAAWlB,MAAM,CAAG,EAAA;AAC3CgB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,kDAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAME,CAAI,GAAA,IAAI,CAAClD,cAAc,CAAC4C,aAAa;QAC3C,MAAMO,gBAAAA,GAAmBlE,uBAAuBmE,mBAAmB,EAAA;QACnE,MAAMC,gBAAAA,GAAmBpE,uBAAuBqE,mBAAmB,EAAA;AACnE,QAAA,IAAIvB,MAAMmB,CAAG,EAAA;AACX,YAAA,IAAI,CAAClD,cAAc,CAAC4C,aAAa,GAAGb,GAAAA;AACpC,YAAA,IAAK,IAAIwB,CAAAA,GAAIL,CAAGK,EAAAA,CAAAA,GAAIxB,KAAKwB,CAAK,EAAA,CAAA;gBAC5B,IAAI,CAACC,YAAY,CAACD,CAAGJ,EAAAA,gBAAAA,CAAAA;gBACrB,IAAI,CAACM,kBAAkB,CAACF,CAAGF,EAAAA,gBAAAA,CAAAA;gBAC3B,IAAI,CAACK,mBAAmB,CAACH,CAAG,EAAA,EAAA,CAAA;gBAC5B,IAAI,CAACI,qBAAqB,CAACJ,CAAG,EAAA,CAAA,CAAA;AAC9B,gBAAA,IAAI,CAACvD,cAAc,CAAC4D,aAAa,CAACL,CAAAA,CAAE,CAACM,OAAO,EAAA;AAC5C,gBAAA,IAAI,CAAC7D,cAAc,CAAC8D,mBAAmB,CAACP,CAAAA,CAAE,CAACM,OAAO,EAAA;AACpD;SACK,MAAA,IAAI9B,MAAMmB,CAAG,EAAA;AAClB,YAAA,IAAK,IAAIK,CAAAA,GAAIxB,GAAKwB,EAAAA,CAAAA,GAAIL,GAAGK,CAAK,EAAA,CAAA;gBAC5B,IAAI,CAACC,YAAY,CAACD,CAAGJ,EAAAA,gBAAAA,CAAAA;gBACrB,IAAI,CAACM,kBAAkB,CAACF,CAAGF,EAAAA,gBAAAA,CAAAA;gBAC3B,IAAI,CAACK,mBAAmB,CAACH,CAAG,EAAA,EAAA,CAAA;gBAC5B,IAAI,CAACI,qBAAqB,CAACJ,CAAG,EAAA,CAAA,CAAA;AAC9B,gBAAA,IAAI,CAACvD,cAAc,CAAC4D,aAAa,CAACL,CAAAA,CAAE,CAACM,OAAO,EAAA;AAC5C,gBAAA,IAAI,CAAC7D,cAAc,CAAC8D,mBAAmB,CAACP,CAAAA,CAAE,CAACM,OAAO,EAAA;AACpD;AACA,YAAA,IAAI,CAAC7D,cAAc,CAAC4C,aAAa,GAAGb,GAAAA;AACtC;QACA,IAAI,CAACX,UAAU,CAACnC,sBAAuBK,CAAAA,kBAAkB,EAAE,IAAI,CAACU,cAAc,CAAC4C,aAAa,CAAA;AAC9F;IACAmB,WAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC/D,cAAc,CAACgE,QAAQ,EAAEpC,GAAS,EAAA,IAAA,IAAA;AAChD;AACAqC,IAAAA,WAAAA,CAAYC,GAAmB,EAAE;QAC/B,IAAIA,GAAAA,KAAQ,IAAI,CAAClE,cAAc,CAACgE,QAAQ,CAACpC,GAAG,EAAI,EAAA;AAC9C,YAAA,IAAI,CAACsC,GAAOA,IAAAA,GAAAA,CAAIC,KAAK,KAAKnF,mBAAmB,CAAG,EAAA;AAC9C+D,gBAAAA,OAAAA,CAAQC,KAAK,CAAC,mBAAA,CAAA;AACd,gBAAA;AACF;AACA,YAAA,IAAI,CAAChD,cAAc,CAACgE,QAAQ,CAAC/B,GAAG,CAACiC,GAAAA,CAAAA;AACjC,YAAA,IAAI,CAAChC,cAAc,EAAA;AACrB;AACF;AACAkC,IAAAA,mBAAAA,CAAoBC,KAAa,EAAE;AACjC,QAAA,IAAIA,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;YACd,OAAO,CAAA;AACT;AACA,QAAA,OAAO,IAAI,CAAChD,cAAc,CAACsE,eAAe,CAACD,QAAQ,CAAE,CAAA;AACvD;IACAX,mBAAoBW,CAAAA,KAAa,EAAEE,KAAa,EAAE;AAChD,QAAA,IAAIF,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;AACd,YAAA;AACF;QACA,IAAI,IAAI,CAAChD,cAAc,CAACsE,eAAe,CAACD,KAAAA,GAAQ,CAAE,CAAA,KAAKE,KAAO,EAAA;AAC5D,YAAA,IAAI,CAACvE,cAAc,CAACsE,eAAe,CAACD,KAAAA,GAAQ,EAAE,GAAGE,KAAAA;AACjD,YAAA,IAAI,CAACrC,cAAc,EAAA;AACrB;AACF;AACAsC,IAAAA,qBAAAA,CAAsBH,KAAa,EAAE;AACnC,QAAA,IAAIA,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;YACd,OAAO,CAAA;AACT;QACA,OAAO,IAAI,CAAChD,cAAc,CAACsE,eAAe,CAACD,KAAAA,GAAQ,IAAI,CAAE,CAAA;AAC3D;IACAV,qBAAsBU,CAAAA,KAAa,EAAEtC,GAAW,EAAE;AAChD,QAAA,IAAIsC,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;AACd,YAAA;AACF;QACA,IAAI,IAAI,CAAChD,cAAc,CAACsE,eAAe,CAACD,KAAQ,GAAA,CAAA,GAAI,CAAE,CAAA,KAAKtC,GAAK,EAAA;YAC9D,IAAI,CAAC/B,cAAc,CAACsE,eAAe,CAACD,KAAQ,GAAA,CAAA,GAAI,EAAE,GAAGtC,GAAAA;AACrD,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;AACAuC,IAAAA,YAAAA,CAAaJ,KAAa,EAAE;AAC1B,QAAA,IAAIA,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,OAAO,IAAI,CAAChD,cAAc,CAAC4D,aAAa,CAACS,KAAAA,CAAM,CAACzC,GAAG,EAAA;AACrD;IACA4B,YAAaa,CAAAA,KAAa,EAAEK,SAA8B,EAAE;AAC1D,QAAA,IAAIL,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;AACd,YAAA;AACF;QACA0B,SAAYA,GAAAA,SAAAA,IAAazF,uBAAuBmE,mBAAmB,EAAA;QACnE,IAAI,CAAC,IAAI,CAACpD,cAAc,CAAC4D,aAAa,CAACS,MAAM,EAAE;AAC7C,YAAA,IAAI,CAACrE,cAAc,CAAC4D,aAAa,CAACS,KAAAA,CAAM,GAAG,IAAI3E,IAAAA,EAAAA;AACjD;AACA,QAAA,IAAI,CAACM,cAAc,CAAC4D,aAAa,CAACS,KAAAA,CAAM,CAACpC,GAAG,CAC1CyC,SAAAA,KAAczF,sBAAuBmE,CAAAA,mBAAmB,KAAK,IAAOsB,GAAAA,SAAAA,CAAAA;QAEtE,IAAI/D,SAAAA,EAAAA,CAAYsC,IAAI,KAAK,OAAS,EAAA;AAChC,YAAA,MAAM0B,UAAU,IAAIC,WAAAA,EAAAA;YACpB,MAAMC,EAAAA,GAAKlE,SAAYmE,EAAAA,CAAAA,iBAAiB,CAAC;AAAC,gBAAA,IAAI,CAAC9E,cAAc,CAAC+E,SAAS,CAAEnD,GAAG;aAAI,EAAE,IAAA,CAAA;YAClF+C,OAAQK,CAAAA,IAAI,CACVN,SACAG,EAAAA,EAAAA,EACAR,OACAK,SAAWxD,CAAAA,KAAK,KAAK,IAAI,CAACjB,cAAc,IAAIyE,SAAAA,CAAWvD,MAAM,KAAK,IAAI,CAAClB,cAAc,GACjFgF,YAAa,CAAA,qBAAA,CAAA,GACbA,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEnBJ,YAAAA,EAAAA,CAAGhB,OAAO,EAAA;AACZ;AACF;AACAqB,IAAAA,kBAAAA,CAAmBb,KAAa,EAAE;AAChC,QAAA,IAAIA,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,OAAO,IAAI,CAAChD,cAAc,CAAC8D,mBAAmB,CAACO,KAAAA,CAAM,CAACzC,GAAG,EAAA;AAC3D;IACA6B,kBAAmBY,CAAAA,KAAa,EAAEc,SAA8B,EAAE;AAChE,QAAA,IAAId,KAAS,IAAA,IAAI,CAACrE,cAAc,CAAC4C,aAAa,IAAIyB,KAAAA,GAAQ,CAAK,IAAA,CAACxB,MAAOC,CAAAA,SAAS,CAACuB,KAAQ,CAAA,EAAA;AACvFtB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;AACd,YAAA;AACF;QACAmC,SAAYA,GAAAA,SAAAA,IAAalG,uBAAuBqE,mBAAmB,EAAA;QACnE,IAAI,CAAC,IAAI,CAACtD,cAAc,CAAC8D,mBAAmB,CAACO,MAAM,EAAE;AACnD,YAAA,IAAI,CAACrE,cAAc,CAAC8D,mBAAmB,CAACO,KAAAA,CAAM,GAAG,IAAI3E,IAAAA,EAAAA;AACvD;AACA,QAAA,IAAI,CAACM,cAAc,CAAC8D,mBAAmB,CAACO,KAAAA,CAAM,CAACpC,GAAG,CAChDkD,SAAAA,KAAclG,sBAAuBqE,CAAAA,mBAAmB,KAAK,IAAO6B,GAAAA,SAAAA,CAAAA;QAEtE,IAAIxE,SAAAA,EAAAA,CAAYsC,IAAI,KAAK,OAAS,EAAA;AAChC,YAAA,MAAM0B,UAAU,IAAIC,WAAAA,EAAAA;YACpB,MAAMC,EAAAA,GAAKlE,SAAYmE,EAAAA,CAAAA,iBAAiB,CAAC;AAAC,gBAAA,IAAI,CAAC9E,cAAc,CAACoF,eAAe,CAAExD,GAAG;aAAI,EAAE,IAAA,CAAA;YACxF+C,OAAQK,CAAAA,IAAI,CACVG,SACAN,EAAAA,EAAAA,EACAR,OACAc,SAAWjE,CAAAA,KAAK,KAAK,IAAI,CAACjB,cAAc,IAAIkF,SAAAA,CAAWhE,MAAM,KAAK,IAAI,CAAClB,cAAc,GACjFgF,YAAa,CAAA,qBAAA,CAAA,GACbA,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEnBJ,YAAAA,EAAAA,CAAGhB,OAAO,EAAA;AACZ;AACF;AACA,qBACAwB,MAAAA,CAAOvD,MAAe,EAAEa,YAAqB,EAAE;AAC7C,QAAA,IAAI,CAACb,MAAAA,CAAOE,QAAQ,CAAC,IAAI,CAACpC,OAAO,CAAK,IAAA,CAAC+C,aAAaX,QAAQ,CAAC,IAAI,CAACjC,aAAa,CAAG,EAAA;AAChF,YAAA,IAAI,CAACH,OAAO,CAACqC,GAAG,CAACH,MAAAA,CAAAA;AACjB,YAAA,IAAI,CAAC/B,aAAa,CAACkC,GAAG,CAACU,YAAAA,CAAAA;AACvB,YAAA,IAAI,CAACT,cAAc,EAAA;AACrB;AACF;AACA,IAAA,IAAI7B,SAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAACP,UAAU,CAAC8B,GAAG,EAAA;AAC5B;IACA,IAAIvB,SAAAA,CAAU0B,GAAc,EAAE;AAC5B,QAAA,IAAIA,QAAQ,IAAI,CAACjC,UAAU,CAAC8B,GAAG,EAAI,EAAA;AACjC,YAAA,IAAI,CAAC9B,UAAU,CAACmC,GAAG,CAACF,GAAAA,CAAAA;AACpB,YAAA,IAAI,CAAC5B,cAAc,CAACuC,OAAO,CACzB,IAAI,CAACrC,SAAS,CAACa,KAAK,EACpB,IAAI,CAACb,SAAS,CAACc,MAAM,EACrB,CAAA,GAAI,IAAI,CAACd,SAAS,CAACa,KAAK,EACxB,CAAI,GAAA,IAAI,CAACb,SAAS,CAACc,MAAM,CAAA;AAE3B,YAAA,IAAI,CAACe,cAAc,EAAA;AACrB;AACF;IACAoD,cAAiB,GAAA;QACf,OAAO,KAAA;AACT;IACAC,cAAiB,GAAA;QACf,OAAO,KAAA;AACT;IACAC,iBAAoB,GAAA;QAClB,OAAO,KAAA;AACT;IACAC,eAAkB,GAAA;QAChB,OAAO,IAAA;AACT;AACAC,IAAAA,4BAAAA,GAA8E,SAAUC,KAAK,EAAA;QAC3F,OAAOA,KAAAA,CAAMC,OAAO,CAACC,EAAE;KACvB;AACFC,IAAAA,qBAAAA,CAAsBH,KAA4B,EAAEtB,KAAa,EAAE0B,QAAqB,EAAE;QACxF,MAAMC,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,QAAA,MAAMC,MACJ,GAAA,IAAI,CAACC,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAC7B+C,GAAAA,EAAAA,CAAGK,aAAa,CAACV,KAAK,CAAC,CAAC,eAAe,EAAEtB,KAAO,CAAA,CAAA,CAAC,EAAE0B,QAAAA,CAAAA,CAAUO,GAAG,GAChEN,EAAAA,CAAGO,kBAAkB,CAACZ,KAAMP,CAAAA,eAAe,EAAEW,QAAAA,EAAU1B,OAAOiC,GAAG;QACvE,MAAME,MAAAA,GAASR,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGU,GAAG,CAACR,MAAQ,EAAA,CAAA,CAAA,EAAIF,EAAGW,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA;QACjD,OAAOX,EAAAA,CAAGY,SAAS,CAACJ,MAAAA,CAAAA;AACtB;IACAK,qBAAsBlB,CAAAA,KAA4B,EAAEmB,GAAgB,EAAE;AACpE,QAAA,MAAMC,OAAO,IAAI;QACjB,MAAMf,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,QAAA,MAAMe,QAAW,GAAA,kBAAA;QACjBhB,EAAGiB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAChB,YAAAA,EAAAA,CAAGkB,IAAI,CAAC,KAAA;SAAO,EAAE,WAAA;AAClC,YAAA,MAAMtE,aAAgBmE,GAAAA,IAAAA,CAAKxF,WAAW,CAAStC,uBAAuBK,kBAAkB,CAAA;AACxF,YAAA,IAAI,CAAC6H,EAAE,CAACC,YAAY,GAAGpB,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA;YAC/B,IAAK,IAAIpD,IAAI,CAAGA,EAAAA,CAAAA,GAAI,aAAiB,GAAA,CAAA,IAAM,GAAGA,CAAK,EAAA,CAAA;AACjD,gBAAA,IAAI,CAAC4D,EAAE,CAAC,CAAC,IAAI,EAAE5D,GAAG,CAAC,GACjBwD,KAAKZ,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAC7B+C,GAAAA,EAAAA,CAAGK,aAAa,CAAC,IAAI,CAACrC,QAAQ,EAAE,IAAI,CAAC4B,OAAO,CAACC,EAAE,IAC/CG,EAAGO,CAAAA,kBAAkB,CAAC,IAAI,CAACvC,QAAQ,EAAE,IAAI,CAAC4B,OAAO,CAACC,EAAE,EAAEtC,CAAAA,CAAAA;AAC9D;AACA,YAAA,IAAK,IAAIA,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIX,eAAeW,CAAK,EAAA,CAAA;AACtC,gBAAA,MAAMsC,KAAKG,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAACd,OAAO,CAACC,EAAE,EAAE,IAAI,CAACwB,YAAY,CAAC9D,CAAAA,CAAE,CAAChB,CAAC,CAAA;AACzD,gBAAA,IAAI,CAAC6E,YAAY,GAAGpB,EAAAA,CAAGsB,GAAG,CACxB,IAAI,CAACF,YAAY,EACjBpB,EAAGU,CAAAA,GAAG,CAACK,IAAKjB,CAAAA,qBAAqB,CAAC,IAAI,EAAEvC,CAAAA,EAAGsC,EAAK,CAAA,EAAA,IAAI,CAAC,CAAC,IAAI,EAAEtC,CAAK,IAAA,CAAA,CAAA,CAAG,CAAC,CAACA,IAAI,CAAE,CAAA,CAAA,CAAA;AAEhF;AACA,YAAA,IAAI,CAACgE,OAAO,CAACvB,EAAAA,CAAGY,SAAS,CAACZ,EAAAA,CAAGU,GAAG,CAAC,IAAI,CAACI,GAAG,EAAE,IAAI,CAACM,YAAY,CAAA,CAAA,CAAA;AAC9D,SAAA,CAAA;AACA,QAAA,OAAOpB,EAAGwB,CAAAA,cAAc,EAAE,CAACR,SAAS,CAACF,GAAAA,CAAAA;AACvC;AACAW,IAAAA,iBAAAA,GAAmE,SAAU9B,KAAK,EAAA;QAChF,OAAOA,KAAAA,CAAMC,OAAO,CAACC,EAAE;KACvB;AACF6B,IAAAA,oBAAAA,CAAqB/B,KAA4B,EAAE;AACjD,QAAA,MAAMoB,OAAO,IAAI;QACjB,MAAMf,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,QAAA,MAAMe,QAAW,GAAA,kBAAA;AACjBhB,QAAAA,EAAAA,CAAGiB,IAAI,CAACD,QAAU,EAAA,EAAE,EAAE,WAAA;AACpB,YAAA,MAAMpE,aAAgBmE,GAAAA,IAAAA,CAAKxF,WAAW,CAAStC,uBAAuBK,kBAAkB,CAAA;AACxF,YAAA,IAAIsD,kBAAkB,CAAG,EAAA;gBACvB,IAAI,CAACuE,EAAE,CAACQ,UAAU,GAAG3B,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAACd,OAAO,CAACC,EAAE,EAAEG,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC3E,MAAM,CAAC8F,EAAE,EAAE,IAAI,CAAC9F,MAAM,CAAC+F,EAAE,CAAA,CAAA;gBAClF,IAAI,CAACV,EAAE,CAACW,GAAG,GAAG9B,GAAG+B,IAAI,CAAC,IAAI,CAACJ,UAAU,CAAA;gBACrC,IAAI,CAACR,EAAE,CAACa,GAAG,GAAGhC,GAAGiC,IAAI,CAAC,IAAI,CAACN,UAAU,CAAA;gBACrC,IAAI,CAACR,EAAE,CAACe,CAAC,GAAGlC,GAAGsB,GAAG,CAACtB,EAAGmC,CAAAA,GAAG,CAACnC,EAAAA,CAAGoC,GAAG,CAAC,IAAI,CAACN,GAAG,CAAG9B,EAAAA,EAAAA,CAAGoC,GAAG,CAAC,IAAI,CAACJ,GAAG,CAAI,CAAA,EAAA,IAAA,CAAA;AAC/D,gBAAA,IAAI,CAACb,EAAE,CAAC5D,CAAC,GAAGyC,EAAGqC,CAAAA,GAAG,CAChBrC,EAAAA,CAAGU,GAAG,CACJ,CAAA,EACAV,EAAGS,CAAAA,GAAG,CACJT,EAAGoC,CAAAA,GAAG,CAACpC,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGsC,KAAK,CAACtC,GAAGU,GAAG,CAACV,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACkB,UAAU,EAAE3B,GAAGU,GAAG,CAAC,IAAI,CAACwB,CAAC,EAAE,GAAA,CAAA,CAAA,EAAO,GAAO,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,EACnFlC,GAAGoC,GAAG,CAACpC,EAAGS,CAAAA,GAAG,CAACT,EAAGsC,CAAAA,KAAK,CAACtC,EAAAA,CAAGU,GAAG,CAACV,EAAAA,CAAGsB,GAAG,CAAC,IAAI,CAACK,UAAU,EAAE3B,EAAAA,CAAGU,GAAG,CAAC,IAAI,CAACwB,CAAC,EAAE,GAAO,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,EAAO,GAGvF,CAAA,CAAA,CAAA,CAAA,EAAA,IAAI,CAACA,CAAC,CAAA;gBAER,IAAI,CAACf,EAAE,CAACoB,UAAU,GAAGvC,EAAGsB,CAAAA,GAAG,CAACtB,EAAGrE,CAAAA,MAAM,CAAC,IAAI,CAACmG,GAAG,CAAG9B,EAAAA,EAAAA,CAAGrE,MAAM,CAAC,IAAI,CAACqG,GAAG,CAAA,CAAA;AACnE,gBAAA,IAAI,CAACb,EAAE,CAACqB,SAAS,GAAGxC,EAAAA,CAAGyC,KAAK,CAAC,CAAA,CAAA;AAC7B,gBAAA,IAAI,CAACtB,EAAE,CAACuB,OAAO,GAAG1C,EAAAA,CAAGyC,KAAK,CAAC,EAAA,CAAA;gBAC3B,IAAI,CAACtB,EAAE,CAACwB,UAAU,GAAG3C,EAAGS,CAAAA,GAAG,CAAC,CAAA,EAAGT,EAAG4C,CAAAA,UAAU,CAAC,IAAI,CAACJ,SAAS,EAAE,IAAI,CAACE,OAAO,EAAE,IAAI,CAACH,UAAU,CAAA,CAAA;AAC1F,gBAAA,IAAI,CAACpB,EAAE,CAAC0B,OAAO,GAAG7C,EAAAA,CAAG8C,GAAG,CAAC,GAAK9C,EAAAA,EAAAA,CAAGS,GAAG,CAAC,KAAKT,EAAGU,CAAAA,GAAG,CAAC,GAAA,EAAK,IAAI,CAACnD,CAAC,CAAChB,CAAC,EAAE,IAAI,CAACgB,CAAC,CAACf,CAAC,CAAI,CAAA,EAAA,IAAI,CAACmG,UAAU,CAAA;gBAC3F,IAAI,CAACxB,EAAE,CAAC4B,YAAY,GAAG/C,EAAG8C,CAAAA,GAAG,CAAC9C,EAAGW,CAAAA,IAAI,CAAC,GAAMX,CAAAA,EAAAA,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA,EAAIX,GAAGW,IAAI,CAAC,IAAI,CAACkC,OAAO,CAAA,CAAA;gBAC5E,IAAI,CAACtB,OAAO,CAACvB,EAAAA,CAAGgD,IAAI,CAAC,IAAI,CAACD,YAAY,EAAE,CAAA,CAAA,CAAA;aACnC,MAAA;AACL,gBAAA,IAAI,CAAC5B,EAAE,CAAC8B,KAAK,GAAGjD,EAAAA,CAAGW,IAAI,CAAC,CAAA,CAAA;gBACxB,IAAK,IAAIpD,IAAI,CAAGA,EAAAA,CAAAA,GAAI,aAAiB,GAAA,CAAA,IAAM,GAAGA,CAAK,EAAA,CAAA;AACjD,oBAAA,IAAI,CAAC4D,EAAE,CAAC,CAAC,IAAI,EAAE5D,GAAG,CAAC,GACjBwD,KAAKZ,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAC7B+C,GAAAA,EAAAA,CAAGK,aAAa,CAAC,IAAI,CAACrC,QAAQ,EAAE,IAAI,CAAC4B,OAAO,CAACC,EAAE,IAC/CG,EAAGO,CAAAA,kBAAkB,CAAC,IAAI,CAACvC,QAAQ,EAAE,IAAI,CAAC4B,OAAO,CAACC,EAAE,EAAEtC,CAAAA,CAAAA;AAC9D;AACA,gBAAA,IAAK,IAAIA,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIX,eAAeW,CAAK,EAAA,CAAA;AACtC,oBAAA,MAAMsC,KAAKG,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAACd,OAAO,CAACC,EAAE,EAAE,IAAI,CAACwB,YAAY,CAAC9D,CAAAA,CAAE,CAAChB,CAAC,CAAA;AACzD,oBAAA,MAAM2D,MACJa,GAAAA,IAAAA,CAAKZ,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAAA,GAC7B+C,EAAGK,CAAAA,aAAa,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE9C,CAAAA,CAAAA,CAAG,CAAC,EAAEsC,EAAIS,CAAAA,CAAAA,GAAG,GACrDN,EAAGO,CAAAA,kBAAkB,CAAC,IAAI,CAAC2C,eAAe,EAAErD,EAAAA,EAAItC,GAAG+C,GAAG;oBAC5D,IAAI,CAAC2C,KAAK,GAAGjD,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAAC2B,KAAK,EAAEjD,EAAGU,CAAAA,GAAG,CAACR,MAAQ,EAAA,IAAI,CAAC,CAAC,IAAI,EAAE3C,KAAK,CAAG,CAAA,CAAA,CAAC,CAACA,CAAAA,GAAI,CAAE,CAAA,CAAA,CAAA;AAC7E;gBACA,IAAI,CAACgE,OAAO,CAACvB,EAAAA,CAAGgD,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE,CAAA,CAAA,CAAA;AACnC;AACF,SAAA,CAAA;AACA,QAAA,OAAOjD,EAAGwB,CAAAA,cAAc,EAAE,CAACR,QAAS,CAAA,EAAA;AACtC;IACAmC,eACExD,CAAAA,KAA4B,EAC5BE,EAAe,EACfuD,GAAgB,EAChBC,UAAuB,EACvBC,SAAsB,EACtB;QACA,MAAMtD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,QAAA,MAAMsD,UAAa,GAAA,GAAA;QACnBvD,EAAGiB,CAAAA,IAAI,CACL,iBACA,EAAA;AAACjB,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,IAAA,CAAA;AAAOxD,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,KAAA,CAAA;AAAQxD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,YAAA,CAAA;AAAehD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,WAAA;SAAa,EAC5E,WAAA;YACE,IAAI,CAAC7B,EAAE,CAACsC,EAAE,GAAGzD,EAAG0D,CAAAA,kBAAkB,CAAC,IAAI,CAACrJ,SAAS,EAAE,IAAI,CAACwF,EAAE,EAAE,IAAI,CAACD,OAAO,CAAC+D,QAAQ,CAAA,CAAEC,CAAC;YACpF,IAAI,CAACzC,EAAE,CAAC0C,KAAK,GAAG7D,EAAGU,CAAAA,GAAG,CAACV,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC2C,GAAG,CAACU,IAAI,EAAE,IAAI,CAACT,UAAU,CAAA,EAAG,IAAI,CAACC,SAAS,CAAA;AAC7E,YAAA,IAAI,CAACnC,EAAE,CAAC4C,MAAM,GAAG/D,EAAAA,CAAGgE,KAAK,CACvBhE,EAAAA,CAAGmC,GAAG,CAACnC,GAAGmC,GAAG,CAAC,IAAI,CAAC0B,KAAK,CAACtH,CAAC,EAAE,IAAI,CAACsH,KAAK,CAACrH,CAAC,GAAGwD,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAAC0B,KAAK,CAACpH,CAAC,EAAE,IAAI,CAACoH,KAAK,CAAC3B,CAAC,IAC5E,CACA,EAAA,CAAA,CAAA;AAEF,YAAA,IAAI,CAACf,EAAE,CAAC8C,WAAW,GAAGjE,EAAAA,CAAGyC,KAAK,CAAC,CAAA,CAAA;YAC/B,IAAI,CAACyB,GAAG,CAAClE,EAAGmE,CAAAA,WAAW,CAAC,IAAI,CAACJ,MAAM,EAAE,CAAA,GAAIR,UAAa,CAAA,EAAA,WAAA;gBACpD,IAAI,CAACpC,EAAE,CAACiD,EAAE,GAAGpE,EAAG0D,CAAAA,kBAAkB,CAAC,IAAI,CAACrJ,SAAS,EAAE,IAAI,CAACwF,EAAE,EAAEG,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAAC1B,OAAO,CAAC+D,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAIC,CAAC;AAC/F,gBAAA,IAAI,CAACK,WAAW,GAAGjE,EAAAA,CAAGqC,GAAG,CAACrC,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACsD,MAAM,EAAE,CAAA,GAAIR,aAAaA,UAAa,GAAA,CAAA,CAAA;AAC5E,gBAAA,IAAI,CAACE,EAAE,GAAGzD,EAAG8C,CAAAA,GAAG,CAAC,IAAI,CAACW,EAAE,EAAE,IAAI,CAACW,EAAE,EAAE,IAAI,CAACH,WAAW,CAAA;AACrD,aAAA,CAAA;YACA,IAAI,CAACC,GAAG,CAAClE,EAAGqE,CAAAA,QAAQ,CAAC,IAAI,CAACN,MAAM,EAAER,UAAa,CAAA,EAAA,WAAA;AAC7C,gBAAA,IAAI,CAACpC,EAAE,CAACiD,EAAE,GAAGpE,EAAAA,CAAG0D,kBAAkB,CAChC,IAAI,CAACrJ,SAAS,EACd,IAAI,CAACwF,EAAE,EACPG,EAAAA,CAAGmC,GAAG,CAACnC,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACb,OAAO,CAAC+D,QAAQ,EAAE,CAAA,CAAA,EAAI,IACzCC,CAAC;AACH,gBAAA,IAAI,CAACK,WAAW,GAAGjE,EAAGU,CAAAA,GAAG,CAACV,EAAGsB,CAAAA,GAAG,CAACtB,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAAC0B,MAAM,EAAER,aAAa,CAAI,CAAA,EAAA,GAAA,CAAA;AACtE,gBAAA,IAAI,CAACE,EAAE,GAAGzD,EAAG8C,CAAAA,GAAG,CAAC,IAAI,CAACW,EAAE,EAAE,IAAI,CAACW,EAAE,EAAE,IAAI,CAACH,WAAW,CAAA;AACrD,aAAA,CAAA;AACA,YAAA,IAAI,CAAC1C,OAAO,CAAC,IAAI,CAACkC,EAAE,CAAA;AACtB,SAAA,CAAA;AAEF,QAAA,OAAO9D,KAAMwD,CAAAA,eAAe,CAACtD,EAAAA,EAAIuD,KAAKC,UAAYC,EAAAA,SAAAA,CAAAA;AACpD;AACAgB,IAAAA,mBAAAA,CACE3E,KAA4B,EAC5B4E,UAAuB,EACvB1E,EAAe,EACf2E,OAAoB,EACpBjG,KAAkB,EAClB8E,UAAuB,EACvBC,SAAsB,EACtBmB,OAAoB,EACpBC,SAAsB,EACtBlE,MAAmB,EACnB;AACA,QAAA,MAAMO,OAAO,IAAI;QACjB,MAAMf,EAAAA,GAAKL,MAAMM,QAAQ;QACzBD,EAAGiB,CAAAA,IAAI,CACL,gBACA,EAAA;AACEjB,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,YAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGwD,IAAI,CAAC,IAAA,CAAA;AACRxD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,SAAA,CAAA;AACRhD,YAAAA,EAAAA,CAAGW,IAAI,CAAC,OAAA,CAAA;AACRX,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,YAAA,CAAA;AACRhD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,WAAA,CAAA;YACRhD,EAAGW,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAKgE,GAAG,EAAA;YAChB3E,EAAGW,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAKgE,GAAG,EAAA;YAChB3E,EAAGW,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAKgE,GAAG;SACjB,EACD,WAAA;YACE,IAAI,CAACxD,EAAE,CAACyD,SAAS,GAAG5E,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAAC8D,OAAO,CAAC5C,EAAE,EAAE5B,EAAG6E,CAAAA,IAAI,CAAC,IAAI,CAACjF,OAAO,CAAC+D,QAAQ,CAAA,CAAA;AACzE,YAAA,IAAI,CAACxC,EAAE,CAAC2D,KAAK,GAAG9E,GAAG6E,IAAI,CAAC7E,EAAGsB,CAAAA,GAAG,CAAC,IAAI,CAAC1B,OAAO,CAAC+D,QAAQ,EAAE,CAAA,CAAA,CAAA;AACtD,YAAA,IAAI,CAACxC,EAAE,CAAC4D,EAAE,GAAGhE,KAAKoC,eAAe,CAC/B,IAAI,EACJnD,GAAGS,GAAG,CAAC,IAAI,CAACZ,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,IAAI,CAACoB,SAAS,CAACrI,CAAC,EAAE,CAC1C,CAAA,CAAA,EAAA,IAAI,CAACgI,UAAU,EACf,IAAI,CAAClB,UAAU,EACf,IAAI,CAACC,SAAS,CAAA;AAEhB,YAAA,IAAI,CAACnC,EAAE,CAAC6D,EAAE,GAAGjE,KAAKoC,eAAe,CAC/B,IAAI,EACJnD,GAAGsB,GAAG,CAAC,IAAI,CAACzB,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,IAAI,CAACoB,SAAS,CAACrI,CAAC,EAAE,CAC1C,CAAA,CAAA,EAAA,IAAI,CAACgI,UAAU,EACf,IAAI,CAAClB,UAAU,EACf,IAAI,CAACC,SAAS,CAAA;AAEhB,YAAA,IAAI,CAACnC,EAAE,CAAC8D,EAAE,GAAGlE,KAAKoC,eAAe,CAC/B,IAAI,EACJnD,GAAGsB,GAAG,CAAC,IAAI,CAACzB,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,GAAG,IAAI,CAACoB,SAAS,CAACpI,CAAC,CAC3C,CAAA,EAAA,IAAI,CAAC+H,UAAU,EACf,IAAI,CAAClB,UAAU,EACf,IAAI,CAACC,SAAS,CAAA;AAEhB,YAAA,IAAI,CAACnC,EAAE,CAAC+D,EAAE,GAAGnE,KAAKoC,eAAe,CAC/B,IAAI,EACJnD,GAAGS,GAAG,CAAC,IAAI,CAACZ,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,GAAG,IAAI,CAACoB,SAAS,CAACpI,CAAC,CAC3C,CAAA,EAAA,IAAI,CAAC+H,UAAU,EACf,IAAI,CAAClB,UAAU,EACf,IAAI,CAACC,SAAS,CAAA;AAEhB,YAAA,IAAI,CAACnC,EAAE,CAACgE,IAAI,GAAGnF,GAAGqC,GAAG,CACnBrC,EAAGU,CAAAA,GAAG,CAACV,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACuE,EAAE,EAAE,IAAI,CAACD,EAAE,GAAG,IAAI,CAACxG,KAAK,CAAC/B,CAAC,GAC7CwD,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAACnC,KAAK,CAAChC,CAAC,EAAE,IAAI,CAACuI,KAAK,CAAA,CAAA;AAEjC,YAAA,IAAI,CAAC3D,EAAE,CAACiE,IAAI,GAAGpF,GAAGqC,GAAG,CACnBrC,EAAGU,CAAAA,GAAG,CAACV,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACwE,EAAE,EAAE,IAAI,CAACC,EAAE,GAAG,IAAI,CAAC3G,KAAK,CAAC/B,CAAC,GAC7CwD,EAAGU,CAAAA,GAAG,CAAC,IAAI,CAACnC,KAAK,CAAC9B,CAAC,EAAE,IAAI,CAACqI,KAAK,CAAA,CAAA;AAEjC,YAAA,IAAI,CAACO,CAAC,GAAGrF,EAAAA,CAAGY,SAAS,CAACZ,EAAGW,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACwE,IAAI,EAAE,CAAA,CAAA,CAAA;AAC5C,YAAA,IAAI,CAACG,CAAC,GAAGtF,EAAAA,CAAGY,SAAS,CAACZ,EAAGW,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACyE,IAAI,EAAE,CAAA,CAAA,CAAA;AAC5C,YAAA,IAAI,CAAClI,CAAC,GAAG8C,EAAAA,CAAGY,SAAS,CAACZ,EAAAA,CAAGuF,KAAK,CAAC,IAAI,CAACD,CAAC,EAAE,IAAI,CAACD,CAAC,CAAA,CAAA;AAC/C,SAAA,CAAA;QAEF,OAAO1F,KAAAA,CAAM6F,cAAc,CACzBjB,UACA1E,EAAAA,EAAAA,EACA2E,SACAjG,KACA8E,EAAAA,UAAAA,EACAC,SACAmB,EAAAA,OAAAA,EACAC,SACAlE,EAAAA,MAAAA,CAAAA;AAEJ;AACAiF,IAAAA,YAAAA,CAAa9F,KAAsB,EAAE;AACnC,QAAA,KAAK,CAAC8F,YAAa9F,CAAAA,KAAAA,CAAAA;QACnB,MAAMK,EAAAA,GAAKL,MAAMM,QAAQ;QACzBN,KAAMC,CAAAA,OAAO,CAAC8F,QAAQ,GAAG1F,GAAGW,IAAI,EAAA,CAAGgF,MAAM,CAAC,UAAA,CAAA;QAC1ChG,KAAMC,CAAAA,OAAO,CAACgG,WAAW,GAAG5F,GAAGgD,IAAI,EAAA,CAAG2C,MAAM,CAAC,WAAA,CAAA;QAC7ChG,KAAMC,CAAAA,OAAO,CAAC+D,QAAQ,GAAG3D,GAAGyC,KAAK,EAAA,CAAGkD,MAAM,CAAC,WAAA,CAAA;AAC3ChG,QAAAA,KAAAA,CAAMkG,eAAe,GAAG7F,EAAAA,CAAGgD,IAAI,EAAA,CAAG8C,OAAO,CAAC,CAAA,CAAA;QAC1CnG,KAAMoG,CAAAA,SAAS,GAAG/F,EAAGgD,CAAAA,IAAI,CAACnI,yBAA4B,GAAA,CAAA,CAAE,EAAGmL,CAAAA,aAAa,CAAC,CAAA,CAAA;AACzErG,QAAAA,KAAAA,CAAMtF,SAAS,GAAG2F,EAAAA,CAAGiG,KAAK,EAAA,CAAGH,OAAO,CAAC,CAAA,CAAA;AACrCnG,QAAAA,KAAAA,CAAMuG,aAAa,GAAGlG,EAAAA,CAAGgD,IAAI,EAAA,CAAG8C,OAAO,CAAC,CAAA,CAAA;AACxCnG,QAAAA,KAAAA,CAAM7D,MAAM,GAAGkE,EAAAA,CAAGgD,IAAI,EAAA,CAAG8C,OAAO,CAAC,CAAA,CAAA;AACjCnG,QAAAA,KAAAA,CAAMhD,YAAY,GAAGqD,EAAAA,CAAGW,IAAI,EAAA,CAAGmF,OAAO,CAAC,CAAA,CAAA;AAEvCnG,QAAAA,KAAAA,CAAMwB,EAAE,CAACgF,CAAC,GAAGnG,EAAGoG,CAAAA,GAAG,CAACzG,KAAAA,CAAMC,OAAO,CAACgG,WAAW,CAACrJ,CAAC,CAAA;AAC/CoD,QAAAA,KAAAA,CAAMwB,EAAE,CAACkF,CAAC,GAAGrG,EAAGsG,CAAAA,GAAG,CAAC3G,KAAAA,CAAMC,OAAO,CAACgG,WAAW,CAACrJ,CAAC,CAAA;AAC/CoD,QAAAA,KAAAA,CAAMwB,EAAE,CAACoF,MAAM,GAAGvG,EAAAA,CAAGU,GAAG,CAACf,KAAAA,CAAMC,OAAO,CAACgG,WAAW,CAACpJ,CAAC,EAAEmD,KAAMkG,CAAAA,eAAe,CAACtJ,CAAC,CAAA;QAC7EoD,KAAMwB,CAAAA,EAAE,CAACqF,aAAa,GAAGxG,GAAGyG,IAAI,CAC9BzG,EAAGU,CAAAA,GAAG,CAACf,KAAAA,CAAM0G,CAAC,EAAE1G,KAAAA,CAAM4G,MAAM,CAC5BvG,EAAAA,EAAAA,CAAGU,GAAG,CAACf,KAAAA,CAAMwG,CAAC,EAAExG,KAAM4G,CAAAA,MAAM,GAC5B,CACA,EAAA,CAAA,EACAvG,GAAG0G,GAAG,CAAC1G,GAAGU,GAAG,CAACf,KAAMwG,CAAAA,CAAC,EAAExG,KAAAA,CAAM4G,MAAM,CACnCvG,CAAAA,EAAAA,EAAAA,CAAGU,GAAG,CAACf,KAAAA,CAAM0G,CAAC,EAAE1G,KAAAA,CAAM4G,MAAM,CAAA,EAC5B,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACAvG,EAAGS,CAAAA,GAAG,CAACT,EAAGU,CAAAA,GAAG,CAACf,KAAAA,CAAMC,OAAO,CAACgG,WAAW,CAACnJ,CAAC,EAAEkD,KAAMkG,CAAAA,eAAe,CAACtJ,CAAC,CAAA,EAAGoD,KAAMkG,CAAAA,eAAe,CAACrJ,CAAC,GAC5FwD,EAAGS,CAAAA,GAAG,CAACT,EAAGU,CAAAA,GAAG,CAACf,KAAMC,CAAAA,OAAO,CAACgG,WAAW,CAAC1D,CAAC,EAAEvC,KAAMkG,CAAAA,eAAe,CAACtJ,CAAC,CAAA,EAAGoD,MAAMkG,eAAe,CAACpJ,CAAC,CAAA,EAC5F,CACA,EAAA,CAAA,CAAA;AAGFkD,QAAAA,KAAAA,CAAMwB,EAAE,CAACoD,UAAU,GAAGvE,EAAGU,CAAAA,GAAG,CAACf,KAAM6G,CAAAA,aAAa,EAAExG,EAAGgD,CAAAA,IAAI,CAACrD,KAAMC,CAAAA,OAAO,CAAC8F,QAAQ,EAAE,IAAI7D,EAAE;QAExFlC,KAAMwB,CAAAA,EAAE,CAACwF,eAAe,GAAG3G,EAAAA,CAAGU,GAAG,CAC/BkG,YAAaC,CAAAA,cAAc,CAAClH,KAAAA,CAAAA,EAC5BK,EAAGgD,CAAAA,IAAI,CAACrD,KAAM4E,CAAAA,UAAU,CAAChI,CAAC,EAAE,CAAA,EAAGoD,KAAM4E,CAAAA,UAAU,CAAC/H,CAAC,EAAE,CAAA,CAAA,CAAA,CACnDsK,GAAG;AACLnH,QAAAA,KAAAA,CAAMoH,QAAQ,CAAClH,EAAE,GAAGG,EAAGqC,CAAAA,GAAG,CACxBrC,EAAAA,CAAGS,GAAG,CAACd,KAAMgH,CAAAA,eAAe,CAACK,EAAE,EAAErH,KAAM7D,CAAAA,MAAM,CAAC+F,EAAE,CAChD7B,EAAAA,EAAAA,CAAGS,GAAG,CAACd,KAAAA,CAAM7D,MAAM,CAAC8F,EAAE,EAAEjC,KAAM7D,CAAAA,MAAM,CAAC+F,EAAE,CAAA,CAAA;QAGzC,IAAI,IAAI,CAAC1B,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAAS,EAAA;AAC5C0C,YAAAA,KAAAA,CAAMwB,EAAE,CAACkC,UAAU,GAAGrD,GAAGgD,IAAI,EAAA;AAC7BrD,YAAAA,KAAAA,CAAMwB,EAAE,CAACmC,SAAS,GAAGtD,GAAGgD,IAAI,EAAA;AAC5BrD,YAAAA,KAAAA,CAAMwB,EAAE,CAAC9C,KAAK,GAAG2B,GAAGU,GAAG,CAACV,EAAGiH,CAAAA,GAAG,CAACtH,KAAAA,CAAMC,OAAO,CAAC+D,QAAQ,CAAG,EAAA,CAAA,CAAA;AACxDhE,YAAAA,KAAAA,CAAMuH,IAAI,CAAClH,EAAAA,CAAGiH,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG,EAAI,EAAA,WAAA;AAC7B,gBAAA,IAAI,CAAC/C,GAAG,CAAClE,EAAAA,CAAGmH,KAAK,CAAC,IAAI,CAAC5J,CAAC,EAAE,IAAI,CAACc,KAAK,CAAG,EAAA,WAAA;oBACrC,IAAI,CAACgF,UAAU,GAAG,IAAI,CAAC0C,SAAS,CAACqB,EAAE,CAAC,IAAI,CAAC7J,CAAC,CAAA;AAC1C,oBAAA,IAAI,CAAC+F,SAAS,GAAG,IAAI,CAACyC,SAAS,CAACqB,EAAE,CAACpH,GAAGsB,GAAG,CAAC,IAAI,CAAC/D,CAAC,EAAE,CAAA,CAAA,CAAA;AAClD,oBAAA,IAAI,CAAC8J,MAAM,EAAA;AACb,iBAAA,CAAA;AACF,aAAA,CAAA;SACK,MAAA;AACL1H,YAAAA,KAAAA,CAAMwB,EAAE,CAACkC,UAAU,GAAG1D,KAAMoG,CAAAA,SAAS,CAACqB,EAAE,CAACpH,GAAGU,GAAG,CAACV,GAAGiH,GAAG,CAACtH,MAAMC,OAAO,CAAC+D,QAAQ,CAAG,EAAA,CAAA,CAAA,CAAA;YAChFhE,KAAMwB,CAAAA,EAAE,CAACmC,SAAS,GAAG3D,MAAMoG,SAAS,CAACqB,EAAE,CAACpH,EAAGsB,CAAAA,GAAG,CAACtB,EAAGU,CAAAA,GAAG,CAACV,EAAAA,CAAGiH,GAAG,CAACtH,MAAMC,OAAO,CAAC+D,QAAQ,CAAA,EAAG,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AAC5F;QAEAhE,KAAMwB,CAAAA,EAAE,CAAChG,MAAM,GAAG,IAAI,CAACgI,eAAe,CACpCxD,KAAAA,EACAA,KAAMoH,CAAAA,QAAQ,CAAClH,EAAE,EACjBF,KAAMgH,CAAAA,eAAe,CAACK,EAAE,EACxBrH,KAAM0D,CAAAA,UAAU,EAChB1D,KAAAA,CAAM2D,SAAS,CAAA;QAEjB3D,KAAMoH,CAAAA,QAAQ,CAACO,QAAQ,GAAGtH,EAAAA,CAAGsB,GAAG,CAC9B3B,KAAAA,CAAMgH,eAAe,EACrB3G,EAAGW,CAAAA,IAAI,CAAC,CAAGX,EAAAA,EAAAA,CAAGU,GAAG,CAACf,KAAMxE,CAAAA,MAAM,EAAEwE,KAAMhD,CAAAA,YAAY,CAACH,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AAEzDmD,QAAAA,KAAAA,CAAMwB,EAAE,CAACkE,CAAC,GAAGrF,GAAGW,IAAI,EAAA;AACpBhB,QAAAA,KAAAA,CAAMwB,EAAE,CAACmE,CAAC,GAAGtF,GAAGW,IAAI,EAAA;AACpBhB,QAAAA,KAAAA,CAAMwB,EAAE,CAACjE,CAAC,GAAG8C,GAAGW,IAAI,EAAA;AACpB,QAAA,IAAI,CAAC2D,mBAAmB,CACtB3E,KAAAA,EACAA,MAAMgH,eAAe,CAACK,EAAE,EACxBrH,KAAMoH,CAAAA,QAAQ,CAAClH,EAAE,EACjBF,KAAMuG,CAAAA,aAAa,EACnBvG,KAAAA,CAAMhD,YAAY,EAClBgD,KAAM0D,CAAAA,UAAU,EAChB1D,KAAM2D,CAAAA,SAAS,EACf3D,KAAAA,CAAM0F,CAAC,EACP1F,KAAAA,CAAM2F,CAAC,EACP3F,MAAMzC,CAAC,CAAA;AAETyC,QAAAA,KAAAA,CAAMoH,QAAQ,CAACxC,UAAU,GAAG5E,MAAMgH,eAAe;AACjDhH,QAAAA,KAAAA,CAAMoH,QAAQ,CAACQ,YAAY,GAAG5H,MAAM0F,CAAC;AACrC1F,QAAAA,KAAAA,CAAMoH,QAAQ,CAACS,aAAa,GAAG7H,MAAM2F,CAAC;AACtC3F,QAAAA,KAAAA,CAAMoH,QAAQ,CAACU,WAAW,GAAG9H,MAAMzC,CAAC;AACpC0J,QAAAA,YAAAA,CAAac,oBAAoB,CAC/B/H,KAAAA,EACAK,EAAGU,CAAAA,GAAG,CAACkG,YAAae,CAAAA,uBAAuB,CAAChI,KAAAA,CAAAA,EAAQK,GAAGgD,IAAI,CAACrD,MAAMoH,QAAQ,CAACO,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;QAEvFV,YAAagB,CAAAA,mBAAmB,CAACjI,KAAAA,EAAOA,KAAMoH,CAAAA,QAAQ,CAACO,QAAQ,EAAE3H,KAAAA,CAAMoH,QAAQ,CAACO,QAAQ,CAAA;AAC1F;AACAO,IAAAA,cAAAA,CAAelI,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACkI,cAAelI,CAAAA,KAAAA,CAAAA;QACrB,MAAMK,EAAAA,GAAKL,MAAMM,QAAQ;AACzBN,QAAAA,KAAAA,CAAM7D,MAAM,GAAGkE,EAAAA,CAAGgD,IAAI,EAAA,CAAG8C,OAAO,CAAC,CAAA,CAAA;AACjCnG,QAAAA,KAAAA,CAAMwB,EAAE,CAAC2G,WAAW,GAAG9H,GAAG+H,EAAE,CAC1B/H,EAAGgI,CAAAA,GAAG,CAAChI,EAAGqE,CAAAA,QAAQ,CAAC1E,KAAAA,CAAMC,OAAO,CAACC,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,EAC7CxD,EAAGgI,CAAAA,GAAG,CAAChI,EAAGmE,CAAAA,WAAW,CAACxE,KAAAA,CAAMC,OAAO,CAACC,EAAE,EAAEG,EAAAA,CAAGwD,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAElD7D,QAAAA,KAAAA,CAAMuE,GAAG,CAACvE,KAAMmI,CAAAA,WAAW,EAAE,WAAA;AAC3B9H,YAAAA,EAAAA,CAAGiI,OAAO,EAAA;AACZ,SAAA,CAAA;QACA,IAAI,IAAI,CAACC,iBAAiB,EAAI,EAAA;AAC5BvI,YAAAA,KAAAA,CAAMtF,SAAS,GAAG2F,EAAAA,CAAGiG,KAAK,EAAA,CAAGH,OAAO,CAAC,CAAA,CAAA;AACrC,YAAA,MAAMlJ,gBAAgB,IAAI,CAACrB,WAAW,CAAStC,uBAAuBK,kBAAkB,CAAA;AACxF,YAAA,IAAIsD,gBAAgB,CAAG,EAAA;gBACrB+C,KAAM0B,CAAAA,YAAY,GAAGrB,EAAGgD,CAAAA,IAAI,CAACpG,aAAc,CAAA,EAAA,CAAGkJ,OAAO,CAAC,CAAA,CAAA;gBACtD,IAAI,IAAI,CAAC3F,WAAW,CAACC,MAAM,CAACnD,IAAI,KAAK,OAAS,EAAA;AAC5C0C,oBAAAA,KAAAA,CAAM3B,QAAQ,GAAGgC,EAAAA,CAAGiG,KAAK,EAAA,CAAGH,OAAO,CAAC,CAAA,CAAA;AACpC,oBAAA,IAAK,IAAIvI,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIX,eAAeW,CAAK,EAAA,CAAA;wBACtCoC,KAAK,CAAC,CAAC,eAAe,EAAEpC,CAAAA,CAAAA,CAAG,CAAC,GAAGyC,EAAGiG,CAAAA,KAAK,EAAGH,CAAAA,OAAO,CAAC,CAAA,CAAA;wBAClDnG,KAAK,CAAC,CAAC,eAAe,EAAEpC,CAAAA,CAAAA,CAAG,CAAC,GAAGyC,EAAGiG,CAAAA,KAAK,EAAGH,CAAAA,OAAO,CAAC,CAAA,CAAA;AACpD;iBACK,MAAA;AACLnG,oBAAAA,KAAAA,CAAM3B,QAAQ,GAAGgC,EAAAA,CAAGmI,UAAU,EAAA,CAAGrC,OAAO,CAAC,CAAA,CAAA;AACzCnG,oBAAAA,KAAAA,CAAMuD,eAAe,GAAGlD,EAAAA,CAAGmI,UAAU,EAAA,CAAGrC,OAAO,CAAC,CAAA,CAAA;AAChDnG,oBAAAA,KAAAA,CAAMP,eAAe,GAAGY,EAAAA,CAAGmI,UAAU,EAAA,CAAGrC,OAAO,CAAC,CAAA,CAAA;AAClD;AACF;AACAnG,YAAAA,KAAAA,CAAMwB,EAAE,CAACiH,MAAM,GAAG,IAAI,CAAC1G,oBAAoB,CAAC/B,KAAAA,CAAAA;YAC5CA,KAAMwB,CAAAA,EAAE,CAACsG,WAAW,GAAGzH,EAAAA,CAAGY,SAAS,CAACjB,KAAAA,CAAMC,OAAO,CAAC6H,WAAW,CAAA;YAC7D9H,KAAMwB,CAAAA,EAAE,CAACkH,UAAU,GAAG,IAAI,CAACC,qBAAqB,CAC9C3I,KAAAA,EACAA,KAAMC,CAAAA,OAAO,CAAC0H,QAAQ,EACtB3H,KAAAA,CAAMC,OAAO,CAAC6H,WAAW,EACzB9H,KAAMC,CAAAA,OAAO,CAAC2H,YAAY,EAC1B5H,KAAAA,CAAMC,OAAO,CAAC4H,aAAa,CAAA;AAE7B,YAAA,IAAI,IAAI,CAACjM,WAAW,CAAStC,sBAAuBK,CAAAA,kBAAkB,IAAI,CAAG,EAAA;AAC3EqG,gBAAAA,KAAAA,CAAM0I,UAAU,CAAC7H,MAAM,GAAG,IAAI,CAACK,qBAAqB,CAAClB,KAAOA,EAAAA,KAAAA,CAAM0I,UAAU,CAACvH,GAAG,CAAA;AAClF;AACAnB,YAAAA,KAAAA,CAAMwB,EAAE,CAACoH,OAAO,GAAG,IAAI,CAACC,mBAAmB,CAAC7I,KAAOA,EAAAA,KAAAA,CAAMC,OAAO,CAAC0H,QAAQ,CAAA;AACzE3H,YAAAA,KAAAA,CAAMwB,EAAE,CAACsH,QAAQ,GAAG,IAAI,CAACC,QAAQ,CAC/B/I,KACAA,EAAAA,KAAAA,CAAMC,OAAO,CAAC0H,QAAQ,EACtB3H,KAAM0I,CAAAA,UAAU,CAAC7H,MAAM,EACvBb,KAAAA,CAAM4I,OAAO,EACb5I,KAAMyI,CAAAA,MAAM,EACZzI,KAAAA,CAAM0I,UAAU,CAACvH,GAAG,CAAA;AAEtB,YAAA,OAAQ,IAAI,CAACvF,WAAW,CAAmBtC,uBAAuBO,kBAAkB,CAAA;gBAClF,KAAK,QAAA;AACHmG,oBAAAA,KAAAA,CAAMwB,EAAE,CAACwH,QAAQ,GAAGhJ,MAAMyI,MAAM;AAChC,oBAAA;gBACF,KAAK,eAAA;oBACHzI,KAAMwB,CAAAA,EAAE,CAACwH,QAAQ,GAAG3I,EAAAA,CAAGgD,IAAI,CAAChD,EAAAA,CAAGsB,GAAG,CAACtB,EAAGU,CAAAA,GAAG,CAACf,KAAM0I,CAAAA,UAAU,CAACvH,GAAG,CAAC,CAAA,CAAE,EAAE,GAAMd,CAAAA,EAAAA,EAAAA,CAAGW,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA;AACxF,oBAAA;gBACF,KAAK,eAAA;oBACHhB,KAAMwB,CAAAA,EAAE,CAACwH,QAAQ,GAAG3I,GAAGgD,IAAI,CAAChD,EAAGsB,CAAAA,GAAG,CAACtB,EAAAA,CAAGU,GAAG,CAACf,KAAAA,CAAM0I,UAAU,CAAC7H,MAAM,EAAE,GAAMR,CAAAA,EAAAA,EAAAA,CAAGW,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA;AACxF,oBAAA;gBACF,KAAK,SAAA;oBACHhB,KAAMwB,CAAAA,EAAE,CAACwH,QAAQ,GAAG3I,EAAAA,CAAGgD,IAAI,CAAChD,EAAAA,CAAGsB,GAAG,CAACtB,EAAGU,CAAAA,GAAG,CAACf,KAAM0I,CAAAA,UAAU,CAACvH,GAAG,CAAC,CAAA,CAAE,EAAE,GAAMd,CAAAA,EAAAA,EAAAA,CAAGW,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA;AACxF,oBAAA;gBACF,KAAK,WAAA;oBACHhB,KAAMwB,CAAAA,EAAE,CAACwH,QAAQ,GAAG3I,EAAAA,CAAGgD,IAAI,CAAChD,EAAAA,CAAGsB,GAAG,CAACtB,EAAGU,CAAAA,GAAG,CAACf,KAAM0I,CAAAA,UAAU,CAACvH,GAAG,CAAC,CAAA,CAAE,EAAE,GAAMd,CAAAA,EAAAA,EAAAA,CAAGW,IAAI,CAAC,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA;AACxF,oBAAA;gBACF,KAAK,IAAA;AACHhB,oBAAAA,KAAAA,CAAMwB,EAAE,CAACwH,QAAQ,GAAG3I,EAAGgD,CAAAA,IAAI,CAACrD,KAAAA,CAAMC,OAAO,CAACC,EAAE,EAAE,CAAG,EAAA,CAAA,CAAA;AACjD,oBAAA;AACF,gBAAA;oBACEF,KAAMwB,CAAAA,EAAE,CAACwH,QAAQ,GAAG3I,GAAGgD,IAAI,CAACrD,KAAM8I,CAAAA,QAAQ,EAAE,CAAA,CAAA;AAC5C,oBAAA;AACJ;;YAEA,IAAI,IAAI,CAACtI,WAAW,CAACyI,aAAa,GAAGC,oBAAAA,CAAqBC,mBAAmB,EAAE;gBAC7EnJ,KAAMwB,CAAAA,EAAE,CAAC4H,YAAY,GAAG/I,GAAGgD,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AACzC,gBAAA,IAAI,CAACgG,mBAAmB,CACtBrJ,KACAA,EAAAA,KAAAA,CAAMC,OAAO,CAAC0H,QAAQ,EACtB3H,KAAAA,CAAMgJ,QAAQ,EACdhJ,KAAAA,CAAMoJ,YAAY,EAClBpJ,MAAMgJ,QAAQ,CAAA;aAEX,MAAA;gBACL,IAAI,CAACK,mBAAmB,CAACrJ,KAAOA,EAAAA,KAAAA,CAAMC,OAAO,CAAC0H,QAAQ,EAAE3H,KAAAA,CAAMgJ,QAAQ,CAAA;AACxE;SACK,MAAA;YACL,IAAI,CAACK,mBAAmB,CAACrJ,KAAAA,EAAOA,MAAMC,OAAO,CAAC0H,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACA2B,IAAAA,kBAAAA,CAAmBC,SAAoB,EAAEC,GAAgB,EAAEC,IAAY,EAAE;QACvE,KAAK,CAACH,kBAAmBC,CAAAA,SAAAA,EAAWC,GAAKC,EAAAA,IAAAA,CAAAA;AACzCF,QAAAA,SAAAA,CAAUG,QAAQ,CAAC,iBAAmB,EAAA,IAAI,CAACxP,gBAAgB,CAAA;AAC3DqP,QAAAA,SAAAA,CAAUG,QAAQ,CAAC,QAAU,EAAA,IAAI,CAACzP,OAAO,CAAA;AACzCsP,QAAAA,SAAAA,CAAUG,QAAQ,CAAC,cAAgB,EAAA,IAAI,CAACtP,aAAa,CAAA;QACrDmP,SAAUI,CAAAA,UAAU,CAAC,WAAa,EAAA,IAAI,CAACxP,UAAU,CAAC8B,GAAG,EAAA,EAAKqD,YAAa,CAAA,oBAAA,CAAA,CAAA;AACvEiK,QAAAA,SAAAA,CAAUG,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAAClP,cAAc,CAAA;AACvD+O,QAAAA,SAAAA,CAAUK,SAAS,CAAC,WAAA,EAAa,IAAI,CAACnP,gBAAgB,CAACwB,GAAG,EAAA,CAAA;AAC1D,QAAA,IAAI,IAAI,CAACsM,iBAAiB,CAACiB,GAAM,CAAA,EAAA;AAC/B,YAAA,IAAI,IAAI,CAACnP,cAAc,CAAC4C,aAAa,GAAG,CAAG,EAAA;gBACzCsM,SAAUI,CAAAA,UAAU,CAAC,UAAY,EAAA,IAAI,CAACtP,cAAc,CAACgE,QAAQ,CAACpC,GAAG,EAAA,CAAA;AACjE,gBAAA,IAAIuN,GAAI/I,CAAAA,MAAM,CAACnD,IAAI,KAAK,OAAS,EAAA;oBAC/B,IAAK,IAAIM,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACvD,cAAc,CAAC4C,aAAa,EAAEW,CAAK,EAAA,CAAA;AAC1D2L,wBAAAA,SAAAA,CAAUI,UAAU,CAClB,CAAC,eAAe,EAAE/L,CAAAA,CAAAA,CAAG,EACrB,IAAI,CAACvD,cAAc,CAAC4D,aAAa,CAACL,CAAE,CAAA,EAAE3B,SAAS3C,sBAAuBmE,CAAAA,mBAAmB,IACzF6B,YAAa,CAAA,eAAA,CAAA,CAAA;AAEfiK,wBAAAA,SAAAA,CAAUI,UAAU,CAClB,CAAC,eAAe,EAAE/L,CAAAA,CAAAA,CAAG,EACrB,IAAI,CAACvD,cAAc,CAAC8D,mBAAmB,CAACP,CAAE,CAAA,EAAE3B,SAC1C3C,sBAAuBqE,CAAAA,mBAAmB,IAC5C2B,YAAa,CAAA,eAAA,CAAA,CAAA;AAEjB;iBACK,MAAA;oBACLiK,SAAUI,CAAAA,UAAU,CAClB,iBAAA,EACA,IAAI,CAACtP,cAAc,CAAC+E,SAAS,CAACnD,GAAG,EAAA,EACjCqD,YAAa,CAAA,eAAA,CAAA,CAAA;oBAEfiK,SAAUI,CAAAA,UAAU,CAClB,iBAAA,EACA,IAAI,CAACtP,cAAc,CAACoF,eAAe,CAAExD,GAAG,EAAA,EACxCqD,YAAa,CAAA,eAAA,CAAA,CAAA;AAEjB;AACAiK,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,cAAA,EAAgB,IAAI,CAACrP,cAAc,CAACsE,eAAe,CAAA;AACxE;AACF;AACF;IACQvD,mBAAsB,GAAA;AAC5B,QAAA,MAAMqF,MAASzF,GAAAA,SAAAA,EAAAA;QACf,MAAM6O,QAAAA,GAAWpJ,MAAOnD,CAAAA,IAAI,KAAK,OAAA;AACjC,QAAA,MAAM8B,SAAYyK,GAAAA,QAAAA,GACd,IACApJ,GAAAA,MAAAA,CAAOqJ,oBAAoB,CAAC,YAAA,EAAc,IAAI,CAACxP,cAAc,EAAE,IAAI,CAACA,cAAc,EAAEjB,eAAAA,CAAAA;AACxF,QAAA,MAAMoG,eAAkBoK,GAAAA,QAAAA,GACpB,IACApJ,GAAAA,MAAAA,CAAOqJ,oBAAoB,CAAC,YAAA,EAAc,IAAI,CAACxP,cAAc,EAAE,IAAI,CAACA,cAAc,EAAEjB,eAAAA,CAAAA;QACxF,MAAMgF,QAAAA,GAAWwL,QACbpJ,GAAAA,MAAAA,CAAOsJ,eAAe,CAAC,YAAc,EAAA,IAAI,CAACxP,aAAa,EAAE,IAAI,CAACA,aAAa,IAC3EkG,MAAOqJ,CAAAA,oBAAoB,CACzB,YAAA,EACA,IAAI,CAACvP,aAAa,EAClB,IAAI,CAACA,aAAa,EAClBlB,eAAmB,IAAA,CAAA,CAAA;AAEzBoH,QAAAA,MAAAA,CAAOuJ,gBAAgB,EAAA;AACvB,QAAA,IAAI,CAACH,QAAU,EAAA;YACb,MAAMI,QAAAA,GAAWxJ,MAAOtB,CAAAA,iBAAiB,CAAC;AAACC,gBAAAA;aAAW,EAAE,IAAA,CAAA;AACxDqB,YAAAA,MAAAA,CAAOyJ,cAAc,CAACD,QAAAA,CAAAA;AACtB,YAAA,IAAK,IAAIrM,CAAI,GAAA,CAAA,EAAGA,IAAIwB,SAAWZ,CAAAA,KAAK,EAAEZ,CAAK,EAAA,CAAA;gBACzCqM,QAASE,CAAAA,uBAAuB,CAAC,CAAGvM,EAAAA,CAAAA,CAAAA;AACpC6C,gBAAAA,MAAAA,CAAO2J,gBAAgB,CAACrP,OAAQsP,CAAAA,IAAI,IAAI,CAAG,EAAA,CAAA,CAAA;AAC7C;AACAJ,YAAAA,QAAAA,CAAS/L,OAAO,EAAA;YAChB,MAAMoM,QAAAA,GAAW7J,MAAOtB,CAAAA,iBAAiB,CAAC;AAACM,gBAAAA;aAAiB,EAAE,IAAA,CAAA;AAC9DgB,YAAAA,MAAAA,CAAOyJ,cAAc,CAACI,QAAAA,CAAAA;AACtB,YAAA,IAAK,IAAI1M,CAAI,GAAA,CAAA,EAAGA,IAAI6B,eAAiBjB,CAAAA,KAAK,EAAEZ,CAAK,EAAA,CAAA;gBAC/C0M,QAASH,CAAAA,uBAAuB,CAAC,CAAGvM,EAAAA,CAAAA,CAAAA;gBACpC6C,MAAO2J,CAAAA,gBAAgB,CAAC,IAAIrP,OAAAA,CAAQ,KAAK,GAAK,EAAA,CAAA,EAAG,IAAI,CAAG,EAAA,CAAA,CAAA;AAC1D;AACAuP,YAAAA,QAAAA,CAASpM,OAAO,EAAA;AAClB;QACA,MAAMqM,OAAAA,GAAU9J,MAAOtB,CAAAA,iBAAiB,CAAC;AAACd,YAAAA;SAAU,EAAE,IAAA,CAAA;AACtDoC,QAAAA,MAAAA,CAAOyJ,cAAc,CAACK,OAAAA,CAAAA;AACtB,QAAA,IAAK,IAAI3M,CAAI,GAAA,CAAA,EAAGA,IAAIS,QAAUG,CAAAA,KAAK,EAAEZ,CAAK,EAAA,CAAA;YACxC2M,OAAQJ,CAAAA,uBAAuB,CAAC,CAAGvM,EAAAA,CAAAA,CAAAA;AACnC6C,YAAAA,MAAAA,CAAO2J,gBAAgB,CAACxM,CAAM,KAAA,CAAA,GAAI,IAAI7C,OAAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,GAAKA,OAAQsP,CAAAA,IAAI,IAAI,CAAG,EAAA,CAAA,CAAA;AACjF;AACA5J,QAAAA,MAAAA,CAAO+J,eAAe,EAAA;AACtBD,QAAAA,OAAAA,CAAQrM,OAAO,EAAA;QACf,OAAO;AACLkB,YAAAA,SAAAA,EAAW,IAAIrF,IAAKqF,CAAAA,SAAAA,CAAAA;AACpBK,YAAAA,eAAAA,EAAiB,IAAI1F,IAAK0F,CAAAA,eAAAA,CAAAA;AAC1BxB,YAAAA,aAAAA,EAAe,EAAE;AACjBE,YAAAA,mBAAAA,EAAqB,EAAE;AACvBE,YAAAA,QAAAA,EAAU,IAAItE,IAAKsE,CAAAA,QAAAA,CAAAA;YACnBM,eAAiB,EAAA,IAAI8L,aAAapR,eAAkB,GAAA,CAAA,CAAA;YACpD4D,aAAe,EAAA;AACjB,SAAA;AACF;IAEUyN,SAAY,GAAA;AACpB,QAAA,KAAK,CAACA,SAAAA,EAAAA;QACN,IAAI,CAACvQ,UAAU,CAAC+D,OAAO,EAAA;QACvB,IAAI,CAACzD,gBAAgB,CAACyD,OAAO,EAAA;QAC7B,IAAI,IAAI,CAAC7D,cAAc,EAAE;AACvB,YAAA,IAAI,CAACA,cAAc,CAAC+E,SAAS,EAAElB,OAAAA,EAAAA;AAC/B,YAAA,IAAI,CAAC7D,cAAc,CAACoF,eAAe,EAAEvB,OAAAA,EAAAA;AACrC,YAAA,IAAI,CAAC7D,cAAc,CAACgE,QAAQ,EAAEH,OAAAA,EAAAA;AAC9B,YAAA,KAAK,MAAMK,GAAO,IAAA,IAAI,CAAClE,cAAc,CAAC4D,aAAa,CAAE;AACnDM,gBAAAA,GAAAA,CAAIL,OAAO,EAAA;AACb;AACA,YAAA,KAAK,MAAMK,GAAO,IAAA,IAAI,CAAClE,cAAc,CAAC8D,mBAAmB,CAAE;AACzDI,gBAAAA,GAAAA,CAAIL,OAAO,EAAA;AACb;AACF;AACF;AACA,IAAA,OAAOT,mBAAsB,GAAA;AAC3B,QAAA,IAAI,CAACnE,sBAAAA,CAAuBQ,iBAAiB,CAACmC,GAAG,EAAI,EAAA;AACnD,YAAA,MAAMwE,MAASzF,GAAAA,SAAAA,EAAAA;AACf,YAAA,MAAMuD,GAAMkC,GAAAA,MAAAA,CAAOsJ,eAAe,CAAC,cAAc,CAAG,EAAA,CAAA,CAAA;YACpDxL,GAAImB,CAAAA,MAAM,CAAC,IAAIiL,UAAW,CAAA;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;aAAI,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,CAAA;YACpDrR,sBAAuBQ,CAAAA,iBAAiB,CAACwC,GAAG,CAACiC,GAAAA,CAAAA;AAC/C;QACA,OAAOjF,sBAAAA,CAAuBQ,iBAAiB,CAACmC,GAAG,EAAA;AACrD;AACA,IAAA,OAAO0B,mBAAsB,GAAA;AAC3B,QAAA,IAAI,CAACrE,sBAAAA,CAAuBU,iBAAiB,CAACiC,GAAG,EAAI,EAAA;AACnD,YAAA,MAAMwE,MAASzF,GAAAA,SAAAA,EAAAA;AACf,YAAA,MAAMuD,GAAMkC,GAAAA,MAAAA,CAAOsJ,eAAe,CAAC,cAAc,CAAG,EAAA,CAAA,CAAA;YACpDxL,GAAImB,CAAAA,MAAM,CAAC,IAAIiL,UAAW,CAAA;AAAC,gBAAA,GAAA;AAAK,gBAAA,GAAA;AAAK,gBAAA,GAAA;AAAK,gBAAA;aAAI,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,CAAA;YAC1DrR,sBAAuBU,CAAAA,iBAAiB,CAACsC,GAAG,CAACiC,GAAAA,CAAAA;AAC/C;QACA,OAAOjF,sBAAAA,CAAuBU,iBAAiB,CAACiC,GAAG,EAAA;AACrD;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlit.js","sources":["../../src/material/unlit.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Unlit material\r\n * @public\r\n */\r\nexport class UnlitMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinVertexColor, mixinAlbedoColor)\r\n implements Clonable<UnlitMaterial>\r\n{\r\n static readonly FEATURE_VERTEX_COLOR = 'um_vertexcolor';\r\n constructor() {\r\n super();\r\n }\r\n clone()
|
|
1
|
+
{"version":3,"file":"unlit.js","sources":["../../src/material/unlit.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { PBFunctionScope } from '@zephyr3d/device';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Unlit material\r\n * @public\r\n */\r\nexport class UnlitMaterial\r\n extends applyMaterialMixins(MeshMaterial, mixinVertexColor, mixinAlbedoColor)\r\n implements Clonable<UnlitMaterial>\r\n{\r\n static readonly FEATURE_VERTEX_COLOR = 'um_vertexcolor';\r\n constructor() {\r\n super();\r\n }\r\n clone() {\r\n const other = new UnlitMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\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) {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor()) {\r\n let color = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n color = scope.$builder.mul(color, this.getVertexColor(scope));\r\n }\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, color);\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["UnlitMaterial","applyMaterialMixins","MeshMaterial","mixinVertexColor","mixinAlbedoColor","FEATURE_VERTEX_COLOR","clone","other","copyFrom","vertexShader","scope","pb","$builder","$l","oPos","ShaderHelper","resolveVertexPosition","$outputs","worldPos","mul","getWorldMatrix","vec4","xyz","setClipSpacePosition","getViewProjectionMatrix","fragmentShader","needFragmentColor","color","calculateAlbedoColor","vertexColor","getVertexColor","outputFragmentColor","$inputs"],"mappings":";;;;;AAOA;;;AAGC,IACM,MAAMA,aACHC,SAAAA,mBAAAA,CAAoBC,cAAcC,gBAAkBC,EAAAA,gBAAAA,CAAAA,CAAAA;AAG5D,IAAA,OAAgBC,uBAAuB,gBAAiB;IACxD,WAAc,EAAA;QACZ,KAAK,EAAA;AACP;IACAC,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIP,aAAAA,EAAAA;QAClBO,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACAE,IAAAA,YAAAA,CAAaC,KAAsB,EAAE;AACnC,QAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;QACnB,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMG,EAAE,CAACC,IAAI,GAAGC,YAAAA,CAAaC,qBAAqB,CAACN,KAAAA,CAAAA;AACnDA,QAAAA,KAAAA,CAAMO,QAAQ,CAACC,QAAQ,GAAGP,EAAGQ,CAAAA,GAAG,CAACJ,YAAaK,CAAAA,cAAc,CAACV,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMI,IAAI,EAAE,IAAIQ,GAAG;AAChGP,QAAAA,YAAAA,CAAaQ,oBAAoB,CAC/Bb,KAAAA,EACAC,EAAGQ,CAAAA,GAAG,CAACJ,YAAaS,CAAAA,uBAAuB,CAACd,KAAAA,CAAAA,EAAQC,GAAGU,IAAI,CAACX,MAAMO,QAAQ,CAACC,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA;AAEzF;AACAO,IAAAA,cAAAA,CAAef,KAAsB,EAAE;AACrC,QAAA,KAAK,CAACe,cAAef,CAAAA,KAAAA,CAAAA;QACrB,IAAI,IAAI,CAACgB,iBAAiB,EAAI,EAAA;AAC5B,YAAA,IAAIC,KAAQ,GAAA,IAAI,CAACC,oBAAoB,CAAClB,KAAAA,CAAAA;YACtC,IAAI,IAAI,CAACmB,WAAW,EAAE;gBACpBF,KAAQjB,GAAAA,KAAAA,CAAME,QAAQ,CAACO,GAAG,CAACQ,KAAO,EAAA,IAAI,CAACG,cAAc,CAACpB,KAAAA,CAAAA,CAAAA;AACxD;YACA,IAAI,CAACqB,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAES,KAAAA,CAAAA;SACnD,MAAA;YACL,IAAI,CAACI,mBAAmB,CAACrB,KAAAA,EAAOA,MAAMsB,OAAO,CAACd,QAAQ,EAAE,IAAA,CAAA;AAC1D;AACF;AACF;;;;"}
|