Skip to content

Commit a70d338

Browse files
committed
calculate displacement offset directly in buffer
1 parent ecb305d commit a70d338

2 files changed

Lines changed: 7 additions & 14 deletions

File tree

src/shaders/displacement.glsl

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@ vec3 get_displacement(vec2 pos, float scale) {
1616
vec2 d_uv = (pos - round(_target_pos.xz * _vertex_density * scale) / scale) / (_mesh_size * 2.0 / scale) + 0.5;
1717
d_uv.x += s - 1.;
1818
d_uv.x /= log2(_subdiv);
19-
highp vec3 nrm_h = vec3(0.);
19+
highp vec3 disp = vec3(0.);
2020
if (all(greaterThanEqual(d_uv, vec2(0.0))) && all(lessThanEqual(d_uv, vec2(1.0)))) {
21-
nrm_h = textureLod(_displacement_buffer, d_uv, 0.).rgb;
22-
float height = nrm_h.z - 0.5;
23-
nrm_h.xy = fma(nrm_h.xy, vec2(2.0), vec2(-1.0));
24-
nrm_h.z = sqrt(clamp(1.0 - dot(nrm_h.xy, nrm_h.xy), 0.0, 1.0));
25-
nrm_h = nrm_h.xzy * height * displacement_scale;
21+
disp = textureLod(_displacement_buffer, d_uv, 0.).rgb * 2.0 - 1.0;
22+
disp *= displacement_scale;
2623
}
27-
return nrm_h;
24+
return disp;
2825
}
2926

3027
//INSERT: DISPLACEMENT_VERTEX

src/shaders/displacement_buffer.glsl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ uniform highp sampler2DArray _control_maps : repeat_disable;
6262

6363
// Public uniforms
6464
//INSERT: AUTO_SHADER_UNIFORMS
65-
66-
uniform float height_sharpness : hint_range(0.0, 1.0, 0.01) = 0.5;
65+
uniform float displacement_sharpness : hint_range(0.0, 1.0, 0.01) = 0.5;
6766
uniform bool vertical_projection = true;
6867
uniform float projection_threshold : hint_range(0.0, 0.99, 0.01) = 0.8;
6968

@@ -168,7 +167,7 @@ void accumulate_material(const mat3 TNB, const float weight, const ivec3 index,
168167
#define FAST_WORLD_NORMAL(n) fma(TNB[0], vec3(n.x), fma(TNB[2], vec3(n.z), TNB[1] * vec3(n.y)))
169168

170169
float blend = DECODE_BLEND(control); // only used for branching.
171-
float sharpness = fma(11., height_sharpness, 1.);
170+
float sharpness = fma(11., displacement_sharpness, 1.);
172171

173172
// 1st Texture Asset ID
174173
if (blend < 1.0) {
@@ -370,10 +369,7 @@ void fragment() {
370369
mat.albedo_height *= weight_inv;
371370

372371
// Output
373-
// Displacement Direction Vector3 (reconstructed from XZ when used later)
374-
COLOR.rg = fma(w_normal.xz, vec2(0.5), vec2(0.5));
375-
// Displacement Ammount -0.5 to 0.5, stored in 0.0 - 1.0 Range
376-
COLOR.b = mat.albedo_height.a;
372+
COLOR.rgb = fma(w_normal * (mat.albedo_height.a - 0.5), vec3(0.5), vec3(0.5));
377373

378374
}
379375
)"

0 commit comments

Comments
 (0)