|
计算机图形学入门从Games101课程开始,记录部分学习内容
1. CG 和 CV
CG(Computer Graphics)计算机图形学,主要包括三维几何、动画模拟与物理仿真,以及渲染三部分。CV(Computer Vision)计算机视觉,更偏向图像处理,图像分割、识别、分类等。
课程中提到通过2D图像逆渲染3D属于CV,这个分类我是比较困惑的,我更偏向于这属于渲染的部分,属于CG。
2. Transform
渲染的目标是将3D模型渲染到2D图像,Transform涉及如何进行不同坐标系空间的转换。
模型坐标系 3D->世界坐标系3D->相机坐标系(视口坐标系)3D->图像坐标系2D
这里需要代数的数学基础,一些基本的矢量与矩阵运算,感觉将Y轴设置为 up direction,而不是Z轴,主要还是为了最后对齐到图像坐标系的(xy)。
2.1 模型的坐标系
模型的坐标系:三维模型通过CAD、MAYA、3DMAX等辅助工具设计时创建的,为了模型设计方便,通常会以模型的底面中心或者几何中心为原点,Y轴为up direction, -Z 为front方向进行设计,通常与OpenGL坐标系定义一致。
2.2 世界坐标系
世界坐标系:三维世界空间坐标系,右手系。
2.3 相机坐标系
参数 | 数据类型 | 备注 | fov | float | 注意这里需要指出 fov 的轴,默认是 vfov, fovY 垂直方向的视场角 | AspectRatio | float | AspectRatio = width / height | 2.4 图像坐标系
图像坐标系需要注意坐标系的原点,有些会在左下角,有些会在左上角,需要留心。
2.5 NDC
NDC(normalized Device coordinates) 归一化设备空间坐标系,这个坐标系是以相机为原点的[-1, 1]的一个三维空间坐标系,不再区别perspective 和 orthographics 投影,这个坐标系将真实世界near--far的空间压缩的一个相对坐标系,坐标值不具有空间的物理意义了。
3. Rasterization
将连续高频率空间采样为离散的低频图像,由于采样不足会导致锯齿(jaggies,空间域采样不足)、摩尔纹(moire, 欠采样)、车轮效应(时间域采样不足)等 aliasing, 需要对图像进行抗锯齿 AA(Anti-aliasing)。
3.1 AA算法
AA算法 | 算法描述 | SSAA(Super Sample Anti-aliasing) | 基于空域采样,通过单个像素的多次采样平均的方法进行处理,2*2或者 4*4, 耗时且占用内存 | MSAA(Multi-Sample Anti-aliasing) | 基于空域采样,SSAA的改进,单个图元不重复计算,考虑了像素的复用,优化采样点的布局 | TAA (Temporal AA) | 基于时序采样,考虑复用之前时刻像素的采样(渲染会相对容易获取准确的motion vector),需要注意动态目标鬼影的现象 | FXAA(Fast Approximate AA) | 后处理,检测边缘,进行边缘处理,会导致图像模糊 | SMAA(Enhanced mophological AA) | 后处理,FXAA的改进,精确检测距离、局部对比度、几何和对角线 | 3.1 SR算法, 低分辨率图像 -> 高分辨率图像
根本问题依然是采样不足,DLSS(Deep Learning Super Sampling)
4. Pipeline
注意这里的Pipeline主要是实时渲染的Pipeline。Real-Time Rendering Pipeline 渲染管线:
vertex process -> triangle process -> raterization -> fragment process -> frame buffer operations
4.1 Shader
Shader 将材质属性赋予三维模型, 在Real-Time Rendering中 shader与shadow 是分别计算的,shader仅仅是对obj目标着色,包括自遮挡,不考虑在其他目标上的阴影。
fragment process 需要指定shader的模型。
4.2 Z-Buffer
Z-Buffer记录图像逐像素的最小深度 depth image,在fragment process 步骤中进行可见性检测。
4.3 Texture mapping
texture是三维物体纹理,2D texture 对应Mesh的三维模型,3D texture 对应 Solid 三维模型;纹理的压缩,采样(mipmap)都需要再看看。
4.4 Shadow Mapping
以光的位置作为相机的位置,存储一张Z-Buffer 记录对光源的可见点最近距离,这样能根据这个距离推算出图像像素点对光源的可见性。该方法需要对每个光源都存储一张depth image,应用的场景是对光源的具体位置可知的,对于IBL的光源设置是不方便的。
5. Geometry
几何的描述可以通过显式(triangle meshes, Bezier surfaces, subdivision surfaces, NURBS,
point clouds ...)和隐式()两种方式。
5.1 Polygon Meshes 显式
存储顶点和polygon(一般是三角形或四边形),是最常见的三维几何存储方式。
在文件中记住顶点坐标v(x, y,z)、法向矢量vn(nx, ny, nz)、纹理坐标vt(u, v, (w)),以及顶点之间的连接方式f(v/vt/vn)。
三维几何细分中需要了解贝塞尔曲线,贝塞尔曲面,这些会用在渲染Pipeline中Geometry Process的部分,mesh曲面细分、曲面简化、和规则化。 |
|