@plastic-software/three 0.179.0 → 0.181.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- 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 +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- 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 +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- 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 +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/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 +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- 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 +22 -5
- 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 +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -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 +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- 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 +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -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 +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -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 +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -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/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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- 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 +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -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} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- 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 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- 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 +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- 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 +48 -41
- 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 +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.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 +6 -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 +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- 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 +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -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 +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -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.
|
|
@@ -51,7 +52,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
51
52
|
|
|
52
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
|
|
|
@@ -85,7 +86,7 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
|
|
|
85
86
|
|
|
86
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
|
|
|
@@ -119,7 +120,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
|
119
120
|
|
|
120
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
|
|
|
@@ -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' ).setName( 'camer
|
|
|
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' ).setName( 'came
|
|
|
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
|
}
|
|
@@ -4,6 +4,7 @@ import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
|
4
4
|
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
6
|
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* TSL object that represents the normal attribute of the current rendered object in local space.
|
|
@@ -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
|
|
|
@@ -208,7 +209,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
208
209
|
*/
|
|
209
210
|
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
210
211
|
|
|
211
|
-
|
|
212
|
+
warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
212
213
|
return normalView;
|
|
213
214
|
|
|
214
215
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -222,7 +223,7 @@ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
|
222
223
|
*/
|
|
223
224
|
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
226
227
|
return normalWorld;
|
|
227
228
|
|
|
228
229
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -236,7 +237,7 @@ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
|
236
237
|
*/
|
|
237
238
|
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
238
239
|
|
|
239
|
-
|
|
240
|
+
warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
240
241
|
return clearcoatNormalView;
|
|
241
242
|
|
|
242
243
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
-
import { Fn } from '../tsl/TSLCore.js';
|
|
2
|
+
import { Fn, vec3 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { modelWorldMatrix } from './ModelNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -71,4 +71,20 @@ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
71
71
|
* @tsl
|
|
72
72
|
* @type {VaryingNode<vec3>}
|
|
73
73
|
*/
|
|
74
|
-
export const positionViewDirection = /*@__PURE__*/
|
|
74
|
+
export const positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
75
|
+
|
|
76
|
+
let output;
|
|
77
|
+
|
|
78
|
+
if ( builder.camera.isOrthographicCamera ) {
|
|
79
|
+
|
|
80
|
+
output = vec3( 0, 0, 1 );
|
|
81
|
+
|
|
82
|
+
} else {
|
|
83
|
+
|
|
84
|
+
output = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return output.toVar( 'positionViewDirection' );
|
|
89
|
+
|
|
90
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
@@ -7,6 +7,7 @@ import { buffer } from './BufferNode.js';
|
|
|
7
7
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
|
+
import { warn } from '../../utils.js';
|
|
10
11
|
|
|
11
12
|
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
12
13
|
|
|
@@ -238,7 +239,7 @@ class ReferenceNode extends Node {
|
|
|
238
239
|
*/
|
|
239
240
|
label( name ) {
|
|
240
241
|
|
|
241
|
-
|
|
242
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
242
243
|
|
|
243
244
|
return this.setName( name );
|
|
244
245
|
|
|
@@ -284,7 +285,7 @@ class ReferenceNode extends Node {
|
|
|
284
285
|
|
|
285
286
|
if ( this.name !== null ) node.setName( this.name );
|
|
286
287
|
|
|
287
|
-
this.node = node
|
|
288
|
+
this.node = node;
|
|
288
289
|
|
|
289
290
|
}
|
|
290
291
|
|
|
@@ -5,6 +5,7 @@ import Node from '../core/Node.js';
|
|
|
5
5
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
6
6
|
import { nodeImmutable, uniform } from '../tsl/TSLBase.js';
|
|
7
7
|
import { reference } from './ReferenceNode.js';
|
|
8
|
+
import { error } from '../../utils.js';
|
|
8
9
|
|
|
9
10
|
const _e1 = /*@__PURE__*/ new Euler();
|
|
10
11
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
@@ -103,7 +104,7 @@ class SceneNode extends Node {
|
|
|
103
104
|
|
|
104
105
|
} else {
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
error( 'SceneNode: Unknown scope:', scope );
|
|
107
108
|
|
|
108
109
|
}
|
|
109
110
|
|
|
@@ -4,6 +4,7 @@ import { nodeObject, varying } from '../tsl/TSLBase.js';
|
|
|
4
4
|
import { storageElement } from '../utils/StorageArrayElementNode.js';
|
|
5
5
|
import { NodeAccess } from '../core/constants.js';
|
|
6
6
|
import { getTypeFromLength } from '../core/NodeUtils.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* This node is used in context of compute shaders and allows to define a
|
|
@@ -408,7 +409,7 @@ export const storage = ( value, type = null, count = 0 ) => nodeObject( new Stor
|
|
|
408
409
|
*/
|
|
409
410
|
export const storageObject = ( value, type, count ) => { // @deprecated, r171
|
|
410
411
|
|
|
411
|
-
|
|
412
|
+
warn( 'TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
|
|
412
413
|
|
|
413
414
|
return storage( value, type, count ).setPBO( true );
|
|
414
415
|
|
|
@@ -60,6 +60,14 @@ class StorageTextureNode extends TextureNode {
|
|
|
60
60
|
*/
|
|
61
61
|
this.storeNode = storeNode;
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The mip level to write to for storage textures.
|
|
65
|
+
*
|
|
66
|
+
* @type {number}
|
|
67
|
+
* @default 0
|
|
68
|
+
*/
|
|
69
|
+
this.mipLevel = 0;
|
|
70
|
+
|
|
63
71
|
/**
|
|
64
72
|
* This flag can be used for type testing.
|
|
65
73
|
*
|
|
@@ -115,6 +123,19 @@ class StorageTextureNode extends TextureNode {
|
|
|
115
123
|
|
|
116
124
|
}
|
|
117
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Sets the mip level to write to.
|
|
128
|
+
*
|
|
129
|
+
* @param {number} level - The mip level.
|
|
130
|
+
* @return {StorageTextureNode} A reference to this node.
|
|
131
|
+
*/
|
|
132
|
+
setMipLevel( level ) {
|
|
133
|
+
|
|
134
|
+
this.mipLevel = level;
|
|
135
|
+
return this;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
118
139
|
/**
|
|
119
140
|
* Generates the code snippet of the storage node. If no `storeNode`
|
|
120
141
|
* is defined, the texture node is generated as normal texture.
|
|
@@ -200,6 +221,7 @@ class StorageTextureNode extends TextureNode {
|
|
|
200
221
|
|
|
201
222
|
const newNode = super.clone();
|
|
202
223
|
newNode.storeNode = this.storeNode;
|
|
224
|
+
newNode.mipLevel = this.mipLevel;
|
|
203
225
|
return newNode;
|
|
204
226
|
|
|
205
227
|
}
|
|
@@ -153,7 +153,20 @@ class Texture3DNode extends TextureNode {
|
|
|
153
153
|
*/
|
|
154
154
|
generateUV( builder, uvNode ) {
|
|
155
155
|
|
|
156
|
-
return uvNode.build( builder, 'vec3' );
|
|
156
|
+
return uvNode.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Generates the offset code snippet.
|
|
162
|
+
*
|
|
163
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
164
|
+
* @param {Node} offsetNode - The offset node to generate code for.
|
|
165
|
+
* @return {string} The generated code snippet.
|
|
166
|
+
*/
|
|
167
|
+
generateOffset( builder, offsetNode ) {
|
|
168
|
+
|
|
169
|
+
return offsetNode.build( builder, 'ivec3' );
|
|
157
170
|
|
|
158
171
|
}
|
|
159
172
|
|