You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4.0中如何结合全局环境后处理与自定义后处理着色器

Godot 4.0 Beta 1 叠加自定义后处理与内置后处理的解决方法

正确实现裁剪空间平面的顶点着色器

官方文档的旧适配代码在Beta 1中存在兼容性问题,直接通过顶点着色器生成覆盖全屏的裁剪空间平面即可,无需依赖模型变换:

shader_type mesh;

void vertex() {
    // 将PlaneMesh的本地坐标(0-1范围)直接映射到裁剪空间的-1到1区间
    POSITION = vec4(VERTEX * vec3(2.0, 2.0, 0.0) - vec3(1.0, 1.0, 0.0), 1.0);
}

该代码直接跳过模型、视图、投影矩阵的计算,让平面固定在裁剪空间内,不会被相机视锥体裁剪。

MeshInstance3D的关键设置

  • 使用默认尺寸的PlaneMesh,无需手动旋转或设置Z偏移
  • 将MeshInstance3D的extra_cull_margin设为100.0以上,彻底避免视锥体裁剪问题
  • 把MeshInstance3D放在场景根节点,不要给它添加任何父节点变换

保留内置后处理的配置

自定义后处理材质必须采样当前相机的渲染结果,才能叠加在全局后处理之上:

  1. 在片段着色器中添加屏幕纹理采样:
uniform sampler2D screen_texture;

void fragment() {
    // 先采样全局后处理后的屏幕画面
    vec4 base_color = texture(screen_texture, SCREEN_UV);
    // 这里添加你的自定义后处理逻辑,比如色调偏移、边缘检测等
    COLOR = base_color * vec4(1.2, 0.9, 0.9, 1.0); // 示例:暖色调叠加
}
  1. 确保Camera3D的post_process_mode设置为POST_PROCESS_MODE_INHERIT或POST_PROCESS_MODE_ENABLED,让全局环境的后处理先执行,再将结果传递给自定义后处理平面。

常见问题排查

  • 若平面仍消失,检查顶点着色器是否正确覆盖了POSITION变量,不要混用MODEL_MATRIX或VIEW_PROJECTION_MATRIX
  • 确认自定义材质的blend_mode设为BLEND_MODE_MIX,避免完全覆盖内置后处理的结果

内容的提问来源于stack exchange,提问作者Henrik Söderlund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:35:29