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,5 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
-
import { Fn } from '../tsl/TSLCore.js';
|
|
2
|
+
import { Fn, vec3 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { modelWorldMatrix } from './ModelNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -35,9 +35,9 @@ export const positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'posit
|
|
|
35
35
|
*/
|
|
36
36
|
export const positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
37
37
|
|
|
38
|
-
return modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.
|
|
38
|
+
return modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.getSubBuildProperty( 'v_positionWorld' ) );
|
|
39
39
|
|
|
40
|
-
}, 'vec3' ).once( 'POSITION' ) )();
|
|
40
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* TSL object that represents the position world direction of the current rendered object.
|
|
@@ -45,13 +45,13 @@ export const positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
45
45
|
* @tsl
|
|
46
46
|
* @type {Node<vec3>}
|
|
47
47
|
*/
|
|
48
|
-
export const positionWorldDirection = /*@__PURE__*/ ( Fn( (
|
|
48
|
+
export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
49
49
|
|
|
50
|
-
const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying(
|
|
50
|
+
const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' );
|
|
51
51
|
|
|
52
52
|
return vertexPWD.normalize().toVar( 'positionWorldDirection' );
|
|
53
53
|
|
|
54
|
-
}, 'vec3' ).once( 'POSITION' ) )();
|
|
54
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* TSL object that represents the vertex position in view space of the current rendered object.
|
|
@@ -61,9 +61,9 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
61
61
|
*/
|
|
62
62
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
63
63
|
|
|
64
|
-
return builder.context.setupPositionView().toVarying(
|
|
64
|
+
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
65
65
|
|
|
66
|
-
}, 'vec3' ).once( 'POSITION' ) )();
|
|
66
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -71,4 +71,20 @@ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
71
71
|
* @tsl
|
|
72
72
|
* @type {VaryingNode<vec3>}
|
|
73
73
|
*/
|
|
74
|
-
export const positionViewDirection = /*@__PURE__*/
|
|
74
|
+
export const positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
75
|
+
|
|
76
|
+
let output;
|
|
77
|
+
|
|
78
|
+
if ( builder.camera.isOrthographicCamera ) {
|
|
79
|
+
|
|
80
|
+
output = vec3( 0, 0, 1 );
|
|
81
|
+
|
|
82
|
+
} else {
|
|
83
|
+
|
|
84
|
+
output = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return output.toVar( 'positionViewDirection' );
|
|
89
|
+
|
|
90
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
@@ -7,6 +7,7 @@ import { buffer } from './BufferNode.js';
|
|
|
7
7
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
|
+
import { warn } from '../../utils.js';
|
|
10
11
|
|
|
11
12
|
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
12
13
|
|
|
@@ -216,12 +217,12 @@ class ReferenceNode extends Node {
|
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
/**
|
|
219
|
-
* Sets the
|
|
220
|
+
* Sets the name for the internal uniform.
|
|
220
221
|
*
|
|
221
222
|
* @param {string} name - The label to set.
|
|
222
223
|
* @return {ReferenceNode} A reference to this node.
|
|
223
224
|
*/
|
|
224
|
-
|
|
225
|
+
setName( name ) {
|
|
225
226
|
|
|
226
227
|
this.name = name;
|
|
227
228
|
|
|
@@ -229,6 +230,21 @@ class ReferenceNode extends Node {
|
|
|
229
230
|
|
|
230
231
|
}
|
|
231
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Sets the label for the internal uniform.
|
|
235
|
+
*
|
|
236
|
+
* @deprecated
|
|
237
|
+
* @param {string} name - The label to set.
|
|
238
|
+
* @return {ReferenceNode} A reference to this node.
|
|
239
|
+
*/
|
|
240
|
+
label( name ) {
|
|
241
|
+
|
|
242
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
243
|
+
|
|
244
|
+
return this.setName( name );
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
232
248
|
/**
|
|
233
249
|
* Sets the node type which automatically defines the internal
|
|
234
250
|
* uniform type.
|
|
@@ -267,9 +283,9 @@ class ReferenceNode extends Node {
|
|
|
267
283
|
|
|
268
284
|
}
|
|
269
285
|
|
|
270
|
-
if ( this.name !== null ) node.
|
|
286
|
+
if ( this.name !== null ) node.setName( this.name );
|
|
271
287
|
|
|
272
|
-
this.node = node
|
|
288
|
+
this.node = node;
|
|
273
289
|
|
|
274
290
|
}
|
|
275
291
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cameraViewMatrix } from './Camera.js';
|
|
2
|
-
import {
|
|
2
|
+
import { normalView } from './Normal.js';
|
|
3
3
|
import { positionViewDirection } from './Position.js';
|
|
4
4
|
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
5
5
|
|
|
@@ -9,7 +9,7 @@ import { materialRefractionRatio } from './MaterialProperties.js';
|
|
|
9
9
|
* @tsl
|
|
10
10
|
* @type {Node<vec3>}
|
|
11
11
|
*/
|
|
12
|
-
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
12
|
+
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( normalView );
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* The refract vector in view space.
|
|
@@ -17,7 +17,7 @@ export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
|
17
17
|
* @tsl
|
|
18
18
|
* @type {Node<vec3>}
|
|
19
19
|
*/
|
|
20
|
-
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract(
|
|
20
|
+
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( normalView, materialRefractionRatio );
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Used for sampling cube maps when using cube reflection mapping.
|
|
@@ -5,6 +5,7 @@ import Node from '../core/Node.js';
|
|
|
5
5
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
6
6
|
import { nodeImmutable, uniform } from '../tsl/TSLBase.js';
|
|
7
7
|
import { reference } from './ReferenceNode.js';
|
|
8
|
+
import { error } from '../../utils.js';
|
|
8
9
|
|
|
9
10
|
const _e1 = /*@__PURE__*/ new Euler();
|
|
10
11
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
@@ -78,7 +79,7 @@ class SceneNode extends Node {
|
|
|
78
79
|
|
|
79
80
|
} else if ( scope === SceneNode.BACKGROUND_ROTATION ) {
|
|
80
81
|
|
|
81
|
-
output = uniform( 'mat4' ).
|
|
82
|
+
output = uniform( 'mat4' ).setName( 'backgroundRotation' ).setGroup( renderGroup ).onRenderUpdate( () => {
|
|
82
83
|
|
|
83
84
|
const background = scene.background;
|
|
84
85
|
|
|
@@ -103,7 +104,7 @@ class SceneNode extends Node {
|
|
|
103
104
|
|
|
104
105
|
} else {
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
error( 'SceneNode: Unknown scope:', scope );
|
|
107
108
|
|
|
108
109
|
}
|
|
109
110
|
|
|
@@ -4,6 +4,7 @@ import { nodeObject, varying } from '../tsl/TSLBase.js';
|
|
|
4
4
|
import { storageElement } from '../utils/StorageArrayElementNode.js';
|
|
5
5
|
import { NodeAccess } from '../core/constants.js';
|
|
6
6
|
import { getTypeFromLength } from '../core/NodeUtils.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* This node is used in context of compute shaders and allows to define a
|
|
@@ -408,7 +409,7 @@ export const storage = ( value, type = null, count = 0 ) => nodeObject( new Stor
|
|
|
408
409
|
*/
|
|
409
410
|
export const storageObject = ( value, type, count ) => { // @deprecated, r171
|
|
410
411
|
|
|
411
|
-
|
|
412
|
+
warn( 'TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
|
|
412
413
|
|
|
413
414
|
return storage( value, type, count ).setPBO( true );
|
|
414
415
|
|
|
@@ -60,6 +60,14 @@ class StorageTextureNode extends TextureNode {
|
|
|
60
60
|
*/
|
|
61
61
|
this.storeNode = storeNode;
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The mip level to write to for storage textures.
|
|
65
|
+
*
|
|
66
|
+
* @type {number}
|
|
67
|
+
* @default 0
|
|
68
|
+
*/
|
|
69
|
+
this.mipLevel = 0;
|
|
70
|
+
|
|
63
71
|
/**
|
|
64
72
|
* This flag can be used for type testing.
|
|
65
73
|
*
|
|
@@ -115,6 +123,19 @@ class StorageTextureNode extends TextureNode {
|
|
|
115
123
|
|
|
116
124
|
}
|
|
117
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Sets the mip level to write to.
|
|
128
|
+
*
|
|
129
|
+
* @param {number} level - The mip level.
|
|
130
|
+
* @return {StorageTextureNode} A reference to this node.
|
|
131
|
+
*/
|
|
132
|
+
setMipLevel( level ) {
|
|
133
|
+
|
|
134
|
+
this.mipLevel = level;
|
|
135
|
+
return this;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
118
139
|
/**
|
|
119
140
|
* Generates the code snippet of the storage node. If no `storeNode`
|
|
120
141
|
* is defined, the texture node is generated as normal texture.
|
|
@@ -186,7 +207,7 @@ class StorageTextureNode extends TextureNode {
|
|
|
186
207
|
const { uvNode, storeNode, depthNode } = properties;
|
|
187
208
|
|
|
188
209
|
const textureProperty = super.generate( builder, 'property' );
|
|
189
|
-
const uvSnippet = uvNode.build( builder, 'uvec2' );
|
|
210
|
+
const uvSnippet = uvNode.build( builder, this.value.is3DTexture === true ? 'uvec3' : 'uvec2' );
|
|
190
211
|
const storeSnippet = storeNode.build( builder, 'vec4' );
|
|
191
212
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
192
213
|
|
|
@@ -200,6 +221,7 @@ class StorageTextureNode extends TextureNode {
|
|
|
200
221
|
|
|
201
222
|
const newNode = super.clone();
|
|
202
223
|
newNode.storeNode = this.storeNode;
|
|
224
|
+
newNode.mipLevel = this.mipLevel;
|
|
203
225
|
return newNode;
|
|
204
226
|
|
|
205
227
|
}
|
|
@@ -2,6 +2,8 @@ import { attribute } from '../core/AttributeNode.js';
|
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelViewMatrix } from './ModelNode.js';
|
|
4
4
|
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { tangentViewFrame } from './TangentUtils.js';
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* TSL object that represents the tangent attribute of the current rendered object.
|
|
@@ -35,28 +37,34 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
|
|
|
35
37
|
* @tsl
|
|
36
38
|
* @type {Node<vec3>}
|
|
37
39
|
*/
|
|
38
|
-
export const tangentView = /*@__PURE__*/
|
|
40
|
+
export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
42
|
-
*
|
|
43
|
-
* @tsl
|
|
44
|
-
* @type {Node<vec3>}
|
|
45
|
-
*/
|
|
46
|
-
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
42
|
+
let node;
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
|
|
45
|
+
|
|
46
|
+
node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
|
|
47
|
+
|
|
48
|
+
} else {
|
|
49
|
+
|
|
50
|
+
node = tangentViewFrame;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if ( material.flatShading !== true ) {
|
|
55
|
+
|
|
56
|
+
node = directionToFaceDirection( node );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return node;
|
|
61
|
+
|
|
62
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'tangentView' );
|
|
55
63
|
|
|
56
64
|
/**
|
|
57
|
-
* TSL object that represents the
|
|
65
|
+
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
58
66
|
*
|
|
59
67
|
* @tsl
|
|
60
68
|
* @type {Node<vec3>}
|
|
61
69
|
*/
|
|
62
|
-
export const
|
|
70
|
+
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { uv as getUV } from './UV.js';
|
|
2
|
+
import { positionView } from './Position.js';
|
|
3
|
+
import { normalView } from './Normal.js';
|
|
4
|
+
|
|
5
|
+
// Normal Mapping Without Precomputed Tangents
|
|
6
|
+
// http://www.thetenthplanet.de/archives/1180
|
|
7
|
+
|
|
8
|
+
const uv = getUV();
|
|
9
|
+
|
|
10
|
+
const q0 = positionView.dFdx();
|
|
11
|
+
const q1 = positionView.dFdy();
|
|
12
|
+
const st0 = uv.dFdx();
|
|
13
|
+
const st1 = uv.dFdy();
|
|
14
|
+
|
|
15
|
+
const N = normalView;
|
|
16
|
+
|
|
17
|
+
const q1perp = q1.cross( N );
|
|
18
|
+
const q0perp = N.cross( q0 );
|
|
19
|
+
|
|
20
|
+
const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
|
|
21
|
+
const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
|
|
22
|
+
|
|
23
|
+
const det = T.dot( T ).max( B.dot( B ) );
|
|
24
|
+
const scale = det.equal( 0.0 ).select( 0.0, det.inverseSqrt() );
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Tangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
28
|
+
* Useful for normal mapping without precomputed tangents.
|
|
29
|
+
*
|
|
30
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @type {Node<vec3>}
|
|
34
|
+
*/
|
|
35
|
+
export const tangentViewFrame = /*@__PURE__*/ T.mul( scale ).toVar( 'tangentViewFrame' );
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Bitangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
39
|
+
* Complements the tangentViewFrame for constructing the tangent space basis.
|
|
40
|
+
*
|
|
41
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
42
|
+
*
|
|
43
|
+
* @tsl
|
|
44
|
+
* @type {Node<vec3>}
|
|
45
|
+
*/
|
|
46
|
+
export const bitangentViewFrame = /*@__PURE__*/ B.mul( scale ).toVar( 'bitangentViewFrame' );
|
|
@@ -153,7 +153,20 @@ class Texture3DNode extends TextureNode {
|
|
|
153
153
|
*/
|
|
154
154
|
generateUV( builder, uvNode ) {
|
|
155
155
|
|
|
156
|
-
return uvNode.build( builder, 'vec3' );
|
|
156
|
+
return uvNode.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Generates the offset code snippet.
|
|
162
|
+
*
|
|
163
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
164
|
+
* @param {Node} offsetNode - The offset node to generate code for.
|
|
165
|
+
* @return {string} The generated code snippet.
|
|
166
|
+
*/
|
|
167
|
+
generateOffset( builder, offsetNode ) {
|
|
168
|
+
|
|
169
|
+
return offsetNode.build( builder, 'ivec3' );
|
|
157
170
|
|
|
158
171
|
}
|
|
159
172
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { add, mul, div } from '../math/OperatorNode.js';
|
|
2
2
|
import { floor, ceil, fract, pow } from '../math/MathNode.js';
|
|
3
|
-
import { Fn,
|
|
3
|
+
import { Fn, vec2, vec4, int } from '../tsl/TSLBase.js';
|
|
4
|
+
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
4
5
|
|
|
5
6
|
// Mipped Bicubic Texture Filtering by N8
|
|
6
7
|
// https://www.shadertoy.com/view/Dl2SDW
|
|
@@ -57,10 +58,10 @@ const bicubic = ( textureNode, texelSize, lod ) => {
|
|
|
57
58
|
* @tsl
|
|
58
59
|
* @function
|
|
59
60
|
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
60
|
-
* @param {Node<float>}
|
|
61
|
+
* @param {Node<float>} lodNode - Defines the LOD to sample from.
|
|
61
62
|
* @return {Node} The filtered texture sample.
|
|
62
63
|
*/
|
|
63
|
-
export const
|
|
64
|
+
export const textureBicubicLevel = /*@__PURE__*/ Fn( ( [ textureNode, lodNode ] ) => {
|
|
64
65
|
|
|
65
66
|
const fLodSize = vec2( textureNode.size( int( lodNode ) ) );
|
|
66
67
|
const cLodSize = vec2( textureNode.size( int( lodNode.add( 1.0 ) ) ) );
|
|
@@ -72,3 +73,20 @@ export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float
|
|
|
72
73
|
return fract( lodNode ).mix( fSample, cSample );
|
|
73
74
|
|
|
74
75
|
} );
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Applies mipped bicubic texture filtering to the given texture node.
|
|
79
|
+
*
|
|
80
|
+
* @tsl
|
|
81
|
+
* @function
|
|
82
|
+
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
83
|
+
* @param {Node<float>} [strength] - Defines the strength of the bicubic filtering.
|
|
84
|
+
* @return {Node} The filtered texture sample.
|
|
85
|
+
*/
|
|
86
|
+
export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, strength ] ) => {
|
|
87
|
+
|
|
88
|
+
const lod = strength.mul( maxMipLevel( textureNode ) );
|
|
89
|
+
|
|
90
|
+
return textureBicubicLevel( textureNode, lod );
|
|
91
|
+
|
|
92
|
+
} );
|