@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
package/dist/shadow/vsm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsm.js","sources":["../../src/shadow/vsm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n TextureFormat,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n FrameBuffer\r\n} from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { Blitter } from '../blitter';\r\nimport { computeShadowMapDepth, filterShadowVSM } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType, ShadowMode } from './shadowmapper';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encode2HalfToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype VSMImplData = {\r\n blurFramebuffer: FrameBuffer;\r\n blurFramebuffer2: FrameBuffer;\r\n};\r\n\r\nclass VSMBlitter extends Blitter {\r\n protected _phase: 'horizonal' | 'vertical';\r\n protected _packFloat: boolean;\r\n protected _blurSize: number;\r\n protected _kernelSize: number;\r\n constructor(phase: 'horizonal' | 'vertical', kernelSize: number, blurSize: number, packFloat: boolean) {\r\n super();\r\n this._phase = phase;\r\n this._blurSize = blurSize;\r\n this._kernelSize = kernelSize;\r\n this._packFloat = packFloat;\r\n }\r\n get blurSize(): number {\r\n return this._blurSize;\r\n }\r\n set blurSize(val: number) {\r\n this._blurSize = val;\r\n }\r\n get kernelSize(): number {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val: number) {\r\n if (val !== this._kernelSize) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get packFloat(): boolean {\r\n return this._packFloat;\r\n }\r\n set packFloat(b: boolean) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.blurSize = pb.float().uniform(0);\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n scope.weight = pb.float(1 / (this._kernelSize * this._kernelSize));\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this._packFloat) {\r\n if (this._phase === 'horizonal') {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel));\r\n } else {\r\n return pb.vec4(decode2HalfFromRGBA(scope, texel), 0, 0);\r\n }\r\n } else {\r\n return texel;\r\n }\r\n }\r\n writeTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcUV: PBShaderExp,\r\n texel: PBShaderExp\r\n ): PBShaderExp {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this._packFloat) {\r\n return encode2HalfToRGBA(scope, outTexel.x, outTexel.y);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'int' | 'float' | 'uint'\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.mean = pb.float(0);\r\n scope.squaredMean = pb.float(0);\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.d1 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.d2 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.mean = pb.add(this.mean, this.d1.x);\r\n this.mean = pb.add(this.mean, this.d2.x);\r\n if (that._phase === 'horizonal') {\r\n this.squaredMean = pb.add(this.squaredMean, pb.mul(this.d1.x, this.d1.x));\r\n this.squaredMean = pb.add(this.squaredMean, pb.mul(this.d2.x, this.d2.x));\r\n } else {\r\n this.squaredMean = pb.add(this.squaredMean, pb.dot(this.d1.xy, this.d1.xy));\r\n this.squaredMean = pb.add(this.squaredMean, pb.dot(this.d2.xy, this.d2.xy));\r\n }\r\n });\r\n scope.mean = pb.div(scope.mean, that._kernelSize);\r\n scope.squaredMean = pb.div(scope.squaredMean, that._kernelSize);\r\n scope.stdDev = pb.sqrt(pb.max(0, pb.sub(scope.squaredMean, pb.mul(scope.mean, scope.mean))));\r\n return pb.vec4(scope.mean, scope.stdDev, 0, 1);\r\n }\r\n protected calcHash(): string {\r\n return `${this._phase}-${this._kernelSize}-${Number(this._packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class VSM extends ShadowImpl {\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _blitterH: VSMBlitter;\r\n /** @internal */\r\n protected _blitterV: VSMBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n /** @internal */\r\n protected _darkness: number;\r\n constructor(kernelSize?: number, blurSize?: number, darkness?: number) {\r\n super();\r\n this._blur = true;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._darkness = darkness ?? 0;\r\n this._mipmap = true;\r\n this._blitterH = new VSMBlitter('horizonal', this._kernelSize, 1 / 1024, false);\r\n this._blitterV = new VSMBlitter('vertical', this._kernelSize, 1 / 1024, false);\r\n }\r\n resourceDirty(): boolean {\r\n return this._resourceDirty;\r\n }\r\n get blur(): boolean {\r\n return this._blur;\r\n }\r\n set blur(val: boolean) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap(): boolean {\r\n return this._mipmap;\r\n }\r\n set mipmap(b: boolean) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize(): number {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val: number) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize(): number {\r\n return this._blurSize;\r\n }\r\n set blurSize(val: number) {\r\n this._blurSize = val;\r\n }\r\n getDepthScale(): number {\r\n return this._darkness;\r\n }\r\n setDepthScale(val: number) {\r\n this._darkness = val;\r\n }\r\n getType(): ShadowMode {\r\n return 'vsm';\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams): number {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams): ShadowMapType {\r\n const implData = shadowMapParams.implData as VSMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: TextureFormat,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams);\r\n //const target = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].target;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n this._mipmap\r\n )\r\n };\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (this._blur) {\r\n const implData = shadowMapParams.implData as VSMImplData;\r\n this._blitterH.blurSize = this._blurSize / shadowMapParams.shadowMap.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.packFloat = shadowMapParams.shadowMap.format === 'rgba8unorm';\r\n this._blitterV.blurSize = this._blurSize / shadowMapParams.shadowMap.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.packFloat = shadowMapParams.shadowMap.format === 'rgba8unorm';\r\n this._blitterH.blit(\r\n shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer\r\n );\r\n this._blitterV.blit(\r\n implData.blurFramebuffer.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2\r\n );\r\n }\r\n }\r\n getShaderHash(): string {\r\n return '';\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return 'd24s8';\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ): PBShaderExp {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowVSM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap.format,\r\n this.shadowCoord,\r\n this.split\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split);\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$l.coord = pb.vec4(this.dir, pb.sub(this.distance, this.shadowBias));\r\n this.$return(\r\n filterShadowVSM(this, shadowMapParams.lightType, shadowMapParams.shadowMap.format, this.coord)\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowCoord.z,\r\n this.nearFar\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n true\r\n );\r\n } else {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n }\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowVSM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap.format,\r\n this.shadowCoord\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams): boolean {\r\n return false;\r\n }\r\n}\r\n"],"names":["VSMBlitter","Blitter","_phase","_packFloat","_blurSize","_kernelSize","phase","kernelSize","blurSize","packFloat","val","invalidateHash","b","setup","scope","type","pb","$builder","shaderKind","float","uniform","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","weight","setUniforms","bindGroup","setValue","readTexel","srcTex","srcUV","srcLayer","sampleType","texel","vec4","decodeNormalizedFloatFromRGBA","decode2HalfFromRGBA","writeTexel","outTexel","encode2HalfToRGBA","x","y","filter","that","d0","mean","squaredMean","$for","d1","sub","mul","i","d2","add","dot","xy","div","stdDev","sqrt","max","calcHash","Number","VSM","ShadowImpl","darkness","_blur","_darkness","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","mipmap","getDepthScale","setDepthScale","getType","getShadowMapBorder","_shadowMapParams","Math","ceil","getShadowMap","shadowMapParams","implData","blurFramebuffer2","getColorAttachments","shadowMapFramebuffer","fetchTemporalFramebuffer","autoRelease","lightType","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","blurFramebuffer","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","format","blit","getShaderHash","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","$l","shadowCoord","w","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","z","shadow","$if","shadowBias","computeShadowBiasCSM","filterShadowVSM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","coord","LIGHT_TYPE_SPOT","nearFar","getShadowCameraParams","nonLinearDepthToLinearNormalized","useNativeShadowMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vsm.js","sources":["../../src/shadow/vsm.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n TextureFormat,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n FrameBuffer\r\n} from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { Blitter } from '../blitter';\r\nimport { computeShadowMapDepth, filterShadowVSM } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encode2HalfToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\ntype VSMImplData = {\r\n blurFramebuffer: FrameBuffer;\r\n blurFramebuffer2: FrameBuffer;\r\n};\r\n\r\nclass VSMBlitter extends Blitter {\r\n protected _phase: 'horizonal' | 'vertical';\r\n protected _packFloat: boolean;\r\n protected _blurSize: number;\r\n protected _kernelSize: number;\r\n constructor(phase: 'horizonal' | 'vertical', kernelSize: number, blurSize: number, packFloat: boolean) {\r\n super();\r\n this._phase = phase;\r\n this._blurSize = blurSize;\r\n this._kernelSize = kernelSize;\r\n this._packFloat = packFloat;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n if (val !== this._kernelSize) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.blurSize = pb.float().uniform(0);\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n scope.weight = pb.float(1 / (this._kernelSize * this._kernelSize));\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this._packFloat) {\r\n if (this._phase === 'horizonal') {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel));\r\n } else {\r\n return pb.vec4(decode2HalfFromRGBA(scope, texel), 0, 0);\r\n }\r\n } else {\r\n return texel;\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this._packFloat) {\r\n return encode2HalfToRGBA(scope, outTexel.x, outTexel.y);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'int' | 'float' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.mean = pb.float(0);\r\n scope.squaredMean = pb.float(0);\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.d1 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.d2 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.mean = pb.add(this.mean, this.d1.x);\r\n this.mean = pb.add(this.mean, this.d2.x);\r\n if (that._phase === 'horizonal') {\r\n this.squaredMean = pb.add(this.squaredMean, pb.mul(this.d1.x, this.d1.x));\r\n this.squaredMean = pb.add(this.squaredMean, pb.mul(this.d2.x, this.d2.x));\r\n } else {\r\n this.squaredMean = pb.add(this.squaredMean, pb.dot(this.d1.xy, this.d1.xy));\r\n this.squaredMean = pb.add(this.squaredMean, pb.dot(this.d2.xy, this.d2.xy));\r\n }\r\n });\r\n scope.mean = pb.div(scope.mean, that._kernelSize);\r\n scope.squaredMean = pb.div(scope.squaredMean, that._kernelSize);\r\n scope.stdDev = pb.sqrt(pb.max(0, pb.sub(scope.squaredMean, pb.mul(scope.mean, scope.mean))));\r\n return pb.vec4(scope.mean, scope.stdDev, 0, 1);\r\n }\r\n protected calcHash() {\r\n return `${this._phase}-${this._kernelSize}-${Number(this._packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class VSM extends ShadowImpl {\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _blitterH: VSMBlitter;\r\n /** @internal */\r\n protected _blitterV: VSMBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n /** @internal */\r\n protected _darkness: number;\r\n constructor(kernelSize?: number, blurSize?: number, darkness?: number) {\r\n super();\r\n this._blur = true;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._darkness = darkness ?? 0;\r\n this._mipmap = true;\r\n this._blitterH = new VSMBlitter('horizonal', this._kernelSize, 1 / 1024, false);\r\n this._blitterV = new VSMBlitter('vertical', this._kernelSize, 1 / 1024, false);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n getDepthScale() {\r\n return this._darkness;\r\n }\r\n setDepthScale(val: number) {\r\n this._darkness = val;\r\n }\r\n getType() {\r\n return 'vsm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as VSMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n //const target = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].target;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n this._mipmap\r\n )\r\n };\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (this._blur) {\r\n const implData = shadowMapParams.implData as VSMImplData;\r\n this._blitterH.blurSize = this._blurSize / shadowMapParams.shadowMap!.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.packFloat = shadowMapParams.shadowMap!.format === 'rgba8unorm';\r\n this._blitterV.blurSize = this._blurSize / shadowMapParams.shadowMap!.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.packFloat = shadowMapParams.shadowMap!.format === 'rgba8unorm';\r\n this._blitterH.blit(\r\n shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer\r\n );\r\n this._blitterV.blit(\r\n implData.blurFramebuffer.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2\r\n );\r\n }\r\n }\r\n getShaderHash() {\r\n return '';\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowVSM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n this.split\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$l.coord = pb.vec4(this.dir, pb.sub(this.distance, this.shadowBias));\r\n this.$return(\r\n filterShadowVSM(this, shadowMapParams.lightType, shadowMapParams.shadowMap!.format, this.coord)\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowCoord.z,\r\n this.nearFar\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n true\r\n );\r\n } else {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n }\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowVSM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["VSMBlitter","Blitter","_phase","_packFloat","_blurSize","_kernelSize","phase","kernelSize","blurSize","packFloat","val","invalidateHash","b","setup","scope","type","pb","$builder","shaderKind","float","uniform","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","weight","setUniforms","bindGroup","setValue","readTexel","srcTex","srcUV","srcLayer","sampleType","texel","vec4","decodeNormalizedFloatFromRGBA","decode2HalfFromRGBA","writeTexel","outTexel","encode2HalfToRGBA","x","y","filter","that","d0","mean","squaredMean","$for","d1","sub","mul","i","d2","add","dot","xy","div","stdDev","sqrt","max","calcHash","Number","VSM","ShadowImpl","darkness","_blur","_darkness","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","mipmap","getDepthScale","setDepthScale","getType","getShadowMapBorder","_shadowMapParams","Math","ceil","getShadowMap","shadowMapParams","implData","blurFramebuffer2","getColorAttachments","shadowMapFramebuffer","fetchTemporalFramebuffer","autoRelease","lightType","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","blurFramebuffer","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","format","blit","getShaderHash","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","$l","shadowCoord","w","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","z","shadow","$if","shadowBias","computeShadowBiasCSM","filterShadowVSM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","coord","LIGHT_TYPE_SPOT","nearFar","getShadowCameraParams","nonLinearDepthToLinearNormalized","useNativeShadowMap"],"mappings":"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"}
|
package/dist/shapes/box.js
CHANGED
|
@@ -27,8 +27,8 @@ import { Shape } from './shape.js';
|
|
|
27
27
|
* @param normals - vertex normals
|
|
28
28
|
* @param uvs - vertex uvs
|
|
29
29
|
* @param indices - vertex indices
|
|
30
|
-
*/ static generateData(
|
|
31
|
-
options = Object.assign({}, this._defaultOptions,
|
|
30
|
+
*/ static generateData(opt, vertices, normals, tangents, uvs, indices, bbox, indexOffset, vertexCallback) {
|
|
31
|
+
const options = Object.assign({}, this._defaultOptions, opt ?? {});
|
|
32
32
|
indexOffset = indexOffset ?? 0;
|
|
33
33
|
const start = vertices.length;
|
|
34
34
|
const sizeX = options?.sizeX ?? options?.size ?? 1;
|
|
@@ -275,7 +275,13 @@ import { Shape } from './shape.js';
|
|
|
275
275
|
static _defaultOptions = {
|
|
276
276
|
...Shape._defaultOptions,
|
|
277
277
|
size: 1,
|
|
278
|
-
|
|
278
|
+
sizeX: 1,
|
|
279
|
+
sizeY: 1,
|
|
280
|
+
sizeZ: 1,
|
|
281
|
+
anchor: 0.5,
|
|
282
|
+
anchorX: 0.5,
|
|
283
|
+
anchorY: 0.5,
|
|
284
|
+
anchorZ: 0.5
|
|
279
285
|
};
|
|
280
286
|
/**
|
|
281
287
|
* Creates an instance of wireframe box shape
|
package/dist/shapes/box.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sources":["../../src/shapes/box.ts"],"sourcesContent":["import type { AABB, Clonable } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\nimport type { PrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Creation options for box shape\r\n * @public\r\n */\r\nexport interface BoxCreationOptions extends ShapeCreationOptions {\r\n /** Size of all axises, default 1 */\r\n size?: number;\r\n /** Size of axis x, default 1 */\r\n sizeX?: number;\r\n /** Size of axis y, default 1 */\r\n sizeY?: number;\r\n /** Size of axis z, default 1 */\r\n sizeZ?: number;\r\n /** Anchor */\r\n anchor?: number;\r\n /** Anchor X */\r\n anchorX?: number;\r\n /** Anchor Y */\r\n anchorY?: number;\r\n /** Anchor Z */\r\n anchorZ?: number;\r\n}\r\n\r\n/**\r\n * Box shape\r\n * @public\r\n */\r\nexport class BoxShape extends Shape<BoxCreationOptions> implements Clonable<BoxShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n size: 1,\r\n anchor: 0.5\r\n };\r\n /**\r\n * Creates an instance of box shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: BoxCreationOptions) {\r\n super(options);\r\n }\r\n clone(): BoxShape {\r\n return new BoxShape(this._options);\r\n }\r\n /** type of the shape */\r\n get type(): string {\r\n return 'Box';\r\n }\r\n /**\r\n * Generates the data for the box shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n options: BoxCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ): PrimitiveType {\r\n options = Object.assign({}, this._defaultOptions, options ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const sizeX = options?.sizeX ?? options?.size ?? 1;\r\n const sizeY = options?.sizeY ?? options?.size ?? 1;\r\n const sizeZ = options?.sizeZ ?? options?.size ?? 1;\r\n const anchorX = options.anchorX ?? options.anchor;\r\n const anchorY = options.anchorY ?? options.anchor;\r\n const anchorZ = options.anchorZ ?? options.anchor;\r\n const minx = -anchorX * sizeX;\r\n const maxx = minx + sizeX;\r\n const miny = -anchorY * sizeY;\r\n const maxy = miny + sizeY;\r\n const minz = -anchorZ * sizeZ;\r\n const maxz = minz + sizeZ;\r\n const uv = uvs ? [0, 0, 0, 1, 1, 1, 1, 0] : null;\r\n const topFacePos = [minx, maxy, minz, minx, maxy, maxz, maxx, maxy, maxz, maxx, maxy, minz];\r\n const topFacenormal = normals ? [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0] : null;\r\n const frontFacePos = [minx, maxy, maxz, minx, miny, maxz, maxx, miny, maxz, maxx, maxy, maxz];\r\n const frontFaceNormal = normals ? [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1] : null;\r\n const rightFacePos = [maxx, maxy, maxz, maxx, miny, maxz, maxx, miny, minz, maxx, maxy, minz];\r\n const rightFaceNormal = normals ? [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] : null;\r\n const backFacePos = [maxx, maxy, minz, maxx, miny, minz, minx, miny, minz, minx, maxy, minz];\r\n const backFaceNormal = normals ? [0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1] : null;\r\n const leftFacePos = [minx, maxy, minz, minx, miny, minz, minx, miny, maxz, minx, maxy, maxz];\r\n const leftFaceNormal = normals ? [-1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0] : null;\r\n const bottomFacePos = [minx, miny, maxz, minx, miny, minz, maxx, miny, minz, maxx, miny, maxz];\r\n const bottomFaceNormal = normals ? [0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0] : null;\r\n indices?.push(\r\n 0 + indexOffset,\r\n 1 + indexOffset,\r\n 2 + indexOffset,\r\n 0 + indexOffset,\r\n 2 + indexOffset,\r\n 3 + indexOffset,\r\n 4 + indexOffset,\r\n 5 + indexOffset,\r\n 6 + indexOffset,\r\n 4 + indexOffset,\r\n 6 + indexOffset,\r\n 7 + indexOffset,\r\n 8 + indexOffset,\r\n 9 + indexOffset,\r\n 10 + indexOffset,\r\n 8 + indexOffset,\r\n 10 + indexOffset,\r\n 11 + indexOffset,\r\n 12 + indexOffset,\r\n 13 + indexOffset,\r\n 14 + indexOffset,\r\n 12 + indexOffset,\r\n 14 + indexOffset,\r\n 15 + indexOffset,\r\n 16 + indexOffset,\r\n 17 + indexOffset,\r\n 18 + indexOffset,\r\n 16 + indexOffset,\r\n 18 + indexOffset,\r\n 19 + indexOffset,\r\n 20 + indexOffset,\r\n 21 + indexOffset,\r\n 22 + indexOffset,\r\n 20 + indexOffset,\r\n 22 + indexOffset,\r\n 23 + indexOffset\r\n );\r\n vertices?.push(\r\n ...topFacePos,\r\n ...frontFacePos,\r\n ...rightFacePos,\r\n ...backFacePos,\r\n ...leftFacePos,\r\n ...bottomFacePos\r\n );\r\n normals?.push(\r\n ...topFacenormal,\r\n ...frontFaceNormal,\r\n ...rightFaceNormal,\r\n ...backFaceNormal,\r\n ...leftFaceNormal,\r\n ...bottomFaceNormal\r\n );\r\n uvs?.push(...uv, ...uv, ...uv, ...uv, ...uv, ...uv);\r\n if (tangents) {\r\n const pushFaceTangent = (tx: number, ty: number, tz: number) => {\r\n tangents.push(tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0);\r\n };\r\n // Top (+Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Front (+Z): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Right (+X): u -> -Z\r\n pushFaceTangent(0, 0, -1);\r\n // Back (-Z): u -> -X (与 front 相反,保持 TBN 右手一致)\r\n pushFaceTangent(-1, 0, 0);\r\n // Left (-X): u -> +Z\r\n pushFaceTangent(0, 0, +1);\r\n // Bottom (-Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list';\r\n }\r\n /** Box width */\r\n get width(): number {\r\n return this._options.sizeX ?? this._options.size ?? 1;\r\n }\r\n /** Box height */\r\n get height(): number {\r\n return this._options.sizeY ?? this._options.size ?? 1;\r\n }\r\n /** Box depth */\r\n get depth(): number {\r\n return this._options.sizeZ ?? this._options.size ?? 1;\r\n }\r\n}\r\n\r\n/**\r\n * Wireframe box shape\r\n * @public\r\n */\r\nexport class BoxFrameShape extends Shape<BoxCreationOptions> implements Clonable<BoxFrameShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n size: 1,\r\n anchor: 0.5\r\n };\r\n /**\r\n * Creates an instance of wireframe box shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: BoxCreationOptions) {\r\n super(options);\r\n }\r\n clone(): BoxFrameShape {\r\n return new BoxFrameShape(this._options);\r\n }\r\n /** type of the shape */\r\n get type(): string {\r\n return 'BoxFrame';\r\n }\r\n /**\r\n * Generates the data for the box shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n options: BoxCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ): PrimitiveType {\r\n options = Object.assign({}, this._defaultOptions, options ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const sizeX = options?.sizeX ?? options?.size ?? 1;\r\n const sizeY = options?.sizeY ?? options?.size ?? 1;\r\n const sizeZ = options?.sizeZ ?? options?.size ?? 1;\r\n const anchorX = options.anchorX ?? options.anchor;\r\n const anchorY = options.anchorY ?? options.anchor;\r\n const anchorZ = options.anchorZ ?? options.anchor;\r\n const minx = -anchorX * sizeX;\r\n const maxx = minx + sizeX;\r\n const miny = -anchorY * sizeY;\r\n const maxy = miny + sizeY;\r\n const minz = -anchorZ * sizeZ;\r\n const maxz = minz + sizeZ;\r\n const uv = uvs ? [0, 0, 0, 1, 1, 1, 1, 0] : null;\r\n const topFacePos = [minx, maxy, minz, minx, maxy, maxz, maxx, maxy, maxz, maxx, maxy, minz];\r\n const topFacenormal = normals ? [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0] : null;\r\n const bottomFacePos = [minx, miny, maxz, minx, miny, minz, maxx, miny, minz, maxx, miny, maxz];\r\n const bottomFaceNormal = normals ? [0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0] : null;\r\n indices?.push(\r\n 0 + indexOffset,\r\n 1 + indexOffset,\r\n 1 + indexOffset,\r\n 2 + indexOffset,\r\n 2 + indexOffset,\r\n 3 + indexOffset,\r\n 3 + indexOffset,\r\n 0 + indexOffset,\r\n 0 + indexOffset,\r\n 5 + indexOffset,\r\n 1 + indexOffset,\r\n 4 + indexOffset,\r\n 2 + indexOffset,\r\n 7 + indexOffset,\r\n 3 + indexOffset,\r\n 6 + indexOffset,\r\n 6 + indexOffset,\r\n 5 + indexOffset,\r\n 5 + indexOffset,\r\n 4 + indexOffset,\r\n 4 + indexOffset,\r\n 7 + indexOffset,\r\n 7 + indexOffset,\r\n 6 + indexOffset\r\n );\r\n vertices?.push(...topFacePos, ...bottomFacePos);\r\n normals?.push(...topFacenormal, ...bottomFaceNormal);\r\n uvs?.push(...uv, ...uv, ...uv, ...uv, ...uv, ...uv);\r\n if (tangents) {\r\n const pushFaceTangent = (tx: number, ty: number, tz: number) => {\r\n tangents.push(tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0);\r\n };\r\n // Top (+Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Front (+Z): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Right (+X): u -> -Z\r\n pushFaceTangent(0, 0, -1);\r\n // Back (-Z): u -> -X\r\n pushFaceTangent(-1, 0, 0);\r\n // Left (-X): u -> +Z\r\n pushFaceTangent(0, 0, +1);\r\n // Bottom (-Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'line-list';\r\n }\r\n}\r\n"],"names":["BoxShape","Shape","_defaultOptions","size","anchor","options","clone","_options","type","generateData","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","length","sizeX","sizeY","sizeZ","anchorX","anchorY","anchorZ","minx","maxx","miny","maxy","minz","maxz","uv","topFacePos","topFacenormal","frontFacePos","frontFaceNormal","rightFacePos","rightFaceNormal","backFacePos","backFaceNormal","leftFacePos","leftFaceNormal","bottomFacePos","bottomFaceNormal","push","pushFaceTangent","tx","ty","tz","_transform","transform","i","minPoint","x","Math","min","y","z","maxPoint","max","width","height","depth","BoxFrameShape"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"box.js","sources":["../../src/shapes/box.ts"],"sourcesContent":["import type { AABB, Clonable, DeepRequireOptionals } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for box shape\r\n * @public\r\n */\r\nexport interface BoxCreationOptions extends ShapeCreationOptions {\r\n /** Size of all axises, default 1 */\r\n size?: number;\r\n /** Size of axis x, default 1 */\r\n sizeX?: number;\r\n /** Size of axis y, default 1 */\r\n sizeY?: number;\r\n /** Size of axis z, default 1 */\r\n sizeZ?: number;\r\n /** Anchor */\r\n anchor?: number;\r\n /** Anchor X */\r\n anchorX?: number;\r\n /** Anchor Y */\r\n anchorY?: number;\r\n /** Anchor Z */\r\n anchorZ?: number;\r\n}\r\n\r\n/**\r\n * Box shape\r\n * @public\r\n */\r\nexport class BoxShape extends Shape<BoxCreationOptions> implements Clonable<BoxShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n size: 1,\r\n anchor: 0.5\r\n };\r\n /**\r\n * Creates an instance of box shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: BoxCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new BoxShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Box' as const;\r\n }\r\n /**\r\n * Generates the data for the box shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: BoxCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const sizeX = options?.sizeX ?? options?.size ?? 1;\r\n const sizeY = options?.sizeY ?? options?.size ?? 1;\r\n const sizeZ = options?.sizeZ ?? options?.size ?? 1;\r\n const anchorX = options.anchorX ?? options.anchor;\r\n const anchorY = options.anchorY ?? options.anchor;\r\n const anchorZ = options.anchorZ ?? options.anchor;\r\n const minx = -anchorX * sizeX;\r\n const maxx = minx + sizeX;\r\n const miny = -anchorY * sizeY;\r\n const maxy = miny + sizeY;\r\n const minz = -anchorZ * sizeZ;\r\n const maxz = minz + sizeZ;\r\n const uv = uvs ? [0, 0, 0, 1, 1, 1, 1, 0] : null;\r\n const topFacePos = [minx, maxy, minz, minx, maxy, maxz, maxx, maxy, maxz, maxx, maxy, minz];\r\n const topFacenormal = normals ? [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0] : null;\r\n const frontFacePos = [minx, maxy, maxz, minx, miny, maxz, maxx, miny, maxz, maxx, maxy, maxz];\r\n const frontFaceNormal = normals ? [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1] : null;\r\n const rightFacePos = [maxx, maxy, maxz, maxx, miny, maxz, maxx, miny, minz, maxx, maxy, minz];\r\n const rightFaceNormal = normals ? [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] : null;\r\n const backFacePos = [maxx, maxy, minz, maxx, miny, minz, minx, miny, minz, minx, maxy, minz];\r\n const backFaceNormal = normals ? [0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1] : null;\r\n const leftFacePos = [minx, maxy, minz, minx, miny, minz, minx, miny, maxz, minx, maxy, maxz];\r\n const leftFaceNormal = normals ? [-1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0] : null;\r\n const bottomFacePos = [minx, miny, maxz, minx, miny, minz, maxx, miny, minz, maxx, miny, maxz];\r\n const bottomFaceNormal = normals ? [0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0] : null;\r\n indices?.push(\r\n 0 + indexOffset,\r\n 1 + indexOffset,\r\n 2 + indexOffset,\r\n 0 + indexOffset,\r\n 2 + indexOffset,\r\n 3 + indexOffset,\r\n 4 + indexOffset,\r\n 5 + indexOffset,\r\n 6 + indexOffset,\r\n 4 + indexOffset,\r\n 6 + indexOffset,\r\n 7 + indexOffset,\r\n 8 + indexOffset,\r\n 9 + indexOffset,\r\n 10 + indexOffset,\r\n 8 + indexOffset,\r\n 10 + indexOffset,\r\n 11 + indexOffset,\r\n 12 + indexOffset,\r\n 13 + indexOffset,\r\n 14 + indexOffset,\r\n 12 + indexOffset,\r\n 14 + indexOffset,\r\n 15 + indexOffset,\r\n 16 + indexOffset,\r\n 17 + indexOffset,\r\n 18 + indexOffset,\r\n 16 + indexOffset,\r\n 18 + indexOffset,\r\n 19 + indexOffset,\r\n 20 + indexOffset,\r\n 21 + indexOffset,\r\n 22 + indexOffset,\r\n 20 + indexOffset,\r\n 22 + indexOffset,\r\n 23 + indexOffset\r\n );\r\n vertices?.push(\r\n ...topFacePos,\r\n ...frontFacePos,\r\n ...rightFacePos,\r\n ...backFacePos,\r\n ...leftFacePos,\r\n ...bottomFacePos\r\n );\r\n normals?.push(\r\n ...topFacenormal!,\r\n ...frontFaceNormal!,\r\n ...rightFaceNormal!,\r\n ...backFaceNormal!,\r\n ...leftFaceNormal!,\r\n ...bottomFaceNormal!\r\n );\r\n uvs?.push(...uv!, ...uv!, ...uv!, ...uv!, ...uv!, ...uv!);\r\n if (tangents) {\r\n const pushFaceTangent = (tx: number, ty: number, tz: number) => {\r\n tangents.push(tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0);\r\n };\r\n // Top (+Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Front (+Z): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Right (+X): u -> -Z\r\n pushFaceTangent(0, 0, -1);\r\n // Back (-Z): u -> -X (与 front 相反,保持 TBN 右手一致)\r\n pushFaceTangent(-1, 0, 0);\r\n // Left (-X): u -> +Z\r\n pushFaceTangent(0, 0, +1);\r\n // Bottom (-Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n /** Box width */\r\n get width() {\r\n return this._options.sizeX ?? this._options.size ?? 1;\r\n }\r\n /** Box height */\r\n get height() {\r\n return this._options.sizeY ?? this._options.size ?? 1;\r\n }\r\n /** Box depth */\r\n get depth() {\r\n return this._options.sizeZ ?? this._options.size ?? 1;\r\n }\r\n}\r\n\r\n/**\r\n * Wireframe box shape\r\n * @public\r\n */\r\nexport class BoxFrameShape extends Shape<BoxCreationOptions> implements Clonable<BoxFrameShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n size: 1,\r\n sizeX: 1,\r\n sizeY: 1,\r\n sizeZ: 1,\r\n anchor: 0.5,\r\n anchorX: 0.5,\r\n anchorY: 0.5,\r\n anchorZ: 0.5\r\n };\r\n /**\r\n * Creates an instance of wireframe box shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: BoxCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new BoxFrameShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'BoxFrame' as const;\r\n }\r\n /**\r\n * Generates the data for the box shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n options: DeepRequireOptionals<BoxCreationOptions>,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n options = Object.assign({}, this._defaultOptions, options ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const sizeX = options?.sizeX ?? options?.size ?? 1;\r\n const sizeY = options?.sizeY ?? options?.size ?? 1;\r\n const sizeZ = options?.sizeZ ?? options?.size ?? 1;\r\n const anchorX = options.anchorX ?? options.anchor;\r\n const anchorY = options.anchorY ?? options.anchor;\r\n const anchorZ = options.anchorZ ?? options.anchor;\r\n const minx = -anchorX * sizeX;\r\n const maxx = minx + sizeX;\r\n const miny = -anchorY * sizeY;\r\n const maxy = miny + sizeY;\r\n const minz = -anchorZ * sizeZ;\r\n const maxz = minz + sizeZ;\r\n const uv = uvs ? [0, 0, 0, 1, 1, 1, 1, 0] : null;\r\n const topFacePos = [minx, maxy, minz, minx, maxy, maxz, maxx, maxy, maxz, maxx, maxy, minz];\r\n const topFacenormal = normals ? [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0] : null;\r\n const bottomFacePos = [minx, miny, maxz, minx, miny, minz, maxx, miny, minz, maxx, miny, maxz];\r\n const bottomFaceNormal = normals ? [0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0] : null;\r\n indices?.push(\r\n 0 + indexOffset,\r\n 1 + indexOffset,\r\n 1 + indexOffset,\r\n 2 + indexOffset,\r\n 2 + indexOffset,\r\n 3 + indexOffset,\r\n 3 + indexOffset,\r\n 0 + indexOffset,\r\n 0 + indexOffset,\r\n 5 + indexOffset,\r\n 1 + indexOffset,\r\n 4 + indexOffset,\r\n 2 + indexOffset,\r\n 7 + indexOffset,\r\n 3 + indexOffset,\r\n 6 + indexOffset,\r\n 6 + indexOffset,\r\n 5 + indexOffset,\r\n 5 + indexOffset,\r\n 4 + indexOffset,\r\n 4 + indexOffset,\r\n 7 + indexOffset,\r\n 7 + indexOffset,\r\n 6 + indexOffset\r\n );\r\n vertices?.push(...topFacePos, ...bottomFacePos);\r\n normals?.push(...topFacenormal!, ...bottomFaceNormal!);\r\n uvs?.push(...uv!, ...uv!, ...uv!, ...uv!, ...uv!, ...uv!);\r\n if (tangents) {\r\n const pushFaceTangent = (tx: number, ty: number, tz: number) => {\r\n tangents.push(tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0, tx, ty, tz, 1.0);\r\n };\r\n // Top (+Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Front (+Z): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n // Right (+X): u -> -Z\r\n pushFaceTangent(0, 0, -1);\r\n // Back (-Z): u -> -X\r\n pushFaceTangent(-1, 0, 0);\r\n // Left (-X): u -> +Z\r\n pushFaceTangent(0, 0, +1);\r\n // Bottom (-Y): u -> +X\r\n pushFaceTangent(+1, 0, 0);\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'line-list' as const;\r\n }\r\n}\r\n"],"names":["BoxShape","Shape","_defaultOptions","size","anchor","options","clone","_options","type","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","length","sizeX","sizeY","sizeZ","anchorX","anchorY","anchorZ","minx","maxx","miny","maxy","minz","maxz","uv","topFacePos","topFacenormal","frontFacePos","frontFaceNormal","rightFacePos","rightFaceNormal","backFacePos","backFaceNormal","leftFacePos","leftFaceNormal","bottomFacePos","bottomFaceNormal","push","pushFaceTangent","tx","ty","tz","_transform","transform","i","minPoint","x","Math","min","y","z","maxPoint","max","width","height","depth","BoxFrameShape"],"mappings":"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"}
|
package/dist/shapes/cylinder.js
CHANGED
|
@@ -41,8 +41,8 @@ import { Shape } from './shape.js';
|
|
|
41
41
|
* @param normals - vertex normals
|
|
42
42
|
* @param uvs - vertex uvs
|
|
43
43
|
* @param indices - vertex indices
|
|
44
|
-
*/ static generateData(
|
|
45
|
-
options = Object.assign({}, this._defaultOptions,
|
|
44
|
+
*/ static generateData(opt, vertices, normals, tangents, uvs, indices, bbox, indexOffset, vertexCallback) {
|
|
45
|
+
const options = Object.assign({}, this._defaultOptions, opt ?? {});
|
|
46
46
|
indexOffset = indexOffset ?? 0;
|
|
47
47
|
const start = vertices.length;
|
|
48
48
|
const slope = (options.topRadius - options.bottomRadius) / options.height;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cylinder.js","sources":["../../src/shapes/cylinder.ts"],"sourcesContent":["import type { AABB, Clonable } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\nimport type { PrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Creation options for cylinder shape\r\n * @public\r\n */\r\nexport interface CylinderCreationOptions extends ShapeCreationOptions {\r\n /** Top radius, default is 1.0 **/\r\n bottomRadius?: number;\r\n /** Bottom radius, default is 1.0 */\r\n topRadius?: number;\r\n /** Generate top cap, default is true */\r\n topCap?: boolean;\r\n /** Generate bottom cap, default is true */\r\n bottomCap?: boolean;\r\n /** Height, default is 1.0 */\r\n height?: number;\r\n /** Height detail, default is 1 */\r\n heightDetail?: number;\r\n /** Radial detail, default is 20 */\r\n radialDetail?: number;\r\n /** Anchor point, default is 0 */\r\n anchor?: number;\r\n}\r\n\r\n/**\r\n * Box shape\r\n * @public\r\n */\r\nexport class CylinderShape extends Shape<CylinderCreationOptions> implements Clonable<CylinderShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n topCap: true,\r\n bottomCap: true,\r\n bottomRadius: 1,\r\n topRadius: 1,\r\n heightDetail: 1,\r\n radialDetail: 20,\r\n height: 1,\r\n anchor: 0\r\n };\r\n /**\r\n * Creates an instance of cylinder shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: CylinderCreationOptions) {\r\n super(options);\r\n }\r\n clone(): CylinderShape {\r\n return new CylinderShape(this._options);\r\n }\r\n /** type of the shape */\r\n get type(): string {\r\n return 'Cylinder';\r\n }\r\n /** @internal */\r\n private static addPatch(\r\n radialDetail: number,\r\n x: number,\r\n y: number,\r\n indices: number[],\r\n indexOffset: number\r\n ) {\r\n const stride = radialDetail + 1;\r\n const lt = (y + 1) * stride + x;\r\n const rt = lt + 1;\r\n const lb = lt - stride;\r\n const rb = lb + 1;\r\n indices?.push(\r\n lt + indexOffset,\r\n lb + indexOffset,\r\n rb + indexOffset,\r\n lt + indexOffset,\r\n rb + indexOffset,\r\n rt + indexOffset\r\n );\r\n }\r\n /**\r\n * Generates the data for the cylinder shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n options: CylinderCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ): PrimitiveType {\r\n options = Object.assign({}, this._defaultOptions, options ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n\r\n const slope = (options.topRadius - options.bottomRadius) / options.height;\r\n for (let y = 0; y <= options.heightDetail; y++) {\r\n const v = y / options.heightDetail;\r\n const radius = (options.topRadius - options.bottomRadius) * v + options.bottomRadius;\r\n for (let x = 0; x <= options.radialDetail; x++) {\r\n const u = x / options.radialDetail;\r\n const theta = u * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n const m = 1 / Math.hypot(sinTheta, slope, cosTheta);\r\n vertices?.push(radius * sinTheta, (v - options.anchor) * options.height, radius * cosTheta);\r\n normals?.push(sinTheta * m, slope * m, cosTheta * m);\r\n uvs?.push(u, 1 - v);\r\n tangents?.push(cosTheta, 0.0, -sinTheta, 1.0);\r\n if (y < options.heightDetail && x < options.radialDetail) {\r\n this.addPatch(options.radialDetail, x, y, indices, indexOffset);\r\n }\r\n }\r\n }\r\n\r\n const sideVertexCount = (options.heightDetail + 1) * (options.radialDetail + 1);\r\n let currentVertexOffset = start + sideVertexCount;\r\n if (options.bottomCap) {\r\n vertices?.push(0, -options.anchor * options.height, 0);\r\n normals?.push(0, -1, 0);\r\n uvs?.push(0.5, 0.5);\r\n tangents?.push(1, 0, 0, 1);\r\n\r\n const bottomCenterIndex = currentVertexOffset - start;\r\n currentVertexOffset++;\r\n\r\n for (let i = 0; i <= options.radialDetail; i++) {\r\n const theta = (i / options.radialDetail) * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n vertices?.push(\r\n options.bottomRadius * sinTheta,\r\n -options.anchor * options.height,\r\n options.bottomRadius * cosTheta\r\n );\r\n normals?.push(0, -1, 0);\r\n uvs?.push(0.5 + 0.5 * sinTheta, 0.5 + 0.5 * cosTheta);\r\n tangents?.push(1, 0, 0, 1);\r\n currentVertexOffset++;\r\n\r\n if (i < options.radialDetail) {\r\n indices?.push(\r\n bottomCenterIndex + indexOffset,\r\n bottomCenterIndex + i + 2 + indexOffset,\r\n bottomCenterIndex + i + 1 + indexOffset\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.topCap) {\r\n vertices?.push(0, (1 - options.anchor) * options.height, 0);\r\n normals?.push(0, 1, 0);\r\n uvs?.push(0.5, 0.5);\r\n tangents?.push(1, 0, 0, 1);\r\n const topCenterIndex = currentVertexOffset - start;\r\n currentVertexOffset++;\r\n\r\n for (let i = 0; i <= options.radialDetail; i++) {\r\n const theta = (i / options.radialDetail) * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n vertices?.push(\r\n options.topRadius * sinTheta,\r\n (1 - options.anchor) * options.height,\r\n options.topRadius * cosTheta\r\n );\r\n normals?.push(0, 1, 0);\r\n uvs?.push(0.5 + 0.5 * sinTheta, 0.5 + 0.5 * cosTheta);\r\n tangents?.push(1, 0, 0, 1);\r\n currentVertexOffset++;\r\n\r\n if (i < options.radialDetail) {\r\n indices?.push(\r\n topCenterIndex + indexOffset,\r\n topCenterIndex + i + 1 + indexOffset,\r\n topCenterIndex + i + 2 + indexOffset\r\n );\r\n }\r\n }\r\n }\r\n\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list';\r\n }\r\n}\r\n"],"names":["CylinderShape","Shape","_defaultOptions","topCap","bottomCap","bottomRadius","topRadius","heightDetail","radialDetail","height","anchor","options","clone","_options","type","addPatch","x","y","indices","indexOffset","stride","lt","rt","lb","rb","push","generateData","vertices","normals","tangents","uvs","bbox","vertexCallback","Object","assign","start","length","slope","v","radius","u","theta","Math","PI","sinTheta","sin","cosTheta","cos","m","hypot","sideVertexCount","currentVertexOffset","bottomCenterIndex","i","topCenterIndex","_transform","transform","minPoint","min","z","maxPoint","max"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cylinder.js","sources":["../../src/shapes/cylinder.ts"],"sourcesContent":["import type { AABB, Clonable } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for cylinder shape\r\n * @public\r\n */\r\nexport interface CylinderCreationOptions extends ShapeCreationOptions {\r\n /** Top radius, default is 1.0 **/\r\n bottomRadius?: number;\r\n /** Bottom radius, default is 1.0 */\r\n topRadius?: number;\r\n /** Generate top cap, default is true */\r\n topCap?: boolean;\r\n /** Generate bottom cap, default is true */\r\n bottomCap?: boolean;\r\n /** Height, default is 1.0 */\r\n height?: number;\r\n /** Height detail, default is 1 */\r\n heightDetail?: number;\r\n /** Radial detail, default is 20 */\r\n radialDetail?: number;\r\n /** Anchor point, default is 0 */\r\n anchor?: number;\r\n}\r\n\r\n/**\r\n * Box shape\r\n * @public\r\n */\r\nexport class CylinderShape extends Shape<CylinderCreationOptions> implements Clonable<CylinderShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n topCap: true,\r\n bottomCap: true,\r\n bottomRadius: 1,\r\n topRadius: 1,\r\n heightDetail: 1,\r\n radialDetail: 20,\r\n height: 1,\r\n anchor: 0\r\n };\r\n /**\r\n * Creates an instance of cylinder shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: CylinderCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new CylinderShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Cylinder' as const;\r\n }\r\n /** @internal */\r\n private static addPatch(\r\n radialDetail: number,\r\n x: number,\r\n y: number,\r\n indices: number[],\r\n indexOffset: number\r\n ) {\r\n const stride = radialDetail + 1;\r\n const lt = (y + 1) * stride + x;\r\n const rt = lt + 1;\r\n const lb = lt - stride;\r\n const rb = lb + 1;\r\n indices?.push(\r\n lt + indexOffset,\r\n lb + indexOffset,\r\n rb + indexOffset,\r\n lt + indexOffset,\r\n rb + indexOffset,\r\n rt + indexOffset\r\n );\r\n }\r\n /**\r\n * Generates the data for the cylinder shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: CylinderCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n\r\n const slope = (options.topRadius - options.bottomRadius) / options.height;\r\n for (let y = 0; y <= options.heightDetail; y++) {\r\n const v = y / options.heightDetail;\r\n const radius = (options.topRadius - options.bottomRadius) * v + options.bottomRadius;\r\n for (let x = 0; x <= options.radialDetail; x++) {\r\n const u = x / options.radialDetail;\r\n const theta = u * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n const m = 1 / Math.hypot(sinTheta, slope, cosTheta);\r\n vertices?.push(radius * sinTheta, (v - options.anchor) * options.height, radius * cosTheta);\r\n normals?.push(sinTheta * m, slope * m, cosTheta * m);\r\n uvs?.push(u, 1 - v);\r\n tangents?.push(cosTheta, 0.0, -sinTheta, 1.0);\r\n if (y < options.heightDetail && x < options.radialDetail) {\r\n this.addPatch(options.radialDetail, x, y, indices, indexOffset);\r\n }\r\n }\r\n }\r\n\r\n const sideVertexCount = (options.heightDetail + 1) * (options.radialDetail + 1);\r\n let currentVertexOffset = start + sideVertexCount;\r\n if (options.bottomCap) {\r\n vertices?.push(0, -options.anchor * options.height, 0);\r\n normals?.push(0, -1, 0);\r\n uvs?.push(0.5, 0.5);\r\n tangents?.push(1, 0, 0, 1);\r\n\r\n const bottomCenterIndex = currentVertexOffset - start;\r\n currentVertexOffset++;\r\n\r\n for (let i = 0; i <= options.radialDetail; i++) {\r\n const theta = (i / options.radialDetail) * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n vertices?.push(\r\n options.bottomRadius * sinTheta,\r\n -options.anchor * options.height,\r\n options.bottomRadius * cosTheta\r\n );\r\n normals?.push(0, -1, 0);\r\n uvs?.push(0.5 + 0.5 * sinTheta, 0.5 + 0.5 * cosTheta);\r\n tangents?.push(1, 0, 0, 1);\r\n currentVertexOffset++;\r\n\r\n if (i < options.radialDetail) {\r\n indices?.push(\r\n bottomCenterIndex + indexOffset,\r\n bottomCenterIndex + i + 2 + indexOffset,\r\n bottomCenterIndex + i + 1 + indexOffset\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.topCap) {\r\n vertices?.push(0, (1 - options.anchor) * options.height, 0);\r\n normals?.push(0, 1, 0);\r\n uvs?.push(0.5, 0.5);\r\n tangents?.push(1, 0, 0, 1);\r\n const topCenterIndex = currentVertexOffset - start;\r\n currentVertexOffset++;\r\n\r\n for (let i = 0; i <= options.radialDetail; i++) {\r\n const theta = (i / options.radialDetail) * Math.PI * 2;\r\n const sinTheta = Math.sin(theta);\r\n const cosTheta = Math.cos(theta);\r\n vertices?.push(\r\n options.topRadius * sinTheta,\r\n (1 - options.anchor) * options.height,\r\n options.topRadius * cosTheta\r\n );\r\n normals?.push(0, 1, 0);\r\n uvs?.push(0.5 + 0.5 * sinTheta, 0.5 + 0.5 * cosTheta);\r\n tangents?.push(1, 0, 0, 1);\r\n currentVertexOffset++;\r\n\r\n if (i < options.radialDetail) {\r\n indices?.push(\r\n topCenterIndex + indexOffset,\r\n topCenterIndex + i + 1 + indexOffset,\r\n topCenterIndex + i + 2 + indexOffset\r\n );\r\n }\r\n }\r\n }\r\n\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["CylinderShape","Shape","_defaultOptions","topCap","bottomCap","bottomRadius","topRadius","heightDetail","radialDetail","height","anchor","options","clone","_options","type","addPatch","x","y","indices","indexOffset","stride","lt","rt","lb","rb","push","generateData","opt","vertices","normals","tangents","uvs","bbox","vertexCallback","Object","assign","start","length","slope","v","radius","u","theta","Math","PI","sinTheta","sin","cosTheta","cos","m","hypot","sideVertexCount","currentVertexOffset","bottomCenterIndex","i","topCenterIndex","_transform","transform","minPoint","min","z","maxPoint","max"],"mappings":"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"}
|
package/dist/shapes/plane.js
CHANGED
|
@@ -29,8 +29,8 @@ import { Shape } from './shape.js';
|
|
|
29
29
|
* @param normals - vertex normals
|
|
30
30
|
* @param uvs - vertex uvs
|
|
31
31
|
* @param indices - vertex indices
|
|
32
|
-
*/ static generateData(
|
|
33
|
-
options = Object.assign({}, this._defaultOptions,
|
|
32
|
+
*/ static generateData(opt, vertices, normals, tangents, uvs, indices, bbox, indexOffset, vertexCallback) {
|
|
33
|
+
const options = Object.assign({}, this._defaultOptions, opt ?? {});
|
|
34
34
|
indexOffset = indexOffset ?? 0;
|
|
35
35
|
const start = vertices.length;
|
|
36
36
|
const sizeX = Math.abs(options.sizeX || options.size) || 1;
|
package/dist/shapes/plane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plane.js","sources":["../../src/shapes/plane.ts"],"sourcesContent":["import type { AABB, Clonable } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\
|
|
1
|
+
{"version":3,"file":"plane.js","sources":["../../src/shapes/plane.ts"],"sourcesContent":["import type { AABB, Clonable } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for plane shapes\r\n * @public\r\n */\r\nexport interface PlaneCreationOptions extends ShapeCreationOptions {\r\n /** Default size of axis x and axis y, default is 1 */\r\n size?: number;\r\n /** Size of axis x, default value equals to size */\r\n sizeX?: number;\r\n /** Size of axis y, default value equals to size */\r\n sizeY?: number;\r\n /** Resolution, default is 1 */\r\n resolution?: number;\r\n /** Resolution X, default value equals to resolution */\r\n resolutionX?: number;\r\n /** Resolution Y, default value equals to resolution */\r\n resolutionY?: number;\r\n /** Whether this plane have front side, default is true */\r\n twoSided?: boolean;\r\n /** Anchor, default is 0.5 */\r\n anchor?: number;\r\n /** Anchor X, default value equals to anchor */\r\n anchorX?: number;\r\n /** Anchor Z, default value equals to anchor */\r\n anchorY?: number;\r\n}\r\n\r\n/**\r\n * The plane shape\r\n * @public\r\n */\r\nexport class PlaneShape extends Shape<PlaneCreationOptions> implements Clonable<PlaneShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n size: 1,\r\n resolution: 1,\r\n twoSided: false,\r\n anchor: 0.5\r\n };\r\n /**\r\n * Creates an instance of plane shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: PlaneCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new PlaneShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Plane' as const;\r\n }\r\n /**\r\n * Generates the data for the cylinder shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: PlaneCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const sizeX = Math.abs(options.sizeX || options.size) || 1;\r\n const sizeY = Math.abs(options.sizeY || options.size) || 1;\r\n const anchorX = options.anchorX ?? options.anchor;\r\n const anchorY = options.anchorY ?? options.anchor;\r\n const minX = -anchorX * sizeX;\r\n const maxX = minX + sizeX;\r\n const minY = -anchorY * sizeY;\r\n const maxY = minY + sizeY;\r\n const resolutionX = Math.max(options.resolutionX ?? options.resolution, 1);\r\n const resolutionY = Math.max(options.resolutionY ?? options.resolution, 1);\r\n const dx = (maxX - minX) / resolutionX;\r\n const dy = (maxY - minY) / resolutionY;\r\n for (let i = 0; i <= resolutionX; i++) {\r\n for (let j = 0; j <= resolutionY; j++) {\r\n uvs?.push(i / resolutionX, j / resolutionY);\r\n vertices?.push(minX + dx * i, 0, minY + dy * j);\r\n normals?.push(0, 1, 0);\r\n tangents?.push(1, 0, 0, 1);\r\n }\r\n }\r\n if (indices) {\r\n for (let i = 0; i < resolutionX; i++) {\r\n for (let j = 0; j < resolutionY; j++) {\r\n const tl = j * (resolutionY + 1) + i;\r\n const tr = (j + 1) * (resolutionY + 1) + i;\r\n const bl = tl + 1;\r\n const br = tr + 1;\r\n indices.push(\r\n tl + indexOffset,\r\n bl + indexOffset,\r\n br + indexOffset,\r\n tl + indexOffset,\r\n br + indexOffset,\r\n tr + indexOffset\r\n );\r\n if (options.twoSided) {\r\n indices.push(\r\n tl + indexOffset,\r\n br + indexOffset,\r\n bl + indexOffset,\r\n tl + indexOffset,\r\n tr + indexOffset,\r\n br + indexOffset\r\n );\r\n }\r\n }\r\n }\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["PlaneShape","Shape","_defaultOptions","size","resolution","twoSided","anchor","options","clone","_options","type","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","length","sizeX","Math","abs","sizeY","anchorX","anchorY","minX","maxX","minY","maxY","resolutionX","max","resolutionY","dx","dy","i","j","push","tl","tr","bl","br","_transform","transform","minPoint","x","min","y","z","maxPoint"],"mappings":"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"}
|
package/dist/shapes/shape.js
CHANGED
package/dist/shapes/shape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.js","sources":["../../src/shapes/shape.ts"],"sourcesContent":["import type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3, type Matrix4x4 } from '@zephyr3d/base';\r\nimport { Primitive } from '../render/primitive';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\n\r\n/**\r\n * Base class for creation options of any kind of shapes\r\n * @public\r\n */\r\nexport interface ShapeCreationOptions {\r\n /** true if we need to calculate normals for the shape */\r\n needNormal?: boolean;\r\n /** true if we need to calculate tangents for the shape */\r\n needTangent?: boolean;\r\n /** true if we need to calculate texture coordinates for the shape */\r\n needUV?: boolean;\r\n /** Transform matrix for the shape */\r\n transform?: Matrix4x4;\r\n}\r\n\r\n/**\r\n * Abstract base class for any kind of shapes\r\n * @public\r\n */\r\nexport abstract class Shape<T extends ShapeCreationOptions = ShapeCreationOptions>\r\n extends Primitive\r\n implements Clonable<Shape<T>>\r\n{\r\n static _defaultOptions = {\r\n needNormal: true,\r\n needTangent: true,\r\n needUV: true\r\n };\r\n protected _options: T;\r\n /**\r\n * Creates an instance of shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: T) {\r\n super();\r\n this._create(options);\r\n }\r\n protected static computeTangent(\r\n v0: number[],\r\n v1: number[],\r\n v2: number[],\r\n uv0: number[],\r\n uv1: number[],\r\n uv2: number[],\r\n normal: number[]\r\n ): number[] {\r\n const dp1 = new Vector3(v1[0] - v0[0], v1[1] - v0[1], v1[2] - v0[2]);\r\n const dp2 = new Vector3(v2[0] - v0[0], v2[1] - v0[1], v2[2] - v0[2]);\r\n\r\n const du1 = uv1[0] - uv0[0],\r\n dv1 = uv1[1] - uv0[1];\r\n const du2 = uv2[0] - uv0[0],\r\n dv2 = uv2[1] - uv0[1];\r\n\r\n const denom = du1 * dv2 - dv1 * du2;\r\n\r\n if (Math.abs(denom) <= 1e-8) {\r\n return [1, 0, 0, 1];\r\n }\r\n\r\n const r = 1.0 / denom;\r\n let t0 = (dp1.x * dv2 - dp2.x * dv1) * r;\r\n let t1 = (dp1.y * dv2 - dp2.y * dv1) * r;\r\n let t2 = (dp1.z * dv2 - dp2.z * dv1) * r;\r\n const b0 = (dp2.x * du1 - dp1.x * du2) * r;\r\n const b1 = (dp2.y * du1 - dp1.y * du2) * r;\r\n const b2 = (dp2.z * du1 - dp1.z * du2) * r;\r\n\r\n // Gram-Schmidt\r\n const dotNT = normal[0] * t0 + normal[1] * t1 + normal[2] * t2;\r\n t0 -= normal[0] * dotNT;\r\n t1 -= normal[1] * dotNT;\r\n t2 -= normal[2] * dotNT;\r\n const lenT = Math.hypot(t0, t1, t2);\r\n if (lenT > 1e-8) {\r\n t0 /= lenT;\r\n t1 /= lenT;\r\n t2 /= lenT;\r\n } else {\r\n t0 = 1;\r\n t1 = 0;\r\n t2 = 0;\r\n }\r\n\r\n // w\r\n const c0 = normal[1] * t2 - normal[2] * t1;\r\n const c1 = normal[2] * t0 - normal[0] * t2;\r\n const c2 = normal[0] * t1 - normal[1] * t0;\r\n const w = c0 * b0 + c1 * b1 + c2 * b2 < 0 ? -1 : 1;\r\n\r\n return [t0, t1, t2, w];\r\n }\r\n\r\n abstract clone(): Shape<T>;\r\n /** Get shape creation options */\r\n get options(): T {\r\n return this._options;\r\n }\r\n set options(options: T) {\r\n this._create(options);\r\n }\r\n /** Get shape type */\r\n abstract get type(): string;\r\n /**\r\n * Normalize options\r\n * @param options - creation options\r\n * @returns Normalized creation options\r\n */\r\n normalizeOptions(options?: T): T {\r\n const defaultOptions = (this.constructor as any)._defaultOptions as T;\r\n return Object.assign({}, defaultOptions, options ?? {});\r\n }\r\n /** @internal */\r\n protected _create(options?: T): boolean {\r\n this._options = this.normalizeOptions(options);\r\n const vertices: number[] = [];\r\n const indices: number[] = [];\r\n const normals: number[] = this._options.needNormal ? [] : null;\r\n const tangents: number[] = this._options.needTangent ? [] : null;\r\n const uvs: number[] = this._options.needUV ? [] : null;\r\n const bbox = new BoundingBox();\r\n bbox.beginExtend();\r\n this.primitiveType = (this.constructor as any).generateData(\r\n this._options,\r\n vertices,\r\n normals,\r\n tangents,\r\n uvs,\r\n indices,\r\n bbox,\r\n null,\r\n null\r\n );\r\n for (const s of ['position', 'normal', 'tangent', 'texCoord0'] as const) {\r\n this.removeVertexBuffer(s);\r\n }\r\n this.setIndexBuffer(null);\r\n this.createAndSetVertexBuffer('position_f32x3', new Float32Array(vertices));\r\n if (normals) {\r\n this.createAndSetVertexBuffer('normal_f32x3', new Float32Array(normals));\r\n }\r\n if (tangents) {\r\n this.createAndSetVertexBuffer('tangent_f32x4', new Float32Array(tangents));\r\n }\r\n if (uvs) {\r\n this.createAndSetVertexBuffer('tex0_f32x2', new Float32Array(uvs));\r\n }\r\n this.createAndSetIndexBuffer(new Uint16Array(indices));\r\n this.setBoundingVolume(bbox);\r\n this.indexCount = indices.length;\r\n return true;\r\n }\r\n /** @internal */\r\n protected static _transform(matrix: Matrix4x4, vertices: number[], normals: number[], offset: number) {\r\n if (matrix) {\r\n const tmpVec = new Vector3();\r\n for (let i = offset; i < vertices.length - 2; i += 3) {\r\n tmpVec.setXYZ(vertices[i], vertices[i + 1], vertices[i + 2]);\r\n matrix.transformPointAffine(tmpVec, tmpVec);\r\n vertices[i] = tmpVec.x;\r\n vertices[i + 1] = tmpVec.y;\r\n vertices[i + 2] = tmpVec.z;\r\n if (normals) {\r\n tmpVec.setXYZ(normals[i], normals[i + 1], normals[i + 2]);\r\n matrix.transformVectorAffine(tmpVec, tmpVec);\r\n tmpVec.inplaceNormalize();\r\n normals[i] = tmpVec.x;\r\n normals[i + 1] = tmpVec.y;\r\n normals[i + 2] = tmpVec.z;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Shape","Primitive","_defaultOptions","needNormal","needTangent","needUV","_options","options","_create","computeTangent","v0","v1","v2","uv0","uv1","uv2","normal","dp1","Vector3","dp2","du1","dv1","du2","dv2","denom","Math","abs","r","t0","x","t1","y","t2","z","b0","b1","b2","dotNT","lenT","hypot","c0","c1","c2","w","normalizeOptions","defaultOptions","Object","assign","vertices","indices","normals","tangents","uvs","bbox","BoundingBox","beginExtend","primitiveType","generateData","s","removeVertexBuffer","setIndexBuffer","createAndSetVertexBuffer","Float32Array","createAndSetIndexBuffer","Uint16Array","setBoundingVolume","indexCount","length","_transform","matrix","offset","tmpVec","i","setXYZ","transformPointAffine","transformVectorAffine","inplaceNormalize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shape.js","sources":["../../src/shapes/shape.ts"],"sourcesContent":["import type { Clonable, DeepRequireOptionals, Nullable } from '@zephyr3d/base';\r\nimport { Vector3, type Matrix4x4 } from '@zephyr3d/base';\r\nimport { Primitive } from '../render/primitive';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\n\r\n/**\r\n * Base class for creation options of any kind of shapes\r\n * @public\r\n */\r\nexport interface ShapeCreationOptions {\r\n /** true if we need to calculate normals for the shape */\r\n needNormal?: boolean;\r\n /** true if we need to calculate tangents for the shape */\r\n needTangent?: boolean;\r\n /** true if we need to calculate texture coordinates for the shape */\r\n needUV?: boolean;\r\n /** Transform matrix for the shape */\r\n transform?: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Abstract base class for any kind of shapes\r\n * @public\r\n */\r\nexport abstract class Shape<T extends ShapeCreationOptions = ShapeCreationOptions>\r\n extends Primitive\r\n implements Clonable<Shape<T>>\r\n{\r\n static _defaultOptions = {\r\n needNormal: true,\r\n needTangent: true,\r\n needUV: true,\r\n transform: null\r\n };\r\n protected _options!: DeepRequireOptionals<T>;\r\n /**\r\n * Creates an instance of shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: T) {\r\n super();\r\n this._create(options);\r\n }\r\n protected static computeTangent(\r\n v0: number[],\r\n v1: number[],\r\n v2: number[],\r\n uv0: number[],\r\n uv1: number[],\r\n uv2: number[],\r\n normal: number[]\r\n ) {\r\n const dp1 = new Vector3(v1[0] - v0[0], v1[1] - v0[1], v1[2] - v0[2]);\r\n const dp2 = new Vector3(v2[0] - v0[0], v2[1] - v0[1], v2[2] - v0[2]);\r\n\r\n const du1 = uv1[0] - uv0[0],\r\n dv1 = uv1[1] - uv0[1];\r\n const du2 = uv2[0] - uv0[0],\r\n dv2 = uv2[1] - uv0[1];\r\n\r\n const denom = du1 * dv2 - dv1 * du2;\r\n\r\n if (Math.abs(denom) <= 1e-8) {\r\n return [1, 0, 0, 1];\r\n }\r\n\r\n const r = 1.0 / denom;\r\n let t0 = (dp1.x * dv2 - dp2.x * dv1) * r;\r\n let t1 = (dp1.y * dv2 - dp2.y * dv1) * r;\r\n let t2 = (dp1.z * dv2 - dp2.z * dv1) * r;\r\n const b0 = (dp2.x * du1 - dp1.x * du2) * r;\r\n const b1 = (dp2.y * du1 - dp1.y * du2) * r;\r\n const b2 = (dp2.z * du1 - dp1.z * du2) * r;\r\n\r\n // Gram-Schmidt\r\n const dotNT = normal[0] * t0 + normal[1] * t1 + normal[2] * t2;\r\n t0 -= normal[0] * dotNT;\r\n t1 -= normal[1] * dotNT;\r\n t2 -= normal[2] * dotNT;\r\n const lenT = Math.hypot(t0, t1, t2);\r\n if (lenT > 1e-8) {\r\n t0 /= lenT;\r\n t1 /= lenT;\r\n t2 /= lenT;\r\n } else {\r\n t0 = 1;\r\n t1 = 0;\r\n t2 = 0;\r\n }\r\n\r\n // w\r\n const c0 = normal[1] * t2 - normal[2] * t1;\r\n const c1 = normal[2] * t0 - normal[0] * t2;\r\n const c2 = normal[0] * t1 - normal[1] * t0;\r\n const w = c0 * b0 + c1 * b1 + c2 * b2 < 0 ? -1 : 1;\r\n\r\n return [t0, t1, t2, w];\r\n }\r\n\r\n abstract clone(): this;\r\n /** Get shape creation options */\r\n get options(): DeepRequireOptionals<T> {\r\n return this._options;\r\n }\r\n set options(options: T) {\r\n this._create(options);\r\n }\r\n /** Get shape type */\r\n abstract get type(): string;\r\n /**\r\n * Normalize options\r\n * @param options - creation options\r\n * @returns Normalized creation options\r\n */\r\n normalizeOptions(options?: T): DeepRequireOptionals<T> {\r\n const defaultOptions = (this.constructor as any)._defaultOptions as DeepRequireOptionals<T>;\r\n return Object.assign({}, defaultOptions, options ?? {});\r\n }\r\n /** @internal */\r\n protected _create(options?: T): boolean {\r\n this._options = this.normalizeOptions(options);\r\n const vertices: number[] = [];\r\n const indices: number[] = [];\r\n const normals: Nullable<number[]> = this._options.needNormal ? [] : null;\r\n const tangents: Nullable<number[]> = this._options.needTangent ? [] : null;\r\n const uvs: Nullable<number[]> = this._options.needUV ? [] : null;\r\n const bbox = new BoundingBox();\r\n bbox.beginExtend();\r\n this.primitiveType = (this.constructor as any).generateData(\r\n this._options,\r\n vertices,\r\n normals,\r\n tangents,\r\n uvs,\r\n indices,\r\n bbox,\r\n null,\r\n null\r\n );\r\n for (const s of ['position', 'normal', 'tangent', 'texCoord0'] as const) {\r\n this.removeVertexBuffer(s);\r\n }\r\n this.setIndexBuffer(null);\r\n this.createAndSetVertexBuffer('position_f32x3', new Float32Array(vertices));\r\n if (normals) {\r\n this.createAndSetVertexBuffer('normal_f32x3', new Float32Array(normals));\r\n }\r\n if (tangents) {\r\n this.createAndSetVertexBuffer('tangent_f32x4', new Float32Array(tangents));\r\n }\r\n if (uvs) {\r\n this.createAndSetVertexBuffer('tex0_f32x2', new Float32Array(uvs));\r\n }\r\n this.createAndSetIndexBuffer(new Uint16Array(indices));\r\n this.setBoundingVolume(bbox);\r\n this.indexCount = indices.length;\r\n return true;\r\n }\r\n /** @internal */\r\n protected static _transform(\r\n matrix: Nullable<Matrix4x4> | undefined,\r\n vertices: number[],\r\n normals: number[],\r\n offset: number\r\n ) {\r\n if (matrix) {\r\n const tmpVec = new Vector3();\r\n for (let i = offset; i < vertices.length - 2; i += 3) {\r\n tmpVec.setXYZ(vertices[i], vertices[i + 1], vertices[i + 2]);\r\n matrix.transformPointAffine(tmpVec, tmpVec);\r\n vertices[i] = tmpVec.x;\r\n vertices[i + 1] = tmpVec.y;\r\n vertices[i + 2] = tmpVec.z;\r\n if (normals) {\r\n tmpVec.setXYZ(normals[i], normals[i + 1], normals[i + 2]);\r\n matrix.transformVectorAffine(tmpVec, tmpVec);\r\n tmpVec.inplaceNormalize();\r\n normals[i] = tmpVec.x;\r\n normals[i + 1] = tmpVec.y;\r\n normals[i + 2] = tmpVec.z;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Shape","Primitive","_defaultOptions","needNormal","needTangent","needUV","transform","_options","options","_create","computeTangent","v0","v1","v2","uv0","uv1","uv2","normal","dp1","Vector3","dp2","du1","dv1","du2","dv2","denom","Math","abs","r","t0","x","t1","y","t2","z","b0","b1","b2","dotNT","lenT","hypot","c0","c1","c2","w","normalizeOptions","defaultOptions","Object","assign","vertices","indices","normals","tangents","uvs","bbox","BoundingBox","beginExtend","primitiveType","generateData","s","removeVertexBuffer","setIndexBuffer","createAndSetVertexBuffer","Float32Array","createAndSetIndexBuffer","Uint16Array","setBoundingVolume","indexCount","length","_transform","matrix","offset","tmpVec","i","setXYZ","transformPointAffine","transformVectorAffine","inplaceNormalize"],"mappings":"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"}
|
package/dist/shapes/sphere.js
CHANGED
|
@@ -48,8 +48,8 @@ import { Shape } from './shape.js';
|
|
|
48
48
|
* @param normals - vertex normals
|
|
49
49
|
* @param uvs - vertex uvs
|
|
50
50
|
* @param indices - vertex indices
|
|
51
|
-
*/ static generateData(
|
|
52
|
-
options = Object.assign({}, this._defaultOptions,
|
|
51
|
+
*/ static generateData(opt, vertices, normals, tangents, uvs, indices, bbox, indexOffset, vertexCallback) {
|
|
52
|
+
const options = Object.assign({}, this._defaultOptions, opt ?? {});
|
|
53
53
|
indexOffset = indexOffset ?? 0;
|
|
54
54
|
const start = vertices.length;
|
|
55
55
|
const stripIndices = [];
|