@@ -100,19 +100,15 @@ export default function ({ color = [1, 1, 1], coords, edgeForm = {}, opacity = 1
100100
101101 cuboidGeometry . instanceCount = coords . length / 2 ;
102102
103+ edgeForm . color ??= [ 0 , 0 , 0 ] ;
104+
103105 const cuboids = new Mesh (
104106 cuboidGeometry ,
105107 new ShaderMaterial ( {
106108 transparent : opacity !== 1 ,
107109 depthWrite : opacity === 1 ,
108110 lights : true ,
109- uniforms : {
110- ...UniformsLib . lights ,
111- diffuse : { value : color } ,
112- edgeColor : { value : edgeForm . color ?? [ 0 , 0 , 0 ] } ,
113- opacity : { value : opacity } ,
114- showEdges : { value : edgeForm . showEdges ?? true }
115- } ,
111+ uniforms : UniformsLib . lights ,
116112 vertexShader : `
117113 in vec3 cuboidBegin;
118114 in vec3 cuboidEnd;
@@ -141,10 +137,6 @@ export default function ({ color = [1, 1, 1], coords, edgeForm = {}, opacity = 1
141137 in vec3 vViewPosition;
142138 in vec2 vUv;
143139
144- uniform vec3 diffuse;
145- uniform vec3 edgeColor;
146- uniform float opacity;
147- uniform bool showEdges;
148140 uniform vec3 ambientLightColor;
149141
150142 #define RECIPROCAL_PI 0.3183098861837907
@@ -194,53 +186,46 @@ export default function ({ color = [1, 1, 1], coords, edgeForm = {}, opacity = 1
194186 }
195187 #endif
196188
197- vec3 RE_Direct(const in IncidentLight directLight, const in vec3 normal, const in vec3 diffuseColor) {
198- float dotNL = saturate(dot(normal, directLight.direction));
199- return dotNL * directLight.color * diffuseColor * RECIPROCAL_PI;
200- }
201-
202189 void main() {
203- vec3 diffuseColor;
204-
205- if (showEdges) {
190+ ${ ( edgeForm . showEdges ?? true ) ? `
206191 vec2 grid = abs(fract(vUv - 0.5) - 0.5) / fwidth(vUv);
207192
208193 float factor = min(min(grid.x, grid.y), 1.0);
209194
210- diffuseColor = (diffuse - edgeColor) * factor + edgeColor;
211- } else {
212- diffuseColor = diffuse;
213- }
195+ vec3 edgeColor = vec3(${ edgeForm . color [ 0 ] } , ${ edgeForm . color [ 1 ] } , ${ edgeForm . color [ 2 ] } );
196+
197+ vec3 diffuseColor = (vec3(${ color [ 0 ] } , ${ color [ 1 ] } , ${ color [ 2 ] } ) - edgeColor) * factor + edgeColor;
198+ ` : `
199+ vec3 diffuseColor = vec3(${ color [ 0 ] } , ${ color [ 1 ] } , ${ color [ 2 ] } );
200+ ` }
214201
215202 vec3 normal = normalize(cross(dFdx(vViewPosition), dFdy(vViewPosition)));
216203
217- vec3 reflectedLight = vec3(0.0) ;
204+ vec3 reflectedLight = ambientLightColor ;
218205
219206 IncidentLight directLight;
220207
221208 #if NUM_DIR_LIGHTS > 0
222209 for (int i = 0; i < NUM_DIR_LIGHTS; i++) {
223- reflectedLight += RE_Direct( directionalLights[i], normal, diffuseColor) ;
210+ reflectedLight += saturate(dot(normal, directionalLights[i].direction)) * directionalLights[i].color ;
224211 }
225212 #endif
226213 #if NUM_POINT_LIGHTS > 0
227214 for (int i = 0; i < NUM_POINT_LIGHTS; i++) {
228215 getPointLightInfo(pointLights[i], directLight);
229- reflectedLight += RE_Direct(directLight, normal, diffuseColor) ;
216+ reflectedLight += saturate(dot( normal, directLight.direction)) * directLight.color ;
230217 }
231218 #endif
232219 #if NUM_SPOT_LIGHTS > 0
233220 for (int i = 0; i < NUM_SPOT_LIGHTS; i++) {
234221 getSpotLightInfo(spotLights[i], directLight);
235- reflectedLight += RE_Direct(directLight, normal, diffuseColor) ;
222+ reflectedLight += saturate(dot( normal, directLight.direction)) * directLight.color ;
236223 }
237224 #endif
238225
239- reflectedLight += ambientLightColor * diffuseColor * RECIPROCAL_PI;
240-
241226 pc_fragColor = vec4(
242- reflectedLight,
243- opacity
227+ reflectedLight * diffuseColor * RECIPROCAL_PI ,
228+ ${ opacity }
244229 );
245230 }
246231 `
0 commit comments