目录
相关阅读
一、真正的shader
我们简单理解为研究shader的有三家公司:
1. OpenGL Shading Language,简称 GLSL
2. High Level Shading Language, 简称 HLSL
3. C for Graphic,简称 Cg 语言
为什么会有3个呢?因为做手机的有小米、华为、苹果等~
总的来说,如果你想研究,也可以做。
unity它要选一个,或者选几个,和你买手机一样的,按需选购。
这三个有什么不一样呢?
1. GLSL,老大哥,资历老,时间久,支持的平台少。
2. HLSL,效果好,支持的平台比GLSL多,比CG少。
3. CG,支持的平台非常多。
想要深入研究的可以自己再百度哦,这里只是比喻一下。
uniy开始觉得CG好啊,就先用CG,用着用着,HLSL发展的越来越好了,就换成了HLSL,但是之前的CG也在用。(所以开始学习内置unity的shader我们先学CG,后面学到其他管线了,我们再去写HLSL)
二、unity的shader
unity写的shader并不是真正意义上的shader。
新版官方解释:
为 Unity 编写着色器时,使用以下语言:
- 一种称为 HLSL 的编程语言。使用它可编写着色器程序本身。
- 一种称为 ShaderLab 的 Unity 特定语言。使用它可定义 Shader 对象,它充当着色器程序的容器。
简单解释:真正的shader语言只管着色,是无法和unity进行衔接的,为了可以用unity控制着色,就把脚本分成了两个部分,一个叫HLSL,另一个叫ShaderLab,所以一个脚本里会包含两个部分,ShaderLab部分和HLSL部分。
所以,在一个脚本里,需要学两种语法,一个是ShaderLab,一个是HLSL。
up主的补充解释:shaderLab部分主要和unity进行衔接,比如,你想通过unity面板选个颜色,这部分就是shaderLab来写,HLSL主要真正的去着色。
三、创建一个shader
在创建时,选前三种任意一个都可以(如图1所示),后面两个暂时不讲,他们的区别只是里面预制的内容是不一样的,就像你写的不同的脚本,都是C#编写,只是里面的内容不一样。
![](https://i-blog.csdnimg.cn/blog_migrate/82ac7eeb155030327672126a8e9462ac.png)
四、内容解读
1 shader一直都在
shader在unity里,它是一直存在的,且自己正常运作的,运作流程就是之前写的文章。
Unity | Shader基础知识(什么是shader)_unity shader-CSDN博客
2 我们写shader在写什么
我们其实是在选择性的干预其中一个步骤,导致它最后输出出来的结果不同。
例子(如图2所示):我们的手电筒一直都在工作,我如果拿手去挡了一部分光,就会出现手影,在这个过程中,我们没有去改手电筒,而是去干预了光线(挡住了光)
![](https://i-blog.csdnimg.cn/blog_migrate/347727afb048084e656dc1953c013f8d.png)
结论:我们写shader也只是把其中一部分拿出来,进行干预,其他部分保持不变,最后结果就会出现变化。
四、没有被干预的shader(最简单的shader)
上文创建了一个shader,我们把里面所有内容都删除。仅留下图中内容(如图3所示)。
![](https://i-blog.csdnimg.cn/blog_migrate/9febabbffa2ff1798bc8279a7c5c1324.png)
留下的“Custom/001”是这个shader在unity里保存的位置(如图4所示),当你在材质中寻找它时,也是通过这个位置去寻找的。我们将这个Shader放入材质后,发现是玫红色(如图5所示),这里不太明白,也可以去看之前写的内容:Unity | Shader(着色器)和material(材质)的关系-CSDN博客
![](https://i-blog.csdnimg.cn/blog_migrate/38525fafbbb8a8c6f92a066885700673.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff65444d39d13b35f332afc01f427acb.png)
PS:如果以前经常用材质的小伙伴发现,之前如果材质丢失,就显示的红色。
所以,材质丢失 = shader空了,显示了最本来的面目。
五、下节预告
因为了解了空白Shader,我们就希望去学习如何写Shader,
下一节,我们讲解基础的Shader语法。