Przeglądaj źródła

disable anisotropy with textureGrad (#23556)

Emmett Lalish 3 lat temu
rodzic
commit
a1382c6655

+ 7 - 26
src/extras/PMREMGenerator.js

@@ -409,12 +409,6 @@ class PMREMGenerator {
 
 		uniforms[ 'envMap' ].value = texture;
 
-		if ( ! isCubeTexture ) {
-
-			uniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );
-
-		}
-
 		const size = this._cubeSize;
 		_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
 
@@ -672,6 +666,10 @@ function _getBlurShader( lodMax, width, height ) {
 
 		name: 'SphericalGaussianBlur',
 
+		extensions: {
+			shaderTextureLOD: true
+		},
+
 		defines: {
 			'n': MAX_SAMPLES,
 			'CUBEUV_TEXEL_WIDTH': 1.0 / width,
@@ -765,14 +763,12 @@ function _getBlurShader( lodMax, width, height ) {
 
 function _getEquirectShader() {
 
-	const texelSize = new Vector2( 1, 1 );
 	const shaderMaterial = new RawShaderMaterial( {
 
 		name: 'EquirectangularToCubeUV',
 
 		uniforms: {
-			'envMap': { value: null },
-			'texelSize': { value: texelSize }
+			'envMap': { value: null }
 		},
 
 		vertexShader: _getCommonVertexShader(),
@@ -785,31 +781,16 @@ function _getEquirectShader() {
 			varying vec3 vOutputDirection;
 
 			uniform sampler2D envMap;
-			uniform vec2 texelSize;
 
 			#include <common>
 
 			void main() {
 
-				gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
-
 				vec3 outputDirection = normalize( vOutputDirection );
 				vec2 uv = equirectUv( outputDirection );
 
-				vec2 f = fract( uv / texelSize - 0.5 );
-				uv -= f * texelSize;
-				vec3 tl = texture2D ( envMap, uv ).rgb;
-				uv.x += texelSize.x;
-				vec3 tr = texture2D ( envMap, uv ).rgb;
-				uv.y += texelSize.y;
-				vec3 br = texture2D ( envMap, uv ).rgb;
-				uv.x -= texelSize.x;
-				vec3 bl = texture2D ( envMap, uv ).rgb;
-
-				vec3 tm = mix( tl, tr, f.x );
-				vec3 bm = mix( bl, br, f.x );
-				gl_FragColor.rgb = mix( tm, bm, f.y );
-
+				gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
+				
 			}
 		`,
 

+ 9 - 1
src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js

@@ -104,7 +104,15 @@ export default /* glsl */`
 		uv.x *= CUBEUV_TEXEL_WIDTH;
 		uv.y *= CUBEUV_TEXEL_HEIGHT;
 
-		return texture2D( envMap, uv ).rgb;
+		#ifdef TEXTURE_LOD_EXT
+
+			return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; // disable anisotropic filtering
+
+		#else
+
+			return texture2D( envMap, uv ).rgb;
+
+		#endif
 
 	}
 

+ 3 - 2
src/renderers/webgl/WebGLProgram.js

@@ -423,7 +423,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 		prefixFragment = [
 
 			customExtensions,
-			customDefines
+			customDefines,
+			parameters.rendererExtensionShaderTextureLod ? '#define TEXTURE_LOD_EXT' : ''
 
 		].filter( filterEmptyLine ).join( '\n' );
 
@@ -700,7 +701,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	vertexShader = unrollLoops( vertexShader );
 	fragmentShader = unrollLoops( fragmentShader );
 
-	if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
+	if ( parameters.isWebGL2 ) {
 
 		// GLSL 3.0 conversion for built-in materials and ShaderMaterial