2光栅化

定义视锥的话,需要定义一个宽高比和垂直可视角度
光栅,德语的屏幕,光栅化就是在屏幕上显示出来
视口变换:[-1,1]的立方体映射到[width,height],先不管z
采样:1判断像素点在不在三角形内‘
光栅化:对像素点进行赋值

2.1反走样和深度缓冲

  • 一些失真

    • 走样:锯齿的别名
    • 摩尔纹
    • 车轮效应
  • 原因:采样率太低

  • 解决办法:先滤波(模糊),再采样

    实际:每个像素不再是二值,而是取像素内颜色的平均

    • MSAA:像素内不同颜色面积不好求,变为求4个点的覆盖率
    • FXAA
    • TAA

超分辨率:低分辨率到高分辨率

3着色

3.1遮挡

  • 画家算法:先画远的,再画近的,不行,有bug
  • Z-buffering深度缓冲:深度表,一直更新最小深度
    处理不了透明物体

3.2着色模型

着色定义:对物体应用不同材质

区域分类:高光,漫反射,环境光

  • 漫反射
    输入:观测方向v,法线方向n,光照方向i,表面参数
    着色≠阴影
    输出:着色点亮度Ld公式:正比于入射角,反比于距离

  • 高光
    观察方向和镜面反射方向接近,即半程向量和法线方向接近
    输出:Ls

  • 环境光

  • 输出:La,常数

3.3着色频率

平面着色,求三角形平面法线,着色

顶点着色,求三角形顶点法线,着色,三角形内部颜色插值
(求法:周围平面法线按面积加权平均)

像素着色:插值求三角形内部每个像素法线,着色

3.4图形管线(可渲染管线)

在着色编程中,只需要对1个顶点或像素进行编程

顶点操作,就叫顶点着色器

像素操作,就叫像素着色器,片元着色器

GPU:图形管线的硬件实现,其中有一部分可编程(着色器)

  • Vertex Processing:一系列变换
  • Triangle Processing:顶点变成三角形
  • Rasterization:光栅化
  • Fragment Processing:片元处理,包括着色
  • Framebuffer Operations:输出合并,缓冲区测试输出

3.5纹理映射

地球仪→映射到展开后的皮(贴图)

三角形的顶点映射到纹理uv坐标上

  • 插值:重心坐标

    要先在三维插值,再投影,不然重心坐标会变

  • 纹理过小问题

    映射后的纹理坐标非整数
    解决方法:双线性插值

  • 纹理过大

    映射后的纹理坐标是个区域,太大了,只取单个样本会导致摩尔纹(走样)

    解决方法:Mipmap,类似范围查询求平均值,特点快,近似,方形
    三线性插值

    各向异性过滤

  • 纹理应用

    • 表示环境光
    • 球形环境贴图
    • 立方体贴图(天空盒)
    • 凹凸/法线贴图
    • 位移贴图,真·凹凸
    • 动态曲面细分
    • 三维纹理