@gnsx/three 0.184.20 → 0.185.3
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/build/three.cjs +1261 -926
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +157 -97
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +11 -4
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +7542 -3371
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7542 -3370
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +3 -0
- package/examples/jsm/controls/ArcballControls.js +6 -2
- package/examples/jsm/controls/FirstPersonControls.js +79 -42
- package/examples/jsm/controls/TransformControls.js +68 -15
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +4 -1
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/GLTFExporter.js +114 -12
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +347 -112
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/ViewHelper.js +16 -6
- package/examples/jsm/inspector/Inspector.js +67 -58
- package/examples/jsm/inspector/RendererInspector.js +152 -36
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
- package/examples/jsm/inspector/tabs/Console.js +200 -18
- package/examples/jsm/inspector/tabs/Memory.js +8 -0
- package/examples/jsm/inspector/tabs/Parameters.js +64 -4
- package/examples/jsm/inspector/tabs/Performance.js +21 -6
- package/examples/jsm/inspector/tabs/Settings.js +51 -9
- package/examples/jsm/inspector/tabs/Timeline.js +178 -93
- package/examples/jsm/inspector/tabs/Viewer.js +628 -16
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +90 -45
- package/examples/jsm/inspector/ui/Style.js +1788 -1401
- package/examples/jsm/inspector/ui/Tab.js +5 -3
- package/examples/jsm/inspector/ui/Values.js +71 -6
- package/examples/jsm/inspector/ui/utils.js +130 -10
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/LightProbeGrid.js +124 -91
- package/examples/jsm/lines/LineMaterial.js +38 -15
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +46 -13
- package/examples/jsm/loaders/EXRLoader.js +27 -55
- package/examples/jsm/loaders/HDRLoader.js +6 -28
- package/examples/jsm/loaders/KTX2Loader.js +31 -12
- package/examples/jsm/loaders/LDrawLoader.js +8 -8
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +4 -0
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PCDLoader.js +7 -7
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +547 -495
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +33 -9
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +93 -20
- package/examples/jsm/loaders/usd/USDCParser.js +1 -1
- package/examples/jsm/loaders/usd/USDComposer.js +52 -19
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/Reflector.js +2 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/physics/AmmoPhysics.js +15 -8
- package/examples/jsm/physics/RapierPhysics.js +27 -2
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +59 -19
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
- package/examples/jsm/tsl/display/FXAANode.js +11 -12
- package/examples/jsm/tsl/display/GTAONode.js +34 -13
- package/examples/jsm/tsl/display/GodraysNode.js +1 -1
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
- package/examples/jsm/tsl/display/SSGINode.js +89 -39
- package/examples/jsm/tsl/display/SSRNode.js +829 -132
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/package.json +7 -7
- package/src/Three.TSL.js +10 -3
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationAction.js +15 -11
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/KeyframeTrack.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +29 -7
- package/src/core/Object3D.js +17 -7
- package/src/core/Raycaster.js +1 -1
- package/src/core/RenderTarget.js +15 -2
- package/src/extras/PMREMGenerator.js +6 -4
- package/src/extras/TextureUtils.js +1 -1
- package/src/extras/core/ShapePath.js +149 -160
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +1 -1
- package/src/loaders/DataTextureLoader.js +69 -38
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +36 -266
- package/src/loaders/ObjectLoader.js +3 -1
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +196 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +40 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +40 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +34 -1
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +86 -0
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +378 -322
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
- package/src/materials/nodes/NodeMaterial.js +115 -74
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/MathUtils.js +2 -2
- package/src/math/Matrix3.js +11 -0
- package/src/math/Matrix4.js +28 -3
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +2 -2
- package/src/math/interpolants/BezierInterpolant.js +4 -6
- package/src/nodes/Nodes.js +2 -5
- package/src/nodes/TSL.js +8 -6
- package/src/nodes/accessors/Arrays.js +4 -4
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +2 -2
- package/src/nodes/accessors/BufferAttributeNode.js +13 -2
- package/src/nodes/accessors/Camera.js +7 -7
- package/src/nodes/accessors/ClippingNode.js +1 -1
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +18 -2
- package/src/nodes/accessors/MaterialProperties.js +4 -3
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +13 -13
- package/src/nodes/accessors/Position.js +5 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -0
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneProperties.js +1 -1
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +2 -2
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +39 -7
- package/src/nodes/accessors/Tangent.js +4 -4
- package/src/nodes/accessors/TextureNode.js +60 -5
- package/src/nodes/code/FunctionNode.js +2 -16
- package/src/nodes/core/MRTNode.js +7 -2
- package/src/nodes/core/Node.js +39 -2
- package/src/nodes/core/NodeBuilder.js +201 -41
- package/src/nodes/core/NodeUtils.js +13 -13
- package/src/nodes/core/OutputStructNode.js +1 -1
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/PropertyNode.js +51 -5
- package/src/nodes/core/StackNode.js +56 -34
- package/src/nodes/core/StructNode.js +4 -6
- package/src/nodes/core/StructTypeNode.js +6 -6
- package/src/nodes/core/VarNode.js +8 -0
- package/src/nodes/core/VaryingNode.js +12 -2
- package/src/nodes/display/BlendModes.js +1 -41
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +10 -9
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +35 -43
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +12 -3
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
- package/src/nodes/lighting/EnvironmentNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +92 -37
- package/src/nodes/lighting/PointShadowNode.js +7 -1
- package/src/nodes/lighting/ShadowFilterNode.js +21 -52
- package/src/nodes/lighting/ShadowNode.js +34 -14
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +39 -11
- package/src/nodes/math/OperatorNode.js +23 -23
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +33 -2
- package/src/nodes/tsl/TSLCore.js +63 -18
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/Packing.js +35 -4
- package/src/nodes/utils/RTTNode.js +40 -24
- package/src/nodes/utils/ReflectorNode.js +1 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/objects/BatchedMesh.js +22 -14
- package/src/objects/InstancedMesh.js +0 -11
- package/src/objects/Skeleton.js +0 -9
- package/src/renderers/WebGLRenderer.js +21 -15
- package/src/renderers/common/Backend.js +49 -5
- package/src/renderers/common/Bindings.js +114 -45
- package/src/renderers/common/Buffer.js +9 -0
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/Info.js +63 -22
- package/src/renderers/common/Lighting.js +53 -5
- package/src/renderers/common/RenderList.js +42 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +282 -109
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/Textures.js +32 -5
- package/src/renderers/common/TimestampQueryPool.js +1 -1
- package/src/renderers/common/UniformsGroup.js +31 -9
- package/src/renderers/common/XRManager.js +340 -22
- package/src/renderers/common/extras/PMREMGenerator.js +15 -38
- package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/NodeManager.js +63 -14
- package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
- package/src/renderers/webgl/WebGLOutput.js +2 -1
- package/src/renderers/webgl/WebGLProgram.js +5 -4
- package/src/renderers/webgl/WebGLPrograms.js +11 -4
- package/src/renderers/webgl/WebGLRenderLists.js +9 -1
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLTextures.js +20 -7
- package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
- package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
- package/src/renderers/webgpu/WebGPUBackend.js +480 -169
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/inspector/extensions/extensions.json +0 -6
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -349
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SkinningNode.js +0 -328
|
@@ -117,12 +117,37 @@ export let wasm;
|
|
|
117
117
|
|
|
118
118
|
export let isReady = false;
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
120
|
+
let readyPromise = null;
|
|
121
|
+
|
|
122
|
+
function initialize() {
|
|
123
|
+
|
|
124
|
+
return fetch( wasmDataURI )
|
|
125
|
+
.then( ( res ) => res.arrayBuffer() )
|
|
126
|
+
.then( ( buffer ) => WebAssembly.instantiate( buffer, {
|
|
127
|
+
'./mikktspace_module_bg.js': { __wbindgen_string_new, __wbindgen_rethrow }
|
|
128
|
+
} ) )
|
|
129
|
+
.then( ( result ) => {
|
|
130
|
+
|
|
131
|
+
wasm = result.instance.exports;
|
|
132
|
+
isReady = true;
|
|
133
|
+
|
|
134
|
+
} );
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export const ready = {
|
|
139
|
+
then: function ( onFulfilled, onRejected ) {
|
|
140
|
+
|
|
141
|
+
if ( readyPromise === null ) readyPromise = initialize();
|
|
142
|
+
return readyPromise.then( onFulfilled, onRejected );
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export function dispose() {
|
|
148
|
+
|
|
149
|
+
wasm = null;
|
|
150
|
+
isReady = false;
|
|
151
|
+
readyPromise = null;
|
|
152
|
+
|
|
153
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Lighting } from 'three/webgpu';
|
|
2
|
+
import ClusteredLightsNode from '../tsl/lighting/ClusteredLightsNode.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A custom lighting implementation based on Forward+ Clustered Shading that
|
|
6
|
+
* overwrites the default lighting system in {@link WebGPURenderer}. Suitable
|
|
7
|
+
* for 3D scenes with many point lights and real depth complexity — the view
|
|
8
|
+
* frustum is partitioned into a 3D cluster grid so only the lights actually
|
|
9
|
+
* reaching each fragment are evaluated.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const lighting = new ClusteredLighting();
|
|
13
|
+
* renderer.lighting = lighting; // set lighting system
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments Lighting
|
|
17
|
+
* @three_import import { ClusteredLighting } from 'three/addons/lighting/ClusteredLighting.js';
|
|
18
|
+
*/
|
|
19
|
+
export class ClusteredLighting extends Lighting {
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new clustered lighting system.
|
|
23
|
+
*
|
|
24
|
+
* @param {number} [maxLights=1024] - Maximum number of point lights.
|
|
25
|
+
* @param {number} [tileSize=32] - Screen tile size in pixels (cluster XY size).
|
|
26
|
+
* @param {number} [zSlices=24] - Number of exponential depth slices.
|
|
27
|
+
* @param {number} [maxLightsPerCluster=64] - Per-cluster light-list capacity.
|
|
28
|
+
*/
|
|
29
|
+
constructor( maxLights = 1024, tileSize = 32, zSlices = 24, maxLightsPerCluster = 64 ) {
|
|
30
|
+
|
|
31
|
+
super();
|
|
32
|
+
|
|
33
|
+
this.maxLights = maxLights;
|
|
34
|
+
this.tileSize = tileSize;
|
|
35
|
+
this.zSlices = zSlices;
|
|
36
|
+
this.maxLightsPerCluster = maxLightsPerCluster;
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new clustered lights node for the given array of lights.
|
|
42
|
+
*
|
|
43
|
+
* This method is called internally by the renderer and must be overwritten by
|
|
44
|
+
* all custom lighting implementations.
|
|
45
|
+
*
|
|
46
|
+
* @param {Array<Light>} lights - The lights.
|
|
47
|
+
* @return {ClusteredLightsNode} The clustered lights node.
|
|
48
|
+
*/
|
|
49
|
+
createNode( lights = [] ) {
|
|
50
|
+
|
|
51
|
+
return new ClusteredLightsNode( this.maxLights, this.tileSize, this.zSlices, this.maxLightsPerCluster ).setLights( lights );
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
}
|
|
@@ -80,8 +80,8 @@ let _batchTargetProbes = 0;
|
|
|
80
80
|
// Reusable temp objects
|
|
81
81
|
const _position = /*@__PURE__*/ new Vector3();
|
|
82
82
|
const _size = /*@__PURE__*/ new Vector3();
|
|
83
|
-
const
|
|
84
|
-
const
|
|
83
|
+
const _currentViewport = /*@__PURE__*/ new Vector4();
|
|
84
|
+
const _currentScissor = /*@__PURE__*/ new Vector4();
|
|
85
85
|
|
|
86
86
|
// Number of padding texels added at each boundary of every sub-volume in the atlas.
|
|
87
87
|
const ATLAS_PADDING = 1;
|
|
@@ -90,6 +90,9 @@ const ATLAS_PADDING = 1;
|
|
|
90
90
|
* A 3D grid of L2 Spherical Harmonic irradiance probes that provides
|
|
91
91
|
* position-dependent diffuse global illumination.
|
|
92
92
|
*
|
|
93
|
+
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
94
|
+
* A version for {@link WebGPURenderer} will be added at a later point.
|
|
95
|
+
*
|
|
93
96
|
* All seven packed SH sub-volumes are stored in a **single** RGBA
|
|
94
97
|
* `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis.
|
|
95
98
|
* Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at
|
|
@@ -99,11 +102,11 @@ const ATLAS_PADDING = 1;
|
|
|
99
102
|
* Atlas layout (nz = resolution.z, PADDING = 1):
|
|
100
103
|
* ```
|
|
101
104
|
* slice 0 : padding (copy of sub-volume 0, data slice 0)
|
|
102
|
-
* slices 1
|
|
105
|
+
* slices 1 �? nz : sub-volume 0 data
|
|
103
106
|
* slice nz + 1 : padding (copy of sub-volume 0, data slice nz-1)
|
|
104
107
|
* slice nz + 2 : padding (copy of sub-volume 1, data slice 0)
|
|
105
|
-
* slices nz+3
|
|
106
|
-
*
|
|
108
|
+
* slices nz+3 �? 2*nz+2 : sub-volume 1 data
|
|
109
|
+
* �?
|
|
107
110
|
* ```
|
|
108
111
|
* Total atlas depth = `7 * ( nz + 2 )`.
|
|
109
112
|
*
|
|
@@ -275,7 +278,10 @@ class LightProbeGrid extends Object3D {
|
|
|
275
278
|
|
|
276
279
|
/**
|
|
277
280
|
* Bakes all probes by rendering cubemaps at each probe position
|
|
278
|
-
* and projecting to L2 SH.
|
|
281
|
+
* and projecting to L2 SH. Optionally iterates additional passes to
|
|
282
|
+
* capture indirect bounces �? each extra pass samples the previous pass's
|
|
283
|
+
* atlas as indirect light, so a grid added to the scene before baking
|
|
284
|
+
* accumulates one bounce per extra pass.
|
|
279
285
|
*
|
|
280
286
|
* @param {WebGLRenderer} renderer - The renderer.
|
|
281
287
|
* @param {Scene} scene - The scene to render.
|
|
@@ -283,6 +289,7 @@ class LightProbeGrid extends Object3D {
|
|
|
283
289
|
* @param {number} [options.cubemapSize=8] - Resolution of each cubemap face.
|
|
284
290
|
* @param {number} [options.near=0.1] - Near plane for the cube camera.
|
|
285
291
|
* @param {number} [options.far=100] - Far plane for the cube camera.
|
|
292
|
+
* @param {number} [options.bounces=0] - Additional bounce passes after the initial direct pass.
|
|
286
293
|
* @param {boolean} [options.retainCubemaps=false] - Whether to retain the captured cube maps for visualization.
|
|
287
294
|
* @return {Promise<void>} Resolves when baking has completed.
|
|
288
295
|
*/
|
|
@@ -303,40 +310,66 @@ class LightProbeGrid extends Object3D {
|
|
|
303
310
|
|
|
304
311
|
} else { // !WITH_GENESYS
|
|
305
312
|
|
|
306
|
-
|
|
313
|
+
const { bounces = 0 } = options;
|
|
314
|
+
const { cubeRenderTarget, cubeCamera } = _ensureBakeResources( options );
|
|
315
|
+
|
|
316
|
+
this._ensureTextures();
|
|
317
|
+
this.updateBoundingBox();
|
|
318
|
+
|
|
319
|
+
const res = this.resolution;
|
|
320
|
+
const totalProbes = res.x * res.y * res.z;
|
|
321
|
+
|
|
322
|
+
// Batch render target for SH coefficients: 9 pixels wide, one row per probe
|
|
323
|
+
const batchTarget = _ensureBatchTarget( totalProbes );
|
|
324
|
+
|
|
325
|
+
// Save renderer state
|
|
326
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
327
|
+
renderer.getViewport( _currentViewport );
|
|
328
|
+
renderer.getScissor( _currentScissor );
|
|
329
|
+
const currentScissorTest = renderer.getScissorTest();
|
|
307
330
|
|
|
308
|
-
|
|
309
|
-
|
|
331
|
+
// Scene is static across the bake �? update once and disable per-render auto updates.
|
|
332
|
+
const currentMatrixWorldAutoUpdate = scene.matrixWorldAutoUpdate;
|
|
333
|
+
if ( currentMatrixWorldAutoUpdate === true ) {
|
|
310
334
|
|
|
311
|
-
|
|
312
|
-
|
|
335
|
+
scene.updateMatrixWorld( true );
|
|
336
|
+
scene.matrixWorldAutoUpdate = false;
|
|
313
337
|
|
|
314
|
-
|
|
315
|
-
const batchTarget = _ensureBatchTarget( totalProbes );
|
|
338
|
+
}
|
|
316
339
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
340
|
+
// Disable shadow map auto-update across all passes �? lights don't move.
|
|
341
|
+
// Force a single shadow update on the first render so maps are initialized.
|
|
342
|
+
const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
|
|
343
|
+
renderer.shadowMap.autoUpdate = false;
|
|
344
|
+
renderer.shadowMap.needsUpdate = true;
|
|
322
345
|
|
|
323
|
-
|
|
324
|
-
batchTarget.scissorTest = false;
|
|
325
|
-
batchTarget.viewport.set( 0, 0, 9, totalProbes );
|
|
326
|
-
renderer.setRenderTarget( batchTarget );
|
|
327
|
-
renderer.clear();
|
|
346
|
+
_ensureRepackResources();
|
|
328
347
|
|
|
329
|
-
|
|
348
|
+
const paddedSlices = res.z + 2 * ATLAS_PADDING;
|
|
349
|
+
const rt = this._renderTarget;
|
|
330
350
|
|
|
331
|
-
|
|
332
|
-
// Note: set viewport/scissor on the render target directly to avoid pixel ratio scaling
|
|
333
|
-
batchTarget.scissorTest = true;
|
|
351
|
+
// const t0 = performance.now();
|
|
334
352
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
353
|
+
// Pass 0 captures direct light only (grid hidden, so probesSH is not sampled
|
|
354
|
+
// �? the atlas at this point may be uninitialized or hold a prior bake).
|
|
355
|
+
// Each subsequent pass keeps the grid visible so the cube cameras read the
|
|
356
|
+
// previous pass's atlas as indirect light, accumulating one bounce per pass.
|
|
357
|
+
// Phase 1 writes to the batch target and Phase 2 only swaps it into the atlas
|
|
358
|
+
// at the very end of each pass, which gives an implicit ping-pong for free.
|
|
359
|
+
|
|
360
|
+
for ( let pass = 0; pass <= bounces; pass ++ ) {
|
|
361
|
+
|
|
362
|
+
this.visible = pass > 0;
|
|
363
|
+
|
|
364
|
+
// Clear pooled batch target so skipped probes read as zero
|
|
365
|
+
batchTarget.scissorTest = false;
|
|
366
|
+
batchTarget.viewport.set( 0, 0, 9, totalProbes );
|
|
367
|
+
renderer.setRenderTarget( batchTarget );
|
|
368
|
+
renderer.clear();
|
|
369
|
+
|
|
370
|
+
// Phase 1: Render cubemaps and project to SH into batch target
|
|
371
|
+
// Note: set viewport/scissor on the render target directly to avoid pixel ratio scaling
|
|
372
|
+
batchTarget.scissorTest = true;
|
|
340
373
|
|
|
341
374
|
// Initialize cube texture/render target arrays if retaining
|
|
342
375
|
if ( retainCubemaps ) {
|
|
@@ -358,15 +391,15 @@ class LightProbeGrid extends Object3D {
|
|
|
358
391
|
|
|
359
392
|
}
|
|
360
393
|
|
|
361
|
-
|
|
394
|
+
for ( let iz = 0; iz < res.z; iz ++ ) {
|
|
362
395
|
|
|
363
|
-
|
|
396
|
+
for ( let iy = 0; iy < res.y; iy ++ ) {
|
|
364
397
|
|
|
365
|
-
|
|
398
|
+
for ( let ix = 0; ix < res.x; ix ++ ) {
|
|
366
399
|
|
|
367
|
-
|
|
400
|
+
const probeIndex = ix + iy * res.x + iz * res.x * res.y;
|
|
368
401
|
|
|
369
|
-
|
|
402
|
+
this.getProbePosition( ix, iy, iz, _position );
|
|
370
403
|
|
|
371
404
|
let envMapTexture = cubeRenderTarget.texture;
|
|
372
405
|
|
|
@@ -387,81 +420,81 @@ class LightProbeGrid extends Object3D {
|
|
|
387
420
|
|
|
388
421
|
} else {
|
|
389
422
|
|
|
390
|
-
|
|
391
|
-
|
|
423
|
+
cubeCamera.position.copy( _position );
|
|
424
|
+
cubeCamera.update( renderer, scene );
|
|
392
425
|
|
|
393
426
|
}
|
|
394
427
|
|
|
395
|
-
|
|
428
|
+
// SH projection
|
|
396
429
|
_shMaterial.uniforms.envMap.value = envMapTexture;
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
430
|
+
_mesh.material = _shMaterial;
|
|
431
|
+
batchTarget.viewport.set( 0, probeIndex, 9, 1 );
|
|
432
|
+
batchTarget.scissor.set( 0, probeIndex, 9, 1 );
|
|
433
|
+
renderer.setRenderTarget( batchTarget );
|
|
434
|
+
renderer.render( _scene, _camera );
|
|
404
435
|
|
|
405
436
|
}
|
|
406
437
|
|
|
407
438
|
}
|
|
408
439
|
|
|
409
|
-
|
|
440
|
+
}
|
|
410
441
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
442
|
+
// Phase 2: Repack SH data from batch target into the atlas 3D texture (GPU-to-GPU).
|
|
443
|
+
//
|
|
444
|
+
// For each of the 7 packed sub-volumes (texture index t) we write:
|
|
445
|
+
// - A leading padding slice (copy of data slice iz = 0)
|
|
446
|
+
// - All nz data slices (iz = 0 �? nz-1)
|
|
447
|
+
// - A trailing padding slice (copy of data slice iz = nz-1)
|
|
448
|
+
//
|
|
449
|
+
// In the atlas the slices for sub-volume t occupy the range:
|
|
450
|
+
// [ t * paddedSlices, t * paddedSlices + paddedSlices - 1 ]
|
|
451
|
+
// where paddedSlices = nz + 2 * ATLAS_PADDING.
|
|
421
452
|
|
|
422
|
-
|
|
453
|
+
rt.scissorTest = false;
|
|
454
|
+
rt.viewport.set( 0, 0, res.x, res.y );
|
|
423
455
|
|
|
424
|
-
|
|
425
|
-
const rt = this._renderTarget;
|
|
426
|
-
rt.scissorTest = false;
|
|
427
|
-
rt.viewport.set( 0, 0, res.x, res.y );
|
|
456
|
+
for ( let t = 0; t < 7; t ++ ) {
|
|
428
457
|
|
|
429
|
-
|
|
458
|
+
_repackMaterials[ t ].uniforms.batchTexture.value = batchTarget.texture;
|
|
459
|
+
_repackMaterials[ t ].uniforms.resolution.value.copy( res );
|
|
430
460
|
|
|
431
|
-
|
|
432
|
-
|
|
461
|
+
// Write data slices
|
|
462
|
+
for ( let iz = 0; iz < res.z; iz ++ ) {
|
|
433
463
|
|
|
434
|
-
|
|
435
|
-
|
|
464
|
+
_repackMaterials[ t ].uniforms.sliceZ.value = iz;
|
|
465
|
+
_mesh.material = _repackMaterials[ t ];
|
|
466
|
+
renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + iz );
|
|
467
|
+
renderer.render( _scene, _camera );
|
|
436
468
|
|
|
437
|
-
|
|
438
|
-
_mesh.material = _repackMaterials[ t ];
|
|
439
|
-
renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + iz );
|
|
440
|
-
renderer.render( _scene, _camera );
|
|
469
|
+
}
|
|
441
470
|
|
|
442
|
-
|
|
471
|
+
// Leading padding: copy of data slice iz = 0
|
|
472
|
+
_repackMaterials[ t ].uniforms.sliceZ.value = 0;
|
|
473
|
+
_mesh.material = _repackMaterials[ t ];
|
|
474
|
+
renderer.setRenderTarget( rt, t * paddedSlices );
|
|
475
|
+
renderer.render( _scene, _camera );
|
|
443
476
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
477
|
+
// Trailing padding: copy of data slice iz = nz - 1
|
|
478
|
+
_repackMaterials[ t ].uniforms.sliceZ.value = res.z - 1;
|
|
479
|
+
_mesh.material = _repackMaterials[ t ];
|
|
480
|
+
renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + res.z );
|
|
481
|
+
renderer.render( _scene, _camera );
|
|
449
482
|
|
|
450
|
-
|
|
451
|
-
_repackMaterials[ t ].uniforms.sliceZ.value = res.z - 1;
|
|
452
|
-
_mesh.material = _repackMaterials[ t ];
|
|
453
|
-
renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + res.z );
|
|
454
|
-
renderer.render( _scene, _camera );
|
|
483
|
+
}
|
|
455
484
|
|
|
456
|
-
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
488
|
+
|
|
489
|
+
// Restore renderer state
|
|
490
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
491
|
+
renderer.setViewport( _currentViewport );
|
|
492
|
+
renderer.setScissor( _currentScissor );
|
|
493
|
+
renderer.setScissorTest( currentScissorTest );
|
|
457
494
|
|
|
458
|
-
|
|
459
|
-
renderer.setRenderTarget( savedRenderTarget );
|
|
460
|
-
renderer.setViewport( _savedViewport );
|
|
461
|
-
renderer.setScissor( _savedScissor );
|
|
462
|
-
renderer.setScissorTest( savedScissorTest );
|
|
495
|
+
scene.matrixWorldAutoUpdate = currentMatrixWorldAutoUpdate;
|
|
463
496
|
|
|
464
|
-
|
|
497
|
+
// console.log( `LightProbeGrid: bake complete ${ ( performance.now() - t0 ).toFixed( 1 ) }ms` );
|
|
465
498
|
|
|
466
499
|
}
|
|
467
500
|
|
|
@@ -1109,7 +1142,7 @@ function _ensureWebGPUComputeResources( cubemapSize, envMapTexture, atlasTexture
|
|
|
1109
1142
|
totalWeight.addAssign( weight );
|
|
1110
1143
|
|
|
1111
1144
|
const dir = coord.normalize();
|
|
1112
|
-
// Pass explicit direction
|
|
1145
|
+
// Pass explicit direction �? omitting UV would default to reflectVector (needs camera).
|
|
1113
1146
|
const cw = cubeTexture( envMapTexture, coord ).rgb.mul( weight );
|
|
1114
1147
|
|
|
1115
1148
|
accum0.addAssign( cw.mul( 0.282095 ) );
|
|
@@ -10,7 +10,7 @@ UniformsLib.line = {
|
|
|
10
10
|
|
|
11
11
|
worldUnits: { value: 1 },
|
|
12
12
|
linewidth: { value: 1 },
|
|
13
|
-
resolution: { value: new Vector2(
|
|
13
|
+
resolution: { value: new Vector2() },
|
|
14
14
|
dashOffset: { value: 0 },
|
|
15
15
|
dashScale: { value: 1 },
|
|
16
16
|
dashSize: { value: 1 },
|
|
@@ -70,18 +70,20 @@ ShaderLib[ 'line' ] = {
|
|
|
70
70
|
|
|
71
71
|
#endif
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
float trimSegmentAlpha( const in vec4 start, const in vec4 end ) {
|
|
74
74
|
|
|
75
|
-
//
|
|
75
|
+
// compute the interpolation factor needed to trim the segment so it terminates
|
|
76
|
+
// between the camera plane and the near plane
|
|
76
77
|
|
|
77
78
|
// conservative estimate of the near plane
|
|
78
79
|
float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
|
|
79
80
|
float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
|
|
80
|
-
float nearEstimate = - 0.5 * b / a;
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
// we need different nearEstimate formula for reversed and default depth buffer
|
|
83
|
+
// a is positive with a reversed depth buffer so it can be used for controlling the code flow
|
|
84
|
+
float nearEstimate = ( a > 0.0 ) ? ( - b / ( a + 1.0 ) ) : ( - 0.5 * b / a );
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
return ( nearEstimate - start.z ) / ( end.z - start.z );
|
|
85
87
|
|
|
86
88
|
}
|
|
87
89
|
|
|
@@ -93,19 +95,19 @@ ShaderLib[ 'line' ] = {
|
|
|
93
95
|
|
|
94
96
|
#endif
|
|
95
97
|
|
|
96
|
-
#ifdef USE_DASH
|
|
97
|
-
|
|
98
|
-
vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
|
|
99
|
-
vUv = uv;
|
|
100
|
-
|
|
101
|
-
#endif
|
|
102
|
-
|
|
103
98
|
float aspect = resolution.x / resolution.y;
|
|
104
99
|
|
|
105
100
|
// camera space
|
|
106
101
|
vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
|
|
107
102
|
vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
|
|
108
103
|
|
|
104
|
+
#ifdef USE_DASH
|
|
105
|
+
|
|
106
|
+
float lineDistanceStart = dashScale * instanceDistanceStart;
|
|
107
|
+
float lineDistanceEnd = dashScale * instanceDistanceEnd;
|
|
108
|
+
|
|
109
|
+
#endif
|
|
110
|
+
|
|
109
111
|
#ifdef WORLD_UNITS
|
|
110
112
|
|
|
111
113
|
worldStart = start.xyz;
|
|
@@ -128,16 +130,37 @@ ShaderLib[ 'line' ] = {
|
|
|
128
130
|
|
|
129
131
|
if ( start.z < 0.0 && end.z >= 0.0 ) {
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
float alpha = trimSegmentAlpha( start, end );
|
|
134
|
+
end.xyz = mix( start.xyz, end.xyz, alpha );
|
|
135
|
+
|
|
136
|
+
#ifdef USE_DASH
|
|
137
|
+
|
|
138
|
+
lineDistanceEnd = mix( lineDistanceStart, lineDistanceEnd, alpha );
|
|
139
|
+
|
|
140
|
+
#endif
|
|
132
141
|
|
|
133
142
|
} else if ( end.z < 0.0 && start.z >= 0.0 ) {
|
|
134
143
|
|
|
135
|
-
|
|
144
|
+
float alpha = trimSegmentAlpha( end, start );
|
|
145
|
+
start.xyz = mix( end.xyz, start.xyz, alpha );
|
|
146
|
+
|
|
147
|
+
#ifdef USE_DASH
|
|
148
|
+
|
|
149
|
+
lineDistanceStart = mix( lineDistanceEnd, lineDistanceStart, alpha );
|
|
150
|
+
|
|
151
|
+
#endif
|
|
136
152
|
|
|
137
153
|
}
|
|
138
154
|
|
|
139
155
|
}
|
|
140
156
|
|
|
157
|
+
#ifdef USE_DASH
|
|
158
|
+
|
|
159
|
+
vLineDistance = ( position.y < 0.5 ) ? lineDistanceStart : lineDistanceEnd;
|
|
160
|
+
vUv = uv;
|
|
161
|
+
|
|
162
|
+
#endif
|
|
163
|
+
|
|
141
164
|
// clip space
|
|
142
165
|
vec4 clipStart = projectionMatrix * start;
|
|
143
166
|
vec4 clipEnd = projectionMatrix * end;
|
|
@@ -326,6 +326,14 @@ class LineSegments2 extends Mesh {
|
|
|
326
326
|
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
+
// early out if no resolution has been set (line was not rendered yet)
|
|
330
|
+
|
|
331
|
+
if ( worldUnits === false && ( this.material.resolution.x === 0 || this.material.resolution.y === 0 ) ) {
|
|
332
|
+
|
|
333
|
+
return;
|
|
334
|
+
|
|
335
|
+
}
|
|
336
|
+
|
|
329
337
|
const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
|
|
330
338
|
|
|
331
339
|
_ray = raycaster.ray;
|
|
@@ -324,6 +324,14 @@ class LineSegments2 extends Mesh {
|
|
|
324
324
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
|
+
// early out if no resolution has been set (line was not rendered yet)
|
|
328
|
+
|
|
329
|
+
if ( worldUnits === false && ( this._resolution.x === 0 || this._resolution.y === 0 ) ) {
|
|
330
|
+
|
|
331
|
+
return;
|
|
332
|
+
|
|
333
|
+
}
|
|
334
|
+
|
|
327
335
|
const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
|
|
328
336
|
|
|
329
337
|
_ray = raycaster.ray;
|
|
@@ -42,7 +42,7 @@ const _taskCache = new WeakMap();
|
|
|
42
42
|
*
|
|
43
43
|
* ```js
|
|
44
44
|
* const loader = new Rhino3dmLoader();
|
|
45
|
-
* loader.setLibraryPath( 'https://cdn.jsdelivr.net/npm/rhino3dm@8.0
|
|
45
|
+
* loader.setLibraryPath( 'https://cdn.jsdelivr.net/npm/rhino3dm@8.17.0/' );
|
|
46
46
|
*
|
|
47
47
|
* const object = await loader.loadAsync( 'models/3dm/Rhino_Logo.3dm' );
|
|
48
48
|
* scene.add( object );
|