效果图:

/*
*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 示意图
本文详细解析了一种实现火焰流动效果的Shader代码,通过调整火焰强度、平滑度和纹理速度等参数,创建逼真的火焰视觉效果。文章深入探讨了如何使用Unity Shader Variables结合CGPROGRAM实现动态火焰渲染。
4万+

被折叠的 条评论
为什么被折叠?



