找回密码
 立即注册
查看: 589|回复: 0

游戏图形学入门知识整理

[复制链接]
发表于 2021-3-24 18:50 | 显示全部楼层 |阅读模式
分享和整理一些觉得不错的教程和理解


在此感谢各位老师!

教程:
线性代数基础: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:对边比临边。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 17:01 , Processed in 0.090131 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表