瀏覽代碼

WebGLDeferredRenderer: trying to match better linear space lighting in WebGLRenderer.

Still need to solve live material / lights parameters updates (only light position is dynamic for now).
alteredq 12 年之前
父節點
當前提交
07806c89b0
共有 1 個文件被更改,包括 15 次插入7 次删除
  1. 15 7
      examples/js/renderers/WebGLDeferredRenderer.js

+ 15 - 7
examples/js/renderers/WebGLDeferredRenderer.js

@@ -158,9 +158,9 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 		var wrapAround = originalMaterial.wrapAround !== undefined ? ( originalMaterial.wrapAround ? -1 : 1 ) : 1;
 		var additiveSpecular = originalMaterial.metal !== undefined ? ( originalMaterial.metal ? 1 : -1 ) : -1;
 
-		uniforms.emissive.value.copy( emissive );
-		uniforms.diffuse.value.copy( diffuse );
-		uniforms.specular.value.copy( specular );
+		uniforms.emissive.value.copyGammaToLinear( emissive );
+		uniforms.diffuse.value.copyGammaToLinear( diffuse );
+		uniforms.specular.value.copyGammaToLinear( specular );
 		uniforms.shininess.value = shininess;
 		uniforms.wrapAround.value = wrapAround;
 		uniforms.additiveSpecular.value = additiveSpecular;
@@ -314,10 +314,14 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 
 		}
 
+		// linear space
+
+		var intensity = light.intensity * light.intensity;
+
 		materialLight.uniforms[ "lightPos" ].value = light.position;
 		materialLight.uniforms[ "lightRadius" ].value = distance;
-		materialLight.uniforms[ "lightIntensity" ].value = light.intensity;
-		materialLight.uniforms[ "lightColor" ].value = light.color;
+		materialLight.uniforms[ "lightIntensity" ].value = intensity;
+		materialLight.uniforms[ "lightColor" ].value.copyGammaToLinear( light.color );
 
 		materialLight.uniforms[ "viewWidth" ].value = scaledWidth;
 		materialLight.uniforms[ "viewHeight" ].value = scaledHeight;
@@ -361,9 +365,13 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 
 		} );
 
+		// linear space
+
+		var intensity = light.intensity * light.intensity;
+
 		materialLight.uniforms[ "lightDir" ].value = light.position;
-		materialLight.uniforms[ "lightIntensity" ].value = light.intensity;
-		materialLight.uniforms[ "lightColor" ].value = light.color;
+		materialLight.uniforms[ "lightIntensity" ].value = intensity;
+		materialLight.uniforms[ "lightColor" ].value.copyGammaToLinear( light.color );
 
 		materialLight.uniforms[ "viewWidth" ].value = scaledWidth;
 		materialLight.uniforms[ "viewHeight" ].value = scaledHeight;