【Unity】从零使用Amplify Shader - 制作水晶球

前言

前面的文章我们虽然使用了两种不同类型的Shader编辑器,但始终用的是Unlit的Shader模板,也就是无光的类型。今天我们来认识一种稍微复杂的Shader着色器。

● Surface 表面着色器。

简单介绍

Surface表面着色器官方的解释就不多说了,很多地方都查得到。那么通俗的来认识一下就是:包含了一些光照属性的着色模板。比如常用的:
● Normal:法线
● Emission:自发光
● Metallic:金属性
● Smoothness:平滑性


创建材质

● 右键 - Create - Amplify Shader - Surface创建出Shader
● 在创建出的Shader上右键 - Create - Material
● 打开ASE编辑器

在这里插入图片描述


初步实现:

● 原理:Fresnel节点(菲涅尔效应),菲涅尔效应通俗的解释就是不同距离产生的反射效果不同,当然你甚至都不用清除这个通俗的解释是个什么意思。只用空格 - Fresnel,把Power的值改为1(默认是5)就能看到就是下面这个玩意:

在这里插入图片描述

● 是不是居然已经有点儿水晶球那味儿了,此时你应该已经能想到一些常用的节点可以与之配合了。比如 Color。

● 那么我们就创建一个Color,然后用熟悉的Multipy节点来混合,接着连接到Emission属性上去,没错就是自发光,我们就能得到如下:

在这里插入图片描述

在这里插入图片描述

● 接下来把菲涅尔的两个控制变量暴露出来,变为外部可调整的属性:

在这里插入图片描述

手动调整这两个属性,感受一下图像上的哪些东西跟着这些数值的变化而变化了。(着色没有定式,根据自己的需求和美学感受来调整)

● 为了让这个球更加自然平滑,我们来做一些渐变的处理。要实现渐变,你能想到就需要一些渐进的数值,那么我们老熟人节点又出现了 - UV。

● 空格 - Texture Coordinates,创建UV节点,然后用Split节点把X,Y的值拆出来,把Y值提取出来使用,就能得到一个Y轴方向的渐变了。乘以一个控制变量,让其渐变再平滑一些:

在这里插入图片描述

实际上到这里核心节点的使用已经结束了,接下来的部分,虽然用到的节点比较多,但都是一些重复的,为了叠加起来效果更好的补充,所有并不复杂。一句话解释就是:利用Smoothstep节点来改变渐变由线性变为可控的,然后用One Minus取反,并复制一份儿,再各自添加Color节点让其颜色可控,最终混合在一起。

● 上面这一步的目的是什么呢:仅仅为了配合脑海中你想象的那种玻璃球的样子,比如上面亮一些,下面暗一些等等。所以上下部分我们都希望是可控的:

在这里插入图片描述

在这里插入图片描述

继续完善:

● 既然用了Surface着色器,那么除了Emmision属性以外,其他的属性我们都还没有用到,我们就给几个常用的属性添加控制变量。

在这里插入图片描述

● 同样的,你已经知道这两个属性字面意思是什么了,调整它们,感受图形的变化,这样才能更深入的理解。
● 最后一步:添加屏幕后处理的Bloom效果,让其更闪亮吧。(这一步不属于Shader就不介绍了,查一下也非常简单。)

在这里插入图片描述

总结
上面当然不是最完美的效果,暴露出来的所有属性都是为了调整出你心目中最合适的那个Shader,也可以试试添加删除一些其他节点来试试会出现什么。这一节核心思路就是三个:
● Surface着色器
● 菲涅尔
● 渐变
好了,现在你能搓出个彩色玻璃珠了。

猜你喜欢

转载自blog.csdn.net/sylardie/article/details/126501814