前言
开个新坑,用ShaderGraph制作系列的星球,提供该方案的一种思路的参考。
行星渲染如果算原图,法线图,高光图三张的话,文件大小动辄几兆或者十几兆。如果要做多样化行星,需要更多贴图。
为了解决上面问题,本项目完全不采用任何贴图。相对贴图方案,本项目优势有:
1 文件体积非常小
2 可以随机变幻气态星球的样貌,这是贴图很难做到的
3 不受贴图分辨率影响,高清渲染更好控制
4 星球可以更好实现实时动态效果,比如大气层涌动
感兴趣的朋友可以留下来看看,特别是喜欢科幻或者太空题材的小伙伴。
目录
一、ShaderGraph图示
ShaderGraph就不做介绍了。先上图,再确定是否继续往下看
1.1、实例图
1.2、全流程图
二、ShaderGraph具体流程
2.1、创建ShaderGraph
选择Lit ShaderGraph
进入后可以看到这个
2.2、vertex 端点
object space 是可以链接物体的入口
position 顶点位置(用于计算物体再空间中的坐标)
normal 顶点法线(用于光照计算和渲染过程中,以模拟光线反射的效果)
tangent 顶点的切线(用于控制顶点切线的方向和位置)
2.3、Fragment 是插值
base color 基础颜色
smoothness 物体表面细节的平滑程度
normal 物体的片段法线(三点为一个面片)
emission 物体自发光效果
ambient occlusion 物体的环境光遮蔽
metallic 物体的金属质感
2.4、行星的大气动态效果
气态星球的大气层动态效果
2.5、行星的噪点效果
类似大气中的喷雾
2.6、行星的大耀斑
类似木星的大耀斑效果
2.7、行星的环形波纹
气态星球的各个经纬度之间出现的环形波动效果
2.7、行星的着色
到这里看上去就很像气态星球了
三、ShaderGraph代码
3.1、变量
ShaderGraph除了自己定义的变量,它会自己定义一些变量
_RingSpace("RingSpace", Range(2, 5)) = 5
_Color("Color", Color) = (0.9150943, 0.5475162, 0.4791296, 0)
[HideInInspector]_QueueOffset("_QueueOffset", Float) = 0
[HideInInspector]_QueueControl("_QueueControl", Float) = -1
[HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}
[HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}
[HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}
3.2、Tags
Tags
{
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"UniversalMaterialType" = "Lit"
"Queue"="Geometry"
"DisableBatching"="False"
"ShaderGraphShader"="true"
"ShaderGraphTargetId"="UniversalLitSubTarget"
}
3.3、Pass
Pass
{
Name "Universal Forward"
Tags
{
"LightMode" = "UniversalForward"
}
// Render State
Cull Back
Blend One Zero
ZTest LEqual
ZWrite On
// Debug
// <None>
// --------------------------------------------------
// Pass
HLSLPROGRAM
// Pragmas
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma instancing_options renderinglayer
#pragma vertex vert
#pragma fragment frag
/------------------略
ShaderGraph生成的代码非常长,这里我们就不贴出来了
四、天文望远镜和游戏图对比
五、总结
- 实现不规则的动态斑点时需要用到噪点。
- 独立的行星的发光效果比emission效果更管用。
- 斑点,环型,大耀斑在灰度下分开制作,最后合在一起。
写着写着就这么多了,可能不是特别全,不介意费时就看看吧。有时间还会接着更新。