什么是shader?教你明白shader到底是什么?
最近boss直聘有很多的unity 开发岗位写了很多要求既要会unity profiler又要什么熟练了解状态机逻辑又要会写shader,很多unity客户端开发岗甚至是初级的都明确写着要会shader的编写,可是问题是人家组件都弄不明白你就让他搞gpu方面的东西了,所以今天后面几天我会给大家出几期进阶组件的基础教程分别讲述shader/material/mesh/粒子系统particle system/后处理post-process等组件的基础小白教学。今天我们就来讲讲第一个什么是shader。
shader到底是什么?
shader 简单说就是着色器,也可以理解成「给 GPU(显卡)写的渲染指令集」—— 它决定了游戏里的物体,最终在屏幕上以某种氛围画出来,是游戏画面质感的 “底层设计师”。
很多新手刚接触 Unity 时,都会有个误区:“我找不到 Shader 组件,怎么把 Shader 挂到物体上?” 这里我们先把三个核心组件分别是mesh/material/shader的链接讲清楚,而这三个就是桃园三结义基本不能三个缺少。
mesh网格是定义给游戏角色基础的建模部分让他成为一个白模在编辑器中出现,而material就是颜料桶,则是给这个白模的各个部位赋予了各种颜色颜色,而shader就是定义了这种部位颜色的各个质感,是否反光是否修饰,而这个就是shader组件的作用。
首先这三个属于是刀哥虎哥和杀马特团长是不能分开的,我们先拿一个例子简单说明,如图所示我们直接系统默认一个创建一个cube,cube也就是3d正方体

我们就拿Unity里最基础的3D正方体来说事,如图,它自带的这几个组件缺一不可: 你要是把Mesh Filter(网格过滤器) 删了,正方体直接就没了,因为它装的是Mesh网格,也就是模型的基础白模骨架,没它就没有建模外形; 你也绝对不能删Mesh Renderer(网格渲染器),它的作用就是拿着Material材质,给这个白模网格上色、渲染出来,没它材质根本用不了。 而大家在材质面板下方看到的 Shader 选项,就是我们今天要讲的着色器本身。他负责了材料的反光等高阶属性, 从这里就能看出来:Mesh、Material、Shader这三个是绑定死的,谁也离不开谁。 流程其实特别简单: 先有 Mesh网格 做出白模外形, 再创建 Material材质 当颜料, 最后通过 Mesh Renderer 把材质拖进去渲染, 而材质的反光、质感、光影表现这些效果,全部都要在Material属性 Shader 里设置调节。 简单一句话捋顺: 你想通过 Shader 调整模型的渲染质感、反光效果,必须先有 Material 这个“颜料”;有了颜料才能调 Shader 质感;颜料要画在模型上,又必须依托 Mesh 白模和渲染器。三者环环相扣,少一个都渲染不出来。 额外提一句:2D精灵对应的Shader逻辑和3D不太一样,不严格按这套流程走,本篇我们先只讲3D,2D部分就不展开说了。当然材料也有一些特殊情况如shader改不了默认基础standard,材料丢失经典变粉红,如果大家想听我们后面会单独找一期讲下Material的几个问题。
好的说明了整体架构,我们现在回到正题,我们得知只有在material里面才能修改shader,咋们就先创建一个材料颜色右键create 如图
创建完成后我们点击编辑器查看可以看到新建的材料默认就是standard如图

由于篇幅限制我们今天只讲标准standard各个属性,大家也可以创建自定义shader

假设我创建了第一个standard surface 的shader我们就能在材质的shader的自定义类中找到他的名字如图我创建了createshader这里就会出现
如果创建unlit的shader就会在unlit中出现,unlit为默认。
这两个有什么区别呢
Unlit Shader 是最基础的无反光、无光照简易着色器,只负责纯色 / 纹理渲染;而我们自己创建的 Standard Surface Shader,既可以像官方 Standard 一样在材质面板调节反光、金属度等渲染属性,又能通过代码自由新增更多自定义参数,最终实现比官方 Standard 更丰富、更个性化的高级渲染效果,是真正意义上的自定义着色器。而hr要你会的就是通过cg的gpu语言让你实现自定义custom 的shader的高级编辑实现自定义光追的渲染。
(顺带一提:2D 精灵的 Shader 逻辑与此不同,本篇先不展开讨论)
Unlit和Standard Surface Shader自定义我们按下不表后面我们会给大家讲解怎么进行操作而这个属于进阶了,我们先来看看标准standard由官方给的成品我们怎么进行一个修改实现修改着色器。
切换standard我们可以看到这些属性

这些代表什么呢
1. Rendering Mode(渲染模式)
- 大白话:就是告诉 Unity,你的模型是 “实心不透明” 还是 “半透明 / 镂空” 的。
- 你截图里选的是
Opaque(不透明),适合石头、布料、金属这种完全不透的东西。 - 后面还有
Transparent(半透明,比如玻璃、薄纱)、Cutout(镂空,比如树叶、铁丝网)
2. Main Maps(主贴图组)—— 决定模型 “长啥样、啥质感”
这是整个面板的核心!这里的每一个选项,都像给模型加一层 “滤镜” 或 “皮肤”:
-
Albedo(基础颜色 / 漫反射)大白话:模型的 “底色 / 固有色”,相当于给模型涂一层基础颜料。- 你截图里现在是纯白色,所以模型默认是白的;
- 用法:点颜色块可以直接改颜色(比如改成黑色就是黑模型),点后面的小图标可以拖一张纹理贴图进去,模型就会变成贴图的样子(比如给角色贴衣服纹理)。
-
Metallic(金属度)大白话:管 “模型像不像金属” 的关键滑块!- 拉到
0:完全非金属(比如塑料、布料、木头,如图); 
- 拉到
1:纯金属(比如铁、铜、不锈钢,反光会瞬间拉满如下图)。 
- 拉到
-
Smoothness(光滑度)大白话:管 “模型有多光滑 / 粗糙” 的!- 越往右拉:模型越光滑,反光越强,像镜子一样;
- 越往左拉:模型越粗糙,反光越弱,像磨砂石头。你截图里现在是
0.5,所以模型是半光滑的状态。
-
Source(光滑度来源)大白话:告诉 Unity “光滑度数值从哪来”,默认Metallic Alpha就够用,新手不用改。 -
Normal Map(法线贴图)大白话:给低模 “造假凹凸感” 的!比如你做了个平平整整的布料模型,贴一张法线贴图,就能做出布料的褶皱、蕾丝的纹理,不用做高模也能有凹凸感,我们网上偷一个这种褶皱图片放入大家可以看到效果如图
-
Height Map(高度贴图)大白话:比法线贴图更猛的 “凹凸造假术”,能做出模型表面的高低起伏(比如砖块的凸起),一般和法线贴图配合用,新手先不用碰。 -
Occlusion(环境光遮蔽贴图)大白话:给模型的 “缝隙里加阴影” 的!比如衣服褶皱、物体接缝的地方,加了这个贴图,阴影会更真实,不会亮得像廉价塑料。
3. Emission(自发光)
- 大白话:让模型自己发光的开关!
- 比如灯泡、霓虹灯、魔法特效,勾上之后,模型就会自己亮起来,受场景内灯光影响降低,我们给大家看个对比这里我们自己设置了一个spot光源照着侧面如果没用此自发光如图所示,

- 很明显这个物体被光给烤糊了,如果我们加上了emission

- 灯光效果还在但是物体会发出紫色光,我们点击这个hdr可以查看到一个滑动条为intensity

- 你想让他强度越高就设置自发光的intensity越大。当然他自发光我们需要一个light来衬托他的反射那就必须额外给物体加一个 Light(灯光)组件!另外,这个 Global Illumination(全局光照)选 Realtime 还是 Baked,取决于你的灯是动的(警灯选 Realtime)还是静的(路灯选 Baked),选对了既能逼真又能保性能。
4. Tiling & Offset(平铺与偏移)
- 大白话:管贴图的 “重复次数” 和 “位置” 的!
Tiling:X/Y 数值越大,贴图在模型上重复得越多。比如一张小蕾丝贴图,Tiling 设成 2,就会在模型上平铺 2 次,布满整个布料;Offset:X/Y 可以移动贴图的位置,还能用来做动态效果(比如滚动的水、飘动的布料)。
5. Secondary Maps(次贴图组)
- 大白话:给模型加 “第二层细节纹理” 的!
- 比如你给衣服贴了一张主纹理,还想加一层布料的编织纹理,就可以用
Detail Albedo x2,相当于在主纹理上面再盖一层纹理,让质感更丰富; - 后面的
Tiling/Offset和上面用法一样,UV Set默认选UV0就行,新手不用改。
- 比如你给衣服贴了一张主纹理,还想加一层布料的编织纹理,就可以用
6. Forward Rendering Options(前向渲染设置)
- 大白话:控制光影细节的两个关键开关:
Specular Highlights(高光):勾上之后,模型会有灯光打上去的反光点(比如金属上的高光),不勾就没有;Reflections(反射):勾上之后,模型会反射场景里的东西(比如周围的环境、其他物体),不勾就不会反射。你截图里两个都勾了,所以模型现在是有高光和反射的~
7. Advanced Options(高级设置)
- 大白话:进阶设置,新手先了解就行:
Render Queue:控制模型的渲染顺序,不透明物体默认 2000,一般不用改;Enable GPU Instancing:多个相同材质的物体一起渲染,提升性能,新手一般不用勾;Double Sided Global Illumination:双面全局光照,比如单面模型的背面也能接收光照,新手先不用管。
那么今天这个介绍就讲到这里后面我们给大家展示下,我们通过调整shader获得的一个蓝色反光玻璃如图
下期我们会给大家讲解light亦或者material等进阶组件。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)