美文网首页
游戏图形学入门知识整理

游戏图形学入门知识整理

作者: 星易乾川 | 来源:发表于2021-03-23 17:29 被阅读0次
    分享和整理一些觉得不错的教程和理解

    在此感谢各位老师!

    教程:
    线性代数基础:https://www.bilibili.com/video/BV1ib411t7YR?p=1
    GAMES101-现代计算机图形学入门-闫令琪:https://www.bilibili.com/video/BV1X7411F744
    GAMES202-高质量实时渲染-闫令琪:https://www.bilibili.com/video/BV1YK4y1T7yY
    华中科技大学-计算机图形学-万琳:https://www.bilibili.com/video/BV1Zj411f7S3?p=13&spm_id_from=pageDriver
    论坛:
    计算机图形学与混合现实研讨会
    博客:
    冯乐乐(Shader入门精要)http://candycat1992.github.io/

    GPU渲染管线的工作过程

    image.png

    几何阶段

    空间变换:模型空间(左手)→世界空间(左手)→观察空间(右手)
    image.png
    投影准备:观察空间→观察空间(投影变换)→观察空间(裁剪空间)

    经过以上变换,此时物体处在裁剪空间,
    ★下图需要注意,每个教材的解释略有不同,下图直接就齐次除法变成规范化的了
    实际上这里只是为真正是投影(齐次除法)做准备,此时裁剪面依然是梯形四棱锥形态
    目的:
    1.为后面真正投影做准备,赋予W特殊意义。
    2.对X,Y,Z缩放,W作为范围值,便于裁剪。
    裁剪空间之前,W=0表示矢量方向,W=1表示点,投影变换之后,W的意义改变了,如下
    投影变换对X,Y,Z分量进行缩放,W分量变成-z,如X,Y,Z在W范围内[-w,w],说明该顶点在裁剪空间内
    Unity下,观察空间为右手坐标系,列矩阵右乘,投影变换后Z分量范围为[-w,w]
    DirectX,投影变换后Z为[0,w]
    进入裁剪空间后,右手坐标系,转为左手坐标系,离摄像机越远Z值越大


    image.png
    屏幕映射:规范化的观察空间(裁剪)→屏幕空间(真正的投影)

    齐次除法=透视除法=归一化的设备坐标NDC(OpenGL)=W分量除以X,Y,Z分量
    裁剪空间→NDC(经过齐次除法后,变换到一个立方体内)
    立方体X,Y,Z分量的范围是[1,-1](OpenGL)
    DirectX中Z分量是[0,1]
    Unity=OpenGL
    Unity中屏幕空间左下角是[0,0],右上角是[pixelWidth,pixelHeight]
    由于当前的X,Y都是[1,-1],所以屏幕映射就是一个缩放的过程
    此时Z分量经过齐次除法,也就是除W,得到的数值直接存进了深度缓冲区,这步是自动的,当然也可手动
    W分量的意义主要是充当分母来得到NDC

    image.png

    以上就是从模型空间变换到屏幕坐标的过程

    光栅化阶段

    image.png
    下面说下关于屏幕坐标的问题

    视口空间坐标公式如下


    image.png

    上面公式的思想就是,首先对裁剪空间下的坐标进行齐次除法,得到范围在[ − 1, 1] 的 NDC,然后再将其映射到范围在[ 0, 1] 的视口空间下的坐标。
    ComputScreenPos 用法


    image.png
    image.png
    Unity中先在顶点着色器里将其映射到范围[ 0, W] ,然后再片段着色器中自己手动齐次除法变为[ 0, 1] 。

    z和w值就是裁剪空间下的值。
    详情请看ComputScreenPos ,其定义位于UnityCG.cginc中

    常用数学知识

    Sin:对边比斜边
    Cos:邻边比斜边
    Tan:对边比临边。

    相关文章

      网友评论

          本文标题:游戏图形学入门知识整理

          本文链接:https://www.haomeiwen.com/subject/zwmwcltx.html