minerender 2.1.0-alpha.4 → 2.1.0-alpha.5

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.
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -887,7 +885,9 @@ interface MineRenderSceneOptions {
887
885
  }
888
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
887
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
891
891
  readonly isSceneObject: true;
892
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
893
  readonly options: SceneObjectOptions;
@@ -913,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
913
  */
914
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
919
  /**
920
920
  * Get a mesh by its name
921
921
  */
@@ -1320,7 +1320,7 @@ declare class Renderer implements Disposable {
1320
1320
  protected _scene: MineRenderScene;
1321
1321
  protected _camera: Camera;
1322
1322
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1324
1324
  protected _controls?: OrbitControls;
1325
1325
  protected _stats?: Stats;
1326
1326
  protected _dirty: boolean;
@@ -1336,7 +1336,7 @@ declare class Renderer implements Disposable {
1336
1336
  protected createScene(): MineRenderScene;
1337
1337
  protected createCamera(): Camera;
1338
1338
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1340
1340
  protected createControls(): Maybe<OrbitControls>;
1341
1341
  init(): void;
1342
1342
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1345,7 @@ declare class Renderer implements Disposable {
1345
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1347
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1349
  resize(width: number, height: number): void;
1350
1350
  get dirty(): boolean;
1351
1351
  set dirty(dirty: boolean);
@@ -1365,7 +1365,7 @@ declare class Renderer implements Disposable {
1365
1365
  get scene(): MineRenderScene;
1366
1366
  get camera(): Camera;
1367
1367
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1369
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1370
  get controls(): Maybe<OrbitControls>;
1371
1371
  }
@@ -1422,7 +1422,7 @@ declare class SceneInspector {
1422
1422
  private selectedObject?;
1423
1423
  constructor(renderer: Renderer);
1424
1424
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1426
  onClick(event: any): void;
1427
1427
  appendTo(el: HTMLElement): void;
1428
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1524,12 @@ declare class Textures {
1524
1524
  static getImage(key: TextureKey): Texture;
1525
1525
  }
1526
1526
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1534
 
1535
1535
  interface BlockInfo {
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -887,7 +885,9 @@ interface MineRenderSceneOptions {
887
885
  }
888
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
887
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
891
891
  readonly isSceneObject: true;
892
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
893
  readonly options: SceneObjectOptions;
@@ -913,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
913
  */
914
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
919
  /**
920
920
  * Get a mesh by its name
921
921
  */
@@ -1320,7 +1320,7 @@ declare class Renderer implements Disposable {
1320
1320
  protected _scene: MineRenderScene;
1321
1321
  protected _camera: Camera;
1322
1322
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1324
1324
  protected _controls?: OrbitControls;
1325
1325
  protected _stats?: Stats;
1326
1326
  protected _dirty: boolean;
@@ -1336,7 +1336,7 @@ declare class Renderer implements Disposable {
1336
1336
  protected createScene(): MineRenderScene;
1337
1337
  protected createCamera(): Camera;
1338
1338
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1340
1340
  protected createControls(): Maybe<OrbitControls>;
1341
1341
  init(): void;
1342
1342
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1345,7 @@ declare class Renderer implements Disposable {
1345
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1347
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1349
  resize(width: number, height: number): void;
1350
1350
  get dirty(): boolean;
1351
1351
  set dirty(dirty: boolean);
@@ -1365,7 +1365,7 @@ declare class Renderer implements Disposable {
1365
1365
  get scene(): MineRenderScene;
1366
1366
  get camera(): Camera;
1367
1367
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1369
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1370
  get controls(): Maybe<OrbitControls>;
1371
1371
  }
@@ -1422,7 +1422,7 @@ declare class SceneInspector {
1422
1422
  private selectedObject?;
1423
1423
  constructor(renderer: Renderer);
1424
1424
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1426
  onClick(event: any): void;
1427
1427
  appendTo(el: HTMLElement): void;
1428
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1524,12 @@ declare class Textures {
1524
1524
  static getImage(key: TextureKey): Texture;
1525
1525
  }
1526
1526
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1534
 
1535
1535
  interface BlockInfo {
@@ -594,6 +594,7 @@ var import_three5 = require("three");
594
594
 
595
595
  // src/texture/TextureLoader.ts
596
596
  var import_three4 = require("three");
597
+ var THREE = __toESM(require("three"));
597
598
 
598
599
  // src/canvas/CanvasCompat.ts
599
600
  function createImage(width, height) {
@@ -982,6 +983,7 @@ var TextureLoader = class {
982
983
  }
983
984
  static loadInBackground(src, format = import_three4.RGBAFormat, rotation = 0) {
984
985
  const texture = this.createTexture();
986
+ texture.colorSpace = THREE.SRGBColorSpace;
985
987
  const image = ImageLoader.loadElement(src);
986
988
  image.onload = function() {
987
989
  texture.needsUpdate = true;
@@ -993,6 +995,7 @@ var TextureLoader = class {
993
995
  }
994
996
  static load(src, format = import_three4.RGBAFormat, rotation = 0) {
995
997
  const texture = new import_three4.Texture();
998
+ texture.colorSpace = THREE.SRGBColorSpace;
996
999
  ImageLoader.getData(src).then((image) => {
997
1000
  texture.needsUpdate = true;
998
1001
  texture.image = image;
@@ -1004,11 +1007,11 @@ var TextureLoader = class {
1004
1007
  };
1005
1008
 
1006
1009
  // src/texture/Textures.ts
1007
- var THREE = __toESM(require("three"));
1010
+ var THREE2 = __toESM(require("three"));
1008
1011
  var Textures = class _Textures {
1009
1012
  static initTextureProps(texture) {
1010
- texture.magFilter = THREE.NearestFilter;
1011
- texture.minFilter = THREE.NearestFilter;
1013
+ texture.magFilter = THREE2.NearestFilter;
1014
+ texture.minFilter = THREE2.NearestFilter;
1012
1015
  texture.anisotropy = 0;
1013
1016
  return texture;
1014
1017
  }
@@ -1019,7 +1022,9 @@ var Textures = class _Textures {
1019
1022
  return new import_three5.Texture();
1020
1023
  }
1021
1024
  static createCanvasTexture(canvas) {
1022
- return this.initTextureProps(new import_three5.CanvasTexture(canvas));
1025
+ const texture = new import_three5.CanvasTexture(canvas);
1026
+ texture.colorSpace = THREE2.SRGBColorSpace;
1027
+ return this.initTextureProps(texture);
1023
1028
  }
1024
1029
  static getImage(key) {
1025
1030
  const keyStr = serializeTextureKey(key);
@@ -1136,6 +1141,9 @@ var _Materials = class _Materials {
1136
1141
  gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
1137
1142
 
1138
1143
  }
1144
+
1145
+ #include <tonemapping_fragment>
1146
+ #include <colorspace_fragment>
1139
1147
  }
1140
1148
  `;
1141
1149
  try {
@@ -3013,7 +3021,7 @@ function isSceneObject(obj) {
3013
3021
  // src/entity/scene/EntityObject.ts
3014
3022
  var import_ts_deepmerge5 = __toESM(require_dist());
3015
3023
  var import_three11 = require("three");
3016
- var THREE2 = __toESM(require("three"));
3024
+ var THREE3 = __toESM(require("three"));
3017
3025
  var EntityObject = class extends SceneObject {
3018
3026
  constructor(entity, options) {
3019
3027
  super();
@@ -3058,8 +3066,8 @@ var EntityObject = class extends SceneObject {
3058
3066
  const l = cube.maxZ - cube.minZ;
3059
3067
  const uv = texture.toUvArray(w, h, l);
3060
3068
  const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
3061
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3062
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3069
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3070
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3063
3071
  applyModelPartRotation(part, cubeGeo);
3064
3072
  const mesh = this.createMesh(partName, cubeGeo, mat);
3065
3073
  partAnchor.add(mesh);
@@ -6220,13 +6228,13 @@ var _Renderer = class _Renderer {
6220
6228
  renderer.setClearColor(0, 0);
6221
6229
  renderer.shadowMap.enabled = true;
6222
6230
  renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
6223
- renderer.outputEncoding = import_three19.LinearEncoding;
6231
+ renderer.outputColorSpace = import_three19.SRGBColorSpace;
6224
6232
  renderer.setSize(this.viewWidth, this.viewHeight);
6225
6233
  return renderer;
6226
6234
  }
6227
6235
  createComposer() {
6236
+ if (!this.options.composer.enabled) return void 0;
6228
6237
  const composer = new import_postprocessing.EffectComposer(this.renderer);
6229
- if (!this.options.composer.enabled) return composer;
6230
6238
  composer.setSize(this.viewWidth, this.viewHeight);
6231
6239
  composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
6232
6240
  return composer;
@@ -6324,6 +6332,7 @@ var _Renderer = class _Renderer {
6324
6332
  dispatcher.addEventListener(changeEvent2, this._changeListener);
6325
6333
  }
6326
6334
  resize(width, height) {
6335
+ var _a;
6327
6336
  if (this._disposed) return;
6328
6337
  if (isPerspectiveCamera(this.camera)) {
6329
6338
  this.camera.aspect = width / height;
@@ -6336,7 +6345,7 @@ var _Renderer = class _Renderer {
6336
6345
  this.camera.updateProjectionMatrix();
6337
6346
  }
6338
6347
  this.renderer.setSize(width, height);
6339
- this.composer.setSize(width, height);
6348
+ (_a = this.composer) == null ? void 0 : _a.setSize(width, height);
6340
6349
  this._dirty = true;
6341
6350
  }
6342
6351
  //<editor-fold desc="RENDER">
@@ -6363,7 +6372,7 @@ var _Renderer = class _Renderer {
6363
6372
  * controls must be managed by their owners.
6364
6373
  */
6365
6374
  dispose() {
6366
- var _a;
6375
+ var _a, _b;
6367
6376
  if (this._disposed) return;
6368
6377
  this.stop();
6369
6378
  this._disposed = true;
@@ -6396,7 +6405,7 @@ var _Renderer = class _Renderer {
6396
6405
  }
6397
6406
  }
6398
6407
  this._debugHelpers.length = 0;
6399
- this.composer.dispose();
6408
+ (_b = this.composer) == null ? void 0 : _b.dispose();
6400
6409
  this.renderer.dispose();
6401
6410
  this.renderer.forceContextLoss();
6402
6411
  }
@@ -6417,7 +6426,7 @@ var _Renderer = class _Renderer {
6417
6426
  if (this._stats) {
6418
6427
  this._stats.begin();
6419
6428
  }
6420
- if (this.options.composer.enabled) {
6429
+ if (this.options.composer.enabled && this.composer) {
6421
6430
  this.composer.render();
6422
6431
  } else {
6423
6432
  this.renderer.render(this.scene, this.camera);