Unity_Shader学习(一) 基础篇

这篇博客介绍了Unity Shader的学习,以《Unity Shader入门精要》为教材,讲解了计算机图像的渲染流程,包括应用阶段、几何阶段和光栅化阶段。详细阐述了各个阶段的关键步骤,如顶点着色器、几何着色器、片元着色器的工作原理,以及变换矩阵、深度测试、模板测试等概念。
摘要由CSDN通过智能技术生成

本系列学习是以冯乐乐学姐编写的《UnityShader入门精要》为基础资料来学习的。据隔壁学霸介绍,此书有很多实用Shader而且讲解细致,所以在这里也向大家推荐一下。

 

计算机图像是通过渲染流水线的方式进行渲染的:分为应用阶段,几何阶段,光栅化阶段。(每个阶段本身通常也是一个子流水线)

 

应用阶段:

由CPU负责实现,分三步:

(1)把数据加载到显存当中。这一步是因为显卡访问显存的速度很快。

(2)设置渲染状态。这些渲染状态定义了场景中的网格是怎样被渲染的,使用哪种光源,材质等等。

(3)调用DrawCall。DrawCall是一个CPU发送给GPU的命令,它指向要被渲染的图元。

 

几何阶段:

由GPU负责实现,分以下步骤:

(1)顶点着色器。根据应用阶段输出的顶点信息,对每个顶点调用一次顶点着色器,主要工作为坐标变换和逐顶点光照。其基本工作是把顶点坐标从模型空间变换到裁剪空间。

(2)曲面细分着色器。

(3)几何着色器。

(4)裁剪。对部分在视野内的图元进行裁剪,用边界交点代替视野外的顶点。

(5)屏幕映射。三维变二维的一步操作,把场景渲染到窗口上。

 

光栅化阶段:(基于图元计算像素)

(1)三角形设置。由于几何阶段的输出是顶点信息,我们要基于顶点信息计算三角网格。

(2)三角形遍历。根据三角网格覆盖像素的情况获取片元。一个片元是很多状态的集合(坐标,深度等),它不是真正意义上的像素。

(3)片元着色器。

(4)逐片元操作。输出合并的阶段,片元经过模板测试,深度测试,混合之后输出到颜色缓冲区。

模板测试:

深度测试:

混合:

数学基础:

点乘:a·b=(a1,a2,a3)·(b1,b2,b3)=a1·b1+a2·b2+a3·b3

叉乘:aXb=(a1,a2,a3)X(b1,b2,b3)=(a2b3-a3b2, a3b1-a1b3, a1b2-a2b1)

逆矩阵:只有方阵才有逆矩阵,且MN=NM=I,I为单位矩阵,N是M的逆矩阵

正交矩阵:矩阵M与它的转置矩阵的乘积为单位矩阵,我们就说这个矩阵M是正交的。正交矩阵的每一行是一个单位矢量且这些矢量互相垂直。

变换矩阵:对向量进行变换操作,如:平移,缩放,旋转的矩阵。

平移矩阵:平移量为x,y,z

[1,0,0,x

0,1,0,y

0,0,1,z

0,0,0,1]

缩放矩阵:缩放因子为a,b,c

[a,0,0,0

0,b,0,0

0,0,c,0

0,0,0,1]

旋转矩阵:绕x轴旋转i度

[1,0,0,0

0,cos(i),-sin(i),0

0,sin(i),cos(i),0

0,0,0,1]

绕y轴旋转k度

[cos(k),0 ,sin(k),0

0,1,0,0

-sin(k) ,0,cos(k),0

0,0,0,1]

绕z轴旋转j度

[cos(j) ,-sin(j),0,0

sin(j) ,cos(j),0,0

0,0,1,0

0,0,0,1]

一般操作步骤为先缩放,后旋转,最后平移。可以得到复合矩阵:

[acos,0,asin,x

0,b,0,y

-csin,0,ccos,z

0,0,0,1]

 

如果变换一个矢量需要使用变换矩阵M,则对其法线向量的变换需要使用M的逆转置矩阵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只知道我要大开杀戒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值