未验证 提交 1c5ca1d6 编写于 作者: V Vis 提交者: GitHub

SSRPassCorrectReflectorDepth2Pr (#21537)

上级 f268ef88
......@@ -44,7 +44,6 @@ var ReflectorForSSRPass = function ( geometry, options ) {
scope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;
scope.opacity = ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;
scope.color = color;
scope.worldYBias = options.worldYBias || 0;
scope.resolution = options.resolution || new Vector2( window.innerWidth, window.innerHeight );
......@@ -139,7 +138,6 @@ var ReflectorForSSRPass = function ( geometry, options ) {
material.uniforms[ 'maxDistance' ].value = scope.maxDistance;
material.uniforms[ 'color' ].value = scope.color;
material.uniforms[ 'opacity' ].value = scope.opacity;
material.uniforms[ 'worldYBias' ].value = scope.worldYBias;
vecTemp0.copy( camera.position ).normalize();
vecTemp1.copy( vecTemp0 ).reflect( yAxis );
......@@ -183,11 +181,11 @@ var ReflectorForSSRPass = function ( geometry, options ) {
virtualCamera.updateMatrixWorld();
virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
material.uniforms[ 'virtualCameraNear' ].value = virtualCamera.near;
material.uniforms[ 'virtualCameraFar' ].value = virtualCamera.far;
material.uniforms[ 'virtualCameraMatrixWorld' ].value= virtualCamera.matrixWorld;
material.uniforms[ 'virtualCameraProjectionMatrix' ].value= virtualCamera.projectionMatrix;
material.uniforms[ 'virtualCameraInverseProjectionMatrix' ].value= virtualCamera.projectionMatrixInverse;
material.uniforms[ 'virtualCameraNear' ].value = camera.near;
material.uniforms[ 'virtualCameraFar' ].value = camera.far;
material.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;
material.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;
material.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;
material.uniforms[ 'resolution' ].value = scope.resolution;
// Update the texture matrix
......@@ -295,12 +293,11 @@ ReflectorForSSRPass.ReflectorShader = {
maxDistance: { value: 180 },
opacity: { value: 0.5 },
fresnelCoe: { value: null },
worldYBias: { value: null },
virtualCameraNear: { value: null },
virtualCameraFar: { value: null },
virtualCameraProjectionMatrix: { value: new Matrix4() },
virtualCameraMatrixWorld: { value: new Matrix4() },
virtualCameraInverseProjectionMatrix: { value: new Matrix4() },
virtualCameraProjectionMatrixInverse: { value: new Matrix4() },
resolution: { value: new Vector2() },
},
......@@ -325,11 +322,10 @@ ReflectorForSSRPass.ReflectorShader = {
uniform float maxDistance;
uniform float opacity;
uniform float fresnelCoe;
uniform float worldYBias;
uniform float virtualCameraNear;
uniform float virtualCameraFar;
uniform mat4 virtualCameraProjectionMatrix;
uniform mat4 virtualCameraInverseProjectionMatrix;
uniform mat4 virtualCameraProjectionMatrixInverse;
uniform mat4 virtualCameraMatrixWorld;
uniform vec2 resolution;
varying vec4 vUv;
......@@ -349,7 +345,7 @@ ReflectorForSSRPass.ReflectorShader = {
vec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {
vec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc
clipPosition *= clipW; //clip
return ( virtualCameraInverseProjectionMatrix * clipPosition ).xyz;//view
return ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view
}
void main() {
vec4 base = texture2DProj( tDiffuse, vUv );
......@@ -361,8 +357,6 @@ ReflectorForSSRPass.ReflectorShader = {
float clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];
vec3 viewPosition=getViewPosition( uv, depth, clipW );
vec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;
worldPosition.y+=worldYBias; // TODO: Don't know why not start from zero, temporarily use manually defined bias, need fix afterwards.
worldPosition.y=max(0.,worldPosition.y);
if(worldPosition.y>maxDistance) discard;
float op=opacity;
#ifdef DISTANCE_ATTENUATION
......
......@@ -131,7 +131,6 @@
geometry = new THREE.PlaneBufferGeometry( 1, 1 );
groundReflector = new ReflectorForSSRPass( geometry, {
clipBias: 0,
worldYBias: - 0.027450980392156862,
textureWidth: window.innerWidth,
textureHeight: window.innerHeight,
color: 0x888888,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册