Browse Source

Merge pull request #15277 from FishOrBear/ACESFilmToneMapping

Add ACES Filmic ToneMapping
Mr.doob 6 years ago
parent
commit
e61e7c0ecf

+ 2 - 1
examples/webgl_tonemapping.html

@@ -73,7 +73,8 @@
 				Linear: THREE.LinearToneMapping,
 				Reinhard: THREE.ReinhardToneMapping,
 				Uncharted2: THREE.Uncharted2ToneMapping,
-				Cineon: THREE.CineonToneMapping
+				Cineon: THREE.CineonToneMapping,
+				ACESFilmic: THREE.ACESFilmicToneMapping
 			};
 
 			var camera, scene, renderer, group;

+ 2 - 0
src/constants.js

@@ -55,6 +55,8 @@ export var LinearToneMapping = 1;
 export var ReinhardToneMapping = 2;
 export var Uncharted2ToneMapping = 3;
 export var CineonToneMapping = 4;
+export var ACESFilmicToneMapping = 5;
+
 export var UVMapping = 300;
 export var CubeReflectionMapping = 301;
 export var CubeRefractionMapping = 302;

+ 8 - 0
src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js

@@ -39,5 +39,13 @@ vec3 OptimizedCineonToneMapping( vec3 color ) {
 	color = max( vec3( 0.0 ), color - 0.004 );
 	return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
 
+}
+
+// source: https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
+vec3 ACESFilmicToneMapping( vec3 color ) {
+
+	color *= toneMappingExposure;
+	return saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );
+
 }
 `;

+ 5 - 1
src/renderers/webgl/WebGLProgram.js

@@ -5,7 +5,7 @@
 import { WebGLUniforms } from './WebGLUniforms.js';
 import { WebGLShader } from './WebGLShader.js';
 import { ShaderChunk } from '../shaders/ShaderChunk.js';
-import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, EquirectangularRefractionMapping, CubeRefractionMapping, SphericalReflectionMapping, EquirectangularReflectionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, CineonToneMapping, Uncharted2ToneMapping, ReinhardToneMapping, LinearToneMapping, GammaEncoding, RGBDEncoding, RGBM16Encoding, RGBM7Encoding, RGBEEncoding, sRGBEncoding, LinearEncoding } from '../../constants.js';
+import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, EquirectangularRefractionMapping, CubeRefractionMapping, SphericalReflectionMapping, EquirectangularReflectionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, ACESFilmicToneMapping, CineonToneMapping, Uncharted2ToneMapping, ReinhardToneMapping, LinearToneMapping, GammaEncoding, RGBDEncoding, RGBM16Encoding, RGBM7Encoding, RGBEEncoding, sRGBEncoding, LinearEncoding } from '../../constants.js';
 
 var programIdCount = 0;
 
@@ -70,6 +70,10 @@ function getToneMappingFunction( functionName, toneMapping ) {
 			toneMappingName = 'OptimizedCineon';
 			break;
 
+		case ACESFilmicToneMapping:
+			toneMappingName = 'ACESFilmic';
+			break;
+
 		default:
 			throw new Error( 'unsupported toneMapping: ' + toneMapping );