08.Unity ShaderGraph实例(使用PBR渲染精灵动画)

相关资源下载
创建精灵Sheet
制作精灵动画
ShaderGraph:怎么定义精灵贴图
ShaderGraph:怎么剔除Alpha
Node:Sample Texture 2D
Node:Replace Color
Node:Invert Color


相关资源下载

08.Unity ShaderGraph实例(使用PBR渲染精灵动画)


创建精灵Sheet
  • 下载上面的资源以后导入到Unity,按照划线提示操作
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 选择Sprite Editor,按照操作步骤裁剪精灵图片
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 好了之后应该是这样
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)

制作精灵动画
  • 选择前4张图片,往Hierarchy视图或者场景里面拖
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • Unity自动认为你在制作精灵动画,给当前的动画取个名字
  • Unity会自动生成了一个Animator和Animation片段
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 精灵会自动加载到Scene里面,调整播放速度0.2左右,点击Play预览,速度在Animator里面选择对应的片段来调整

ShaderGraph:怎么定义精灵贴图
  • 按照提示步骤添加Texture2d属性并且使用Texture2d属性,赋值默认贴图,总3步
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 创建一个Simple Texture 2D来对刚才的纹理进行采样,采样的预览会有变化,我们在Unity对其有操作,
    图片的内容发生了变化,具体引起原因未知,反正我们一般也不会用原始图
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 将采样的结果输出到Master节点的颜色和自发光端口,颜色是基础数据,自发光是因为精灵是常显,类似于UI
    08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
  • 总得下来,使用PBR主模块制作一个显示精灵\UI\特效的贴图步骤Texture2D>采样>Albedo>Emission

ShaderGraph:怎么剔除Alpha

08.Unity ShaderGraph实例(使用PBR渲染精灵动画)

将纹理的Alpha通道输出到Replace Color,因为Alpha不是RGB颜色,但Replace Color只把原始的RGB颜色替换,所以跟From字段没有任 何关系,To字段改变输出颜色;Range是颜色搜索范围,Fuzziness光滑过渡值,默认情况下,这一步执行完就把Alpha通道的值全部变成> 了黑色,那么非Alpha通道的颜色成为白色,把黑色部分替换到黑色;当前你选择其他颜色也可以,只是没有黑白处理之后的效果好;
在Alpha通道中,有颜色的部分默认变成白色,透明部分默认为黑色,这是着色原理,真理
再通过反转红绿蓝颜色,个人理解RGB,黑色RGB(0,0,0),反转之后黑色(255,255,255),白色(0,0,0)
Alpha设置主模块的透明度,如果主模块不透明,则AlphaClipThreshold无效,主模块拥有透明值之后,AlphaClipThreshold才有效
经过最后的处理,Alpha通道变成黑色部分,非Alpha部分变成白色,AlphaClipThreshold开始拾取Alpha通道
经过最终的筛选,提取出了人物部分,Alpha1不透明,0全透明


Node:Sample Texture 2D

对Texture2D进行采样,返回在shader中使用的4维颜色值;你可以使用UV输入重写UV坐标,使用Sampler输入自定义的采样状态;
如果是使用Sample Textrue 2D Node来采样一个法线,设置下拉选项为Normal;
注意:这个节点只能使用在片段着色器阶段;如果需要对Texture2D在顶点着色器使用Sample Texture 2D LOD Node来替代

端口信息

名称 IO方向 类型 绑定 说明
Texture input Textrue 2D None 用来采用的Texture2D
UV input Vector2 UV 网格的法线向量
Sampler input Sampler State Default Sampler state 纹理的采样者
RGBA output Vector4 None 作为RGBA输出的值
R output Vector1 None 红色(x)RGBA输出组件
G output Vector1 None 绿色(y)RGBA输出组件
B output Vector1 None 蓝色(z)RGBA输出组件
A output Vector1 None Alpha(w)RGBA输出组件

相关设置

  • Type 设置贴图的类型,Default普通贴图或Normal法线贴图
  • Space 设置展示的空间,Tangent切线空间或者Object物体空间

Node:Replace Color

08.Unity ShaderGraph实例(使用PBR渲染精灵动画)
替换input里面的from对应的数据到to;Range可以定义更为广泛颜色相似值,作用到From字段端口上;
Fuzziness可以用于更加平滑的边缘过渡,有点和抗锯齿功能差不多;

端口信息

名称 IO方向 类型 绑定 说明
In input Vector3 None 输入的值
From input Vector3 Color 需要替换的颜色
To input Vector3 Color 替换到的目标颜色
Range input Vector1 None 在一定的范围内替换目标颜色
Fuzziness input Vector1 None 选取的颜色边缘柔化
Out output Vector3 None 输出

Node:Invert Color

反转输入的颜色,基于每个通道来处理;这个节点需要输入的数据范围在[0,1];

端口信息

名称 IO方向 类型 绑定 说明
In input Dynamic Vector None 输入的值
Out output Dynamic Vector None 输出的值

相关设置

名称 类型 选项 说明
Red Toggle True/False 如果真红色通道反转
Green Toggle True/False 如果真绿色通道反转,维度小于2不可用
Blue Toggle True/False 如果真蓝色通道反转,维度小于3不可用
Alpha Toggle True/False 如果真透明通道反转,维度小于4不可用

总结经验

一般来说SG使用在字段旁边的标注数字是表示这个字段使用的多少维度,如果是数字端口,几乎是全通;如果不知道一个字段该连接哪一个模块,可以直接在端口上拖着放开,程序会自动索引这个字段可以用哪些相关字段。