Unity | Shader基础知识(番外:了解内置Shader-Standard<一>)

目录

前言

一、什么是Standard

二、Standard参数详解

1.了解着色前

2. 着色拆分

3.参数RenderingMode

4.参数Albedo 

5.参数Metallic

三、作者的话


前言

有粉丝给我说,感觉自己内部自带的Shader都还不知道怎么用,希望我讲一下内置Shader。

那我们就从Standard开始吧!~

一、什么是Standard

standard是标准着色器,但标准着色器是什么意思?

官方解释:Unity 标准着色器是一个包含一整套功能的内置着色器。此着色器可用于渲染“真实世界”的对象,如石头、木头、玻璃、塑料和金属,并支持各种着色器类型和组合。

通俗解释:出去买衣服,有没有见过均码?什么叫均码?就是大部分人都能穿的衣服。标准着色器的意义也是在此,不能帮助你做惊才艳艳的东西,但一些普通的着色,基本都是可以用的。

二、Standard参数详解

我们一起详细了解一下,每一个参数,代表什么,怎么去应用。

1.了解着色前

我们首先了解一下,为什么要用着色器着色,如果不着色会怎么样。

(如图1和图二所示)相信不用我多讲,你们就懂了。

图1 纯模型
图2 模型着色后

接下来,我们就一起用standard着色器上色吧~~ 

2. 着色拆分

这个模型在给到你的时候,就设置的可以添加两个材质,一个是盖子的材质,一个是瓶子的材质。(如图3所示)

图3 两个材质
3.参数RenderingMode

RenderingMode,叫渲染模式,这个是standard的第一个参数,里面有四个选项。

图4 RenderingMode

以下我放了一些对比图,帮助我们看出来材质的位置,和一些功能。 

  • Opaque - 不透明模式,用于不透明普通固体(盖子明显用这个,如图5、图6所示)

    图5 删除材质前
    图6 删除材质后
  • Cutout - 镂空模式,用在又有透明又有不透明,且不需要半透明过度的情况。(球网的网是不透明绳子,中间是透明空气,没有过度阶段,如图7、图8所示) 

图7 Cutout模式下的球网
图8 Opaque模式下的球网
  • Transparent - 透明模式,完全透明(如玻璃窗)

  • Fade - 淡入淡出模式,用在从不透明到透明时,用半透明过度的情况(例:手机屏幕里是不透明的,屏幕是透明的)

难点解析之区分以下三个:

cutout:   只有100%透明和完全不透明(和别的比,会有明显边界线,如球网,如图9所示)

图9 cutout和Fade切换

Transparent:        全部都变100%透明,哪怕是你正常的固体(如图10所示)

图10 Opaque和Transparent切换

Fade:        如果贴图有设置透明度的变化,比如50%透明,80%透明,可以显示出来(如图11、图12所示)

图11 Fade模式
图12 transparent模式
4.参数Albedo 

Albedo:可以简单理解为涂色 (如图13、图14所示)

图13 Albedo
图14 有无贴图的对比盖子

 没有贴图并不是没有颜色了,还可以改颜色。

图15 没有贴图只调颜色

注意:这里贴图的透明度设置,就是上文RenderingMode中是否透明的依据

例:Fade模式下,纯红色的瓶盖,受透明度影响(如图16所示)

图16 透明瓶盖

 提示:想知道贴图有没有透明部分,只需要看图片预览里有没有A,如果有,是怎么分配的。(如图17所示)

图17 透明贴图
5.参数Metallic

Metallic:金属性(如图18所示)

图18 金属性

如果从字面理解,就是,有多像金属,但up觉得这个解释有点好笑,因为up不知道金属应该是什么样,这个概念对up来说,有点抽象。在查阅了资料后,这里给出up自己的解释。

物体有两个颜色组成:1.自己的颜色,2.外界的颜色反射给物体的

自己的颜色就是上面那个Albedo ,外界的颜色就是,你把它当成镜子,肯定能反射很多东西,这些东西的颜色,就是外在的颜色。

他们的比例是多少,就是金属性

如果金属性是0,那就一点都不反射外面的颜色,全部由Albedo来上色

如果金属性是1,那就全部用反射的颜色。

那如果是其他的,就按照比例混到一起,最后是什么样就是什么样。


 金属性里还有一个参数smoothness:光滑度

为什么会多一个参数呢?因为我们说了,要反射颜色。

但是,反射颜色,可以有很多种反射,镜面反射,漫反射等等(如图19所示)。。。

图19 粗糙度不同的反射

即使金属性拉满,也就是没有物体自己的颜色了,只反射别人 = 镜子。那坑坑洼洼的镜子和光滑的镜子,反射的还不一样呢。粗糙的金属。(如图20、图21所示)

图20 光滑的镜子
图21 粗糙的镜子

总结:金属度是自己颜色和反射颜色混合的比例,但因为反射的颜色和光滑度有关,所以这里也可需要调节光滑度。 


金属度贴图:

如果用上面的滑动条来调,我们整个模型金属度就是一个种类。

那我们做东西的时候,有些地方是金属,有些地方不是金属,怎么办?

答:我们需要用金属度贴图。

在做金属度贴图的时候,我们需要控制两个值,一个Metallic一个是Smoothness,这两个刚才都单独讲过了。图片一共可以有RGBA四个信息,一般Metallic用R通道表示Smoothness用A通道表示。


备注:

底下还一个Source。(如图22所示)

图22 Source

 Source是用来控制Smoothness的,前面说到,我们的Smoothness一般都存在透明通道,有时我们也会用Albedo贴图的透明通道存。这时候我们就可以选一下,你打算用哪个做smoothness的值。

三、作者的话

这章就到这里啦,我们下一集再见~感谢大家的点赞,收藏,关注~真心地哦~

### Unity Shader 教程及常见问题解决方案 #### 使用ShaderGraph创建简单效果 对于初学者来说,理解如何利用`ShaderGraph`来构建简单的着色器是非常重要的。这不仅涉及到基本的颜色混合操作,还包括学习如何通过节点图的方式定义材质属性和光照模型[^4]。 ```csharp // 创建个新的ShaderGraph资源文件,并设置输入输出节点之间的逻辑关系。 void CreateSimpleColorMix() { var graph = new MaterialGraph(); // 添加颜色输入节点 ColorNode colorA = graph.CreateNode<ColorNode>(); colorA.Color = Color.red; ColorNode colorB = graph.CreateNode<ColorNode>(); colorB.Color = Color.blue; // 进行颜色相加运算 AddColors addOperation = graph.CreateNode<AddColors>(); // 将两个颜色作为参数传递给加法节点 graph.Connect(colorA, 0, addOperation, 0); graph.Connect(colorB, 0, addOperation, 1); // 设置最终输出 MasterNode masterOutput = graph.FindNode<MasterNode>(); graph.Connect(addOperation, 0, masterOutput, 0); } ``` #### 解决交叉截面着色器中的问题 当遇到特定类型的着色器如用于生成网格横截面视图的`Cross Section Shader`时,可能会面临些挑战。例如,在尝试实现物体内部结构可视化的过程中,可能需要调整摄像机位置或改变切割平面的方向以获得理想的效果[^2]。 为了处理这类情况,可以考虑修改着色器脚本内的变量声明部分,允许外部控制这些参数: ```hlsl Properties { _CutPlanePos ("Cut Plane Position", Vector) = (0, 0, 0, 0) _CutPlaneNormal ("Cut Plane Normal", Vector) = (0, 1, 0, 0) } ... fixed4 frag(v2f i) : SV_Target { float side = dot(i.worldPos.xyz - _CutPlanePos.xyz, normalize(_CutPlaneNormal)); clip(side * step(0.0, side)); // 只显示位于指定平面上方的部分 ... } ``` #### 升级Unity版本以兼容最新特性 有时开发者会发现旧版Unity无法正常解析某些现代着色语言特性的语法糖或是内置函数调用。此时应当按照官方推荐的做法去更新引擎至更稳定且功能丰富的发行版本[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

希望能给大家写更多有用的文章~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值