super-three 0.181.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- 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/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- 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 +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- 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_decoder.module.js +9 -8
- 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/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- 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 +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.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/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -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 +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- 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 +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- 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_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- 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/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- 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 +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -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/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/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,21 +1,64 @@
|
|
|
1
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
1
|
+
import { nodeObject, vec3, float } from '../tsl/TSLBase.js';
|
|
2
|
+
import { dot, sqrt, saturate } from '../math/MathNode.js';
|
|
3
|
+
import { warnOnce } from '../../utils.js';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
|
-
* Packs a
|
|
6
|
+
* Packs a normal vector into a color value.
|
|
5
7
|
*
|
|
6
8
|
* @tsl
|
|
7
9
|
* @function
|
|
8
10
|
* @param {Node<vec3>} node - The direction to pack.
|
|
9
11
|
* @return {Node<vec3>} The color.
|
|
10
12
|
*/
|
|
11
|
-
export const
|
|
13
|
+
export const packNormalToRGB = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
|
-
* Unpacks a color value into a
|
|
16
|
+
* Unpacks a color value into a normal vector.
|
|
15
17
|
*
|
|
16
18
|
* @tsl
|
|
17
19
|
* @function
|
|
18
20
|
* @param {Node<vec3>} node - The color to unpack.
|
|
19
21
|
* @return {Node<vec3>} The direction.
|
|
20
22
|
*/
|
|
21
|
-
export const
|
|
23
|
+
export const unpackRGBToNormal = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Unpacks a tangent space normal, reconstructing the Z component by projecting the X,Y coordinates onto the hemisphere.
|
|
27
|
+
* The X,Y coordinates are expected to be in the [-1, 1] range.
|
|
28
|
+
*
|
|
29
|
+
* @tsl
|
|
30
|
+
* @function
|
|
31
|
+
* @param {Node<vec2>} xy - The X,Y coordinates of the normal.
|
|
32
|
+
* @return {Node<vec3>} The resulting normal.
|
|
33
|
+
*/
|
|
34
|
+
export const unpackNormal = ( xy ) => vec3( xy, sqrt( saturate( float( 1.0 ).sub( dot( xy, xy ) ) ) ) );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @tsl
|
|
38
|
+
* @function
|
|
39
|
+
* @deprecated since r185. Use {@link packNormalToRGB} instead.
|
|
40
|
+
* @param {Node<vec3>} node - The direction to pack.
|
|
41
|
+
* @returns {Node<vec3>}
|
|
42
|
+
*/
|
|
43
|
+
export const directionToColor = ( node ) => {
|
|
44
|
+
|
|
45
|
+
warnOnce( 'TSL: "directionToColor()" has been renamed to "packNormalToRGB()".' ); // @deprecated r185
|
|
46
|
+
|
|
47
|
+
return packNormalToRGB( node );
|
|
48
|
+
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @tsl
|
|
53
|
+
* @function
|
|
54
|
+
* @deprecated since r185. Use {@link unpackRGBToNormal} instead.
|
|
55
|
+
* @param {Node<vec3>} node - The color to unpack.
|
|
56
|
+
* @returns {Node<vec3>}
|
|
57
|
+
*/
|
|
58
|
+
export const colorToDirection = ( node ) => {
|
|
59
|
+
|
|
60
|
+
warnOnce( 'TSL: "colorToDirection()" has been renamed to "unpackRGBToNormal()".' ); // @deprecated r185
|
|
61
|
+
|
|
62
|
+
return unpackRGBToNormal( node );
|
|
63
|
+
|
|
64
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
|
|
1
|
+
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot, cos, sin } from '../tsl/TSLBase.js';
|
|
2
|
+
import { sqrt } from '../math/MathNode.js';
|
|
2
3
|
import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
3
4
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
5
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
@@ -120,3 +121,34 @@ export const interleavedGradientNoise = Fn( ( [ position ] ) => {
|
|
|
120
121
|
{ name: 'position', type: 'vec2' }
|
|
121
122
|
]
|
|
122
123
|
} );
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Vogel disk sampling for uniform circular distribution.
|
|
127
|
+
*
|
|
128
|
+
* This function generates sample points distributed uniformly on a disk using the golden angle,
|
|
129
|
+
* resulting in an efficient low-discrepancy sequence for sampling. The rotation parameter (phi)
|
|
130
|
+
* allows randomizing the pattern per-pixel when combined with IGN.
|
|
131
|
+
*
|
|
132
|
+
* @tsl
|
|
133
|
+
* @function
|
|
134
|
+
* @param {Node<int>} sampleIndex - The index of the current sample (0-based).
|
|
135
|
+
* @param {Node<int>} samplesCount - The total number of samples.
|
|
136
|
+
* @param {Node<float>} phi - Rotation angle in radians (typically from IGN * 2π).
|
|
137
|
+
* @return {Node<vec2>} A 2D point on the unit disk.
|
|
138
|
+
*/
|
|
139
|
+
export const vogelDiskSample = Fn( ( [ sampleIndex, samplesCount, phi ] ) => {
|
|
140
|
+
|
|
141
|
+
const goldenAngle = float( 2.399963229728653 ); // 2π * (2 - φ) where φ is golden ratio
|
|
142
|
+
const r = sqrt( float( sampleIndex ).add( 0.5 ).div( float( samplesCount ) ) );
|
|
143
|
+
const theta = float( sampleIndex ).mul( goldenAngle ).add( phi );
|
|
144
|
+
return vec2( cos( theta ), sin( theta ) ).mul( r );
|
|
145
|
+
|
|
146
|
+
} ).setLayout( {
|
|
147
|
+
name: 'vogelDiskSample',
|
|
148
|
+
type: 'vec2',
|
|
149
|
+
inputs: [
|
|
150
|
+
{ name: 'sampleIndex', type: 'int' },
|
|
151
|
+
{ name: 'samplesCount', type: 'int' },
|
|
152
|
+
{ name: 'phi', type: 'float' }
|
|
153
|
+
]
|
|
154
|
+
} );
|
|
@@ -74,14 +74,6 @@ class RTTNode extends TextureNode {
|
|
|
74
74
|
*/
|
|
75
75
|
this.height = height;
|
|
76
76
|
|
|
77
|
-
/**
|
|
78
|
-
* The pixel ratio
|
|
79
|
-
*
|
|
80
|
-
* @type {number}
|
|
81
|
-
* @default 1
|
|
82
|
-
*/
|
|
83
|
-
this.pixelRatio = 1;
|
|
84
|
-
|
|
85
77
|
/**
|
|
86
78
|
* The render target
|
|
87
79
|
*
|
|
@@ -105,6 +97,15 @@ class RTTNode extends TextureNode {
|
|
|
105
97
|
*/
|
|
106
98
|
this.autoUpdate = true;
|
|
107
99
|
|
|
100
|
+
/**
|
|
101
|
+
* The resolution scale
|
|
102
|
+
*
|
|
103
|
+
* @private
|
|
104
|
+
* @type {number}
|
|
105
|
+
* @default 1
|
|
106
|
+
*/
|
|
107
|
+
this._resolutionScale = 1;
|
|
108
|
+
|
|
108
109
|
/**
|
|
109
110
|
* The node which is used with the quad mesh for RTT.
|
|
110
111
|
*
|
|
@@ -164,11 +165,8 @@ class RTTNode extends TextureNode {
|
|
|
164
165
|
*/
|
|
165
166
|
setSize( width, height ) {
|
|
166
167
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const effectiveWidth = width * this.pixelRatio;
|
|
171
|
-
const effectiveHeight = height * this.pixelRatio;
|
|
168
|
+
const effectiveWidth = Math.floor( width * this._resolutionScale );
|
|
169
|
+
const effectiveHeight = Math.floor( height * this._resolutionScale );
|
|
172
170
|
|
|
173
171
|
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
174
172
|
|
|
@@ -177,15 +175,34 @@ class RTTNode extends TextureNode {
|
|
|
177
175
|
}
|
|
178
176
|
|
|
179
177
|
/**
|
|
180
|
-
* Sets the
|
|
178
|
+
* Sets the resolution scale.
|
|
179
|
+
* The resolution scale is a factor that is multiplied with the renderer's width and height.
|
|
181
180
|
*
|
|
182
|
-
* @param {number}
|
|
181
|
+
* @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
|
|
182
|
+
* @returns {RTTNode} A reference to this node.
|
|
183
183
|
*/
|
|
184
|
-
|
|
184
|
+
setResolutionScale( resolutionScale ) {
|
|
185
185
|
|
|
186
|
-
this.
|
|
186
|
+
this._resolutionScale = resolutionScale;
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
if ( this.autoResize === false ) {
|
|
189
|
+
|
|
190
|
+
this.setSize( this.width, this.height );
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return this;
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Gets the resolution scale.
|
|
200
|
+
*
|
|
201
|
+
* @returns {number} The resolution scale.
|
|
202
|
+
*/
|
|
203
|
+
getResolutionScale() {
|
|
204
|
+
|
|
205
|
+
return this._resolutionScale;
|
|
189
206
|
|
|
190
207
|
}
|
|
191
208
|
|
|
@@ -197,13 +214,14 @@ class RTTNode extends TextureNode {
|
|
|
197
214
|
|
|
198
215
|
//
|
|
199
216
|
|
|
217
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
218
|
+
|
|
200
219
|
if ( this.autoResize === true ) {
|
|
201
220
|
|
|
202
|
-
const
|
|
203
|
-
const size = renderer.getSize( _size );
|
|
221
|
+
const size = renderer.getDrawingBufferSize( _size );
|
|
204
222
|
|
|
205
|
-
const effectiveWidth = Math.floor( size.width *
|
|
206
|
-
const effectiveHeight = Math.floor( size.height *
|
|
223
|
+
const effectiveWidth = Math.floor( size.width * this._resolutionScale );
|
|
224
|
+
const effectiveHeight = Math.floor( size.height * this._resolutionScale );
|
|
207
225
|
|
|
208
226
|
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
209
227
|
|
|
@@ -231,8 +249,6 @@ class RTTNode extends TextureNode {
|
|
|
231
249
|
|
|
232
250
|
//
|
|
233
251
|
|
|
234
|
-
const currentRenderTarget = renderer.getRenderTarget();
|
|
235
|
-
|
|
236
252
|
renderer.setRenderTarget( this.renderTarget );
|
|
237
253
|
|
|
238
254
|
this._quadMesh.render( renderer );
|
|
@@ -266,7 +282,7 @@ export default RTTNode;
|
|
|
266
282
|
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
267
283
|
* @returns {RTTNode}
|
|
268
284
|
*/
|
|
269
|
-
export const rtt = ( node, ...params ) =>
|
|
285
|
+
export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
|
|
270
286
|
|
|
271
287
|
/**
|
|
272
288
|
* TSL function for converting nodes to textures nodes.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import TextureNode from '../accessors/TextureNode.js';
|
|
3
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
4
3
|
import { NodeUpdateType } from '../core/constants.js';
|
|
5
4
|
import { screenUV } from '../display/ScreenNode.js';
|
|
6
5
|
|
|
@@ -134,10 +133,10 @@ class ReflectorNode extends TextureNode {
|
|
|
134
133
|
|
|
135
134
|
}
|
|
136
135
|
|
|
137
|
-
this._depthNode =
|
|
136
|
+
this._depthNode = new ReflectorNode( {
|
|
138
137
|
defaultTexture: _defaultRT.depthTexture,
|
|
139
138
|
reflector: this._reflectorBaseNode
|
|
140
|
-
} )
|
|
139
|
+
} );
|
|
141
140
|
|
|
142
141
|
}
|
|
143
142
|
|
|
@@ -164,6 +163,7 @@ class ReflectorNode extends TextureNode {
|
|
|
164
163
|
newNode.depthNode = this.depthNode;
|
|
165
164
|
newNode.compareNode = this.compareNode;
|
|
166
165
|
newNode.gradNode = this.gradNode;
|
|
166
|
+
newNode.gatherNode = this.gatherNode;
|
|
167
167
|
newNode.offsetNode = this.offsetNode;
|
|
168
168
|
newNode._reflectorBaseNode = this._reflectorBaseNode;
|
|
169
169
|
|
|
@@ -625,6 +625,6 @@ class ReflectorBaseNode extends Node {
|
|
|
625
625
|
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
626
626
|
* @returns {ReflectorNode}
|
|
627
627
|
*/
|
|
628
|
-
export const reflector = ( parameters ) =>
|
|
628
|
+
export const reflector = ( parameters ) => new ReflectorNode( parameters );
|
|
629
629
|
|
|
630
630
|
export default ReflectorNode;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { float, addMethodChaining, Fn, bool, defined } from '../tsl/TSLCore.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
5
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
6
|
+
* `remap` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
7
|
+
*
|
|
8
|
+
* @tsl
|
|
9
|
+
* @function
|
|
10
|
+
* @param {Node} node - The node that should be remapped.
|
|
11
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
12
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
13
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
14
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
15
|
+
* @returns {Node}
|
|
16
|
+
*/
|
|
17
|
+
export const remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {
|
|
18
|
+
|
|
19
|
+
let t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );
|
|
20
|
+
|
|
21
|
+
if ( defined( doClamp ) ) t = t.clamp();
|
|
22
|
+
|
|
23
|
+
return t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of
|
|
29
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
30
|
+
* `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @function
|
|
34
|
+
* @param {Node} node - The node that should be remapped.
|
|
35
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
36
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
37
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
38
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
39
|
+
* @returns {Node}
|
|
40
|
+
*/
|
|
41
|
+
export function remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
42
|
+
|
|
43
|
+
return remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
addMethodChaining( 'remap', remap );
|
|
48
|
+
addMethodChaining( 'remapClamp', remapClamp );
|
|
@@ -49,7 +49,7 @@ class RotateNode extends TempNode {
|
|
|
49
49
|
* @param {NodeBuilder} builder - The current node builder.
|
|
50
50
|
* @return {string} The node's type.
|
|
51
51
|
*/
|
|
52
|
-
|
|
52
|
+
generateNodeType( builder ) {
|
|
53
53
|
|
|
54
54
|
return this.positionNode.getNodeType( builder );
|
|
55
55
|
|
|
@@ -88,4 +88,4 @@ export default SampleNode;
|
|
|
88
88
|
* @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
|
|
89
89
|
* @returns {SampleNode} The created SampleNode instance wrapped as a node object.
|
|
90
90
|
*/
|
|
91
|
-
export const sample = ( callback, uv = null ) =>
|
|
91
|
+
export const sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );
|
|
@@ -94,7 +94,7 @@ class SplitNode extends Node {
|
|
|
94
94
|
* @param {NodeBuilder} builder - The current node builder.
|
|
95
95
|
* @return {string} The node type.
|
|
96
96
|
*/
|
|
97
|
-
|
|
97
|
+
generateNodeType( builder ) {
|
|
98
98
|
|
|
99
99
|
return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
|
|
100
100
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { uv } from '../accessors/UV.js';
|
|
2
|
+
import { Fn, float, vec2 } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TSL function for computing texture coordinates for animated sprite sheets.
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
|
|
9
|
+
*
|
|
10
|
+
* material.colorNode = texture( spriteSheet, uvNode );
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @tsl
|
|
14
|
+
* @function
|
|
15
|
+
* @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
16
|
+
* @param {?Node<vec2>} [uvNode=uv()] - The uv node.
|
|
17
|
+
* @param {?Node<float>} [frameNode=float(0)] - The node that defines the current frame/sprite.
|
|
18
|
+
* @returns {Node<vec2>}
|
|
19
|
+
*/
|
|
20
|
+
export const spritesheetUV = /*@__PURE__*/ Fn( ( [ countNode, uvNode = uv(), frameNode = float( 0 ) ] ) => {
|
|
21
|
+
|
|
22
|
+
const width = countNode.x;
|
|
23
|
+
const height = countNode.y;
|
|
24
|
+
|
|
25
|
+
const frameNum = frameNode.mod( width.mul( height ) ).floor();
|
|
26
|
+
|
|
27
|
+
const column = frameNum.mod( width );
|
|
28
|
+
const row = height.sub( frameNum.add( 1 ).div( width ).ceil() );
|
|
29
|
+
|
|
30
|
+
const scale = countNode.reciprocal();
|
|
31
|
+
const uvFrameOffset = vec2( column, row );
|
|
32
|
+
|
|
33
|
+
return uvNode.add( uvFrameOffset ).mul( scale );
|
|
34
|
+
|
|
35
|
+
} );
|
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { rotate } from './RotateNode.js';
|
|
3
|
+
import { context } from '../core/ContextNode.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Replaces the default UV coordinates used in texture lookups.
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
*material.contextNode = replaceDefaultUV( ( textureNode ) => {
|
|
10
|
+
*
|
|
11
|
+
* // ...
|
|
12
|
+
* return customUVCoordinates;
|
|
13
|
+
*
|
|
14
|
+
*} );
|
|
15
|
+
*```
|
|
16
|
+
*
|
|
17
|
+
* @tsl
|
|
18
|
+
* @function
|
|
19
|
+
* @param {function(Node):Node<vec2>|Node<vec2>} callback - A callback that receives the texture node
|
|
20
|
+
* and must return the new uv coordinates.
|
|
21
|
+
* @param {Node} [node=null] - An optional node to which the context will be applied.
|
|
22
|
+
* @return {ContextNode} A context node that replaces the default UV coordinates.
|
|
23
|
+
*/
|
|
24
|
+
export function replaceDefaultUV( callback, node = null ) {
|
|
25
|
+
|
|
26
|
+
const getUV = typeof callback === 'function' ? callback : () => callback;
|
|
27
|
+
|
|
28
|
+
return context( node, { getUV } );
|
|
29
|
+
|
|
30
|
+
}
|
|
3
31
|
|
|
4
32
|
/**
|
|
5
33
|
* Rotates the given uv coordinates around a center point
|
|
@@ -272,7 +272,6 @@ class BatchedMesh extends Mesh {
|
|
|
272
272
|
this._multiDrawCounts = new Int32Array( maxInstanceCount );
|
|
273
273
|
this._multiDrawStarts = new Int32Array( maxInstanceCount );
|
|
274
274
|
this._multiDrawCount = 0;
|
|
275
|
-
this._multiDrawInstances = null;
|
|
276
275
|
|
|
277
276
|
// Local matrix per geometry by using data texture
|
|
278
277
|
this._matricesTexture = null;
|
|
@@ -871,10 +870,9 @@ class BatchedMesh extends Mesh {
|
|
|
871
870
|
}
|
|
872
871
|
|
|
873
872
|
/**
|
|
874
|
-
* Repacks the sub geometries in
|
|
873
|
+
* Repacks the sub geometries in BatchedMesh to remove any unused space remaining from
|
|
875
874
|
* previously deleted geometry, freeing up space to add new geometry.
|
|
876
875
|
*
|
|
877
|
-
* @param {number} instanceId - The ID of the instance to remove from the batch.
|
|
878
876
|
* @return {BatchedMesh} A reference to this batched mesh.
|
|
879
877
|
*/
|
|
880
878
|
optimize() {
|
|
@@ -926,6 +924,7 @@ class BatchedMesh extends Mesh {
|
|
|
926
924
|
|
|
927
925
|
index.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );
|
|
928
926
|
index.addUpdateRange( nextIndexStart, reservedIndexCount );
|
|
927
|
+
index.needsUpdate = true;
|
|
929
928
|
|
|
930
929
|
geometryInfo.indexStart = nextIndexStart;
|
|
931
930
|
|
|
@@ -946,6 +945,7 @@ class BatchedMesh extends Mesh {
|
|
|
946
945
|
const { array, itemSize } = attribute;
|
|
947
946
|
array.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );
|
|
948
947
|
attribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );
|
|
948
|
+
attribute.needsUpdate = true;
|
|
949
949
|
|
|
950
950
|
}
|
|
951
951
|
|
|
@@ -956,12 +956,12 @@ class BatchedMesh extends Mesh {
|
|
|
956
956
|
nextVertexStart += geometryInfo.reservedVertexCount;
|
|
957
957
|
geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;
|
|
958
958
|
|
|
959
|
-
// step the next geometry points to the shifted position
|
|
960
|
-
this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;
|
|
961
|
-
this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
|
|
962
|
-
|
|
963
959
|
}
|
|
964
960
|
|
|
961
|
+
this._nextIndexStart = nextIndexStart;
|
|
962
|
+
this._nextVertexStart = nextVertexStart;
|
|
963
|
+
this._visibilityChanged = true;
|
|
964
|
+
|
|
965
965
|
return this;
|
|
966
966
|
|
|
967
967
|
}
|
|
@@ -1102,7 +1102,7 @@ class BatchedMesh extends Mesh {
|
|
|
1102
1102
|
* Sets the given color to the defined instance.
|
|
1103
1103
|
*
|
|
1104
1104
|
* @param {number} instanceId - The ID of an instance to set the color of.
|
|
1105
|
-
* @param {Color} color - The color to set the instance to.
|
|
1105
|
+
* @param {Color|Vector4} color - The color to set the instance to. Use a `Vector4` to also define alpha.
|
|
1106
1106
|
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1107
1107
|
*/
|
|
1108
1108
|
setColorAt( instanceId, color ) {
|
|
@@ -1126,13 +1126,29 @@ class BatchedMesh extends Mesh {
|
|
|
1126
1126
|
* Returns the color of the defined instance.
|
|
1127
1127
|
*
|
|
1128
1128
|
* @param {number} instanceId - The ID of an instance to get the color of.
|
|
1129
|
-
* @param {Color} color - The target object that is used to store the method's result.
|
|
1130
|
-
* @return {Color} The instance's color.
|
|
1129
|
+
* @param {Color|Vector4} color - The target object that is used to store the method's result.
|
|
1130
|
+
* @return {Color|Vector4} The instance's color. Use a `Vector4` to also retrieve alpha.
|
|
1131
1131
|
*/
|
|
1132
1132
|
getColorAt( instanceId, color ) {
|
|
1133
1133
|
|
|
1134
1134
|
this.validateInstanceId( instanceId );
|
|
1135
|
-
|
|
1135
|
+
if ( this._colorsTexture === null ) {
|
|
1136
|
+
|
|
1137
|
+
if ( color.isVector4 ) {
|
|
1138
|
+
|
|
1139
|
+
return color.set( 1, 1, 1, 1 );
|
|
1140
|
+
|
|
1141
|
+
} else {
|
|
1142
|
+
|
|
1143
|
+
return color.setRGB( 1, 1, 1 );
|
|
1144
|
+
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
} else {
|
|
1148
|
+
|
|
1149
|
+
return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
|
|
1150
|
+
|
|
1151
|
+
}
|
|
1136
1152
|
|
|
1137
1153
|
}
|
|
1138
1154
|
|
|
@@ -1261,7 +1277,7 @@ class BatchedMesh extends Mesh {
|
|
|
1261
1277
|
// throw an error if it can't be shrunk to the desired size
|
|
1262
1278
|
if ( maxInstanceCount < instanceInfo.length ) {
|
|
1263
1279
|
|
|
1264
|
-
throw new Error( `BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );
|
|
1280
|
+
throw new Error( `THREE.BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );
|
|
1265
1281
|
|
|
1266
1282
|
}
|
|
1267
1283
|
|
|
@@ -1313,7 +1329,7 @@ class BatchedMesh extends Mesh {
|
|
|
1313
1329
|
const requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );
|
|
1314
1330
|
if ( requiredVertexLength > maxVertexCount ) {
|
|
1315
1331
|
|
|
1316
|
-
throw new Error( `BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
|
|
1332
|
+
throw new Error( `THREE.BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
|
|
1317
1333
|
|
|
1318
1334
|
}
|
|
1319
1335
|
|
|
@@ -1323,7 +1339,7 @@ class BatchedMesh extends Mesh {
|
|
|
1323
1339
|
const requiredIndexLength = Math.max( ...validRanges.map( range => range.indexStart + range.reservedIndexCount ) );
|
|
1324
1340
|
if ( requiredIndexLength > maxIndexCount ) {
|
|
1325
1341
|
|
|
1326
|
-
throw new Error( `BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
|
|
1342
|
+
throw new Error( `THREE.BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
|
|
1327
1343
|
|
|
1328
1344
|
}
|
|
1329
1345
|
|
|
@@ -1512,7 +1528,19 @@ class BatchedMesh extends Mesh {
|
|
|
1512
1528
|
// the indexed version of the multi draw function requires specifying the start
|
|
1513
1529
|
// offset in bytes.
|
|
1514
1530
|
const index = geometry.getIndex();
|
|
1515
|
-
|
|
1531
|
+
let bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
|
|
1532
|
+
|
|
1533
|
+
|
|
1534
|
+
// the "wireframe" attribute implicitly creates a line attribute in the renderer, which is double
|
|
1535
|
+
// the vertices to draw (3 lines per triangle) so we multiply the draw counts / starts and make
|
|
1536
|
+
// assumptions about the index buffer byte size.
|
|
1537
|
+
let multiDrawMultiplier = 1;
|
|
1538
|
+
if ( material.wireframe ) {
|
|
1539
|
+
|
|
1540
|
+
multiDrawMultiplier = 2;
|
|
1541
|
+
bytesPerElement = geometry.attributes.position.count > 65535 ? 4 : 2;
|
|
1542
|
+
|
|
1543
|
+
}
|
|
1516
1544
|
|
|
1517
1545
|
const instanceInfo = this._instanceInfo;
|
|
1518
1546
|
const multiDrawStarts = this._multiDrawStarts;
|
|
@@ -1524,17 +1552,25 @@ class BatchedMesh extends Mesh {
|
|
|
1524
1552
|
|
|
1525
1553
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1526
1554
|
// prepare the frustum in the local frame
|
|
1527
|
-
if ( perObjectFrustumCulled
|
|
1555
|
+
if ( perObjectFrustumCulled ) {
|
|
1556
|
+
|
|
1557
|
+
if ( camera.isArrayCamera ) {
|
|
1528
1558
|
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1559
|
+
frustum.setFromArrayCamera( camera );
|
|
1560
|
+
|
|
1561
|
+
} else {
|
|
1532
1562
|
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1563
|
+
_matrix
|
|
1564
|
+
.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
|
|
1565
|
+
.multiply( this.matrixWorld );
|
|
1566
|
+
|
|
1567
|
+
frustum.setFromProjectionMatrix(
|
|
1568
|
+
_matrix,
|
|
1569
|
+
camera.coordinateSystem,
|
|
1570
|
+
camera.reversedDepth
|
|
1571
|
+
);
|
|
1572
|
+
|
|
1573
|
+
}
|
|
1538
1574
|
|
|
1539
1575
|
}
|
|
1540
1576
|
|
|
@@ -1560,7 +1596,7 @@ class BatchedMesh extends Mesh {
|
|
|
1560
1596
|
let culled = false;
|
|
1561
1597
|
if ( perObjectFrustumCulled ) {
|
|
1562
1598
|
|
|
1563
|
-
culled = ! frustum.intersectsSphere( _sphere
|
|
1599
|
+
culled = ! frustum.intersectsSphere( _sphere );
|
|
1564
1600
|
|
|
1565
1601
|
}
|
|
1566
1602
|
|
|
@@ -1593,8 +1629,8 @@ class BatchedMesh extends Mesh {
|
|
|
1593
1629
|
for ( let i = 0, l = list.length; i < l; i ++ ) {
|
|
1594
1630
|
|
|
1595
1631
|
const item = list[ i ];
|
|
1596
|
-
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
|
|
1597
|
-
multiDrawCounts[ multiDrawCount ] = item.count;
|
|
1632
|
+
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
|
|
1633
|
+
multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
|
|
1598
1634
|
indirectArray[ multiDrawCount ] = item.index;
|
|
1599
1635
|
multiDrawCount ++;
|
|
1600
1636
|
|
|
@@ -1617,15 +1653,15 @@ class BatchedMesh extends Mesh {
|
|
|
1617
1653
|
// get the bounds in world space
|
|
1618
1654
|
this.getMatrixAt( i, _matrix );
|
|
1619
1655
|
this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
|
|
1620
|
-
culled = ! frustum.intersectsSphere( _sphere
|
|
1656
|
+
culled = ! frustum.intersectsSphere( _sphere );
|
|
1621
1657
|
|
|
1622
1658
|
}
|
|
1623
1659
|
|
|
1624
1660
|
if ( ! culled ) {
|
|
1625
1661
|
|
|
1626
1662
|
const geometryInfo = geometryInfoList[ geometryId ];
|
|
1627
|
-
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
|
|
1628
|
-
multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
|
|
1663
|
+
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
|
|
1664
|
+
multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
|
|
1629
1665
|
indirectArray[ multiDrawCount ] = i;
|
|
1630
1666
|
multiDrawCount ++;
|
|
1631
1667
|
|