super-three 0.156.0 → 0.157.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 +753 -277
- package/build/three.js +753 -277
- package/build/three.min.js +2 -2
- package/build/three.module.js +750 -276
- package/build/three.module.min.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +17 -0
- package/examples/jsm/controls/DragControls.js +3 -2
- package/examples/jsm/csm/CSMShader.js +25 -21
- package/examples/jsm/exporters/EXRExporter.js +102 -24
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/LightProbeGenerator.js +37 -3
- package/examples/jsm/lines/LineMaterial.js +90 -156
- package/examples/jsm/loaders/3DMLoader.js +378 -104
- package/examples/jsm/loaders/GLTFLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +5 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
- package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
- package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
- package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
- package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
- package/examples/jsm/nodes/code/CodeNode.js +1 -1
- package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +18 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
- package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
- package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +1 -1
- package/examples/jsm/nodes/core/CacheNode.js +1 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/ContextNode.js +2 -2
- package/examples/jsm/nodes/core/IndexNode.js +1 -1
- package/examples/jsm/nodes/core/InputNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +28 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
- package/examples/jsm/nodes/core/PropertyNode.js +3 -3
- package/examples/jsm/nodes/core/StackNode.js +1 -1
- package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +3 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -1
- package/examples/jsm/nodes/core/VaryingNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -1
- package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
- package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
- package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
- package/examples/jsm/nodes/fog/FogNode.js +2 -2
- package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AONode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
- package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/CondNode.js +1 -1
- package/examples/jsm/nodes/math/HashNode.js +8 -9
- package/examples/jsm/nodes/math/MathNode.js +2 -2
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
- package/examples/jsm/nodes/utils/JoinNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +11 -11
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/PackingNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
- package/examples/jsm/nodes/utils/SetNode.js +62 -0
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
- package/examples/jsm/objects/Sky.js +1 -3
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +3 -5
- package/examples/jsm/renderers/common/Pipelines.js +7 -7
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderObject.js +40 -16
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +40 -13
- package/examples/jsm/renderers/common/SampledTexture.js +4 -2
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +14 -9
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
- package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
- package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +4 -4
- package/examples/jsm/shaders/OutputShader.js +2 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
- package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
- package/package.json +1 -1
- package/src/Three.js +0 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +7 -1
- package/src/core/RenderTarget.js +16 -7
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +8 -8
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +78 -22
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +5 -4
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +84 -5
- package/src/renderers/webgl/WebGLPrograms.js +11 -2
- package/src/renderers/webgl/WebGLTextures.js +214 -26
- package/src/renderers/webgl/WebGLUtils.js +21 -23
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
Loader,
|
|
5
5
|
Object3D,
|
|
6
6
|
MeshStandardMaterial,
|
|
7
|
+
MeshPhysicalMaterial,
|
|
7
8
|
Mesh,
|
|
8
9
|
Color,
|
|
9
10
|
Points,
|
|
@@ -25,6 +26,8 @@ import {
|
|
|
25
26
|
DoubleSide
|
|
26
27
|
} from 'three';
|
|
27
28
|
|
|
29
|
+
import { EXRLoader } from '../loaders/EXRLoader.js';
|
|
30
|
+
|
|
28
31
|
const _taskCache = new WeakMap();
|
|
29
32
|
|
|
30
33
|
class Rhino3dmLoader extends Loader {
|
|
@@ -217,7 +220,7 @@ class Rhino3dmLoader extends Loader {
|
|
|
217
220
|
|
|
218
221
|
}
|
|
219
222
|
|
|
220
|
-
_createMaterial( material ) {
|
|
223
|
+
_createMaterial( material, renderEnvironment ) {
|
|
221
224
|
|
|
222
225
|
if ( material === undefined ) {
|
|
223
226
|
|
|
@@ -230,27 +233,51 @@ class Rhino3dmLoader extends Loader {
|
|
|
230
233
|
|
|
231
234
|
}
|
|
232
235
|
|
|
233
|
-
|
|
236
|
+
//console.log(material)
|
|
237
|
+
|
|
238
|
+
let mat = new MeshPhysicalMaterial( {
|
|
239
|
+
|
|
240
|
+
color: new Color( material.diffuseColor.r / 255.0, material.diffuseColor.g / 255.0, material.diffuseColor.b / 255.0 ),
|
|
241
|
+
emissive: new Color( material.emissionColor.r, material.emissionColor.g, material.emissionColor.b ),
|
|
242
|
+
flatShading: material.disableLighting,
|
|
243
|
+
ior: material.indexOfRefraction,
|
|
244
|
+
name: material.name,
|
|
245
|
+
reflectivity: material.reflectivity,
|
|
246
|
+
opacity: 1.0 - material.transparency,
|
|
247
|
+
side: DoubleSide,
|
|
248
|
+
specularColor: material.specularColor,
|
|
249
|
+
transparent: material.transparency > 0 ? true : false
|
|
250
|
+
|
|
251
|
+
} );
|
|
252
|
+
|
|
253
|
+
mat.userData.id = material.id;
|
|
234
254
|
|
|
235
|
-
|
|
255
|
+
if ( material.pbrSupported ) {
|
|
236
256
|
|
|
237
|
-
|
|
257
|
+
const pbr = material.pbr;
|
|
238
258
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
259
|
+
mat.anisotropy = pbr.anisotropy;
|
|
260
|
+
mat.anisotropyRotation = pbr.anisotropicRotation;
|
|
261
|
+
mat.color = new Color( pbr.baseColor.r, pbr.baseColor.g, pbr.baseColor.b );
|
|
262
|
+
mat.clearCoat = pbr.clearCoat;
|
|
263
|
+
mat.clearCoatRoughness = pbr.clearCoatRoughness;
|
|
264
|
+
mat.metalness = pbr.metallic;
|
|
265
|
+
mat.transmission = 1 - pbr.opacity;
|
|
266
|
+
mat.roughness = pbr.roughness;
|
|
267
|
+
mat.sheen = pbr.sheen;
|
|
268
|
+
mat.specularIntensity = pbr.specular;
|
|
269
|
+
mat.thickness = pbr.subsurface;
|
|
242
270
|
|
|
243
271
|
}
|
|
244
272
|
|
|
245
|
-
|
|
273
|
+
if ( material.pbrSupported && material.pbr.opacity === 0 && material.transparency === 1 ) {
|
|
246
274
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
} );
|
|
275
|
+
//some compromises
|
|
276
|
+
|
|
277
|
+
mat.opacity = 0.2;
|
|
278
|
+
mat.transmission = 1.00;
|
|
279
|
+
|
|
280
|
+
}
|
|
254
281
|
|
|
255
282
|
const textureLoader = new TextureLoader();
|
|
256
283
|
|
|
@@ -262,17 +289,31 @@ class Rhino3dmLoader extends Loader {
|
|
|
262
289
|
|
|
263
290
|
const map = textureLoader.load( texture.image );
|
|
264
291
|
|
|
292
|
+
//console.log(texture.type )
|
|
293
|
+
|
|
265
294
|
switch ( texture.type ) {
|
|
266
295
|
|
|
296
|
+
case 'Bump':
|
|
297
|
+
|
|
298
|
+
mat.bumpMap = map;
|
|
299
|
+
|
|
300
|
+
break;
|
|
301
|
+
|
|
267
302
|
case 'Diffuse':
|
|
268
303
|
|
|
269
304
|
mat.map = map;
|
|
270
305
|
|
|
271
306
|
break;
|
|
272
307
|
|
|
273
|
-
case '
|
|
308
|
+
case 'Emap':
|
|
274
309
|
|
|
275
|
-
mat.
|
|
310
|
+
mat.envMap = map;
|
|
311
|
+
|
|
312
|
+
break;
|
|
313
|
+
|
|
314
|
+
case 'Opacity':
|
|
315
|
+
|
|
316
|
+
mat.transmissionMap = map;
|
|
276
317
|
|
|
277
318
|
break;
|
|
278
319
|
|
|
@@ -283,9 +324,97 @@ class Rhino3dmLoader extends Loader {
|
|
|
283
324
|
|
|
284
325
|
break;
|
|
285
326
|
|
|
286
|
-
case '
|
|
327
|
+
case 'PBR_Alpha':
|
|
287
328
|
|
|
288
|
-
mat.
|
|
329
|
+
mat.alphaMap = map;
|
|
330
|
+
mat.transparent = true;
|
|
331
|
+
|
|
332
|
+
break;
|
|
333
|
+
|
|
334
|
+
case 'PBR_AmbientOcclusion':
|
|
335
|
+
|
|
336
|
+
mat.aoMap = map;
|
|
337
|
+
|
|
338
|
+
break;
|
|
339
|
+
|
|
340
|
+
case 'PBR_Anisotropic':
|
|
341
|
+
|
|
342
|
+
mat.anisotropyMap = map;
|
|
343
|
+
|
|
344
|
+
break;
|
|
345
|
+
|
|
346
|
+
case 'PBR_BaseColor':
|
|
347
|
+
|
|
348
|
+
mat.map = map;
|
|
349
|
+
|
|
350
|
+
break;
|
|
351
|
+
|
|
352
|
+
case 'PBR_Clearcoat':
|
|
353
|
+
|
|
354
|
+
mat.clearcoatMap = map;
|
|
355
|
+
|
|
356
|
+
break;
|
|
357
|
+
|
|
358
|
+
case 'PBR_ClearcoatBump':
|
|
359
|
+
|
|
360
|
+
mat.clearcoatNormalMap = map;
|
|
361
|
+
|
|
362
|
+
break;
|
|
363
|
+
|
|
364
|
+
case 'PBR_ClearcoatRoughness':
|
|
365
|
+
|
|
366
|
+
mat.clearcoatRoughnessMap = map;
|
|
367
|
+
|
|
368
|
+
break;
|
|
369
|
+
|
|
370
|
+
case 'PBR_Displacement':
|
|
371
|
+
|
|
372
|
+
mat.displacementMap = map;
|
|
373
|
+
|
|
374
|
+
break;
|
|
375
|
+
|
|
376
|
+
case 'PBR_Emission':
|
|
377
|
+
|
|
378
|
+
mat.emissiveMap = map;
|
|
379
|
+
|
|
380
|
+
break;
|
|
381
|
+
|
|
382
|
+
case 'PBR_Metallic':
|
|
383
|
+
|
|
384
|
+
mat.metalnessMap = map;
|
|
385
|
+
|
|
386
|
+
break;
|
|
387
|
+
|
|
388
|
+
case 'PBR_Roughness':
|
|
389
|
+
|
|
390
|
+
mat.roughnessMap = map;
|
|
391
|
+
|
|
392
|
+
break;
|
|
393
|
+
|
|
394
|
+
case 'PBR_Sheen':
|
|
395
|
+
|
|
396
|
+
mat.sheenColorMap = map;
|
|
397
|
+
|
|
398
|
+
break;
|
|
399
|
+
|
|
400
|
+
case 'PBR_Specular':
|
|
401
|
+
|
|
402
|
+
mat.specularColorMap = map;
|
|
403
|
+
|
|
404
|
+
break;
|
|
405
|
+
|
|
406
|
+
case 'PBR_Subsurface':
|
|
407
|
+
|
|
408
|
+
mat.thicknessMap = map;
|
|
409
|
+
|
|
410
|
+
break;
|
|
411
|
+
|
|
412
|
+
default:
|
|
413
|
+
|
|
414
|
+
this.warnings.push( {
|
|
415
|
+
message: `THREE.3DMLoader: No conversion exists for 3dm ${texture.type}.`,
|
|
416
|
+
type: 'no conversion'
|
|
417
|
+
} );
|
|
289
418
|
|
|
290
419
|
break;
|
|
291
420
|
|
|
@@ -293,20 +422,34 @@ class Rhino3dmLoader extends Loader {
|
|
|
293
422
|
|
|
294
423
|
map.wrapS = texture.wrapU === 0 ? RepeatWrapping : ClampToEdgeWrapping;
|
|
295
424
|
map.wrapT = texture.wrapV === 0 ? RepeatWrapping : ClampToEdgeWrapping;
|
|
296
|
-
|
|
425
|
+
|
|
426
|
+
if ( texture.repeat ) {
|
|
427
|
+
|
|
428
|
+
map.repeat.set( texture.repeat[ 0 ], texture.repeat[ 1 ] );
|
|
429
|
+
|
|
430
|
+
}
|
|
297
431
|
|
|
298
432
|
}
|
|
299
433
|
|
|
300
434
|
}
|
|
301
435
|
|
|
436
|
+
if ( renderEnvironment ) {
|
|
437
|
+
|
|
438
|
+
new EXRLoader().load( renderEnvironment.image, function ( texture ) {
|
|
439
|
+
|
|
440
|
+
texture.mapping = THREE.EquirectangularReflectionMapping;
|
|
441
|
+
mat.envMap = texture;
|
|
442
|
+
|
|
443
|
+
} );
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
302
447
|
return mat;
|
|
303
448
|
|
|
304
449
|
}
|
|
305
450
|
|
|
306
451
|
_createGeometry( data ) {
|
|
307
452
|
|
|
308
|
-
// console.log(data);
|
|
309
|
-
|
|
310
453
|
const object = new Object3D();
|
|
311
454
|
const instanceDefinitionObjects = [];
|
|
312
455
|
const instanceDefinitions = [];
|
|
@@ -315,8 +458,10 @@ class Rhino3dmLoader extends Loader {
|
|
|
315
458
|
object.userData[ 'layers' ] = data.layers;
|
|
316
459
|
object.userData[ 'groups' ] = data.groups;
|
|
317
460
|
object.userData[ 'settings' ] = data.settings;
|
|
461
|
+
object.userData.settings[ 'renderSettings' ] = data.renderSettings;
|
|
318
462
|
object.userData[ 'objectType' ] = 'File3dm';
|
|
319
463
|
object.userData[ 'materials' ] = null;
|
|
464
|
+
|
|
320
465
|
object.name = this.url;
|
|
321
466
|
|
|
322
467
|
let objects = data.objects;
|
|
@@ -343,22 +488,56 @@ class Rhino3dmLoader extends Loader {
|
|
|
343
488
|
|
|
344
489
|
default:
|
|
345
490
|
|
|
346
|
-
let
|
|
491
|
+
let matId;
|
|
492
|
+
|
|
493
|
+
switch( attributes.materialSource.name ) {
|
|
494
|
+
case 'ObjectMaterialSource_MaterialFromLayer':
|
|
495
|
+
//check layer index
|
|
496
|
+
if ( attributes.layerIndex >= 0 ) {
|
|
497
|
+
|
|
498
|
+
matId = data.layers[ attributes.layerIndex ].renderMaterialIndex;
|
|
499
|
+
|
|
500
|
+
} else {
|
|
501
|
+
|
|
502
|
+
matId = null;
|
|
503
|
+
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
break;
|
|
507
|
+
|
|
508
|
+
case 'ObjectMaterialSource_MaterialFromObject':
|
|
347
509
|
|
|
348
|
-
|
|
510
|
+
if ( attributes.materialIndex >= 0 ) {
|
|
511
|
+
|
|
512
|
+
matId = attributes.materialIndex;
|
|
513
|
+
|
|
514
|
+
} else {
|
|
515
|
+
|
|
516
|
+
matId = null;
|
|
517
|
+
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
break;
|
|
521
|
+
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
let material;
|
|
525
|
+
|
|
526
|
+
if ( matId >= 0 ) {
|
|
527
|
+
|
|
528
|
+
const rMaterial = materials[ matId ];
|
|
529
|
+
material = this._createMaterial( rMaterial, data.renderEnvironment );
|
|
349
530
|
|
|
350
|
-
const rMaterial = materials[ attributes.materialIndex ];
|
|
351
|
-
let material = this._createMaterial( rMaterial );
|
|
352
|
-
material = this._compareMaterials( material );
|
|
353
|
-
_object = this._createObject( obj, material );
|
|
354
531
|
|
|
355
532
|
} else {
|
|
356
533
|
|
|
357
|
-
|
|
358
|
-
_object = this._createObject( obj, material );
|
|
534
|
+
material = this._createMaterial();
|
|
359
535
|
|
|
360
536
|
}
|
|
361
537
|
|
|
538
|
+
material = this._compareMaterials( material );
|
|
539
|
+
const _object = this._createObject( obj, material );
|
|
540
|
+
|
|
362
541
|
if ( _object === undefined ) {
|
|
363
542
|
|
|
364
543
|
continue;
|
|
@@ -440,6 +619,7 @@ class Rhino3dmLoader extends Loader {
|
|
|
440
619
|
}
|
|
441
620
|
|
|
442
621
|
object.userData[ 'materials' ] = this.materials;
|
|
622
|
+
object.name = '';
|
|
443
623
|
return object;
|
|
444
624
|
|
|
445
625
|
}
|
|
@@ -642,7 +822,7 @@ class Rhino3dmLoader extends Loader {
|
|
|
642
822
|
break;
|
|
643
823
|
|
|
644
824
|
case 'LightStyle_WorldLinear':
|
|
645
|
-
//
|
|
825
|
+
// no conversion exists, warning has already been printed to the console
|
|
646
826
|
break;
|
|
647
827
|
|
|
648
828
|
default:
|
|
@@ -821,7 +1001,6 @@ function Rhino3dmWorker() {
|
|
|
821
1001
|
|
|
822
1002
|
case 'init':
|
|
823
1003
|
|
|
824
|
-
// console.log(message)
|
|
825
1004
|
libraryConfig = message.libraryConfig;
|
|
826
1005
|
const wasmBinary = libraryConfig.wasmBinary;
|
|
827
1006
|
let RhinoModule;
|
|
@@ -902,7 +1081,7 @@ function Rhino3dmWorker() {
|
|
|
902
1081
|
// Handle instance definitions
|
|
903
1082
|
// console.log( `Instance Definitions Count: ${doc.instanceDefinitions().count()}` );
|
|
904
1083
|
|
|
905
|
-
for ( let i = 0; i < doc.instanceDefinitions().count
|
|
1084
|
+
for ( let i = 0; i < doc.instanceDefinitions().count; i ++ ) {
|
|
906
1085
|
|
|
907
1086
|
const idef = doc.instanceDefinitions().get( i );
|
|
908
1087
|
const idefAttributes = extractProperties( idef );
|
|
@@ -946,94 +1125,36 @@ function Rhino3dmWorker() {
|
|
|
946
1125
|
rhino.TextureType.PBR_Displacement
|
|
947
1126
|
];
|
|
948
1127
|
|
|
949
|
-
for ( let i = 0; i < doc.materials().count
|
|
1128
|
+
for ( let i = 0; i < doc.materials().count; i ++ ) {
|
|
950
1129
|
|
|
951
1130
|
const _material = doc.materials().get( i );
|
|
952
|
-
const _pbrMaterial = _material.physicallyBased();
|
|
953
1131
|
|
|
954
1132
|
let material = extractProperties( _material );
|
|
955
1133
|
|
|
956
1134
|
const textures = [];
|
|
957
1135
|
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
const _texture = _material.getTexture( textureTypes[ j ] );
|
|
961
|
-
if ( _texture ) {
|
|
962
|
-
|
|
963
|
-
let textureType = textureTypes[ j ].constructor.name;
|
|
964
|
-
textureType = textureType.substring( 12, textureType.length );
|
|
965
|
-
const texture = { type: textureType };
|
|
1136
|
+
textures.push( ...extractTextures( _material, textureTypes, doc ) );
|
|
966
1137
|
|
|
967
|
-
|
|
1138
|
+
material.pbrSupported = _material.physicallyBased().supported;
|
|
968
1139
|
|
|
969
|
-
|
|
970
|
-
texture.wrapV = _texture.wrapV;
|
|
971
|
-
texture.wrapW = _texture.wrapW;
|
|
972
|
-
const uvw = _texture.uvwTransform.toFloatArray( true );
|
|
973
|
-
texture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];
|
|
1140
|
+
if ( material.pbrSupported ) {
|
|
974
1141
|
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
texture.image = 'data:image/png;base64,' + image;
|
|
978
|
-
|
|
979
|
-
} else {
|
|
980
|
-
|
|
981
|
-
self.postMessage( { type: 'warning', id: taskID, data: {
|
|
982
|
-
message: `THREE.3DMLoader: Image for ${textureType} texture not embedded in file.`,
|
|
983
|
-
type: 'missing resource'
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
} );
|
|
987
|
-
|
|
988
|
-
texture.image = null;
|
|
989
|
-
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
textures.push( texture );
|
|
993
|
-
|
|
994
|
-
_texture.delete();
|
|
995
|
-
|
|
996
|
-
}
|
|
1142
|
+
textures.push( ...extractTextures( _material, pbrTextureTypes, doc ) );
|
|
1143
|
+
material.pbr = extractProperties( _material.physicallyBased() );
|
|
997
1144
|
|
|
998
1145
|
}
|
|
999
1146
|
|
|
1000
1147
|
material.textures = textures;
|
|
1001
1148
|
|
|
1002
|
-
if ( _pbrMaterial.supported ) {
|
|
1003
|
-
|
|
1004
|
-
for ( let j = 0; j < pbrTextureTypes.length; j ++ ) {
|
|
1005
|
-
|
|
1006
|
-
const _texture = _material.getTexture( pbrTextureTypes[ j ] );
|
|
1007
|
-
if ( _texture ) {
|
|
1008
|
-
|
|
1009
|
-
const image = doc.getEmbeddedFileAsBase64( _texture.fileName );
|
|
1010
|
-
let textureType = pbrTextureTypes[ j ].constructor.name;
|
|
1011
|
-
textureType = textureType.substring( 12, textureType.length );
|
|
1012
|
-
const texture = { type: textureType, image: 'data:image/png;base64,' + image };
|
|
1013
|
-
textures.push( texture );
|
|
1014
|
-
|
|
1015
|
-
_texture.delete();
|
|
1016
|
-
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
const pbMaterialProperties = extractProperties( _material.physicallyBased() );
|
|
1022
|
-
|
|
1023
|
-
material = Object.assign( pbMaterialProperties, material );
|
|
1024
|
-
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
1149
|
materials.push( material );
|
|
1028
1150
|
|
|
1029
1151
|
_material.delete();
|
|
1030
|
-
_pbrMaterial.delete();
|
|
1031
1152
|
|
|
1032
1153
|
}
|
|
1033
1154
|
|
|
1034
1155
|
// Handle layers
|
|
1035
1156
|
|
|
1036
|
-
for ( let i = 0; i < doc.layers().count
|
|
1157
|
+
for ( let i = 0; i < doc.layers().count; i ++ ) {
|
|
1037
1158
|
|
|
1038
1159
|
const _layer = doc.layers().get( i );
|
|
1039
1160
|
const layer = extractProperties( _layer );
|
|
@@ -1046,7 +1167,7 @@ function Rhino3dmWorker() {
|
|
|
1046
1167
|
|
|
1047
1168
|
// Handle views
|
|
1048
1169
|
|
|
1049
|
-
for ( let i = 0; i < doc.views().count
|
|
1170
|
+
for ( let i = 0; i < doc.views().count; i ++ ) {
|
|
1050
1171
|
|
|
1051
1172
|
const _view = doc.views().get( i );
|
|
1052
1173
|
const view = extractProperties( _view );
|
|
@@ -1059,7 +1180,7 @@ function Rhino3dmWorker() {
|
|
|
1059
1180
|
|
|
1060
1181
|
// Handle named views
|
|
1061
1182
|
|
|
1062
|
-
for ( let i = 0; i < doc.namedViews().count
|
|
1183
|
+
for ( let i = 0; i < doc.namedViews().count; i ++ ) {
|
|
1063
1184
|
|
|
1064
1185
|
const _namedView = doc.namedViews().get( i );
|
|
1065
1186
|
const namedView = extractProperties( _namedView );
|
|
@@ -1072,7 +1193,7 @@ function Rhino3dmWorker() {
|
|
|
1072
1193
|
|
|
1073
1194
|
// Handle groups
|
|
1074
1195
|
|
|
1075
|
-
for ( let i = 0; i < doc.groups().count
|
|
1196
|
+
for ( let i = 0; i < doc.groups().count; i ++ ) {
|
|
1076
1197
|
|
|
1077
1198
|
const _group = doc.groups().get( i );
|
|
1078
1199
|
const group = extractProperties( _group );
|
|
@@ -1098,9 +1219,9 @@ function Rhino3dmWorker() {
|
|
|
1098
1219
|
// Handle strings
|
|
1099
1220
|
// console.log( `Document Strings Count: ${doc.strings().count()}` );
|
|
1100
1221
|
// Note: doc.strings().documentUserTextCount() counts any doc.strings defined in a section
|
|
1101
|
-
//console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );
|
|
1222
|
+
// console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );
|
|
1102
1223
|
|
|
1103
|
-
const strings_count = doc.strings().count
|
|
1224
|
+
const strings_count = doc.strings().count;
|
|
1104
1225
|
|
|
1105
1226
|
for ( let i = 0; i < strings_count; i ++ ) {
|
|
1106
1227
|
|
|
@@ -1108,9 +1229,146 @@ function Rhino3dmWorker() {
|
|
|
1108
1229
|
|
|
1109
1230
|
}
|
|
1110
1231
|
|
|
1232
|
+
// Handle Render Environments for Material Environment
|
|
1233
|
+
|
|
1234
|
+
// get the id of the active render environment skylight, which we'll use for environment texture
|
|
1235
|
+
const reflectionId = doc.settings().renderSettings().renderEnvironments.reflectionId
|
|
1236
|
+
|
|
1237
|
+
const rc = doc.renderContent()
|
|
1238
|
+
|
|
1239
|
+
let renderEnvironment = null
|
|
1240
|
+
|
|
1241
|
+
for( let i = 0; i < rc.count; i++ ) {
|
|
1242
|
+
|
|
1243
|
+
const content = rc.get(i)
|
|
1244
|
+
|
|
1245
|
+
switch( content.kind ) {
|
|
1246
|
+
|
|
1247
|
+
case 'environment':
|
|
1248
|
+
|
|
1249
|
+
const id = content.id
|
|
1250
|
+
|
|
1251
|
+
// there could be multiple render environments in a 3dm file
|
|
1252
|
+
if ( id !== reflectionId ) break;
|
|
1253
|
+
|
|
1254
|
+
const renderTexture = content.findChild( 'texture' )
|
|
1255
|
+
const fileName = renderTexture.fileName
|
|
1256
|
+
|
|
1257
|
+
for ( let j = 0; j < doc.embeddedFiles().count; j ++ ) {
|
|
1258
|
+
|
|
1259
|
+
const _fileName = doc.embeddedFiles().get( j ).fileName
|
|
1260
|
+
|
|
1261
|
+
if ( fileName === _fileName ) {
|
|
1262
|
+
|
|
1263
|
+
const background = doc.getEmbeddedFileAsBase64( fileName )
|
|
1264
|
+
const backgroundImage = 'data:image/png;base64,' + background
|
|
1265
|
+
renderEnvironment = { type: 'renderEnvironment', image: backgroundImage, name: fileName };
|
|
1266
|
+
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
break;
|
|
1272
|
+
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
// Handle Render Settings
|
|
1278
|
+
|
|
1279
|
+
const renderSettings = {
|
|
1280
|
+
ambientLight: doc.settings().renderSettings().ambientLight,
|
|
1281
|
+
backgroundColorTop: doc.settings().renderSettings().backgroundColorTop,
|
|
1282
|
+
backgroundColorBottom: doc.settings().renderSettings().backgroundColorBottom,
|
|
1283
|
+
useHiddenLights: doc.settings().renderSettings().useHiddenLights,
|
|
1284
|
+
depthCue: doc.settings().renderSettings().depthCue,
|
|
1285
|
+
flatShade: doc.settings().renderSettings().flatShade,
|
|
1286
|
+
renderBackFaces: doc.settings().renderSettings().renderBackFaces,
|
|
1287
|
+
renderPoints: doc.settings().renderSettings().renderPoints,
|
|
1288
|
+
renderCurves: doc.settings().renderSettings().renderCurves,
|
|
1289
|
+
renderIsoParams: doc.settings().renderSettings().renderIsoParams,
|
|
1290
|
+
renderMeshEdges: doc.settings().renderSettings().renderMeshEdges,
|
|
1291
|
+
renderAnnotations: doc.settings().renderSettings().renderAnnotations,
|
|
1292
|
+
useViewportSize: doc.settings().renderSettings().useViewportSize,
|
|
1293
|
+
scaleBackgroundToFit: doc.settings().renderSettings().scaleBackgroundToFit,
|
|
1294
|
+
transparentBackground: doc.settings().renderSettings().transparentBackground,
|
|
1295
|
+
imageDpi: doc.settings().renderSettings().imageDpi,
|
|
1296
|
+
shadowMapLevel: doc.settings().renderSettings().shadowMapLevel,
|
|
1297
|
+
namedView: doc.settings().renderSettings().namedView,
|
|
1298
|
+
snapShot: doc.settings().renderSettings().snapShot,
|
|
1299
|
+
specificViewport: doc.settings().renderSettings().specificViewport,
|
|
1300
|
+
groundPlane: extractProperties( doc.settings().renderSettings().groundPlane ),
|
|
1301
|
+
safeFrame: extractProperties( doc.settings().renderSettings().safeFrame ),
|
|
1302
|
+
dithering: extractProperties( doc.settings().renderSettings().dithering ),
|
|
1303
|
+
skylight: extractProperties( doc.settings().renderSettings().skylight ),
|
|
1304
|
+
linearWorkflow: extractProperties( doc.settings().renderSettings().linearWorkflow ),
|
|
1305
|
+
renderChannels: extractProperties( doc.settings().renderSettings().renderChannels ),
|
|
1306
|
+
sun: extractProperties( doc.settings().renderSettings().sun ),
|
|
1307
|
+
renderEnvironments: extractProperties( doc.settings().renderSettings().renderEnvironments ),
|
|
1308
|
+
postEffects: extractProperties( doc.settings().renderSettings().postEffects ),
|
|
1309
|
+
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1111
1312
|
doc.delete();
|
|
1112
1313
|
|
|
1113
|
-
return { objects, materials, layers, views, namedViews, groups, strings, settings };
|
|
1314
|
+
return { objects, materials, layers, views, namedViews, groups, strings, settings, renderSettings, renderEnvironment };
|
|
1315
|
+
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
function extractTextures( m, tTypes, d ) {
|
|
1319
|
+
|
|
1320
|
+
const textures = []
|
|
1321
|
+
|
|
1322
|
+
for ( let i = 0; i < tTypes.length; i ++ ) {
|
|
1323
|
+
|
|
1324
|
+
const _texture = m.getTexture( tTypes[ i ] );
|
|
1325
|
+
if ( _texture ) {
|
|
1326
|
+
|
|
1327
|
+
let textureType = tTypes[ i ].constructor.name;
|
|
1328
|
+
textureType = textureType.substring( 12, textureType.length );
|
|
1329
|
+
const texture = extractTextureData( _texture, textureType, d );
|
|
1330
|
+
textures.push( texture );
|
|
1331
|
+
_texture.delete();
|
|
1332
|
+
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
return textures;
|
|
1338
|
+
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
function extractTextureData( t, tType, d ) {
|
|
1342
|
+
|
|
1343
|
+
const texture = { type: tType };
|
|
1344
|
+
|
|
1345
|
+
const image = d.getEmbeddedFileAsBase64( t.fileName );
|
|
1346
|
+
|
|
1347
|
+
texture.wrapU = t.wrapU;
|
|
1348
|
+
texture.wrapV = t.wrapV;
|
|
1349
|
+
texture.wrapW = t.wrapW;
|
|
1350
|
+
const uvw = t.uvwTransform.toFloatArray( true );
|
|
1351
|
+
|
|
1352
|
+
texture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];
|
|
1353
|
+
|
|
1354
|
+
if ( image ) {
|
|
1355
|
+
|
|
1356
|
+
texture.image = 'data:image/png;base64,' + image;
|
|
1357
|
+
|
|
1358
|
+
} else {
|
|
1359
|
+
|
|
1360
|
+
self.postMessage( { type: 'warning', id: taskID, data: {
|
|
1361
|
+
message: `THREE.3DMLoader: Image for ${tType} texture not embedded in file.`,
|
|
1362
|
+
type: 'missing resource'
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
} );
|
|
1366
|
+
|
|
1367
|
+
texture.image = null;
|
|
1368
|
+
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
return texture;
|
|
1114
1372
|
|
|
1115
1373
|
}
|
|
1116
1374
|
|
|
@@ -1323,6 +1581,18 @@ function Rhino3dmWorker() {
|
|
|
1323
1581
|
|
|
1324
1582
|
}
|
|
1325
1583
|
|
|
1584
|
+
if ( _attributes.decals().count > 0 ) {
|
|
1585
|
+
|
|
1586
|
+
self.postMessage( { type: 'warning', id: taskID, data: {
|
|
1587
|
+
message: `THREE.3DMLoader: No conversion exists for the decals associated with this object.`,
|
|
1588
|
+
type: 'no conversion',
|
|
1589
|
+
guid: _attributes.id
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
} );
|
|
1593
|
+
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1326
1596
|
attributes.drawColor = _attributes.drawColor( doc );
|
|
1327
1597
|
|
|
1328
1598
|
objectType = objectType.constructor.name;
|
|
@@ -1358,6 +1628,10 @@ function Rhino3dmWorker() {
|
|
|
1358
1628
|
|
|
1359
1629
|
result[ property ] = { name: value.constructor.name, value: value.value };
|
|
1360
1630
|
|
|
1631
|
+
} else if ( typeof value === 'object' && value !== null ) {
|
|
1632
|
+
|
|
1633
|
+
result[ property ] = extractProperties( value );
|
|
1634
|
+
|
|
1361
1635
|
} else {
|
|
1362
1636
|
|
|
1363
1637
|
result[ property ] = value;
|
|
@@ -2544,7 +2544,7 @@ class GLTFParser {
|
|
|
2544
2544
|
|
|
2545
2545
|
assignExtrasToUserData( result, json );
|
|
2546
2546
|
|
|
2547
|
-
Promise.all( parser._invokeAll( function ( ext ) {
|
|
2547
|
+
return Promise.all( parser._invokeAll( function ( ext ) {
|
|
2548
2548
|
|
|
2549
2549
|
return ext.afterRoot && ext.afterRoot( result );
|
|
2550
2550
|
|