Setting the file. One moment.
Room Environment · Cuboid Carousel · heygen-com/hyperframes · Skills Docs
ContentsBack to the top of the page assets/addons/environments/RoomEnvironment.js
assets/addons/environments/ RoomEnvironment.js
JavaScript · 167 lines · 5 KB
@link
PMREMGenerator#fromScene
}
. The resulting PMREM represents the room's
16 * lighting and can be used for Image Based Lighting by assigning it to { @link Scene#environment }
17 * or directly as an environment map to PBR materials.
18 *
19 * The implementation is based on the [EnvironmentScene](https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/three-components/EnvironmentScene.ts)
20 * component from the `model-viewer` project.
21 *
22 * ```js
23 * const environment = new RoomEnvironment();
24 * const pmremGenerator = new THREE.PMREMGenerator( renderer );
25 *
26 * const envMap = pmremGenerator.fromScene( environment ).texture;
27 * scene.environment = envMap;
28 * ```
29 *
30 * @augments Scene
31 * @three_import import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js';
32 */
33 class RoomEnvironment extends Scene {
34 constructor () {
35 super ();
36
37 const geometry = new BoxGeometry ();
38 geometry. deleteAttribute ( "uv" );
39
40 const roomMaterial = new MeshStandardMaterial ({ side: BackSide });
41 const boxMaterial = new MeshStandardMaterial ();
42
43 const mainLight = new PointLight ( 0xffffff , 900 , 28 , 2 );
44 mainLight.position. set ( 0.418 , 16.199 , 0.3 );
45 this . add (mainLight);
46
47 const room = new Mesh (geometry, roomMaterial);
48 room.position. set ( - 0.757 , 13.219 , 0.717 );
49 room.scale. set ( 31.713 , 28.305 , 28.591 );
50 this . add (room);
51
52 const boxes = new InstancedMesh (geometry, boxMaterial, 6 );
53 const transform = new Object3D ();
54
55 // box1
56 transform.position. set ( - 10.906 , 2.009 , 1.846 );
57 transform.rotation. set ( 0 , - 0.195 , 0 );
58 transform.scale. set ( 2.328 , 7.905 , 4.651 );
59 transform. updateMatrix ();
60 boxes. setMatrixAt ( 0 , transform.matrix);
61
62 // box2
63 transform.position. set ( - 5.607 , - 0.754 , - 0.758 );
64 transform.rotation. set ( 0 , 0.994 , 0 );
65 transform.scale. set ( 1.97 , 1.534 , 3.955 );
66 transform. updateMatrix ();
67 boxes. setMatrixAt ( 1 , transform.matrix);
68
69 // box3
70 transform.position. set ( 6.167 , 0.857 , 7.803 );
71 transform.rotation. set ( 0 , 0.561 , 0 );
72 transform.scale. set ( 3.927 , 6.285 , 3.687 );
73 transform. updateMatrix ();
74 boxes. setMatrixAt ( 2 , transform.matrix);
75
76 // box4
77 transform.position. set ( - 2.017 , 0.018 , 6.124 );
78 transform.rotation. set ( 0 , 0.333 , 0 );
79 transform.scale. set ( 2.002 , 4.566 , 2.064 );
80 transform. updateMatrix ();
81 boxes. setMatrixAt ( 3 , transform.matrix);
82
83 // box5
84 transform.position. set ( 2.291 , - 0.756 , - 2.621 );
85 transform.rotation. set ( 0 , - 0.286 , 0 );
86 transform.scale. set ( 1.546 , 1.552 , 1.496 );
87 transform. updateMatrix ();
88 boxes. setMatrixAt ( 4 , transform.matrix);
89
90 // box6
91 transform.position. set ( - 2.193 , - 0.369 , - 5.547 );
92 transform.rotation. set ( 0 , 0.516 , 0 );
93 transform.scale. set ( 3.875 , 3.487 , 2.986 );
94 transform. updateMatrix ();
95 boxes. setMatrixAt ( 5 , transform.matrix);
96
97 this . add (boxes);
98
99 // -x right
100 const light1 = new Mesh (geometry, createAreaLightMaterial ( 50 ));
101 light1.position. set ( - 16.116 , 14.37 , 8.208 );
102 light1.scale. set ( 0.1 , 2.428 , 2.739 );
103 this . add (light1);
104
105 // -x left
106 const light2 = new Mesh (geometry, createAreaLightMaterial ( 50 ));
107 light2.position. set ( - 16.109 , 18.021 , - 8.207 );
108 light2.scale. set ( 0.1 , 2.425 , 2.751 );
109 this . add (light2);
110
111 // +x
112 const light3 = new Mesh (geometry, createAreaLightMaterial ( 17 ));
113 light3.position. set ( 14.904 , 12.198 , - 1.832 );
114 light3.scale. set ( 0.15 , 4.265 , 6.331 );
115 this . add (light3);
116
117 // +z
118 const light4 = new Mesh (geometry, createAreaLightMaterial ( 43 ));
119 light4.position. set ( - 0.462 , 8.89 , 14.52 );
120 light4.scale. set ( 4.38 , 5.441 , 0.088 );
121 this . add (light4);
122
123 // -z
124 const light5 = new Mesh (geometry, createAreaLightMaterial ( 20 ));
125 light5.position. set ( 3.235 , 11.486 , - 12.541 );
126 light5.scale. set ( 2.5 , 2.0 , 0.1 );
127 this . add (light5);
128
129 // +y
130 const light6 = new Mesh (geometry, createAreaLightMaterial ( 100 ));
131 light6.position. set ( 0.0 , 20.0 , 0.0 );
132 light6.scale. set ( 1.0 , 0.1 , 1.0 );
133 this . add (light6);
134 }
135
136 /**
137 * Frees internal resources. This method should be called
138 * when the environment is no longer required.
139 */
140 dispose () {
141 const resources = new Set ();
142
143 this . traverse (( object ) => {
144 if (object.isMesh) {
145 resources. add (object.geometry);
146 resources. add (object.material);
147 }
148 });
149
150 for ( const resource of resources) {
151 resource. dispose ();
152 }
153 }
154 }
155
156 function createAreaLightMaterial ( intensity ) {
157 // create an emissive-only material. see #31348
158 const material = new MeshLambertMaterial ({
159 color: 0x000000 ,
160 emissive: 0xffffff ,
161 emissiveIntensity: intensity,
162 });
163
164 return material;
165 }
166
167 export { RoomEnvironment };