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,6 +1,7 @@
|
|
|
1
1
|
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
2
2
|
import TempNode from '../core/TempNode.js';
|
|
3
|
-
import { addMethodChaining, Fn, int,
|
|
3
|
+
import { addMethodChaining, Fn, int, nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
4
|
+
import { warn } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
const _vectorOperators = {
|
|
6
7
|
'==': 'equal',
|
|
@@ -103,9 +104,10 @@ class OperatorNode extends TempNode {
|
|
|
103
104
|
* and the input node types.
|
|
104
105
|
*
|
|
105
106
|
* @param {NodeBuilder} builder - The current node builder.
|
|
107
|
+
* @param {?string} [output=null] - The output type.
|
|
106
108
|
* @return {string} The node type.
|
|
107
109
|
*/
|
|
108
|
-
getNodeType( builder ) {
|
|
110
|
+
getNodeType( builder, output = null ) {
|
|
109
111
|
|
|
110
112
|
const op = this.op;
|
|
111
113
|
|
|
@@ -117,7 +119,7 @@ class OperatorNode extends TempNode {
|
|
|
117
119
|
|
|
118
120
|
if ( typeA === 'void' || typeB === 'void' ) {
|
|
119
121
|
|
|
120
|
-
return 'void';
|
|
122
|
+
return output || 'void';
|
|
121
123
|
|
|
122
124
|
} else if ( op === '%' ) {
|
|
123
125
|
|
|
@@ -193,7 +195,7 @@ class OperatorNode extends TempNode {
|
|
|
193
195
|
|
|
194
196
|
const { aNode, bNode } = this;
|
|
195
197
|
|
|
196
|
-
const type = this.getNodeType( builder );
|
|
198
|
+
const type = this.getNodeType( builder, output );
|
|
197
199
|
|
|
198
200
|
let typeA = null;
|
|
199
201
|
let typeB = null;
|
|
@@ -419,7 +421,7 @@ export default OperatorNode;
|
|
|
419
421
|
* @param {...Node} params - Additional input parameters.
|
|
420
422
|
* @returns {OperatorNode}
|
|
421
423
|
*/
|
|
422
|
-
export const add = /*@__PURE__*/
|
|
424
|
+
export const add = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '+' ).setParameterLength( 2, Infinity ).setName( 'add' );
|
|
423
425
|
|
|
424
426
|
/**
|
|
425
427
|
* Returns the subtraction of two or more value.
|
|
@@ -431,7 +433,7 @@ export const add = /*@__PURE__*/ nodeProxy( OperatorNode, '+' ).setParameterLeng
|
|
|
431
433
|
* @param {...Node} params - Additional input parameters.
|
|
432
434
|
* @returns {OperatorNode}
|
|
433
435
|
*/
|
|
434
|
-
export const sub = /*@__PURE__*/
|
|
436
|
+
export const sub = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '-' ).setParameterLength( 2, Infinity ).setName( 'sub' );
|
|
435
437
|
|
|
436
438
|
/**
|
|
437
439
|
* Returns the multiplication of two or more value.
|
|
@@ -443,7 +445,7 @@ export const sub = /*@__PURE__*/ nodeProxy( OperatorNode, '-' ).setParameterLeng
|
|
|
443
445
|
* @param {...Node} params - Additional input parameters.
|
|
444
446
|
* @returns {OperatorNode}
|
|
445
447
|
*/
|
|
446
|
-
export const mul = /*@__PURE__*/
|
|
448
|
+
export const mul = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '*' ).setParameterLength( 2, Infinity ).setName( 'mul' );
|
|
447
449
|
|
|
448
450
|
/**
|
|
449
451
|
* Returns the division of two or more value.
|
|
@@ -455,7 +457,7 @@ export const mul = /*@__PURE__*/ nodeProxy( OperatorNode, '*' ).setParameterLeng
|
|
|
455
457
|
* @param {...Node} params - Additional input parameters.
|
|
456
458
|
* @returns {OperatorNode}
|
|
457
459
|
*/
|
|
458
|
-
export const div = /*@__PURE__*/
|
|
460
|
+
export const div = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '/' ).setParameterLength( 2, Infinity ).setName( 'div' );
|
|
459
461
|
|
|
460
462
|
/**
|
|
461
463
|
* Computes the remainder of dividing the first node by the second one.
|
|
@@ -466,7 +468,7 @@ export const div = /*@__PURE__*/ nodeProxy( OperatorNode, '/' ).setParameterLeng
|
|
|
466
468
|
* @param {Node} b - The second input.
|
|
467
469
|
* @returns {OperatorNode}
|
|
468
470
|
*/
|
|
469
|
-
export const mod = /*@__PURE__*/
|
|
471
|
+
export const mod = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '%' ).setParameterLength( 2 ).setName( 'mod' );
|
|
470
472
|
|
|
471
473
|
/**
|
|
472
474
|
* Checks if two nodes are equal.
|
|
@@ -477,7 +479,7 @@ export const mod = /*@__PURE__*/ nodeProxy( OperatorNode, '%' ).setParameterLeng
|
|
|
477
479
|
* @param {Node} b - The second input.
|
|
478
480
|
* @returns {OperatorNode}
|
|
479
481
|
*/
|
|
480
|
-
export const equal = /*@__PURE__*/
|
|
482
|
+
export const equal = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '==' ).setParameterLength( 2 ).setName( 'equal' );
|
|
481
483
|
|
|
482
484
|
/**
|
|
483
485
|
* Checks if two nodes are not equal.
|
|
@@ -488,7 +490,7 @@ export const equal = /*@__PURE__*/ nodeProxy( OperatorNode, '==' ).setParameterL
|
|
|
488
490
|
* @param {Node} b - The second input.
|
|
489
491
|
* @returns {OperatorNode}
|
|
490
492
|
*/
|
|
491
|
-
export const notEqual = /*@__PURE__*/
|
|
493
|
+
export const notEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '!=' ).setParameterLength( 2 ).setName( 'notEqual' );
|
|
492
494
|
|
|
493
495
|
/**
|
|
494
496
|
* Checks if the first node is less than the second.
|
|
@@ -499,7 +501,7 @@ export const notEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '!=' ).setParamet
|
|
|
499
501
|
* @param {Node} b - The second input.
|
|
500
502
|
* @returns {OperatorNode}
|
|
501
503
|
*/
|
|
502
|
-
export const lessThan = /*@__PURE__*/
|
|
504
|
+
export const lessThan = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<' ).setParameterLength( 2 ).setName( 'lessThan' );
|
|
503
505
|
|
|
504
506
|
/**
|
|
505
507
|
* Checks if the first node is greater than the second.
|
|
@@ -510,7 +512,7 @@ export const lessThan = /*@__PURE__*/ nodeProxy( OperatorNode, '<' ).setParamete
|
|
|
510
512
|
* @param {Node} b - The second input.
|
|
511
513
|
* @returns {OperatorNode}
|
|
512
514
|
*/
|
|
513
|
-
export const greaterThan = /*@__PURE__*/
|
|
515
|
+
export const greaterThan = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>' ).setParameterLength( 2 ).setName( 'greaterThan' );
|
|
514
516
|
|
|
515
517
|
/**
|
|
516
518
|
* Checks if the first node is less than or equal to the second.
|
|
@@ -521,7 +523,7 @@ export const greaterThan = /*@__PURE__*/ nodeProxy( OperatorNode, '>' ).setParam
|
|
|
521
523
|
* @param {Node} b - The second input.
|
|
522
524
|
* @returns {OperatorNode}
|
|
523
525
|
*/
|
|
524
|
-
export const lessThanEqual = /*@__PURE__*/
|
|
526
|
+
export const lessThanEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<=' ).setParameterLength( 2 ).setName( 'lessThanEqual' );
|
|
525
527
|
|
|
526
528
|
/**
|
|
527
529
|
* Checks if the first node is greater than or equal to the second.
|
|
@@ -532,7 +534,7 @@ export const lessThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '<=' ).setPa
|
|
|
532
534
|
* @param {Node} b - The second input.
|
|
533
535
|
* @returns {OperatorNode}
|
|
534
536
|
*/
|
|
535
|
-
export const greaterThanEqual = /*@__PURE__*/
|
|
537
|
+
export const greaterThanEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>=' ).setParameterLength( 2 ).setName( 'greaterThanEqual' );
|
|
536
538
|
|
|
537
539
|
/**
|
|
538
540
|
* Performs a logical AND operation on multiple nodes.
|
|
@@ -542,7 +544,7 @@ export const greaterThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '>=' ).se
|
|
|
542
544
|
* @param {...Node} nodes - The input nodes to be combined using AND.
|
|
543
545
|
* @returns {OperatorNode}
|
|
544
546
|
*/
|
|
545
|
-
export const and = /*@__PURE__*/
|
|
547
|
+
export const and = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '&&' ).setParameterLength( 2, Infinity ).setName( 'and' );
|
|
546
548
|
|
|
547
549
|
/**
|
|
548
550
|
* Performs a logical OR operation on multiple nodes.
|
|
@@ -552,7 +554,7 @@ export const and = /*@__PURE__*/ nodeProxy( OperatorNode, '&&' ).setParameterLen
|
|
|
552
554
|
* @param {...Node} nodes - The input nodes to be combined using OR.
|
|
553
555
|
* @returns {OperatorNode}
|
|
554
556
|
*/
|
|
555
|
-
export const or = /*@__PURE__*/
|
|
557
|
+
export const or = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '||' ).setParameterLength( 2, Infinity ).setName( 'or' );
|
|
556
558
|
|
|
557
559
|
/**
|
|
558
560
|
* Performs logical NOT on a node.
|
|
@@ -562,7 +564,7 @@ export const or = /*@__PURE__*/ nodeProxy( OperatorNode, '||' ).setParameterLeng
|
|
|
562
564
|
* @param {Node} value - The value.
|
|
563
565
|
* @returns {OperatorNode}
|
|
564
566
|
*/
|
|
565
|
-
export const not = /*@__PURE__*/
|
|
567
|
+
export const not = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '!' ).setParameterLength( 1 ).setName( 'not' );
|
|
566
568
|
|
|
567
569
|
/**
|
|
568
570
|
* Performs logical XOR on two nodes.
|
|
@@ -573,7 +575,7 @@ export const not = /*@__PURE__*/ nodeProxy( OperatorNode, '!' ).setParameterLeng
|
|
|
573
575
|
* @param {Node} b - The second input.
|
|
574
576
|
* @returns {OperatorNode}
|
|
575
577
|
*/
|
|
576
|
-
export const xor = /*@__PURE__*/
|
|
578
|
+
export const xor = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '^^' ).setParameterLength( 2 ).setName( 'xor' );
|
|
577
579
|
|
|
578
580
|
/**
|
|
579
581
|
* Performs bitwise AND on two nodes.
|
|
@@ -584,7 +586,7 @@ export const xor = /*@__PURE__*/ nodeProxy( OperatorNode, '^^' ).setParameterLen
|
|
|
584
586
|
* @param {Node} b - The second input.
|
|
585
587
|
* @returns {OperatorNode}
|
|
586
588
|
*/
|
|
587
|
-
export const bitAnd = /*@__PURE__*/
|
|
589
|
+
export const bitAnd = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '&' ).setParameterLength( 2 ).setName( 'bitAnd' );
|
|
588
590
|
|
|
589
591
|
/**
|
|
590
592
|
* Performs bitwise NOT on a node.
|
|
@@ -595,7 +597,7 @@ export const bitAnd = /*@__PURE__*/ nodeProxy( OperatorNode, '&' ).setParameterL
|
|
|
595
597
|
* @param {Node} b - The second input.
|
|
596
598
|
* @returns {OperatorNode}
|
|
597
599
|
*/
|
|
598
|
-
export const bitNot = /*@__PURE__*/
|
|
600
|
+
export const bitNot = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '~' ).setParameterLength( 1 ).setName( 'bitNot' );
|
|
599
601
|
|
|
600
602
|
/**
|
|
601
603
|
* Performs bitwise OR on two nodes.
|
|
@@ -606,7 +608,7 @@ export const bitNot = /*@__PURE__*/ nodeProxy( OperatorNode, '~' ).setParameterL
|
|
|
606
608
|
* @param {Node} b - The second input.
|
|
607
609
|
* @returns {OperatorNode}
|
|
608
610
|
*/
|
|
609
|
-
export const bitOr = /*@__PURE__*/
|
|
611
|
+
export const bitOr = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '|' ).setParameterLength( 2 ).setName( 'bitOr' );
|
|
610
612
|
|
|
611
613
|
/**
|
|
612
614
|
* Performs bitwise XOR on two nodes.
|
|
@@ -617,7 +619,7 @@ export const bitOr = /*@__PURE__*/ nodeProxy( OperatorNode, '|' ).setParameterLe
|
|
|
617
619
|
* @param {Node} b - The second input.
|
|
618
620
|
* @returns {OperatorNode}
|
|
619
621
|
*/
|
|
620
|
-
export const bitXor = /*@__PURE__*/
|
|
622
|
+
export const bitXor = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '^' ).setParameterLength( 2 ).setName( 'bitXor' );
|
|
621
623
|
|
|
622
624
|
/**
|
|
623
625
|
* Shifts a node to the left.
|
|
@@ -628,7 +630,7 @@ export const bitXor = /*@__PURE__*/ nodeProxy( OperatorNode, '^' ).setParameterL
|
|
|
628
630
|
* @param {Node} b - The value to shift.
|
|
629
631
|
* @returns {OperatorNode}
|
|
630
632
|
*/
|
|
631
|
-
export const shiftLeft = /*@__PURE__*/
|
|
633
|
+
export const shiftLeft = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<<' ).setParameterLength( 2 ).setName( 'shiftLeft' );
|
|
632
634
|
|
|
633
635
|
/**
|
|
634
636
|
* Shifts a node to the right.
|
|
@@ -639,7 +641,7 @@ export const shiftLeft = /*@__PURE__*/ nodeProxy( OperatorNode, '<<' ).setParame
|
|
|
639
641
|
* @param {Node} b - The value to shift.
|
|
640
642
|
* @returns {OperatorNode}
|
|
641
643
|
*/
|
|
642
|
-
export const shiftRight = /*@__PURE__*/
|
|
644
|
+
export const shiftRight = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>>' ).setParameterLength( 2 ).setName( 'shiftRight' );
|
|
643
645
|
|
|
644
646
|
/**
|
|
645
647
|
* Increments a node by 1.
|
|
@@ -730,22 +732,6 @@ addMethodChaining( 'decrementBefore', decrementBefore );
|
|
|
730
732
|
addMethodChaining( 'increment', increment );
|
|
731
733
|
addMethodChaining( 'decrement', decrement );
|
|
732
734
|
|
|
733
|
-
/**
|
|
734
|
-
* @tsl
|
|
735
|
-
* @function
|
|
736
|
-
* @deprecated since r168. Use {@link mod} instead.
|
|
737
|
-
*
|
|
738
|
-
* @param {Node} a - The first input.
|
|
739
|
-
* @param {Node} b - The second input.
|
|
740
|
-
* @returns {OperatorNode}
|
|
741
|
-
*/
|
|
742
|
-
export const remainder = ( a, b ) => { // @deprecated, r168
|
|
743
|
-
|
|
744
|
-
console.warn( 'THREE.TSL: "remainder()" is deprecated. Use "mod( int( ... ) )" instead.' );
|
|
745
|
-
return mod( a, b );
|
|
746
|
-
|
|
747
|
-
};
|
|
748
|
-
|
|
749
735
|
/**
|
|
750
736
|
* @tsl
|
|
751
737
|
* @function
|
|
@@ -757,10 +743,9 @@ export const remainder = ( a, b ) => { // @deprecated, r168
|
|
|
757
743
|
*/
|
|
758
744
|
export const modInt = ( a, b ) => { // @deprecated, r175
|
|
759
745
|
|
|
760
|
-
|
|
746
|
+
warn( 'TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.' );
|
|
761
747
|
return mod( int( a ), int( b ) );
|
|
762
748
|
|
|
763
749
|
};
|
|
764
750
|
|
|
765
|
-
addMethodChaining( 'remainder', remainder );
|
|
766
751
|
addMethodChaining( 'modInt', modInt );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Fn, int, float, vec2, vec3, vec4, If } from '../tsl/TSLBase.js';
|
|
2
|
-
import { cos, sin, abs, max, exp2, log2, clamp, fract, mix, floor, normalize, cross } from '../math/MathNode.js';
|
|
1
|
+
import { Fn, int, uint, float, vec2, vec3, vec4, If } from '../tsl/TSLBase.js';
|
|
2
|
+
import { cos, sin, abs, max, exp2, log2, clamp, fract, mix, floor, normalize, cross, dot, sqrt } from '../math/MathNode.js';
|
|
3
3
|
import { mul } from '../math/OperatorNode.js';
|
|
4
4
|
import { select } from '../math/ConditionalNode.js';
|
|
5
5
|
import { Loop, Break } from '../utils/LoopNode.js';
|
|
@@ -286,3 +286,118 @@ export const blur = /*@__PURE__*/ Fn( ( { n, latitudinal, poleAxis, outputDirect
|
|
|
286
286
|
return vec4( gl_FragColor, 1 );
|
|
287
287
|
|
|
288
288
|
} );
|
|
289
|
+
|
|
290
|
+
// GGX VNDF importance sampling functions
|
|
291
|
+
|
|
292
|
+
// Van der Corput radical inverse for generating quasi-random sequences
|
|
293
|
+
const radicalInverse_VdC = /*@__PURE__*/ Fn( ( [ bits_immutable ] ) => {
|
|
294
|
+
|
|
295
|
+
const bits = uint( bits_immutable ).toVar();
|
|
296
|
+
bits.assign( bits.shiftLeft( uint( 16 ) ).bitOr( bits.shiftRight( uint( 16 ) ) ) );
|
|
297
|
+
bits.assign( bits.bitAnd( uint( 0x55555555 ) ).shiftLeft( uint( 1 ) ).bitOr( bits.bitAnd( uint( 0xAAAAAAAA ) ).shiftRight( uint( 1 ) ) ) );
|
|
298
|
+
bits.assign( bits.bitAnd( uint( 0x33333333 ) ).shiftLeft( uint( 2 ) ).bitOr( bits.bitAnd( uint( 0xCCCCCCCC ) ).shiftRight( uint( 2 ) ) ) );
|
|
299
|
+
bits.assign( bits.bitAnd( uint( 0x0F0F0F0F ) ).shiftLeft( uint( 4 ) ).bitOr( bits.bitAnd( uint( 0xF0F0F0F0 ) ).shiftRight( uint( 4 ) ) ) );
|
|
300
|
+
bits.assign( bits.bitAnd( uint( 0x00FF00FF ) ).shiftLeft( uint( 8 ) ).bitOr( bits.bitAnd( uint( 0xFF00FF00 ) ).shiftRight( uint( 8 ) ) ) );
|
|
301
|
+
return float( bits ).mul( 2.3283064365386963e-10 ); // / 0x100000000
|
|
302
|
+
|
|
303
|
+
} );
|
|
304
|
+
|
|
305
|
+
// Hammersley sequence for quasi-Monte Carlo sampling
|
|
306
|
+
const hammersley = /*@__PURE__*/ Fn( ( [ i, N ] ) => {
|
|
307
|
+
|
|
308
|
+
return vec2( float( i ).div( float( N ) ), radicalInverse_VdC( i ) );
|
|
309
|
+
|
|
310
|
+
} );
|
|
311
|
+
|
|
312
|
+
// GGX VNDF importance sampling (Eric Heitz 2018)
|
|
313
|
+
// "Sampling the GGX Distribution of Visible Normals"
|
|
314
|
+
// https://jcgt.org/published/0007/04/01/
|
|
315
|
+
const importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi, V_immutable, roughness_immutable ] ) => {
|
|
316
|
+
|
|
317
|
+
const V = vec3( V_immutable ).toVar();
|
|
318
|
+
const roughness = float( roughness_immutable );
|
|
319
|
+
const alpha = roughness.mul( roughness ).toVar();
|
|
320
|
+
|
|
321
|
+
// Section 3.2: Transform view direction to hemisphere configuration
|
|
322
|
+
const Vh = normalize( vec3( alpha.mul( V.x ), alpha.mul( V.y ), V.z ) ).toVar();
|
|
323
|
+
|
|
324
|
+
// Section 4.1: Orthonormal basis
|
|
325
|
+
const lensq = Vh.x.mul( Vh.x ).add( Vh.y.mul( Vh.y ) );
|
|
326
|
+
const T1 = select( lensq.greaterThan( 0.0 ), vec3( Vh.y.negate(), Vh.x, 0.0 ).div( sqrt( lensq ) ), vec3( 1.0, 0.0, 0.0 ) ).toVar();
|
|
327
|
+
const T2 = cross( Vh, T1 ).toVar();
|
|
328
|
+
|
|
329
|
+
// Section 4.2: Parameterization of projected area
|
|
330
|
+
const r = sqrt( Xi.x );
|
|
331
|
+
const phi = mul( 2.0, 3.14159265359 ).mul( Xi.y );
|
|
332
|
+
const t1 = r.mul( cos( phi ) ).toVar();
|
|
333
|
+
const t2 = r.mul( sin( phi ) ).toVar();
|
|
334
|
+
const s = mul( 0.5, Vh.z.add( 1.0 ) );
|
|
335
|
+
t2.assign( s.oneMinus().mul( sqrt( t1.mul( t1 ).oneMinus() ) ).add( s.mul( t2 ) ) );
|
|
336
|
+
|
|
337
|
+
// Section 4.3: Reprojection onto hemisphere
|
|
338
|
+
const Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add( Vh.mul( sqrt( max( 0.0, t1.mul( t1 ).add( t2.mul( t2 ) ).oneMinus() ) ) ) );
|
|
339
|
+
|
|
340
|
+
// Section 3.4: Transform back to ellipsoid configuration
|
|
341
|
+
return normalize( vec3( alpha.mul( Nh.x ), alpha.mul( Nh.y ), max( 0.0, Nh.z ) ) );
|
|
342
|
+
|
|
343
|
+
} );
|
|
344
|
+
|
|
345
|
+
// GGX convolution using VNDF importance sampling
|
|
346
|
+
export const ggxConvolution = /*@__PURE__*/ Fn( ( { roughness, mipInt, envMap, N_immutable, GGX_SAMPLES, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) => {
|
|
347
|
+
|
|
348
|
+
const N = vec3( N_immutable ).toVar();
|
|
349
|
+
|
|
350
|
+
const prefilteredColor = vec3( 0.0 ).toVar();
|
|
351
|
+
const totalWeight = float( 0.0 ).toVar();
|
|
352
|
+
|
|
353
|
+
// For very low roughness, just sample the environment directly
|
|
354
|
+
If( roughness.lessThan( 0.001 ), () => {
|
|
355
|
+
|
|
356
|
+
prefilteredColor.assign( bilinearCubeUV( envMap, N, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ) );
|
|
357
|
+
|
|
358
|
+
} ).Else( () => {
|
|
359
|
+
|
|
360
|
+
// Tangent space basis for VNDF sampling
|
|
361
|
+
const up = select( abs( N.z ).lessThan( 0.999 ), vec3( 0.0, 0.0, 1.0 ), vec3( 1.0, 0.0, 0.0 ) );
|
|
362
|
+
const tangent = normalize( cross( up, N ) ).toVar();
|
|
363
|
+
const bitangent = cross( N, tangent ).toVar();
|
|
364
|
+
|
|
365
|
+
Loop( { start: uint( 0 ), end: GGX_SAMPLES }, ( { i } ) => {
|
|
366
|
+
|
|
367
|
+
const Xi = hammersley( i, GGX_SAMPLES );
|
|
368
|
+
|
|
369
|
+
// For PMREM, V = N, so in tangent space V is always (0, 0, 1)
|
|
370
|
+
const H_tangent = importanceSampleGGX_VNDF( Xi, vec3( 0.0, 0.0, 1.0 ), roughness );
|
|
371
|
+
|
|
372
|
+
// Transform H back to world space
|
|
373
|
+
const H = normalize( tangent.mul( H_tangent.x ).add( bitangent.mul( H_tangent.y ) ).add( N.mul( H_tangent.z ) ) );
|
|
374
|
+
const L = normalize( H.mul( dot( N, H ).mul( 2.0 ) ).sub( N ) );
|
|
375
|
+
|
|
376
|
+
const NdotL = max( dot( N, L ), 0.0 );
|
|
377
|
+
|
|
378
|
+
If( NdotL.greaterThan( 0.0 ), () => {
|
|
379
|
+
|
|
380
|
+
// Sample environment at fixed mip level
|
|
381
|
+
// VNDF importance sampling handles the distribution filtering
|
|
382
|
+
const sampleColor = bilinearCubeUV( envMap, L, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP );
|
|
383
|
+
|
|
384
|
+
// Weight by NdotL for the split-sum approximation
|
|
385
|
+
// VNDF PDF naturally accounts for the visible microfacet distribution
|
|
386
|
+
prefilteredColor.addAssign( sampleColor.mul( NdotL ) );
|
|
387
|
+
totalWeight.addAssign( NdotL );
|
|
388
|
+
|
|
389
|
+
} );
|
|
390
|
+
|
|
391
|
+
} );
|
|
392
|
+
|
|
393
|
+
If( totalWeight.greaterThan( 0.0 ), () => {
|
|
394
|
+
|
|
395
|
+
prefilteredColor.assign( prefilteredColor.div( totalWeight ) );
|
|
396
|
+
|
|
397
|
+
} );
|
|
398
|
+
|
|
399
|
+
} );
|
|
400
|
+
|
|
401
|
+
return vec4( prefilteredColor, 1.0 );
|
|
402
|
+
|
|
403
|
+
} );
|
|
@@ -16,7 +16,7 @@ export const shapeCircle = Fn( ( [ coord = uv() ], { renderer, material } ) => {
|
|
|
16
16
|
|
|
17
17
|
let alpha;
|
|
18
18
|
|
|
19
|
-
if ( material.alphaToCoverage && renderer.
|
|
19
|
+
if ( material.alphaToCoverage && renderer.currentSamples > 0 ) {
|
|
20
20
|
|
|
21
21
|
const dlen = float( len2.fwidth() ).toVar();
|
|
22
22
|
|
package/src/nodes/tsl/TSLBase.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { warn } from '../../utils.js';
|
|
2
|
+
|
|
1
3
|
// Non-PURE exports list, side-effects are required here.
|
|
2
4
|
// TSL Base Syntax
|
|
3
5
|
|
|
@@ -17,16 +19,18 @@ export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
|
|
|
17
19
|
export * from '../display/ToneMappingNode.js'; // .toToneMapping()
|
|
18
20
|
export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
|
|
19
21
|
export * from '../gpgpu/ComputeNode.js'; // .compute()
|
|
20
|
-
export * from '../core/
|
|
22
|
+
export * from '../core/IsolateNode.js'; // .isolate()
|
|
21
23
|
export * from '../core/BypassNode.js'; // .bypass()
|
|
22
24
|
export * from '../utils/RemapNode.js'; // .remap(), .remapClamp()
|
|
23
25
|
export * from '../code/ExpressionNode.js'; // expression()
|
|
24
26
|
export * from '../utils/Discard.js'; // Discard(), Return()
|
|
25
27
|
export * from '../display/RenderOutputNode.js'; // .renderOutput()
|
|
26
28
|
export * from '../utils/DebugNode.js'; // debug()
|
|
29
|
+
export * from '../core/SubBuildNode.js'; // subBuild()
|
|
30
|
+
export * from '../core/InspectorNode.js'; // inspector(), .toInspector()
|
|
27
31
|
|
|
28
32
|
export function addNodeElement( name/*, nodeElement*/ ) {
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
warn( 'TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add', name );
|
|
31
35
|
|
|
32
36
|
}
|