浅谈shader编程

我一开始学习游戏开发的时候,并不清楚shader到底是什么东东,也感觉会不会shader对游戏开发并不是很重要,因为之前有一些学长告诉我,只要了解shader就够了,但是随着自己对游戏开发认知更深入,发现shader对于深入掌握游戏开发十分重要。

其实我是从一些游戏公司招聘信息上意识到shader编程的重要性的,基本上有一半的游戏公司在招聘游戏开发工程师的要求上都会提到shader,即使公司不要求会,也能成为自己简历的加分项,但学会shader编程的重要性不光如此。学会shader将会使自己对游戏引擎的认知更上一层楼(本人深有体会)。

其实目前网上有很多关于shader的介绍,但我觉得说的都不易理解,所以今天想通过比较简单的方式来介绍一下unity shader,如有错误与不足还请大家指正。

学习shader编程,首先就要熟记渲染管线,注意我是说熟记,这是我在网上找的一张示意图:

有点不懂是啥意思对吧,别急,我接下来解释:

这张图的意思是图形在gpu上的渲染流程:顶点着色器——光栅化——片元着色器——alpha测试——模板测试——深度测试——blend——GBuffer——frontBuffer——frameBuffer——呈现图片

这么一堆乱七八糟的,要怎么记呢,其实很好记:首先是顶点着色器,它是用来计算顶点的颜色和使用矩阵变换将物体的世界坐标转换到相机坐标,姑且了解这两个功能就好;我们都知道,在使用unity的时候每一个模型都有世界坐标这个属性,模型有mesh render 和mesh filter这两个组件,这两个组件就是用来存放模型顶点和法线等信息的,我们想象一下,只有模型在相机视野里面才能被看到,但是电脑是怎么知道模型在相机视野内呢,其实就是通过矩阵转换将物体的世界坐标转换到相机坐标才被识别的,这样理解是不是很好记。

然后是光栅化,它的作用就只有一个:将顶点信息转换为屏幕像素,用于显示模型。这个没啥好解释的。

片元着色器是另一个重点:它的作用是纹理寻址,就是说,模型的贴图由它来处理。大家有没有想过这样一个问题,模型上的贴图是如何与模型相匹配的。其实这个工作就是由片元着色器完成的,只要是使模型贴图“动起来”的操作,基本上都是在片元着色器里编程实现的。

然后就是“三个测试”,在模型被处理以后,还需要gpu对模型像素进行“严格”测试,只有通过测试的像素才能被显示出来,剩下的还要被淘汰掉,这就是三个测试的主要作用。而Blend后基本都是由电脑控制,不需要我们深入了解。

是不是感觉渲染流水线也不是很难?其实只要我们理解它的流程与作用,就能理解这个过程并牢记于心了,也只有记住这个渲染过程我们才能知道在哪一个模块编程做那些事,今天就浅谈一下shader入门之渲染流程,如有不足还望指点。同时,分享给大家一份关于shader编程的教程,讲解十分细致,公众号回复游戏图形学即可获得教程。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36696486/article/details/84146642
今日推荐