super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- 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 +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- 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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- 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 +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- 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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- 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/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InspectorBase is the base class for all inspectors.
|
|
3
|
+
*
|
|
4
|
+
* @class InspectorBase
|
|
5
|
+
*/
|
|
6
|
+
class InspectorBase {
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new InspectorBase.
|
|
10
|
+
*/
|
|
11
|
+
constructor() {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The renderer associated with this inspector.
|
|
15
|
+
*
|
|
16
|
+
* @type {WebGLRenderer}
|
|
17
|
+
* @private
|
|
18
|
+
*/
|
|
19
|
+
this._renderer = null;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The current frame being processed.
|
|
23
|
+
*
|
|
24
|
+
* @type {Object}
|
|
25
|
+
*/
|
|
26
|
+
this.currentFrame = null;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns the node frame for the current renderer.
|
|
32
|
+
*
|
|
33
|
+
* @return {Object} The node frame.
|
|
34
|
+
*/
|
|
35
|
+
get nodeFrame() {
|
|
36
|
+
|
|
37
|
+
return this._renderer._nodes.nodeFrame;
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Sets the renderer for this inspector.
|
|
43
|
+
*
|
|
44
|
+
* @param {WebGLRenderer} renderer - The renderer to associate with this inspector.
|
|
45
|
+
* @return {InspectorBase} This inspector instance.
|
|
46
|
+
*/
|
|
47
|
+
setRenderer( renderer ) {
|
|
48
|
+
|
|
49
|
+
this._renderer = renderer;
|
|
50
|
+
|
|
51
|
+
return this;
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Returns the renderer associated with this inspector.
|
|
57
|
+
*
|
|
58
|
+
* @return {WebGLRenderer} The associated renderer.
|
|
59
|
+
*/
|
|
60
|
+
getRenderer() {
|
|
61
|
+
|
|
62
|
+
return this._renderer;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Initializes the inspector.
|
|
68
|
+
*/
|
|
69
|
+
init() { }
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Called when a frame begins.
|
|
73
|
+
*/
|
|
74
|
+
begin() { }
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Called when a frame ends.
|
|
78
|
+
*/
|
|
79
|
+
finish() { }
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Inspects a node.
|
|
83
|
+
*
|
|
84
|
+
* @param {Node} node - The node to inspect.
|
|
85
|
+
*/
|
|
86
|
+
inspect( /*node*/ ) { }
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* When a compute operation is performed.
|
|
90
|
+
*
|
|
91
|
+
* @param {ComputeNode} computeNode - The compute node being executed.
|
|
92
|
+
* @param {number|Array<number>} dispatchSizeOrCount - The dispatch size or count.
|
|
93
|
+
*/
|
|
94
|
+
computeAsync( /*computeNode, dispatchSizeOrCount*/ ) { }
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Called when a compute operation begins.
|
|
98
|
+
*
|
|
99
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
100
|
+
* @param {ComputeNode} computeNode - The compute node being executed.
|
|
101
|
+
*/
|
|
102
|
+
beginCompute( /*uid, computeNode*/ ) { }
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Called when a compute operation ends.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
108
|
+
* @param {ComputeNode} computeNode - The compute node being executed.
|
|
109
|
+
*/
|
|
110
|
+
finishCompute( /*uid*/ ) { }
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Called when a render operation begins.
|
|
114
|
+
*
|
|
115
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
116
|
+
* @param {Scene} scene - The scene being rendered.
|
|
117
|
+
* @param {Camera} camera - The camera being used for rendering.
|
|
118
|
+
* @param {?WebGLRenderTarget} renderTarget - The render target, if any.
|
|
119
|
+
*/
|
|
120
|
+
beginRender( /*uid, scene, camera, renderTarget*/ ) { }
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Called when an animation loop ends.
|
|
124
|
+
*
|
|
125
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
126
|
+
*/
|
|
127
|
+
finishRender( /*uid*/ ) { }
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Called when a texture copy operation is performed.
|
|
131
|
+
*
|
|
132
|
+
* @param {Texture} srcTexture - The source texture.
|
|
133
|
+
* @param {Texture} dstTexture - The destination texture.
|
|
134
|
+
*/
|
|
135
|
+
copyTextureToTexture( /*srcTexture, dstTexture*/ ) { }
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Called when a framebuffer copy operation is performed.
|
|
139
|
+
*
|
|
140
|
+
* @param {Texture} framebufferTexture - The texture associated with the framebuffer.
|
|
141
|
+
*/
|
|
142
|
+
copyFramebufferToTexture( /*framebufferTexture*/ ) { }
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export default InspectorBase;
|
|
@@ -58,7 +58,7 @@ class Pipelines extends DataMap {
|
|
|
58
58
|
* fragment and compute) the programmable stage objects which
|
|
59
59
|
* represent the actual shader code.
|
|
60
60
|
*
|
|
61
|
-
* @type {Object<string,Map
|
|
61
|
+
* @type {Object<string,Map<string, ProgrammableStage>>}
|
|
62
62
|
*/
|
|
63
63
|
this.programs = {
|
|
64
64
|
vertex: new Map(),
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
2
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
2
3
|
import { vec4, renderOutput } from '../../nodes/TSL.js';
|
|
3
|
-
import {
|
|
4
|
+
import { NoToneMapping } from '../../constants.js';
|
|
4
5
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
6
|
+
import { warnOnce } from '../../utils.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* This module is responsible to manage the post processing setups in apps.
|
|
@@ -81,6 +83,16 @@ class PostProcessing {
|
|
|
81
83
|
* @type {QuadMesh}
|
|
82
84
|
*/
|
|
83
85
|
this._quadMesh = new QuadMesh( material );
|
|
86
|
+
this._quadMesh.name = 'Post-Processing';
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The context of the post processing stack.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
* @type {?Object}
|
|
93
|
+
* @default null
|
|
94
|
+
*/
|
|
95
|
+
this._context = null;
|
|
84
96
|
|
|
85
97
|
}
|
|
86
98
|
|
|
@@ -91,15 +103,17 @@ class PostProcessing {
|
|
|
91
103
|
*/
|
|
92
104
|
render() {
|
|
93
105
|
|
|
106
|
+
const renderer = this.renderer;
|
|
107
|
+
|
|
94
108
|
this._update();
|
|
95
109
|
|
|
96
|
-
|
|
110
|
+
if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
|
|
97
111
|
|
|
98
112
|
const toneMapping = renderer.toneMapping;
|
|
99
113
|
const outputColorSpace = renderer.outputColorSpace;
|
|
100
114
|
|
|
101
115
|
renderer.toneMapping = NoToneMapping;
|
|
102
|
-
renderer.outputColorSpace =
|
|
116
|
+
renderer.outputColorSpace = ColorManagement.workingColorSpace;
|
|
103
117
|
|
|
104
118
|
//
|
|
105
119
|
|
|
@@ -115,6 +129,20 @@ class PostProcessing {
|
|
|
115
129
|
renderer.toneMapping = toneMapping;
|
|
116
130
|
renderer.outputColorSpace = outputColorSpace;
|
|
117
131
|
|
|
132
|
+
if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns the current context of the post processing stack.
|
|
138
|
+
*
|
|
139
|
+
* @readonly
|
|
140
|
+
* @type {?Object}
|
|
141
|
+
*/
|
|
142
|
+
get context() {
|
|
143
|
+
|
|
144
|
+
return this._context;
|
|
145
|
+
|
|
118
146
|
}
|
|
119
147
|
|
|
120
148
|
/**
|
|
@@ -140,7 +168,32 @@ class PostProcessing {
|
|
|
140
168
|
const toneMapping = renderer.toneMapping;
|
|
141
169
|
const outputColorSpace = renderer.outputColorSpace;
|
|
142
170
|
|
|
143
|
-
|
|
171
|
+
const context = {
|
|
172
|
+
postProcessing: this,
|
|
173
|
+
onBeforePostProcessing: null,
|
|
174
|
+
onAfterPostProcessing: null
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
let outputNode = this.outputNode;
|
|
178
|
+
|
|
179
|
+
if ( this.outputColorTransform === true ) {
|
|
180
|
+
|
|
181
|
+
outputNode = outputNode.context( context );
|
|
182
|
+
|
|
183
|
+
outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
|
|
184
|
+
|
|
185
|
+
} else {
|
|
186
|
+
|
|
187
|
+
context.toneMapping = toneMapping;
|
|
188
|
+
context.outputColorSpace = outputColorSpace;
|
|
189
|
+
|
|
190
|
+
outputNode = outputNode.context( context );
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
this._context = context;
|
|
195
|
+
|
|
196
|
+
this._quadMesh.material.fragmentNode = outputNode;
|
|
144
197
|
this._quadMesh.material.needsUpdate = true;
|
|
145
198
|
|
|
146
199
|
this.needsUpdate = false;
|
|
@@ -155,33 +208,16 @@ class PostProcessing {
|
|
|
155
208
|
* its animation loop (not the one from the renderer).
|
|
156
209
|
*
|
|
157
210
|
* @async
|
|
211
|
+
* @deprecated
|
|
158
212
|
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
159
213
|
*/
|
|
160
214
|
async renderAsync() {
|
|
161
215
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const renderer = this.renderer;
|
|
165
|
-
|
|
166
|
-
const toneMapping = renderer.toneMapping;
|
|
167
|
-
const outputColorSpace = renderer.outputColorSpace;
|
|
168
|
-
|
|
169
|
-
renderer.toneMapping = NoToneMapping;
|
|
170
|
-
renderer.outputColorSpace = LinearSRGBColorSpace;
|
|
171
|
-
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
const currentXR = renderer.xr.enabled;
|
|
175
|
-
renderer.xr.enabled = false;
|
|
216
|
+
warnOnce( 'PostProcessing: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
|
|
176
217
|
|
|
177
|
-
await this.
|
|
218
|
+
await this.renderer.init();
|
|
178
219
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
renderer.toneMapping = toneMapping;
|
|
184
|
-
renderer.outputColorSpace = outputColorSpace;
|
|
220
|
+
this.render();
|
|
185
221
|
|
|
186
222
|
}
|
|
187
223
|
|
|
@@ -2,6 +2,7 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
|
|
|
2
2
|
import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
3
3
|
import { Mesh } from '../../objects/Mesh.js';
|
|
4
4
|
import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
|
|
5
|
+
import { warnOnce } from '../../utils.js';
|
|
5
6
|
|
|
6
7
|
const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
7
8
|
|
|
@@ -81,12 +82,17 @@ class QuadMesh extends Mesh {
|
|
|
81
82
|
* Async version of `render()`.
|
|
82
83
|
*
|
|
83
84
|
* @async
|
|
85
|
+
* @deprecated
|
|
84
86
|
* @param {Renderer} renderer - The renderer.
|
|
85
87
|
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
86
88
|
*/
|
|
87
89
|
async renderAsync( renderer ) {
|
|
88
90
|
|
|
89
|
-
|
|
91
|
+
warnOnce( 'QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
|
|
92
|
+
|
|
93
|
+
await renderer.init();
|
|
94
|
+
|
|
95
|
+
renderer.render( this, _camera );
|
|
90
96
|
|
|
91
97
|
}
|
|
92
98
|
|
|
@@ -248,9 +248,9 @@ class RenderContext {
|
|
|
248
248
|
*/
|
|
249
249
|
export function getCacheKey( renderContext ) {
|
|
250
250
|
|
|
251
|
-
const { textures, activeCubeFace } = renderContext;
|
|
251
|
+
const { textures, activeCubeFace, activeMipmapLevel } = renderContext;
|
|
252
252
|
|
|
253
|
-
const values = [ activeCubeFace ];
|
|
253
|
+
const values = [ activeCubeFace, activeMipmapLevel ];
|
|
254
254
|
|
|
255
255
|
for ( const texture of textures ) {
|
|
256
256
|
|
|
@@ -72,7 +72,7 @@ function reversePainterSortStable( a, b ) {
|
|
|
72
72
|
*/
|
|
73
73
|
function needsDoublePass( material ) {
|
|
74
74
|
|
|
75
|
-
const hasTransmission = material.transmission > 0 || material.transmissionNode;
|
|
75
|
+
const hasTransmission = material.transmission > 0 || ( material.transmissionNode && material.transmissionNode.isNode );
|
|
76
76
|
|
|
77
77
|
return hasTransmission && material.side === DoubleSide && material.forceSinglePass === false;
|
|
78
78
|
|
|
@@ -283,7 +283,9 @@ class RenderList {
|
|
|
283
283
|
|
|
284
284
|
if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
|
|
285
285
|
|
|
286
|
-
if ( material.transparent === true || material.transmission > 0
|
|
286
|
+
if ( material.transparent === true || material.transmission > 0 ||
|
|
287
|
+
( material.transmissionNode && material.transmissionNode.isNode ) ||
|
|
288
|
+
( material.backdropNode && material.backdropNode.isNode ) ) {
|
|
287
289
|
|
|
288
290
|
if ( needsDoublePass( material ) ) this.transparentDoublePass.push( renderItem );
|
|
289
291
|
|
|
@@ -313,7 +315,9 @@ class RenderList {
|
|
|
313
315
|
|
|
314
316
|
const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );
|
|
315
317
|
|
|
316
|
-
if ( material.transparent === true || material.transmission > 0
|
|
318
|
+
if ( material.transparent === true || material.transmission > 0 ||
|
|
319
|
+
( material.transmissionNode && material.transmissionNode.isNode ) ||
|
|
320
|
+
( material.backdropNode && material.backdropNode.isNode ) ) {
|
|
317
321
|
|
|
318
322
|
if ( needsDoublePass( material ) ) this.transparentDoublePass.unshift( renderItem );
|
|
319
323
|
|
|
@@ -171,6 +171,16 @@ class RenderObject {
|
|
|
171
171
|
*/
|
|
172
172
|
this.attributes = null;
|
|
173
173
|
|
|
174
|
+
/**
|
|
175
|
+
* An object holding the version of the
|
|
176
|
+
* attributes. The keys are the attribute names
|
|
177
|
+
* and the values are the attribute versions.
|
|
178
|
+
*
|
|
179
|
+
* @type {?Object<string, number>}
|
|
180
|
+
* @default null
|
|
181
|
+
*/
|
|
182
|
+
this.attributesId = null;
|
|
183
|
+
|
|
174
184
|
/**
|
|
175
185
|
* A reference to a render pipeline the render
|
|
176
186
|
* object is processed with.
|
|
@@ -290,7 +300,7 @@ class RenderObject {
|
|
|
290
300
|
|
|
291
301
|
/**
|
|
292
302
|
* An event listener which is executed when `dispose()` is called on
|
|
293
|
-
* the render object
|
|
303
|
+
* the material of this render object.
|
|
294
304
|
*
|
|
295
305
|
* @method
|
|
296
306
|
*/
|
|
@@ -300,7 +310,23 @@ class RenderObject {
|
|
|
300
310
|
|
|
301
311
|
};
|
|
302
312
|
|
|
313
|
+
/**
|
|
314
|
+
* An event listener which is executed when `dispose()` is called on
|
|
315
|
+
* the geometry of this render object.
|
|
316
|
+
*
|
|
317
|
+
* @method
|
|
318
|
+
*/
|
|
319
|
+
this.onGeometryDispose = () => {
|
|
320
|
+
|
|
321
|
+
// clear geometry cache attributes
|
|
322
|
+
|
|
323
|
+
this.attributes = null;
|
|
324
|
+
this.attributesId = null;
|
|
325
|
+
|
|
326
|
+
};
|
|
327
|
+
|
|
303
328
|
this.material.addEventListener( 'dispose', this.onMaterialDispose );
|
|
329
|
+
this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
|
|
304
330
|
|
|
305
331
|
}
|
|
306
332
|
|
|
@@ -439,6 +465,7 @@ class RenderObject {
|
|
|
439
465
|
|
|
440
466
|
this.geometry = geometry;
|
|
441
467
|
this.attributes = null;
|
|
468
|
+
this.attributesId = null;
|
|
442
469
|
|
|
443
470
|
}
|
|
444
471
|
|
|
@@ -458,9 +485,25 @@ class RenderObject {
|
|
|
458
485
|
const attributes = [];
|
|
459
486
|
const vertexBuffers = new Set();
|
|
460
487
|
|
|
488
|
+
const attributesId = {};
|
|
489
|
+
|
|
461
490
|
for ( const nodeAttribute of nodeAttributes ) {
|
|
462
491
|
|
|
463
|
-
|
|
492
|
+
let attribute;
|
|
493
|
+
|
|
494
|
+
if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
|
|
495
|
+
|
|
496
|
+
// node attribute
|
|
497
|
+
attribute = nodeAttribute.node.attribute;
|
|
498
|
+
|
|
499
|
+
} else {
|
|
500
|
+
|
|
501
|
+
// geometry attribute
|
|
502
|
+
attribute = geometry.getAttribute( nodeAttribute.name );
|
|
503
|
+
|
|
504
|
+
attributesId[ nodeAttribute.name ] = attribute.version;
|
|
505
|
+
|
|
506
|
+
}
|
|
464
507
|
|
|
465
508
|
if ( attribute === undefined ) continue;
|
|
466
509
|
|
|
@@ -472,6 +515,7 @@ class RenderObject {
|
|
|
472
515
|
}
|
|
473
516
|
|
|
474
517
|
this.attributes = attributes;
|
|
518
|
+
this.attributesId = attributesId;
|
|
475
519
|
this.vertexBuffers = Array.from( vertexBuffers.values() );
|
|
476
520
|
|
|
477
521
|
return attributes;
|
|
@@ -638,7 +682,7 @@ class RenderObject {
|
|
|
638
682
|
*/
|
|
639
683
|
getMaterialCacheKey() {
|
|
640
684
|
|
|
641
|
-
const { object, material } = this;
|
|
685
|
+
const { object, material, renderer } = this;
|
|
642
686
|
|
|
643
687
|
let cacheKey = material.customProgramCacheKey();
|
|
644
688
|
|
|
@@ -668,6 +712,18 @@ class RenderObject {
|
|
|
668
712
|
|
|
669
713
|
valueKey += value.mapping;
|
|
670
714
|
|
|
715
|
+
// WebGPU must honor the sampler data because they are part of the bindings
|
|
716
|
+
|
|
717
|
+
if ( renderer.backend.isWebGPUBackend === true ) {
|
|
718
|
+
|
|
719
|
+
valueKey += value.magFilter;
|
|
720
|
+
valueKey += value.minFilter;
|
|
721
|
+
valueKey += value.wrapS;
|
|
722
|
+
valueKey += value.wrapT;
|
|
723
|
+
valueKey += value.wrapR;
|
|
724
|
+
|
|
725
|
+
}
|
|
726
|
+
|
|
671
727
|
}
|
|
672
728
|
|
|
673
729
|
valueKey += '}';
|
|
@@ -714,7 +770,7 @@ class RenderObject {
|
|
|
714
770
|
|
|
715
771
|
}
|
|
716
772
|
|
|
717
|
-
if ( object.count > 1 ) {
|
|
773
|
+
if ( object.isInstancedMesh || object.count > 1 || Array.isArray( object.morphTargetInfluences ) ) {
|
|
718
774
|
|
|
719
775
|
// TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850
|
|
720
776
|
|
|
@@ -736,7 +792,27 @@ class RenderObject {
|
|
|
736
792
|
*/
|
|
737
793
|
get needsGeometryUpdate() {
|
|
738
794
|
|
|
739
|
-
|
|
795
|
+
if ( this.geometry.id !== this.object.geometry.id ) return true;
|
|
796
|
+
|
|
797
|
+
if ( this.attributes !== null ) {
|
|
798
|
+
|
|
799
|
+
const attributesId = this.attributesId;
|
|
800
|
+
|
|
801
|
+
for ( const name in attributesId ) {
|
|
802
|
+
|
|
803
|
+
const attribute = this.geometry.getAttribute( name );
|
|
804
|
+
|
|
805
|
+
if ( attribute === undefined || attributesId[ name ] !== attribute.id ) {
|
|
806
|
+
|
|
807
|
+
return true;
|
|
808
|
+
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
return false;
|
|
740
816
|
|
|
741
817
|
}
|
|
742
818
|
|
|
@@ -793,6 +869,8 @@ class RenderObject {
|
|
|
793
869
|
|
|
794
870
|
}
|
|
795
871
|
|
|
872
|
+
cacheKey = hash( cacheKey, this.camera.id );
|
|
873
|
+
|
|
796
874
|
return cacheKey;
|
|
797
875
|
|
|
798
876
|
}
|
|
@@ -814,6 +892,7 @@ class RenderObject {
|
|
|
814
892
|
dispose() {
|
|
815
893
|
|
|
816
894
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
895
|
+
this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
|
|
817
896
|
|
|
818
897
|
this.onDispose();
|
|
819
898
|
|
|
@@ -185,7 +185,7 @@ class RenderObjects {
|
|
|
185
185
|
renderObject.onDispose = () => {
|
|
186
186
|
|
|
187
187
|
this.pipelines.delete( renderObject );
|
|
188
|
-
this.bindings.
|
|
188
|
+
this.bindings.deleteForRender( renderObject );
|
|
189
189
|
this.nodes.delete( renderObject );
|
|
190
190
|
|
|
191
191
|
chainMap.delete( renderObject.getChainArray() );
|