super-three 0.184.0 → 0.185.0
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 +1260 -927
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +156 -98
- 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 +7538 -3367
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7538 -3366
- 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 +53 -15
- 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 +106 -76
- 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 -71
- 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 +90 -37
- package/src/nodes/lighting/PointShadowNode.js +6 -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 +19 -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 +41 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +281 -108
- 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 +12 -5
- 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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
|
|
2
|
+
import { normalLocal } from './Normal.js';
|
|
3
|
+
import { positionLocal } from './Position.js';
|
|
4
|
+
import { vec3, mat3, mat4, int, ivec2, float, Fn } from '../tsl/TSLBase.js';
|
|
5
|
+
import { textureLoad } from './TextureNode.js';
|
|
6
|
+
import { textureSize } from './TextureSizeNode.js';
|
|
7
|
+
import { tangentLocal } from './Tangent.js';
|
|
8
|
+
import { instanceIndex, drawIndex } from '../core/IndexNode.js';
|
|
9
|
+
import { varyingProperty } from '../core/PropertyNode.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* TSL function that retrieves the batching color for a given instance ID from a colors texture.
|
|
13
|
+
*
|
|
14
|
+
* @param {Node<texture>} colorsTexture - The colors texture.
|
|
15
|
+
* @param {Node<int>} id - The instance or batch ID.
|
|
16
|
+
* @returns {Node<vec4>} The retrieved color.
|
|
17
|
+
*/
|
|
18
|
+
const getBatchingColor = /*@__PURE__*/ Fn( ( [ colorsTexture, id ] ) => {
|
|
19
|
+
|
|
20
|
+
const size = int( textureSize( textureLoad( colorsTexture ), 0 ).x ).toConst();
|
|
21
|
+
const j = int( id );
|
|
22
|
+
const x = j.mod( size ).toConst();
|
|
23
|
+
const y = j.div( size ).toConst();
|
|
24
|
+
return textureLoad( colorsTexture, ivec2( x, y ) );
|
|
25
|
+
|
|
26
|
+
} );
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* TSL function that retrieves the indirect index for a given batch ID.
|
|
30
|
+
*
|
|
31
|
+
* @param {BatchedMesh} batchMesh - The batched mesh.
|
|
32
|
+
* @param {Node<int>} id - The draw or instance ID.
|
|
33
|
+
* @returns {Node<uint>} The indirect index.
|
|
34
|
+
*/
|
|
35
|
+
const getIndirectIndex = /*@__PURE__*/ Fn( ( [ indirectTexture, id ] ) => {
|
|
36
|
+
|
|
37
|
+
const size = int( textureSize( textureLoad( indirectTexture ), 0 ).x ).toConst();
|
|
38
|
+
const x = int( id ).mod( size ).toConst();
|
|
39
|
+
const y = int( id ).div( size ).toConst();
|
|
40
|
+
return textureLoad( indirectTexture, ivec2( x, y ) ).x;
|
|
41
|
+
|
|
42
|
+
} );
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* TSL object representing a varying property for the batching color vector.
|
|
46
|
+
*
|
|
47
|
+
* @type {VaryingNode<vec4>}
|
|
48
|
+
*/
|
|
49
|
+
export const batchColor = /*@__PURE__*/ varyingProperty( 'vec4', 'vBatchColor' );
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* TSL function representing the vertex shader batching setup.
|
|
53
|
+
* Applies the batch transformation matrix to positionLocal, normalLocal, and tangentLocal.
|
|
54
|
+
* Also assigns the batch color if a color texture is present.
|
|
55
|
+
*
|
|
56
|
+
* @tsl
|
|
57
|
+
* @function
|
|
58
|
+
* @param {BatchedMesh} batchMesh - The batched mesh.
|
|
59
|
+
*/
|
|
60
|
+
export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
|
|
61
|
+
|
|
62
|
+
const batchingIdNode = builder.getDrawIndex() === null ? instanceIndex : drawIndex;
|
|
63
|
+
|
|
64
|
+
const indirectId = getIndirectIndex( batchMesh._indirectTexture, int( batchingIdNode ) );
|
|
65
|
+
|
|
66
|
+
const matricesTexture = batchMesh._matricesTexture;
|
|
67
|
+
|
|
68
|
+
const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();
|
|
69
|
+
const j = float( indirectId ).mul( 4 ).toInt().toConst();
|
|
70
|
+
|
|
71
|
+
const x = j.mod( size ).toConst();
|
|
72
|
+
const y = j.div( size ).toConst();
|
|
73
|
+
const batchingMatrix = mat4(
|
|
74
|
+
textureLoad( matricesTexture, ivec2( x, y ) ),
|
|
75
|
+
textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
|
|
76
|
+
textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
|
|
77
|
+
textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const colorsTexture = batchMesh._colorsTexture;
|
|
81
|
+
|
|
82
|
+
if ( colorsTexture !== null ) {
|
|
83
|
+
|
|
84
|
+
const color = getBatchingColor( colorsTexture, indirectId );
|
|
85
|
+
|
|
86
|
+
batchColor.assign( color );
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const bm = mat3( batchingMatrix );
|
|
91
|
+
|
|
92
|
+
positionLocal.assign( batchingMatrix.mul( positionLocal ) );
|
|
93
|
+
|
|
94
|
+
const transformedNormal = normalLocal.div( vec3( bm[ 0 ].dot( bm[ 0 ] ), bm[ 1 ].dot( bm[ 1 ] ), bm[ 2 ].dot( bm[ 2 ] ) ) );
|
|
95
|
+
|
|
96
|
+
const batchingNormal = bm.mul( transformedNormal ).xyz;
|
|
97
|
+
|
|
98
|
+
normalLocal.assign( batchingNormal );
|
|
99
|
+
|
|
100
|
+
if ( builder.hasGeometryAttribute( 'tangent' ) ) {
|
|
101
|
+
|
|
102
|
+
tangentLocal.mulAssign( bm );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}, 'void' );
|
|
107
|
+
|
|
108
|
+
|
|
@@ -2,7 +2,7 @@ import { Fn } from '../tsl/TSLCore.js';
|
|
|
2
2
|
import { normalGeometry, normalLocal, normalView, normalWorld } from './Normal.js';
|
|
3
3
|
import { tangentGeometry, tangentLocal, tangentView, tangentWorld } from './Tangent.js';
|
|
4
4
|
import { bitangentViewFrame } from './TangentUtils.js';
|
|
5
|
-
import {
|
|
5
|
+
import { negateOnBackSide } from '../display/FrontFacingNode.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Returns the bitangent node and assigns it to a varying if the material is not flat shaded.
|
|
@@ -65,7 +65,7 @@ export const bitangentView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
65
65
|
|
|
66
66
|
if ( builder.isFlatShading() !== true ) {
|
|
67
67
|
|
|
68
|
-
node =
|
|
68
|
+
node = negateOnBackSide( node );
|
|
69
69
|
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -265,8 +265,11 @@ class BufferAttributeNode extends InputNode {
|
|
|
265
265
|
generate( builder ) {
|
|
266
266
|
|
|
267
267
|
const nodeType = this.getNodeType( builder );
|
|
268
|
+
const nodeName = builder.context.nodeName;
|
|
268
269
|
|
|
269
|
-
|
|
270
|
+
if ( nodeName !== undefined ) delete builder.context.nodeName; // deleting when consumed
|
|
271
|
+
|
|
272
|
+
const nodeAttribute = builder.getBufferAttributeFromNode( this, nodeType, nodeName );
|
|
270
273
|
const propertyName = builder.getPropertyName( nodeAttribute );
|
|
271
274
|
|
|
272
275
|
let output = null;
|
|
@@ -279,7 +282,15 @@ class BufferAttributeNode extends InputNode {
|
|
|
279
282
|
|
|
280
283
|
} else {
|
|
281
284
|
|
|
282
|
-
|
|
285
|
+
let varyingName;
|
|
286
|
+
|
|
287
|
+
if ( nodeName ) {
|
|
288
|
+
|
|
289
|
+
varyingName = nodeName + 'Varying';
|
|
290
|
+
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const nodeVarying = varying( this, varyingName );
|
|
283
294
|
|
|
284
295
|
output = nodeVarying.build( builder, nodeType );
|
|
285
296
|
|
|
@@ -83,7 +83,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
83
83
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
cameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
86
|
+
cameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
87
87
|
|
|
88
88
|
} else {
|
|
89
89
|
|
|
@@ -131,7 +131,7 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
|
|
|
131
131
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
134
|
+
cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
135
135
|
|
|
136
136
|
} else {
|
|
137
137
|
|
|
@@ -179,7 +179,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
179
179
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
cameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
182
|
+
cameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
183
183
|
|
|
184
184
|
} else {
|
|
185
185
|
|
|
@@ -227,7 +227,7 @@ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
227
227
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
cameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
230
|
+
cameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
231
231
|
|
|
232
232
|
} else {
|
|
233
233
|
|
|
@@ -275,7 +275,7 @@ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
275
275
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
|
-
cameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
278
|
+
cameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
279
279
|
|
|
280
280
|
} else {
|
|
281
281
|
|
|
@@ -334,7 +334,7 @@ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
334
334
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
-
cameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex )
|
|
337
|
+
cameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
|
|
338
338
|
|
|
339
339
|
} else {
|
|
340
340
|
|
|
@@ -383,7 +383,7 @@ export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
383
383
|
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
-
cameraViewport = _cameraViewportArray.element( cameraIndex )
|
|
386
|
+
cameraViewport = _cameraViewportArray.element( cameraIndex );
|
|
387
387
|
|
|
388
388
|
} else {
|
|
389
389
|
|
|
@@ -57,7 +57,7 @@ class ClippingNode extends Node {
|
|
|
57
57
|
const clippingContext = builder.clippingContext;
|
|
58
58
|
const { intersectionPlanes, unionPlanes } = clippingContext;
|
|
59
59
|
|
|
60
|
-
this.hardwareClipping = builder.
|
|
60
|
+
this.hardwareClipping = builder.hardwareClipping;
|
|
61
61
|
|
|
62
62
|
if ( this.scope === ClippingNode.ALPHA_TO_COVERAGE ) {
|
|
63
63
|
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
|
|
2
|
+
import { vec3, mat4, Fn } from '../tsl/TSLBase.js';
|
|
3
|
+
import { OnFrameUpdate, OnObjectUpdate } from '../utils/EventNode.js';
|
|
4
|
+
import { normalLocal, transformNormal } from './Normal.js';
|
|
5
|
+
import { positionLocal, positionPrevious } from './Position.js';
|
|
6
|
+
import { varyingProperty } from '../core/PropertyNode.js';
|
|
7
|
+
import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
|
|
8
|
+
import { buffer } from './BufferNode.js';
|
|
9
|
+
import { storage } from './StorageBufferNode.js';
|
|
10
|
+
import { instanceIndex } from '../core/IndexNode.js';
|
|
11
|
+
|
|
12
|
+
import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffer.js';
|
|
13
|
+
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
14
|
+
import { DynamicDrawUsage } from '../../constants.js';
|
|
15
|
+
|
|
16
|
+
const _matrixBuffers = /*@__PURE__*/ new WeakMap();
|
|
17
|
+
const _colorBuffers = /*@__PURE__*/ new WeakMap();
|
|
18
|
+
const _previousInstanceMatrices = /*@__PURE__*/ new WeakMap();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Creates the appropriate node for instanced matrix transformations.
|
|
22
|
+
* Depending on buffer limits and storage capability, returns either a storage, buffer, or instanced interleaved attribute node.
|
|
23
|
+
*
|
|
24
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
25
|
+
* @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - The matrix buffer attribute.
|
|
26
|
+
* @returns {Node} The matrix node.
|
|
27
|
+
*/
|
|
28
|
+
function createInstanceMatrixNode( builder, instanceMatrix ) {
|
|
29
|
+
|
|
30
|
+
let instanceMatrixNode;
|
|
31
|
+
const matrixCount = Math.max( instanceMatrix.count, 1 );
|
|
32
|
+
|
|
33
|
+
const isStorageMatrix = instanceMatrix.isStorageInstancedBufferAttribute === true;
|
|
34
|
+
|
|
35
|
+
if ( isStorageMatrix ) {
|
|
36
|
+
|
|
37
|
+
instanceMatrixNode = storage( instanceMatrix, 'mat4', matrixCount ).element( instanceIndex );
|
|
38
|
+
|
|
39
|
+
} else {
|
|
40
|
+
|
|
41
|
+
const uniformBufferSize = matrixCount * 16 * 4;
|
|
42
|
+
|
|
43
|
+
if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
|
|
44
|
+
|
|
45
|
+
instanceMatrixNode = buffer( instanceMatrix.array, 'mat4', matrixCount ).element( instanceIndex );
|
|
46
|
+
|
|
47
|
+
} else {
|
|
48
|
+
|
|
49
|
+
let interleaved = _matrixBuffers.get( instanceMatrix );
|
|
50
|
+
|
|
51
|
+
if ( ! interleaved ) {
|
|
52
|
+
|
|
53
|
+
interleaved = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );
|
|
54
|
+
_matrixBuffers.set( instanceMatrix, interleaved );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
|
|
59
|
+
|
|
60
|
+
const instanceBuffers = [
|
|
61
|
+
bufferFn( interleaved, 'vec4', 16, 0 ),
|
|
62
|
+
bufferFn( interleaved, 'vec4', 16, 4 ),
|
|
63
|
+
bufferFn( interleaved, 'vec4', 16, 8 ),
|
|
64
|
+
bufferFn( interleaved, 'vec4', 16, 12 )
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
instanceMatrixNode = mat4( ...instanceBuffers );
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return instanceMatrixNode;
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Retrieves or initializes the previous frame instance matrix node for motion vectors.
|
|
79
|
+
* Uses a WeakMap to cache previous frame instance matrices and their TSL nodes.
|
|
80
|
+
*
|
|
81
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh object.
|
|
82
|
+
* @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - The current matrix buffer attribute.
|
|
83
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
84
|
+
* @returns {Node} The previous frame instance matrix node.
|
|
85
|
+
*/
|
|
86
|
+
function getPreviousInstance( instancedMesh, instanceMatrix, builder ) {
|
|
87
|
+
|
|
88
|
+
let data = _previousInstanceMatrices.get( instancedMesh );
|
|
89
|
+
|
|
90
|
+
if ( data === undefined ) {
|
|
91
|
+
|
|
92
|
+
const previousInstanceMatrix = instanceMatrix.clone();
|
|
93
|
+
|
|
94
|
+
data = {
|
|
95
|
+
previousInstanceMatrix,
|
|
96
|
+
node: createInstanceMatrixNode( builder, previousInstanceMatrix )
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
_previousInstanceMatrices.set( instancedMesh, data );
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return data.node;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* TSL object representing a varying property for the instanced color vector.
|
|
109
|
+
*
|
|
110
|
+
* @type {VaryingNode<vec3>}
|
|
111
|
+
*/
|
|
112
|
+
export const instanceColor = /*@__PURE__*/ varyingProperty( 'vec3', 'vInstanceColor' );
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* TSL function representing the standard instancing vertex shader setup.
|
|
116
|
+
* Transforms positionLocal and normalLocal, and assigns varying color in-place.
|
|
117
|
+
*
|
|
118
|
+
* @tsl
|
|
119
|
+
* @function
|
|
120
|
+
* @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} matrices - The instanced transformation matrices.
|
|
121
|
+
* @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} [colors=null] - The optional instanced colors.
|
|
122
|
+
*/
|
|
123
|
+
export const instance = /*@__PURE__*/ Fn( ( [ matrices, colors = null ], builder ) => {
|
|
124
|
+
|
|
125
|
+
const isStorageMatrix = matrices.isStorageInstancedBufferAttribute === true;
|
|
126
|
+
const isStorageColor = colors && colors.isStorageInstancedBufferAttribute === true;
|
|
127
|
+
|
|
128
|
+
const instanceMatrixNode = createInstanceMatrixNode( builder, matrices );
|
|
129
|
+
|
|
130
|
+
// interleaved buffer tracking for matrix
|
|
131
|
+
let interleavedMatrix = null;
|
|
132
|
+
|
|
133
|
+
if ( ! isStorageMatrix ) {
|
|
134
|
+
|
|
135
|
+
const uniformBufferSize = Math.max( matrices.count, 1 ) * 16 * 4;
|
|
136
|
+
|
|
137
|
+
if ( uniformBufferSize > builder.getUniformBufferLimit() ) {
|
|
138
|
+
|
|
139
|
+
interleavedMatrix = _matrixBuffers.get( matrices );
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
let instanceColorNode = null;
|
|
146
|
+
let interleavedColor = null;
|
|
147
|
+
|
|
148
|
+
if ( colors ) {
|
|
149
|
+
|
|
150
|
+
if ( isStorageColor ) {
|
|
151
|
+
|
|
152
|
+
instanceColorNode = storage( colors, 'vec3', Math.max( colors.count, 1 ) ).element( instanceIndex );
|
|
153
|
+
|
|
154
|
+
} else {
|
|
155
|
+
|
|
156
|
+
let bufferAttribute = _colorBuffers.get( colors );
|
|
157
|
+
|
|
158
|
+
if ( ! bufferAttribute ) {
|
|
159
|
+
|
|
160
|
+
bufferAttribute = new InstancedBufferAttribute( colors.array, 3 );
|
|
161
|
+
_colorBuffers.set( colors, bufferAttribute );
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
interleavedColor = bufferAttribute;
|
|
166
|
+
|
|
167
|
+
const bufferFn = colors.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
|
|
168
|
+
|
|
169
|
+
instanceColorNode = vec3( bufferFn( bufferAttribute, 'vec3', 3, 0 ) );
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Synchronization of dynamic buffer updates per frame
|
|
176
|
+
if ( interleavedMatrix !== null || interleavedColor !== null ) {
|
|
177
|
+
|
|
178
|
+
OnFrameUpdate( () => {
|
|
179
|
+
|
|
180
|
+
if ( interleavedMatrix !== null ) {
|
|
181
|
+
|
|
182
|
+
interleavedMatrix.clearUpdateRanges();
|
|
183
|
+
interleavedMatrix.updateRanges.push( ...matrices.updateRanges );
|
|
184
|
+
|
|
185
|
+
if ( matrices.version !== interleavedMatrix.version ) {
|
|
186
|
+
|
|
187
|
+
interleavedMatrix.version = matrices.version;
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if ( colors && interleavedColor !== null ) {
|
|
194
|
+
|
|
195
|
+
interleavedColor.clearUpdateRanges();
|
|
196
|
+
interleavedColor.updateRanges.push( ...colors.updateRanges );
|
|
197
|
+
|
|
198
|
+
if ( colors.version !== interleavedColor.version ) {
|
|
199
|
+
|
|
200
|
+
interleavedColor.version = colors.version;
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
} );
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// POSITION
|
|
211
|
+
|
|
212
|
+
const instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;
|
|
213
|
+
positionLocal.assign( instancePosition );
|
|
214
|
+
|
|
215
|
+
if ( builder.needsPreviousData() ) {
|
|
216
|
+
|
|
217
|
+
const instancedMesh = builder.object;
|
|
218
|
+
|
|
219
|
+
OnObjectUpdate( ( { object } ) => {
|
|
220
|
+
|
|
221
|
+
const previousInstanceData = _previousInstanceMatrices.get( object );
|
|
222
|
+
|
|
223
|
+
previousInstanceData.previousInstanceMatrix.array.set( matrices.array );
|
|
224
|
+
|
|
225
|
+
} );
|
|
226
|
+
|
|
227
|
+
const previousInstanceMatrixNode = getPreviousInstance( instancedMesh, matrices, builder );
|
|
228
|
+
positionPrevious.assign( previousInstanceMatrixNode.mul( positionPrevious ).xyz );
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// NORMAL
|
|
233
|
+
|
|
234
|
+
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
235
|
+
|
|
236
|
+
const instanceNormal = transformNormal( normalLocal, instanceMatrixNode );
|
|
237
|
+
normalLocal.assign( instanceNormal );
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// COLOR
|
|
242
|
+
|
|
243
|
+
if ( instanceColorNode !== null ) {
|
|
244
|
+
|
|
245
|
+
instanceColor.assign( instanceColorNode );
|
|
246
|
+
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
}, 'void' );
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* TSL wrapper for applying instanced mesh rendering setup.
|
|
253
|
+
*
|
|
254
|
+
* @tsl
|
|
255
|
+
* @function
|
|
256
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh.
|
|
257
|
+
*/
|
|
258
|
+
export const instancedMesh = /*@__PURE__*/ Fn( ( [ instancedMesh ] ) => {
|
|
259
|
+
|
|
260
|
+
const { instanceMatrix, instanceColor } = instancedMesh;
|
|
261
|
+
|
|
262
|
+
instance( instanceMatrix, instanceColor );
|
|
263
|
+
|
|
264
|
+
}, 'void' );
|
|
@@ -388,11 +388,27 @@ class MaterialNode extends Node {
|
|
|
388
388
|
|
|
389
389
|
} else if ( scope === MaterialNode.LIGHT_MAP ) {
|
|
390
390
|
|
|
391
|
-
|
|
391
|
+
if ( material.lightMap ) {
|
|
392
|
+
|
|
393
|
+
node = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );
|
|
394
|
+
|
|
395
|
+
} else {
|
|
396
|
+
|
|
397
|
+
node = vec3( 0.0 );
|
|
398
|
+
|
|
399
|
+
}
|
|
392
400
|
|
|
393
401
|
} else if ( scope === MaterialNode.AO ) {
|
|
394
402
|
|
|
395
|
-
|
|
403
|
+
if ( material.aoMap ) {
|
|
404
|
+
|
|
405
|
+
node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
|
|
406
|
+
|
|
407
|
+
} else {
|
|
408
|
+
|
|
409
|
+
node = float( 1.0 );
|
|
410
|
+
|
|
411
|
+
}
|
|
396
412
|
|
|
397
413
|
} else if ( scope === MaterialNode.LINE_DASH_OFFSET ) {
|
|
398
414
|
|
|
@@ -26,8 +26,8 @@ export const materialEnvIntensity = /*@__PURE__*/ uniform( 1 ).onReference( ( {
|
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* TSL object that represents the rotation of environment maps.
|
|
29
|
-
* When `material.envMap` is set, the value is `material.envMapRotation`.
|
|
30
|
-
* rotation of `scene.environment` instead.
|
|
29
|
+
* When `material.envMap` is set, the value is `material.envMapRotation`.
|
|
30
|
+
* `scene.environmentRotation` controls the rotation of `scene.environment` or `scene.environmentNode` instead.
|
|
31
31
|
*
|
|
32
32
|
* @tsl
|
|
33
33
|
* @type {Node<mat4>}
|
|
@@ -38,7 +38,8 @@ export const materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onRefe
|
|
|
38
38
|
|
|
39
39
|
} ).onObjectUpdate( function ( { material, scene } ) {
|
|
40
40
|
|
|
41
|
-
const
|
|
41
|
+
const hasSceneEnvironment = ( scene.environment !== null ) || ( scene.environmentNode && scene.environmentNode.isNode );
|
|
42
|
+
const rotation = ( hasSceneEnvironment && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
|
|
42
43
|
|
|
43
44
|
if ( rotation ) {
|
|
44
45
|
|