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,41 +1,12 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { add } from '../math/OperatorNode.js';
|
|
3
2
|
|
|
4
3
|
import { normalView, transformNormalToView } from '../accessors/Normal.js';
|
|
5
|
-
import { positionView } from '../accessors/Position.js';
|
|
6
4
|
import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
|
|
7
|
-
import {
|
|
8
|
-
import { faceDirection } from './FrontFacingNode.js';
|
|
9
|
-
import { Fn, nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
10
6
|
|
|
11
7
|
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// http://www.thetenthplanet.de/archives/1180
|
|
15
|
-
|
|
16
|
-
const perturbNormal2Arb = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
17
|
-
|
|
18
|
-
const { eye_pos, surf_norm, mapN, uv } = inputs;
|
|
19
|
-
|
|
20
|
-
const q0 = eye_pos.dFdx();
|
|
21
|
-
const q1 = eye_pos.dFdy();
|
|
22
|
-
const st0 = uv.dFdx();
|
|
23
|
-
const st1 = uv.dFdy();
|
|
24
|
-
|
|
25
|
-
const N = surf_norm; // normalized
|
|
26
|
-
|
|
27
|
-
const q1perp = q1.cross( N );
|
|
28
|
-
const q0perp = N.cross( q0 );
|
|
29
|
-
|
|
30
|
-
const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
|
|
31
|
-
const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
|
|
32
|
-
|
|
33
|
-
const det = T.dot( T ).max( B.dot( B ) );
|
|
34
|
-
const scale = faceDirection.mul( det.inverseSqrt() );
|
|
35
|
-
|
|
36
|
-
return add( T.mul( mapN.x, scale ), B.mul( mapN.y, scale ), N.mul( mapN.z ) ).normalize();
|
|
37
|
-
|
|
38
|
-
} );
|
|
8
|
+
import { directionToFaceDirection } from './FrontFacingNode.js';
|
|
9
|
+
import { error } from '../../utils.js';
|
|
39
10
|
|
|
40
11
|
/**
|
|
41
12
|
* This class can be used for applying normals maps to materials.
|
|
@@ -89,7 +60,7 @@ class NormalMapNode extends TempNode {
|
|
|
89
60
|
|
|
90
61
|
}
|
|
91
62
|
|
|
92
|
-
setup(
|
|
63
|
+
setup( { material } ) {
|
|
93
64
|
|
|
94
65
|
const { normalMapType, scaleNode } = this;
|
|
95
66
|
|
|
@@ -97,38 +68,37 @@ class NormalMapNode extends TempNode {
|
|
|
97
68
|
|
|
98
69
|
if ( scaleNode !== null ) {
|
|
99
70
|
|
|
100
|
-
|
|
71
|
+
let scale = scaleNode;
|
|
72
|
+
|
|
73
|
+
if ( material.flatShading === true ) {
|
|
74
|
+
|
|
75
|
+
scale = directionToFaceDirection( scale );
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
normalMap = vec3( normalMap.xy.mul( scale ), normalMap.z );
|
|
101
80
|
|
|
102
81
|
}
|
|
103
82
|
|
|
104
|
-
let
|
|
83
|
+
let output = null;
|
|
105
84
|
|
|
106
85
|
if ( normalMapType === ObjectSpaceNormalMap ) {
|
|
107
86
|
|
|
108
|
-
|
|
87
|
+
output = transformNormalToView( normalMap );
|
|
109
88
|
|
|
110
89
|
} else if ( normalMapType === TangentSpaceNormalMap ) {
|
|
111
90
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if ( tangent === true ) {
|
|
91
|
+
output = TBNViewMatrix.mul( normalMap ).normalize();
|
|
115
92
|
|
|
116
|
-
|
|
93
|
+
} else {
|
|
117
94
|
|
|
118
|
-
|
|
95
|
+
error( `NodeMaterial: Unsupported normal map type: ${ normalMapType }` );
|
|
119
96
|
|
|
120
|
-
|
|
121
|
-
eye_pos: positionView,
|
|
122
|
-
surf_norm: normalView,
|
|
123
|
-
mapN: normalMap,
|
|
124
|
-
uv: uv()
|
|
125
|
-
} );
|
|
126
|
-
|
|
127
|
-
}
|
|
97
|
+
output = normalView; // Fallback to default normal view
|
|
128
98
|
|
|
129
99
|
}
|
|
130
100
|
|
|
131
|
-
return
|
|
101
|
+
return output;
|
|
132
102
|
|
|
133
103
|
}
|
|
134
104
|
|
|
@@ -7,8 +7,10 @@ import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDep
|
|
|
7
7
|
|
|
8
8
|
import { HalfFloatType/*, FloatType*/ } from '../../constants.js';
|
|
9
9
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
|
+
import { Vector4 } from '../../math/Vector4.js';
|
|
10
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
11
12
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
13
|
+
import { warn } from '../../utils.js';
|
|
12
14
|
|
|
13
15
|
const _size = /*@__PURE__*/ new Vector2();
|
|
14
16
|
|
|
@@ -48,7 +50,7 @@ class PassTextureNode extends TextureNode {
|
|
|
48
50
|
|
|
49
51
|
setup( builder ) {
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
this.passNode.build( builder );
|
|
52
54
|
|
|
53
55
|
return super.setup( builder );
|
|
54
56
|
|
|
@@ -126,7 +128,17 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
126
128
|
|
|
127
129
|
clone() {
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
const newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );
|
|
132
|
+
newNode.uvNode = this.uvNode;
|
|
133
|
+
newNode.levelNode = this.levelNode;
|
|
134
|
+
newNode.biasNode = this.biasNode;
|
|
135
|
+
newNode.sampler = this.sampler;
|
|
136
|
+
newNode.depthNode = this.depthNode;
|
|
137
|
+
newNode.compareNode = this.compareNode;
|
|
138
|
+
newNode.gradNode = this.gradNode;
|
|
139
|
+
newNode.offsetNode = this.offsetNode;
|
|
140
|
+
|
|
141
|
+
return newNode;
|
|
130
142
|
|
|
131
143
|
}
|
|
132
144
|
|
|
@@ -314,9 +326,42 @@ class PassNode extends TempNode {
|
|
|
314
326
|
*/
|
|
315
327
|
this._mrt = null;
|
|
316
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Layer object for configuring the camera that is used
|
|
331
|
+
* to produce the pass.
|
|
332
|
+
*
|
|
333
|
+
* @private
|
|
334
|
+
* @type {?Layers}
|
|
335
|
+
* @default null
|
|
336
|
+
*/
|
|
317
337
|
this._layers = null;
|
|
318
338
|
|
|
319
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Scales the resolution of the internal render target.
|
|
341
|
+
*
|
|
342
|
+
* @private
|
|
343
|
+
* @type {number}
|
|
344
|
+
* @default 1
|
|
345
|
+
*/
|
|
346
|
+
this._resolutionScale = 1;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Custom viewport definition.
|
|
350
|
+
*
|
|
351
|
+
* @private
|
|
352
|
+
* @type {?Vector4}
|
|
353
|
+
* @default null
|
|
354
|
+
*/
|
|
355
|
+
this._viewport = null;
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Custom scissor definition.
|
|
359
|
+
*
|
|
360
|
+
* @private
|
|
361
|
+
* @type {?Vector4}
|
|
362
|
+
* @default null
|
|
363
|
+
*/
|
|
364
|
+
this._scissor = null;
|
|
320
365
|
|
|
321
366
|
/**
|
|
322
367
|
* This flag can be used for type testing.
|
|
@@ -346,18 +391,45 @@ class PassNode extends TempNode {
|
|
|
346
391
|
|
|
347
392
|
}
|
|
348
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Sets the resolution scale for the pass.
|
|
396
|
+
* The resolution scale is a factor that is multiplied with the renderer's width and height.
|
|
397
|
+
*
|
|
398
|
+
* @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
|
|
399
|
+
* @return {PassNode} A reference to this pass.
|
|
400
|
+
*/
|
|
401
|
+
setResolutionScale( resolutionScale ) {
|
|
402
|
+
|
|
403
|
+
this._resolutionScale = resolutionScale;
|
|
404
|
+
|
|
405
|
+
return this;
|
|
406
|
+
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Gets the current resolution scale of the pass.
|
|
411
|
+
*
|
|
412
|
+
* @return {number} The current resolution scale. A value of `1` means full resolution.
|
|
413
|
+
*/
|
|
414
|
+
getResolutionScale() {
|
|
415
|
+
|
|
416
|
+
return this._resolutionScale;
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
349
420
|
/**
|
|
350
421
|
* Sets the resolution for the pass.
|
|
351
422
|
* The resolution is a factor that is multiplied with the renderer's width and height.
|
|
352
423
|
*
|
|
353
424
|
* @param {number} resolution - The resolution to set. A value of `1` means full resolution.
|
|
354
425
|
* @return {PassNode} A reference to this pass.
|
|
426
|
+
* @deprecated since r181. Use {@link PassNode#setResolutionScale `setResolutionScale()`} instead.
|
|
355
427
|
*/
|
|
356
|
-
setResolution( resolution ) {
|
|
428
|
+
setResolution( resolution ) { // @deprecated, r181
|
|
357
429
|
|
|
358
|
-
|
|
430
|
+
warn( 'PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead.' );
|
|
359
431
|
|
|
360
|
-
return this;
|
|
432
|
+
return this.setResolutionScale( resolution );
|
|
361
433
|
|
|
362
434
|
}
|
|
363
435
|
|
|
@@ -365,14 +437,22 @@ class PassNode extends TempNode {
|
|
|
365
437
|
* Gets the current resolution of the pass.
|
|
366
438
|
*
|
|
367
439
|
* @return {number} The current resolution. A value of `1` means full resolution.
|
|
368
|
-
* @
|
|
440
|
+
* @deprecated since r181. Use {@link PassNode#getResolutionScale `getResolutionScale()`} instead.
|
|
369
441
|
*/
|
|
370
|
-
getResolution() {
|
|
442
|
+
getResolution() { // @deprecated, r181
|
|
371
443
|
|
|
372
|
-
|
|
444
|
+
warn( 'PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead.' );
|
|
445
|
+
|
|
446
|
+
return this.getResolutionScale();
|
|
373
447
|
|
|
374
448
|
}
|
|
375
449
|
|
|
450
|
+
/**
|
|
451
|
+
* Sets the layer configuration that should be used when rendering the pass.
|
|
452
|
+
*
|
|
453
|
+
* @param {Layers} layers - The layers object to set.
|
|
454
|
+
* @return {PassNode} A reference to this pass.
|
|
455
|
+
*/
|
|
376
456
|
setLayers( layers ) {
|
|
377
457
|
|
|
378
458
|
this._layers = layers;
|
|
@@ -381,6 +461,11 @@ class PassNode extends TempNode {
|
|
|
381
461
|
|
|
382
462
|
}
|
|
383
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Gets the current layer configuration of the pass.
|
|
466
|
+
*
|
|
467
|
+
* @return {?Layers} .
|
|
468
|
+
*/
|
|
384
469
|
getLayers() {
|
|
385
470
|
|
|
386
471
|
return this._layers;
|
|
@@ -582,16 +667,35 @@ class PassNode extends TempNode {
|
|
|
582
667
|
|
|
583
668
|
}
|
|
584
669
|
|
|
585
|
-
|
|
670
|
+
/**
|
|
671
|
+
* Precompiles the pass.
|
|
672
|
+
*
|
|
673
|
+
* Note that this method must be called after the pass configuration is complete.
|
|
674
|
+
* So calls like `setMRT()` and `getTextureNode()` must proceed the precompilation.
|
|
675
|
+
*
|
|
676
|
+
* @async
|
|
677
|
+
* @param {Renderer} renderer - The renderer.
|
|
678
|
+
* @return {Promise} A Promise that resolves when the compile has been finished.
|
|
679
|
+
* @see {@link Renderer#compileAsync}
|
|
680
|
+
*/
|
|
681
|
+
async compileAsync( renderer ) {
|
|
586
682
|
|
|
587
|
-
|
|
683
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
684
|
+
const currentMRT = renderer.getMRT();
|
|
588
685
|
|
|
589
|
-
|
|
590
|
-
|
|
686
|
+
renderer.setRenderTarget( this.renderTarget );
|
|
687
|
+
renderer.setMRT( this._mrt );
|
|
591
688
|
|
|
592
|
-
|
|
689
|
+
await renderer.compileAsync( this.scene, this.camera );
|
|
593
690
|
|
|
594
|
-
|
|
691
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
692
|
+
renderer.setMRT( currentMRT );
|
|
693
|
+
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
setup( { renderer } ) {
|
|
697
|
+
|
|
698
|
+
this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
|
|
595
699
|
|
|
596
700
|
this.renderTarget.texture.type = renderer.getColorBufferType();
|
|
597
701
|
|
|
@@ -633,6 +737,7 @@ class PassNode extends TempNode {
|
|
|
633
737
|
|
|
634
738
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
635
739
|
const currentMRT = renderer.getMRT();
|
|
740
|
+
const currentAutoClear = renderer.autoClear;
|
|
636
741
|
const currentMask = camera.layers.mask;
|
|
637
742
|
|
|
638
743
|
this._cameraNear.value = camera.near;
|
|
@@ -652,11 +757,19 @@ class PassNode extends TempNode {
|
|
|
652
757
|
|
|
653
758
|
renderer.setRenderTarget( this.renderTarget );
|
|
654
759
|
renderer.setMRT( this._mrt );
|
|
760
|
+
renderer.autoClear = true;
|
|
761
|
+
|
|
762
|
+
const currentSceneName = scene.name;
|
|
763
|
+
|
|
764
|
+
scene.name = this.name ? this.name : scene.name;
|
|
655
765
|
|
|
656
766
|
renderer.render( scene, camera );
|
|
657
767
|
|
|
768
|
+
scene.name = currentSceneName;
|
|
769
|
+
|
|
658
770
|
renderer.setRenderTarget( currentRenderTarget );
|
|
659
771
|
renderer.setMRT( currentMRT );
|
|
772
|
+
renderer.autoClear = currentAutoClear;
|
|
660
773
|
|
|
661
774
|
camera.layers.mask = currentMask;
|
|
662
775
|
|
|
@@ -673,11 +786,87 @@ class PassNode extends TempNode {
|
|
|
673
786
|
this._width = width;
|
|
674
787
|
this._height = height;
|
|
675
788
|
|
|
676
|
-
const effectiveWidth = this._width * this._pixelRatio * this.
|
|
677
|
-
const effectiveHeight = this._height * this._pixelRatio * this.
|
|
789
|
+
const effectiveWidth = Math.floor( this._width * this._pixelRatio * this._resolutionScale );
|
|
790
|
+
const effectiveHeight = Math.floor( this._height * this._pixelRatio * this._resolutionScale );
|
|
678
791
|
|
|
679
792
|
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
680
793
|
|
|
794
|
+
if ( this._scissor !== null ) this.renderTarget.scissor.copy( this._scissor );
|
|
795
|
+
if ( this._viewport !== null ) this.renderTarget.viewport.copy( this._viewport );
|
|
796
|
+
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
* This method allows to define the pass's scissor rectangle. By default, the scissor rectangle is kept
|
|
801
|
+
* in sync with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
|
|
802
|
+
* with `null` as the single argument.
|
|
803
|
+
*
|
|
804
|
+
* @param {?(number | Vector4)} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
|
|
805
|
+
* Instead of passing four arguments, the method also works with a single four-dimensional vector.
|
|
806
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
|
|
807
|
+
* @param {number} width - The width of the scissor box in logical pixel unit.
|
|
808
|
+
* @param {number} height - The height of the scissor box in logical pixel unit.
|
|
809
|
+
*/
|
|
810
|
+
setScissor( x, y, width, height ) {
|
|
811
|
+
|
|
812
|
+
if ( x === null ) {
|
|
813
|
+
|
|
814
|
+
this._scissor = null;
|
|
815
|
+
|
|
816
|
+
} else {
|
|
817
|
+
|
|
818
|
+
if ( this._scissor === null ) this._scissor = new Vector4();
|
|
819
|
+
|
|
820
|
+
if ( x.isVector4 ) {
|
|
821
|
+
|
|
822
|
+
this._scissor.copy( x );
|
|
823
|
+
|
|
824
|
+
} else {
|
|
825
|
+
|
|
826
|
+
this._scissor.set( x, y, width, height );
|
|
827
|
+
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
this._scissor.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
831
|
+
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* This method allows to define the pass's viewport. By default, the viewport is kept in sync
|
|
838
|
+
* with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
|
|
839
|
+
* with `null` as the single argument.
|
|
840
|
+
*
|
|
841
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
842
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
843
|
+
* @param {number} width - The width of the viewport in logical pixel unit.
|
|
844
|
+
* @param {number} height - The height of the viewport in logical pixel unit.
|
|
845
|
+
*/
|
|
846
|
+
setViewport( x, y, width, height ) {
|
|
847
|
+
|
|
848
|
+
if ( x === null ) {
|
|
849
|
+
|
|
850
|
+
this._viewport = null;
|
|
851
|
+
|
|
852
|
+
} else {
|
|
853
|
+
|
|
854
|
+
if ( this._viewport === null ) this._viewport = new Vector4();
|
|
855
|
+
|
|
856
|
+
if ( x.isVector4 ) {
|
|
857
|
+
|
|
858
|
+
this._viewport.copy( x );
|
|
859
|
+
|
|
860
|
+
} else {
|
|
861
|
+
|
|
862
|
+
this._viewport.set( x, y, width, height );
|
|
863
|
+
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
this._viewport.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
867
|
+
|
|
868
|
+
}
|
|
869
|
+
|
|
681
870
|
}
|
|
682
871
|
|
|
683
872
|
/**
|
|
@@ -56,9 +56,10 @@ class RenderOutputNode extends TempNode {
|
|
|
56
56
|
/**
|
|
57
57
|
* The tone mapping type.
|
|
58
58
|
*
|
|
59
|
+
* @private
|
|
59
60
|
* @type {?number}
|
|
60
61
|
*/
|
|
61
|
-
this.
|
|
62
|
+
this._toneMapping = toneMapping;
|
|
62
63
|
|
|
63
64
|
/**
|
|
64
65
|
* The output color space.
|
|
@@ -78,13 +79,38 @@ class RenderOutputNode extends TempNode {
|
|
|
78
79
|
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Sets the tone mapping type.
|
|
84
|
+
*
|
|
85
|
+
* @param {number} value - The tone mapping type.
|
|
86
|
+
* @return {ToneMappingNode} A reference to this node.
|
|
87
|
+
*/
|
|
88
|
+
setToneMapping( value ) {
|
|
89
|
+
|
|
90
|
+
this._toneMapping = value;
|
|
91
|
+
|
|
92
|
+
return this;
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Gets the tone mapping type.
|
|
98
|
+
*
|
|
99
|
+
* @returns {number} The tone mapping type.
|
|
100
|
+
*/
|
|
101
|
+
getToneMapping() {
|
|
102
|
+
|
|
103
|
+
return this._toneMapping;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
81
107
|
setup( { context } ) {
|
|
82
108
|
|
|
83
109
|
let outputNode = this.colorNode || context.color;
|
|
84
110
|
|
|
85
111
|
// tone mapping
|
|
86
112
|
|
|
87
|
-
const toneMapping = ( this.
|
|
113
|
+
const toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;
|
|
88
114
|
const outputColorSpace = ( this.outputColorSpace !== null ? this.outputColorSpace : context.outputColorSpace ) || NoColorSpace;
|
|
89
115
|
|
|
90
116
|
if ( toneMapping !== NoToneMapping ) {
|
|
@@ -5,8 +5,9 @@ import { Fn, nodeImmutable, vec2 } from '../tsl/TSLBase.js';
|
|
|
5
5
|
|
|
6
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
import { warn } from '../../utils.js';
|
|
8
9
|
|
|
9
|
-
let
|
|
10
|
+
let _screenSizeVec, _viewportVec;
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* This node provides a collection of screen related metrics.
|
|
@@ -26,7 +27,7 @@ class ScreenNode extends Node {
|
|
|
26
27
|
/**
|
|
27
28
|
* Constructs a new screen node.
|
|
28
29
|
*
|
|
29
|
-
* @param {('coordinate'|'viewport'|'size'|'uv')} scope - The node's scope.
|
|
30
|
+
* @param {('coordinate'|'viewport'|'size'|'uv'|'dpr')} scope - The node's scope.
|
|
30
31
|
*/
|
|
31
32
|
constructor( scope ) {
|
|
32
33
|
|
|
@@ -39,11 +40,20 @@ class ScreenNode extends Node {
|
|
|
39
40
|
* - `ScreenNode.VIEWPORT`: The current viewport defined as a four-dimensional vector.
|
|
40
41
|
* - `ScreenNode.SIZE`: The dimensions of the current bound framebuffer.
|
|
41
42
|
* - `ScreenNode.UV`: Normalized coordinates.
|
|
43
|
+
* - `ScreenNode.DPR`: Device pixel ratio.
|
|
42
44
|
*
|
|
43
|
-
* @type {('coordinate'|'viewport'|'size'|'uv')}
|
|
45
|
+
* @type {('coordinate'|'viewport'|'size'|'uv'|'dpr')}
|
|
44
46
|
*/
|
|
45
47
|
this.scope = scope;
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This output node.
|
|
51
|
+
*
|
|
52
|
+
* @type {?Node}
|
|
53
|
+
* @default null
|
|
54
|
+
*/
|
|
55
|
+
this._output = null;
|
|
56
|
+
|
|
47
57
|
/**
|
|
48
58
|
* This flag can be used for type testing.
|
|
49
59
|
*
|
|
@@ -58,10 +68,11 @@ class ScreenNode extends Node {
|
|
|
58
68
|
/**
|
|
59
69
|
* This method is overwritten since the node type depends on the selected scope.
|
|
60
70
|
*
|
|
61
|
-
* @return {('vec2'|'vec4')} The node type.
|
|
71
|
+
* @return {('float'|'vec2'|'vec4')} The node type.
|
|
62
72
|
*/
|
|
63
73
|
getNodeType() {
|
|
64
74
|
|
|
75
|
+
if ( this.scope === ScreenNode.DPR ) return 'float';
|
|
65
76
|
if ( this.scope === ScreenNode.VIEWPORT ) return 'vec4';
|
|
66
77
|
else return 'vec2';
|
|
67
78
|
|
|
@@ -76,7 +87,7 @@ class ScreenNode extends Node {
|
|
|
76
87
|
|
|
77
88
|
let updateType = NodeUpdateType.NONE;
|
|
78
89
|
|
|
79
|
-
if ( this.scope === ScreenNode.SIZE || this.scope === ScreenNode.VIEWPORT ) {
|
|
90
|
+
if ( this.scope === ScreenNode.SIZE || this.scope === ScreenNode.VIEWPORT || this.scope === ScreenNode.DPR ) {
|
|
80
91
|
|
|
81
92
|
updateType = NodeUpdateType.RENDER;
|
|
82
93
|
|
|
@@ -102,26 +113,30 @@ class ScreenNode extends Node {
|
|
|
102
113
|
|
|
103
114
|
if ( renderTarget !== null ) {
|
|
104
115
|
|
|
105
|
-
|
|
116
|
+
_viewportVec.copy( renderTarget.viewport );
|
|
106
117
|
|
|
107
118
|
} else {
|
|
108
119
|
|
|
109
|
-
renderer.getViewport(
|
|
120
|
+
renderer.getViewport( _viewportVec );
|
|
110
121
|
|
|
111
|
-
|
|
122
|
+
_viewportVec.multiplyScalar( renderer.getPixelRatio() );
|
|
112
123
|
|
|
113
124
|
}
|
|
114
125
|
|
|
126
|
+
} else if ( this.scope === ScreenNode.DPR ) {
|
|
127
|
+
|
|
128
|
+
this._output.value = renderer.getPixelRatio();
|
|
129
|
+
|
|
115
130
|
} else {
|
|
116
131
|
|
|
117
132
|
if ( renderTarget !== null ) {
|
|
118
133
|
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
_screenSizeVec.width = renderTarget.width;
|
|
135
|
+
_screenSizeVec.height = renderTarget.height;
|
|
121
136
|
|
|
122
137
|
} else {
|
|
123
138
|
|
|
124
|
-
renderer.getDrawingBufferSize(
|
|
139
|
+
renderer.getDrawingBufferSize( _screenSizeVec );
|
|
125
140
|
|
|
126
141
|
}
|
|
127
142
|
|
|
@@ -137,11 +152,15 @@ class ScreenNode extends Node {
|
|
|
137
152
|
|
|
138
153
|
if ( scope === ScreenNode.SIZE ) {
|
|
139
154
|
|
|
140
|
-
output = uniform(
|
|
155
|
+
output = uniform( _screenSizeVec || ( _screenSizeVec = new Vector2() ) );
|
|
141
156
|
|
|
142
157
|
} else if ( scope === ScreenNode.VIEWPORT ) {
|
|
143
158
|
|
|
144
|
-
output = uniform(
|
|
159
|
+
output = uniform( _viewportVec || ( _viewportVec = new Vector4() ) );
|
|
160
|
+
|
|
161
|
+
} else if ( scope === ScreenNode.DPR ) {
|
|
162
|
+
|
|
163
|
+
output = uniform( 1 );
|
|
145
164
|
|
|
146
165
|
} else {
|
|
147
166
|
|
|
@@ -149,6 +168,8 @@ class ScreenNode extends Node {
|
|
|
149
168
|
|
|
150
169
|
}
|
|
151
170
|
|
|
171
|
+
this._output = output;
|
|
172
|
+
|
|
152
173
|
return output;
|
|
153
174
|
|
|
154
175
|
}
|
|
@@ -183,11 +204,20 @@ ScreenNode.COORDINATE = 'coordinate';
|
|
|
183
204
|
ScreenNode.VIEWPORT = 'viewport';
|
|
184
205
|
ScreenNode.SIZE = 'size';
|
|
185
206
|
ScreenNode.UV = 'uv';
|
|
207
|
+
ScreenNode.DPR = 'dpr';
|
|
186
208
|
|
|
187
209
|
export default ScreenNode;
|
|
188
210
|
|
|
189
211
|
// Screen
|
|
190
212
|
|
|
213
|
+
/**
|
|
214
|
+
* TSL object that represents the current DPR.
|
|
215
|
+
*
|
|
216
|
+
* @tsl
|
|
217
|
+
* @type {ScreenNode<float>}
|
|
218
|
+
*/
|
|
219
|
+
export const screenDPR = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.DPR );
|
|
220
|
+
|
|
191
221
|
/**
|
|
192
222
|
* TSL object that represents normalized screen coordinates, unitless in `[0, 1]`.
|
|
193
223
|
*
|
|
@@ -253,34 +283,8 @@ export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
|
|
|
253
283
|
*/
|
|
254
284
|
export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
|
|
255
285
|
|
|
256
|
-
|
|
286
|
+
warn( 'TSL: "viewportResolution" is deprecated. Use "screenSize" instead.' );
|
|
257
287
|
|
|
258
288
|
return screenSize;
|
|
259
289
|
|
|
260
290
|
}, 'vec2' ).once() )();
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* @tsl
|
|
264
|
-
* @deprecated since r168. Use {@link screenUV} instead.
|
|
265
|
-
* @type {Node<vec2>}
|
|
266
|
-
*/
|
|
267
|
-
export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
268
|
-
|
|
269
|
-
console.warn( 'THREE.TSL: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
|
|
270
|
-
|
|
271
|
-
return screenUV;
|
|
272
|
-
|
|
273
|
-
}, 'vec2' ).once() )();
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* @tsl
|
|
277
|
-
* @deprecated since r168. Use `screenUV.flipY()` instead.
|
|
278
|
-
* @type {Node<vec2>}
|
|
279
|
-
*/
|
|
280
|
-
export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
281
|
-
|
|
282
|
-
console.warn( 'THREE.TSL: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
|
|
283
|
-
|
|
284
|
-
return screenUV.flipY();
|
|
285
|
-
|
|
286
|
-
}, 'vec2' ).once() )();
|