环境:使用unity版本为2022.2.21f1,注意不是国内c1版,当然用国内版应该也一样
unity下载地址Download Archive
文中任何页面如果打不开可能需要一些魔法,魔法教程自行检索
使用unity构建一个URP3D模板项目
URP默认添加了ShaderGraph,如图所示可以找到添加的ShaderGraph版本以及文档,这里是14.0.7版本,点击跳转文档
URL:About Shader Graph | Shader Graph | 14.0.7
有官方中文翻译但是版本较高可能还未普及,目前中文仅支持到10.5.0版本
所以只能自己翻译辣,里面写的都是各个功能的描述,浏览两眼感觉还是动手实在
学习创建第一个ShaderGraph后发现附有更多教程的链接
先去这里康康
看起来是一个小岛效果,版本是unity2018.2或更高,直接用2022.2.21f1打开发现错误太多,如何修这些bug不是当前的重点,遂下载2018.2.21f1
小岛项目链接:Clone Repository from GitHub or Download .Zip from GitHub
打开后目测正常,但毕竟不太想用2018.2.21f1,总是要与时俱进的,我决定把这个项目自己动手搬到2022.2.21f1
复制FBX模型文件和Shader文件到新项目中,材质就自己创建一个新的,手动赋给模型,unity不好直接复制,推荐去文件管理器处理
先搬了三个物体,暂时够研究了
首先从简单的开始看,天空球是怎么做的。
在新版本中自行整理一下
舒服多了,总体上来说就是三步,先是制作了从下到上由暗到亮的底色,然后分别对亮部和暗部进行参数控制修正,如果不知道节点的作用先去手册查看,如果这里看不懂就去手册至少把Gettting Start With Shader Graph章节下的所有小结看完。
效果合理,也可以控制参数调整效果
接下来看一下小岛是怎么弄的
像沙子且在侧壁上有海纹效果
整理一下
在处理基础颜色时混合水颜色和沙子颜色
处理光照部分:
uv随时间偏移
海纹形状
海纹去头去尾,不沾水或者底面不需要海纹
菲涅尔反射光
处理光滑部分
用了UV值计算Simple Noise,随后映射到0-1
最后传值给Master Stack即可
关于木旗制作
使用了两个材质,一个是木棍,一个是旗帜
先看木棍
分三层随后挨个添加颜色,shader Grapgh很简单
但是对于这个模型有些特殊的地方
1.两个材质分别影响的部分是划分的
感觉和这里模型分为两个submeshes有关
2.材质中的四个变量对于这根旗杆可有可无,是控制其他宝箱模型上的元素
猜想是和uv的设置有关系,如果uv全部采样颜色的中间部分,就不会受其余位置影响
下面是旗帜部分:
注意在导入新版本unity后,注意开启alpha clipping
先从最基本的部分来,基底颜色base color
非常简单,使用一张unity标志贴图,lerp背景颜色和logo颜色
效果是这样的,为了清晰把其他效果都去除了,只保留当前部分,以下也尽量这么做
接下来是顶点变换部分
总体来看是x和z发生了变化,y保持原值
x上的变化是为了让旗帜产生月弯
实现方式是uv的y从下到上是0~1,y=y(1-y),中间大上下两边小,以此为系数根据输入产生x轴位移。
y轴不变
z轴根据时间做正弦波动,越靠近旗杆的部分影响越小,是这个公式:系数sin(系数x+time),额外根据uv的x,左到右0~1减少旗杆附近的影响。
这一部分效果是这样的
消融部分
主要是利用噪声产生破洞,次方控制破洞大小,uv的x与系数控制破洞距离杆的影响越远越大,两个系数控制噪声的tiling和offset。
我专门替换了噪声,感觉对最后的效果影响不算很大,重要的是调到合适的系数。
效果是这样的
把他们全部接起来