此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;
}