super-three 0.179.0 → 0.184.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 +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- 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 +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- 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/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- 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 +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- 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 +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- 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 +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- 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 +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- 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/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- 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 +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- 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/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- 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 +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- 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 +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.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 +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -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 +221 -190
- 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 +1 -1
- 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 +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- 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 +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- 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 +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- 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 +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- 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/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- 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/src/nodes/accessors/SceneNode.js +0 -144
- 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 -30
- 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
|
@@ -202,8 +202,8 @@ class RTTNode extends TextureNode {
|
|
|
202
202
|
const pixelRatio = renderer.getPixelRatio();
|
|
203
203
|
const size = renderer.getSize( _size );
|
|
204
204
|
|
|
205
|
-
const effectiveWidth = size.width * pixelRatio;
|
|
206
|
-
const effectiveHeight = size.height * pixelRatio;
|
|
205
|
+
const effectiveWidth = Math.floor( size.width * pixelRatio );
|
|
206
|
+
const effectiveHeight = Math.floor( size.height * pixelRatio );
|
|
207
207
|
|
|
208
208
|
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
209
209
|
|
|
@@ -217,7 +217,17 @@ class RTTNode extends TextureNode {
|
|
|
217
217
|
|
|
218
218
|
//
|
|
219
219
|
|
|
220
|
+
let name = 'RTT';
|
|
221
|
+
|
|
222
|
+
if ( this.node.name ) {
|
|
223
|
+
|
|
224
|
+
name = this.node.name + ' [ ' + name + ' ]';
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
220
229
|
this._quadMesh.material.fragmentNode = this._rttNode;
|
|
230
|
+
this._quadMesh.name = name;
|
|
221
231
|
|
|
222
232
|
//
|
|
223
233
|
|
|
@@ -256,7 +266,7 @@ export default RTTNode;
|
|
|
256
266
|
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
257
267
|
* @returns {RTTNode}
|
|
258
268
|
*/
|
|
259
|
-
export const rtt = ( node, ...params ) =>
|
|
269
|
+
export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
|
|
260
270
|
|
|
261
271
|
/**
|
|
262
272
|
* TSL function for converting nodes to textures nodes.
|
|
@@ -271,7 +281,7 @@ export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( n
|
|
|
271
281
|
*/
|
|
272
282
|
export const convertToTexture = ( node, ...params ) => {
|
|
273
283
|
|
|
274
|
-
if ( node.isTextureNode ) return node;
|
|
284
|
+
if ( node.isSampleNode || node.isTextureNode ) return node;
|
|
275
285
|
if ( node.isPassNode ) return node.getTextureNode();
|
|
276
286
|
|
|
277
287
|
return rtt( node, ...params );
|
|
@@ -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
|
|
|
@@ -13,6 +12,7 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
13
12
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
14
13
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
15
14
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
15
|
+
import { warnOnce } from '../../utils.js';
|
|
16
16
|
|
|
17
17
|
const _reflectorPlane = new Plane();
|
|
18
18
|
const _normal = new Vector3();
|
|
@@ -61,10 +61,11 @@ class ReflectorNode extends TextureNode {
|
|
|
61
61
|
*
|
|
62
62
|
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
63
63
|
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
64
|
-
* @param {number} [parameters.
|
|
64
|
+
* @param {number} [parameters.resolutionScale=1] - The resolution scale.
|
|
65
65
|
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
66
66
|
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
67
67
|
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
68
|
+
* @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
|
|
68
69
|
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
69
70
|
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
70
71
|
*/
|
|
@@ -132,10 +133,10 @@ class ReflectorNode extends TextureNode {
|
|
|
132
133
|
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
this._depthNode =
|
|
136
|
+
this._depthNode = new ReflectorNode( {
|
|
136
137
|
defaultTexture: _defaultRT.depthTexture,
|
|
137
138
|
reflector: this._reflectorBaseNode
|
|
138
|
-
} )
|
|
139
|
+
} );
|
|
139
140
|
|
|
140
141
|
}
|
|
141
142
|
|
|
@@ -162,6 +163,7 @@ class ReflectorNode extends TextureNode {
|
|
|
162
163
|
newNode.depthNode = this.depthNode;
|
|
163
164
|
newNode.compareNode = this.compareNode;
|
|
164
165
|
newNode.gradNode = this.gradNode;
|
|
166
|
+
newNode.offsetNode = this.offsetNode;
|
|
165
167
|
newNode._reflectorBaseNode = this._reflectorBaseNode;
|
|
166
168
|
|
|
167
169
|
return newNode;
|
|
@@ -204,10 +206,11 @@ class ReflectorBaseNode extends Node {
|
|
|
204
206
|
* @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
|
|
205
207
|
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
206
208
|
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
207
|
-
* @param {number} [parameters.
|
|
209
|
+
* @param {number} [parameters.resolutionScale=1] - The resolution scale.
|
|
208
210
|
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
209
211
|
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
210
212
|
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
213
|
+
* @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
|
|
211
214
|
*/
|
|
212
215
|
constructor( textureNode, parameters = {} ) {
|
|
213
216
|
|
|
@@ -215,10 +218,11 @@ class ReflectorBaseNode extends Node {
|
|
|
215
218
|
|
|
216
219
|
const {
|
|
217
220
|
target = new Object3D(),
|
|
218
|
-
|
|
221
|
+
resolutionScale = 1,
|
|
219
222
|
generateMipmaps = false,
|
|
220
223
|
bounces = true,
|
|
221
|
-
depth = false
|
|
224
|
+
depth = false,
|
|
225
|
+
samples = 0
|
|
222
226
|
} = parameters;
|
|
223
227
|
|
|
224
228
|
/**
|
|
@@ -242,7 +246,15 @@ class ReflectorBaseNode extends Node {
|
|
|
242
246
|
* @type {number}
|
|
243
247
|
* @default {1}
|
|
244
248
|
*/
|
|
245
|
-
this.
|
|
249
|
+
this.resolutionScale = resolutionScale;
|
|
250
|
+
|
|
251
|
+
if ( parameters.resolution !== undefined ) {
|
|
252
|
+
|
|
253
|
+
warnOnce( 'ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
254
|
+
|
|
255
|
+
this.resolutionScale = parameters.resolution;
|
|
256
|
+
|
|
257
|
+
}
|
|
246
258
|
|
|
247
259
|
/**
|
|
248
260
|
* Whether mipmaps should be generated or not.
|
|
@@ -268,6 +280,14 @@ class ReflectorBaseNode extends Node {
|
|
|
268
280
|
*/
|
|
269
281
|
this.depth = depth;
|
|
270
282
|
|
|
283
|
+
/**
|
|
284
|
+
* The number of anti-aliasing samples for the render-target
|
|
285
|
+
*
|
|
286
|
+
* @type {number}
|
|
287
|
+
* @default {0}
|
|
288
|
+
*/
|
|
289
|
+
this.samples = samples;
|
|
290
|
+
|
|
271
291
|
/**
|
|
272
292
|
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
|
|
273
293
|
* is `true`. Otherwise it's `NodeUpdateType.FRAME`.
|
|
@@ -321,7 +341,7 @@ class ReflectorBaseNode extends Node {
|
|
|
321
341
|
*/
|
|
322
342
|
_updateResolution( renderTarget, renderer ) {
|
|
323
343
|
|
|
324
|
-
const resolution = this.
|
|
344
|
+
const resolution = this.resolutionScale;
|
|
325
345
|
|
|
326
346
|
renderer.getDrawingBufferSize( _size );
|
|
327
347
|
|
|
@@ -388,7 +408,7 @@ class ReflectorBaseNode extends Node {
|
|
|
388
408
|
|
|
389
409
|
if ( renderTarget === undefined ) {
|
|
390
410
|
|
|
391
|
-
renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType } );
|
|
411
|
+
renderTarget = new RenderTarget( 0, 0, { type: HalfFloatType, samples: this.samples } );
|
|
392
412
|
|
|
393
413
|
if ( this.generateMipmaps === true ) {
|
|
394
414
|
|
|
@@ -531,6 +551,10 @@ class ReflectorBaseNode extends Node {
|
|
|
531
551
|
renderer.setRenderTarget( renderTarget );
|
|
532
552
|
renderer.autoClear = true;
|
|
533
553
|
|
|
554
|
+
const previousName = scene.name;
|
|
555
|
+
|
|
556
|
+
scene.name = ( scene.name || 'Scene' ) + ' [ Reflector ]'; // TODO: Add bounce index
|
|
557
|
+
|
|
534
558
|
if ( needsClear ) {
|
|
535
559
|
|
|
536
560
|
renderer.clear();
|
|
@@ -545,6 +569,8 @@ class ReflectorBaseNode extends Node {
|
|
|
545
569
|
|
|
546
570
|
}
|
|
547
571
|
|
|
572
|
+
scene.name = previousName;
|
|
573
|
+
|
|
548
574
|
renderer.setMRT( currentMRT );
|
|
549
575
|
renderer.setRenderTarget( currentRenderTarget );
|
|
550
576
|
renderer.autoClear = currentAutoClear;
|
|
@@ -557,6 +583,29 @@ class ReflectorBaseNode extends Node {
|
|
|
557
583
|
|
|
558
584
|
}
|
|
559
585
|
|
|
586
|
+
/**
|
|
587
|
+
* The resolution scale.
|
|
588
|
+
*
|
|
589
|
+
* @deprecated
|
|
590
|
+
* @type {number}
|
|
591
|
+
* @default {1}
|
|
592
|
+
*/
|
|
593
|
+
get resolution() {
|
|
594
|
+
|
|
595
|
+
warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
596
|
+
|
|
597
|
+
return this.resolutionScale;
|
|
598
|
+
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
set resolution( value ) {
|
|
602
|
+
|
|
603
|
+
warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
|
|
604
|
+
|
|
605
|
+
this.resolutionScale = value;
|
|
606
|
+
|
|
607
|
+
}
|
|
608
|
+
|
|
560
609
|
}
|
|
561
610
|
|
|
562
611
|
/**
|
|
@@ -570,10 +619,11 @@ class ReflectorBaseNode extends Node {
|
|
|
570
619
|
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
571
620
|
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
572
621
|
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
622
|
+
* @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.
|
|
573
623
|
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
574
624
|
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
575
625
|
* @returns {ReflectorNode}
|
|
576
626
|
*/
|
|
577
|
-
export const reflector = ( parameters ) =>
|
|
627
|
+
export const reflector = ( parameters ) => new ReflectorNode( parameters );
|
|
578
628
|
|
|
579
629
|
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
|
|
|
@@ -26,13 +26,22 @@ class SampleNode extends Node {
|
|
|
26
26
|
* Creates an instance of SampleNode.
|
|
27
27
|
*
|
|
28
28
|
* @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
|
|
29
|
+
* @param {?Node<vec2>} [uvNode=null] - The UV node to be used in the texture sampling.
|
|
29
30
|
*/
|
|
30
|
-
constructor( callback ) {
|
|
31
|
+
constructor( callback, uvNode = null ) {
|
|
31
32
|
|
|
32
33
|
super();
|
|
33
34
|
|
|
34
35
|
this.callback = callback;
|
|
35
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Represents the texture coordinates.
|
|
39
|
+
*
|
|
40
|
+
* @type {?Node<vec2|vec3>}
|
|
41
|
+
* @default null
|
|
42
|
+
*/
|
|
43
|
+
this.uvNode = uvNode;
|
|
44
|
+
|
|
36
45
|
/**
|
|
37
46
|
* This flag can be used for type testing.
|
|
38
47
|
*
|
|
@@ -76,6 +85,7 @@ export default SampleNode;
|
|
|
76
85
|
*
|
|
77
86
|
* @function
|
|
78
87
|
* @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
|
|
88
|
+
* @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
|
|
79
89
|
* @returns {SampleNode} The created SampleNode instance wrapped as a node object.
|
|
80
90
|
*/
|
|
81
|
-
export const sample = ( callback ) =>
|
|
91
|
+
export const sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );
|
|
@@ -94,12 +94,23 @@ 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
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Returns the scope of the node.
|
|
105
|
+
*
|
|
106
|
+
* @return {Node} The scope of the node.
|
|
107
|
+
*/
|
|
108
|
+
getScope() {
|
|
109
|
+
|
|
110
|
+
return this.node.getScope();
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
103
114
|
generate( builder, output ) {
|
|
104
115
|
|
|
105
116
|
const node = this.node;
|
|
@@ -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
|
+
} );
|
package/src/nodes/utils/Timer.js
CHANGED
|
@@ -24,50 +24,3 @@ export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRe
|
|
|
24
24
|
* @type {UniformNode<uint>}
|
|
25
25
|
*/
|
|
26
26
|
export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
|
|
27
|
-
|
|
28
|
-
// Deprecated
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @tsl
|
|
32
|
-
* @function
|
|
33
|
-
* @deprecated since r170. Use {@link time} instead.
|
|
34
|
-
*
|
|
35
|
-
* @param {number} [timeScale=1] - The time scale.
|
|
36
|
-
* @returns {UniformNode<float>}
|
|
37
|
-
*/
|
|
38
|
-
export const timerLocal = ( timeScale = 1 ) => { // @deprecated, r170
|
|
39
|
-
|
|
40
|
-
console.warn( 'TSL: timerLocal() is deprecated. Use "time" instead.' );
|
|
41
|
-
return time.mul( timeScale );
|
|
42
|
-
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* @tsl
|
|
47
|
-
* @function
|
|
48
|
-
* @deprecated since r170. Use {@link time} instead.
|
|
49
|
-
*
|
|
50
|
-
* @param {number} [timeScale=1] - The time scale.
|
|
51
|
-
* @returns {UniformNode<float>}
|
|
52
|
-
*/
|
|
53
|
-
export const timerGlobal = ( timeScale = 1 ) => { // @deprecated, r170
|
|
54
|
-
|
|
55
|
-
console.warn( 'TSL: timerGlobal() is deprecated. Use "time" instead.' );
|
|
56
|
-
return time.mul( timeScale );
|
|
57
|
-
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* @tsl
|
|
62
|
-
* @function
|
|
63
|
-
* @deprecated since r170. Use {@link deltaTime} instead.
|
|
64
|
-
*
|
|
65
|
-
* @param {number} [timeScale=1] - The time scale.
|
|
66
|
-
* @returns {UniformNode<float>}
|
|
67
|
-
*/
|
|
68
|
-
export const timerDelta = ( timeScale = 1 ) => { // @deprecated, r170
|
|
69
|
-
|
|
70
|
-
console.warn( 'TSL: timerDelta() is deprecated. Use "deltaTime" instead.' );
|
|
71
|
-
return deltaTime.mul( timeScale );
|
|
72
|
-
|
|
73
|
-
};
|
|
@@ -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
|
}
|
|
@@ -971,7 +971,7 @@ class BatchedMesh extends Mesh {
|
|
|
971
971
|
*
|
|
972
972
|
* @param {number} geometryId - The ID of the geometry to return the bounding box for.
|
|
973
973
|
* @param {Box3} target - The target object that is used to store the method's result.
|
|
974
|
-
* @return {Box3
|
|
974
|
+
* @return {?Box3} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
|
|
975
975
|
*/
|
|
976
976
|
getBoundingBoxAt( geometryId, target ) {
|
|
977
977
|
|
|
@@ -1016,7 +1016,7 @@ class BatchedMesh extends Mesh {
|
|
|
1016
1016
|
*
|
|
1017
1017
|
* @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
|
|
1018
1018
|
* @param {Sphere} target - The target object that is used to store the method's result.
|
|
1019
|
-
* @return {Sphere
|
|
1019
|
+
* @return {?Sphere} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
|
|
1020
1020
|
*/
|
|
1021
1021
|
getBoundingSphereAt( geometryId, target ) {
|
|
1022
1022
|
|
|
@@ -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
|
|
|
@@ -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;
|
|
@@ -1593,8 +1621,8 @@ class BatchedMesh extends Mesh {
|
|
|
1593
1621
|
for ( let i = 0, l = list.length; i < l; i ++ ) {
|
|
1594
1622
|
|
|
1595
1623
|
const item = list[ i ];
|
|
1596
|
-
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
|
|
1597
|
-
multiDrawCounts[ multiDrawCount ] = item.count;
|
|
1624
|
+
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
|
|
1625
|
+
multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
|
|
1598
1626
|
indirectArray[ multiDrawCount ] = item.index;
|
|
1599
1627
|
multiDrawCount ++;
|
|
1600
1628
|
|
|
@@ -1624,8 +1652,8 @@ class BatchedMesh extends Mesh {
|
|
|
1624
1652
|
if ( ! culled ) {
|
|
1625
1653
|
|
|
1626
1654
|
const geometryInfo = geometryInfoList[ geometryId ];
|
|
1627
|
-
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
|
|
1628
|
-
multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
|
|
1655
|
+
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
|
|
1656
|
+
multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
|
|
1629
1657
|
indirectArray[ multiDrawCount ] = i;
|
|
1630
1658
|
multiDrawCount ++;
|
|
1631
1659
|
|