> 3D 搭好了,本篇回答「画面是怎么画出来的」:三大渲染方法的取舍、4.7 三大渲染新货(HDR 输出、AreaLight3D、DrawableTexture2D)、着色器语言入门。
一、三大渲染方法:怎么选不纠结
项目设置的第一个大决定:Rendering → Renderer。三个选项的本质是图形 API 与特性集的组合:
- Forward+:Vulkan/D3D12/Metal,桌面全特性旗舰——SDFGI、VoxelGI、SSR 全开,PC 游戏默认。
- Mobile:Vulkan,砍掉重型 GI,换来手机 GPU 的发热与续航安全;4.7 的 Vulkan 子采样图(subsampled images)让它的 foveated rendering 性能大涨,官方现已明确建议新 XR 项目也用它。
- Compatibility:OpenGL 3.3 / WebGL 2 / GLES3,覆盖老设备与 Web,特性最少但兼容性最广——Web 导出与低端机唯一选项。
顺带一记 4.6 的重大默认变更:Windows 上 D3D12 成为新项目默认后端(Vulkan 仍在菜单里),跨平台驱动一致性更好;4.6 还顺手修了一批 Mali/Adreno 移动 GPU 的 Vulkan 崩溃。
二、4.7 三大渲染新货逐个说
- HDR 输出。Godot 内部光照计算一直是 HDR 精度,但显示器端过去只能 SDR 压缩输出。4.7 打通了「最后一公里」:在 Windows、macOS、iOS、visionOS、Linux(Wayland)上,游戏可以把内部 HDR 模拟完整送到支持 HDR 的屏幕上——更艳的色彩、更炸的高光、2D/3D 通吃。开启在项目设置 Rendering → Viewport → HDR Output。注意浏览器对 HDR 呈现支持不一(如 Firefox 就不支持 HDR 图像)。
AreaLight3D。矩形面光源节点。以前做「电视屏幕照亮房间」要自发光材质加 GI 间接模拟;现在矩形面直接实时发光,柔影、镜面反射、灯管、霓虹招牌全是原生效果。它是 4.x 光源家族的第四个成员,与 DirectionalLight/OmniLight/SpotLight 并列。DrawableTexture2D。过去想在纹理上画东西只有两条路:Viewport 方案(功能全但重)或直接操作RenderingDevice(性能好但门槛劝退)。4.7 给了个中间层——一套简单 API 直接往 2D 纹理上绘制,血迹、涂鸦、程序化贴图、小地图都变得一行调用的事。
agx_white/agx_contrast)、反射探针八面体贴图(省 GPU 省显存)。三、着色器语言:第一支 Shader 十分钟
Godot Shader Language(GDShader)语法近 GLSL,但是面向渲染类型的:spatial(3D 表面)、canvas_item(2D)、sky(天空)、particles(粒子)、fog(体积雾)。五分钟写一个 2D 扫描线:
shader_type canvas_item;
uniform vec4 scan_color : source_color = vec4(0.0, 1.0, 1.0, 1.0);
uniform float intensity : hint_range(0.0, 1.0) = 0.3;
void fragment() {
float scan = sin(UV.y * 400.0 + TIME * 4.0) * 0.5 + 0.5;
COLOR = texture(TEXTURE, UV);
COLOR.rgb = mix(COLOR.rgb, scan_color.rgb, scan * intensity);
}
要点注解:
shader_type必写,决定这个 shader 活在哪类节点上;uniform是从 GDScript 侧传参的入口:material.set_shader_parameter("intensity", 0.5),: source_color这类 hint 决定编辑器 UI(颜色选择器、滑条范围);fragment()是逐像素回调,UV、COLOR、TEXTURE、TIME是内建变量;VERTEX/NORMAL在vertex()里玩;- 建一个
ShaderMaterial,填 shader,挂到任意 Sprite2D 的 Material 槽——立刻生效。
vec2 v4 = UV; 的同时编辑器里直接看到效果,不用再编译后跳去工作区看。ShaderGraph 之外的手写党,体验直接对齐专业 IDE。spatial 进阶一句话路线:BaseMaterial3D(免代码,先解决 80%)→ 标准 shader(改 PBR 各通道)→ render_mode(unshaded/blend_add/cull_disabled…)→ Compositor Effects(4.3 引入的全屏后期管线钩子)。
四、2D 渲染的暗知识
- 2D 光照:
PointLight2D/DirectionalLight2D+ CanvasModulate 做昼夜,材质混合模式(Add/Sub/Mix)做光效叠加; - 批处理(Batching):2D 靠「相同纹理的元素连续提交」合并 draw call。破坏合并的因素:交替使用不同纹理、跨
CanvasItem层级夹叠、使用 shader 的元素各自成批。同屏元素数暴涨时优先查批处理是否被打散; CanvasGroup:把一组子节点先画成整体再上效果(透明度、shader),解决「半透明重叠露馅」的经典问题;GradientTexture2D新增FILL_CONIC(4.7):CSS 锥形渐变,2D 里画「假 3D 高光」的利器。
五、画面调优清单(交给明天的你)
- 画质基线:Environment 里开
Screen-space AA(SMAA 4.5 起)、Fog、Glow(4.6 起默认 Screen 混合、tonemapping 前混合,为 HDR 铺路); - 色彩管线:2D 项目若开 HDR 2D(4.6 起全链路高精度),颜色渐变不再断带(debanding 同步进 Mobile 渲染器);
- 性能自查顺序:先 draw call(RenderingServer 监视器)→ 再 overdraw(半透明叠加)→ 再 shader 复杂度——第七级的结论会在第九级用到。
*本篇配图:HDR 光照管线。*