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,20 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FileLoader, Loader, ImageBitmapLoader, Texture, RepeatWrapping, MeshBasicNodeMaterial,
|
|
3
|
+
MeshPhysicalNodeMaterial, DoubleSide,
|
|
4
|
+
} from 'three/webgpu';
|
|
2
5
|
|
|
3
6
|
import {
|
|
4
7
|
float, bool, int, vec2, vec3, vec4, color, texture,
|
|
5
8
|
positionLocal, positionWorld, uv, vertexColor,
|
|
6
9
|
normalLocal, normalWorld, tangentLocal, tangentWorld,
|
|
7
|
-
|
|
8
|
-
asin, acos,
|
|
10
|
+
mul, abs, sign, floor, ceil, round, sin, cos, tan,
|
|
11
|
+
asin, acos, sqrt, exp, clamp, min, max, normalize, length, dot, cross, normalMap,
|
|
9
12
|
remap, smoothstep, luminance, mx_rgbtohsv, mx_hsvtorgb,
|
|
10
|
-
mix,
|
|
13
|
+
mix, saturation, transpose, determinant, inverse, log, reflect, refract, element,
|
|
11
14
|
mx_ramplr, mx_ramptb, mx_splitlr, mx_splittb,
|
|
12
15
|
mx_fractal_noise_float, mx_noise_float, mx_cell_noise_float, mx_worley_noise_float,
|
|
13
16
|
mx_transform_uv,
|
|
14
17
|
mx_safepower, mx_contrast,
|
|
15
18
|
mx_srgb_texture_to_lin_rec709,
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
mx_add, mx_atan2, mx_divide, mx_modulo, mx_multiply, mx_power, mx_subtract,
|
|
20
|
+
mx_timer, mx_frame, mat3, mx_ramp4,
|
|
21
|
+
mx_invert, mx_ifgreater, mx_ifgreatereq, mx_ifequal, distance,
|
|
22
|
+
mx_separate, mx_place2d, mx_rotate2d, mx_rotate3d, mx_heighttonormal,
|
|
23
|
+
mx_unifiednoise2d, mx_unifiednoise3d
|
|
18
24
|
} from 'three/tsl';
|
|
19
25
|
|
|
20
26
|
const colorSpaceLib = {
|
|
@@ -35,19 +41,9 @@ class MXElement {
|
|
|
35
41
|
|
|
36
42
|
// Ref: https://github.com/mrdoob/three.js/issues/24674
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
const mx_subtract = ( in1, in2 = float( 0 ) ) => sub( in1, in2 );
|
|
40
|
-
const mx_multiply = ( in1, in2 = float( 1 ) ) => mul( in1, in2 );
|
|
41
|
-
const mx_divide = ( in1, in2 = float( 1 ) ) => div( in1, in2 );
|
|
42
|
-
const mx_modulo = ( in1, in2 = float( 1 ) ) => mod( in1, in2 );
|
|
43
|
-
const mx_power = ( in1, in2 = float( 1 ) ) => pow( in1, in2 );
|
|
44
|
-
const mx_atan2 = ( in1 = float( 0 ), in2 = float( 1 ) ) => atan2( in1, in2 );
|
|
45
|
-
const mx_timer = () => timerLocal();
|
|
46
|
-
const mx_frame = () => frameId;
|
|
47
|
-
const mx_invert = ( in1, amount = float( 1 ) ) => sub( amount, in1 );
|
|
44
|
+
// Enhanced separate node to support multi-output referencing (outx, outy, outz, outw)
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
const extract = ( in1, index ) => in1.element( index );
|
|
46
|
+
// Type/arity-aware MaterialX node wrappers
|
|
51
47
|
|
|
52
48
|
const MXElements = [
|
|
53
49
|
|
|
@@ -70,7 +66,7 @@ const MXElements = [
|
|
|
70
66
|
new MXElement( 'acos', acos, [ 'in' ] ),
|
|
71
67
|
new MXElement( 'atan2', mx_atan2, [ 'in1', 'in2' ] ),
|
|
72
68
|
new MXElement( 'sqrt', sqrt, [ 'in' ] ),
|
|
73
|
-
|
|
69
|
+
new MXElement( 'ln', log, [ 'in' ] ),
|
|
74
70
|
new MXElement( 'exp', exp, [ 'in' ] ),
|
|
75
71
|
new MXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
|
|
76
72
|
new MXElement( 'min', min, [ 'in1', 'in2' ] ),
|
|
@@ -79,20 +75,27 @@ const MXElements = [
|
|
|
79
75
|
new MXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
|
|
80
76
|
new MXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
|
|
81
77
|
new MXElement( 'crossproduct', cross, [ 'in' ] ),
|
|
78
|
+
new MXElement( 'distance', distance, [ 'in1', 'in2' ] ),
|
|
82
79
|
new MXElement( 'invert', mx_invert, [ 'in', 'amount' ] ),
|
|
83
80
|
//new MtlXElement( 'transformpoint', ... ),
|
|
84
81
|
//new MtlXElement( 'transformvector', ... ),
|
|
85
82
|
//new MtlXElement( 'transformnormal', ... ),
|
|
86
|
-
|
|
83
|
+
new MXElement( 'transformmatrix', mul, [ 'in1', 'in2' ] ),
|
|
87
84
|
new MXElement( 'normalmap', normalMap, [ 'in', 'scale' ] ),
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
new MXElement( 'transpose', transpose, [ 'in' ] ),
|
|
86
|
+
new MXElement( 'determinant', determinant, [ 'in' ] ),
|
|
87
|
+
new MXElement( 'invertmatrix', inverse, [ 'in' ] ),
|
|
88
|
+
new MXElement( 'creatematrix', mat3, [ 'in1', 'in2', 'in3' ] ),
|
|
91
89
|
//new MtlXElement( 'rotate2d', rotateUV, [ 'in', radians( 'amount' )** ] ),
|
|
92
90
|
//new MtlXElement( 'rotate3d', ... ),
|
|
93
91
|
//new MtlXElement( 'arrayappend', ... ),
|
|
94
92
|
//new MtlXElement( 'dot', ... ),
|
|
95
93
|
|
|
94
|
+
new MXElement( 'length', length, [ 'in' ] ),
|
|
95
|
+
new MXElement( 'crossproduct', cross, [ 'in1', 'in2' ] ),
|
|
96
|
+
new MXElement( 'floor', floor, [ 'in' ] ),
|
|
97
|
+
new MXElement( 'ceil', ceil, [ 'in' ] ),
|
|
98
|
+
|
|
96
99
|
// << Adjustment >>
|
|
97
100
|
new MXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
|
|
98
101
|
new MXElement( 'smoothstep', smoothstep, [ 'in', 'low', 'high' ] ),
|
|
@@ -113,6 +116,7 @@ const MXElements = [
|
|
|
113
116
|
// << Procedural >>
|
|
114
117
|
new MXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
|
|
115
118
|
new MXElement( 'ramptb', mx_ramptb, [ 'valuet', 'valueb', 'texcoord' ] ),
|
|
119
|
+
new MXElement( 'ramp4', mx_ramp4, [ 'valuetl', 'valuetr', 'valuebl', 'valuebr', 'texcoord' ] ),
|
|
116
120
|
new MXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'texcoord' ] ),
|
|
117
121
|
new MXElement( 'splittb', mx_splittb, [ 'valuet', 'valueb', 'texcoord' ] ),
|
|
118
122
|
new MXElement( 'noise2d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
|
|
@@ -122,23 +126,34 @@ const MXElements = [
|
|
|
122
126
|
new MXElement( 'cellnoise3d', mx_cell_noise_float, [ 'texcoord' ] ),
|
|
123
127
|
new MXElement( 'worleynoise2d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
|
|
124
128
|
new MXElement( 'worleynoise3d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
|
|
125
|
-
|
|
129
|
+
new MXElement( 'unifiednoise2d', mx_unifiednoise2d, [ 'type', 'texcoord', 'freq', 'offset', 'jitter', 'outmin', 'outmax', 'clampoutput', 'octaves', 'lacunarity', 'diminish' ] ),
|
|
130
|
+
new MXElement( 'unifiednoise3d', mx_unifiednoise3d, [ 'type', 'texcoord', 'freq', 'offset', 'jitter', 'outmin', 'outmax', 'clampoutput', 'octaves', 'lacunarity', 'diminish' ] ),
|
|
126
131
|
// << Supplemental >>
|
|
127
132
|
//new MtlXElement( 'tiledimage', ... ),
|
|
128
133
|
//new MtlXElement( 'triplanarprojection', triplanarTextures, [ 'filex', 'filey', 'filez' ] ),
|
|
129
134
|
//new MtlXElement( 'ramp4', ... ),
|
|
130
|
-
|
|
135
|
+
new MXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset', 'operationorder' ] ),
|
|
131
136
|
new MXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
|
|
132
137
|
new MXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
|
|
133
138
|
//new MtlXElement( 'hsvadjust', ... ),
|
|
134
139
|
new MXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
|
|
135
|
-
new MXElement( 'extract',
|
|
136
|
-
new MXElement( 'separate2',
|
|
137
|
-
new MXElement( 'separate3',
|
|
138
|
-
new MXElement( 'separate4',
|
|
140
|
+
new MXElement( 'extract', element, [ 'in', 'index' ] ),
|
|
141
|
+
new MXElement( 'separate2', mx_separate, [ 'in' ] ),
|
|
142
|
+
new MXElement( 'separate3', mx_separate, [ 'in' ] ),
|
|
143
|
+
new MXElement( 'separate4', mx_separate, [ 'in' ] ),
|
|
144
|
+
new MXElement( 'reflect', reflect, [ 'in', 'normal' ] ),
|
|
145
|
+
new MXElement( 'refract', refract, [ 'in', 'normal', 'ior' ] ),
|
|
139
146
|
|
|
140
147
|
new MXElement( 'time', mx_timer ),
|
|
141
|
-
new MXElement( 'frame', mx_frame )
|
|
148
|
+
new MXElement( 'frame', mx_frame ),
|
|
149
|
+
new MXElement( 'ifgreater', mx_ifgreater, [ 'value1', 'value2', 'in1', 'in2' ] ),
|
|
150
|
+
new MXElement( 'ifgreatereq', mx_ifgreatereq, [ 'value1', 'value2', 'in1', 'in2' ] ),
|
|
151
|
+
new MXElement( 'ifequal', mx_ifequal, [ 'value1', 'value2', 'in1', 'in2' ] ),
|
|
152
|
+
|
|
153
|
+
// Placeholder implementations for unsupported nodes
|
|
154
|
+
new MXElement( 'rotate2d', mx_rotate2d, [ 'in', 'amount' ] ),
|
|
155
|
+
new MXElement( 'rotate3d', mx_rotate3d, [ 'in', 'amount', 'axis' ] ),
|
|
156
|
+
new MXElement( 'heighttonormal', mx_heighttonormal, [ 'in', 'scale', 'texcoord' ] ),
|
|
142
157
|
|
|
143
158
|
];
|
|
144
159
|
|
|
@@ -220,6 +235,22 @@ class MaterialXLoader extends Loader {
|
|
|
220
235
|
/**
|
|
221
236
|
* Parses the given MaterialX data and returns the resulting materials.
|
|
222
237
|
*
|
|
238
|
+
* Supported standard_surface inputs:
|
|
239
|
+
* - base, base_color: Base color/albedo
|
|
240
|
+
* - opacity: Alpha/transparency
|
|
241
|
+
* - specular_roughness: Surface roughness
|
|
242
|
+
* - metalness: Metallic property
|
|
243
|
+
* - specular: Specular reflection intensity
|
|
244
|
+
* - specular_color: Specular reflection color
|
|
245
|
+
* - ior: Index of refraction
|
|
246
|
+
* - specular_anisotropy, specular_rotation: Anisotropic reflection
|
|
247
|
+
* - transmission, transmission_color: Transmission properties
|
|
248
|
+
* - thin_film_thickness, thin_film_ior: Thin film interference
|
|
249
|
+
* - sheen, sheen_color, sheen_roughness: Sheen properties
|
|
250
|
+
* - normal: Normal map
|
|
251
|
+
* - coat, coat_roughness, coat_color: Clearcoat properties
|
|
252
|
+
* - emission, emissionColor: Emission properties
|
|
253
|
+
*
|
|
223
254
|
* @param {string} text - The raw MaterialX data as a string.
|
|
224
255
|
* @return {Object<string,NodeMaterial>} A dictionary holding the parse node materials.
|
|
225
256
|
*/
|
|
@@ -235,6 +266,12 @@ class MaterialXNode {
|
|
|
235
266
|
|
|
236
267
|
constructor( materialX, nodeXML, nodePath = '' ) {
|
|
237
268
|
|
|
269
|
+
if ( ! materialX || typeof materialX !== 'object' ) {
|
|
270
|
+
|
|
271
|
+
console.warn( 'MaterialXNode: materialX argument is not an object!', { materialX, nodeXML, nodePath } );
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
238
275
|
this.materialX = materialX;
|
|
239
276
|
this.nodeXML = nodeXML;
|
|
240
277
|
this.nodePath = nodePath ? nodePath + '/' + this.name : this.name;
|
|
@@ -373,9 +410,15 @@ class MaterialXNode {
|
|
|
373
410
|
getTexture() {
|
|
374
411
|
|
|
375
412
|
const filePrefix = this.getRecursiveAttribute( 'fileprefix' ) || '';
|
|
413
|
+
const uri = filePrefix + this.value;
|
|
414
|
+
|
|
415
|
+
if ( this.materialX.textureCache.has( uri ) ) {
|
|
416
|
+
|
|
417
|
+
return this.materialX.textureCache.get( uri );
|
|
418
|
+
|
|
419
|
+
}
|
|
376
420
|
|
|
377
421
|
let loader = this.materialX.textureLoader;
|
|
378
|
-
const uri = filePrefix + this.value;
|
|
379
422
|
|
|
380
423
|
if ( uri ) {
|
|
381
424
|
|
|
@@ -384,9 +427,17 @@ class MaterialXNode {
|
|
|
384
427
|
|
|
385
428
|
}
|
|
386
429
|
|
|
387
|
-
const texture =
|
|
430
|
+
const texture = new Texture();
|
|
388
431
|
texture.wrapS = texture.wrapT = RepeatWrapping;
|
|
389
|
-
|
|
432
|
+
|
|
433
|
+
this.materialX.textureCache.set( uri, texture );
|
|
434
|
+
|
|
435
|
+
loader.load( uri, function ( imageBitmap ) {
|
|
436
|
+
|
|
437
|
+
texture.image = imageBitmap;
|
|
438
|
+
texture.needsUpdate = true;
|
|
439
|
+
|
|
440
|
+
} );
|
|
390
441
|
|
|
391
442
|
return texture;
|
|
392
443
|
|
|
@@ -418,6 +469,37 @@ class MaterialXNode {
|
|
|
418
469
|
|
|
419
470
|
}
|
|
420
471
|
|
|
472
|
+
// Handle <input name="texcoord" type="vector2" ... />
|
|
473
|
+
if (
|
|
474
|
+
this.element === 'input' &&
|
|
475
|
+
this.name === 'texcoord' &&
|
|
476
|
+
this.type === 'vector2'
|
|
477
|
+
) {
|
|
478
|
+
|
|
479
|
+
// Try to get index from defaultgeomprop (e.g., "UV0" => 0)
|
|
480
|
+
let index = 0;
|
|
481
|
+
const defaultGeomProp = this.getAttribute( 'defaultgeomprop' );
|
|
482
|
+
if ( defaultGeomProp && /^UV(\d+)$/.test( defaultGeomProp ) ) {
|
|
483
|
+
|
|
484
|
+
index = parseInt( defaultGeomProp.match( /^UV(\d+)$/ )[ 1 ], 10 );
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
node = uv( index );
|
|
489
|
+
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// Multi-output support for separate/separate3
|
|
493
|
+
if (
|
|
494
|
+
( this.element === 'separate3' || this.element === 'separate2' || this.element === 'separate4' ) &&
|
|
495
|
+
out && typeof out === 'string' && out.startsWith( 'out' )
|
|
496
|
+
) {
|
|
497
|
+
|
|
498
|
+
const inNode = this.getNodeByName( 'in' );
|
|
499
|
+
return mx_separate( inNode, out );
|
|
500
|
+
|
|
501
|
+
}
|
|
502
|
+
|
|
421
503
|
//
|
|
422
504
|
|
|
423
505
|
const type = this.type;
|
|
@@ -519,6 +601,18 @@ class MaterialXNode {
|
|
|
519
601
|
|
|
520
602
|
const nodeElement = MtlXLibrary[ element ];
|
|
521
603
|
|
|
604
|
+
if ( ! nodeElement ) {
|
|
605
|
+
|
|
606
|
+
throw new Error( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
|
|
607
|
+
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
if ( ! nodeElement.nodeFunc ) {
|
|
611
|
+
|
|
612
|
+
throw new Error( `THREE.MaterialXLoader: Unexpected node 2 ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
|
|
522
616
|
if ( out !== null ) {
|
|
523
617
|
|
|
524
618
|
node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ), out );
|
|
@@ -551,6 +645,11 @@ class MaterialXNode {
|
|
|
551
645
|
|
|
552
646
|
node = nodeToTypeClass( node );
|
|
553
647
|
|
|
648
|
+
} else {
|
|
649
|
+
|
|
650
|
+
console.warn( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
|
|
651
|
+
node = float( 0 );
|
|
652
|
+
|
|
554
653
|
}
|
|
555
654
|
|
|
556
655
|
node.name = this.name;
|
|
@@ -673,6 +772,12 @@ class MaterialXNode {
|
|
|
673
772
|
|
|
674
773
|
//
|
|
675
774
|
|
|
775
|
+
let opacityNode = null;
|
|
776
|
+
|
|
777
|
+
if ( inputs.opacity ) opacityNode = inputs.opacity;
|
|
778
|
+
|
|
779
|
+
//
|
|
780
|
+
|
|
676
781
|
let roughnessNode = null;
|
|
677
782
|
|
|
678
783
|
if ( inputs.specular_roughness ) roughnessNode = inputs.specular_roughness;
|
|
@@ -685,6 +790,64 @@ class MaterialXNode {
|
|
|
685
790
|
|
|
686
791
|
//
|
|
687
792
|
|
|
793
|
+
let specularIntensityNode = null;
|
|
794
|
+
|
|
795
|
+
if ( inputs.specular ) specularIntensityNode = inputs.specular;
|
|
796
|
+
|
|
797
|
+
//
|
|
798
|
+
|
|
799
|
+
let specularColorNode = null;
|
|
800
|
+
|
|
801
|
+
if ( inputs.specular_color ) specularColorNode = inputs.specular_color;
|
|
802
|
+
|
|
803
|
+
//
|
|
804
|
+
|
|
805
|
+
let iorNode = null;
|
|
806
|
+
|
|
807
|
+
if ( inputs.ior ) iorNode = inputs.ior;
|
|
808
|
+
|
|
809
|
+
//
|
|
810
|
+
|
|
811
|
+
let anisotropyNode = null;
|
|
812
|
+
let anisotropyRotationNode = null;
|
|
813
|
+
|
|
814
|
+
if ( inputs.specular_anisotropy ) anisotropyNode = inputs.specular_anisotropy;
|
|
815
|
+
if ( inputs.specular_rotation ) anisotropyRotationNode = inputs.specular_rotation;
|
|
816
|
+
|
|
817
|
+
//
|
|
818
|
+
|
|
819
|
+
let transmissionNode = null;
|
|
820
|
+
let transmissionColorNode = null;
|
|
821
|
+
|
|
822
|
+
if ( inputs.transmission ) transmissionNode = inputs.transmission;
|
|
823
|
+
if ( inputs.transmission_color ) transmissionColorNode = inputs.transmission_color;
|
|
824
|
+
|
|
825
|
+
//
|
|
826
|
+
|
|
827
|
+
let thinFilmThicknessNode = null;
|
|
828
|
+
let thinFilmIorNode = null;
|
|
829
|
+
|
|
830
|
+
if ( inputs.thin_film_thickness ) thinFilmThicknessNode = inputs.thin_film_thickness;
|
|
831
|
+
|
|
832
|
+
if ( inputs.thin_film_ior ) {
|
|
833
|
+
|
|
834
|
+
// Clamp IOR to valid range for Three.js (1.0 to 2.333)
|
|
835
|
+
thinFilmIorNode = clamp( inputs.thin_film_ior, float( 1.0 ), float( 2.333 ) );
|
|
836
|
+
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
//
|
|
840
|
+
|
|
841
|
+
let sheenNode = null;
|
|
842
|
+
let sheenColorNode = null;
|
|
843
|
+
let sheenRoughnessNode = null;
|
|
844
|
+
|
|
845
|
+
if ( inputs.sheen ) sheenNode = inputs.sheen;
|
|
846
|
+
if ( inputs.sheen_color ) sheenColorNode = inputs.sheen_color;
|
|
847
|
+
if ( inputs.sheen_roughness ) sheenRoughnessNode = inputs.sheen_roughness;
|
|
848
|
+
|
|
849
|
+
//
|
|
850
|
+
|
|
688
851
|
let clearcoatNode = null;
|
|
689
852
|
let clearcoatRoughnessNode = null;
|
|
690
853
|
|
|
@@ -717,13 +880,46 @@ class MaterialXNode {
|
|
|
717
880
|
//
|
|
718
881
|
|
|
719
882
|
material.colorNode = colorNode || color( 0.8, 0.8, 0.8 );
|
|
883
|
+
material.opacityNode = opacityNode || float( 1.0 );
|
|
720
884
|
material.roughnessNode = roughnessNode || float( 0.2 );
|
|
721
885
|
material.metalnessNode = metalnessNode || float( 0 );
|
|
886
|
+
material.specularIntensityNode = specularIntensityNode || float( 0.5 );
|
|
887
|
+
material.specularColorNode = specularColorNode || color( 1.0, 1.0, 1.0 );
|
|
888
|
+
material.iorNode = iorNode || float( 1.5 );
|
|
889
|
+
material.anisotropyNode = anisotropyNode || float( 0 );
|
|
890
|
+
material.anisotropyRotationNode = anisotropyRotationNode || float( 0 );
|
|
891
|
+
material.transmissionNode = transmissionNode || float( 0 );
|
|
892
|
+
material.transmissionColorNode = transmissionColorNode || color( 1.0, 1.0, 1.0 );
|
|
893
|
+
material.thinFilmThicknessNode = thinFilmThicknessNode || float( 0 );
|
|
894
|
+
material.thinFilmIorNode = thinFilmIorNode || float( 1.5 );
|
|
895
|
+
material.sheenNode = sheenNode || float( 0 );
|
|
896
|
+
material.sheenColorNode = sheenColorNode || color( 1.0, 1.0, 1.0 );
|
|
897
|
+
material.sheenRoughnessNode = sheenRoughnessNode || float( 0.5 );
|
|
722
898
|
material.clearcoatNode = clearcoatNode || float( 0 );
|
|
723
899
|
material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
|
|
724
900
|
if ( normalNode ) material.normalNode = normalNode;
|
|
725
901
|
if ( emissiveNode ) material.emissiveNode = emissiveNode;
|
|
726
902
|
|
|
903
|
+
// Auto-enable iridescence when thin film parameters are present
|
|
904
|
+
if ( thinFilmThicknessNode && thinFilmThicknessNode.value !== undefined && thinFilmThicknessNode.value > 0 ) {
|
|
905
|
+
|
|
906
|
+
material.iridescence = 1.0;
|
|
907
|
+
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
if ( opacityNode !== null ) {
|
|
911
|
+
|
|
912
|
+
material.transparent = true;
|
|
913
|
+
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
if ( transmissionNode !== null ) {
|
|
917
|
+
|
|
918
|
+
material.side = DoubleSide;
|
|
919
|
+
material.transparent = true;
|
|
920
|
+
|
|
921
|
+
}
|
|
922
|
+
|
|
727
923
|
}
|
|
728
924
|
|
|
729
925
|
/*setGltfPBR( material ) {
|
|
@@ -848,7 +1044,10 @@ class MaterialX {
|
|
|
848
1044
|
this.nodesXLib = new Map();
|
|
849
1045
|
//this.nodesXRefLib = new WeakMap();
|
|
850
1046
|
|
|
851
|
-
this.textureLoader = new
|
|
1047
|
+
this.textureLoader = new ImageBitmapLoader( manager );
|
|
1048
|
+
this.textureLoader.setOptions( { imageOrientation: 'flipY' } );
|
|
1049
|
+
|
|
1050
|
+
this.textureCache = new Map();
|
|
852
1051
|
|
|
853
1052
|
}
|
|
854
1053
|
|
|
@@ -436,7 +436,7 @@ function ParserState() {
|
|
|
436
436
|
/**
|
|
437
437
|
* A loader for the OBJ format.
|
|
438
438
|
*
|
|
439
|
-
* The [OBJ format]
|
|
439
|
+
* The [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) is a simple data-format that
|
|
440
440
|
* represents 3D geometry in a human readable format as the position of each vertex, the UV position of
|
|
441
441
|
* each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list
|
|
442
442
|
* of vertices, and texture vertices.
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
/**
|
|
11
11
|
* A loader for the PDB format.
|
|
12
12
|
*
|
|
13
|
-
* The [Protein Data Bank]
|
|
13
|
+
* The [Protein Data Bank](https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format))
|
|
14
14
|
* file format is a textual file describing the three-dimensional structures of molecules.
|
|
15
15
|
*
|
|
16
16
|
* ```js
|