802 words
4 minutes
什么是帧缓冲(Frame Buffer)?
2025-01-27
No Tags

当然可以!帧缓冲(Framebuffer)是现代图形渲染管线中的核心概念之一。下面我从渲染管线的结构、帧缓冲的作用和所在阶段来系统讲解。


1. 什么是帧缓冲(Framebuffer)?#

  • 帧缓冲本质上是一块显存中的内存区域,用于存储最终要显示在屏幕上的像素数据。注意是最终。
  • 它通常包含颜色缓冲区(Color Buffer)、深度缓冲区(Depth Buffer)、有时还包括模板缓冲区(Stencil Buffer)。

2. 帧缓冲在渲染管线中的位置#

A. 图形渲染管线主要阶段#

  1. 应用阶段
    • 场景管理、逻辑、摄像机、渲染命令的下达
  2. 几何处理阶段
    • 顶点着色(Vertex Shader)、投影、变换、裁剪
  3. 光栅化阶段
    • 将三角形转为像素(Fragment/Pixel)
  4. 片元处理阶段
    • 片元着色(Fragment/Pixel Shader),决定每个像素的颜色和深度
  5. 输出合并阶段(Output Merger)
    • 将片元着色器输出的颜色、深度等数据,写入帧缓冲
  6. 显示(Scan-out)
    • 将帧缓冲内容传给显示器

帧缓冲正好处在

  • 片元着色器输出最终显示之间。
  • 是所有像素“最终落地”的地方。

3. 帧缓冲的结构#

  • 颜色缓冲区:存储每个像素的最终颜色(通常是RGBA,8bit/10bit/16bit/float等)。
  • 深度缓冲区:存储每个像素的深度值(用于遮挡判断)。
  • 模板缓冲区:用于高级像素操作(如遮罩、分区渲染等)。

多重帧缓冲(MRT):现代引擎还支持一次渲染输出到多个帧缓冲(G-buffer、延迟渲染等)。


4. 帧缓冲的作用#

  1. 存储最终像素结果:所有片元着色器输出的颜色/深度/模板值都写入帧缓冲。
  2. 后处理/屏幕特效的输入:如Bloom、色调映射、抗锯齿等后期处理都以帧缓冲为输入。
  3. 多阶段渲染的中转站:比如先把一帧渲染到离屏帧缓冲(Render Texture),再做特效,最后再输出到主帧缓冲/屏幕。

5. 帧缓冲的“生命周期”#

  • 每一帧渲染开始时,帧缓冲会清空/重置(clear)。
  • 场景中所有可见物体经过渲染管线,最终像素值被写入帧缓冲。
  • 一帧渲染完毕,帧缓冲的内容被扫描输出到显示器,成为你看到的画面。

6. 帧缓冲和色彩空间/色深的关系#

  • 帧缓冲的格式决定它能存储的色深(8bit/10bit/float等),影响HDR/色彩精度。
  • 后处理通常直接操作帧缓冲的浮点数值,实现色彩调整、色调映射等。

7. 一句话总结#

帧缓冲是渲染管线中负责存储最终像素颜色、深度等信息的内存区域,处于片元着色器输出和画面显示之间,是所有像素“最终汇合与输出”的关键节点。


可视化流程(简化)#

[顶点数据]
[顶点着色器]
[光栅化/插值]
[片元着色器]
[帧缓冲(颜色、深度、模板)] ← 后处理等特效也在此基础上进行
[显示器]
什么是帧缓冲(Frame Buffer)?
https://fuwari.vercel.app/posts/什么是帧缓冲frame-buffer/
Author
Axon
Published at
2025-01-27
License
CC BY-NC-SA 4.0