super-three 0.157.1 → 0.160.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 +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -62,7 +62,8 @@ import {
|
|
|
62
62
|
Vector2,
|
|
63
63
|
Vector3,
|
|
64
64
|
VectorKeyframeTrack,
|
|
65
|
-
SRGBColorSpace
|
|
65
|
+
SRGBColorSpace,
|
|
66
|
+
InstancedBufferAttribute
|
|
66
67
|
} from 'three';
|
|
67
68
|
import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
68
69
|
|
|
@@ -150,6 +151,12 @@ class GLTFLoader extends Loader {
|
|
|
150
151
|
|
|
151
152
|
} );
|
|
152
153
|
|
|
154
|
+
this.register( function ( parser ) {
|
|
155
|
+
|
|
156
|
+
return new GLTFMaterialsBumpExtension( parser );
|
|
157
|
+
|
|
158
|
+
} );
|
|
159
|
+
|
|
153
160
|
this.register( function ( parser ) {
|
|
154
161
|
|
|
155
162
|
return new GLTFLightsExtension( parser );
|
|
@@ -182,7 +189,13 @@ class GLTFLoader extends Loader {
|
|
|
182
189
|
|
|
183
190
|
} else if ( this.path !== '' ) {
|
|
184
191
|
|
|
185
|
-
|
|
192
|
+
// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file
|
|
193
|
+
// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'
|
|
194
|
+
// resourcePath = 'https://my-cnd-server.com/assets/models/'
|
|
195
|
+
// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'
|
|
196
|
+
// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'
|
|
197
|
+
const relativeUrl = LoaderUtils.extractUrlBase( url );
|
|
198
|
+
resourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );
|
|
186
199
|
|
|
187
200
|
} else {
|
|
188
201
|
|
|
@@ -361,6 +374,9 @@ class GLTFLoader extends Loader {
|
|
|
361
374
|
for ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {
|
|
362
375
|
|
|
363
376
|
const plugin = this.pluginCallbacks[ i ]( parser );
|
|
377
|
+
|
|
378
|
+
if ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );
|
|
379
|
+
|
|
364
380
|
plugins[ plugin.name ] = plugin;
|
|
365
381
|
|
|
366
382
|
// Workaround to avoid determining as unknown extension
|
|
@@ -487,6 +503,7 @@ const EXTENSIONS = {
|
|
|
487
503
|
KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',
|
|
488
504
|
KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
|
|
489
505
|
KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
|
|
506
|
+
EXT_MATERIALS_BUMP: 'EXT_materials_bump',
|
|
490
507
|
EXT_TEXTURE_WEBP: 'EXT_texture_webp',
|
|
491
508
|
EXT_TEXTURE_AVIF: 'EXT_texture_avif',
|
|
492
509
|
EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
|
|
@@ -942,7 +959,7 @@ class GLTFMaterialsSheenExtension {
|
|
|
942
959
|
if ( extension.sheenColorFactor !== undefined ) {
|
|
943
960
|
|
|
944
961
|
const colorFactor = extension.sheenColorFactor;
|
|
945
|
-
materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor
|
|
962
|
+
materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );
|
|
946
963
|
|
|
947
964
|
}
|
|
948
965
|
|
|
@@ -1197,6 +1214,61 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1197
1214
|
|
|
1198
1215
|
}
|
|
1199
1216
|
|
|
1217
|
+
|
|
1218
|
+
/**
|
|
1219
|
+
* Materials bump Extension
|
|
1220
|
+
*
|
|
1221
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump
|
|
1222
|
+
*/
|
|
1223
|
+
class GLTFMaterialsBumpExtension {
|
|
1224
|
+
|
|
1225
|
+
constructor( parser ) {
|
|
1226
|
+
|
|
1227
|
+
this.parser = parser;
|
|
1228
|
+
this.name = EXTENSIONS.EXT_MATERIALS_BUMP;
|
|
1229
|
+
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
getMaterialType( materialIndex ) {
|
|
1233
|
+
|
|
1234
|
+
const parser = this.parser;
|
|
1235
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1236
|
+
|
|
1237
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1238
|
+
|
|
1239
|
+
return MeshPhysicalMaterial;
|
|
1240
|
+
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
extendMaterialParams( materialIndex, materialParams ) {
|
|
1244
|
+
|
|
1245
|
+
const parser = this.parser;
|
|
1246
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1247
|
+
|
|
1248
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1249
|
+
|
|
1250
|
+
return Promise.resolve();
|
|
1251
|
+
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
const pending = [];
|
|
1255
|
+
|
|
1256
|
+
const extension = materialDef.extensions[ this.name ];
|
|
1257
|
+
|
|
1258
|
+
materialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;
|
|
1259
|
+
|
|
1260
|
+
if ( extension.bumpTexture !== undefined ) {
|
|
1261
|
+
|
|
1262
|
+
pending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
|
|
1263
|
+
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
return Promise.all( pending );
|
|
1267
|
+
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1200
1272
|
/**
|
|
1201
1273
|
* Materials anisotropy Extension
|
|
1202
1274
|
*
|
|
@@ -1679,7 +1751,12 @@ class GLTFMeshGpuInstancing {
|
|
|
1679
1751
|
// Add instance attributes to the geometry, excluding TRS.
|
|
1680
1752
|
for ( const attributeName in attributes ) {
|
|
1681
1753
|
|
|
1682
|
-
if ( attributeName
|
|
1754
|
+
if ( attributeName === '_COLOR_0' ) {
|
|
1755
|
+
|
|
1756
|
+
const attr = attributes[ attributeName ];
|
|
1757
|
+
instancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );
|
|
1758
|
+
|
|
1759
|
+
} else if ( attributeName !== 'TRANSLATION' &&
|
|
1683
1760
|
attributeName !== 'ROTATION' &&
|
|
1684
1761
|
attributeName !== 'SCALE' ) {
|
|
1685
1762
|
|
|
@@ -1846,7 +1923,7 @@ class GLTFDracoMeshCompressionExtension {
|
|
|
1846
1923
|
|
|
1847
1924
|
return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {
|
|
1848
1925
|
|
|
1849
|
-
return new Promise( function ( resolve ) {
|
|
1926
|
+
return new Promise( function ( resolve, reject ) {
|
|
1850
1927
|
|
|
1851
1928
|
dracoLoader.decodeDracoFile( bufferView, function ( geometry ) {
|
|
1852
1929
|
|
|
@@ -1861,7 +1938,7 @@ class GLTFDracoMeshCompressionExtension {
|
|
|
1861
1938
|
|
|
1862
1939
|
resolve( geometry );
|
|
1863
1940
|
|
|
1864
|
-
}, threeAttributeMap, attributeTypeMap );
|
|
1941
|
+
}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );
|
|
1865
1942
|
|
|
1866
1943
|
} );
|
|
1867
1944
|
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Loader,
|
|
3
|
+
TextureLoader,
|
|
4
|
+
DataTexture,
|
|
5
|
+
Data3DTexture,
|
|
6
|
+
RGBAFormat,
|
|
7
|
+
UnsignedByteType,
|
|
8
|
+
ClampToEdgeWrapping,
|
|
9
|
+
LinearFilter,
|
|
10
|
+
} from 'three';
|
|
11
|
+
|
|
12
|
+
export class LUTImageLoader extends Loader {
|
|
13
|
+
|
|
14
|
+
constructor( flipVertical = false ) {
|
|
15
|
+
//The NeutralLUT.png has green at the bottom for Unreal ang green at the top for Unity URP Color Lookup
|
|
16
|
+
//post-processing. If you're using lut image strips from a Unity pipeline then pass true to the constructor
|
|
17
|
+
|
|
18
|
+
super();
|
|
19
|
+
|
|
20
|
+
this.flip = flipVertical;
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
load( url, onLoad, onProgress, onError ) {
|
|
25
|
+
|
|
26
|
+
const loader = new TextureLoader( this.manager );
|
|
27
|
+
|
|
28
|
+
loader.setCrossOrigin( this.crossOrigin );
|
|
29
|
+
|
|
30
|
+
loader.setPath( this.path );
|
|
31
|
+
loader.load( url, texture => {
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
|
|
35
|
+
let imageData;
|
|
36
|
+
|
|
37
|
+
if ( texture.image.width < texture.image.height ) {
|
|
38
|
+
|
|
39
|
+
imageData = this.getImageData( texture );
|
|
40
|
+
|
|
41
|
+
} else {
|
|
42
|
+
|
|
43
|
+
imageData = this.horz2Vert( texture );
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
onLoad( this.parse( imageData.data, Math.min( texture.image.width, texture.image.height ) ) );
|
|
48
|
+
|
|
49
|
+
} catch ( e ) {
|
|
50
|
+
|
|
51
|
+
if ( onError ) {
|
|
52
|
+
|
|
53
|
+
onError( e );
|
|
54
|
+
|
|
55
|
+
} else {
|
|
56
|
+
|
|
57
|
+
console.error( e );
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
this.manager.itemError( url );
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}, onProgress, onError );
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
getImageData( texture ) {
|
|
70
|
+
|
|
71
|
+
const width = texture.image.width;
|
|
72
|
+
const height = texture.image.height;
|
|
73
|
+
|
|
74
|
+
const canvas = document.createElement( 'canvas' );
|
|
75
|
+
canvas.width = width;
|
|
76
|
+
canvas.height = height;
|
|
77
|
+
|
|
78
|
+
const context = canvas.getContext( '2d' );
|
|
79
|
+
|
|
80
|
+
if ( this.flip === true ) {
|
|
81
|
+
|
|
82
|
+
context.scale( 1, - 1 );
|
|
83
|
+
context.translate( 0, - height );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
context.drawImage( texture.image, 0, 0 );
|
|
88
|
+
|
|
89
|
+
return context.getImageData( 0, 0, width, height );
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
horz2Vert( texture ) {
|
|
94
|
+
|
|
95
|
+
const width = texture.image.height;
|
|
96
|
+
const height = texture.image.width;
|
|
97
|
+
|
|
98
|
+
const canvas = document.createElement( 'canvas' );
|
|
99
|
+
canvas.width = width;
|
|
100
|
+
canvas.height = height;
|
|
101
|
+
|
|
102
|
+
const context = canvas.getContext( '2d' );
|
|
103
|
+
|
|
104
|
+
if ( this.flip === true ) {
|
|
105
|
+
|
|
106
|
+
context.scale( 1, - 1 );
|
|
107
|
+
context.translate( 0, - height );
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for ( let i = 0; i < width; i ++ ) {
|
|
112
|
+
|
|
113
|
+
const sy = i * width;
|
|
114
|
+
const dy = ( this.flip ) ? height - i * width : i * width;
|
|
115
|
+
context.drawImage( texture.image, sy, 0, width, width, 0, dy, width, width );
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return context.getImageData( 0, 0, width, height );
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
parse( dataArray, size ) {
|
|
124
|
+
|
|
125
|
+
const data = new Uint8Array( dataArray );
|
|
126
|
+
const texture = new DataTexture();
|
|
127
|
+
texture.image.data = data;
|
|
128
|
+
texture.image.width = size;
|
|
129
|
+
texture.image.height = size * size;
|
|
130
|
+
texture.format = RGBAFormat;
|
|
131
|
+
texture.type = UnsignedByteType;
|
|
132
|
+
texture.magFilter = LinearFilter;
|
|
133
|
+
texture.minFilter = LinearFilter;
|
|
134
|
+
texture.wrapS = ClampToEdgeWrapping;
|
|
135
|
+
texture.wrapT = ClampToEdgeWrapping;
|
|
136
|
+
texture.generateMipmaps = false;
|
|
137
|
+
texture.needsUpdate = true;
|
|
138
|
+
|
|
139
|
+
const texture3D = new Data3DTexture();
|
|
140
|
+
texture3D.image.data = data;
|
|
141
|
+
texture3D.image.width = size;
|
|
142
|
+
texture3D.image.height = size;
|
|
143
|
+
texture3D.image.depth = size;
|
|
144
|
+
texture3D.format = RGBAFormat;
|
|
145
|
+
texture3D.type = UnsignedByteType;
|
|
146
|
+
texture3D.magFilter = LinearFilter;
|
|
147
|
+
texture3D.minFilter = LinearFilter;
|
|
148
|
+
texture3D.wrapS = ClampToEdgeWrapping;
|
|
149
|
+
texture3D.wrapT = ClampToEdgeWrapping;
|
|
150
|
+
texture3D.wrapR = ClampToEdgeWrapping;
|
|
151
|
+
texture3D.generateMipmaps = false;
|
|
152
|
+
texture3D.needsUpdate = true;
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
size,
|
|
156
|
+
texture,
|
|
157
|
+
texture3D,
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
@@ -19,13 +19,13 @@ import {
|
|
|
19
19
|
mx_safepower, mx_contrast,
|
|
20
20
|
mx_srgb_texture_to_lin_rec709,
|
|
21
21
|
saturation
|
|
22
|
-
} from '
|
|
22
|
+
} from '../nodes/Nodes.js';
|
|
23
23
|
|
|
24
24
|
const colorSpaceLib = {
|
|
25
25
|
mx_srgb_texture_to_lin_rec709
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
class
|
|
28
|
+
class MXElement {
|
|
29
29
|
|
|
30
30
|
constructor( name, nodeFunc, params = null ) {
|
|
31
31
|
|
|
@@ -39,41 +39,41 @@ class MtlXElement {
|
|
|
39
39
|
|
|
40
40
|
// Ref: https://github.com/mrdoob/three.js/issues/24674
|
|
41
41
|
|
|
42
|
-
const
|
|
42
|
+
const MXElements = [
|
|
43
43
|
|
|
44
44
|
// << Math >>
|
|
45
|
-
new
|
|
46
|
-
new
|
|
47
|
-
new
|
|
48
|
-
new
|
|
49
|
-
new
|
|
50
|
-
new
|
|
51
|
-
new
|
|
52
|
-
new
|
|
53
|
-
new
|
|
54
|
-
new
|
|
55
|
-
new
|
|
56
|
-
new
|
|
57
|
-
new
|
|
58
|
-
new
|
|
59
|
-
new
|
|
60
|
-
new
|
|
61
|
-
new
|
|
62
|
-
new
|
|
45
|
+
new MXElement( 'add', add, [ 'in1', 'in2' ] ),
|
|
46
|
+
new MXElement( 'subtract', sub, [ 'in1', 'in2' ] ),
|
|
47
|
+
new MXElement( 'multiply', mul, [ 'in1', 'in2' ] ),
|
|
48
|
+
new MXElement( 'divide', div, [ 'in1', 'in2' ] ),
|
|
49
|
+
new MXElement( 'modulo', mod, [ 'in1', 'in2' ] ),
|
|
50
|
+
new MXElement( 'absval', abs, [ 'in1', 'in2' ] ),
|
|
51
|
+
new MXElement( 'sign', sign, [ 'in1', 'in2' ] ),
|
|
52
|
+
new MXElement( 'floor', floor, [ 'in1', 'in2' ] ),
|
|
53
|
+
new MXElement( 'ceil', ceil, [ 'in1', 'in2' ] ),
|
|
54
|
+
new MXElement( 'round', round, [ 'in1', 'in2' ] ),
|
|
55
|
+
new MXElement( 'power', pow, [ 'in1', 'in2' ] ),
|
|
56
|
+
new MXElement( 'sin', sin, [ 'in' ] ),
|
|
57
|
+
new MXElement( 'cos', cos, [ 'in' ] ),
|
|
58
|
+
new MXElement( 'tan', tan, [ 'in' ] ),
|
|
59
|
+
new MXElement( 'asin', asin, [ 'in' ] ),
|
|
60
|
+
new MXElement( 'acos', acos, [ 'in' ] ),
|
|
61
|
+
new MXElement( 'atan2', atan2, [ 'in1', 'in2' ] ),
|
|
62
|
+
new MXElement( 'sqrt', sqrt, [ 'in' ] ),
|
|
63
63
|
//new MtlXElement( 'ln', ... ),
|
|
64
|
-
new
|
|
65
|
-
new
|
|
66
|
-
new
|
|
67
|
-
new
|
|
68
|
-
new
|
|
69
|
-
new
|
|
70
|
-
new
|
|
71
|
-
new
|
|
64
|
+
new MXElement( 'exp', exp, [ 'in' ] ),
|
|
65
|
+
new MXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
|
|
66
|
+
new MXElement( 'min', min, [ 'in1', 'in2' ] ),
|
|
67
|
+
new MXElement( 'max', max, [ 'in1', 'in2' ] ),
|
|
68
|
+
new MXElement( 'normalize', normalize, [ 'in' ] ),
|
|
69
|
+
new MXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
|
|
70
|
+
new MXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
|
|
71
|
+
new MXElement( 'crossproduct', cross, [ 'in' ] ),
|
|
72
72
|
//new MtlXElement( 'transformpoint', ... ),
|
|
73
73
|
//new MtlXElement( 'transformvector', ... ),
|
|
74
74
|
//new MtlXElement( 'transformnormal', ... ),
|
|
75
75
|
//new MtlXElement( 'transformmatrix', ... ),
|
|
76
|
-
new
|
|
76
|
+
new MXElement( 'normalmap', normalMap, [ 'in', 'scale' ] ),
|
|
77
77
|
//new MtlXElement( 'transpose', ... ),
|
|
78
78
|
//new MtlXElement( 'determinant', ... ),
|
|
79
79
|
//new MtlXElement( 'invertmatrix', ... ),
|
|
@@ -83,44 +83,44 @@ const MtlXElements = [
|
|
|
83
83
|
//new MtlXElement( 'dot', ... ),
|
|
84
84
|
|
|
85
85
|
// << Adjustment >>
|
|
86
|
-
new
|
|
87
|
-
new
|
|
86
|
+
new MXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
|
|
87
|
+
new MXElement( 'smoothstep', smoothstep, [ 'in', 'low', 'high' ] ),
|
|
88
88
|
//new MtlXElement( 'curveadjust', ... ),
|
|
89
89
|
//new MtlXElement( 'curvelookup', ... ),
|
|
90
|
-
new
|
|
91
|
-
new
|
|
92
|
-
new
|
|
90
|
+
new MXElement( 'luminance', luminance, [ 'in', 'lumacoeffs' ] ),
|
|
91
|
+
new MXElement( 'rgbtohsv', mx_rgbtohsv, [ 'in' ] ),
|
|
92
|
+
new MXElement( 'hsvtorgb', mx_hsvtorgb, [ 'in' ] ),
|
|
93
93
|
|
|
94
94
|
// << Mix >>
|
|
95
|
-
new
|
|
95
|
+
new MXElement( 'mix', mix, [ 'bg', 'fg', 'mix' ] ),
|
|
96
96
|
|
|
97
97
|
// << Channel >>
|
|
98
|
-
new
|
|
99
|
-
new
|
|
100
|
-
new
|
|
98
|
+
new MXElement( 'combine2', vec2, [ 'in1', 'in2' ] ),
|
|
99
|
+
new MXElement( 'combine3', vec3, [ 'in1', 'in2', 'in3' ] ),
|
|
100
|
+
new MXElement( 'combine4', vec4, [ 'in1', 'in2', 'in3', 'in4' ] ),
|
|
101
101
|
|
|
102
102
|
// << Procedural >>
|
|
103
|
-
new
|
|
104
|
-
new
|
|
105
|
-
new
|
|
106
|
-
new
|
|
107
|
-
new
|
|
108
|
-
new
|
|
109
|
-
new
|
|
110
|
-
new
|
|
111
|
-
new
|
|
112
|
-
new
|
|
113
|
-
new
|
|
103
|
+
new MXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
|
|
104
|
+
new MXElement( 'ramptb', mx_ramptb, [ 'valuet', 'valueb', 'texcoord' ] ),
|
|
105
|
+
new MXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'texcoord' ] ),
|
|
106
|
+
new MXElement( 'splittb', mx_splittb, [ 'valuet', 'valueb', 'texcoord' ] ),
|
|
107
|
+
new MXElement( 'noise2d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
|
|
108
|
+
new MXElement( 'noise3d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
|
|
109
|
+
new MXElement( 'fractal3d', mx_fractal_noise_float, [ 'position', 'octaves', 'lacunarity', 'diminish', 'amplitude' ] ),
|
|
110
|
+
new MXElement( 'cellnoise2d', mx_cell_noise_float, [ 'texcoord' ] ),
|
|
111
|
+
new MXElement( 'cellnoise3d', mx_cell_noise_float, [ 'texcoord' ] ),
|
|
112
|
+
new MXElement( 'worleynoise2d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
|
|
113
|
+
new MXElement( 'worleynoise3d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
|
|
114
114
|
|
|
115
115
|
// << Supplemental >>
|
|
116
116
|
//new MtlXElement( 'tiledimage', ... ),
|
|
117
117
|
//new MtlXElement( 'triplanarprojection', triplanarTextures, [ 'filex', 'filey', 'filez' ] ),
|
|
118
118
|
//new MtlXElement( 'ramp4', ... ),
|
|
119
119
|
//new MtlXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset' ] ),
|
|
120
|
-
new
|
|
121
|
-
new
|
|
120
|
+
new MXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
|
|
121
|
+
new MXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
|
|
122
122
|
//new MtlXElement( 'hsvadjust', ... ),
|
|
123
|
-
new
|
|
123
|
+
new MXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
|
|
124
124
|
//new MtlXElement( 'extract', ... ),
|
|
125
125
|
//new MtlXElement( 'separate2', ... ),
|
|
126
126
|
//new MtlXElement( 'separate3', ... ),
|
|
@@ -129,7 +129,7 @@ const MtlXElements = [
|
|
|
129
129
|
];
|
|
130
130
|
|
|
131
131
|
const MtlXLibrary = {};
|
|
132
|
-
|
|
132
|
+
MXElements.forEach( element => MtlXLibrary[ element.name ] = element );
|
|
133
133
|
|
|
134
134
|
class MaterialXLoader extends Loader {
|
|
135
135
|
|
|
@@ -588,11 +588,30 @@ class MaterialXNode {
|
|
|
588
588
|
|
|
589
589
|
//
|
|
590
590
|
|
|
591
|
+
let normalNode = null;
|
|
592
|
+
|
|
593
|
+
if ( inputs.normal ) normalNode = inputs.normal;
|
|
594
|
+
|
|
595
|
+
//
|
|
596
|
+
|
|
597
|
+
let emissiveNode = null;
|
|
598
|
+
|
|
599
|
+
if ( inputs.emission ) emissiveNode = inputs.emission;
|
|
600
|
+
if ( inputs.emissionColor ) {
|
|
601
|
+
|
|
602
|
+
emissiveNode = emissiveNode ? mul( emissiveNode, inputs.emissionColor ) : emissiveNode;
|
|
603
|
+
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
//
|
|
607
|
+
|
|
591
608
|
material.colorNode = colorNode || color( 0.8, 0.8, 0.8 );
|
|
592
609
|
material.roughnessNode = roughnessNode || float( 0.2 );
|
|
593
610
|
material.metalnessNode = metalnessNode || float( 0 );
|
|
594
611
|
material.clearcoatNode = clearcoatNode || float( 0 );
|
|
595
612
|
material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
|
|
613
|
+
if ( normalNode ) material.normalNode = normalNode;
|
|
614
|
+
if ( emissiveNode ) material.emissiveNode = emissiveNode;
|
|
596
615
|
|
|
597
616
|
}
|
|
598
617
|
|
|
@@ -76,12 +76,6 @@ class NRRDLoader extends Loader {
|
|
|
76
76
|
|
|
77
77
|
function scan( type, chunks ) {
|
|
78
78
|
|
|
79
|
-
if ( chunks === undefined || chunks === null ) {
|
|
80
|
-
|
|
81
|
-
chunks = 1;
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
79
|
let _chunkSize = 1;
|
|
86
80
|
let _array_type = Uint8Array;
|
|
87
81
|
|
|
@@ -138,13 +132,6 @@ class NRRDLoader extends Loader {
|
|
|
138
132
|
|
|
139
133
|
}
|
|
140
134
|
|
|
141
|
-
if ( chunks == 1 ) {
|
|
142
|
-
|
|
143
|
-
// if only one chunk was requested, just return one value
|
|
144
|
-
return _bytes[ 0 ];
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
135
|
// return the byte array
|
|
149
136
|
return _bytes;
|
|
150
137
|
|
|
@@ -2968,8 +2968,8 @@ class SVGLoader extends Loader {
|
|
|
2968
2968
|
// Bevel join triangle
|
|
2969
2969
|
|
|
2970
2970
|
addVertex( currentPointR, u, 1 );
|
|
2971
|
-
addVertex(
|
|
2972
|
-
addVertex(
|
|
2971
|
+
addVertex( innerPoint, u, 0 );
|
|
2972
|
+
addVertex( nextPointR, u, 1 );
|
|
2973
2973
|
|
|
2974
2974
|
}
|
|
2975
2975
|
|
|
@@ -3106,8 +3106,8 @@ class SVGLoader extends Loader {
|
|
|
3106
3106
|
|
|
3107
3107
|
} else {
|
|
3108
3108
|
|
|
3109
|
-
|
|
3110
|
-
|
|
3109
|
+
tempV2_4.toArray( vertices, vl - 2 * 3 );
|
|
3110
|
+
tempV2_3.toArray( vertices, vl - 1 * 3 );
|
|
3111
3111
|
tempV2_4.toArray( vertices, vl - 4 * 3 );
|
|
3112
3112
|
|
|
3113
3113
|
}
|
|
@@ -25,9 +25,7 @@ class USDAParser {
|
|
|
25
25
|
const data = {};
|
|
26
26
|
|
|
27
27
|
const lines = text.split( '\n' );
|
|
28
|
-
const length = lines.length;
|
|
29
28
|
|
|
30
|
-
let current = 0;
|
|
31
29
|
let string = null;
|
|
32
30
|
let target = data;
|
|
33
31
|
|
|
@@ -35,9 +33,7 @@ class USDAParser {
|
|
|
35
33
|
|
|
36
34
|
// debugger;
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const line = lines[ current ];
|
|
36
|
+
for ( const line of lines ) {
|
|
41
37
|
|
|
42
38
|
// console.log( line );
|
|
43
39
|
|
|
@@ -74,7 +70,7 @@ class USDAParser {
|
|
|
74
70
|
|
|
75
71
|
stack.pop();
|
|
76
72
|
|
|
77
|
-
if ( stack.length === 0 )
|
|
73
|
+
if ( stack.length === 0 ) continue;
|
|
78
74
|
|
|
79
75
|
target = stack[ stack.length - 1 ];
|
|
80
76
|
|
|
@@ -100,18 +96,8 @@ class USDAParser {
|
|
|
100
96
|
|
|
101
97
|
}
|
|
102
98
|
|
|
103
|
-
current ++;
|
|
104
|
-
|
|
105
|
-
if ( current < length ) {
|
|
106
|
-
|
|
107
|
-
parseNextLine();
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
99
|
}
|
|
112
100
|
|
|
113
|
-
parseNextLine();
|
|
114
|
-
|
|
115
101
|
return data;
|
|
116
102
|
|
|
117
103
|
}
|
|
@@ -640,7 +626,7 @@ class USDZLoader extends Loader {
|
|
|
640
626
|
|
|
641
627
|
}
|
|
642
628
|
|
|
643
|
-
} else
|
|
629
|
+
} else if ( 'float inputs:clearcoat' in surface ) {
|
|
644
630
|
|
|
645
631
|
material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
|
|
646
632
|
|