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,452 +0,0 @@
|
|
|
1
|
-
import { Color, Vector2, NearestFilter, Matrix4, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
|
|
2
|
-
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';
|
|
3
|
-
|
|
4
|
-
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
|
-
const _size = /*@__PURE__*/ new Vector2();
|
|
6
|
-
|
|
7
|
-
let _rendererState;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* A special render pass node that renders the scene with TRAA (Temporal Reprojection Anti-Aliasing).
|
|
12
|
-
*
|
|
13
|
-
* Note: The current implementation does not yet support MRT setups.
|
|
14
|
-
*
|
|
15
|
-
* References:
|
|
16
|
-
* - {@link https://alextardif.com/TAA.html}
|
|
17
|
-
* - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
|
|
18
|
-
*
|
|
19
|
-
* @augments PassNode
|
|
20
|
-
* @three_import import { traaPass } from 'three/addons/tsl/display/TRAAPassNode.js';
|
|
21
|
-
*/
|
|
22
|
-
class TRAAPassNode extends PassNode {
|
|
23
|
-
|
|
24
|
-
static get type() {
|
|
25
|
-
|
|
26
|
-
return 'TRAAPassNode';
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Constructs a new TRAA pass node.
|
|
32
|
-
*
|
|
33
|
-
* @param {Scene} scene - The scene to render.
|
|
34
|
-
* @param {Camera} camera - The camera to render the scene with.
|
|
35
|
-
*/
|
|
36
|
-
constructor( scene, camera ) {
|
|
37
|
-
|
|
38
|
-
super( PassNode.COLOR, scene, camera );
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* This flag can be used for type testing.
|
|
42
|
-
*
|
|
43
|
-
* @type {boolean}
|
|
44
|
-
* @readonly
|
|
45
|
-
* @default true
|
|
46
|
-
*/
|
|
47
|
-
this.isTRAAPassNode = true;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The clear color of the pass.
|
|
51
|
-
*
|
|
52
|
-
* @type {Color}
|
|
53
|
-
* @default 0x000000
|
|
54
|
-
*/
|
|
55
|
-
this.clearColor = new Color( 0x000000 );
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* The clear alpha of the pass.
|
|
59
|
-
*
|
|
60
|
-
* @type {number}
|
|
61
|
-
* @default 0
|
|
62
|
-
*/
|
|
63
|
-
this.clearAlpha = 0;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* The jitter index selects the current camera offset value.
|
|
67
|
-
*
|
|
68
|
-
* @private
|
|
69
|
-
* @type {number}
|
|
70
|
-
* @default 0
|
|
71
|
-
*/
|
|
72
|
-
this._jitterIndex = 0;
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Used to save the original/unjittered projection matrix.
|
|
76
|
-
*
|
|
77
|
-
* @private
|
|
78
|
-
* @type {Matrix4}
|
|
79
|
-
*/
|
|
80
|
-
this._originalProjectionMatrix = new Matrix4();
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* A uniform node holding the inverse resolution value.
|
|
84
|
-
*
|
|
85
|
-
* @private
|
|
86
|
-
* @type {UniformNode<vec2>}
|
|
87
|
-
*/
|
|
88
|
-
this._invSize = uniform( new Vector2() );
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* The render target that holds the current sample.
|
|
92
|
-
*
|
|
93
|
-
* @private
|
|
94
|
-
* @type {?RenderTarget}
|
|
95
|
-
* @default null
|
|
96
|
-
*/
|
|
97
|
-
this._sampleRenderTarget = null;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* The render target that represents the history of frame data.
|
|
101
|
-
*
|
|
102
|
-
* @private
|
|
103
|
-
* @type {?RenderTarget}
|
|
104
|
-
* @default null
|
|
105
|
-
*/
|
|
106
|
-
this._historyRenderTarget = null;
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Material used for the resolve step.
|
|
110
|
-
*
|
|
111
|
-
* @private
|
|
112
|
-
* @type {NodeMaterial}
|
|
113
|
-
*/
|
|
114
|
-
this._resolveMaterial = new NodeMaterial();
|
|
115
|
-
this._resolveMaterial.name = 'TRAA.Resolve';
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Sets the size of the effect.
|
|
121
|
-
*
|
|
122
|
-
* @param {number} width - The width of the effect.
|
|
123
|
-
* @param {number} height - The height of the effect.
|
|
124
|
-
* @return {boolean} Whether the TRAA needs a restart or not. That is required after a resize since buffer data with different sizes can't be resolved.
|
|
125
|
-
*/
|
|
126
|
-
setSize( width, height ) {
|
|
127
|
-
|
|
128
|
-
super.setSize( width, height );
|
|
129
|
-
|
|
130
|
-
let needsRestart = false;
|
|
131
|
-
|
|
132
|
-
if ( this.renderTarget.width !== this._sampleRenderTarget.width || this.renderTarget.height !== this._sampleRenderTarget.height ) {
|
|
133
|
-
|
|
134
|
-
this._sampleRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
|
|
135
|
-
this._historyRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
|
|
136
|
-
|
|
137
|
-
this._invSize.value.set( 1 / this.renderTarget.width, 1 / this.renderTarget.height );
|
|
138
|
-
|
|
139
|
-
needsRestart = true;
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return needsRestart;
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* This method is used to render the effect once per frame.
|
|
149
|
-
*
|
|
150
|
-
* @param {NodeFrame} frame - The current node frame.
|
|
151
|
-
*/
|
|
152
|
-
updateBefore( frame ) {
|
|
153
|
-
|
|
154
|
-
const { renderer } = frame;
|
|
155
|
-
const { scene, camera } = this;
|
|
156
|
-
|
|
157
|
-
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
158
|
-
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
this._pixelRatio = renderer.getPixelRatio();
|
|
162
|
-
const size = renderer.getSize( _size );
|
|
163
|
-
|
|
164
|
-
const needsRestart = this.setSize( size.width, size.height );
|
|
165
|
-
|
|
166
|
-
// save original/unjittered projection matrix for velocity pass
|
|
167
|
-
|
|
168
|
-
camera.updateProjectionMatrix();
|
|
169
|
-
this._originalProjectionMatrix.copy( camera.projectionMatrix );
|
|
170
|
-
|
|
171
|
-
// camera configuration
|
|
172
|
-
|
|
173
|
-
this._cameraNear.value = camera.near;
|
|
174
|
-
this._cameraFar.value = camera.far;
|
|
175
|
-
|
|
176
|
-
// configure jitter as view offset
|
|
177
|
-
|
|
178
|
-
const viewOffset = {
|
|
179
|
-
|
|
180
|
-
fullWidth: this.renderTarget.width,
|
|
181
|
-
fullHeight: this.renderTarget.height,
|
|
182
|
-
offsetX: 0,
|
|
183
|
-
offsetY: 0,
|
|
184
|
-
width: this.renderTarget.width,
|
|
185
|
-
height: this.renderTarget.height
|
|
186
|
-
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const originalViewOffset = Object.assign( {}, camera.view );
|
|
190
|
-
|
|
191
|
-
if ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );
|
|
192
|
-
|
|
193
|
-
const jitterOffset = _JitterVectors[ this._jitterIndex ];
|
|
194
|
-
|
|
195
|
-
camera.setViewOffset(
|
|
196
|
-
|
|
197
|
-
viewOffset.fullWidth, viewOffset.fullHeight,
|
|
198
|
-
|
|
199
|
-
viewOffset.offsetX + jitterOffset[ 0 ] * 0.0625, viewOffset.offsetY + jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16
|
|
200
|
-
|
|
201
|
-
viewOffset.width, viewOffset.height
|
|
202
|
-
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
// configure velocity
|
|
206
|
-
|
|
207
|
-
const mrt = this.getMRT();
|
|
208
|
-
const velocityOutput = mrt.get( 'velocity' );
|
|
209
|
-
|
|
210
|
-
if ( velocityOutput !== undefined ) {
|
|
211
|
-
|
|
212
|
-
velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );
|
|
213
|
-
|
|
214
|
-
} else {
|
|
215
|
-
|
|
216
|
-
throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// render sample
|
|
221
|
-
|
|
222
|
-
renderer.setMRT( mrt );
|
|
223
|
-
|
|
224
|
-
renderer.setClearColor( this.clearColor, this.clearAlpha );
|
|
225
|
-
renderer.setRenderTarget( this._sampleRenderTarget );
|
|
226
|
-
renderer.render( scene, camera );
|
|
227
|
-
|
|
228
|
-
renderer.setRenderTarget( null );
|
|
229
|
-
renderer.setMRT( null );
|
|
230
|
-
|
|
231
|
-
// every time when the dimensions change we need fresh history data. Copy the sample
|
|
232
|
-
// into the history and final render target (no AA happens at that point).
|
|
233
|
-
|
|
234
|
-
if ( needsRestart === true ) {
|
|
235
|
-
|
|
236
|
-
// bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
|
|
237
|
-
|
|
238
|
-
renderer.setRenderTarget( this._historyRenderTarget );
|
|
239
|
-
renderer.clear();
|
|
240
|
-
|
|
241
|
-
renderer.setRenderTarget( this.renderTarget );
|
|
242
|
-
renderer.clear();
|
|
243
|
-
|
|
244
|
-
renderer.setRenderTarget( null );
|
|
245
|
-
|
|
246
|
-
renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this._historyRenderTarget.texture );
|
|
247
|
-
renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this.renderTarget.texture );
|
|
248
|
-
|
|
249
|
-
} else {
|
|
250
|
-
|
|
251
|
-
// resolve
|
|
252
|
-
|
|
253
|
-
renderer.setRenderTarget( this.renderTarget );
|
|
254
|
-
_quadMesh.material = this._resolveMaterial;
|
|
255
|
-
_quadMesh.render( renderer );
|
|
256
|
-
renderer.setRenderTarget( null );
|
|
257
|
-
|
|
258
|
-
// update history
|
|
259
|
-
|
|
260
|
-
renderer.copyTextureToTexture( this.renderTarget.texture, this._historyRenderTarget.texture );
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// copy depth
|
|
265
|
-
|
|
266
|
-
renderer.copyTextureToTexture( this._sampleRenderTarget.depthTexture, this.renderTarget.depthTexture );
|
|
267
|
-
|
|
268
|
-
// update jitter index
|
|
269
|
-
|
|
270
|
-
this._jitterIndex ++;
|
|
271
|
-
this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
|
|
272
|
-
|
|
273
|
-
// restore
|
|
274
|
-
|
|
275
|
-
if ( originalViewOffset.enabled ) {
|
|
276
|
-
|
|
277
|
-
camera.setViewOffset(
|
|
278
|
-
|
|
279
|
-
originalViewOffset.fullWidth, originalViewOffset.fullHeight,
|
|
280
|
-
|
|
281
|
-
originalViewOffset.offsetX, originalViewOffset.offsetY,
|
|
282
|
-
|
|
283
|
-
originalViewOffset.width, originalViewOffset.height
|
|
284
|
-
|
|
285
|
-
);
|
|
286
|
-
|
|
287
|
-
} else {
|
|
288
|
-
|
|
289
|
-
camera.clearViewOffset();
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
velocityOutput.setProjectionMatrix( null );
|
|
294
|
-
|
|
295
|
-
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* This method is used to setup the effect's render targets and TSL code.
|
|
301
|
-
*
|
|
302
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
303
|
-
* @return {PassTextureNode}
|
|
304
|
-
*/
|
|
305
|
-
setup( builder ) {
|
|
306
|
-
|
|
307
|
-
if ( this._sampleRenderTarget === null ) {
|
|
308
|
-
|
|
309
|
-
this._sampleRenderTarget = this.renderTarget.clone();
|
|
310
|
-
this._historyRenderTarget = this.renderTarget.clone();
|
|
311
|
-
|
|
312
|
-
this._sampleRenderTarget.texture.minFiler = NearestFilter;
|
|
313
|
-
this._sampleRenderTarget.texture.magFilter = NearestFilter;
|
|
314
|
-
|
|
315
|
-
const velocityTarget = this._sampleRenderTarget.texture.clone();
|
|
316
|
-
velocityTarget.isRenderTargetTexture = true;
|
|
317
|
-
velocityTarget.name = 'velocity';
|
|
318
|
-
|
|
319
|
-
this._sampleRenderTarget.textures.push( velocityTarget ); // for MRT
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// textures
|
|
324
|
-
|
|
325
|
-
const historyTexture = texture( this._historyRenderTarget.texture );
|
|
326
|
-
const sampleTexture = texture( this._sampleRenderTarget.textures[ 0 ] );
|
|
327
|
-
const velocityTexture = texture( this._sampleRenderTarget.textures[ 1 ] );
|
|
328
|
-
const depthTexture = texture( this._sampleRenderTarget.depthTexture );
|
|
329
|
-
|
|
330
|
-
const resolve = Fn( () => {
|
|
331
|
-
|
|
332
|
-
const uvNode = uv();
|
|
333
|
-
|
|
334
|
-
const minColor = vec4( 10000 ).toVar();
|
|
335
|
-
const maxColor = vec4( - 10000 ).toVar();
|
|
336
|
-
const closestDepth = float( 1 ).toVar();
|
|
337
|
-
const closestDepthPixelPosition = vec2( 0 ).toVar();
|
|
338
|
-
|
|
339
|
-
// sample a 3x3 neighborhood to create a box in color space
|
|
340
|
-
// clamping the history color with the resulting min/max colors mitigates ghosting
|
|
341
|
-
|
|
342
|
-
Loop( { start: int( - 1 ), end: int( 1 ), type: 'int', condition: '<=', name: 'x' }, ( { x } ) => {
|
|
343
|
-
|
|
344
|
-
Loop( { start: int( - 1 ), end: int( 1 ), type: 'int', condition: '<=', name: 'y' }, ( { y } ) => {
|
|
345
|
-
|
|
346
|
-
const uvNeighbor = uvNode.add( vec2( float( x ), float( y ) ).mul( this._invSize ) ).toVar();
|
|
347
|
-
const colorNeighbor = max( vec4( 0 ), sampleTexture.sample( uvNeighbor ) ).toVar(); // use max() to avoid propagate garbage values
|
|
348
|
-
|
|
349
|
-
minColor.assign( min( minColor, colorNeighbor ) );
|
|
350
|
-
maxColor.assign( max( maxColor, colorNeighbor ) );
|
|
351
|
-
|
|
352
|
-
const currentDepth = depthTexture.sample( uvNeighbor ).r.toVar();
|
|
353
|
-
|
|
354
|
-
// find the sample position of the closest depth in the neighborhood (used for velocity)
|
|
355
|
-
|
|
356
|
-
If( currentDepth.lessThan( closestDepth ), () => {
|
|
357
|
-
|
|
358
|
-
closestDepth.assign( currentDepth );
|
|
359
|
-
closestDepthPixelPosition.assign( uvNeighbor );
|
|
360
|
-
|
|
361
|
-
} );
|
|
362
|
-
|
|
363
|
-
} );
|
|
364
|
-
|
|
365
|
-
} );
|
|
366
|
-
|
|
367
|
-
// sampling/reprojection
|
|
368
|
-
|
|
369
|
-
const offset = velocityTexture.sample( closestDepthPixelPosition ).xy.mul( vec2( 0.5, - 0.5 ) ); // NDC to uv offset
|
|
370
|
-
|
|
371
|
-
const currentColor = sampleTexture.sample( uvNode );
|
|
372
|
-
const historyColor = historyTexture.sample( uvNode.sub( offset ) );
|
|
373
|
-
|
|
374
|
-
// clamping
|
|
375
|
-
|
|
376
|
-
const clampedHistoryColor = clamp( historyColor, minColor, maxColor );
|
|
377
|
-
|
|
378
|
-
// flicker reduction based on luminance weighing
|
|
379
|
-
|
|
380
|
-
const currentWeight = float( 0.05 ).toVar();
|
|
381
|
-
const historyWeight = currentWeight.oneMinus().toVar();
|
|
382
|
-
|
|
383
|
-
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
|
|
384
|
-
const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
|
|
385
|
-
|
|
386
|
-
const luminanceCurrent = luminance( compressedCurrent.rgb );
|
|
387
|
-
const luminanceHistory = luminance( compressedHistory.rgb );
|
|
388
|
-
|
|
389
|
-
currentWeight.mulAssign( float( 1.0 ).div( luminanceCurrent.add( 1 ) ) );
|
|
390
|
-
historyWeight.mulAssign( float( 1.0 ).div( luminanceHistory.add( 1 ) ) );
|
|
391
|
-
|
|
392
|
-
return add( currentColor.mul( currentWeight ), clampedHistoryColor.mul( historyWeight ) ).div( max( currentWeight.add( historyWeight ), 0.00001 ) );
|
|
393
|
-
|
|
394
|
-
} );
|
|
395
|
-
|
|
396
|
-
// materials
|
|
397
|
-
|
|
398
|
-
this._resolveMaterial.fragmentNode = resolve();
|
|
399
|
-
|
|
400
|
-
return super.setup( builder );
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Frees internal resources. This method should be called
|
|
406
|
-
* when the effect is no longer required.
|
|
407
|
-
*/
|
|
408
|
-
dispose() {
|
|
409
|
-
|
|
410
|
-
super.dispose();
|
|
411
|
-
|
|
412
|
-
if ( this._sampleRenderTarget !== null ) {
|
|
413
|
-
|
|
414
|
-
this._sampleRenderTarget.dispose();
|
|
415
|
-
this._historyRenderTarget.dispose();
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
this._resolveMaterial.dispose();
|
|
420
|
-
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
export default TRAAPassNode;
|
|
426
|
-
|
|
427
|
-
// These jitter vectors are specified in integers because it is easier.
|
|
428
|
-
// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)
|
|
429
|
-
// before being used, thus these integers need to be scaled by 1/16.
|
|
430
|
-
//
|
|
431
|
-
// Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
|
|
432
|
-
const _JitterVectors = [
|
|
433
|
-
[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],
|
|
434
|
-
[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],
|
|
435
|
-
[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],
|
|
436
|
-
[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],
|
|
437
|
-
[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],
|
|
438
|
-
[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],
|
|
439
|
-
[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],
|
|
440
|
-
[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]
|
|
441
|
-
];
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* TSL function for creating a TRAA pass node for Temporal Reprojection Anti-Aliasing.
|
|
445
|
-
*
|
|
446
|
-
* @tsl
|
|
447
|
-
* @function
|
|
448
|
-
* @param {Scene} scene - The scene to render.
|
|
449
|
-
* @param {Camera} camera - The camera to render the scene with.
|
|
450
|
-
* @returns {TRAAPassNode}
|
|
451
|
-
*/
|
|
452
|
-
export const traaPass = ( scene, camera ) => nodeObject( new TRAAPassNode( scene, camera ) );
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { positionWorldDirection } from '../accessors/Position.js';
|
|
3
|
-
import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Can be used to compute texture coordinates for projecting an
|
|
7
|
-
* equirectangular texture onto a mesh for using it as the scene's
|
|
8
|
-
* background.
|
|
9
|
-
*
|
|
10
|
-
* ```js
|
|
11
|
-
* scene.backgroundNode = texture( equirectTexture, equirectUV() );
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* @augments TempNode
|
|
15
|
-
*/
|
|
16
|
-
class EquirectUVNode extends TempNode {
|
|
17
|
-
|
|
18
|
-
static get type() {
|
|
19
|
-
|
|
20
|
-
return 'EquirectUVNode';
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Constructs a new equirect uv node.
|
|
26
|
-
*
|
|
27
|
-
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
28
|
-
*/
|
|
29
|
-
constructor( dirNode = positionWorldDirection ) {
|
|
30
|
-
|
|
31
|
-
super( 'vec2' );
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* A direction vector for sampling why is by default `positionWorldDirection`.
|
|
35
|
-
*
|
|
36
|
-
* @type {Node<vec3>}
|
|
37
|
-
*/
|
|
38
|
-
this.dirNode = dirNode;
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
setup() {
|
|
43
|
-
|
|
44
|
-
const dir = this.dirNode;
|
|
45
|
-
|
|
46
|
-
const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
|
|
47
|
-
const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
|
|
48
|
-
|
|
49
|
-
return vec2( u, v );
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export default EquirectUVNode;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* TSL function for creating an equirect uv node.
|
|
59
|
-
*
|
|
60
|
-
* @tsl
|
|
61
|
-
* @function
|
|
62
|
-
* @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
63
|
-
* @returns {EquirectUVNode}
|
|
64
|
-
*/
|
|
65
|
-
export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode ).setParameterLength( 0, 1 );
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { transformedNormalView } from '../accessors/Normal.js';
|
|
3
|
-
import { positionViewDirection } from '../accessors/Position.js';
|
|
4
|
-
import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Can be used to compute texture coordinates for projecting a
|
|
8
|
-
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
9
|
-
*
|
|
10
|
-
* @augments TempNode
|
|
11
|
-
*/
|
|
12
|
-
class MatcapUVNode extends TempNode {
|
|
13
|
-
|
|
14
|
-
static get type() {
|
|
15
|
-
|
|
16
|
-
return 'MatcapUVNode';
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Constructs a new matcap uv node.
|
|
22
|
-
*/
|
|
23
|
-
constructor() {
|
|
24
|
-
|
|
25
|
-
super( 'vec2' );
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
setup() {
|
|
30
|
-
|
|
31
|
-
const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
|
|
32
|
-
const y = positionViewDirection.cross( x );
|
|
33
|
-
|
|
34
|
-
return vec2( x.dot( transformedNormalView ), y.dot( transformedNormalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export default MatcapUVNode;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* TSL function for creating a matcap uv node.
|
|
44
|
-
*
|
|
45
|
-
* @tsl
|
|
46
|
-
* @function
|
|
47
|
-
* @returns {MatcapUVNode}
|
|
48
|
-
*/
|
|
49
|
-
export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import Node from '../core/Node.js';
|
|
2
|
-
import { add } from '../math/OperatorNode.js';
|
|
3
|
-
import { normalLocal } from '../accessors/Normal.js';
|
|
4
|
-
import { positionLocal } from '../accessors/Position.js';
|
|
5
|
-
import { texture } from '../accessors/TextureNode.js';
|
|
6
|
-
import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Can be used for triplanar texture mapping.
|
|
10
|
-
*
|
|
11
|
-
* ```js
|
|
12
|
-
* material.colorNode = triplanarTexture( texture( diffuseMap ) );
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* @augments Node
|
|
16
|
-
*/
|
|
17
|
-
class TriplanarTexturesNode extends Node {
|
|
18
|
-
|
|
19
|
-
static get type() {
|
|
20
|
-
|
|
21
|
-
return 'TriplanarTexturesNode';
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Constructs a new triplanar textures node.
|
|
27
|
-
*
|
|
28
|
-
* @param {Node} textureXNode - First texture node.
|
|
29
|
-
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
30
|
-
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
31
|
-
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
32
|
-
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
33
|
-
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
34
|
-
*/
|
|
35
|
-
constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
|
|
36
|
-
|
|
37
|
-
super( 'vec4' );
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* First texture node.
|
|
41
|
-
*
|
|
42
|
-
* @type {Node}
|
|
43
|
-
*/
|
|
44
|
-
this.textureXNode = textureXNode;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
48
|
-
*
|
|
49
|
-
* @type {?Node}
|
|
50
|
-
* @default null
|
|
51
|
-
*/
|
|
52
|
-
this.textureYNode = textureYNode;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
56
|
-
*
|
|
57
|
-
* @type {?Node}
|
|
58
|
-
* @default null
|
|
59
|
-
*/
|
|
60
|
-
this.textureZNode = textureZNode;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* The scale node.
|
|
64
|
-
*
|
|
65
|
-
* @type {Node<float>}
|
|
66
|
-
* @default float(1)
|
|
67
|
-
*/
|
|
68
|
-
this.scaleNode = scaleNode;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Vertex positions in local space.
|
|
72
|
-
*
|
|
73
|
-
* @type {Node<vec3>}
|
|
74
|
-
* @default positionLocal
|
|
75
|
-
*/
|
|
76
|
-
this.positionNode = positionNode;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Normals in local space.
|
|
80
|
-
*
|
|
81
|
-
* @type {Node<vec3>}
|
|
82
|
-
* @default normalLocal
|
|
83
|
-
*/
|
|
84
|
-
this.normalNode = normalNode;
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
setup() {
|
|
89
|
-
|
|
90
|
-
const { textureXNode, textureYNode, textureZNode, scaleNode, positionNode, normalNode } = this;
|
|
91
|
-
|
|
92
|
-
// Ref: https://github.com/keijiro/StandardTriplanar
|
|
93
|
-
|
|
94
|
-
// Blending factor of triplanar mapping
|
|
95
|
-
let bf = normalNode.abs().normalize();
|
|
96
|
-
bf = bf.div( bf.dot( vec3( 1.0 ) ) );
|
|
97
|
-
|
|
98
|
-
// Triplanar mapping
|
|
99
|
-
const tx = positionNode.yz.mul( scaleNode );
|
|
100
|
-
const ty = positionNode.zx.mul( scaleNode );
|
|
101
|
-
const tz = positionNode.xy.mul( scaleNode );
|
|
102
|
-
|
|
103
|
-
// Base color
|
|
104
|
-
const textureX = textureXNode.value;
|
|
105
|
-
const textureY = textureYNode !== null ? textureYNode.value : textureX;
|
|
106
|
-
const textureZ = textureZNode !== null ? textureZNode.value : textureX;
|
|
107
|
-
|
|
108
|
-
const cx = texture( textureX, tx ).mul( bf.x );
|
|
109
|
-
const cy = texture( textureY, ty ).mul( bf.y );
|
|
110
|
-
const cz = texture( textureZ, tz ).mul( bf.z );
|
|
111
|
-
|
|
112
|
-
return add( cx, cy, cz );
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export default TriplanarTexturesNode;
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* TSL function for creating a triplanar textures node.
|
|
122
|
-
*
|
|
123
|
-
* @tsl
|
|
124
|
-
* @function
|
|
125
|
-
* @param {Node} textureXNode - First texture node.
|
|
126
|
-
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
127
|
-
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
128
|
-
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
129
|
-
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
130
|
-
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
131
|
-
* @returns {TriplanarTexturesNode}
|
|
132
|
-
*/
|
|
133
|
-
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* TSL function for creating a triplanar textures node.
|
|
137
|
-
*
|
|
138
|
-
* @tsl
|
|
139
|
-
* @function
|
|
140
|
-
* @param {Node} textureXNode - First texture node.
|
|
141
|
-
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
142
|
-
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
143
|
-
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
144
|
-
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
145
|
-
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
146
|
-
* @returns {TriplanarTexturesNode}
|
|
147
|
-
*/
|
|
148
|
-
export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
|