@@ -59,7 +59,10 @@ module.exports.Shader = registerShader('standard', {
5959 * Adds a reference from the scene to this entity as the camera.
6060 */
6161 init : function ( data ) {
62- this . material = new THREE . MeshStandardMaterial ( getMaterialData ( data ) ) ;
62+ this . materialData = { color : new THREE . Color ( ) , emissive : new THREE . Color ( ) } ;
63+ getMaterialData ( data , this . materialData ) ;
64+ this . material = new THREE . MeshStandardMaterial ( this . materialData ) ;
65+
6366 utils . material . updateMap ( this , data ) ;
6467 if ( data . normalMap ) { utils . material . updateDistortionMap ( 'normal' , this , data ) ; }
6568 if ( data . displacementMap ) { utils . material . updateDistortionMap ( 'displacement' , this , data ) ; }
@@ -87,11 +90,12 @@ module.exports.Shader = registerShader('standard', {
8790 * @returns {object } Material.
8891 */
8992 updateMaterial : function ( data ) {
93+ var key ;
9094 var material = this . material ;
91- data = getMaterialData ( data ) ;
92- Object . keys ( data ) . forEach ( function ( key ) {
93- material [ key ] = data [ key ] ;
94- } ) ;
95+ getMaterialData ( data , this . materialData ) ;
96+ for ( key in this . materialData ) {
97+ material [ key ] = this . materialData [ key ] ;
98+ }
9599 } ,
96100
97101 /**
@@ -153,28 +157,29 @@ module.exports.Shader = registerShader('standard', {
153157 * Builds and normalize material data, normalizing stuff along the way.
154158 *
155159 * @param {object } data - Material data.
156- * @returns {object } data - Processed material data.
160+ * @param {object } materialData - Object to use.
161+ * @returns {object } Updated materialData.
157162 */
158- function getMaterialData ( data ) {
159- var newData = {
160- color : new THREE . Color ( data . color ) ,
161- emissive : new THREE . Color ( data . emissive ) ,
162- emissiveIntensity : data . emissiveIntensity ,
163- fog : data . fog ,
164- metalness : data . metalness ,
165- roughness : data . roughness ,
166- wireframe : data . wireframe ,
167- wireframeLinewidth : data . wireframeLinewidth
168- } ;
169-
170- if ( data . normalMap ) { newData . normalScale = data . normalScale ; }
171-
172- if ( data . ambientOcclusionMap ) { newData . aoMapIntensity = data . ambientOcclusionMapIntensity ; }
163+ function getMaterialData ( data , materialData ) {
164+ materialData . color . set ( data . color ) ;
165+ materialData . emissive . set ( data . emissive ) ;
166+ materialData . emissiveIntensity = data . emissiveIntensity ;
167+ materialData . fog = data . fog ;
168+ materialData . metalness = data . metalness ;
169+ materialData . roughness = data . roughness ;
170+ materialData . wireframe = data . wireframe ;
171+ materialData . wireframeLinewidth = data . wireframeLinewidth ;
172+
173+ if ( data . normalMap ) { materialData . normalScale = data . normalScale ; }
174+
175+ if ( data . ambientOcclusionMap ) {
176+ materialData . aoMapIntensity = data . ambientOcclusionMapIntensity ;
177+ }
173178
174179 if ( data . displacementMap ) {
175- newData . displacementScale = data . displacementScale ;
176- newData . displacementBias = data . displacementBias ;
180+ materialData . displacementScale = data . displacementScale ;
181+ materialData . displacementBias = data . displacementBias ;
177182 }
178183
179- return newData ;
184+ return materialData ;
180185}
0 commit comments