@needle-tools/engine 3.27.5-beta → 3.28.0-beta

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/needle-engine.js +4692 -4719
  3. package/dist/needle-engine.light.js +4434 -4461
  4. package/dist/needle-engine.light.min.js +226 -219
  5. package/dist/needle-engine.light.umd.cjs +283 -276
  6. package/dist/needle-engine.min.js +228 -221
  7. package/dist/needle-engine.umd.cjs +238 -231
  8. package/lib/engine/engine_shims.js +0 -1
  9. package/lib/engine/engine_shims.js.map +1 -1
  10. package/lib/engine-components/Renderer.js +12 -0
  11. package/lib/engine-components/Renderer.js.map +1 -1
  12. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +14 -5
  13. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +26 -15
  14. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
  15. package/package.json +1 -1
  16. package/src/engine/codegen/register_types.ts +2 -2
  17. package/src/engine/engine_shims.ts +0 -2
  18. package/src/engine-components/Renderer.ts +13 -0
  19. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +36 -24
  20. package/src/engine/dist/api.js +0 -73
  21. package/src/engine/dist/api.js.meta +0 -7
  22. package/src/engine/dist/engine_networking_streams.js +0 -474
  23. package/src/engine/dist/engine_networking_streams.js.meta +0 -7
  24. package/src/engine-components/dist/AudioSource.js +0 -513
  25. package/src/engine-components/dist/AudioSource.js.meta +0 -7
  26. package/src/engine-components/dist/ScreenCapture.js +0 -490
  27. package/src/engine-components/dist/ScreenCapture.js.meta +0 -7
  28. package/src/engine-components/dist/VideoPlayer.js +0 -888
  29. package/src/engine-components/dist/VideoPlayer.js.meta +0 -7
  30. package/src/engine-components/dist/Voip2.js +0 -46
  31. package/src/engine-components/dist/Voip2.js.meta +0 -7
  32. package/src/engine-schemes/dist/api.js +0 -17
  33. package/src/engine-schemes/dist/api.js.meta +0 -7
  34. package/src/engine-schemes/dist/schemes.js +0 -25
  35. package/src/engine-schemes/dist/schemes.js.meta +0 -7
  36. package/src/engine-schemes/dist/synced-camera-model.js +0 -74
  37. package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
  38. package/src/engine-schemes/dist/synced-transform-model.js +0 -73
  39. package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
  40. package/src/engine-schemes/dist/transform.js +0 -46
  41. package/src/engine-schemes/dist/transform.js.meta +0 -7
  42. package/src/engine-schemes/dist/vec2.js +0 -32
  43. package/src/engine-schemes/dist/vec2.js.meta +0 -7
  44. package/src/engine-schemes/dist/vec3.js +0 -36
  45. package/src/engine-schemes/dist/vec3.js.meta +0 -7
  46. package/src/engine-schemes/dist/vec4.js +0 -40
  47. package/src/engine-schemes/dist/vec4.js.meta +0 -7
  48. package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
  49. package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
  50. package/src/engine-schemes/flatc.exe +0 -0
@@ -26,7 +26,8 @@ import {
26
26
  SRGBColorSpace,
27
27
  AnimationClip,
28
28
  OrthographicCamera,
29
- BufferAttribute
29
+ BufferAttribute,
30
+ Vector4
30
31
  } from 'three';
31
32
  import * as fflate from 'three/examples/jsm/libs/fflate.module.js';
32
33
 
@@ -428,13 +429,15 @@ class USDWriter {
428
429
 
429
430
  }
430
431
 
432
+ declare type TextureMap = {[name: string]: {texture: Texture, scale?: Vector4}};
433
+
431
434
  class USDZExporterContext {
432
435
  root: any;
433
436
  exporter: any;
434
437
  extensions: any;
435
- materials: {};
436
- textures: {};
437
- files: {};
438
+ materials: Map<string, Material>;
439
+ textures: TextureMap;
440
+ files: { [path: string]: Uint8Array | [Uint8Array, fflate.ZipOptions] | null | any }
438
441
  document: USDDocument;
439
442
  output: string;
440
443
  animations: AnimationClip[];
@@ -447,7 +450,7 @@ class USDZExporterContext {
447
450
  if ( extensions )
448
451
  this.extensions = extensions;
449
452
 
450
- this.materials = {};
453
+ this.materials = new Map();
451
454
  this.textures = {};
452
455
  this.files = {};
453
456
  this.document = new USDDocument();
@@ -578,18 +581,19 @@ class USDZExporter {
578
581
 
579
582
  for ( const id in textures ) {
580
583
 
581
- let texture = textures[ id ];
584
+ const textureData = textures[ id ];
585
+ let texture = textureData.texture;
582
586
 
583
587
  const isRGBA = formatsWithAlphaChannel.includes( texture.format );
584
588
 
589
+ //@ts-ignore
585
590
  if ( texture.isCompressedTexture || texture.isRenderTargetTexture ) {
586
591
 
587
592
  texture = decompressGpuTexture( texture, options.maxTextureSize, decompressionRenderer );
588
593
 
589
594
  }
590
595
 
591
- // TODO add readback options for textures that don't have texture.image
592
- const canvas = await imageToCanvas( texture.image ).catch( err => {
596
+ const canvas = await imageToCanvas( texture.image, textureData.scale, false, options.maxTextureSize ).catch( err => {
593
597
  console.error("Error converting texture to canvas", texture, err);
594
598
  });
595
599
 
@@ -869,6 +873,7 @@ function decompressGpuTexture( texture, maxTextureSize = Infinity, renderer: Web
869
873
  #else
870
874
  gl_FragColor = texture2D( blitTexture, vUv);
871
875
  #endif
876
+ gl_FragColor.rgb *= gl_FragColor.a;
872
877
  }`
873
878
  } );
874
879
 
@@ -926,7 +931,7 @@ function isImageBitmap( image ) {
926
931
 
927
932
  }
928
933
 
929
- async function imageToCanvas( image, color: string | undefined = undefined, flipY = false, maxTextureSize = 4096 ) {
934
+ async function imageToCanvas( image, color: Vector4 | undefined = undefined, flipY = false, maxTextureSize = 4096 ) {
930
935
 
931
936
  if ( isImageBitmap( image ) ) {
932
937
 
@@ -947,14 +952,13 @@ async function imageToCanvas( image, color: string | undefined = undefined, flip
947
952
 
948
953
  context.drawImage( image, 0, 0, canvas.width, canvas.height );
949
954
 
950
- // TODO remove, not used anymore
955
+ // Currently only used to apply opacity scale since QuickLook and usdview don't support that yet
951
956
  if ( color !== undefined ) {
952
957
 
953
- const hex = parseInt( color, 16 );
954
-
955
- const r = ( hex >> 16 & 255 ) / 255;
956
- const g = ( hex >> 8 & 255 ) / 255;
957
- const b = ( hex & 255 ) / 255;
958
+ const r = color.x;
959
+ const g = color.y;
960
+ const b = color.z;
961
+ const a = color.w;
958
962
 
959
963
  const imagedata = context.getImageData( 0, 0, canvas.width, canvas.height );
960
964
  const data = imagedata.data;
@@ -964,6 +968,7 @@ async function imageToCanvas( image, color: string | undefined = undefined, flip
964
968
  data[ i + 0 ] = data[ i + 0 ] * r;
965
969
  data[ i + 1 ] = data[ i + 1 ] * g;
966
970
  data[ i + 2 ] = data[ i + 2 ] * b;
971
+ data[ i + 3 ] = data[ i + 3 ] * a;
967
972
 
968
973
  }
969
974
 
@@ -1371,7 +1376,7 @@ function buildVector2Array( attribute, count ) {
1371
1376
 
1372
1377
  // Materials
1373
1378
 
1374
- function buildMaterials( materials, textures, quickLookCompatible = false ) {
1379
+ function buildMaterials( materials: Map<string, Material>, textures: TextureMap, quickLookCompatible = false ) {
1375
1380
 
1376
1381
  const array: Array<string> = [];
1377
1382
 
@@ -1392,7 +1397,7 @@ ${array.join( '' )}
1392
1397
 
1393
1398
  }
1394
1399
 
1395
- function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatible = false ) {
1400
+ function buildMaterial( material: MeshBasicMaterial, textures: TextureMap, quickLookCompatible = false ) {
1396
1401
 
1397
1402
  // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
1398
1403
 
@@ -1404,7 +1409,11 @@ function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatib
1404
1409
 
1405
1410
  const id = texture.id + ( color ? '_' + color.getHexString() : '' ) + ( opacity !== undefined ? '_' + opacity : '' );
1406
1411
 
1407
- textures[ id ] = texture;
1412
+ // Seems neither QuickLook nor usdview support scale/bias on .a values, so we need to bake opacity multipliers into
1413
+ // the texture. This is not ideal.
1414
+ const opacityIsAppliedToTextureAndNotAsScale = quickLookCompatible && opacity !== undefined;
1415
+ const scaleToApply = opacityIsAppliedToTextureAndNotAsScale ? new Vector4(1, 1, 1, opacity) : undefined;
1416
+ textures[ id ] = { texture, scale: scaleToApply };
1408
1417
 
1409
1418
  const uv = texture.channel > 0 ? 'st' + texture.channel : 'st';
1410
1419
 
@@ -1481,7 +1490,7 @@ function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatib
1481
1490
  token inputs:sourceColorSpace = "${ texture.colorSpace === 'srgb' ? 'sRGB' : 'raw' }"
1482
1491
  float2 inputs:st.connect = ${needsTextureTransform ? textureTransformOutput : textureTransformInput}
1483
1492
  ${needsTextureScale ? `
1484
- float4 inputs:scale = (${color ? color.r + ', ' + color.g + ', ' + color.b : '1, 1, 1'}, ${opacity !== undefined ? opacity : '1'})
1493
+ float4 inputs:scale = (${color ? color.r + ', ' + color.g + ', ' + color.b : '1, 1, 1'}, ${(opacity !== undefined && !opacityIsAppliedToTextureAndNotAsScale) ? opacity : '1'})
1485
1494
  ` : `` }
1486
1495
  ${needsNormalScaleAndBias ? `
1487
1496
  float4 inputs:scale = (${normalScaleValueString}, ${normalScaleValueString}, ${normalScaleValueString}, 1)
@@ -1499,7 +1508,7 @@ function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatib
1499
1508
  }
1500
1509
 
1501
1510
  let effectiveOpacity = ( material.transparent || material.alphaTest ) ? material.opacity : 1;
1502
-
1511
+
1503
1512
  if ( material instanceof MeshPhysicalMaterial && material.transmission !== undefined) {
1504
1513
 
1505
1514
  // TODO does not help when a roughnessMap is used
@@ -1549,7 +1558,7 @@ function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatib
1549
1558
  inputs.push( `${pad}float inputs:opacity.connect = ${materialRoot}/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>` );
1550
1559
  inputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );
1551
1560
 
1552
- samplers.push( buildTexture( material.alphaMap, 'opacity' ) );
1561
+ samplers.push( buildTexture( material.alphaMap, 'opacity', new Color( 1, 1, 1 ), effectiveOpacity ) );
1553
1562
 
1554
1563
  } else {
1555
1564
 
@@ -1568,12 +1577,15 @@ function buildMaterial( material: MeshBasicMaterial, textures, quickLookCompatib
1568
1577
  if ( material.emissiveMap ) {
1569
1578
 
1570
1579
  inputs.push( `${pad}color3f inputs:emissiveColor.connect = ${materialRoot}/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>` );
1571
-
1572
- samplers.push( buildTexture( material.emissiveMap, 'emissive' ) );
1580
+ const color = material.emissive.clone();
1581
+ color.multiplyScalar( material.emissiveIntensity );
1582
+ samplers.push( buildTexture( material.emissiveMap, 'emissive', color ) );
1573
1583
 
1574
1584
  } else if ( material.emissive?.getHex() > 0 ) {
1575
1585
 
1576
- inputs.push( `${pad}color3f inputs:emissiveColor = ${buildColor( material.emissive )}` );
1586
+ const color = material.emissive.clone();
1587
+ color.multiplyScalar( material.emissiveIntensity );
1588
+ inputs.push( `${pad}color3f inputs:emissiveColor = ${buildColor( color )}` );
1577
1589
 
1578
1590
  } else {
1579
1591
 
@@ -1,73 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
- };
12
- exports.__esModule = true;
13
- __exportStar(require("./extensions/index.js"), exports);
14
- __exportStar(require("./engine_addressables.js"), exports);
15
- __exportStar(require("./engine_application.js"), exports);
16
- __exportStar(require("./engine_assetdatabase.js"), exports);
17
- __exportStar(require("./engine_create_objects.js"), exports);
18
- __exportStar(require("./engine_components_internal.js"), exports);
19
- __exportStar(require("./engine_components.js"), exports);
20
- __exportStar(require("./engine_components_internal.js"), exports);
21
- __exportStar(require("./engine_context_registry.js"), exports);
22
- __exportStar(require("./engine_context.js"), exports);
23
- __exportStar(require("./engine_coroutine.js"), exports);
24
- __exportStar(require("./engine_constants.js"), exports);
25
- __exportStar(require("./debug/index.js"), exports);
26
- __exportStar(require("./engine_element.js"), exports);
27
- __exportStar(require("./engine_element_loading.js"), exports);
28
- __exportStar(require("./engine_element_attributes.js"), exports);
29
- var engine_gizmos_js_1 = require("./engine_gizmos.js");
30
- __createBinding(exports, engine_gizmos_js_1, "Gizmos");
31
- __exportStar(require("./engine_gltf.js"), exports);
32
- __exportStar(require("./engine_hot_reload.js"), exports);
33
- __exportStar(require("./engine_gameobject.js"), exports);
34
- __exportStar(require("./engine_networking.js"), exports);
35
- __exportStar(require("./engine_networking_types.js"), exports);
36
- var engine_networking_auto_js_1 = require("./engine_networking_auto.js");
37
- __createBinding(exports, engine_networking_auto_js_1, "syncField");
38
- __exportStar(require("./engine_networking_files.js"), exports);
39
- __exportStar(require("./engine_networking_instantiate.js"), exports);
40
- __exportStar(require("./engine_networking_streams.js"), exports);
41
- __exportStar(require("./engine_networking_utils.js"), exports);
42
- __exportStar(require("./engine_networking_peer.js"), exports);
43
- __exportStar(require("./engine_patcher.js"), exports);
44
- __exportStar(require("./engine_playerview.js"), exports);
45
- __exportStar(require("./engine_physics.js"), exports);
46
- __exportStar(require("./engine_physics.types.js"), exports);
47
- __exportStar(require("./engine_physics_rapier.js"), exports);
48
- __exportStar(require("./engine_scenelighting.js"), exports);
49
- __exportStar(require("./engine_input.js"), exports);
50
- __exportStar(require("./engine_math.js"), exports);
51
- __exportStar(require("./js-extensions/index.js"), exports);
52
- __exportStar(require("./engine_scenetools.js"), exports);
53
- __exportStar(require("./engine_serialization.js"), exports);
54
- var engine_serialization_core_js_1 = require("./engine_serialization_core.js");
55
- __createBinding(exports, engine_serialization_core_js_1, "type");
56
- __exportStar(require("./engine_texture.js"), exports);
57
- __exportStar(require("./engine_three_utils.js"), exports);
58
- __exportStar(require("./engine_time.js"), exports);
59
- __exportStar(require("./engine_types.js"), exports);
60
- __exportStar(require("./engine_utils_screenshot.js"), exports);
61
- __exportStar(require("./engine_web_api.js"), exports);
62
- __exportStar(require("./engine_utils.js"), exports);
63
- var engine_typestore_js_1 = require("./engine_typestore.js");
64
- __createBinding(exports, engine_typestore_js_1, "TypeStore");
65
- __createBinding(exports, engine_typestore_js_1, "registerType");
66
- var engine_instancing_js_1 = require("./engine_instancing.js");
67
- __createBinding(exports, engine_instancing_js_1, "InstancingUtil");
68
- var engine_util_decorator_js_1 = require("./engine_util_decorator.js");
69
- __createBinding(exports, engine_util_decorator_js_1, "validate");
70
- __createBinding(exports, engine_util_decorator_js_1, "prefix");
71
- var engine_license_js_1 = require("./engine_license.js");
72
- __createBinding(exports, engine_license_js_1, "hasProLicense");
73
- __createBinding(exports, engine_license_js_1, "hasIndieLicense");
@@ -1,7 +0,0 @@
1
- fileFormatVersion: 2
2
- guid: f0e01709ea200b648a0c053c2c79f225
3
- DefaultImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant: