super-three 0.158.0 → 0.160.1
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/build/three.cjs +1720 -380
- package/build/three.js +1720 -380
- package/build/three.min.js +1 -1
- package/build/three.module.js +1719 -381
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- 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 +71 -3
- 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/math/Octree.js +15 -4
- 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/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- 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/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- 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 +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- 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 +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- 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 +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- 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 +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- 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 +30 -21
- 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 +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- 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 +4 -1
- 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 +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -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/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 +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -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/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- 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 +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -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/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/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- 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/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +24 -19
- 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/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_physical_fragment.glsl.js +9 -4
- 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 +2 -0
- 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 +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- 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/objects/BatchedMesh.js +0 -586
|
@@ -151,6 +151,12 @@ class GLTFLoader extends Loader {
|
|
|
151
151
|
|
|
152
152
|
} );
|
|
153
153
|
|
|
154
|
+
this.register( function ( parser ) {
|
|
155
|
+
|
|
156
|
+
return new GLTFMaterialsBumpExtension( parser );
|
|
157
|
+
|
|
158
|
+
} );
|
|
159
|
+
|
|
154
160
|
this.register( function ( parser ) {
|
|
155
161
|
|
|
156
162
|
return new GLTFLightsExtension( parser );
|
|
@@ -183,7 +189,13 @@ class GLTFLoader extends Loader {
|
|
|
183
189
|
|
|
184
190
|
} else if ( this.path !== '' ) {
|
|
185
191
|
|
|
186
|
-
|
|
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 );
|
|
187
199
|
|
|
188
200
|
} else {
|
|
189
201
|
|
|
@@ -491,6 +503,7 @@ const EXTENSIONS = {
|
|
|
491
503
|
KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',
|
|
492
504
|
KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
|
|
493
505
|
KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
|
|
506
|
+
EXT_MATERIALS_BUMP: 'EXT_materials_bump',
|
|
494
507
|
EXT_TEXTURE_WEBP: 'EXT_texture_webp',
|
|
495
508
|
EXT_TEXTURE_AVIF: 'EXT_texture_avif',
|
|
496
509
|
EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
|
|
@@ -1201,6 +1214,61 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1201
1214
|
|
|
1202
1215
|
}
|
|
1203
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
|
+
|
|
1204
1272
|
/**
|
|
1205
1273
|
* Materials anisotropy Extension
|
|
1206
1274
|
*
|
|
@@ -1855,7 +1923,7 @@ class GLTFDracoMeshCompressionExtension {
|
|
|
1855
1923
|
|
|
1856
1924
|
return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {
|
|
1857
1925
|
|
|
1858
|
-
return new Promise( function ( resolve ) {
|
|
1926
|
+
return new Promise( function ( resolve, reject ) {
|
|
1859
1927
|
|
|
1860
1928
|
dracoLoader.decodeDracoFile( bufferView, function ( geometry ) {
|
|
1861
1929
|
|
|
@@ -1870,7 +1938,7 @@ class GLTFDracoMeshCompressionExtension {
|
|
|
1870
1938
|
|
|
1871
1939
|
resolve( geometry );
|
|
1872
1940
|
|
|
1873
|
-
}, threeAttributeMap, attributeTypeMap );
|
|
1941
|
+
}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );
|
|
1874
1942
|
|
|
1875
1943
|
} );
|
|
1876
1944
|
|
|
@@ -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
|
|
|
@@ -82,19 +82,18 @@ function lineToLineClosestPoints( line1, line2, target1 = null, target2 = null )
|
|
|
82
82
|
|
|
83
83
|
class Octree {
|
|
84
84
|
|
|
85
|
-
|
|
86
85
|
constructor( box ) {
|
|
87
86
|
|
|
88
|
-
this.triangles = [];
|
|
89
87
|
this.box = box;
|
|
88
|
+
this.bounds = new Box3();
|
|
89
|
+
|
|
90
90
|
this.subTrees = [];
|
|
91
|
+
this.triangles = [];
|
|
91
92
|
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
addTriangle( triangle ) {
|
|
95
96
|
|
|
96
|
-
if ( ! this.bounds ) this.bounds = new Box3();
|
|
97
|
-
|
|
98
97
|
this.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );
|
|
99
98
|
this.bounds.min.y = Math.min( this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y );
|
|
100
99
|
this.bounds.min.z = Math.min( this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z );
|
|
@@ -524,6 +523,18 @@ class Octree {
|
|
|
524
523
|
|
|
525
524
|
}
|
|
526
525
|
|
|
526
|
+
clear() {
|
|
527
|
+
|
|
528
|
+
this.box = null;
|
|
529
|
+
this.bounds.makeEmpty();
|
|
530
|
+
|
|
531
|
+
this.subTrees.length = 0;
|
|
532
|
+
this.triangles.length = 0;
|
|
533
|
+
|
|
534
|
+
return this;
|
|
535
|
+
|
|
536
|
+
}
|
|
537
|
+
|
|
527
538
|
}
|
|
528
539
|
|
|
529
540
|
export { Octree };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
class Timer {
|
|
2
|
+
|
|
3
|
+
constructor() {
|
|
4
|
+
|
|
5
|
+
this._previousTime = 0;
|
|
6
|
+
this._currentTime = 0;
|
|
7
|
+
this._startTime = now();
|
|
8
|
+
|
|
9
|
+
this._delta = 0;
|
|
10
|
+
this._elapsed = 0;
|
|
11
|
+
|
|
12
|
+
this._timescale = 1;
|
|
13
|
+
|
|
14
|
+
// use Page Visibility API to avoid large time delta values
|
|
15
|
+
|
|
16
|
+
this._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );
|
|
17
|
+
|
|
18
|
+
if ( this._usePageVisibilityAPI === true ) {
|
|
19
|
+
|
|
20
|
+
this._pageVisibilityHandler = handleVisibilityChange.bind( this );
|
|
21
|
+
|
|
22
|
+
document.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getDelta() {
|
|
29
|
+
|
|
30
|
+
return this._delta / 1000;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getElapsed() {
|
|
35
|
+
|
|
36
|
+
return this._elapsed / 1000;
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getTimescale() {
|
|
41
|
+
|
|
42
|
+
return this._timescale;
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
setTimescale( timescale ) {
|
|
47
|
+
|
|
48
|
+
this._timescale = timescale;
|
|
49
|
+
|
|
50
|
+
return this;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
reset() {
|
|
55
|
+
|
|
56
|
+
this._currentTime = now() - this._startTime;
|
|
57
|
+
|
|
58
|
+
return this;
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
dispose() {
|
|
63
|
+
|
|
64
|
+
if ( this._usePageVisibilityAPI === true ) {
|
|
65
|
+
|
|
66
|
+
document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return this;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
update( timestamp ) {
|
|
75
|
+
|
|
76
|
+
this._previousTime = this._currentTime;
|
|
77
|
+
this._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;
|
|
78
|
+
|
|
79
|
+
this._delta = ( this._currentTime - this._previousTime ) * this._timescale;
|
|
80
|
+
this._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas
|
|
81
|
+
|
|
82
|
+
return this;
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
class FixedTimer extends Timer {
|
|
89
|
+
|
|
90
|
+
constructor( fps = 60 ) {
|
|
91
|
+
|
|
92
|
+
super();
|
|
93
|
+
this._delta = ( 1 / fps ) * 1000;
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
update() {
|
|
98
|
+
|
|
99
|
+
this._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas
|
|
100
|
+
|
|
101
|
+
return this;
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function now() {
|
|
108
|
+
|
|
109
|
+
return ( typeof performance === 'undefined' ? Date : performance ).now();
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function handleVisibilityChange() {
|
|
114
|
+
|
|
115
|
+
if ( document.hidden === false ) this.reset();
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { Timer, FixedTimer };
|
|
@@ -176,16 +176,13 @@ function TubePainter() {
|
|
|
176
176
|
|
|
177
177
|
if ( start === end ) return;
|
|
178
178
|
|
|
179
|
-
positions.
|
|
180
|
-
positions.updateRange.count = ( end - start ) * 3;
|
|
179
|
+
positions.addUpdateRange( start * 3, ( end - start ) * 3 );
|
|
181
180
|
positions.needsUpdate = true;
|
|
182
181
|
|
|
183
|
-
normals.
|
|
184
|
-
normals.updateRange.count = ( end - start ) * 3;
|
|
182
|
+
normals.addUpdateRange( start * 3, ( end - start ) * 3 );
|
|
185
183
|
normals.needsUpdate = true;
|
|
186
184
|
|
|
187
|
-
colors.
|
|
188
|
-
colors.updateRange.count = ( end - start ) * 3;
|
|
185
|
+
colors.addUpdateRange( start * 3, ( end - start ) * 3 );
|
|
189
186
|
colors.needsUpdate = true;
|
|
190
187
|
|
|
191
188
|
count = geometry.drawRange.count;
|
|
@@ -214,8 +214,26 @@ export class Flow {
|
|
|
214
214
|
child instanceof InstancedMesh
|
|
215
215
|
) {
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
if ( Array.isArray( child.material ) ) {
|
|
218
|
+
|
|
219
|
+
const materials = [];
|
|
220
|
+
|
|
221
|
+
for ( const material of child.material ) {
|
|
222
|
+
|
|
223
|
+
const newMaterial = material.clone();
|
|
224
|
+
modifyShader( newMaterial, uniforms, numberOfCurves );
|
|
225
|
+
materials.push( newMaterial );
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
child.material = materials;
|
|
230
|
+
|
|
231
|
+
} else {
|
|
232
|
+
|
|
233
|
+
child.material = child.material.clone();
|
|
234
|
+
modifyShader( child.material, uniforms, numberOfCurves );
|
|
235
|
+
|
|
236
|
+
}
|
|
219
237
|
|
|
220
238
|
}
|
|
221
239
|
|