效果图:
/*
*author:maki
火焰流动效果
*/
Shader "Custom/FireLiner"
{
Properties
{
_Albedo("Albedo", 2D) = "white" {}//底图
_Normals("Normals", 2D) = "bump" {}//法线tietu
_Mask("Mask", 2D) = "white" {}//遮罩图
_Specular("Specular", 2D) = "white" {}//高光图
_TileableFire("TileableFire", 2D) = "white" {}//火焰图
_FireIntensity("FireIntensity", Range(0 , 2)) = 0
_Smoothness("Smoothness", Float) = 1
_TileSpeed("TileSpeed", Vector) = (0,0,0,0)
[HideInInspector] _texcoord("", 2D) = "white" {}
[HideInInspector] __dirty("", Int) = 1
}
SubShader
{
Tags{ "RenderType" = "Opaque" "Queue" = "Geometry" "IsEmissive" = "true" }
Cull Back
ZTest LEqual
CGPROGRAM
#include "UnityShaderVariables.cginc"
#pragma target 3.0
#pragma surface surf StandardSpecular keepalpha
struct Input
{
float2 uv_texcoord;
};
sampler2D _Normals;
sampler2D _Albedo;
sampler2D _Mask;
sampler2D _TileableFire;
float2 _TileSpeed;
float _FireIntensity;
sampler2D _Specular;
float _Smoothness;
void surf(Input i , inout SurfaceOutputStandardSpecular o)
{
o.Normal = UnpackNormal(tex2D(_Normals, i.uv_texcoord));//UnpackNormal 函数来获取对应像素的法向值
o.Albedo = tex2D(_Albedo, i.uv_texcoord).rgb;
float2 panner16 = (_Time.x * _TileSpeed + i.uv_texcoord);
o.Emission = ((tex2D(_Mask, i.uv_texcoord) * tex2D(_TileableFire, panner16)) * (_FireIntensity * (_SinTime.w + 1.5))).rgb;
o.Specular = tex2D(_Specular, i.uv_texcoord).rgb;
o.Smoothness = _Smoothness;
o.Alpha = 1;
}
ENDCG
}
Fallback "Diffuse"
}
Amplify 示意图