Kaynağa Gözat

UltraHDRLoader: Improve HDR reconstruction performance.

Mr.doob 1 ay önce
ebeveyn
işleme
4b110fe4c3
1 değiştirilmiş dosya ile 11 ekleme ve 9 silme
  1. 11 9
      examples/jsm/loaders/UltraHDRLoader.js

+ 11 - 9
examples/jsm/loaders/UltraHDRLoader.js

@@ -442,19 +442,22 @@ class UltraHDRLoader extends Loader {
 
 	_srgbToLinear( value ) {
 
-		if ( value / 255 < 0.04045 ) {
+		// 0.04045 * 255 = 10.31475
+		if ( value < 10.31475 ) {
 
-			return ( value / 255 ) * 0.0773993808;
+			// (1/255) * 0.0773993808
+			return value * 0.000303527;
 
 		}
 
 		if ( value < 1024 ) {
 
-			return SRGB_TO_LINEAR[ ~ ~ value ];
+			return SRGB_TO_LINEAR[ value | 0 ];
 
 		}
 
-		return Math.pow( ( value / 255 ) * 0.9478672986 + 0.0521327014, 2.4 );
+		// (1/255) * 0.9478672986 = 0.003717127
+		return Math.pow( value * 0.003717127 + 0.0521327014, 2.4 );
 
 	}
 
@@ -552,6 +555,7 @@ class UltraHDRLoader extends Loader {
 				const useGammaOne = xmpMetadata.gamma === 1.0;
 				const isHalfFloat = this.type === HalfFloatType;
 				const toHalfFloat = DataUtils.toHalfFloat;
+				const srgbToLinear = this._srgbToLinear;
 
 				const hdrBuffer = isHalfFloat
 					? new Uint16Array( dataLength ).fill( 15360 )
@@ -579,7 +583,7 @@ class UltraHDRLoader extends Loader {
 							offsetHDR;
 
 						const linearHDRValue = Math.min(
-							Math.max( this._srgbToLinear( hdrValue ), 0 ),
+							Math.max( srgbToLinear( hdrValue ), 0 ),
 							65504
 						);
 
@@ -594,11 +598,9 @@ class UltraHDRLoader extends Loader {
 				onSuccess( hdrBuffer, sdrWidth, sdrHeight );
 
 			} )
-			.catch( () => {
+			.catch( ( e ) => {
 
-				throw new Error(
-					'THREE.UltraHDRLoader Error: Could not parse UltraHDR images'
-				);
+				onError( e );
 
 			} );
 

粤ICP备19079148号