redhotmagma-visualization 1.44.1 → 1.44.3

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.
@@ -13,7 +13,6 @@ var _RGBELoader = require("three/examples/jsm/loaders/RGBELoader");
13
13
  var _get = _interopRequireDefault(require("lodash/get"));
14
14
  var _size = _interopRequireDefault(require("lodash/size"));
15
15
  var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
16
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
17
16
  var _glTFExporter = require("./Exporters/glTFExporter");
18
17
  var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
19
18
  var _merge = _interopRequireDefault(require("lodash/merge"));
@@ -291,6 +290,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
291
290
  useShadowGround: true,
292
291
  removeGroundForScreenshot: true,
293
292
  useEnvironmentMap: true,
293
+ useDirectionalLight: false,
294
294
  useBakedShadows: false,
295
295
  bakedShadow: {
296
296
  lightPositionOffset: {
@@ -401,6 +401,8 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
401
401
  renderer.outputEncoding = _three.sRGBEncoding;
402
402
  renderer.shadowMap.enabled = true;
403
403
  renderer.shadowMap.type = _three.PCFSoftShadowMap;
404
+ renderer.toneMapping = _three.ACESFilmicToneMapping;
405
+ renderer.toneMappingExposure = 1;
404
406
  var realWidth = window.innerWidth * window.devicePixelRatio;
405
407
  if ((0, _isMobileDevice.isMobileDevice)() && realWidth >= 1024) {
406
408
  renderer.setPixelRatio(1);
@@ -451,11 +453,13 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
451
453
  key: "createScene",
452
454
  value: function createScene() {
453
455
  var scene = new _three.Scene();
454
- scene.add(this.createDirLight());
455
456
  scene.add(this.sceneContainer);
456
457
  if (this.config.useEnvironmentMap && this.envMap) {
457
458
  scene.environment = this.envMap;
458
459
  }
460
+ if (this.config.useDirectionalLight) {
461
+ scene.add(this.createDirLight());
462
+ }
459
463
  return scene;
460
464
  }
461
465
  }, {
@@ -506,7 +510,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
506
510
  key: "addLightsIfNeeded",
507
511
  value: function addLightsIfNeeded(scene) {
508
512
  var sceneHasLight = scene.getObjectByProperty("isLight", true);
509
- if (!sceneHasLight && !this.dirLight) {
513
+ if (!sceneHasLight && !this.dirLight && (this.config.useDirectionalLight || !this.config.useEnvironmentMap)) {
510
514
  this.scene.add(this.createDirLight());
511
515
  } else if (sceneHasLight) {
512
516
  // remove if the scene shipped its own light
@@ -1189,6 +1193,17 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1189
1193
  }
1190
1194
  this.screenshotViews = this.calculateRelativeViews(this.relativeScreenshotViews, center, (this.controls.minDistance + this.controls.maxDistance) * 0.5);
1191
1195
  }
1196
+ }, {
1197
+ key: "getCameraViewRatio",
1198
+ value: function getCameraViewRatio(view1, view2) {
1199
+ return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
1200
+ }
1201
+ }, {
1202
+ key: "shouldViewChangeTriggerJumpToView",
1203
+ value: function shouldViewChangeTriggerJumpToView(view1, view2) {
1204
+ var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5;
1205
+ return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
1206
+ }
1192
1207
  }, {
1193
1208
  key: "initCameraViews",
1194
1209
  value: function initCameraViews(cameras) {
@@ -1209,7 +1224,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1209
1224
  this._firstCameraInitDone = true;
1210
1225
  this.currentCameraView = null;
1211
1226
  this.jumpToView("default", false);
1212
- } else if (previousCameraView && this.cameraViews[currentCameraName] && !(0, _isEqual["default"])(previousCameraView, this.cameraViews[currentCameraName])) {
1227
+ } else if (previousCameraView && this.cameraViews[currentCameraName] && this.shouldViewChangeTriggerJumpToView(previousCameraView, this.cameraViews[currentCameraName])) {
1213
1228
  this.currentCameraView = null;
1214
1229
  this.jumpToView(currentCameraName, true);
1215
1230
  }
@@ -1354,9 +1369,13 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
1354
1369
  controls.maxDistance = maxDistance;
1355
1370
  camera.near = minDistance * 0.01;
1356
1371
  camera.far = maxDistance * 100;
1357
- camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1372
+ // update current position only if it does not fit into the distance range
1373
+ var currentDistance = sphere.center.distanceTo(camera.position);
1374
+ if (currentDistance < minDistance || currentDistance > maxDistance) {
1375
+ camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1376
+ controls.target = sphere.center;
1377
+ }
1358
1378
  camera.updateProjectionMatrix();
1359
- controls.target = sphere.center;
1360
1379
  controls.update();
1361
1380
  }
1362
1381
  }, {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "redhotmagma-visualization",
3
- "version": "1.44.1",
3
+ "version": "1.44.3",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "main": "./index.js",
7
7
  "dependencies": {
8
8
  "@babel/polyfill": "^7.12.1",
9
- "@configuratorware/scripts": "1.44.1",
9
+ "@configuratorware/scripts": "1.44.3",
10
10
  "@tweenjs/tween.js": "^17.6.0",
11
11
  "console-polyfill": "^0.3.0",
12
12
  "css-element-queries": "^1.2.3",
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ACESFilmicToneMapping,
2
3
  AnimationMixer,
3
4
  Box3,
4
5
  CameraHelper,
@@ -35,7 +36,6 @@ import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";
35
36
  import get from "lodash/get";
36
37
  import size from "lodash/size";
37
38
  import isPlainObject from "lodash/isPlainObject";
38
- import isEqual from "lodash/isEqual";
39
39
  import { exportGLTF } from "./Exporters/glTFExporter";
40
40
  import findIndex from "lodash/findIndex";
41
41
  import merge from "lodash/merge";
@@ -274,6 +274,7 @@ export class Three3DScene extends Three3D {
274
274
  useShadowGround: true,
275
275
  removeGroundForScreenshot: true,
276
276
  useEnvironmentMap: true,
277
+ useDirectionalLight: false,
277
278
  useBakedShadows: false,
278
279
  bakedShadow: {
279
280
  lightPositionOffset: { x: 0, y: 0, z: 0 },
@@ -336,6 +337,8 @@ export class Three3DScene extends Three3D {
336
337
  renderer.outputEncoding = sRGBEncoding;
337
338
  renderer.shadowMap.enabled = true;
338
339
  renderer.shadowMap.type = PCFSoftShadowMap;
340
+ renderer.toneMapping = ACESFilmicToneMapping;
341
+ renderer.toneMappingExposure = 1;
339
342
 
340
343
  const realWidth = window.innerWidth * window.devicePixelRatio;
341
344
  if (isMobileDevice() && realWidth >= 1024) {
@@ -387,12 +390,14 @@ export class Three3DScene extends Three3D {
387
390
 
388
391
  createScene() {
389
392
  const scene = new Scene();
390
- scene.add(this.createDirLight());
391
393
  scene.add(this.sceneContainer);
392
394
 
393
395
  if (this.config.useEnvironmentMap && this.envMap) {
394
396
  scene.environment = this.envMap;
395
397
  }
398
+ if (this.config.useDirectionalLight) {
399
+ scene.add(this.createDirLight());
400
+ }
396
401
 
397
402
  return scene;
398
403
  }
@@ -446,7 +451,11 @@ export class Three3DScene extends Three3D {
446
451
 
447
452
  addLightsIfNeeded(scene) {
448
453
  const sceneHasLight = scene.getObjectByProperty("isLight", true);
449
- if (!sceneHasLight && !this.dirLight) {
454
+ if (
455
+ !sceneHasLight &&
456
+ !this.dirLight &&
457
+ (this.config.useDirectionalLight || !this.config.useEnvironmentMap)
458
+ ) {
450
459
  this.scene.add(this.createDirLight());
451
460
  } else if (sceneHasLight) {
452
461
  // remove if the scene shipped its own light
@@ -967,6 +976,14 @@ export class Three3DScene extends Three3D {
967
976
  );
968
977
  }
969
978
 
979
+ getCameraViewRatio(view1, view2) {
980
+ return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
981
+ }
982
+
983
+ shouldViewChangeTriggerJumpToView(view1, view2, tolerance = 0.5) {
984
+ return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
985
+ }
986
+
970
987
  initCameraViews(cameras) {
971
988
  if (!this.sceneContainer?.children?.length) {
972
989
  return;
@@ -991,7 +1008,10 @@ export class Three3DScene extends Three3D {
991
1008
  } else if (
992
1009
  previousCameraView &&
993
1010
  this.cameraViews[currentCameraName] &&
994
- !isEqual(previousCameraView, this.cameraViews[currentCameraName])
1011
+ this.shouldViewChangeTriggerJumpToView(
1012
+ previousCameraView,
1013
+ this.cameraViews[currentCameraName]
1014
+ )
995
1015
  ) {
996
1016
  this.currentCameraView = null;
997
1017
  this.jumpToView(currentCameraName, true);
@@ -1120,9 +1140,13 @@ export class Three3DScene extends Three3D {
1120
1140
  controls.maxDistance = maxDistance;
1121
1141
  camera.near = minDistance * 0.01;
1122
1142
  camera.far = maxDistance * 100;
1123
- camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1143
+ // update current position only if it does not fit into the distance range
1144
+ const currentDistance = sphere.center.distanceTo(camera.position);
1145
+ if (currentDistance < minDistance || currentDistance > maxDistance) {
1146
+ camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
1147
+ controls.target = sphere.center;
1148
+ }
1124
1149
  camera.updateProjectionMatrix();
1125
- controls.target = sphere.center;
1126
1150
 
1127
1151
  controls.update();
1128
1152
  }