Unity 中的帧缓冲区、深度缓冲区与模板缓冲区:一文吃透

这篇文章将尝试讲清楚三个最常见却最容易混淆的图形学“缓冲区”——帧缓冲区(Frame Buffer)深度缓冲区(Depth Buffer / Z-Buffer)模板缓冲区(Stencil Buffer)。内容覆盖工作原理、Unity 中的使用方式、常见坑与实战建议。


总览:它们分别解决什么问题?

  • 帧缓冲区:存放“最终要显示的像素颜色”。你看到的画面最终写到这里(屏幕后备缓冲或 RenderTexture)。

  • 深度缓冲区:存放“每个像素离相机的深度”,用于遮挡判断(近的挡住远的)、早期剔除与抗过绘。

  • 模板缓冲区:每像素 8 位整数,提供条件渲染/掩码能力(例如 UI Mask、局部后处理、Portals 等)。

片段级流水线中,模板测试与深度测试同属“每片段测试阶段”(在 OpenGL 中通常先做模板再做深度;在 D3D 中两者同阶段并可针对不同通过/失败配置不同操作)。你可以分别指定当 ZTest 通过/失败 时模板值该如何修改,因此不需要假定固定顺序


1. 帧缓冲区(Frame Buffer)

1.1 它是什么

显存里承接绘制结果的“画布”。通常包含:

  • 颜色附件(一个或多个,MRT):RGBA 纹理,可能是 LDR(如 ARGB32)或 HDR(如 ARGBHalf)。

  • 可选深度/模板附件:和颜色附件绑定到同一个渲染目标上(例如 D24S8)。

Unity 中的两类“帧缓冲”:

  1. 默认后备缓冲(Backbuffer):相机直接画到屏幕。

  2. RenderTexture:自定义帧缓冲(Camera.targetTexture),用于离屏渲染、后处理链、多相机合成、UI 贴图等。

1.2 常见设置与注意点

  • 色彩空间:Linear/ Gamma 与 sRGB 采样/写入一致性。

  • HDR:需要更高动态范围(Bloom、曝光),选用 ARGBHalf 等。

  • MRT:延迟渲染/自定义 GBuffer。

  • MSAA:多重采样抗锯齿,颜色与深度/模板可多样本存储。

  • 平台兼容性:移动端对某些颜色/深度格式或 MSAA + HDR 组合有限制。


2. 深度缓冲区(Depth Buffer)

2.1 作用与原理

  • 遮挡判断:对同一屏幕像素的多个片段,根据深度比较仅保留“更近”的那一个。

  • 早期深度测试(Early-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值