GAMES101渲染部分(1)
前几天面试被说基础不够,思来想去,决定二刷GAMES101,相信在学习了一年之后,再看这门课应该会有不一样的收获。
这次仅对其中渲染部分知识进行汇总。
光栅化到光线追踪前。
光栅化
-
点是否在三角形内
-
三次叉积
- 求重心坐标
- 向任意方向发射射线
-
-
采样在图形学中广泛存在。光栅化可以看成是对屏幕中心是否在三角形内部的采样。
反走样
- 增加采样率
- SSAA:直接渲染到一张分辨率更大的图像上再进行下采样。
- 先做模糊再做采样:相当于把高频信息拿掉,这样哪怕采样率比较低也不至于走样。
- MSAA:可以理解成对一个像素内部做卷积,相当于求像素内部被三角形覆盖的面积占像素面积的比例。实际应用时,会做边缘检测,只对边缘进行MSAA
- FXAA(Fast Approximate AA):做边缘检测,对边缘容易产生锯齿的像素进行AA。消耗低。
-
TAA(Temporal AA):通过附近帧进行反走样。
- 超分辨率(和抗锯齿并不一样)
- DLSS
投影矫正
(被坑了无数次的问题
不能直接运用屏幕空间(投影平面)下的点计算中心坐标,正确的插值方法应该是在3D空间下进行插值。
具体参见Mathematics for 3D Game Programming and Computer Graphics
纹理映射
Texture Magnification(纹理放大),起因是纹理太小了。
纹理上的一个纹素映射到屏幕上的时候覆盖了多个像素。屏幕上的多个像素映射到了同一个纹素上去(映射到了几个纹素之间)。
- Nearest
- Bilinear
- Bicubic
Texture Minification(纹理缩小),纹理太大了。
走样
纹理上的一个纹素映射到屏幕上的时候覆盖不了一个像素。屏幕上的一个像素映射到了多个纹素上去。
走样的问题:信号变化过快,采样频率跟不上
- 采用更高频的采样方法,跟上信号变化:可以用超采样加大采样率,但是消耗过大。
- 实际上采用MipMap将信号变化进行改变
点查询问题/范围查询问题
MipMap
范围查询:Fast + Approximate + Square 快+近似+正方形
凹凸贴图
如何利用凹凸贴图更改法线
在切线空间下对uv方向高度导数进行计算之后求出扰动后的法线。
阴影
- 一种图像空间的做法(不需要知道场景中的几何信息的)
- 必须处理走样
- shadow bias,比较时加上的值
- 考虑生成阴影图的分辨率,如果阴影图分辨率过小可能会导致走样
- 必须处理走样