欢迎光临散文网 会员登陆 & 注册

了解Unity Shader

2023-03-02 13:31 作者:依稀爱恋  | 我要投稿

# Shader编程语言

Shader是一段代码,运行在GPU的程序,目前主流的有三种语言:基于OpenGL的OpenGL Shading Language,简称GLSL。基于DirectX的High Level Shading Language,简称HLSL。还有NVIDIA公司的C for Graphic,简称Cg语言。


GLSL与HLSL分别是基于OpenGL和Direct3D的接口,两者不能混用。

由于GLSL争斗良久,所以需要研发一种新的语言,那么Cg也就应运而生了,它与OpenGL、Direct3D不是同一层次的语言,而是他们的上层。

Cg是真正的跨平台,可根据不同的平台编译成相应的语言,由NVIDIA公司和微软公司相互协作开发,在语法上达到了一致,也导致了Cg与HLSL的语法极其相似。下面我们在介绍时一般会这样写Cg/HLSL。


# Unity Shader


Shader编程语言有GLSL、HLSL、Cg等


在Unity中我们只需要编写一份Shader程序,Unity最终会根据不同的平台来编绎成不同的着色器语言。


官方的建议是用Cg/HLSL来编写,当然也可以使用GLSL,主要是因为Cg/HLSL有更好的跨平台性,更倾向于使用Cg/HLSL来编写Shader程序。


Unity Shader严格来说并不是传统上的Shader,而是Unity自身封装后的一种便于书写的Shader,又称为ShaderLab。


# 图形管线

在编写Shader程序前,我们先来看看渲染管线。

我们通过计算机看到的一张图片,是计算机需要从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像。

那么这张图像是否可以编程,修改它的最终展示呢?答案是肯定的,我们可以通过Shader编程最终修改图像的显示。

如何通过Shader编程来实现?要先了解渲染流程,了解在渲染流程那部分我们是可编程控制的。


渲染流程分成3个阶段:应用阶段(Application Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)。

应用阶段(Application Stage)主要由CPU来完成,几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)由GPU来完成,我们主要讲后面两个阶段。

在整个渲染流程中,有两部分是我们可以编程控制的,那便是顶点着色器、片元着色器。

## 顶点着色器

顶点着色器(Vertex Shader)是完全可编程的,它通常用于实现顶点的空间变换、顶点着色等功能。而像素的其他部分由线性插值的方式来实现。

顶点着色器(Vertex Shader)是流水线的第一个阶段,它的输入来自于CPU。顶点着色器的处理单位是顶点,也就是说,输入进来的每个顶点都会调用一次顶点着色器。顶点着色器本身不可以创建或者销毁任何顶点,而且无法得到顶点与顶点之间的关系。例如,我们无法得知两个顶点是否属于同一个三角网格。但正是因为这样的相互独立性,GPU可以利用本身的特性并行化处理每一个顶点,这意味着这一阶段的处理速度会很快。顶点着色器需要完成的工作主要有:坐标变换和逐顶点光照。

## 片元着色器

片元着色器(Fragment Shader),则是完全可编程的,它用于实现逐片元(Per-Fragment)的着色操作。这个更像是对每一个像素点进行操作,所以对比顶点着色器更加消耗性能。





了解Unity Shader的评论 (共 条)

分享到微博请遵守国家法律