@zephyr3d/scene 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animation.js +4 -15
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +22 -9
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +1 -0
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +0 -1
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +7 -1
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -3
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +37 -41
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +0 -1
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +0 -1
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +7 -14
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +0 -1
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +13 -4
- package/dist/app/api.js.map +1 -1
- package/dist/app/app.js +13 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +33 -45
- package/dist/app/engine.js.map +1 -1
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +10 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +11 -22
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +79 -58
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +5 -5
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +6 -2
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +6 -2
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +22 -15
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +2 -1
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +2 -2
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +9 -11
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +1 -3
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +121 -37
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +19 -17
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +45 -43
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +27 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +26 -17
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +14453 -15609
- package/dist/index.js +17 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +11 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +10 -9
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +3 -3
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -0
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js.map +1 -1
- package/dist/material/pbrblueprint.js +180 -22
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +36 -53
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +0 -1
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +7 -5
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -6
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +0 -10
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +4 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +15 -17
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +3 -4
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +8 -4
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +67 -64
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +1 -2
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +13 -13
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -7
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +4 -5
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +10 -5
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +16 -22
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +27 -52
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +4 -5
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +16 -14
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +4 -2
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +9 -10
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +22 -4
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +93 -15
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +25 -22
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +0 -16
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +7 -4
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +20 -35
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +5 -4
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +65 -48
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +35 -30
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +17 -29
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +1 -1
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +3 -1
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +6 -18
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +9 -3
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +2 -2
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +2 -2
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +2 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +2 -2
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +5 -6
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +2 -2
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/aabbtree.js +1 -1
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +578 -104
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +471 -9
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/common.js +1 -1
- package/dist/utility/blueprint/common.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +9 -5
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +288 -80
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +92 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +62 -45
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/blueprint/node.js +28 -1
- package/dist/utility/blueprint/node.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js.map +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +1 -1
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/json.js +19 -15
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +89 -22
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +23 -21
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -3
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +97 -9
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +102 -28
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +14 -12
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +154 -26
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +71 -100
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +3 -2
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +42 -9
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +7 -5
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -15
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +3 -2
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +8 -6
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +11 -9
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +14 -14
- package/dist/values.js.map +1 -1
- package/package.json +80 -80
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weightedblended_oit.js","sources":["../../src/render/weightedblended_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { Disposable, Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Weighted-blended OIT renderer.\r\n *\r\n * @remarks\r\n * The weighed-blended OIT renderer supports both WebGL, WebGL2 and WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class WeightedBlendedOIT extends Disposable implements OIT {\r\n /** Type name of WeightedBlendedOIT */\r\n public static readonly type = 'wb';\r\n private static _compositeProgram: GPUProgram;\r\n private static _compositeBindGroup: BindGroup;\r\n private static _compositeRenderStates: RenderStateSet;\r\n\r\n constructor() {\r\n super();\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType(): string {\r\n return WeightedBlendedOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(_deviceType: string): boolean {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(_ctx: DrawContext): number {\r\n return 1;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(_ctx: DrawContext) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.$outputs.outColor = pb.vec4();\r\n scope.$outputs.outAlpha = pb.getDevice().type === 'webgl' ? pb.vec4() : pb.float();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, _pass: number): boolean {\r\n const device = ctx.device;\r\n const accumBuffer = this.getAccumFramebuffer(ctx, device);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(accumBuffer);\r\n device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = device.getFramebuffer();\r\n device.popDeviceStates();\r\n const accumTargets = accumBuffer.getColorAttachments();\r\n this.composite(ctx, device, accumTargets[0] as Texture2D, accumTargets[1] as Texture2D);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash(): string {\r\n return this.getType();\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(_ctx: DrawContext, _bindGroup: BindGroup) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('Z_WBOIT_depthWeight', [pb.float('z'), pb.float('a')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.mul(\r\n pb.pow(pb.add(pb.min(1, pb.mul(this.a, 10)), 0.01), 3),\r\n 1e8,\r\n pb.pow(pb.sub(1, pb.mul(this.z, 0.9)), 2)\r\n ),\r\n 1e-2,\r\n 3e3\r\n )\r\n );\r\n });\r\n pb.func('Z_WBOIT_output', [pb.vec4('color')], function () {\r\n this.$l.w = this.Z_WBOIT_depthWeight(this.$builtins.fragCoord.z, this.color.a);\r\n this.$outputs[0] = pb.vec4(pb.mul(this.color.rgb, this.w), this.color.a);\r\n this.$outputs[1] =\r\n pb.getDevice().type === 'webgl'\r\n ? pb.vec4(pb.mul(this.color.a, this.w))\r\n : pb.mul(this.color.a, this.w);\r\n });\r\n scope.Z_WBOIT_output(color);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const blendingState = rs.useBlendingState();\r\n blendingState.enable(true);\r\n blendingState.setBlendEquation('add', 'add');\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n blendingState.setBlendFuncAlpha('zero', 'inv-src-alpha');\r\n const depthState = rs.useDepthState();\r\n depthState.enableWrite(false).enableTest(true);\r\n }\r\n /** @internal */\r\n private composite(ctx: DrawContext, device: AbstractDevice, accumColor: Texture2D, accumAlpha: Texture2D) {\r\n device.setProgram(WeightedBlendedOIT.getCompositeProgram(device));\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumColorTex', accumColor);\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumAlphaTex', accumAlpha);\r\n device.setBindGroup(0, WeightedBlendedOIT._compositeBindGroup);\r\n drawFullscreenQuad(WeightedBlendedOIT._compositeRenderStates);\r\n }\r\n /** @internal */\r\n private getAccumFramebuffer(ctx: DrawContext, device: AbstractDevice) {\r\n const width = ctx.depthTexture.width;\r\n const height = ctx.depthTexture.height;\r\n const accumColor = device.pool.fetchTemporalTexture2D(false, 'rgba16f', width, height, false);\r\n const accumAlpha = device.pool.fetchTemporalTexture2D(\r\n false,\r\n device.type === 'webgl' ? 'rgba16f' : 'r16f',\r\n width,\r\n height,\r\n false\r\n );\r\n const fb = device.pool.createTemporalFramebuffer(true, [accumColor, accumAlpha], ctx.depthTexture);\r\n device.pool.releaseTexture(accumColor);\r\n device.pool.releaseTexture(accumAlpha);\r\n return fb;\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\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 if (device.type === 'webgpu') {\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.$outputs.outColor = pb.vec4();\r\n this.accumColorTex = pb.tex2D().uniform(0);\r\n this.accumAlphaTex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$l.accumColor = pb.textureSample(this.accumColorTex, this.$inputs.uv);\r\n this.$l.accumAlpha = pb.textureSample(this.accumAlphaTex, this.$inputs.uv);\r\n this.$l.r = this.accumColor.a;\r\n this.accumColor.a = this.accumAlpha.r;\r\n this.$outputs.outColor = pb.vec4(\r\n pb.div(this.accumColor.rgb, pb.clamp(this.accumColor.a, 0.0001, 50000)),\r\n this.r\r\n );\r\n });\r\n }\r\n });\r\n this._compositeProgram.name = '@WBOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('inv-src-alpha', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n return this._compositeProgram;\r\n }\r\n}\r\n"],"names":["WeightedBlendedOIT","Disposable","type","_compositeProgram","_compositeBindGroup","_compositeRenderStates","getType","supportDevice","_deviceType","wantsPremultipliedAlpha","begin","_ctx","end","setupFragmentOutput","scope","pb","$builder","$outputs","outColor","vec4","outAlpha","getDevice","float","beginPass","ctx","_pass","device","accumBuffer","getAccumFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","Vector4","endPass","getFramebuffer","popDeviceStates","accumTargets","getColorAttachments","composite","calculateHash","applyUniforms","_bindGroup","outputFragmentColor","color","func","$return","clamp","mul","pow","add","min","a","sub","z","$l","w","Z_WBOIT_depthWeight","$builtins","fragCoord","rgb","Z_WBOIT_output","setRenderStates","rs","blendingState","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","depthState","useDepthState","enableWrite","enableTest","accumColor","accumAlpha","setProgram","getCompositeProgram","setTexture","setBindGroup","drawFullscreenQuad","width","depthTexture","height","pool","fetchTemporalTexture2D","fb","createTemporalFramebuffer","releaseTexture","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","xy","y","neg","fragment","accumColorTex","tex2D","uniform","accumAlphaTex","textureSample","r","div","name","createBindGroup","bindGroupLayouts","createRenderStateSet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weightedblended_oit.js","sources":["../../src/render/weightedblended_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { Disposable, Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Weighted-blended OIT renderer.\r\n *\r\n * @remarks\r\n * The weighed-blended OIT renderer supports both WebGL, WebGL2 and WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class WeightedBlendedOIT extends Disposable implements OIT {\r\n /** Type name of WeightedBlendedOIT */\r\n public static readonly type = 'wb';\r\n private static _compositeProgram: GPUProgram;\r\n private static _compositeBindGroup: BindGroup;\r\n private static _compositeRenderStates: RenderStateSet;\r\n\r\n constructor() {\r\n super();\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return WeightedBlendedOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(_deviceType: string) {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(_ctx: DrawContext) {\r\n return 1;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(_ctx: DrawContext) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.$outputs.outColor = pb.vec4();\r\n scope.$outputs.outAlpha = pb.getDevice().type === 'webgl' ? pb.vec4() : pb.float();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = this.getAccumFramebuffer(ctx, device);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(accumBuffer);\r\n device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = device.getFramebuffer()!;\r\n device.popDeviceStates();\r\n const accumTargets = accumBuffer.getColorAttachments();\r\n this.composite(ctx, device, accumTargets[0] as Texture2D, accumTargets[1] as Texture2D);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this.getType();\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(_ctx: DrawContext, _bindGroup: BindGroup) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('Z_WBOIT_depthWeight', [pb.float('z'), pb.float('a')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.mul(\r\n pb.pow(pb.add(pb.min(1, pb.mul(this.a, 10)), 0.01), 3),\r\n 1e8,\r\n pb.pow(pb.sub(1, pb.mul(this.z, 0.9)), 2)\r\n ),\r\n 1e-2,\r\n 3e3\r\n )\r\n );\r\n });\r\n pb.func('Z_WBOIT_output', [pb.vec4('color')], function () {\r\n this.$l.w = this.Z_WBOIT_depthWeight(this.$builtins.fragCoord.z, this.color.a);\r\n this.$outputs[0] = pb.vec4(pb.mul(this.color.rgb, this.w), this.color.a);\r\n this.$outputs[1] =\r\n pb.getDevice().type === 'webgl'\r\n ? pb.vec4(pb.mul(this.color.a, this.w))\r\n : pb.mul(this.color.a, this.w);\r\n });\r\n scope.Z_WBOIT_output(color);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const blendingState = rs.useBlendingState();\r\n blendingState.enable(true);\r\n blendingState.setBlendEquation('add', 'add');\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n blendingState.setBlendFuncAlpha('zero', 'inv-src-alpha');\r\n const depthState = rs.useDepthState();\r\n depthState.enableWrite(false).enableTest(true);\r\n }\r\n /** @internal */\r\n private composite(ctx: DrawContext, device: AbstractDevice, accumColor: Texture2D, accumAlpha: Texture2D) {\r\n device.setProgram(WeightedBlendedOIT.getCompositeProgram(device));\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumColorTex', accumColor);\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumAlphaTex', accumAlpha);\r\n device.setBindGroup(0, WeightedBlendedOIT._compositeBindGroup);\r\n drawFullscreenQuad(WeightedBlendedOIT._compositeRenderStates);\r\n }\r\n /** @internal */\r\n private getAccumFramebuffer(ctx: DrawContext, device: AbstractDevice) {\r\n const width = ctx.depthTexture!.width;\r\n const height = ctx.depthTexture!.height;\r\n const accumColor = device.pool.fetchTemporalTexture2D(false, 'rgba16f', width, height, false);\r\n const accumAlpha = device.pool.fetchTemporalTexture2D(\r\n false,\r\n device.type === 'webgl' ? 'rgba16f' : 'r16f',\r\n width,\r\n height,\r\n false\r\n );\r\n const fb = device.pool.createTemporalFramebuffer(true, [accumColor, accumAlpha], ctx.depthTexture);\r\n device.pool.releaseTexture(accumColor);\r\n device.pool.releaseTexture(accumAlpha);\r\n return fb;\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\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 if (device.type === 'webgpu') {\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.$outputs.outColor = pb.vec4();\r\n this.accumColorTex = pb.tex2D().uniform(0);\r\n this.accumAlphaTex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$l.accumColor = pb.textureSample(this.accumColorTex, this.$inputs.uv);\r\n this.$l.accumAlpha = pb.textureSample(this.accumAlphaTex, this.$inputs.uv);\r\n this.$l.r = this.accumColor.a;\r\n this.accumColor.a = this.accumAlpha.r;\r\n this.$outputs.outColor = pb.vec4(\r\n pb.div(this.accumColor.rgb, pb.clamp(this.accumColor.a, 0.0001, 50000)),\r\n this.r\r\n );\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@WBOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('inv-src-alpha', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n return this._compositeProgram;\r\n }\r\n}\r\n"],"names":["WeightedBlendedOIT","Disposable","type","_compositeProgram","_compositeBindGroup","_compositeRenderStates","getType","supportDevice","_deviceType","wantsPremultipliedAlpha","begin","_ctx","end","setupFragmentOutput","scope","pb","$builder","$outputs","outColor","vec4","outAlpha","getDevice","float","beginPass","ctx","_pass","device","accumBuffer","getAccumFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","Vector4","endPass","getFramebuffer","popDeviceStates","accumTargets","getColorAttachments","composite","calculateHash","applyUniforms","_bindGroup","outputFragmentColor","color","func","$return","clamp","mul","pow","add","min","a","sub","z","$l","w","Z_WBOIT_depthWeight","$builtins","fragCoord","rgb","Z_WBOIT_output","setRenderStates","rs","blendingState","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","depthState","useDepthState","enableWrite","enableTest","accumColor","accumAlpha","setProgram","getCompositeProgram","setTexture","setBindGroup","drawFullscreenQuad","width","depthTexture","height","pool","fetchTemporalTexture2D","fb","createTemporalFramebuffer","releaseTexture","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","xy","y","neg","fragment","accumColorTex","tex2D","uniform","accumAlphaTex","textureSample","r","div","name","createBindGroup","bindGroupLayouts","createRenderStateSet"],"mappings":";;;AAeA;;;;;;;IAQO,MAAMA,kBAA2BC,SAAAA,UAAAA,CAAAA;2CAEtC,OAAuBC,IAAAA,GAAO,IAAK;AACnC,IAAA,OAAeC,iBAA8B;AAC7C,IAAA,OAAeC,mBAA+B;AAC9C,IAAA,OAAeC,sBAAuC;IAEtD,WAAc,EAAA;QACZ,KAAK,EAAA;AACP;AACA;;AAEC,MACDC,OAAU,GAAA;AACR,QAAA,OAAON,mBAAmBE,IAAI;AAChC;AACA;;MAGAK,aAAAA,CAAcC,WAAmB,EAAE;QACjC,OAAO,IAAA;AACT;AACA;;AAEC,MACDC,uBAA0B,GAAA;QACxB,OAAO,KAAA;AACT;AACA;;MAGAC,KAAAA,CAAMC,IAAiB,EAAE;QACvB,OAAO,CAAA;AACT;AACA;;MAGAC,GAAAA,CAAID,IAAiB,EAAE;AACrB,QAAA;AACF;AACA;;MAGAE,mBAAAA,CAAoBC,KAAoB,EAAE;QACxC,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMG,QAAQ,CAACC,QAAQ,GAAGH,GAAGI,IAAI,EAAA;AACjCL,QAAAA,KAAAA,CAAMG,QAAQ,CAACG,QAAQ,GAAGL,GAAGM,SAAS,EAAA,CAAGnB,IAAI,KAAK,OAAUa,GAAAA,EAAAA,CAAGI,IAAI,EAAA,GAAKJ,GAAGO,KAAK,EAAA;AAClF;AACA;;AAEC,MACDC,SAAUC,CAAAA,GAAgB,EAAEC,KAAa,EAAE;QACzC,MAAMC,MAAAA,GAASF,IAAIE,MAAM;AACzB,QAAA,MAAMC,WAAc,GAAA,IAAI,CAACC,mBAAmB,CAACJ,GAAKE,EAAAA,MAAAA,CAAAA;AAClDA,QAAAA,MAAAA,CAAOG,gBAAgB,EAAA;AACvBH,QAAAA,MAAAA,CAAOI,cAAc,CAACH,WAAAA,CAAAA;QACtBD,MAAOK,CAAAA,gBAAgB,CAAC,IAAIC,OAAAA,CAAQ,GAAG,CAAG,EAAA,CAAA,EAAG,IAAI,IAAM,EAAA,IAAA,CAAA;QACvD,OAAO,IAAA;AACT;AACA;;AAEC,MACDC,OAAQT,CAAAA,GAAgB,EAAEC,KAAa,EAAE;QACvC,MAAMC,MAAAA,GAASF,IAAIE,MAAM;QACzB,MAAMC,WAAAA,GAAcD,OAAOQ,cAAc,EAAA;AACzCR,QAAAA,MAAAA,CAAOS,eAAe,EAAA;QACtB,MAAMC,YAAAA,GAAeT,YAAYU,mBAAmB,EAAA;QACpD,IAAI,CAACC,SAAS,CAACd,GAAKE,EAAAA,MAAAA,EAAQU,YAAY,CAAC,CAAE,CAAA,EAAeA,YAAY,CAAC,CAAE,CAAA,CAAA;AAC3E;AACA;;AAEC,MACDG,aAAgB,GAAA;QACd,OAAO,IAAI,CAACjC,OAAO,EAAA;AACrB;AACA;;AAEC,MACDkC,aAAc7B,CAAAA,IAAiB,EAAE8B,UAAqB,EAAE;AACtD,QAAA;AACF;AACA;;AAEC,MACDC,mBAAoB5B,CAAAA,KAA4B,EAAE6B,KAAkB,EAAE;QACpE,MAAM5B,EAAAA,GAAKD,MAAME,QAAQ;QACzBD,EAAG6B,CAAAA,IAAI,CAAC,qBAAuB,EAAA;AAAC7B,YAAAA,EAAAA,CAAGO,KAAK,CAAC,GAAA,CAAA;AAAMP,YAAAA,EAAAA,CAAGO,KAAK,CAAC,GAAA;SAAK,EAAE,WAAA;YAC7D,IAAI,CAACuB,OAAO,CACV9B,EAAAA,CAAG+B,KAAK,CACN/B,EAAAA,CAAGgC,GAAG,CACJhC,EAAAA,CAAGiC,GAAG,CAACjC,EAAAA,CAAGkC,GAAG,CAAClC,EAAAA,CAAGmC,GAAG,CAAC,CAAA,EAAGnC,EAAGgC,CAAAA,GAAG,CAAC,IAAI,CAACI,CAAC,EAAE,MAAM,IAAO,CAAA,EAAA,CAAA,CAAA,EACpD,KACApC,EAAGiC,CAAAA,GAAG,CAACjC,EAAGqC,CAAAA,GAAG,CAAC,CAAGrC,EAAAA,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACM,CAAC,EAAE,GAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAEzC,IACA,EAAA,GAAA,CAAA,CAAA;AAGN,SAAA,CAAA;QACAtC,EAAG6B,CAAAA,IAAI,CAAC,gBAAkB,EAAA;AAAC7B,YAAAA,EAAAA,CAAGI,IAAI,CAAC,OAAA;SAAS,EAAE,WAAA;YAC5C,IAAI,CAACmC,EAAE,CAACC,CAAC,GAAG,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACC,SAAS,CAACC,SAAS,CAACL,CAAC,EAAE,IAAI,CAACV,KAAK,CAACQ,CAAC,CAAA;YAC7E,IAAI,CAAClC,QAAQ,CAAC,CAAE,CAAA,GAAGF,GAAGI,IAAI,CAACJ,EAAGgC,CAAAA,GAAG,CAAC,IAAI,CAACJ,KAAK,CAACgB,GAAG,EAAE,IAAI,CAACJ,CAAC,CAAA,EAAG,IAAI,CAACZ,KAAK,CAACQ,CAAC,CAAA;AACvE,YAAA,IAAI,CAAClC,QAAQ,CAAC,CAAE,CAAA,GACdF,GAAGM,SAAS,EAAA,CAAGnB,IAAI,KAAK,UACpBa,EAAGI,CAAAA,IAAI,CAACJ,EAAGgC,CAAAA,GAAG,CAAC,IAAI,CAACJ,KAAK,CAACQ,CAAC,EAAE,IAAI,CAACI,CAAC,KACnCxC,EAAGgC,CAAAA,GAAG,CAAC,IAAI,CAACJ,KAAK,CAACQ,CAAC,EAAE,IAAI,CAACI,CAAC,CAAA;AACnC,SAAA,CAAA;AACAzC,QAAAA,KAAAA,CAAM8C,cAAc,CAACjB,KAAAA,CAAAA;QACrB,OAAO,IAAA;AACT;AACA;;MAGAkB,eAAAA,CAAgBC,EAAkB,EAAE;QAClC,MAAMC,aAAAA,GAAgBD,GAAGE,gBAAgB,EAAA;AACzCD,QAAAA,aAAAA,CAAcE,MAAM,CAAC,IAAA,CAAA;QACrBF,aAAcG,CAAAA,gBAAgB,CAAC,KAAO,EAAA,KAAA,CAAA;QACtCH,aAAcI,CAAAA,eAAe,CAAC,KAAO,EAAA,KAAA,CAAA;QACrCJ,aAAcK,CAAAA,iBAAiB,CAAC,MAAQ,EAAA,eAAA,CAAA;QACxC,MAAMC,UAAAA,GAAaP,GAAGQ,aAAa,EAAA;AACnCD,QAAAA,UAAAA,CAAWE,WAAW,CAAC,KAAOC,CAAAA,CAAAA,UAAU,CAAC,IAAA,CAAA;AAC3C;qBAEA,SAAQlC,CAAUd,GAAgB,EAAEE,MAAsB,EAAE+C,UAAqB,EAAEC,UAAqB,EAAE;AACxGhD,QAAAA,MAAAA,CAAOiD,UAAU,CAAC3E,kBAAmB4E,CAAAA,mBAAmB,CAAClD,MAAAA,CAAAA,CAAAA;AACzD1B,QAAAA,kBAAAA,CAAmBI,mBAAmB,CAACyE,UAAU,CAAC,eAAiBJ,EAAAA,UAAAA,CAAAA;AACnEzE,QAAAA,kBAAAA,CAAmBI,mBAAmB,CAACyE,UAAU,CAAC,eAAiBH,EAAAA,UAAAA,CAAAA;AACnEhD,QAAAA,MAAAA,CAAOoD,YAAY,CAAC,CAAG9E,EAAAA,kBAAAA,CAAmBI,mBAAmB,CAAA;AAC7D2E,QAAAA,kBAAAA,CAAmB/E,mBAAmBK,sBAAsB,CAAA;AAC9D;AACA,qBACA,mBAAQuB,CAAoBJ,GAAgB,EAAEE,MAAsB,EAAE;AACpE,QAAA,MAAMsD,KAAQxD,GAAAA,GAAAA,CAAIyD,YAAY,CAAED,KAAK;AACrC,QAAA,MAAME,MAAS1D,GAAAA,GAAAA,CAAIyD,YAAY,CAAEC,MAAM;QACvC,MAAMT,UAAAA,GAAa/C,OAAOyD,IAAI,CAACC,sBAAsB,CAAC,KAAA,EAAO,SAAWJ,EAAAA,KAAAA,EAAOE,MAAQ,EAAA,KAAA,CAAA;AACvF,QAAA,MAAMR,UAAahD,GAAAA,MAAAA,CAAOyD,IAAI,CAACC,sBAAsB,CACnD,KAAA,EACA1D,MAAOxB,CAAAA,IAAI,KAAK,OAAA,GAAU,SAAY,GAAA,MAAA,EACtC8E,OACAE,MACA,EAAA,KAAA,CAAA;AAEF,QAAA,MAAMG,KAAK3D,MAAOyD,CAAAA,IAAI,CAACG,yBAAyB,CAAC,IAAM,EAAA;AAACb,YAAAA,UAAAA;AAAYC,YAAAA;AAAW,SAAA,EAAElD,IAAIyD,YAAY,CAAA;QACjGvD,MAAOyD,CAAAA,IAAI,CAACI,cAAc,CAACd,UAAAA,CAAAA;QAC3B/C,MAAOyD,CAAAA,IAAI,CAACI,cAAc,CAACb,UAAAA,CAAAA;QAC3B,OAAOW,EAAAA;AACT;AACA,qBACA,OAAeT,mBAAoBlD,CAAAA,MAAsB,EAAE;AACzD,QAAA,IAAI,CAAC,IAAI,CAACvB,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAACA,iBAAiB,GAAGuB,MAAAA,CAAO8D,kBAAkB,CAAC;AACjDC,gBAAAA,MAAAA,CAAAA,CAAO1E,EAAE,EAAA;oBACP,IAAI,CAAC2E,OAAO,CAACC,GAAG,GAAG5E,EAAG6E,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,oBAAA,IAAI,CAAC5E,QAAQ,CAAC6E,EAAE,GAAG/E,GAAG6E,IAAI,EAAA;AAC1B7E,oBAAAA,EAAAA,CAAGgF,IAAI,CAAC,WAAA;AACN,wBAAA,IAAI,CAACtC,SAAS,CAACuC,QAAQ,GAAGjF,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACuE,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;wBACvD,IAAI,CAAC1E,QAAQ,CAAC6E,EAAE,GAAG/E,EAAGkC,CAAAA,GAAG,CAAClC,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAAC2C,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAMlF,EAAG6E,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;wBACpE,IAAIlE,MAAAA,CAAOxB,IAAI,KAAK,QAAU,EAAA;AAC5B,4BAAA,IAAI,CAACuD,SAAS,CAACuC,QAAQ,CAACE,CAAC,GAAGnF,EAAAA,CAAGoF,GAAG,CAAC,IAAI,CAAC1C,SAAS,CAACuC,QAAQ,CAACE,CAAC,CAAA;AAC9D;AACF,qBAAA,CAAA;AACF,iBAAA;AACAE,gBAAAA,QAAAA,CAAAA,CAASrF,EAAE,EAAA;AACT,oBAAA,IAAI,CAACE,QAAQ,CAACC,QAAQ,GAAGH,GAAGI,IAAI,EAAA;AAChC,oBAAA,IAAI,CAACkF,aAAa,GAAGtF,GAAGuF,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACxC,oBAAA,IAAI,CAACC,aAAa,GAAGzF,GAAGuF,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACxCxF,oBAAAA,EAAAA,CAAGgF,IAAI,CAAC,WAAA;AACN,wBAAA,IAAI,CAACzC,EAAE,CAACmB,UAAU,GAAG1D,GAAG0F,aAAa,CAAC,IAAI,CAACJ,aAAa,EAAE,IAAI,CAACX,OAAO,CAACI,EAAE,CAAA;AACzE,wBAAA,IAAI,CAACxC,EAAE,CAACoB,UAAU,GAAG3D,GAAG0F,aAAa,CAAC,IAAI,CAACD,aAAa,EAAE,IAAI,CAACd,OAAO,CAACI,EAAE,CAAA;wBACzE,IAAI,CAACxC,EAAE,CAACoD,CAAC,GAAG,IAAI,CAACjC,UAAU,CAACtB,CAAC;wBAC7B,IAAI,CAACsB,UAAU,CAACtB,CAAC,GAAG,IAAI,CAACuB,UAAU,CAACgC,CAAC;AACrC,wBAAA,IAAI,CAACzF,QAAQ,CAACC,QAAQ,GAAGH,EAAAA,CAAGI,IAAI,CAC9BJ,EAAG4F,CAAAA,GAAG,CAAC,IAAI,CAAClC,UAAU,CAACd,GAAG,EAAE5C,EAAG+B,CAAAA,KAAK,CAAC,IAAI,CAAC2B,UAAU,CAACtB,CAAC,EAAE,MAAA,EAAQ,KAChE,CAAA,CAAA,EAAA,IAAI,CAACuD,CAAC,CAAA;AAEV,qBAAA,CAAA;AACF;AACF,aAAA,CAAA;AACA,YAAA,IAAI,CAACvG,iBAAiB,CAACyG,IAAI,GAAG,kBAAA;AAC9B,YAAA,IAAI,CAACxG,mBAAmB,GAAGsB,MAAAA,CAAOmF,eAAe,CAAC,IAAI,CAAC1G,iBAAiB,CAAC2G,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC5F,YAAA,IAAI,CAACzG,sBAAsB,GAAGqB,MAAAA,CAAOqF,oBAAoB,EAAA;AACzD,YAAA,IAAI,CAAC1G,sBAAsB,CACxB2D,gBAAgB,GAChBC,MAAM,CAAC,IACPE,CAAAA,CAAAA,eAAe,CAAC,eAAA,EAAiB,WACjCC,CAAAA,CAAAA,iBAAiB,CAAC,MAAQ,EAAA,KAAA,CAAA;YAC7B,IAAI,CAAC/D,sBAAsB,CAACiE,aAAa,GAAGE,UAAU,CAAC,KAAOD,CAAAA,CAAAA,WAAW,CAAC,KAAA,CAAA;AAC5E;QACA,OAAO,IAAI,CAACpE,iBAAiB;AAC/B;AACF;;;;"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { applyMixins, DRef, Vector2, Vector3, Quaternion } from '@zephyr3d/base';
|
|
2
|
+
import { GraphNode } from './graph_node.js';
|
|
3
|
+
import { getDevice } from '../app/api.js';
|
|
4
|
+
import { QUEUE_OPAQUE } from '../values.js';
|
|
5
|
+
import '@zephyr3d/device';
|
|
6
|
+
import '../material/shader/helper.js';
|
|
7
|
+
import '../material/lambert.js';
|
|
8
|
+
import '../material/blinn.js';
|
|
9
|
+
import '../material/unlit.js';
|
|
10
|
+
import '../material/particle.js';
|
|
11
|
+
import { RenderBundleWrapper } from '../render/renderbundle_wrapper.js';
|
|
12
|
+
import '../material/meshmaterial.js';
|
|
13
|
+
import '../material/grassmaterial.js';
|
|
14
|
+
import '../material/terrain-cm.js';
|
|
15
|
+
import '../material/pbrmr.js';
|
|
16
|
+
import '../material/pbrsg.js';
|
|
17
|
+
import '../material/pbrblueprint.js';
|
|
18
|
+
import { SpriteMaterial } from '../material/sprite.js';
|
|
19
|
+
import '../material/sprite_std.js';
|
|
20
|
+
import '../utility/blueprint/material/texture.js';
|
|
21
|
+
import '../render/renderer.js';
|
|
22
|
+
import { Primitive } from '../render/primitive.js';
|
|
23
|
+
import '../render/sky.js';
|
|
24
|
+
import '../render/clipmap.js';
|
|
25
|
+
import '../shaders/atmosphere.js';
|
|
26
|
+
import { BoundingBox } from '../utility/bounding_volume.js';
|
|
27
|
+
import { mixinDrawable } from '../render/drawable_mixin.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Mesh node
|
|
31
|
+
* @public
|
|
32
|
+
*/ class BaseSprite extends applyMixins(GraphNode, mixinDrawable) {
|
|
33
|
+
/** @internal */ static _primitive = new DRef();
|
|
34
|
+
/** @internal */ _material;
|
|
35
|
+
/** @internal */ _instanceHash;
|
|
36
|
+
/** @internal */ _batchable;
|
|
37
|
+
/** @internal */ _pickTarget;
|
|
38
|
+
/** @internal */ _renderBundle;
|
|
39
|
+
/** @internal */ _useRenderBundle;
|
|
40
|
+
/** @internal */ _materialChangeTag;
|
|
41
|
+
/** @internal */ _anchor;
|
|
42
|
+
/** @internal */ _rotateAngle;
|
|
43
|
+
/**
|
|
44
|
+
* Creates an instance of mesh node
|
|
45
|
+
* @param scene - The scene to which the mesh node belongs
|
|
46
|
+
*/ constructor(scene){
|
|
47
|
+
super(scene);
|
|
48
|
+
this._material = new DRef();
|
|
49
|
+
this._instanceHash = null;
|
|
50
|
+
this._pickTarget = {
|
|
51
|
+
node: this
|
|
52
|
+
};
|
|
53
|
+
this._batchable = getDevice().type !== 'webgl';
|
|
54
|
+
this._anchor = new Vector2(0.5, 0.5);
|
|
55
|
+
this._rotateAngle = 0;
|
|
56
|
+
this._renderBundle = {};
|
|
57
|
+
this._useRenderBundle = true;
|
|
58
|
+
this._materialChangeTag = null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* {@inheritDoc Drawable.getName}
|
|
62
|
+
*/ getName() {
|
|
63
|
+
return this._name;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* {@inheritDoc BatchDrawable.getInstanceId}
|
|
67
|
+
*/ getInstanceId(_renderPass) {
|
|
68
|
+
return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* {@inheritDoc BatchDrawable.getInstanceUniforms}
|
|
72
|
+
*/ getInstanceUniforms() {
|
|
73
|
+
return this._material.get().$instanceUniforms;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* {@inheritDoc Drawable.getPickTarget }
|
|
77
|
+
*/ getPickTarget() {
|
|
78
|
+
return this._pickTarget;
|
|
79
|
+
}
|
|
80
|
+
setPickTarget(node, label) {
|
|
81
|
+
this._pickTarget = {
|
|
82
|
+
node,
|
|
83
|
+
label
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Material of the mesh */ get material() {
|
|
87
|
+
return this._material.get();
|
|
88
|
+
}
|
|
89
|
+
set material(m) {
|
|
90
|
+
if (this._material.get() !== m && m instanceof SpriteMaterial) {
|
|
91
|
+
this._material.set(m);
|
|
92
|
+
if (m) {
|
|
93
|
+
this.onSetMaterial(m);
|
|
94
|
+
RenderBundleWrapper.materialAttached(m.coreMaterial, this);
|
|
95
|
+
}
|
|
96
|
+
this._instanceHash = m ? `${this.constructor.name}:${this._scene?.id ?? 0}:${m.instanceId}` : null;
|
|
97
|
+
RenderBundleWrapper.drawableChanged(this);
|
|
98
|
+
this._materialChangeTag = null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
get anchorX() {
|
|
102
|
+
return this._anchor.x;
|
|
103
|
+
}
|
|
104
|
+
set anchorX(value) {
|
|
105
|
+
if (this._anchor.x !== value) {
|
|
106
|
+
this._anchor.x = value;
|
|
107
|
+
this.invalidateWorldBoundingVolume(false);
|
|
108
|
+
const material = this._material.get();
|
|
109
|
+
if (material) {
|
|
110
|
+
material.anchorX = this._anchor.x;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
get anchorY() {
|
|
115
|
+
return this._anchor.y;
|
|
116
|
+
}
|
|
117
|
+
set anchorY(value) {
|
|
118
|
+
if (this._anchor.y !== value) {
|
|
119
|
+
this._anchor.y = value;
|
|
120
|
+
this.invalidateWorldBoundingVolume(false);
|
|
121
|
+
const material = this._material.get();
|
|
122
|
+
if (material) {
|
|
123
|
+
material.anchorY = this._anchor.y;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
get uvTopLeft() {
|
|
128
|
+
const uvinfo = this._material.get().uvinfo;
|
|
129
|
+
return new Vector2(uvinfo.x, uvinfo.y);
|
|
130
|
+
}
|
|
131
|
+
set uvTopLeft(value) {
|
|
132
|
+
const uvinfo = this._material.get().uvinfo;
|
|
133
|
+
this._material.get().setUVInfo(value.x, value.y, uvinfo.z, uvinfo.w);
|
|
134
|
+
}
|
|
135
|
+
get uvBottomRight() {
|
|
136
|
+
const uvinfo = this._material.get().uvinfo;
|
|
137
|
+
return new Vector2(uvinfo.z, uvinfo.w);
|
|
138
|
+
}
|
|
139
|
+
set uvBottomRight(value) {
|
|
140
|
+
const uvinfo = this._material.get().uvinfo;
|
|
141
|
+
this._material.get().setUVInfo(uvinfo.x, uvinfo.y, value.x, value.y);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* {@inheritDoc Drawable.getMorphData}
|
|
145
|
+
*/ getMorphData() {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* {@inheritDoc Drawable.getMorphInfo}
|
|
150
|
+
*/ getMorphInfo() {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* {@inheritDoc Drawable.isBatchable}
|
|
155
|
+
*/ isBatchable() {
|
|
156
|
+
return this._batchable && !!this._material.get() && this._material.get().isBatchable();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* {@inheritDoc Drawable.getQueueType}
|
|
160
|
+
*/ getQueueType() {
|
|
161
|
+
return this.material?.getQueueType() ?? QUEUE_OPAQUE;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* {@inheritDoc Drawable.isUnlit}
|
|
165
|
+
*/ isUnlit() {
|
|
166
|
+
return !this.material?.supportLighting();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* {@inheritDoc Drawable.needSceneColor}
|
|
170
|
+
*/ needSceneColor() {
|
|
171
|
+
return this.material?.needSceneColor();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* {@inheritDoc Drawable.needSceneDepth}
|
|
175
|
+
*/ needSceneDepth() {
|
|
176
|
+
return this.material?.needSceneDepth();
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* {@inheritDoc Drawable.draw}
|
|
180
|
+
*/ draw(ctx, renderQueue, hash) {
|
|
181
|
+
const material = this.material;
|
|
182
|
+
const primitive = this.getPrimitive();
|
|
183
|
+
if (material && primitive) {
|
|
184
|
+
if (this._useRenderBundle && !ctx.instanceData && hash) {
|
|
185
|
+
if (this._materialChangeTag !== material.changeTag) {
|
|
186
|
+
this._renderBundle = {};
|
|
187
|
+
this._materialChangeTag = material.changeTag;
|
|
188
|
+
}
|
|
189
|
+
const renderBundle = this._renderBundle[hash];
|
|
190
|
+
if (!renderBundle) {
|
|
191
|
+
ctx.device.beginCapture();
|
|
192
|
+
this.bind(ctx, renderQueue);
|
|
193
|
+
material.draw(primitive, ctx);
|
|
194
|
+
this._renderBundle[hash] = ctx.device.endCapture();
|
|
195
|
+
} else {
|
|
196
|
+
ctx.device.executeRenderBundle(renderBundle);
|
|
197
|
+
}
|
|
198
|
+
} else {
|
|
199
|
+
this.bind(ctx, renderQueue);
|
|
200
|
+
material.draw(primitive, ctx);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* {@inheritDoc Drawable.getMaterial}
|
|
206
|
+
*/ getMaterial() {
|
|
207
|
+
return this.material;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* {@inheritDoc Drawable.getPrimitive}
|
|
211
|
+
*/ getPrimitive() {
|
|
212
|
+
let primitive = BaseSprite._primitive.get();
|
|
213
|
+
if (!primitive) {
|
|
214
|
+
primitive = new Primitive();
|
|
215
|
+
primitive.createAndSetVertexBuffer('position_f32', new Float32Array([
|
|
216
|
+
0,
|
|
217
|
+
1,
|
|
218
|
+
2,
|
|
219
|
+
3
|
|
220
|
+
]));
|
|
221
|
+
primitive.createAndSetIndexBuffer(new Uint16Array([
|
|
222
|
+
0,
|
|
223
|
+
1,
|
|
224
|
+
2,
|
|
225
|
+
3
|
|
226
|
+
]));
|
|
227
|
+
primitive.primitiveType = 'triangle-strip';
|
|
228
|
+
BaseSprite._primitive.set(primitive);
|
|
229
|
+
}
|
|
230
|
+
return primitive;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* {@inheritDoc Drawable.getBoneMatrices}
|
|
234
|
+
*/ getBoneMatrices() {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* {@inheritDoc Drawable.getNode}
|
|
239
|
+
*/ getNode() {
|
|
240
|
+
// mesh transform should be ignored when skinned
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* {@inheritDoc SceneNode.computeBoundingVolume}
|
|
245
|
+
*/ computeBoundingVolume() {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* {@inheritDoc SceneNode.computeWorldBoundingVolume}
|
|
250
|
+
*/ computeWorldBoundingVolume() {
|
|
251
|
+
const p = this.worldMatrix.transformPointAffine(Vector3.zero());
|
|
252
|
+
const scaleX = Math.hypot(this.worldMatrix[0], this.worldMatrix[1], this.worldMatrix[2]);
|
|
253
|
+
const scaleY = Math.hypot(this.worldMatrix[4], this.worldMatrix[5], this.worldMatrix[6]);
|
|
254
|
+
const mat = this._material?.get();
|
|
255
|
+
if (mat) {
|
|
256
|
+
const boundingBox = new BoundingBox();
|
|
257
|
+
const cx = Math.max(Math.abs(this._anchor.x), Math.abs(1 - this._anchor.x)) * scaleX;
|
|
258
|
+
const cy = Math.max(Math.abs(this._anchor.y), Math.abs(1 - this._anchor.y)) * scaleY;
|
|
259
|
+
const size = Math.max(cx, cy);
|
|
260
|
+
boundingBox.minPoint.setXYZ(p.x - size, p.y - size, p.z - size);
|
|
261
|
+
boundingBox.maxPoint.setXYZ(p.x + size, p.y + size, p.z + size);
|
|
262
|
+
return boundingBox;
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
calculateLocalTransform(outMatrix) {
|
|
267
|
+
const rot = this.rotation.toEulerAngles().z;
|
|
268
|
+
const rotationZ = Quaternion.fromAxisAngle(Vector3.axisPZ(), rot);
|
|
269
|
+
outMatrix.compose(this._scaling, rotationZ, this._position);
|
|
270
|
+
if (this._material?.get()) {
|
|
271
|
+
this._rotateAngle = -rot;
|
|
272
|
+
this._material.get().rotation = this._rotateAngle;
|
|
273
|
+
}
|
|
274
|
+
//outMatrix.scaling(this.scale).translateLeft(this._position);
|
|
275
|
+
}
|
|
276
|
+
calculateWorldTransform(outMatrix) {
|
|
277
|
+
outMatrix.set(this.localMatrix);
|
|
278
|
+
if (this.parent) {
|
|
279
|
+
outMatrix.m03 += this.parent.worldMatrix.m03;
|
|
280
|
+
outMatrix.m13 += this.parent.worldMatrix.m13;
|
|
281
|
+
outMatrix.m23 += this.parent.worldMatrix.m23;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/** Called when new material is set */ onSetMaterial(material) {
|
|
285
|
+
material.anchor = this._anchor;
|
|
286
|
+
material.rotation = this._rotateAngle;
|
|
287
|
+
}
|
|
288
|
+
/** Disposes the mesh node */ onDispose() {
|
|
289
|
+
super.onDispose();
|
|
290
|
+
this._material.dispose();
|
|
291
|
+
RenderBundleWrapper.drawableChanged(this);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export { BaseSprite };
|
|
296
|
+
//# sourceMappingURL=basesprite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basesprite.js","sources":["../../src/scene/basesprite.ts"],"sourcesContent":["import type { Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, DRef, Quaternion, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { RenderPass, BatchDrawable, DrawContext, PickTarget, RenderQueue } from '../render';\r\nimport { Primitive } from '../render';\r\nimport type { RenderBundle } from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { QUEUE_OPAQUE } from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport { SpriteMaterial } from '../material/sprite';\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class BaseSprite<M extends SpriteMaterial>\r\n extends applyMixins(GraphNode, mixinDrawable)\r\n implements BatchDrawable\r\n{\r\n /** @internal */\r\n private static _primitive: DRef<Primitive> = new DRef();\r\n /** @internal */\r\n private readonly _material: DRef<M>;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _renderBundle: Record<string, RenderBundle>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _anchor: Vector2;\r\n /** @internal */\r\n protected _rotateAngle: number;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._material = new DRef();\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this._anchor = new Vector2(0.5, 0.5);\r\n this._rotateAngle = 0;\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getName}\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n /**\r\n * {@inheritDoc BatchDrawable.getInstanceId}\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * {@inheritDoc BatchDrawable.getInstanceUniforms}\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material.get()!;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m && m instanceof SpriteMaterial) {\r\n this._material.set(m);\r\n if (m) {\r\n this.onSetMaterial(m);\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash = m ? `${this.constructor.name}:${this._scene?.id ?? 0}:${m.instanceId}` : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n }\r\n }\r\n get anchorX() {\r\n return this._anchor.x;\r\n }\r\n set anchorX(value) {\r\n if (this._anchor.x !== value) {\r\n this._anchor.x = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorX = this._anchor.x;\r\n }\r\n }\r\n }\r\n get anchorY() {\r\n return this._anchor.y;\r\n }\r\n set anchorY(value) {\r\n if (this._anchor.y !== value) {\r\n this._anchor.y = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorY = this._anchor.y;\r\n }\r\n }\r\n }\r\n get uvTopLeft() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.x, uvinfo.y);\r\n }\r\n set uvTopLeft(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(value.x, value.y, uvinfo.z, uvinfo.w);\r\n }\r\n get uvBottomRight() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.z, uvinfo.w);\r\n }\r\n set uvBottomRight(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(uvinfo.x, uvinfo.y, value.x, value.y);\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return this._batchable && !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.getPrimitive();\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (this._materialChangeTag !== material.changeTag) {\r\n this._renderBundle = {};\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle[hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle[hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n let primitive = BaseSprite._primitive.get();\r\n if (!primitive) {\r\n primitive = new Primitive();\r\n primitive.createAndSetVertexBuffer('position_f32', new Float32Array([0, 1, 2, 3]));\r\n primitive.createAndSetIndexBuffer(new Uint16Array([0, 1, 2, 3]));\r\n primitive.primitiveType = 'triangle-strip';\r\n BaseSprite._primitive.set(primitive);\r\n }\r\n return primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeBoundingVolume}\r\n */\r\n computeBoundingVolume() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeWorldBoundingVolume}\r\n */\r\n computeWorldBoundingVolume() {\r\n const p = this.worldMatrix.transformPointAffine(Vector3.zero());\r\n const scaleX = Math.hypot(this.worldMatrix[0], this.worldMatrix[1], this.worldMatrix[2]);\r\n const scaleY = Math.hypot(this.worldMatrix[4], this.worldMatrix[5], this.worldMatrix[6]);\r\n const mat = this._material?.get();\r\n if (mat) {\r\n const boundingBox = new BoundingBox();\r\n const cx = Math.max(Math.abs(this._anchor.x), Math.abs(1 - this._anchor.x)) * scaleX;\r\n const cy = Math.max(Math.abs(this._anchor.y), Math.abs(1 - this._anchor.y)) * scaleY;\r\n const size = Math.max(cx, cy);\r\n boundingBox.minPoint.setXYZ(p.x - size, p.y - size, p.z - size);\r\n boundingBox.maxPoint.setXYZ(p.x + size, p.y + size, p.z + size);\r\n return boundingBox;\r\n }\r\n return null;\r\n }\r\n calculateLocalTransform(outMatrix: Matrix4x4) {\r\n const rot = this.rotation.toEulerAngles().z;\r\n const rotationZ = Quaternion.fromAxisAngle(Vector3.axisPZ(), rot);\r\n outMatrix.compose(this._scaling, rotationZ, this._position);\r\n if (this._material?.get()) {\r\n this._rotateAngle = -rot;\r\n this._material.get()!.rotation = this._rotateAngle;\r\n }\r\n\r\n //outMatrix.scaling(this.scale).translateLeft(this._position);\r\n }\r\n calculateWorldTransform(outMatrix: Matrix4x4) {\r\n outMatrix.set(this.localMatrix);\r\n if (this.parent) {\r\n outMatrix.m03 += this.parent.worldMatrix.m03;\r\n outMatrix.m13 += this.parent.worldMatrix.m13;\r\n outMatrix.m23 += this.parent.worldMatrix.m23;\r\n }\r\n }\r\n /** Called when new material is set */\r\n protected onSetMaterial(material: M) {\r\n material.anchor = this._anchor;\r\n material.rotation = this._rotateAngle;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n}\r\n"],"names":["BaseSprite","applyMixins","GraphNode","mixinDrawable","_primitive","DRef","scene","_material","_instanceHash","_pickTarget","node","_batchable","getDevice","type","_anchor","Vector2","_rotateAngle","_renderBundle","_useRenderBundle","_materialChangeTag","getName","_name","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","material","m","SpriteMaterial","set","onSetMaterial","RenderBundleWrapper","materialAttached","coreMaterial","name","_scene","id","instanceId","drawableChanged","anchorX","x","value","invalidateWorldBoundingVolume","anchorY","y","uvTopLeft","uvinfo","setUVInfo","z","w","uvBottomRight","getMorphData","getMorphInfo","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","draw","ctx","renderQueue","hash","primitive","getPrimitive","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","Primitive","createAndSetVertexBuffer","Float32Array","createAndSetIndexBuffer","Uint16Array","primitiveType","getBoneMatrices","getNode","computeBoundingVolume","computeWorldBoundingVolume","p","worldMatrix","transformPointAffine","Vector3","zero","scaleX","Math","hypot","scaleY","mat","boundingBox","BoundingBox","cx","max","abs","cy","size","minPoint","setXYZ","maxPoint","calculateLocalTransform","outMatrix","rot","rotation","toEulerAngles","rotationZ","Quaternion","fromAxisAngle","axisPZ","compose","_scaling","_position","calculateWorldTransform","localMatrix","parent","m03","m13","m23","anchor","onDispose","dispose"],"mappings":"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"}
|
package/dist/scene/batchgroup.js
CHANGED
|
@@ -2,8 +2,8 @@ import { GraphNode } from './graph_node.js';
|
|
|
2
2
|
import { Matrix4x4 } from '@zephyr3d/base';
|
|
3
3
|
import '../values.js';
|
|
4
4
|
import { InstanceBindGroupAllocator, RenderQueue } from '../render/render_queue.js';
|
|
5
|
-
import '../material/shader/helper.js';
|
|
6
5
|
import '../render/renderer.js';
|
|
6
|
+
import '../material/shader/helper.js';
|
|
7
7
|
import '../render/primitive.js';
|
|
8
8
|
import '@zephyr3d/device';
|
|
9
9
|
import '../render/sky.js';
|
|
@@ -14,11 +14,13 @@ import '../material/unlit.js';
|
|
|
14
14
|
import '../material/particle.js';
|
|
15
15
|
import '../material/meshmaterial.js';
|
|
16
16
|
import '../material/grassmaterial.js';
|
|
17
|
-
import '../material/terrainmaterial.js';
|
|
18
17
|
import '../material/terrain-cm.js';
|
|
19
18
|
import '../material/pbrmr.js';
|
|
20
19
|
import '../material/pbrsg.js';
|
|
21
20
|
import '../material/pbrblueprint.js';
|
|
21
|
+
import '../material/sprite.js';
|
|
22
|
+
import '../material/sprite_std.js';
|
|
23
|
+
import '../utility/blueprint/material/texture.js';
|
|
22
24
|
import '../shaders/atmosphere.js';
|
|
23
25
|
import { BoundingBox } from '../utility/bounding_volume.js';
|
|
24
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batchgroup.js","sources":["../../src/scene/batchgroup.ts"],"sourcesContent":["import { GraphNode } from './graph_node';\r\nimport type { CullVisitor, RenderPass } from '../render';\r\nimport { RenderQueue, InstanceBindGroupAllocator } from '../render';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\n\r\n/**\r\n * Batch group node\r\n * @public\r\n */\r\nexport class BatchGroup extends GraphNode {\r\n private readonly _renderQueueMap: Map<\r\n RenderPass,\r\n {\r\n queue: RenderQueue;\r\n tag: number;\r\n }\r\n >;\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n private _changeTag: number;\r\n private _staticBV: boolean;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._renderQueueMap = new Map();\r\n this._changeTag = 0;\r\n this._bindGroupAllocator = new InstanceBindGroupAllocator();\r\n this._staticBV = false;\r\n const bvCallback = function (this: BatchGroup) {\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n }.bind(this);\r\n this.on('visiblechanged', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n this._changeTag++;\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n this.on('nodeattached', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = false;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.on('bvchanged', bvCallback);\r\n this._changeTag++;\r\n }\r\n });\r\n });\r\n this.on('noderemoved', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = true;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.off('bvchanged', bvCallback);\r\n this._changeTag++;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getName}\r\n */\r\n getName()
|
|
1
|
+
{"version":3,"file":"batchgroup.js","sources":["../../src/scene/batchgroup.ts"],"sourcesContent":["import { GraphNode } from './graph_node';\r\nimport type { CullVisitor, RenderPass } from '../render';\r\nimport { RenderQueue, InstanceBindGroupAllocator } from '../render';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\n\r\n/**\r\n * Batch group node\r\n * @public\r\n */\r\nexport class BatchGroup extends GraphNode {\r\n private readonly _renderQueueMap: Map<\r\n RenderPass,\r\n {\r\n queue: RenderQueue;\r\n tag: number;\r\n }\r\n >;\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n private _changeTag: number;\r\n private _staticBV: boolean;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._renderQueueMap = new Map();\r\n this._changeTag = 0;\r\n this._bindGroupAllocator = new InstanceBindGroupAllocator();\r\n this._staticBV = false;\r\n const bvCallback = function (this: BatchGroup) {\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n }.bind(this);\r\n this.on('visiblechanged', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n this._changeTag++;\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n this.on('nodeattached', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = false;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.on('bvchanged', bvCallback);\r\n this._changeTag++;\r\n }\r\n });\r\n });\r\n this.on('noderemoved', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = true;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.off('bvchanged', bvCallback);\r\n this._changeTag++;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getName}\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isBatchGroup}\r\n */\r\n isBatchGroup(): this is BatchGroup {\r\n return true;\r\n }\r\n /**\r\n * Force the batch state to be rebuilt\r\n */\r\n invalidate() {\r\n this._changeTag++;\r\n }\r\n /** @internal */\r\n protected _onDetached() {\r\n super._onDetached();\r\n // Usually the node will be garbage collected after it is detached,\r\n // We should reset the render queue to release the render bundles.\r\n this._renderQueueMap.forEach((val) => {\r\n val.queue.reset();\r\n });\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n protected _onAttached() {\r\n // Reset the render queue when attached to a new scene.\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bv = new BoundingBox();\r\n const invWorldMatrix = Matrix4x4.invertAffine(this.worldMatrix);\r\n bv.beginExtend();\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n Matrix4x4.multiplyAffine(invWorldMatrix, node.worldMatrix, tmpMatrix);\r\n const wb = node.getBoundingVolume()!.transform(tmpMatrix).toAABB();\r\n bv.extend(wb.minPoint);\r\n bv.extend(wb.maxPoint);\r\n }\r\n });\r\n return bv.isValid() ? bv : null;\r\n }\r\n /** @internal */\r\n setBoundingVolume(bv: BoundingVolume) {\r\n this._staticBV = !!bv;\r\n super.setBoundingVolume(bv);\r\n }\r\n /** @internal */\r\n cull(cullVisitor: CullVisitor) {\r\n let queueInfo = this._renderQueueMap.get(cullVisitor.renderPass);\r\n if (!queueInfo) {\r\n queueInfo = {\r\n queue: new RenderQueue(cullVisitor.renderPass, this._bindGroupAllocator),\r\n tag: -1\r\n };\r\n this._renderQueueMap.set(cullVisitor.renderPass, queueInfo);\r\n }\r\n if (queueInfo.tag !== this._changeTag) {\r\n queueInfo.tag = this._changeTag;\r\n queueInfo.queue.reset();\r\n const frustumCulling = cullVisitor.frustumCulling;\r\n const renderQueue = cullVisitor.renderQueue;\r\n cullVisitor.frustumCulling = false;\r\n cullVisitor.renderQueue = queueInfo.queue;\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n cullVisitor.visit(node);\r\n }\r\n });\r\n queueInfo.queue.end(cullVisitor.camera, true);\r\n cullVisitor.frustumCulling = frustumCulling;\r\n cullVisitor.renderQueue = renderQueue;\r\n }\r\n cullVisitor.pushRenderQueue(queueInfo.queue);\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","BatchGroup","GraphNode","_renderQueueMap","_bindGroupAllocator","_changeTag","_staticBV","scene","Map","InstanceBindGroupAllocator","bvCallback","invalidateBoundingVolume","bind","on","node","iterate","child","isMesh","placeToOctree","off","getName","_name","isBatchGroup","invalidate","_onDetached","forEach","val","queue","reset","computeBoundingVolume","bv","BoundingBox","invWorldMatrix","invertAffine","worldMatrix","beginExtend","multiplyAffine","wb","getBoundingVolume","transform","toAABB","extend","minPoint","maxPoint","isValid","setBoundingVolume","cull","cullVisitor","queueInfo","get","renderPass","RenderQueue","tag","set","frustumCulling","renderQueue","visit","end","camera","pushRenderQueue"],"mappings":"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"}
|
|
@@ -8,11 +8,13 @@ import '../material/unlit.js';
|
|
|
8
8
|
import '../material/particle.js';
|
|
9
9
|
import '../material/meshmaterial.js';
|
|
10
10
|
import '../material/grassmaterial.js';
|
|
11
|
-
import '../material/terrainmaterial.js';
|
|
12
11
|
import '../material/terrain-cm.js';
|
|
13
12
|
import '../material/pbrmr.js';
|
|
14
13
|
import '../material/pbrsg.js';
|
|
15
14
|
import '../material/pbrblueprint.js';
|
|
15
|
+
import '../material/sprite.js';
|
|
16
|
+
import '../material/sprite_std.js';
|
|
17
|
+
import '../utility/blueprint/material/texture.js';
|
|
16
18
|
import '../render/renderer.js';
|
|
17
19
|
import '../render/primitive.js';
|
|
18
20
|
import { SkyRenderer } from '../render/sky.js';
|
|
@@ -37,24 +39,21 @@ import '../shaders/atmosphere.js';
|
|
|
37
39
|
/** @internal */ constructor(){
|
|
38
40
|
super();
|
|
39
41
|
this._envLight = new EnvShIBL();
|
|
40
|
-
this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1)
|
|
41
|
-
this._ambientColor.callback = ()=>{
|
|
42
|
+
this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(()=>{
|
|
42
43
|
if (this.type === 'constant') {
|
|
43
44
|
this._envLight.ambientColor.set(this._ambientColor);
|
|
44
45
|
}
|
|
45
|
-
};
|
|
46
|
-
this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1)
|
|
47
|
-
this._ambientDown.callback = ()=>{
|
|
46
|
+
});
|
|
47
|
+
this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(()=>{
|
|
48
48
|
if (this.type === 'hemisphere') {
|
|
49
49
|
this._envLight.ambientDown.set(this._ambientDown);
|
|
50
50
|
}
|
|
51
|
-
};
|
|
52
|
-
this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1)
|
|
53
|
-
this._ambientUp.callback = ()=>{
|
|
51
|
+
});
|
|
52
|
+
this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1).setCallback(()=>{
|
|
54
53
|
if (this.type === 'hemisphere') {
|
|
55
54
|
this._envLight.ambientUp.set(this._ambientUp);
|
|
56
55
|
}
|
|
57
|
-
};
|
|
56
|
+
});
|
|
58
57
|
this._radianceMap = new DRef();
|
|
59
58
|
this._irradianceMap = new DRef();
|
|
60
59
|
this._irradianceSH = new DRef();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sources":["../../src/scene/environment.ts"],"sourcesContent":["import type { Vector4 } from '@zephyr3d/base';\r\nimport { Vector3, DRef, Disposable } from '@zephyr3d/base';\r\nimport { ObservableVector4 } from '@zephyr3d/base';\r\nimport type { DrawContext, EnvironmentLighting, EnvLightType } from '../render';\r\nimport { EnvShIBL } from '../render';\r\nimport { EnvConstantAmbient, EnvHemisphericAmbient } from '../render';\r\nimport { SkyRenderer } from '../render/sky';\r\nimport type { FrameBuffer, GPUDataBuffer, TextureCube } from '@zephyr3d/device';\r\n\r\n/**\r\n * Wrapper for environmant lighting\r\n * @public\r\n */\r\nexport class EnvLightWrapper extends Disposable {\r\n private _envLight: EnvironmentLighting;\r\n private readonly _ambientColor: ObservableVector4;\r\n private readonly _ambientDown: ObservableVector4;\r\n private readonly _ambientUp: ObservableVector4;\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n private readonly _irradianceMap: DRef<TextureCube>;\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n private readonly _irradianceWindow: Vector3;\r\n private _strength: number;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._envLight = new EnvShIBL();\r\n this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1);\r\n this._ambientColor.callback = () => {\r\n if (this.type === 'constant') {\r\n (this._envLight as EnvConstantAmbient).ambientColor.set(this._ambientColor);\r\n }\r\n };\r\n this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1);\r\n this._ambientDown.callback = () => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientDown.set(this._ambientDown);\r\n }\r\n };\r\n this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1);\r\n this._ambientUp.callback = () => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientUp.set(this._ambientUp);\r\n }\r\n };\r\n this._radianceMap = new DRef();\r\n this._irradianceMap = new DRef();\r\n this._irradianceSH = new DRef();\r\n this._irradianceSHFB = new DRef();\r\n this._irradianceWindow = new Vector3();\r\n this._strength = 1;\r\n }\r\n /** @internal */\r\n getHash(ctx?: DrawContext): string {\r\n return !ctx || ctx.drawEnvLight\r\n ? `${this.type}:${this._envLight.hasRadiance() ? '1' : '0'}:${\r\n this._envLight.hasIrradiance() ? '1' : '0'\r\n }`\r\n : 'none';\r\n }\r\n /** @internal */\r\n get envLight(): EnvironmentLighting {\r\n return this._envLight;\r\n }\r\n /** The strength of environment lighting */\r\n get strength(): number {\r\n return this._strength;\r\n }\r\n set strength(val: number) {\r\n this._strength = val;\r\n }\r\n /** Ambient light color for environment light type constant */\r\n get ambientColor(): Vector4 {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(val: Vector4) {\r\n this._ambientColor.set(val);\r\n }\r\n /** Up color for environment light type hemisphere */\r\n get ambientUp(): Vector4 {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(val: Vector4) {\r\n this._ambientUp.set(val);\r\n }\r\n /** Down color for environment light type hemisphere */\r\n get ambientDown(): Vector4 {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(val: Vector4) {\r\n this._ambientDown.set(val);\r\n }\r\n /** Radiance map for environment light type ibl */\r\n get radianceMap(): TextureCube {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex: TextureCube) {\r\n this._radianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n }\r\n }\r\n /** Irradiance SH buffer for environment light type ibl */\r\n get irradianceSH(): GPUDataBuffer {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value: GPUDataBuffer) {\r\n this._irradianceSH.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n }\r\n }\r\n /** Irradiance SH texture for environment light type ibl */\r\n get irradianceSHFB(): FrameBuffer {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value: FrameBuffer) {\r\n this._irradianceSHFB.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n }\r\n }\r\n /** Irradiance SH window for environment light type ibl */\r\n get irradianceWindow(): Vector3 {\r\n return this._irradianceWindow;\r\n }\r\n set irradianceWindow(value: Vector3) {\r\n this._irradianceWindow.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceWindow = this._irradianceWindow;\r\n }\r\n }\r\n /** The environment light type */\r\n get type(): EnvLightType {\r\n return this._envLight?.getType() ?? 'none';\r\n }\r\n set type(val: EnvLightType) {\r\n switch (val) {\r\n case 'none':\r\n this._envLight = null;\r\n break;\r\n case 'ibl':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvShIBL(this.radianceMap, this.irradianceSH);\r\n }\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n (this._envLight as EnvShIBL).irradianceWindow = this.irradianceWindow;\r\n break;\r\n case 'constant':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvConstantAmbient(this._ambientColor);\r\n }\r\n break;\r\n case 'hemisphere':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvHemisphericAmbient(this._ambientUp, this._ambientDown);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n /** Disposes the environment lighting wrapper */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._envLight?.dispose();\r\n this._radianceMap.dispose();\r\n this._irradianceMap.dispose();\r\n this._irradianceSHFB.dispose();\r\n this._irradianceSH.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Environment of scene\r\n * @public\r\n */\r\nexport class Environment extends Disposable {\r\n private readonly _sky: SkyRenderer;\r\n private readonly _light: EnvLightWrapper;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._sky = new SkyRenderer();\r\n this._light = new EnvLightWrapper();\r\n }\r\n /** The sky renderer */\r\n get sky(): SkyRenderer {\r\n return this._sky;\r\n }\r\n /** The environment lighting renderer */\r\n get light(): EnvLightWrapper {\r\n return this._light;\r\n }\r\n /** @internal */\r\n getHash(ctx: DrawContext) {\r\n return `${this.light?.getHash(ctx)}:${this._sky?.getHash(ctx)}`;\r\n }\r\n /** @internal */\r\n needSceneDepthTexture(): boolean {\r\n return this._sky.fogType !== 'none';\r\n }\r\n /** Disposes the environment object */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._sky.dispose();\r\n this._light.dispose();\r\n }\r\n}\r\n"],"names":["EnvLightWrapper","Disposable","_envLight","_ambientColor","_ambientDown","_ambientUp","_radianceMap","_irradianceMap","_irradianceSH","_irradianceSHFB","_irradianceWindow","_strength","EnvShIBL","ObservableVector4","callback","type","ambientColor","set","ambientDown","ambientUp","DRef","Vector3","getHash","ctx","drawEnvLight","hasRadiance","hasIrradiance","envLight","strength","val","radianceMap","get","tex","irradianceSH","value","irradianceSHFB","irradianceWindow","getType","EnvConstantAmbient","EnvHemisphericAmbient","onDispose","dispose","Environment","_sky","_light","SkyRenderer","sky","light","needSceneDepthTexture","fogType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"environment.js","sources":["../../src/scene/environment.ts"],"sourcesContent":["import type { Immutable, Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { Vector3, DRef, Disposable } from '@zephyr3d/base';\r\nimport { ObservableVector4 } from '@zephyr3d/base';\r\nimport type { DrawContext, EnvironmentLighting } from '../render';\r\nimport { EnvShIBL } from '../render';\r\nimport { EnvConstantAmbient, EnvHemisphericAmbient } from '../render';\r\nimport { SkyRenderer } from '../render/sky';\r\nimport type { FrameBuffer, GPUDataBuffer, TextureCube } from '@zephyr3d/device';\r\n\r\n/**\r\n * Wrapper for environmant lighting\r\n * @public\r\n */\r\nexport class EnvLightWrapper extends Disposable {\r\n private _envLight: Nullable<EnvironmentLighting>;\r\n private readonly _ambientColor: ObservableVector4;\r\n private readonly _ambientDown: ObservableVector4;\r\n private readonly _ambientUp: ObservableVector4;\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n private readonly _irradianceMap: DRef<TextureCube>;\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n private readonly _irradianceWindow: Vector3;\r\n private _strength: number;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._envLight = new EnvShIBL();\r\n this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'constant') {\r\n (this._envLight as EnvConstantAmbient).ambientColor.set(this._ambientColor);\r\n }\r\n });\r\n this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientDown.set(this._ambientDown);\r\n }\r\n });\r\n this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientUp.set(this._ambientUp);\r\n }\r\n });\r\n this._radianceMap = new DRef();\r\n this._irradianceMap = new DRef();\r\n this._irradianceSH = new DRef();\r\n this._irradianceSHFB = new DRef();\r\n this._irradianceWindow = new Vector3();\r\n this._strength = 1;\r\n }\r\n /** @internal */\r\n getHash(ctx?: DrawContext) {\r\n return !ctx || ctx.drawEnvLight\r\n ? `${this.type}:${this._envLight!.hasRadiance() ? '1' : '0'}:${\r\n this._envLight!.hasIrradiance() ? '1' : '0'\r\n }`\r\n : 'none';\r\n }\r\n /** @internal */\r\n get envLight() {\r\n return this._envLight!;\r\n }\r\n /** The strength of environment lighting */\r\n get strength() {\r\n return this._strength;\r\n }\r\n set strength(val) {\r\n this._strength = val;\r\n }\r\n /** Ambient light color for environment light type constant */\r\n get ambientColor(): Vector4 {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(val: Vector4) {\r\n this._ambientColor.set(val);\r\n }\r\n /** Up color for environment light type hemisphere */\r\n get ambientUp(): Vector4 {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(val: Vector4) {\r\n this._ambientUp.set(val);\r\n }\r\n /** Down color for environment light type hemisphere */\r\n get ambientDown(): Vector4 {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(val: Vector4) {\r\n this._ambientDown.set(val);\r\n }\r\n /** Radiance map for environment light type ibl */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n }\r\n }\r\n /** Irradiance SH buffer for environment light type ibl */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n }\r\n }\r\n /** Irradiance SH texture for environment light type ibl */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n }\r\n }\r\n /** Irradiance SH window for environment light type ibl */\r\n get irradianceWindow(): Immutable<Vector3> {\r\n return this._irradianceWindow;\r\n }\r\n set irradianceWindow(value: Immutable<Vector3>) {\r\n this._irradianceWindow.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceWindow = this._irradianceWindow;\r\n }\r\n }\r\n /** The environment light type */\r\n get type() {\r\n return this._envLight?.getType() ?? 'none';\r\n }\r\n set type(val) {\r\n switch (val) {\r\n case 'none':\r\n this._envLight = null;\r\n break;\r\n case 'ibl':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvShIBL(this.radianceMap!, this.irradianceSH!);\r\n }\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n (this._envLight as EnvShIBL).irradianceWindow = this.irradianceWindow;\r\n break;\r\n case 'constant':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvConstantAmbient(this._ambientColor);\r\n }\r\n break;\r\n case 'hemisphere':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvHemisphericAmbient(this._ambientUp, this._ambientDown);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n /** Disposes the environment lighting wrapper */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._envLight?.dispose();\r\n this._radianceMap.dispose();\r\n this._irradianceMap.dispose();\r\n this._irradianceSHFB.dispose();\r\n this._irradianceSH.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Environment of scene\r\n * @public\r\n */\r\nexport class Environment extends Disposable {\r\n private readonly _sky: SkyRenderer;\r\n private readonly _light: EnvLightWrapper;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._sky = new SkyRenderer();\r\n this._light = new EnvLightWrapper();\r\n }\r\n /** The sky renderer */\r\n get sky() {\r\n return this._sky;\r\n }\r\n /** The environment lighting renderer */\r\n get light() {\r\n return this._light;\r\n }\r\n /** @internal */\r\n getHash(ctx: DrawContext) {\r\n return `${this.light?.getHash(ctx)}:${this._sky?.getHash(ctx)}`;\r\n }\r\n /** @internal */\r\n needSceneDepthTexture() {\r\n return this._sky.fogType !== 'none';\r\n }\r\n /** Disposes the environment object */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._sky.dispose();\r\n this._light.dispose();\r\n }\r\n}\r\n"],"names":["EnvLightWrapper","Disposable","_envLight","_ambientColor","_ambientDown","_ambientUp","_radianceMap","_irradianceMap","_irradianceSH","_irradianceSHFB","_irradianceWindow","_strength","EnvShIBL","ObservableVector4","setCallback","type","ambientColor","set","ambientDown","ambientUp","DRef","Vector3","getHash","ctx","drawEnvLight","hasRadiance","hasIrradiance","envLight","strength","val","radianceMap","get","tex","irradianceSH","value","irradianceSHFB","irradianceWindow","getType","EnvConstantAmbient","EnvHemisphericAmbient","onDispose","dispose","Environment","_sky","_light","SkyRenderer","sky","light","needSceneDepthTexture","fogType"],"mappings":"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"}
|