目录

一、真正的shader

二、unity的shader

二、创建一个shader

三、内容解读

1 shader一直都在

2 我们写shader在写什么

四、没有被干预的shader(最简单的shader)

五、下节预告


相关阅读

编写着色器概述 - Unity 手册


一、真正的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#编写,只是里面的内容不一样。

图1 创建Shader的界面

四、内容解读

1 shader一直都在

shader在unity里,它是一直存在的,且自己正常运作的,运作流程就是之前写的文章。

Unity | Shader基础知识(什么是shader)_unity shader-CSDN博客

2 我们写shader在写什么

我们其实是在选择性的干预其中一个步骤,导致它最后输出出来的结果不同。

例子(如图2所示):我们的手电筒一直都在工作,我如果拿手去挡了一部分光,就会出现手影,在这个过程中,我们没有去改手电筒,而是去干预了光线(挡住了光)

图2 灯光下的手影

结论:我们写shader也只是把其中一部分拿出来,进行干预,其他部分保持不变,最后结果就会出现变化。

四、没有被干预的shader(最简单的shader)

上文创建了一个shader,我们把里面所有内容都删除。仅留下图中内容(如图3所示)。

图3 余下的代码

留下的“Custom/001”是这个shader在unity里保存的位置(如图4所示),当你在材质中寻找它时,也是通过这个位置去寻找的。我们将这个Shader放入材质后,发现是玫红色(如图5所示),这里不太明白,也可以去看之前写的内容:Unity | Shader(着色器)和material(材质)的关系-CSDN博客

图4 Shader所在位置
图5 球体上了玫红材质

PS:如果以前经常用材质的小伙伴发现,之前如果材质丢失,就显示的红色。

所以,材质丢失 = shader空了,显示了最本来的面目。

五、下节预告

因为了解了空白Shader,我们就希望去学习如何写Shader,

下一节,我们讲解基础的Shader语法

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐