unity shader入门精要_Shader从入门到跑路(1):朴实无华的图形学基础

36d0d203750c76550a250ebadc76182d.png

前言:

Unity Shader的学习的学习路径是非常陡峭的,笔者在学习的时候走了不少歪路,在这里权当分享一下学习过的内容,也是给自己做一个记录了

准备:

  1. 基本的Unity使用经验
  2. 天不怕地不怕的心态

枯燥但必须得搞清楚的图形学内容

因为笔者的目的主要是想介绍shader,因此书本上的图形学内容这里就不深入讲了。在传统的图形处理中,我们一般需要两种程序,一个叫Vertex Shader,另一个叫Fragment Shader,他们是一对好伙伴,往后的日子也会时常与他们打交道。

Vertex Shader负责获取处理的网格(Mesh)资讯然后进行处理,比方说我们想渲染一个正方形,那么首先就得先获取这个正方形的位置,纹理等信息,然后做一些矩阵转换传递给Fragment Shader。(关于矩阵转换的事情之后再讲,大概知道有这么回事就好)。

3b6329e0ab71f0d3ae68da30e2ffb5d2.png

网格中的像素经过处理之后被存储在Fragments中被传给Fragment Shader。当Vertex Shader处理顶点的时候,它会将平均每三个顶点组成一个Fragment,最终整个被处理过的图像被称作Fragments。这个过程用图形学的知识来讲解颇为复杂,有兴趣的读者可以找冯女神的书看看。Fragment Shader其实就是进行核心计算的部分。

895701e96c022c6a5685c0cc23bbda37.png

自问自答

既然Vertex Shader已经将网格的数据做好了空间转换,那这些信息不是已经可以用了吗?为什么还需要一个Fragment Shader呢不是多此一举吗?哎,别急,听我慢慢解释。这是因为在图像处理当中,我们并不一定需要用到所有的像素数据,因此有些数据需要被修改,而有些则直接弃之不用。比如在我们在实作模糊效果时,其中一种思路便是通过把一个像素周边的像素合并成一个相同颜色的像素实现的,这些内容过于复杂,无法交由CPU来计算,只能由GPU代劳,因此也可以将Vertex Shader看作和CPU打交道的程序,而Fragment则是负责GPU的内容。

f4b7c3a4390d35fe08f353f3883ff18e.png

于是,在Fragment Shader中,有些像素被保留,而另一些则可能被丢掉,接下来Fragment Shader讲处理好的内容传给颜色缓冲区(Color Buffer),结束了它的工作。后面的内容超出了本文的内容,就不延伸讲了。

我问你答

Vertex Shader的输入从哪里来?

Fragment Shader的输入哪里来?

参考:

candycat1992/Unity_Shaders_Book​github.com
56d50ed317f8d053a1f860c9465b186c.png

下一章:

俊銘:Shader从入门到跑路(2):Shader是个万丈深渊​zhuanlan.zhihu.com
0590c1bf4e82464b734374bcc1c3ac43.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值