Browse Source

add gamma GUI to webgl_shading_physical.html. But it is slightly incorrect because the shaders are not properly recompiled upon gamma change.

Ben Houston 10 years ago
parent
commit
1b940ff79f

+ 37 - 7
examples/webgl_shading_physical.html

@@ -88,6 +88,10 @@
 				shadowBias: -0.0002,
 				shadowBias: -0.0002,
 				shadowDarkness: 0.3
 				shadowDarkness: 0.3
 
 
+			}, gamma = {
+				gammaFactor: 2.0,
+				gammaInput: true,
+				gammaOutput: true
 			};
 			};
 
 
 			init();
 			init();
@@ -385,44 +389,70 @@
 
 
 				gui = new dat.GUI();
 				gui = new dat.GUI();
 
 
-				gui.add( shadowConfig, 'shadowCameraVisible' ).onChange( function() {
+				shadowGUI = gui.addFolder( "Shadow" );
+    	
+    			shadowGUI.add( shadowConfig, 'shadowCameraVisible' ).onChange( function() {
 
 
 					sunLight.shadowCameraVisible = shadowConfig.shadowCameraVisible;
 					sunLight.shadowCameraVisible = shadowConfig.shadowCameraVisible;
 
 
 				});
 				});
 
 
-				gui.add( shadowConfig, 'shadowCameraNear', 1, 1500 ).onChange( function() {
+				shadowGUI.add( shadowConfig, 'shadowCameraNear', 1, 1500 ).onChange( function() {
 
 
 					sunLight.shadowCamera.near = shadowConfig.shadowCameraNear;
 					sunLight.shadowCamera.near = shadowConfig.shadowCameraNear;
 					sunLight.shadowCamera.updateProjectionMatrix();
 					sunLight.shadowCamera.updateProjectionMatrix();
 
 
 				});
 				});
 
 
-				gui.add( shadowConfig, 'shadowCameraFar', 1501, 5000 ).onChange( function() {
+				shadowGUI.add( shadowConfig, 'shadowCameraFar', 1501, 5000 ).onChange( function() {
 
 
 					sunLight.shadowCamera.far = shadowConfig.shadowCameraFar;
 					sunLight.shadowCamera.far = shadowConfig.shadowCameraFar;
 					sunLight.shadowCamera.updateProjectionMatrix();
 					sunLight.shadowCamera.updateProjectionMatrix();
 
 
 				});
 				});
 
 
-				gui.add( shadowConfig, 'shadowCameraFov', 1, 120 ).onChange( function() {
+				shadowGUI.add( shadowConfig, 'shadowCameraFov', 1, 120 ).onChange( function() {
 
 
 					sunLight.shadowCamera.fov = shadowConfig.shadowCameraFov;
 					sunLight.shadowCamera.fov = shadowConfig.shadowCameraFov;
 					sunLight.shadowCamera.updateProjectionMatrix();
 					sunLight.shadowCamera.updateProjectionMatrix();
 
 
 				});
 				});
 
 
-				gui.add( shadowConfig, 'shadowBias', -0.01, 0.01 ).onChange( function() {
+				shadowGUI.add( shadowConfig, 'shadowBias', -0.01, 0.01 ).onChange( function() {
 
 
 					sunLight.shadowBias = shadowConfig.shadowBias;
 					sunLight.shadowBias = shadowConfig.shadowBias;
 
 
 				});
 				});
 
 
-				gui.add( shadowConfig, 'shadowDarkness', 0, 1 ).onChange( function() {
+				shadowGUI.add( shadowConfig, 'shadowDarkness', 0, 1 ).onChange( function() {
 
 
 				});
 				});
+				shadowGUI.open();
 
 
-				gui.close();
+				gammaGUI = gui.addFolder( "Gamma" );
+    
+				gammaGUI.add( gamma, 'gammaFactor', 0.1, 4.0 ).onChange( function() {
+
+					renderer.gammaFactor = gamma.gammaFactor;
+
+				});
+				gammaGUI.open();
+
+				/*
+
+				Not exposed because they are not easily dynamically updated - as all shaders need to be recompiled.  -bhouston
+
+				gammaGUI.add( gamma, 'gammaInput', true ).onChange( function() {
+
+					renderer.gammaInput = gamma.gammaInput;
+
+				});
+
+				gammaGUI.add( gamma, 'gammaOutput', true ).onChange( function() {
+
+					renderer.gammaOutput = gamma.gammaOutput;
+
+				});*/
 
 
 			}
 			}
 
 

+ 2 - 2
src/renderers/shaders/ShaderChunk/common.glsl

@@ -40,7 +40,7 @@ vec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 poi
 
 
 vec3 inputToLinear( in vec3 a ) {
 vec3 inputToLinear( in vec3 a ) {
 #ifdef GAMMA_INPUT
 #ifdef GAMMA_INPUT
-	return pow( a.rgb, vec3( float( GAMMA_FACTOR ) ) );
+	return pow( a, vec3( float( GAMMA_FACTOR ) ) );
 #else
 #else
 	return a;
 	return a;
 #endif
 #endif
@@ -48,7 +48,7 @@ vec3 inputToLinear( in vec3 a ) {
 
 
 vec3 linearToOutput( in vec3 a ) {
 vec3 linearToOutput( in vec3 a ) {
 #ifdef GAMMA_OUTPUT
 #ifdef GAMMA_OUTPUT
-	return pow( a.rgb, vec3( 1.0 / float( GAMMA_FACTOR ) ) );
+	return pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );
 #else
 #else
 	return a;
 	return a;
 #endif
 #endif