Skip to content
/ bairen Public

是b站[霜狼_may]的视频为纲学习,参考毛星云的Real-Time Rendering 3rd 的总结和games101

Notifications You must be signed in to change notification settings

Phtato/bairen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 

Repository files navigation

注:是b站霜狼_may的视频为纲学习,参考毛星云的Real-Time Rendering 3rd 的总结和games101

第一章

1.1 渲染管线

数据通过渲染管线变成画面,在这个管线中所有环节环环相扣,上一个的输出是下一个的输入。分为以下几步

应用阶段->几何阶段->光栅化阶段->逐片元操作(->后处理)

应用阶段

主要任务就是将需要显示的东西都准备好,主要是CPU处理。这个是图像渲染管线上的第一个阶段,这段是完全软件实现的,所以可以完全控制。 准备场景数据:场景,数据,光源 加速算法,粗粒度剔除:裁剪看不到的光源和物体 设置渲染状态和参数:绘制设置,绘制顺序,渲染目标(输出到FrameBuffer或RenderTexture),渲染模式 调用drawcall,将数据发去显存

几何阶段

主要负责大部分多边形操作和顶点操作。 顶点着色:可编程 可选点处理:曲面细分,几何着色器(两者都是可选的) 投影:这个由GPU自动完成(顶点空间->投影空间完成) 裁剪:视锥体裁剪(CVV),背面剔除(可配置) 屏幕映射:屏幕映射主要目的就是找到屏幕上对应的坐标

顶点着色器中最重要的是MVP矩阵,这块儿比较复杂,games101讲的很好,之后总结下

曲面细分:可选步骤,通过一定的算法从一些顶点生成更多的顶点

几何着色器:通过给定的图元生成更多的图元。

投影:从3D空间转到2D空间的转换。一般分为正交投影和透视投影,这块儿之后根据games101补充

裁剪:处于裁剪空间以外的图形不显示,部分处于裁剪空间以外的图形会新增两个顶点,把超出部分裁掉

屏幕映射:裁剪后给出的是标准设备坐标系,这里需要映射到屏幕坐标系

光栅化阶段

主要为三角形设置和三角形遍历两个步骤,也有些会把像素着色器,片元着色器和混合颜色也算到光栅化阶段中

三角形设置:基于屏幕映射的结果,可以知道顶点像素的位置,计算三角形边界的过程就是三角形设置

三角形遍历:寻找所有被三角形覆盖的像素,这块儿有很多细节,例如如何判断三角形覆盖像素,如果判断的逻辑不够好会出现部分像素在画面中抖动等。

抗锯齿(MSAA):对每个像素中间判定是否被三角形覆盖的判定点增加(详细资料

逐片元操作

主要分为三个步骤:片元着色,颜色混合,输出到目标缓冲区。

片元着色:通过三个顶点的颜色线性插值得到内容颜色(就是那个经典的三点是红绿蓝的三角形)

颜色混合-透明度测试:透明度小于阈值的片元就不渲染,这个部分说实话虽然知道这个步骤如何,但是没明白为啥要这么做,在实际场景中的应用。

颜色混合-深度/模板测试:深度测试像是zbuffer的那个,这个我拿C++实现过,具体实现可以参考(之后再贴)模板测试:视频里没有说模板值代表着什么,这块儿不理解

输出缓冲:这里一句带过了,说明了这一步是可以配置的

混合:这里举得例子看上去像是解释了半透明如何被渲染

总结一个完整的渲染过程 1.准备一个模型 2.

About

是b站[霜狼_may]的视频为纲学习,参考毛星云的Real-Time Rendering 3rd 的总结和games101

Resources

Stars

Watchers

Forks