Add more utilities to default shader function + make the road shader more optimized
This commit is contained in:
parent
2efe3afa9f
commit
b8ce2da3f3
@ -4,6 +4,7 @@ in float hue_change;
|
||||
in vec3 normal;
|
||||
in vec3 tangent;
|
||||
in vec2 uv;
|
||||
in vec4 world_position;
|
||||
|
||||
layout(location = 0) out vec4 o_diffuse_color;
|
||||
layout(location = 1) out vec4 o_normal_color;
|
||||
@ -12,9 +13,17 @@ layout(location = 1) out vec4 o_normal_color;
|
||||
#stk_include "utils/rgb_conversion.frag"
|
||||
#stk_include "utils/sp_texture_sampling.frag"
|
||||
|
||||
uniform sampler2D g_detail_map;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Triplanar detail map
|
||||
vec2 xyuv = vec2(world_position.x, world_position.y);
|
||||
float detail = texture(g_detail_map, uv * 32).r;
|
||||
detail *= 2.5;
|
||||
|
||||
vec4 col = sampleTextureLayer0(uv);
|
||||
col = (col - detail) + 0.5;
|
||||
if (hue_change > 0.0)
|
||||
{
|
||||
float mask = col.a;
|
||||
|
@ -1,3 +1,5 @@
|
||||
uniform sampler2D road_masking;
|
||||
|
||||
in vec3 bitangent;
|
||||
in vec4 color;
|
||||
in float hue_change;
|
||||
@ -21,6 +23,7 @@ void main()
|
||||
vec4 col = multi_sampleTextureLayer0(uv, camdist);
|
||||
|
||||
float mask = sampleTextureLayer4(uuv * 2.0).r;
|
||||
mask += sampleTextureLayer4(uuv * 0.5).r;
|
||||
|
||||
//* (1.0 - color.g)
|
||||
mask = mix(1.0, mask, color.r);
|
||||
@ -36,16 +39,16 @@ void main()
|
||||
mask_2 = pow(mask_2, 1.5);
|
||||
mask_2 *= pow(mask_3, 0.5);
|
||||
|
||||
float skidding_marks = sampleTextureLayer5(uv * 10.0).g;
|
||||
float skidding_marks = texture(road_masking, uv * 10.0).g;
|
||||
skidding_marks *= mask_2;
|
||||
col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), skidding_marks);
|
||||
|
||||
float skidding_marks_2 = sampleTextureLayer5(uv * 15.0).g;
|
||||
float skidding_marks_2 = texture(road_masking, uv * 15.0).g;
|
||||
skidding_marks_2 *= mask_2;
|
||||
col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), skidding_marks_2);
|
||||
|
||||
// Add some cracks
|
||||
float cracks_marks = sampleTextureLayer5(uv * 11.0).b;
|
||||
float cracks_marks = texture(road_masking, uv * 11.0).b;
|
||||
float crack_mask = sampleTextureLayer4(uuv * 0.5).r;
|
||||
cracks_marks *= crack_mask;
|
||||
col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), cracks_marks);
|
||||
|
@ -3,6 +3,10 @@
|
||||
<first-pass vertex-shader="sp_pass.vert"
|
||||
fragment-shader="sp_normal_map.frag"
|
||||
skinned-mesh-shader="sp_skinning.vert">
|
||||
<prefilled-textures>
|
||||
<prefilled-texture name="g_detail_map" file="gfx_detailmap_a.png"
|
||||
srgb="Y" sampler="trilinear"/>
|
||||
</prefilled-textures>
|
||||
</first-pass>
|
||||
<shadow-pass vertex-shader="sp_shadow.vert"
|
||||
fragment-shader="white.frag"
|
||||
|
@ -2,15 +2,8 @@
|
||||
<shader-info name="roadBlending" fallback-shader="solid" use-tangents="Y"/>
|
||||
<first-pass vertex-shader="sp_pass.vert"
|
||||
fragment-shader="sp_road_blending.frag">
|
||||
<prefilled-textures>
|
||||
<prefilled-texture name="road_masking" file="hd_roadMarking_a_mask.png" srgb="Y" sampler="trilinear"/>
|
||||
</prefilled-textures>
|
||||
</first-pass>
|
||||
<!--
|
||||
<shadow-pass vertex-shader="sp_shadow.vert"
|
||||
fragment-shader="white.frag"
|
||||
skinned-mesh-shader="sp_skinning_shadow.vert">
|
||||
</shadow-pass>
|
||||
<uniform-assigners>
|
||||
<uniform-assigner name="layer"
|
||||
function="shadowCascadeUniformAssigner"/>
|
||||
</uniform-assigners>
|
||||
-->
|
||||
</spshader>
|
||||
|
@ -109,6 +109,29 @@ vec4 sampleTextureLayer4(vec2 uv)
|
||||
return texture(tex_layer_4, uv);
|
||||
}
|
||||
|
||||
vec4 multi_sampleTextureLayer4(vec2 uv, float distance)
|
||||
{
|
||||
|
||||
vec4 l_col = sampleTextureLayer4(uv * LOW_SAMPLING);
|
||||
vec4 m_col = sampleTextureLayer4(uv * MEDIUM_SAMPLING);
|
||||
vec4 h_col = sampleTextureLayer4(uv * HIGH_SAMPLING);
|
||||
|
||||
// From Low to medium
|
||||
float factor = distance * 0.02;
|
||||
factor = pow(factor, 2.5);
|
||||
factor = clamp(factor, 0.0, 1.0);
|
||||
vec4 f_col = mix(m_col, l_col, factor);
|
||||
|
||||
// From medium to high
|
||||
factor = distance * 0.1;
|
||||
factor = pow(factor, 2.5);
|
||||
factor = clamp(factor, 0.0, 1.0);
|
||||
|
||||
f_col = mix(h_col, f_col, factor);
|
||||
|
||||
return f_col;
|
||||
}
|
||||
|
||||
vec4 sampleTextureLayer5(vec2 uv)
|
||||
{
|
||||
return texture(tex_layer_5, uv);
|
||||
|
Loading…
Reference in New Issue
Block a user