update
This commit is contained in:
@@ -33,5 +33,51 @@ vec3 colorRamp(float t) {
|
||||
}
|
||||
|
||||
float maxNeighborValue(vec2 uv) {
|
||||
|
||||
vec2 texelSizeF = 1.0 / uTexelSize;
|
||||
ivec2 texelSizeI = ivec2(max(1.0, floor(uTexelSize + 0.5)));
|
||||
ivec2 maxCoord = texelSizeI - 1;
|
||||
|
||||
vec2 texelF = vec2(clamp(uv * maxCoord, vec2(0.0), vec2(maxCoord)));
|
||||
ivec2 base = ivec2(floor(texelF));
|
||||
ivec2 base10 = min(base + ivec2(1, 0), maxCoord);
|
||||
ivec2 base01 = min(base + ivec2(0, 1), maxCoord);
|
||||
ivec2 base11 = min(base + ivec2(1, 1), maxCoord);
|
||||
|
||||
float v00 = texelFetch(uColorHeigh, base, 0).r;
|
||||
float v10 = texelFetch(uColorHeigh, base10, 0).r;
|
||||
float v01 = texelFetch(uColorHeigh, base01, 0).r;
|
||||
float v11 = texelFetch(uColorHeigh, base11, 0).r;
|
||||
|
||||
return max(max(v00, v10), max(v01, v11));
|
||||
}
|
||||
|
||||
vec3 colorRampWithZero(float t) {
|
||||
const float zeroW = 0.005;
|
||||
float blend = smoothstep(0.0, zeroW, t);
|
||||
float tRamp = saturate(t - zeroW) / max(1.0 - zeroW, 1e-6);
|
||||
vec3 ramp = colorRamp(tRamp);
|
||||
return mix(uColorZero, ramp, blend);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec3 N = normalize(vNormal);
|
||||
vec3 L = normalize(uLightDir);
|
||||
vec3 V = normalize(uCameraPos - vWorldPos);
|
||||
vec3 H = normalize(L + V);
|
||||
|
||||
float diff = saturate(dot(N, L));
|
||||
float spec = pow(saturate(dot(N, H)), 24.0);
|
||||
|
||||
float vC = texture(uHeightTex, vUV).r;
|
||||
bool isZero = abs(vC) <= 1e-6;
|
||||
float t = value01(vC);
|
||||
float m = maxNeighborValue(vUV);
|
||||
float eps = max(1e-4, 0.001 * (uMaxV - uMinV));
|
||||
float force = smoothstep(uMaxV - eps, uMaxV, m);
|
||||
t = max(t, force);
|
||||
vec3 base = isZero ? uColorZero : colorRampWithZero(t);
|
||||
|
||||
vec3 col = base * (0.35 + 0.65 * diff);
|
||||
col += vec3(1.0) * spec * 0.10;
|
||||
FragColor = vec4(clamp(col, 0.0, 1.0), 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user