从渲染管线理解Shader

一、CPU:

在Unity的运行过程中,CPU的作用就是加载模型,并把模型通过MeshRender这个组件渲染出来。那么实质上MeshRender组件的作用就是将模型的顶点信息,UV信息,法线等信息传递给GPU。

二、GPU:

渲染管线(不了解渲染管线可以先看:https://blog.youkuaiyun.com/sindyra/article/details/104280220,这里实际上是一个补充):

顶点着色器 ——> 光栅化 ——> 片段着色器 ——> Apha测试 ——> 模板测试 ——> 深度测试 ——> Blend
——> GBuffer  ——>  fronBuffer  ——>  frameBuffer  ——> 显示器

顶点着色器:计算顶点的颜色,把顶点的本地坐标变为视图(相机)坐标。
光栅化:将各顶点所构成的图形的每个像素计算并显示出来。
片段着色器:纹理采样(将纹理中的像素点取出,赋给即将渲染的每个像素点)。
                     逐片元计算(像素跟灯光计算)。
Apha测试:挑选合格的像素显示,所谓合格就是根据apha值,如果apha小于多少就不显示。
模板测试:挑选达到条件的模板值的像素。
深度测试:挑选符合深度条件的像素,据摄像机远的像素深度高,被遮挡了就不显示。
Blend:   将当前要渲染的像素和已经渲染出来的像素进行混合运算。

顶点着色器和片段着色器是我们可以使用Shader进行编程的,也就是Shader可以实现或者改变其中一些渲染效果。
一句话概括:shader 是可编程图形管线的算法片段。
它主要分为两类,Vertex Shader和 Frament Shader也就是对应的顶点着色器和片元着色器。

Vertex Shader顶点处理shader(计算机中图形都是无数个顶点组成的)
Frament Shader片段Shader(也可以说是顶点颜色填充处理)

顶点着色器(Vertex Shader):

顶点着色器的处理单位是点,所以输入的每个顶点都会调用一次顶点着色器,顶点着色器本身不可以创建或销毁顶点,而且无法得到其他顶点的关系。顶点着色器的主要工作:坐标变换和逐顶点光照。同时为下一阶段准备数据。

坐标转换:顶点着色器可以在这个阶段进一步改变顶点位置,在顶点动画中非常有用,可以模拟水面,布料等。

一个最基本的顶点着色器必须完成的工作是,把顶点坐标从模拟空间转换到齐次裁剪空间。

例子:o.pos=mul(UNITY_MVP,v.postions);

顶点坐标转换齐次裁剪空间,经过透视剔除后得到

归一化设备坐标(Normalized Device Coordinates,NDC)

OpenGL 的z值是[-1.1] DirectX的z值是[0,1]

顶点着色器的常见输出路径是顶点--片元,也可以发送给曲面细分或几何着色器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值