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,5 +1,6 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
import { log } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
class DebugNode extends TempNode {
|
|
5
6
|
|
|
@@ -56,7 +57,7 @@ class DebugNode extends TempNode {
|
|
|
56
57
|
|
|
57
58
|
} else {
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
log( code );
|
|
60
61
|
|
|
61
62
|
}
|
|
62
63
|
|
|
@@ -77,6 +78,6 @@ export default DebugNode;
|
|
|
77
78
|
* @param {?Function} [callback=null] - Optional callback function to handle the debug output.
|
|
78
79
|
* @returns {DebugNode}
|
|
79
80
|
*/
|
|
80
|
-
export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
|
|
81
|
+
export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) ).toStack();
|
|
81
82
|
|
|
82
83
|
addMethodChaining( 'debug', debug );
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { positionWorldDirection } from '../accessors/Position.js';
|
|
2
|
+
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TSL function for creating an equirect uv node.
|
|
6
|
+
*
|
|
7
|
+
* Can be used to compute texture coordinates for projecting an
|
|
8
|
+
* equirectangular texture onto a mesh for using it as the scene's
|
|
9
|
+
* background.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* scene.backgroundNode = texture( equirectTexture, equirectUV() );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @tsl
|
|
16
|
+
* @function
|
|
17
|
+
* @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
18
|
+
* @returns {Node<vec2>}
|
|
19
|
+
*/
|
|
20
|
+
export const equirectUV = /*@__PURE__*/ Fn( ( [ dir = positionWorldDirection ] ) => {
|
|
21
|
+
|
|
22
|
+
const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
|
|
23
|
+
const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
|
|
24
|
+
|
|
25
|
+
return vec2( u, v );
|
|
26
|
+
|
|
27
|
+
} );
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* EventNode is a node that executes a callback during specific update phases.
|
|
7
|
+
*
|
|
8
|
+
* @augments Node
|
|
9
|
+
*/
|
|
10
|
+
class EventNode extends Node {
|
|
11
|
+
|
|
12
|
+
static get type() {
|
|
13
|
+
|
|
14
|
+
return 'EventNode';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates an EventNode.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} eventType - The type of event
|
|
22
|
+
* @param {Function} callback - The callback to execute on update.
|
|
23
|
+
*/
|
|
24
|
+
constructor( eventType, callback ) {
|
|
25
|
+
|
|
26
|
+
super( 'void' );
|
|
27
|
+
|
|
28
|
+
this.eventType = eventType;
|
|
29
|
+
this.callback = callback;
|
|
30
|
+
|
|
31
|
+
if ( eventType === EventNode.OBJECT ) {
|
|
32
|
+
|
|
33
|
+
this.updateType = NodeUpdateType.OBJECT;
|
|
34
|
+
|
|
35
|
+
} else if ( eventType === EventNode.MATERIAL ) {
|
|
36
|
+
|
|
37
|
+
this.updateType = NodeUpdateType.RENDER;
|
|
38
|
+
|
|
39
|
+
} else if ( eventType === EventNode.BEFORE_OBJECT ) {
|
|
40
|
+
|
|
41
|
+
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
42
|
+
|
|
43
|
+
} else if ( eventType === EventNode.BEFORE_MATERIAL ) {
|
|
44
|
+
|
|
45
|
+
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
update( frame ) {
|
|
52
|
+
|
|
53
|
+
this.callback( frame );
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
updateBefore( frame ) {
|
|
58
|
+
|
|
59
|
+
this.callback( frame );
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
EventNode.OBJECT = 'object';
|
|
66
|
+
EventNode.MATERIAL = 'material';
|
|
67
|
+
EventNode.BEFORE_OBJECT = 'beforeObject';
|
|
68
|
+
EventNode.BEFORE_MATERIAL = 'beforeMaterial';
|
|
69
|
+
|
|
70
|
+
export default EventNode;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Helper to create an EventNode and add it to the stack.
|
|
74
|
+
*
|
|
75
|
+
* @param {string} type - The event type.
|
|
76
|
+
* @param {Function} callback - The callback function.
|
|
77
|
+
* @returns {EventNode}
|
|
78
|
+
*/
|
|
79
|
+
const createEvent = ( type, callback ) => nodeObject( new EventNode( type, callback ) ).toStack();
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.
|
|
83
|
+
*
|
|
84
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
85
|
+
*
|
|
86
|
+
* @param {Function} callback - The callback function.
|
|
87
|
+
* @returns {EventNode}
|
|
88
|
+
*/
|
|
89
|
+
export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, callback );
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Creates an event that triggers a function when the first object that uses the material is rendered.
|
|
93
|
+
*
|
|
94
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
95
|
+
*
|
|
96
|
+
* @param {Function} callback - The callback function.
|
|
97
|
+
* @returns {EventNode}
|
|
98
|
+
*/
|
|
99
|
+
export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Creates an event that triggers a function before an object (Mesh|Sprite) is updated.
|
|
103
|
+
*
|
|
104
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
105
|
+
*
|
|
106
|
+
* @param {Function} callback - The callback function.
|
|
107
|
+
* @returns {EventNode}
|
|
108
|
+
*/
|
|
109
|
+
export const OnBeforeObjectUpdate = ( callback ) => createEvent( EventNode.BEFORE_OBJECT, callback );
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Creates an event that triggers a function before the material is updated.
|
|
113
|
+
*
|
|
114
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
115
|
+
*
|
|
116
|
+
* @param {Function} callback - The callback function.
|
|
117
|
+
* @returns {EventNode}
|
|
118
|
+
*/
|
|
119
|
+
export const OnBeforeMaterialUpdate = ( callback ) => createEvent( EventNode.BEFORE_MATERIAL, callback );
|
|
@@ -46,7 +46,7 @@ class FunctionOverloadingNode extends Node {
|
|
|
46
46
|
* @private
|
|
47
47
|
* @type {ShaderCallNodeInternal}
|
|
48
48
|
*/
|
|
49
|
-
this.
|
|
49
|
+
this._candidateFn = null;
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* This node is marked as global.
|
|
@@ -65,22 +65,30 @@ class FunctionOverloadingNode extends Node {
|
|
|
65
65
|
* @param {NodeBuilder} builder - The current node builder.
|
|
66
66
|
* @return {string} The node type.
|
|
67
67
|
*/
|
|
68
|
-
getNodeType() {
|
|
68
|
+
getNodeType( builder ) {
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
const candidateFn = this.getCandidateFn( builder );
|
|
71
|
+
|
|
72
|
+
return candidateFn.shaderNode.layout.type;
|
|
71
73
|
|
|
72
74
|
}
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Returns the candidate function for the current parameters.
|
|
78
|
+
*
|
|
79
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
80
|
+
* @return {FunctionNode} The candidate function.
|
|
81
|
+
*/
|
|
82
|
+
getCandidateFn( builder ) {
|
|
75
83
|
|
|
76
84
|
const params = this.parametersNodes;
|
|
77
85
|
|
|
78
|
-
let
|
|
86
|
+
let candidateFn = this._candidateFn;
|
|
79
87
|
|
|
80
|
-
if (
|
|
88
|
+
if ( candidateFn === null ) {
|
|
81
89
|
|
|
82
|
-
let
|
|
83
|
-
let
|
|
90
|
+
let bestCandidateFn = null;
|
|
91
|
+
let bestScore = - 1;
|
|
84
92
|
|
|
85
93
|
for ( const functionNode of this.functionNodes ) {
|
|
86
94
|
|
|
@@ -97,7 +105,7 @@ class FunctionOverloadingNode extends Node {
|
|
|
97
105
|
|
|
98
106
|
if ( params.length === inputs.length ) {
|
|
99
107
|
|
|
100
|
-
let
|
|
108
|
+
let currentScore = 0;
|
|
101
109
|
|
|
102
110
|
for ( let i = 0; i < params.length; i ++ ) {
|
|
103
111
|
|
|
@@ -106,20 +114,16 @@ class FunctionOverloadingNode extends Node {
|
|
|
106
114
|
|
|
107
115
|
if ( param.getNodeType( builder ) === input.type ) {
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
} else {
|
|
112
|
-
|
|
113
|
-
score = 0;
|
|
117
|
+
currentScore ++;
|
|
114
118
|
|
|
115
119
|
}
|
|
116
120
|
|
|
117
121
|
}
|
|
118
122
|
|
|
119
|
-
if (
|
|
123
|
+
if ( currentScore > bestScore ) {
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
bestCandidateFn = functionNode;
|
|
126
|
+
bestScore = currentScore;
|
|
123
127
|
|
|
124
128
|
}
|
|
125
129
|
|
|
@@ -127,11 +131,25 @@ class FunctionOverloadingNode extends Node {
|
|
|
127
131
|
|
|
128
132
|
}
|
|
129
133
|
|
|
130
|
-
this.
|
|
134
|
+
this._candidateFn = candidateFn = bestCandidateFn;
|
|
131
135
|
|
|
132
136
|
}
|
|
133
137
|
|
|
134
|
-
return
|
|
138
|
+
return candidateFn;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Sets up the node for the current parameters.
|
|
144
|
+
*
|
|
145
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
146
|
+
* @return {Node} The setup node.
|
|
147
|
+
*/
|
|
148
|
+
setup( builder ) {
|
|
149
|
+
|
|
150
|
+
const candidateFn = this.getCandidateFn( builder );
|
|
151
|
+
|
|
152
|
+
return candidateFn( ...this.parametersNodes );
|
|
135
153
|
|
|
136
154
|
}
|
|
137
155
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { error } from '../../utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* This module is part of the TSL core and usually not used in app level code.
|
|
@@ -70,7 +71,7 @@ class JoinNode extends TempNode {
|
|
|
70
71
|
|
|
71
72
|
if ( length >= maxLength ) {
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
error( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type.` );
|
|
74
75
|
break;
|
|
75
76
|
|
|
76
77
|
}
|
|
@@ -81,7 +82,7 @@ class JoinNode extends TempNode {
|
|
|
81
82
|
|
|
82
83
|
if ( length + inputTypeLength > maxLength ) {
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
error( `TSL: Length of '${ type }()' data exceeds maximum length of output type.` );
|
|
85
86
|
|
|
86
87
|
inputTypeLength = maxLength - length;
|
|
87
88
|
inputType = builder.getTypeFromLength( inputTypeLength );
|
|
@@ -95,7 +96,9 @@ class JoinNode extends TempNode {
|
|
|
95
96
|
|
|
96
97
|
if ( inputPrimitiveType !== primitiveType ) {
|
|
97
98
|
|
|
98
|
-
|
|
99
|
+
const targetType = builder.getTypeFromLength( inputTypeLength, primitiveType );
|
|
100
|
+
|
|
101
|
+
inputSnippet = builder.format( inputSnippet, inputType, targetType );
|
|
99
102
|
|
|
100
103
|
}
|
|
101
104
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
|
-
import {
|
|
3
|
+
import { nodeArray, Fn } from '../tsl/TSLBase.js';
|
|
4
|
+
import { error } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
@@ -53,7 +54,7 @@ class LoopNode extends Node {
|
|
|
53
54
|
*/
|
|
54
55
|
constructor( params = [] ) {
|
|
55
56
|
|
|
56
|
-
super();
|
|
57
|
+
super( 'void' );
|
|
57
58
|
|
|
58
59
|
this.params = params;
|
|
59
60
|
|
|
@@ -99,16 +100,20 @@ class LoopNode extends Node {
|
|
|
99
100
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
const stack = builder.addStack();
|
|
103
|
+
const stack = builder.addStack();
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
const fnCall = this.params[ this.params.length - 1 ]( inputs );
|
|
106
|
+
|
|
107
|
+
properties.returnsNode = fnCall.context( { nodeLoop: fnCall } );
|
|
105
108
|
properties.stackNode = stack;
|
|
106
109
|
|
|
107
110
|
const baseParam = this.params[ 0 ];
|
|
108
111
|
|
|
109
112
|
if ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {
|
|
110
113
|
|
|
111
|
-
|
|
114
|
+
const fnUpdateCall = Fn( this.params[ 0 ].update )( inputs );
|
|
115
|
+
|
|
116
|
+
properties.updateNode = fnUpdateCall.context( { nodeLoop: fnUpdateCall } );
|
|
112
117
|
|
|
113
118
|
}
|
|
114
119
|
|
|
@@ -118,26 +123,19 @@ class LoopNode extends Node {
|
|
|
118
123
|
|
|
119
124
|
}
|
|
120
125
|
|
|
121
|
-
/**
|
|
122
|
-
* This method is overwritten since the node type is inferred based on the loop configuration.
|
|
123
|
-
*
|
|
124
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
125
|
-
* @return {string} The node type.
|
|
126
|
-
*/
|
|
127
|
-
getNodeType( builder ) {
|
|
128
|
-
|
|
129
|
-
const { returnsNode } = this.getProperties( builder );
|
|
130
|
-
|
|
131
|
-
return returnsNode ? returnsNode.getNodeType( builder ) : 'void';
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
126
|
setup( builder ) {
|
|
136
127
|
|
|
137
128
|
// setup properties
|
|
138
129
|
|
|
139
130
|
this.getProperties( builder );
|
|
140
131
|
|
|
132
|
+
if ( builder.fnCall ) {
|
|
133
|
+
|
|
134
|
+
const shaderNodeData = builder.getDataFromNode( builder.fnCall.shaderNode );
|
|
135
|
+
shaderNodeData.hasLoop = true;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
141
139
|
}
|
|
142
140
|
|
|
143
141
|
generate( builder ) {
|
|
@@ -267,7 +265,7 @@ class LoopNode extends Node {
|
|
|
267
265
|
|
|
268
266
|
} else {
|
|
269
267
|
|
|
270
|
-
|
|
268
|
+
error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
|
|
271
269
|
|
|
272
270
|
updateSnippet = 'break /* invalid update */';
|
|
273
271
|
|
|
@@ -304,7 +302,7 @@ class LoopNode extends Node {
|
|
|
304
302
|
|
|
305
303
|
const stackSnippet = stackNode.build( builder, 'void' );
|
|
306
304
|
|
|
307
|
-
|
|
305
|
+
properties.returnsNode.build( builder, 'void' );
|
|
308
306
|
|
|
309
307
|
builder.removeFlowTab().addFlowCode( '\n' + builder.tab + stackSnippet );
|
|
310
308
|
|
|
@@ -316,8 +314,6 @@ class LoopNode extends Node {
|
|
|
316
314
|
|
|
317
315
|
builder.addFlowTab();
|
|
318
316
|
|
|
319
|
-
return returnsSnippet;
|
|
320
|
-
|
|
321
317
|
}
|
|
322
318
|
|
|
323
319
|
}
|
|
@@ -332,7 +328,7 @@ export default LoopNode;
|
|
|
332
328
|
* @param {...any} params - A list of parameters.
|
|
333
329
|
* @returns {LoopNode}
|
|
334
330
|
*/
|
|
335
|
-
export const Loop = ( ...params ) =>
|
|
331
|
+
export const Loop = ( ...params ) => new LoopNode( nodeArray( params, 'int' ) ).toStack();
|
|
336
332
|
|
|
337
333
|
/**
|
|
338
334
|
* TSL function for creating a `Continue()` expression.
|
|
@@ -351,20 +347,3 @@ export const Continue = () => expression( 'continue' ).toStack();
|
|
|
351
347
|
* @returns {ExpressionNode}
|
|
352
348
|
*/
|
|
353
349
|
export const Break = () => expression( 'break' ).toStack();
|
|
354
|
-
|
|
355
|
-
// Deprecated
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* @tsl
|
|
359
|
-
* @function
|
|
360
|
-
* @deprecated since r168. Use {@link Loop} instead.
|
|
361
|
-
*
|
|
362
|
-
* @param {...any} params
|
|
363
|
-
* @returns {LoopNode}
|
|
364
|
-
*/
|
|
365
|
-
export const loop = ( ...params ) => { // @deprecated, r168
|
|
366
|
-
|
|
367
|
-
console.warn( 'THREE.TSL: loop() has been renamed to Loop().' );
|
|
368
|
-
return Loop( ...params );
|
|
369
|
-
|
|
370
|
-
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { normalView } from '../accessors/Normal.js';
|
|
2
|
+
import { positionViewDirection } from '../accessors/Position.js';
|
|
3
|
+
import { Fn, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TSL function for creating a matcap uv node.
|
|
7
|
+
*
|
|
8
|
+
* Can be used to compute texture coordinates for projecting a
|
|
9
|
+
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @returns {Node<vec2>} The matcap UV coordinates.
|
|
14
|
+
*/
|
|
15
|
+
export const matcapUV = /*@__PURE__*/ Fn( () => {
|
|
16
|
+
|
|
17
|
+
const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
|
|
18
|
+
const y = positionViewDirection.cross( x );
|
|
19
|
+
|
|
20
|
+
return vec2( x.dot( normalView ), y.dot( normalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
|
|
21
|
+
|
|
22
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] )().toVar( 'matcapUV' );
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import { warn } from '../../utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Base class for representing member access on an object-like
|
|
@@ -15,21 +16,21 @@ class MemberNode extends Node {
|
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
|
-
* Constructs
|
|
19
|
+
* Constructs a member node.
|
|
19
20
|
*
|
|
20
|
-
* @param {Node}
|
|
21
|
+
* @param {Node} structNode - The struct node.
|
|
21
22
|
* @param {string} property - The property name.
|
|
22
23
|
*/
|
|
23
|
-
constructor(
|
|
24
|
+
constructor( structNode, property ) {
|
|
24
25
|
|
|
25
26
|
super();
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
|
-
* The
|
|
29
|
+
* The struct node.
|
|
29
30
|
*
|
|
30
31
|
* @type {Node}
|
|
31
32
|
*/
|
|
32
|
-
this.
|
|
33
|
+
this.structNode = structNode;
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* The property name.
|
|
@@ -49,15 +50,66 @@ class MemberNode extends Node {
|
|
|
49
50
|
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
hasMember( builder ) {
|
|
54
|
+
|
|
55
|
+
if ( this.structNode.isMemberNode ) {
|
|
56
|
+
|
|
57
|
+
if ( this.structNode.hasMember( builder ) === false ) {
|
|
58
|
+
|
|
59
|
+
return false;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return this.structNode.getMemberType( builder, this.property ) !== 'void';
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
getNodeType( builder ) {
|
|
53
70
|
|
|
54
|
-
|
|
71
|
+
if ( this.hasMember( builder ) === false ) {
|
|
72
|
+
|
|
73
|
+
// default type if member does not exist
|
|
74
|
+
|
|
75
|
+
return 'float';
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return this.structNode.getMemberType( builder, this.property );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
getMemberType( builder, name ) {
|
|
84
|
+
|
|
85
|
+
if ( this.hasMember( builder ) === false ) {
|
|
86
|
+
|
|
87
|
+
// default type if member does not exist
|
|
88
|
+
|
|
89
|
+
return 'float';
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const type = this.getNodeType( builder );
|
|
94
|
+
const struct = builder.getStructTypeNode( type );
|
|
95
|
+
|
|
96
|
+
return struct.getMemberType( builder, name );
|
|
55
97
|
|
|
56
98
|
}
|
|
57
99
|
|
|
58
100
|
generate( builder ) {
|
|
59
101
|
|
|
60
|
-
|
|
102
|
+
if ( this.hasMember( builder ) === false ) {
|
|
103
|
+
|
|
104
|
+
warn( `TSL: Member "${ this.property }" does not exist in struct.` );
|
|
105
|
+
|
|
106
|
+
const type = this.getNodeType( builder );
|
|
107
|
+
|
|
108
|
+
return builder.generateConst( type );
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const propertyName = this.structNode.build( builder );
|
|
61
113
|
|
|
62
114
|
return propertyName + '.' + this.property;
|
|
63
115
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
1
|
+
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
|
|
2
2
|
import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
3
3
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
4
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
@@ -93,3 +93,30 @@ export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projec
|
|
|
93
93
|
return normalize( cross( dpdx, dpdy ) );
|
|
94
94
|
|
|
95
95
|
} );
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Interleaved Gradient Noise (IGN) from Jimenez 2014.
|
|
99
|
+
*
|
|
100
|
+
* IGN has "low discrepancy" resulting in evenly distributed samples. It's superior compared to
|
|
101
|
+
* default white noise, blue noise or Bayer.
|
|
102
|
+
*
|
|
103
|
+
* References:
|
|
104
|
+
* - {@link https://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare/}
|
|
105
|
+
* - {@link https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/}
|
|
106
|
+
*
|
|
107
|
+
* @tsl
|
|
108
|
+
* @function
|
|
109
|
+
* @param {Node<vec2>} position - The input position, usually screen coordinates.
|
|
110
|
+
* @return {Node<float>} The noise value.
|
|
111
|
+
*/
|
|
112
|
+
export const interleavedGradientNoise = Fn( ( [ position ] ) => {
|
|
113
|
+
|
|
114
|
+
return fract( float( 52.9829189 ).mul( fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ) );
|
|
115
|
+
|
|
116
|
+
} ).setLayout( {
|
|
117
|
+
name: 'interleavedGradientNoise',
|
|
118
|
+
type: 'float',
|
|
119
|
+
inputs: [
|
|
120
|
+
{ name: 'position', type: 'vec2' }
|
|
121
|
+
]
|
|
122
|
+
} );
|
|
@@ -41,6 +41,15 @@ class RTTNode extends TextureNode {
|
|
|
41
41
|
|
|
42
42
|
super( renderTarget.texture, uv() );
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* This flag can be used for type testing.
|
|
46
|
+
*
|
|
47
|
+
* @type {boolean}
|
|
48
|
+
* @readonly
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
this.isRTTNode = true;
|
|
52
|
+
|
|
44
53
|
/**
|
|
45
54
|
* The node to render a texture with.
|
|
46
55
|
*
|
|
@@ -131,7 +140,7 @@ class RTTNode extends TextureNode {
|
|
|
131
140
|
* @readonly
|
|
132
141
|
* @default true
|
|
133
142
|
*/
|
|
134
|
-
get
|
|
143
|
+
get autoResize() {
|
|
135
144
|
|
|
136
145
|
return this.width === null;
|
|
137
146
|
|
|
@@ -188,19 +197,37 @@ class RTTNode extends TextureNode {
|
|
|
188
197
|
|
|
189
198
|
//
|
|
190
199
|
|
|
191
|
-
if ( this.
|
|
192
|
-
|
|
193
|
-
this.pixelRatio = renderer.getPixelRatio();
|
|
200
|
+
if ( this.autoResize === true ) {
|
|
194
201
|
|
|
202
|
+
const pixelRatio = renderer.getPixelRatio();
|
|
195
203
|
const size = renderer.getSize( _size );
|
|
196
204
|
|
|
197
|
-
|
|
205
|
+
const effectiveWidth = Math.floor( size.width * pixelRatio );
|
|
206
|
+
const effectiveHeight = Math.floor( size.height * pixelRatio );
|
|
207
|
+
|
|
208
|
+
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
209
|
+
|
|
210
|
+
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
211
|
+
|
|
212
|
+
this.textureNeedsUpdate = true;
|
|
213
|
+
|
|
214
|
+
}
|
|
198
215
|
|
|
199
216
|
}
|
|
200
217
|
|
|
201
218
|
//
|
|
202
219
|
|
|
220
|
+
let name = 'RTT';
|
|
221
|
+
|
|
222
|
+
if ( this.node.name ) {
|
|
223
|
+
|
|
224
|
+
name = this.node.name + ' [ ' + name + ' ]';
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
203
229
|
this._quadMesh.material.fragmentNode = this._rttNode;
|
|
230
|
+
this._quadMesh.name = name;
|
|
204
231
|
|
|
205
232
|
//
|
|
206
233
|
|
|
@@ -254,7 +281,7 @@ export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( n
|
|
|
254
281
|
*/
|
|
255
282
|
export const convertToTexture = ( node, ...params ) => {
|
|
256
283
|
|
|
257
|
-
if ( node.isTextureNode ) return node;
|
|
284
|
+
if ( node.isSampleNode || node.isTextureNode ) return node;
|
|
258
285
|
if ( node.isPassNode ) return node.getTextureNode();
|
|
259
286
|
|
|
260
287
|
return rtt( node, ...params );
|