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
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { uniform } from '../core/UniformNode.js';
|
|
2
2
|
import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
|
-
import { Fn } from '../tsl/TSLBase.js';
|
|
4
|
+
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
5
5
|
import { uniformArray } from './UniformArrayNode.js';
|
|
6
6
|
import { builtin } from './BuiltinNode.js';
|
|
7
|
+
import { screenSize } from '../display/ScreenNode.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* TSL object that represents the current `index` value of the camera if used ArrayCamera.
|
|
@@ -11,7 +12,7 @@ import { builtin } from './BuiltinNode.js';
|
|
|
11
12
|
* @tsl
|
|
12
13
|
* @type {UniformNode<uint>}
|
|
13
14
|
*/
|
|
14
|
-
export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).
|
|
15
|
+
export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setName( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* TSL object that represents the `near` value of the camera used for the current render.
|
|
@@ -19,7 +20,7 @@ export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).label( 'u_cameraIn
|
|
|
19
20
|
* @tsl
|
|
20
21
|
* @type {UniformNode<float>}
|
|
21
22
|
*/
|
|
22
|
-
export const cameraNear = /*@__PURE__*/ uniform( 'float' ).
|
|
23
|
+
export const cameraNear = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* TSL object that represents the `far` value of the camera used for the current render.
|
|
@@ -27,7 +28,7 @@ export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' )
|
|
|
27
28
|
* @tsl
|
|
28
29
|
* @type {UniformNode<float>}
|
|
29
30
|
*/
|
|
30
|
-
export const cameraFar = /*@__PURE__*/ uniform( 'float' ).
|
|
31
|
+
export const cameraFar = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* TSL object that represents the projection matrix of the camera used for the current render.
|
|
@@ -49,13 +50,13 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
49
50
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).
|
|
53
|
+
const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' );
|
|
53
54
|
|
|
54
|
-
cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).
|
|
55
|
+
cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' );
|
|
55
56
|
|
|
56
57
|
} else {
|
|
57
58
|
|
|
58
|
-
cameraProjectionMatrix = uniform( 'mat4' ).
|
|
59
|
+
cameraProjectionMatrix = uniform( 'mat4' ).setName( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
|
|
59
60
|
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -83,13 +84,13 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
|
|
|
83
84
|
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).
|
|
87
|
+
const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' );
|
|
87
88
|
|
|
88
|
-
cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).
|
|
89
|
+
cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' );
|
|
89
90
|
|
|
90
91
|
} else {
|
|
91
92
|
|
|
92
|
-
cameraProjectionMatrixInverse = uniform( 'mat4' ).
|
|
93
|
+
cameraProjectionMatrixInverse = uniform( 'mat4' ).setName( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
|
|
93
94
|
|
|
94
95
|
}
|
|
95
96
|
|
|
@@ -117,13 +118,13 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
117
118
|
|
|
118
119
|
}
|
|
119
120
|
|
|
120
|
-
const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).
|
|
121
|
+
const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' );
|
|
121
122
|
|
|
122
|
-
cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).
|
|
123
|
+
cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' );
|
|
123
124
|
|
|
124
125
|
} else {
|
|
125
126
|
|
|
126
|
-
cameraViewMatrix = uniform( 'mat4' ).
|
|
127
|
+
cameraViewMatrix = uniform( 'mat4' ).setName( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
|
|
127
128
|
|
|
128
129
|
}
|
|
129
130
|
|
|
@@ -137,7 +138,33 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
137
138
|
* @tsl
|
|
138
139
|
* @type {UniformNode<mat4>}
|
|
139
140
|
*/
|
|
140
|
-
export const cameraWorldMatrix = /*@__PURE__*/
|
|
141
|
+
export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
142
|
+
|
|
143
|
+
let cameraWorldMatrix;
|
|
144
|
+
|
|
145
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
146
|
+
|
|
147
|
+
const matrices = [];
|
|
148
|
+
|
|
149
|
+
for ( const subCamera of camera.cameras ) {
|
|
150
|
+
|
|
151
|
+
matrices.push( subCamera.matrixWorld );
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const cameraWorldMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' );
|
|
156
|
+
|
|
157
|
+
cameraWorldMatrix = cameraWorldMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' );
|
|
158
|
+
|
|
159
|
+
} else {
|
|
160
|
+
|
|
161
|
+
cameraWorldMatrix = uniform( 'mat4' ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return cameraWorldMatrix;
|
|
166
|
+
|
|
167
|
+
} ).once() )();
|
|
141
168
|
|
|
142
169
|
/**
|
|
143
170
|
* TSL object that represents the normal matrix of the camera used for the current render.
|
|
@@ -145,7 +172,33 @@ export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraW
|
|
|
145
172
|
* @tsl
|
|
146
173
|
* @type {UniformNode<mat3>}
|
|
147
174
|
*/
|
|
148
|
-
export const cameraNormalMatrix = /*@__PURE__*/
|
|
175
|
+
export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
176
|
+
|
|
177
|
+
let cameraNormalMatrix;
|
|
178
|
+
|
|
179
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
180
|
+
|
|
181
|
+
const matrices = [];
|
|
182
|
+
|
|
183
|
+
for ( const subCamera of camera.cameras ) {
|
|
184
|
+
|
|
185
|
+
matrices.push( subCamera.normalMatrix );
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const cameraNormalMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' );
|
|
190
|
+
|
|
191
|
+
cameraNormalMatrix = cameraNormalMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' );
|
|
192
|
+
|
|
193
|
+
} else {
|
|
194
|
+
|
|
195
|
+
cameraNormalMatrix = uniform( 'mat3' ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return cameraNormalMatrix;
|
|
200
|
+
|
|
201
|
+
} ).once() )();
|
|
149
202
|
|
|
150
203
|
/**
|
|
151
204
|
* TSL object that represents the position in world space of the camera used for the current render.
|
|
@@ -153,4 +206,77 @@ export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'camera
|
|
|
153
206
|
* @tsl
|
|
154
207
|
* @type {UniformNode<vec3>}
|
|
155
208
|
*/
|
|
156
|
-
export const cameraPosition = /*@__PURE__*/
|
|
209
|
+
export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
210
|
+
|
|
211
|
+
let cameraPosition;
|
|
212
|
+
|
|
213
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
214
|
+
|
|
215
|
+
const positions = [];
|
|
216
|
+
|
|
217
|
+
for ( let i = 0, l = camera.cameras.length; i < l; i ++ ) {
|
|
218
|
+
|
|
219
|
+
positions.push( new Vector3() );
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const cameraPositions = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => {
|
|
224
|
+
|
|
225
|
+
const subCameras = camera.cameras;
|
|
226
|
+
const array = self.array;
|
|
227
|
+
|
|
228
|
+
for ( let i = 0, l = subCameras.length; i < l; i ++ ) {
|
|
229
|
+
|
|
230
|
+
array[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld );
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
} );
|
|
235
|
+
|
|
236
|
+
cameraPosition = cameraPositions.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' );
|
|
237
|
+
|
|
238
|
+
} else {
|
|
239
|
+
|
|
240
|
+
cameraPosition = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return cameraPosition;
|
|
245
|
+
|
|
246
|
+
} ).once() )();
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* TSL object that represents the viewport of the camera used for the current render.
|
|
251
|
+
*
|
|
252
|
+
* @tsl
|
|
253
|
+
* @type {UniformNode<vec4>}
|
|
254
|
+
*/
|
|
255
|
+
export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
256
|
+
|
|
257
|
+
let cameraViewport;
|
|
258
|
+
|
|
259
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
260
|
+
|
|
261
|
+
const viewports = [];
|
|
262
|
+
|
|
263
|
+
for ( const subCamera of camera.cameras ) {
|
|
264
|
+
|
|
265
|
+
viewports.push( subCamera.viewport );
|
|
266
|
+
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const cameraViewports = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' );
|
|
270
|
+
|
|
271
|
+
cameraViewport = cameraViewports.element( cameraIndex ).toConst( 'cameraViewport' );
|
|
272
|
+
|
|
273
|
+
} else {
|
|
274
|
+
|
|
275
|
+
// Fallback for single camera
|
|
276
|
+
cameraViewport = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' );
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return cameraViewport;
|
|
281
|
+
|
|
282
|
+
} ).once() )();
|
|
@@ -7,6 +7,7 @@ import { Loop } from '../utils/LoopNode.js';
|
|
|
7
7
|
import { smoothstep } from '../math/MathNode.js';
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import { builtin } from './BuiltinNode.js';
|
|
10
|
+
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* This node is used in {@link NodeMaterial} to setup the clipping
|
|
@@ -94,7 +95,7 @@ class ClippingNode extends Node {
|
|
|
94
95
|
|
|
95
96
|
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
96
97
|
|
|
97
|
-
const clippingPlanes = uniformArray( unionPlanes );
|
|
98
|
+
const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
|
|
98
99
|
|
|
99
100
|
Loop( numUnionPlanes, ( { i } ) => {
|
|
100
101
|
|
|
@@ -113,7 +114,7 @@ class ClippingNode extends Node {
|
|
|
113
114
|
|
|
114
115
|
if ( numIntersectionPlanes > 0 ) {
|
|
115
116
|
|
|
116
|
-
const clippingPlanes = uniformArray( intersectionPlanes );
|
|
117
|
+
const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
|
|
117
118
|
const intersectionClipOpacity = float( 1 ).toVar( 'intersectionClipOpacity' );
|
|
118
119
|
|
|
119
120
|
Loop( numIntersectionPlanes, ( { i } ) => {
|
|
@@ -154,7 +155,7 @@ class ClippingNode extends Node {
|
|
|
154
155
|
|
|
155
156
|
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
156
157
|
|
|
157
|
-
const clippingPlanes = uniformArray( unionPlanes );
|
|
158
|
+
const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
|
|
158
159
|
|
|
159
160
|
Loop( numUnionPlanes, ( { i } ) => {
|
|
160
161
|
|
|
@@ -169,7 +170,7 @@ class ClippingNode extends Node {
|
|
|
169
170
|
|
|
170
171
|
if ( numIntersectionPlanes > 0 ) {
|
|
171
172
|
|
|
172
|
-
const clippingPlanes = uniformArray( intersectionPlanes );
|
|
173
|
+
const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
|
|
173
174
|
const clipped = bool( true ).toVar( 'clipped' );
|
|
174
175
|
|
|
175
176
|
Loop( numIntersectionPlanes, ( { i } ) => {
|
|
@@ -202,7 +203,7 @@ class ClippingNode extends Node {
|
|
|
202
203
|
|
|
203
204
|
return Fn( () => {
|
|
204
205
|
|
|
205
|
-
const clippingPlanes = uniformArray( unionPlanes );
|
|
206
|
+
const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
|
|
206
207
|
const hw_clip_distances = builtin( builder.getClipDistance() );
|
|
207
208
|
|
|
208
209
|
Loop( numUnionPlanes, ( { i } ) => {
|
|
@@ -6,6 +6,7 @@ import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem }
|
|
|
6
6
|
import { materialEnvRotation } from './MaterialProperties.js';
|
|
7
7
|
|
|
8
8
|
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
9
|
+
import { error } from '../../utils.js';
|
|
9
10
|
|
|
10
11
|
const EmptyTexture = /*@__PURE__*/ new CubeTexture();
|
|
11
12
|
|
|
@@ -76,7 +77,7 @@ class CubeTextureNode extends TextureNode {
|
|
|
76
77
|
|
|
77
78
|
} else {
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
error( 'CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
|
|
80
81
|
|
|
81
82
|
return vec3( 0, 0, 0 );
|
|
82
83
|
|
|
@@ -123,7 +124,7 @@ class CubeTextureNode extends TextureNode {
|
|
|
123
124
|
*/
|
|
124
125
|
generateUV( builder, cubeUV ) {
|
|
125
126
|
|
|
126
|
-
return cubeUV.build( builder, 'vec3' );
|
|
127
|
+
return cubeUV.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
|
|
127
128
|
|
|
128
129
|
}
|
|
129
130
|
|
|
@@ -149,7 +150,7 @@ export const cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setPar
|
|
|
149
150
|
*
|
|
150
151
|
* @tsl
|
|
151
152
|
* @function
|
|
152
|
-
* @param {?CubeTexture|CubeTextureNode} [value=EmptyTexture] - The cube texture.
|
|
153
|
+
* @param {?(CubeTexture|CubeTextureNode)} [value=EmptyTexture] - The cube texture.
|
|
153
154
|
* @param {?Node<vec3>} [uvNode=null] - The uv node.
|
|
154
155
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
155
156
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
@@ -162,7 +163,7 @@ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = nu
|
|
|
162
163
|
if ( value && value.isCubeTextureNode === true ) {
|
|
163
164
|
|
|
164
165
|
textureNode = nodeObject( value.clone() );
|
|
165
|
-
textureNode.referenceNode = value
|
|
166
|
+
textureNode.referenceNode = value; // Ensure the reference is set to the original node
|
|
166
167
|
|
|
167
168
|
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
168
169
|
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
@@ -109,7 +109,9 @@ class InstanceNode extends Node {
|
|
|
109
109
|
*/
|
|
110
110
|
setup( builder ) {
|
|
111
111
|
|
|
112
|
-
const {
|
|
112
|
+
const { instanceMatrix, instanceColor } = this;
|
|
113
|
+
|
|
114
|
+
const { count } = instanceMatrix;
|
|
113
115
|
|
|
114
116
|
let { instanceMatrixNode, instanceColorNode } = this;
|
|
115
117
|
|
|
@@ -193,15 +195,33 @@ class InstanceNode extends Node {
|
|
|
193
195
|
*/
|
|
194
196
|
update( /*frame*/ ) {
|
|
195
197
|
|
|
196
|
-
if ( this.
|
|
198
|
+
if ( this.buffer !== null ) {
|
|
199
|
+
|
|
200
|
+
// keep update ranges in sync
|
|
201
|
+
|
|
202
|
+
this.buffer.clearUpdateRanges();
|
|
203
|
+
this.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );
|
|
197
204
|
|
|
198
|
-
|
|
205
|
+
// update version if necessary
|
|
206
|
+
|
|
207
|
+
if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.instanceMatrix.version !== this.buffer.version ) {
|
|
208
|
+
|
|
209
|
+
this.buffer.version = this.instanceMatrix.version;
|
|
210
|
+
|
|
211
|
+
}
|
|
199
212
|
|
|
200
213
|
}
|
|
201
214
|
|
|
202
|
-
if ( this.instanceColor && this.
|
|
215
|
+
if ( this.instanceColor && this.bufferColor !== null ) {
|
|
216
|
+
|
|
217
|
+
this.bufferColor.clearUpdateRanges();
|
|
218
|
+
this.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );
|
|
219
|
+
|
|
220
|
+
if ( this.instanceColor.usage !== DynamicDrawUsage && this.instanceColor.version !== this.bufferColor.version ) {
|
|
203
221
|
|
|
204
|
-
|
|
222
|
+
this.bufferColor.version = this.instanceColor.version;
|
|
223
|
+
|
|
224
|
+
}
|
|
205
225
|
|
|
206
226
|
}
|
|
207
227
|
|
|
@@ -32,8 +32,18 @@ export function lightShadowMatrix( light ) {
|
|
|
32
32
|
|
|
33
33
|
return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
|
|
34
34
|
|
|
35
|
+
// normally, shadow matrices are updated in ShadowNode. However, if the shadow matrix is used outside
|
|
36
|
+
// of shadow rendering (like in ProjectorLightNode), the shadow matrix still requires an update
|
|
37
|
+
|
|
35
38
|
if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
|
|
36
39
|
|
|
40
|
+
if ( light.shadow.camera.coordinateSystem !== frame.camera.coordinateSystem ) {
|
|
41
|
+
|
|
42
|
+
light.shadow.camera.coordinateSystem = frame.camera.coordinateSystem;
|
|
43
|
+
light.shadow.camera.updateProjectionMatrix();
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
light.shadow.updateMatrices( light );
|
|
38
48
|
|
|
39
49
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
-
import { mat3, vec3, Fn
|
|
4
|
+
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
|
-
import {
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* TSL object that represents the normal attribute of the current rendered object.
|
|
10
|
+
* TSL object that represents the normal attribute of the current rendered object in local space.
|
|
10
11
|
*
|
|
11
12
|
* @tsl
|
|
12
13
|
* @type {Node<vec3>}
|
|
@@ -14,7 +15,7 @@ import { faceDirection } from '../display/FrontFacingNode.js';
|
|
|
14
15
|
export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
|
-
* TSL object that represents the vertex normal
|
|
18
|
+
* TSL object that represents the vertex normal of the current rendered object in local space.
|
|
18
19
|
*
|
|
19
20
|
* @tsl
|
|
20
21
|
* @type {Node<vec3>}
|
|
@@ -23,7 +24,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
23
24
|
|
|
24
25
|
if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
warn( 'TSL: Vertex attribute "normal" not found on geometry.' );
|
|
27
28
|
|
|
28
29
|
return vec3( 0, 1, 0 );
|
|
29
30
|
|
|
@@ -34,7 +35,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
34
35
|
}, 'vec3' ).once() )().toVar( 'normalLocal' );
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
|
-
* TSL object that represents the flat vertex normal
|
|
38
|
+
* TSL object that represents the flat vertex normal of the current rendered object in view space.
|
|
38
39
|
*
|
|
39
40
|
* @tsl
|
|
40
41
|
* @type {Node<vec3>}
|
|
@@ -42,12 +43,12 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
42
43
|
export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
|
|
43
44
|
|
|
44
45
|
/**
|
|
45
|
-
* TSL object that represents the vertex normal
|
|
46
|
+
* TSL object that represents the vertex normal of the current rendered object in view space.
|
|
46
47
|
*
|
|
47
48
|
* @tsl
|
|
48
49
|
* @type {Node<vec3>}
|
|
49
50
|
*/
|
|
50
|
-
export const
|
|
51
|
+
export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
51
52
|
|
|
52
53
|
let node;
|
|
53
54
|
|
|
@@ -57,77 +58,99 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
57
58
|
|
|
58
59
|
} else {
|
|
59
60
|
|
|
60
|
-
node =
|
|
61
|
+
node = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();
|
|
61
62
|
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
return node;
|
|
65
66
|
|
|
66
|
-
}, 'vec3' ).once() )().toVar( '
|
|
67
|
+
}, 'vec3' ).once() )().toVar( 'normalViewGeometry' );
|
|
67
68
|
|
|
68
69
|
/**
|
|
69
|
-
* TSL object that represents the vertex normal
|
|
70
|
+
* TSL object that represents the vertex normal of the current rendered object in world space.
|
|
70
71
|
*
|
|
71
72
|
* @tsl
|
|
72
73
|
* @type {Node<vec3>}
|
|
73
74
|
*/
|
|
74
|
-
export const
|
|
75
|
+
export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
75
76
|
|
|
76
|
-
let normal =
|
|
77
|
+
let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
|
|
77
78
|
|
|
78
79
|
if ( builder.material.flatShading !== true ) {
|
|
79
80
|
|
|
80
|
-
normal =
|
|
81
|
+
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
81
82
|
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
return normal;
|
|
85
|
+
return normal.normalize().toVar( 'normalWorldGeometry' );
|
|
85
86
|
|
|
86
|
-
}, 'vec3' ).once() )()
|
|
87
|
+
}, 'vec3' ).once() )();
|
|
87
88
|
|
|
88
89
|
/**
|
|
89
|
-
* TSL object that represents the
|
|
90
|
+
* TSL object that represents the vertex normal of the current rendered object in view space.
|
|
90
91
|
*
|
|
91
92
|
* @tsl
|
|
92
93
|
* @type {Node<vec3>}
|
|
93
94
|
*/
|
|
94
|
-
export const
|
|
95
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
|
|
95
96
|
|
|
96
|
-
|
|
97
|
+
let node;
|
|
98
|
+
|
|
99
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
100
|
+
|
|
101
|
+
node = normalViewGeometry;
|
|
97
102
|
|
|
98
|
-
|
|
103
|
+
if ( material.flatShading !== true ) {
|
|
99
104
|
|
|
100
|
-
|
|
105
|
+
node = directionToFaceDirection( node );
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
} else {
|
|
110
|
+
|
|
111
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
112
|
+
|
|
113
|
+
node = context.setupNormal().context( { getUV: null } );
|
|
114
|
+
|
|
115
|
+
}
|
|
101
116
|
|
|
102
117
|
return node;
|
|
103
118
|
|
|
104
|
-
}, 'vec3' ).once() )().toVar( '
|
|
119
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
|
|
105
120
|
|
|
106
121
|
/**
|
|
107
|
-
* TSL object that represents the
|
|
122
|
+
* TSL object that represents the vertex normal of the current rendered object in world space.
|
|
108
123
|
*
|
|
109
124
|
* @tsl
|
|
110
125
|
* @type {Node<vec3>}
|
|
111
126
|
*/
|
|
112
|
-
export const
|
|
127
|
+
export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
|
|
113
128
|
|
|
114
129
|
/**
|
|
115
|
-
* TSL object that represents the
|
|
130
|
+
* TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
|
|
116
131
|
*
|
|
117
132
|
* @tsl
|
|
118
133
|
* @type {Node<vec3>}
|
|
119
134
|
*/
|
|
120
|
-
export const
|
|
135
|
+
export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {
|
|
121
136
|
|
|
122
|
-
|
|
137
|
+
let node;
|
|
123
138
|
|
|
124
|
-
|
|
139
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
125
140
|
|
|
126
|
-
|
|
141
|
+
node = normalView;
|
|
142
|
+
|
|
143
|
+
} else {
|
|
144
|
+
|
|
145
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
146
|
+
|
|
147
|
+
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
148
|
+
|
|
149
|
+
}
|
|
127
150
|
|
|
128
151
|
return node;
|
|
129
152
|
|
|
130
|
-
}, 'vec3' ).once() )().toVar( '
|
|
153
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
|
|
131
154
|
|
|
132
155
|
/**
|
|
133
156
|
* Transforms the normal with the given matrix.
|
|
@@ -174,3 +197,47 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
174
197
|
return cameraViewMatrix.transformDirection( transformedNormal );
|
|
175
198
|
|
|
176
199
|
} );
|
|
200
|
+
|
|
201
|
+
// Deprecated
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* TSL object that represents the transformed vertex normal of the current rendered object in view space.
|
|
205
|
+
*
|
|
206
|
+
* @tsl
|
|
207
|
+
* @type {Node<vec3>}
|
|
208
|
+
* @deprecated since r178. Use `normalView` instead.
|
|
209
|
+
*/
|
|
210
|
+
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
211
|
+
|
|
212
|
+
warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
213
|
+
return normalView;
|
|
214
|
+
|
|
215
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* TSL object that represents the transformed vertex normal of the current rendered object in world space.
|
|
219
|
+
*
|
|
220
|
+
* @tsl
|
|
221
|
+
* @type {Node<vec3>}
|
|
222
|
+
* @deprecated since r178. Use `normalWorld` instead.
|
|
223
|
+
*/
|
|
224
|
+
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
225
|
+
|
|
226
|
+
warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
227
|
+
return normalWorld;
|
|
228
|
+
|
|
229
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.
|
|
233
|
+
*
|
|
234
|
+
* @tsl
|
|
235
|
+
* @type {Node<vec3>}
|
|
236
|
+
* @deprecated since r178. Use `clearcoatNormalView` instead.
|
|
237
|
+
*/
|
|
238
|
+
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
239
|
+
|
|
240
|
+
warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
241
|
+
return clearcoatNormalView;
|
|
242
|
+
|
|
243
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -73,7 +73,7 @@ class Object3DNode extends Node {
|
|
|
73
73
|
/**
|
|
74
74
|
* Overwritten since the node type is inferred from the scope.
|
|
75
75
|
*
|
|
76
|
-
* @return {
|
|
76
|
+
* @return {('mat4'|'vec3'|'float')} The node type.
|
|
77
77
|
*/
|
|
78
78
|
getNodeType() {
|
|
79
79
|
|
|
@@ -263,6 +263,6 @@ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3
|
|
|
263
263
|
* @tsl
|
|
264
264
|
* @function
|
|
265
265
|
* @param {?Object3D} [object3d] - The 3D object.
|
|
266
|
-
* @returns {Object3DNode<
|
|
266
|
+
* @returns {Object3DNode<float>}
|
|
267
267
|
*/
|
|
268
268
|
export const objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );
|