Проблемы с шейдером воды (не хочу преломлять объект над водой) - PullRequest
1 голос
/ 16 июня 2020

Я создал шейдер воды, у которого есть проблема с преломлением. Это не только преломляющий объект под водой (который должен) - это также преломляющий объект, который не находится в воде.

water shader

Вот полный источник фрагментный шейдер.

varying vec2 v_UV1;

uniform sampler2D u_Scene;
uniform sampler2D u_Depth;
uniform sampler2D u_WaterDUDV;
uniform vec2 u_ViewSize;
uniform float u_Time;
uniform vec3 u_Color;
uniform float u_Transparency;

void main() {
  float transparency = u_Transparency;
  vec4 waterColor = vec4(u_Color, 1.0);
  vec2 uv = v_UV1 + vec2(0.3, 0.1) * u_Time;
  vec2 dudv = texture2D(u_WaterDUDV, uv).rg * 2.0 - 1.0;
  vec2 finalSceneUV = gl_FragCoord.xy / u_ViewSize;
  vec2 sceneUV = gl_FragCoord.xy / u_ViewSize;
  vec2 sceneOffsetUV = sceneUV + dudv * 0.007;
  float sceneDepth = texture2D(u_Depth, sceneUV).r;
  float sceneOffsetDepth = texture2D(u_Depth, sceneOffsetUV).r;

  if (sceneDepth < gl_FragCoord.z) {
    transparency = 0.0;
  } else {
    // The cube is viewed though water.
    finalSceneUV = sceneOffsetUV;
  }
  vec4 sceneColor = texture2D(u_Scene, finalSceneUV);
  vec4 finalColor = mix(sceneColor, waterColor, transparency);

  gl_FragColor = finalColor;
}

Есть идеи, как это можно исправить?

...