当前位置:   article > 正文

ShaderGraph实现梦幻星球效果

unity shader graph球形
进入正文,预览一下星球效果。接下来咱们开始进入正题,如何实现。

本文使用的Unity版本是2021.3.2f1c1版本,使用的是URP通用渲染管线12.1.6版本,ShaderGraph版本12.1.6版本。(和以上版本相差不多都没啥问题)

先创捷一个ShaderGraph,使用的是Lit ShaderGraph。
接下来分析一下可能会用到的节点,在球体内部有随机闪烁的点,由此我们可以考虑使用Noise相关的节点。闪烁的位置也可以思考一下,在球体的内部,也就是模型空间内。球体边缘有大片统一的颜色,这应该是菲涅尔效果。
总结一下:
1:使用Noise相关节点
2:菲涅尔效果
第一个节点
`先创建我们的第一个节点,按空格键即可快速打开节点选择窗口,在搜索框输入Noise就可以看到三种Noise随机数。Gradient Noise 渐变噪点,Simple Noise,Voronoi 泰森多边形。这是Unity内置的三种噪点图,用于程序化生成噪点图。本文内容不探讨具体噪声实现内容,简单讲述三种噪声的区别。
Gradient Noise 梯度噪点:
基于输入的UV生成一个渐变噪点图(柏林噪声)。Scale可以控制噪点图的大小。梯度噪声在高频中具有更多的能量。`
Simple Noise 简单噪点:
_与梯度噪点很容易混淆,作用与输入和输出都类似。基于输入的UV生成一个简单的噪点图,Scale控制大小_
Voronoi 泰森多边形:
基于输入的UV生成一个泰森多边形噪点图,通过输入参数Angle Offset控制的伪随机数 偏移这些点,可以生成一组格子。这些格子的尺寸和噪点由输入参数Cell Density控制。通常用来模拟石头、水或生物细胞的随机生成。
`大家可以在后续自己的ShaderGraph中,进行三种噪点图的不同效果的尝试。
这里我们选择 Gradient Noise 梯度噪点。 噪点图通常搭配Tiling And Offset 平铺和偏移节点来修改传入的UV,这里再新建一个Tiling And Offset 节点,链接至Gradient Noise UV上。我们可以尝试拖动Tiling 和 Offset的数值来观察GradientNoise图的变化。是否发现,拖动Tiling的时候也会改变Gradient Noise的大小尺寸,拖动Offset会修改Noise图的位移。代入到想实现的效果上,可以抽象的理解为球体内部闪烁的光芒。通过控制Offset的值可以模拟出随机闪烁的光芒。`
我们可以使用一个Time节点,来使Offset跟随时间的流逝来偏移。
ShaderGraph中,左上角有一块小区域,这块区域可以创建自定义的属性,使在此区域创建的属性可以暴露在创建的相关材质上,方便修改调试。接着我们在此区域创建一个Float节点,双击节点可以修改名字,把名字修改为”ScrollSpeed“,拖动这个节点到主面板上,然后创建一个Multiply(相乘)节点,链接Time至A,拖入的属性节点链接至B。这样就可以通过修改自定义属性“ScrollSpeed”的值来控制Time节点的变换速度。链接Multiply的Out节点至Tiling And Offset的Offset上就可以看到一个偏移的动画了。
到这一步感觉Noise的尺寸大小不是很合适,想方便调试修改,还记得嘛,我们可以通过自定义一个属性值,链接Gradient Noise的Scale上。
创建一个属性值,在ShaderGraph面板左上角的+号点击即可看见可以创建的属性列表,创建相关属性的秘诀在于:需要链接的节点后括号内()的数值是几,例如Grandient Noise 的Scale(1)属性后面括号内是1,意思就是一个vector 1,新版本自定义属性为float。因此我们再创建一个float的自定义属性。
`拖入自定义的float属性值改名为Noise Scale在面板上,连接至对应的节点上。我们就可以通过控制Noise Scale 的值来控制噪点图的大小了,先设置为150。
到这一步核心的步骤已完成,接下来修改Gradient Noise就可以完成主要内容。
还记得吗?上面有说过Noise节点通过输入的UV值来生成的噪点图,还通过分析,发现基本在球体的内部发生的闪烁的光芒。专业的表达是:基于模型空间内的位置发生的闪烁光芒。
接下来创建一个Position节点,此节点的主要内容是模型网格的顶点的位置,可选的空间为Object,View,World,Tangent。(关于更多坐标空间的内容可以看底页的推荐学习链接或书籍课程学习)`
修改为Object模型的空间。我们还需要注意到一点。球体的内部除了Noise随机的闪烁光点,还有这些闪烁光点绕着某一个方向在做旋转。我们可以创建一个节点Rotate About Axis ,这个节点可以输入的In值,通过Axis修改轴向,通过Rotation控制轴向修改的角度。
也就是说,可以通过Position节点链接至Rotate About Axis 的In值上,修改Position节点也就是模型空间坐标,绕Axis值所代表的轴向旋转,角度为Rotation的值。再通过Add节点相加Position节点,混合旋转的Position和原始的Position的值,链接至Tiling And Offset的UV上。接下来把Axis的值改为(0,1,0),Rotation值改为90。再把Out节点连接至Base Color ,就可以看到改变的效果。
`到这里,大家应该会得到上图这样的一个效果。接下来我们还要继续优化效果,这里的随机点似乎太多了,不够像星星点点的感觉。而且还有明显的接缝。解决的思路大概问题如下:
接缝的问题:第一步:还记得Rotate About Axis节点吗。可以通过旋转轴来更改接缝的位置。第二部:复制一份更改后的节点,与更改前的节点相乘。就可以解决这个明显的接缝的问题,变得不明显,甚至可以忽略。
Noise的问题:可以通过Power节点,跟自己多相乘几次增大效果表现。`
我们先从调整Noise噪点开始,Noise的Out节点直接拖出,输入Power链接至Power节点的A上,Power节点的B输入20,把Power节点的Out链接至BaseColor上,就可以看到下图效果。
到这一步效果已经初见雏形了。但是细心的朋友会注意到Power节点预览图上有紫色的斑点,
`这是因为20次幂的结果有产生了负数,为避免这个结果可以在Power节点之前加上一个为避免这个结果可以在输出Noise节点加上一个数值,按空格创建一个add节点,链接Noise节点到add节点A上,再把add节点的B值改为0.2,输出值Power节点的A上。就解决的紫色的问题。
再来调整一下奇怪的接缝的问题。
可以复制一份之前创建的所有节点,修改复制过后的Rotate About Axis节点的属性,使其相反,也就是复制之后Axis的值改成 Y轴为零 X和Z为1。这样接缝的位置也会旋转,接着顺便加点细节,在Time节点的最终输出点上再相乘一个-1,就可以使其和原来的效果运动轨迹相反。再新建一个Multiply节点,原Power输出Out链接A,复制Power输出Out链接B,就可以得到一个完整的效果了。接着再创建一个Multiply节点,在属性面板上新建一个Color,名称可以起名为innerColor。拖出面板链接新创建的Multiply节点B,两个Power节点相乘的节点输出Out链接至新创建的Multiply节点A。我们就为球体的内部附上了一个基础的颜色。`
链接至Base Color 上就可以看到一个基本完成的效果了。
这效果看起来好像和开始的完成图差距很大啊。没错,这是由于还需要使用一个神奇的效果,后处理效果,URP项目创建后处理非常简单,在Hierarchy窗口,右键点击左上角+号,再点击Volume,选择Global Volume。
我们就创建了一个全局的Volume,可以使用它来为我们的屏幕增添色彩。在新创建的Global Volume 的Inspector 面板选择Profile,这里就是引用后处理的文件的地方,可以点击New新创建一个,或者直接点击New旁边的圆点,直接引用URP默认的文件,这时候就会发现神奇的效果。我们的小星球成了。
接着,我们再添加一个小细节,菲涅尔效果。我们在Shader Graph面板上,新创建一个节点Fresnel Effect 调整他的Power值,改为6,再创建Multiply节点链接Fresnel Effect至A点,新创建一个Color属性,在Shader Graph面板左上角的+号可以创建,名字双击改为Outer Color。把新建的Color节点链接至B点。再和之前输出到Base Color的节点相加就可以得到这样的一个效果。
到这一步基本就完成了。目前我们球体Inspector面板的材质面板能调整的属性有三个,如图,把ScrollSpeed值调整为0.001,这样比较真实,具体数值可以根据需要手动调整。
大家可以思考一下,是否能新创建属性,可以供外部修改调试Noise的Scale和Fresnel Effect的Power值。还有一个可调节的地方,就是天空球。更换不同的天空球材质,我们创建的小星球也有不一样的表现效果,大家可以多做尝试。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/127809
推荐阅读
相关标签
  

闽ICP备14008679号