@zephyr3d/scene 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +135 -133
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +151 -103
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_system.js +87 -114
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +165 -144
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +3 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +185 -185
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +794 -261
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -288
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -26
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/pbrmr.js +1 -11
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +236 -156
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +36 -16
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +4 -20
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +2 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +4 -7
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +493 -493
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/manager.js +34 -3
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 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":"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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 /** @internal */\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 /** @internal */\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":"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"}
|
package/dist/posteffect/taa.js
CHANGED
|
@@ -11,11 +11,8 @@ import '../shapes/plane.js';
|
|
|
11
11
|
import '../shapes/sphere.js';
|
|
12
12
|
import '../shapes/tetrahedron.js';
|
|
13
13
|
import { temporalResolve } from '../shaders/temporal.js';
|
|
14
|
+
import { RGHistoryResources } from '../render/rendergraph/history_resources.js';
|
|
14
15
|
|
|
15
|
-
/** Resource names for TAA history buffers */ const TAA_RESOURCES = {
|
|
16
|
-
COLOR: 'taaColor',
|
|
17
|
-
MOTION_VECTOR: 'taaMotionVector'
|
|
18
|
-
};
|
|
19
16
|
/** @internal */ class TAA extends AbstractPostEffect {
|
|
20
17
|
static _resolveProgram = [];
|
|
21
18
|
static _skyMotionVectorProgram = null;
|
|
@@ -51,46 +48,41 @@ import { temporalResolve } from '../shaders/temporal.js';
|
|
|
51
48
|
}
|
|
52
49
|
apply(ctx, inputColorTexture, sceneDepthTexture, srgbOutput) {
|
|
53
50
|
const historyMgr = ctx.camera.getHistoryResourceManager();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
const colorDesc = {
|
|
52
|
+
format: inputColorTexture.format,
|
|
53
|
+
sizeMode: 'absolute',
|
|
54
|
+
width: inputColorTexture.width,
|
|
55
|
+
height: inputColorTexture.height
|
|
56
|
+
};
|
|
57
|
+
const colorSize = {
|
|
58
|
+
width: inputColorTexture.width,
|
|
59
|
+
height: inputColorTexture.height
|
|
60
|
+
};
|
|
61
|
+
const motionVectorDesc = {
|
|
62
|
+
format: ctx.motionVectorTexture.format,
|
|
63
|
+
sizeMode: 'absolute',
|
|
64
|
+
width: ctx.motionVectorTexture.width,
|
|
65
|
+
height: ctx.motionVectorTexture.height
|
|
66
|
+
};
|
|
67
|
+
const motionVectorSize = {
|
|
68
|
+
width: ctx.motionVectorTexture.width,
|
|
69
|
+
height: ctx.motionVectorTexture.height
|
|
70
|
+
};
|
|
71
|
+
const hasHistory = historyMgr.isCompatible(RGHistoryResources.TAA_COLOR, colorDesc, colorSize) && historyMgr.isCompatible(RGHistoryResources.TAA_MOTION_VECTOR, motionVectorDesc, motionVectorSize);
|
|
72
|
+
if (!hasHistory) {
|
|
57
73
|
// First frame: just pass through
|
|
58
74
|
this.passThrough(ctx, inputColorTexture, srgbOutput);
|
|
59
|
-
//
|
|
75
|
+
// Queue history resources only after retaining references from the pool.
|
|
60
76
|
const currentColorTex = ctx.device.getFramebuffer().getColorAttachments()[0];
|
|
61
77
|
ctx.device.pool.retainTexture(currentColorTex);
|
|
62
|
-
historyMgr.
|
|
63
|
-
format: inputColorTexture.format,
|
|
64
|
-
sizeMode: 'absolute',
|
|
65
|
-
width: inputColorTexture.width,
|
|
66
|
-
height: inputColorTexture.height
|
|
67
|
-
}, {
|
|
68
|
-
width: inputColorTexture.width,
|
|
69
|
-
height: inputColorTexture.height
|
|
70
|
-
}, currentColorTex);
|
|
78
|
+
historyMgr.queueCommit(RGHistoryResources.TAA_COLOR, colorDesc, colorSize, currentColorTex);
|
|
71
79
|
ctx.device.pool.retainTexture(ctx.motionVectorTexture);
|
|
72
|
-
historyMgr.
|
|
73
|
-
format: ctx.motionVectorTexture.format,
|
|
74
|
-
sizeMode: 'absolute',
|
|
75
|
-
width: ctx.motionVectorTexture.width,
|
|
76
|
-
height: ctx.motionVectorTexture.height
|
|
77
|
-
}, {
|
|
78
|
-
width: ctx.motionVectorTexture.width,
|
|
79
|
-
height: ctx.motionVectorTexture.height
|
|
80
|
-
}, ctx.motionVectorTexture);
|
|
80
|
+
historyMgr.queueCommit(RGHistoryResources.TAA_MOTION_VECTOR, motionVectorDesc, motionVectorSize, ctx.motionVectorTexture);
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
// Get history textures
|
|
84
|
-
const prevColorTex = historyMgr.getPrevious(
|
|
85
|
-
|
|
86
|
-
if (prevColorTex.width !== inputColorTexture.width || prevColorTex.height !== inputColorTexture.height) {
|
|
87
|
-
// Resolution changed, unregister old resources and restart
|
|
88
|
-
historyMgr.unregister(TAA_RESOURCES.COLOR);
|
|
89
|
-
historyMgr.unregister(TAA_RESOURCES.MOTION_VECTOR);
|
|
90
|
-
this.passThrough(ctx, inputColorTexture, srgbOutput);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const prevMotionVectorTex = historyMgr.getPrevious(TAA_RESOURCES.MOTION_VECTOR);
|
|
84
|
+
const prevColorTex = historyMgr.getPrevious(RGHistoryResources.TAA_COLOR);
|
|
85
|
+
const prevMotionVectorTex = historyMgr.getPrevious(RGHistoryResources.TAA_MOTION_VECTOR);
|
|
94
86
|
// Render TAA
|
|
95
87
|
let program = TAA._resolveProgram[ctx.camera.TAADebug];
|
|
96
88
|
if (!program) {
|
|
@@ -115,10 +107,10 @@ import { temporalResolve } from '../shaders/temporal.js';
|
|
|
115
107
|
// Update history with current framebuffer output (zero-copy)
|
|
116
108
|
const currentColorTex = ctx.device.getFramebuffer().getColorAttachments()[0];
|
|
117
109
|
ctx.device.pool.retainTexture(currentColorTex);
|
|
118
|
-
historyMgr.
|
|
110
|
+
historyMgr.queueCommit(RGHistoryResources.TAA_COLOR, colorDesc, colorSize, currentColorTex);
|
|
119
111
|
ctx.device.pool.retainTexture(ctx.motionVectorTexture);
|
|
120
|
-
historyMgr.
|
|
121
|
-
//
|
|
112
|
+
historyMgr.queueCommit(RGHistoryResources.TAA_MOTION_VECTOR, motionVectorDesc, motionVectorSize, ctx.motionVectorTexture);
|
|
113
|
+
// History commits happen after the render graph completes successfully.
|
|
122
114
|
}
|
|
123
115
|
requireLinearDepthTexture(_ctx) {
|
|
124
116
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taa.js","sources":["../../src/posteffect/taa.ts"],"sourcesContent":["import type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { BoxShape } from '../shapes';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\n\r\n/** Resource names for TAA history buffers */\r\nconst TAA_RESOURCES = {\r\n COLOR: 'taaColor',\r\n MOTION_VECTOR: 'taaMotionVector'\r\n} as const;\r\n\r\n/** @internal */\r\nexport class TAA extends AbstractPostEffect {\r\n private static _resolveProgram: GPUProgram[] = [];\r\n private static _skyMotionVectorProgram: Nullable<GPUProgram> = null;\r\n private static _box: Primitive;\r\n private static readonly _texSize = new Vector2();\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _skyMotionVectorBindGroup: Nullable<BindGroup>;\r\n constructor() {\r\n super();\r\n this._bindGroup = null;\r\n this._layer = PostEffectLayer.end;\r\n this._skyMotionVectorBindGroup = null;\r\n }\r\n renderSkyMotionVectors(ctx: DrawContext) {\r\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n ctx.motionVectorTexture!,\r\n ctx.depthTexture\r\n );\r\n const program = TAA._getSkyMotionVectorProgram(ctx);\r\n if (!this._skyMotionVectorBindGroup) {\r\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n const box = TAA._getBox(ctx);\r\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\r\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n ctx.device.setFramebuffer(fb);\r\n box.draw();\r\n ctx.device.popDeviceStates();\r\n ctx.device.pool.releaseFrameBuffer(fb);\r\n }\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const historyMgr = ctx.camera.getHistoryResourceManager()!;\r\n\r\n // Check if this is the first frame (no history yet)\r\n const isFirstFrame = !historyMgr.has(TAA_RESOURCES.COLOR);\r\n\r\n if (isFirstFrame) {\r\n // First frame: just pass through\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n\r\n // Register and update history resources (zero-copy)\r\n const currentColorTex = ctx.device.getFramebuffer()!.getColorAttachments()[0] as Texture2D;\r\n ctx.device.pool.retainTexture(currentColorTex);\r\n\r\n historyMgr.registerWithTexture(\r\n TAA_RESOURCES.COLOR,\r\n {\r\n format: inputColorTexture.format,\r\n sizeMode: 'absolute',\r\n width: inputColorTexture.width,\r\n height: inputColorTexture.height\r\n },\r\n { width: inputColorTexture.width, height: inputColorTexture.height },\r\n currentColorTex\r\n );\r\n\r\n ctx.device.pool.retainTexture(ctx.motionVectorTexture!);\r\n historyMgr.registerWithTexture(\r\n TAA_RESOURCES.MOTION_VECTOR,\r\n {\r\n format: ctx.motionVectorTexture!.format,\r\n sizeMode: 'absolute',\r\n width: ctx.motionVectorTexture!.width,\r\n height: ctx.motionVectorTexture!.height\r\n },\r\n { width: ctx.motionVectorTexture!.width, height: ctx.motionVectorTexture!.height },\r\n ctx.motionVectorTexture!\r\n );\r\n\r\n return;\r\n }\r\n\r\n // Get history textures\r\n const prevColorTex = historyMgr.getPrevious(TAA_RESOURCES.COLOR);\r\n\r\n // Check if resolution changed\r\n if (prevColorTex.width !== inputColorTexture.width || prevColorTex.height !== inputColorTexture.height) {\r\n // Resolution changed, unregister old resources and restart\r\n historyMgr.unregister(TAA_RESOURCES.COLOR);\r\n historyMgr.unregister(TAA_RESOURCES.MOTION_VECTOR);\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n return;\r\n }\r\n\r\n const prevMotionVectorTex = historyMgr.getPrevious(TAA_RESOURCES.MOTION_VECTOR);\r\n\r\n // Render TAA\r\n let program = TAA._resolveProgram[ctx.camera.TAADebug];\r\n if (!program) {\r\n program = TAA._getResolveProgram(ctx, ctx.camera.TAADebug);\r\n TAA._resolveProgram[ctx.camera.TAADebug] = program;\r\n }\r\n if (!this._bindGroup) {\r\n this._bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n this._bindGroup.setTexture('historyColorTex', prevColorTex, fetchSampler('clamp_linear_nomip'));\r\n this._bindGroup.setTexture('currentColorTex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('currentDepthTex', sceneDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('motionVector', ctx.motionVectorTexture!, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('prevMotionVector', prevMotionVectorTex, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n this._bindGroup.setValue('srgbOut', srgbOutput ? 1 : 0);\r\n TAA._texSize.setXY(sceneDepthTexture.width, sceneDepthTexture.height);\r\n this._bindGroup.setValue('texSize', TAA._texSize);\r\n\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._bindGroup);\r\n this.drawFullscreenQuad();\r\n\r\n // Update history with current framebuffer output (zero-copy)\r\n const currentColorTex = ctx.device.getFramebuffer()!.getColorAttachments()[0] as Texture2D;\r\n ctx.device.pool.retainTexture(currentColorTex);\r\n historyMgr.updateCurrent(TAA_RESOURCES.COLOR, currentColorTex);\r\n\r\n ctx.device.pool.retainTexture(ctx.motionVectorTexture!);\r\n historyMgr.updateCurrent(TAA_RESOURCES.MOTION_VECTOR, ctx.motionVectorTexture!);\r\n\r\n // Note: History swap happens automatically in executeForwardPlusGraph\r\n }\r\n requireLinearDepthTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireDepthAttachment(_ctx: DrawContext) {\r\n return true;\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext) {\r\n if (!this._skyMotionVectorProgram) {\r\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n this._skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n return this._skyMotionVectorProgram;\r\n }\r\n private static _getBox(_ctx: DrawContext) {\r\n if (!this._box) {\r\n this._box = new BoxShape({\r\n size: 2,\r\n needNormal: false,\r\n needUV: false\r\n });\r\n }\r\n return this._box;\r\n }\r\n private static _getResolveProgram(ctx: DrawContext, debug: number) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.historyColorTex = pb.tex2D().uniform(0);\r\n this.currentColorTex = pb.tex2D().uniform(0);\r\n this.currentDepthTex = pb.tex2D().uniform(0);\r\n this.motionVector = pb.tex2D().uniform(0);\r\n this.prevMotionVector = pb.tex2D().uniform(0);\r\n this.texSize = pb.vec2().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);\r\n this.$l.resolvedColor = temporalResolve(\r\n this,\r\n this.currentColorTex,\r\n this.historyColorTex,\r\n this.currentDepthTex,\r\n this.motionVector,\r\n this.prevMotionVector,\r\n this.screenUV,\r\n this.texSize,\r\n debug\r\n );\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.resolvedColor, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.resolvedColor), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@TAA_Resolve';\r\n return program;\r\n }\r\n}\r\n"],"names":["TAA_RESOURCES","COLOR","MOTION_VECTOR","TAA","AbstractPostEffect","_resolveProgram","_skyMotionVectorProgram","_box","_texSize","Vector2","_bindGroup","_skyMotionVectorBindGroup","_layer","PostEffectLayer","end","renderSkyMotionVectors","ctx","fb","device","pool","fetchTemporalFramebuffer","motionVectorTexture","depthTexture","program","_getSkyMotionVectorProgram","createBindGroup","bindGroupLayouts","box","_getBox","setValue","camera","viewProjectionMatrix","prevVPMatrix","getWorldPosition","prevPosition","pushDeviceStates","setProgram","setBindGroup","setRenderStates","getDefaultRenderState","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer","apply","inputColorTexture","sceneDepthTexture","srgbOutput","historyMgr","getHistoryResourceManager","isFirstFrame","has","passThrough","currentColorTex","getFramebuffer","getColorAttachments","retainTexture","registerWithTexture","format","sizeMode","width","height","prevColorTex","getPrevious","unregister","prevMotionVectorTex","TAADebug","_getResolveProgram","setTexture","fetchSampler","needFlip","setXY","drawFullscreenQuad","updateCurrent","requireLinearDepthTexture","_ctx","requireDepthAttachment","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","w","$builtins","position","$outputs","currentPos","prevPos","fragment","color","motionVector","sub","div","xy","name","BoxShape","size","needNormal","needUV","debug","flip","int","vec2","uv","$if","notEqual","y","neg","historyColorTex","tex2D","currentDepthTex","prevMotionVector","texSize","srgbOut","outColor","screenUV","fragCoord","resolvedColor","temporalResolve","equal","$else","linearToGamma"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taa.js","sources":["../../src/posteffect/taa.ts"],"sourcesContent":["import type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { BoxShape } from '../shapes';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\n\r\n/** @internal */\r\nexport class TAA extends AbstractPostEffect {\r\n private static _resolveProgram: GPUProgram[] = [];\r\n private static _skyMotionVectorProgram: Nullable<GPUProgram> = null;\r\n private static _box: Primitive;\r\n private static readonly _texSize = new Vector2();\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _skyMotionVectorBindGroup: Nullable<BindGroup>;\r\n constructor() {\r\n super();\r\n this._bindGroup = null;\r\n this._layer = PostEffectLayer.end;\r\n this._skyMotionVectorBindGroup = null;\r\n }\r\n renderSkyMotionVectors(ctx: DrawContext) {\r\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n ctx.motionVectorTexture!,\r\n ctx.depthTexture\r\n );\r\n const program = TAA._getSkyMotionVectorProgram(ctx);\r\n if (!this._skyMotionVectorBindGroup) {\r\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n const box = TAA._getBox(ctx);\r\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\r\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n ctx.device.setFramebuffer(fb);\r\n box.draw();\r\n ctx.device.popDeviceStates();\r\n ctx.device.pool.releaseFrameBuffer(fb);\r\n }\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const historyMgr = ctx.camera.getHistoryResourceManager()!;\r\n const colorDesc = {\r\n format: inputColorTexture.format,\r\n sizeMode: 'absolute' as const,\r\n width: inputColorTexture.width,\r\n height: inputColorTexture.height\r\n };\r\n const colorSize = { width: inputColorTexture.width, height: inputColorTexture.height };\r\n const motionVectorDesc = {\r\n format: ctx.motionVectorTexture!.format,\r\n sizeMode: 'absolute' as const,\r\n width: ctx.motionVectorTexture!.width,\r\n height: ctx.motionVectorTexture!.height\r\n };\r\n const motionVectorSize = {\r\n width: ctx.motionVectorTexture!.width,\r\n height: ctx.motionVectorTexture!.height\r\n };\r\n\r\n const hasHistory =\r\n historyMgr.isCompatible(RGHistoryResources.TAA_COLOR, colorDesc, colorSize) &&\r\n historyMgr.isCompatible(RGHistoryResources.TAA_MOTION_VECTOR, motionVectorDesc, motionVectorSize);\r\n\r\n if (!hasHistory) {\r\n // First frame: just pass through\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n\r\n // Queue history resources only after retaining references from the pool.\r\n const currentColorTex = ctx.device.getFramebuffer()!.getColorAttachments()[0] as Texture2D;\r\n ctx.device.pool.retainTexture(currentColorTex);\r\n historyMgr.queueCommit(RGHistoryResources.TAA_COLOR, colorDesc, colorSize, currentColorTex);\r\n\r\n ctx.device.pool.retainTexture(ctx.motionVectorTexture!);\r\n historyMgr.queueCommit(\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n motionVectorDesc,\r\n motionVectorSize,\r\n ctx.motionVectorTexture!\r\n );\r\n\r\n return;\r\n }\r\n\r\n // Get history textures\r\n const prevColorTex = historyMgr.getPrevious(RGHistoryResources.TAA_COLOR);\r\n const prevMotionVectorTex = historyMgr.getPrevious(RGHistoryResources.TAA_MOTION_VECTOR);\r\n\r\n // Render TAA\r\n let program = TAA._resolveProgram[ctx.camera.TAADebug];\r\n if (!program) {\r\n program = TAA._getResolveProgram(ctx, ctx.camera.TAADebug);\r\n TAA._resolveProgram[ctx.camera.TAADebug] = program;\r\n }\r\n if (!this._bindGroup) {\r\n this._bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n this._bindGroup.setTexture('historyColorTex', prevColorTex, fetchSampler('clamp_linear_nomip'));\r\n this._bindGroup.setTexture('currentColorTex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('currentDepthTex', sceneDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('motionVector', ctx.motionVectorTexture!, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('prevMotionVector', prevMotionVectorTex, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n this._bindGroup.setValue('srgbOut', srgbOutput ? 1 : 0);\r\n TAA._texSize.setXY(sceneDepthTexture.width, sceneDepthTexture.height);\r\n this._bindGroup.setValue('texSize', TAA._texSize);\r\n\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._bindGroup);\r\n this.drawFullscreenQuad();\r\n\r\n // Update history with current framebuffer output (zero-copy)\r\n const currentColorTex = ctx.device.getFramebuffer()!.getColorAttachments()[0] as Texture2D;\r\n ctx.device.pool.retainTexture(currentColorTex);\r\n historyMgr.queueCommit(RGHistoryResources.TAA_COLOR, colorDesc, colorSize, currentColorTex);\r\n\r\n ctx.device.pool.retainTexture(ctx.motionVectorTexture!);\r\n historyMgr.queueCommit(\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n motionVectorDesc,\r\n motionVectorSize,\r\n ctx.motionVectorTexture!\r\n );\r\n\r\n // History commits happen after the render graph completes successfully.\r\n }\r\n requireLinearDepthTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireDepthAttachment(_ctx: DrawContext) {\r\n return true;\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext) {\r\n if (!this._skyMotionVectorProgram) {\r\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n this._skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n return this._skyMotionVectorProgram;\r\n }\r\n private static _getBox(_ctx: DrawContext) {\r\n if (!this._box) {\r\n this._box = new BoxShape({\r\n size: 2,\r\n needNormal: false,\r\n needUV: false\r\n });\r\n }\r\n return this._box;\r\n }\r\n private static _getResolveProgram(ctx: DrawContext, debug: number) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.historyColorTex = pb.tex2D().uniform(0);\r\n this.currentColorTex = pb.tex2D().uniform(0);\r\n this.currentDepthTex = pb.tex2D().uniform(0);\r\n this.motionVector = pb.tex2D().uniform(0);\r\n this.prevMotionVector = pb.tex2D().uniform(0);\r\n this.texSize = pb.vec2().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);\r\n this.$l.resolvedColor = temporalResolve(\r\n this,\r\n this.currentColorTex,\r\n this.historyColorTex,\r\n this.currentDepthTex,\r\n this.motionVector,\r\n this.prevMotionVector,\r\n this.screenUV,\r\n this.texSize,\r\n debug\r\n );\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.resolvedColor, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.resolvedColor), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@TAA_Resolve';\r\n return program;\r\n }\r\n}\r\n"],"names":["TAA","AbstractPostEffect","_resolveProgram","_skyMotionVectorProgram","_box","_texSize","Vector2","_bindGroup","_skyMotionVectorBindGroup","_layer","PostEffectLayer","end","renderSkyMotionVectors","ctx","fb","device","pool","fetchTemporalFramebuffer","motionVectorTexture","depthTexture","program","_getSkyMotionVectorProgram","createBindGroup","bindGroupLayouts","box","_getBox","setValue","camera","viewProjectionMatrix","prevVPMatrix","getWorldPosition","prevPosition","pushDeviceStates","setProgram","setBindGroup","setRenderStates","getDefaultRenderState","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer","apply","inputColorTexture","sceneDepthTexture","srgbOutput","historyMgr","getHistoryResourceManager","colorDesc","format","sizeMode","width","height","colorSize","motionVectorDesc","motionVectorSize","hasHistory","isCompatible","RGHistoryResources","TAA_COLOR","TAA_MOTION_VECTOR","passThrough","currentColorTex","getFramebuffer","getColorAttachments","retainTexture","queueCommit","prevColorTex","getPrevious","prevMotionVectorTex","TAADebug","_getResolveProgram","setTexture","fetchSampler","needFlip","setXY","drawFullscreenQuad","requireLinearDepthTexture","_ctx","requireDepthAttachment","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","w","$builtins","position","$outputs","currentPos","prevPos","fragment","color","motionVector","sub","div","xy","name","BoxShape","size","needNormal","needUV","debug","flip","int","vec2","uv","$if","notEqual","y","neg","historyColorTex","tex2D","currentDepthTex","prevMotionVector","texSize","srgbOut","outColor","screenUV","fragCoord","resolvedColor","temporalResolve","equal","$else","linearToGamma"],"mappings":"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"}
|
package/dist/render/drawable.js
CHANGED