200字
解决手臂穿墙问题shader
2026-01-10
2026-01-10

此shader可有效解决3D项目中,手臂以及手臂上挂载的实体穿墙问题。

在保证光照和层级的基础上,开启手臂无深度测试。

shader_type spatial;
render_mode depth_draw_opaque, cull_disabled; 

uniform float viewmodel_fov : hint_range(40.0, 120.0) = 75.0;
uniform bool disable_depth = true;
uniform sampler2D albedo_texture : source_color; 
uniform vec4 albedo_color : source_color = vec4(1.0); 

void vertex() {
    float aspect = VIEWPORT_SIZE.x / VIEWPORT_SIZE.y;
    float onetanfov = 1.0 / tan(radians(viewmodel_fov) * 0.5);
    
    PROJECTION_MATRIX[1][1] = -onetanfov;
    PROJECTION_MATRIX[0][0] = onetanfov / aspect;
    
    POSITION = PROJECTION_MATRIX * MODELVIEW_MATRIX * vec4(VERTEX, 1.0);
    
    if (disable_depth) {
        POSITION.z = mix(POSITION.z, 0.1, 2.00); 
    }
}

void fragment() {
    vec4 tex = texture(albedo_texture, UV);
    ALBEDO = tex.rgb * albedo_color.rgb;
}

解决手臂穿墙问题shader
作者
站长
发表于
2026-01-10

评论