Files
ichni_Creator_Studio/Assets/Shaders/VFX/Pandavfx_v2.3_URP.shader
2025-02-09 11:09:54 -05:00

559 lines
24 KiB
GLSL
Executable File

Shader "VFX/Pandavfx_v2.3_URP"
{
Properties
{
[Enum(UnityEngine.Rendering.CullMode)]_Cullmode("Cullmode", Float) = 0
[Enum(UnityEngine.Rendering.CompareFunction)]_Ztest("Ztest", Float) = 4
[Enum(UnityEngine.Rendering.BlendMode)]_Scr("Scr", Float) = 5
[Enum(UnityEngine.Rendering.BlendMode)]_Dst("Dst", Float) = 10
[KeywordEnum(X,Y,Z)] _Face("Face", Float) = 1
_Zwrite("Zwrite", Float) = 0
[HDR]_BackFaceColor("BackFaceColor", Color) = (1,1,1,0)
_AddTexBlendModeVec4("AddTexBlendMode", Vector) = (1, 0, 0, 0)
[Toggle]_AlphaAdd("AlphaAdd", Float) = 0
_Reference("Reference", Range( 0 , 200)) = 0
[Enum(UnityEngine.Rendering.StencilOp)]_Pass("Pass", Float) = 0
[Enum(UnityEngine.Rendering.CompareFunction)]_Comparison("Comparison", Float) = 8
[Enum(UnityEngine.Rendering.StencilOp)]_Fail("Fail", Float) = 0
_CenterU("CenterU", Float) = 0.5
_CenterV("CenterV", Float) = 0.5
// Main
[HideInInspector]_MainTex_ST("MainTex_ST", Vector) = (1,1,0,0)
_MainTex("MainTex", 2D) = "white" {}
[Toggle]_UVPolar("UVPOLAR", Float) = 0
_MainAlpha("MainAlpha", Range(0, 10)) = 1
[HDR]_MainColor("MainColor", Color) = (1,1,1,1)
_MainTex_Uspeed("MainTex_Uspeed", Float) = 0
_MainTex_Vspeed("MainTex_Vspeed", Float) = 0
[Toggle]_MaintexC("MaintexC", Float) = 0
[Toggle]_MaintexCV("MaintexCV", Float) = 0
[Toggle]_MainTex_ar("MainTex_a/r", Float) = 0
[Toggle]_CustomdataMainTexUV("CustomdataMainTexUV", Float) = 0
[Enum(Custom1,0,Custom2,1)]_MainOffsetVC1("MainOffsetVC1", Float) = 0
[Enum(Custom1,0,Custom2,1)]_MainOffsetUC1("MainOffsetUC1", Float) = 0
_MainOffsetUC2Vec4("MainOffsetUC2Vec4", Vector) = (1, 0, 0, 0)
_MainOffsetVC2Vec4("MainOffsetVC2Vec4", Vector) = (0, 1, 0, 0)
_MainTex_rotat("MainRoate", Range(0, 360)) = 0
// Add
_AddTex("AddTex", 2D) = "white" {}
[HideInInspector]_AddTex_ST("AddTex_ST", Vector) = (1,1,0,0)
_AddTexUspeed("AddTexUspeed", Float) = 0
_AddTexVspeed("AddTexVspeed", Float) = 0
[HDR]_AddTexColor("AddTexColor", Color) = (0,0,0,0)
_AddTexBlend("AddTexBlend", Range( 0 , 1)) = 0
[Toggle]_IfAddTex("IfAddTex", Float) = 0
[Toggle]_AddTexC("AddTexC", Float) = 0
[Toggle]_AddTexCV("AddTexCV", Float) = 0
[Toggle]_AddTexAR("AddTexAR", Float) = 0
[Toggle]_IfAddTexAlpha("IfAddTexAlpha", Float) = 0
[Toggle]_IfAddTexColor("IfAddTexColor", Float) = 1
[Toggle]_CAddTexUV("CAddTexUV", Float) = 0
[Toggle]_CAddTexUVT("CAddTexUVT", Float) = 1
_AddRotate("AddRoate", Range(0, 360)) = 0
// Distort
[HideInInspector]_DistortTex_ST("DistortTex_ST", Vector) = (1,1,0,0)
[HideInInspector]_DistortMaskTex_ST("DistortMaskTex_ST", Vector) = (1,1,0,0)
_DistortTex("DistortTex", 2D) = "white" {}
[Toggle]_SceenTex("SceenTex", Float) = 0
[Toggle]_DistortTexAR("DistortTexAR", Float) = 1
[Toggle]_DistortMask("DistortMask", Float) = 0
_DistortFactor("DistortFactor", Range( 0 , 1)) = 0
_DistortTex_Uspeed("DistortTex_Uspeed", Float) = 0
_DistortTex_Vspeed("DistortTex_Vspeed", Float) = 0
[Enum(Option1,0,Option2,1)]_CustomDistort("CustomDistort", Float) = 0
[Toggle]_DistortMaskTexAR("DistortMaskTexAR", Float) = 1
_DistortMaskTex("DistortMaskTex", 2D) = "white" {}
[Toggle]_DistortMaskTexC("DistortMaskTexC", Float) = 0
[Toggle]_DistortMaskTexCV("DistortMaskTexCV", Float) = 0
[Toggle]_IfFlowmap("IfFlowmap", Float) = 0
[Enum(Custom1,0,Custom2,1)]_DistortFactorC1("DistortFactorC1", Float) = 1
_DistortFactorC2Vec4("DistortFactorC2Vec4", Vector) = (0, 0, 1, 0)
[Toggle]_DistortRemap("DistortRemap", Float) = 0
_DistortMaskTexR("DistRoate", Range(0, 360)) = 0
[Toggle]_IfBeingDistorted("IfBeingDistorted",int) = 1
// Dissolve
_DissloveTex("DissloveTex", 2D) = "white" {}
[HideInInspector]_DissloveTex_ST("DissloveTex_ST", Vector) = (1,1,0,0)
_DIssloveFactor("DIssloveFactor", Range( 0 , 1)) = 0.5
_DIssloveWide("DIssloveWide", Range( 0 , 1)) = 0.1
_DIssloveSoft("DIssloveSoft", Range( 0 , 1)) = 0.5
[HDR]_DIssloveColor("DIssloveColor", Color) = (1,1,1,1)
_DisTex_Uspeed("DisTex_Uspeed", Float) = 0
_DisTex_Vspeed("DisTex_Vspeed", Float) = 0
[Enum(Option1,0,Option2,1)]_CustomdataDisT("CustomdataDisT", Float) = 0
_DissolveTexExp("DissolveTexExp", Range( 0 , 10)) = 1
[Toggle]_DissolveC("DissolveC", Float) = 0
[Toggle]_DissolveCV("DissolveCV", Float) = 0
[Toggle]_DissolveAR("DissolveAR", Float) = 1
[Toggle]_sot_sting_A("sot_sting_A", Float) = 0
[Toggle]_CustomdataDis("CustomdataDis", Float) = 0
[Toggle]_IfDissolveColor("IfDissolveColor", Float) = 1
[Enum(Custom1,0,Custom2,1)]_DissolveFactorC1("DissolveFactorC1", Float) = 1
[Enum(off,0,on,1)]_IfDissolveOffsetC("IfDissolveOffsetC", Float) = 0
[Enum(Custom1,0,Custom2,1)]_DissolveOffsetUC1("DissolveOffsetUC1", Float) = 1
_DissolveFactorC2Vec4("DissolveFactorC2Vec4", Vector) = (0, 0, 1, 0)
_DissolveOffsetUC2Vec4("DissolveOffsetUC2", Vector) = (1, 0, 0, 0)
_DissolveOffsetVC2Vec4("DissolveOffsetVC2", Vector) = (0, 1, 0, 0)
[Enum(Custom1,0,Custom2,1)]_DissolveOffsetVC1("DissolveOffsetVC1", Float) = 1
_DisslovePlusTex("DisslovePlusTex", 2D) = "white" {}
_DissolveTexDivide("DissolveTexDivide", Range(1 , 10)) = 1
[HideInInspector]_DisslovePlusTex_ST("DisslovePlusTex_ST", Vector) = (1,1,0,0)
_IfDissolvePlus("IfDissolvePlus", Float) = 0
[Toggle]_DissolvePlusAR("DissolvePlusAR", Float) = 0
[Toggle]_DissolvePlusC("DissolvePlusC", Float) = 0
[Toggle]_DissolvePlusCV("DissolvePlusCV", Float) = 0
_DIssolve_rotat("DissRoate", Range(0, 360)) = 0
_DissolvePlusR("DissPlusRotate", Range(0, 360)) = 0
// Vertex offset
[HideInInspector]_VTOTex_ST("VTOTex_ST", Vector) = (1,1,0,0)
_VTOTex("VTOTex", 2D) = "white" {}
_VTOFactor("VTOFactor", Float) = 0
_VTOTex_Uspeed("VTOTex_Uspeed", Float) = 0
_VTOTex_Vspeed("VTOTex_Vspeed", Float) = 0
_VTOMaskTex("VTOMaskTex", 2D) = "white" {}
[Toggle]_VTOFactorCustom("VTOFactorCustom", Float) = 0
[Toggle]_VTOC("VTOC", Float) = 0
[Toggle]_VTOCV("VTOCV", Float) = 0
[Toggle]_VTOAR("VTOAR", Float) = 1
[Toggle]_VTORemap("VTORemap", Float) = 0
[Enum(Custom1,0,Custom2,1)]_VTOFactorC1("VTOFactorC1", Float) = 1
_VTOFactorC2Vec4("_VTOFactorC2", Vector) = (0, 0, 0, 1)
_VTOR("VTORotate", Range(0, 360)) = 0
// Fresnel
_fnl_power("fnl_power", Range( 1 , 10)) = 1
_fnl_sacle("fnl_sacle", Range( 0 , 1)) = 0
[HDR]_fnl_color("fnl_color", Color) = (1,1,1,0)
_softFacotr("softFacotr", Range( 0 , 20)) = 1
_DepthfadeFactor("DepthfadeFactor", Range( 0 , 10)) = 1
[Toggle]_FNLfanxiangkaiguan("FNLfanxiangkaiguan", Float) = 0
_Dir("Dir", Vector) = (0,0,0,0)
[Toggle]_IfFNLAlpha("IfFNLAlpha", Float) = 0
// Mask
[HideInInspector]_MaskPlusTex_ST("MaskPlusTex_ST", Vector) = (1,1,0,0)
[HideInInspector]_MaskTex_ST("MaskTex_ST", Vector) = (1,1,0,0)
_MaskTex("MaskTex", 2D) = "white" {}
_MaskPlusTex("MaskPlusTex", 2D) = "white" {}
[Toggle]_CustomdataMaskUV("CustomdataMaskUV", Float) = 0
_Mask_scale("Mask_scale", Float) = 1
_Mask_Uspeed("Mask_Uspeed", Float) = 0
_MaskPlusUspeed("MaskPlusUspeed", Float) = 0
_MaskPlusVspeed("MaskPlusVspeed", Float) = 0
_Mask_Vspeed("Mask_Vspeed", Float) = 0
[Toggle]_IfMaskColor("IfMaskColor", Float) = 0
[Toggle]_MaskPlusC("MaskPlusC", Float) = 0
[Toggle]_MaskPlusCV("MaskPlusCV", Float) = 0
[Toggle]_MaskC("MaskC", Float) = 0
[Toggle]_MaskCV("MaskCV", Float) = 0
[Toggle]_MaskPlusAR("MaskPlusAR", Float) = 1
[Toggle]_MaskAlphaRA("MaskAlphaRA", Float) = 1
[Toggle]_IfMaskPlusTex("IfMaskPlusTex", Float) = 0
[Enum(Custom1,0,Custom2,1)]_MaskOffsetVC1("MaskOffsetVC1", Float) = 0
[Enum(Custom1,0,Custom2,1)]_MaskOffsetUC1("MaskOffsetUC1", Float) = 0
_MaskOffsetUC2Vec4("_MaskOffsetUC2", Vector) = (0, 0, 1, 0)
_MaskOffsetVC2Vec4("_MaskOffsetVC2", Vector) = (0, 0, 0, 1)
_Mask_rotat("MaskRotate", Range(0, 360)) = 0
_MaskPlusR("MaskPlusRotate", Range(0, 360)) = 0
// Soft particle
[Toggle]_Depthfadeon("Depthfadeon", Float) = 0
[HideInInspector] __dirty( "", Int ) = 1
[HideInInspector] _TextureUScale("",float) = 1
[HideInInspector] _TextureUValue("",float) = 0
[HideInInspector] _TextureVScale("",float) = 1
[HideInInspector] _TextureVValue("",float) = 0
[HideInInspector] _CustomDataToZero("",float) = 1
//_UVTest("UVTest",range(0,1)) = 0
}
SubShader
{
Tags{ "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "IsEmissive" = "true" "Queue" = "Transparent+500"}
Cull [_Cullmode]
ZWrite [_Zwrite]
ZTest [_Ztest]
Stencil
{
Ref [_Reference]
Comp [_Comparison]
Pass [_Pass]
Fail [_Fail]
}
Blend [_Scr] [_Dst]
HLSLINCLUDE
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl"
#include "Pandavfx_Function.hlsl"
#define lerp(x, y, s) (mad((y)-(x), (s), (x)))
#define POLAR_COEFFICIENT 0.15915
//为了适应大量贴图的需要,需要根据贴图作变体来减少采样的次数
//#pragma shader_feature_local _ _MAINTEX_CUSTOMDATA //mainTex是否有customData
#pragma shader_feature_local _ _VTO_TEX
#pragma shader_feature_local _ _DISORT_TEX
#pragma shader_feature_local _ _DISORT_MASK_TEX
#pragma shader_feature_local _ _MASK_TEX
#pragma shader_feature_local _ _MASK_PLUS_TEX
#pragma shader_feature_local _ _ADD_TEX
#pragma shader_feature_local _ _DISSOLVE_TEX
#pragma shader_feature_local _ _DISSOLVE_PLUS_TEX
#pragma shader_feature_local _ _SOFT_PARTICAL //是否是软粒子
#pragma shader_feature_local _ _SCEENTEX_ON
half4 Func(Input i, half facing)
{
//float test = step(i.uv_texcoord.y,_UVTest);
//return float4(i.uv2_texcoord2.www,1);
half4 customData1 = half4(i.uv_texcoord.zw, i.uv2_texcoord2.xy);
half4 customData2 = half4(i.uv2_texcoord2.zw, i.uv3_texcoord3.xy);
//如果使用LineRenderer而不是粒子系统的话 在此将customData归零
customData1.xyzw*=_CustomDataToZero;
customData2.xyzw*=_CustomDataToZero;
///DistortTexture
float2 distortUV = 0;
#ifdef _DISORT_TEX
float2 distortTexcoord = i.uv_texcoord.xy;
float2 convertedUV = ConvertUV(distortTexcoord, _DistortTex_ST, 0, 0, (half4)0, 0, (half4)0, (half4)0, (half4)0,
_DistortTex_Uspeed, _DistortTex_Vspeed, 0, 0, 0);
float4 customDataDistChannel = lerp(customData1, customData2, _DistortFactorC1);
float distFactorCustom = dot(_DistortFactorC2Vec4, customDataDistChannel);
distFactorCustom = lerp(_DistortFactor, distFactorCustom, _CustomDistort);
distortUV = GetDistortTextureData(convertedUV, _DistortTex, sampler_DistortTex, distFactorCustom, _DistortTexAR, _DistortRemap, _IfFlowmap);
#ifdef _DISORT_MASK_TEX
float2 distortMaskTexcood = i.uv_texcoord.xy;
float2 distortMask = ConvertUV(i.uv_texcoord.xy, _DistortMaskTex_ST, 0, 0, (half4)0, 0, (half4)0, (half4)0, (half4)0,
0, 0, _DistortMaskTexC, _DistortMaskTexCV, _DistortMaskTexR);
half4 mask = SAMPLE_TEXTURE2D(_DistortMaskTex, sampler_DistortMaskTex, distortMask);
distortUV *= lerp(mask.a, mask.r, _DistortMaskTexAR);
#endif
#endif
///主贴图uv
float2 mainTexcoord = i.uv_texcoord.xy;
float2 mainUV = ConvertUV(mainTexcoord, _MainTex_ST,
_CustomdataMainTexUV, _MainOffsetUC1, _MainOffsetUC2Vec4, _MainOffsetVC1, _MainOffsetVC2Vec4, customData1, customData2,
_MainTex_Uspeed, _MainTex_Vspeed, _MaintexC, _MaintexCV, _MainTex_rotat);
//采样主贴图
//根据是采样材质贴图还是采样背景图做一个变体
half4 mainColor = float4(0,0,0,1);
#ifdef _SCEENTEX_ON
//UnityStereoTransformScreenSpaceTex(float2 uv)
float4 screenPos = i.screenPos;
//mainColor = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,i.screenPos.xy/i.screenPos.w+ distortUV);
mainColor = SAMPLE_TEXTURE2D(_CameraOpaqueAndTransparentTexture,sampler_CameraOpaqueAndTransparentTexture,i.screenPos.xy/i.screenPos.w+ distortUV);
#else
mainColor = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,mainUV + distortUV);
#endif
//return float4(mainColor.a,mainColor.a,mainColor.a,1);
i.ASEVFace = 0;
//是否使用R通道来替代透明度
mainColor.a = clamp(lerp(mainColor.a,mainColor.a * mainColor.r,_MainTex_ar),0,1);
//混合前景色和后景色
mainColor.rgb = mainColor.rgb * _MainColor.rgb;
//mainColor.rgb = facing<0?mainColor.rgb*_BackFaceColor.rgb:mainColor.rgb;
facing = step(facing, 0);
mainColor.rgb = lerp(mainColor.rgb, mainColor.rgb*_BackFaceColor.rgb, facing);
//mainColor与顶点色混合
//mainColor.rgb *= ( _IfDissolveColor == 0.0 ? float3(1,1,1) : i.vertexColor.rgb );
//mainColor.rgb *= lerp(i.vertexColor.rgb, float3(1,1,1), _IfDissolveColor);
mainColor.rgb *= i.vertexColor.rgb;
//return float4(i.vertexColor.rgb,1);
////////////////////////////////////////////////////////////////////////////////
///mainColor与其他贴图开始混合
///mainColor与AddTex混合
float3 finalColor = mainColor.rgb;
float finalColorAlpha = mainColor.a;
//原代码中mainTexAlpha会受_CustomdataDisT(溶解贴图的拖尾模式)影响,不知为何,只是照抄
finalColorAlpha = finalColorAlpha * (i.vertexColor.a * (1 - _CustomdataDisT) + _CustomdataDisT);
///多功能图(addTex)采样部分
float2 addTexUV = float2(0,0);
//float4 addColor = float4(1,1,1,1);
#ifdef _ADD_TEX
float2 addTexcoord = i.uv_texcoord.xy;
float2 addUV = ConvertUV(addTexcoord, _AddTex_ST, 0, 0, (half4)0, 0, (half4)0, (half4)0, (half4)0,
_AddTexUspeed, _AddTexVspeed, _AddTexC, _AddTexCV, _AddRotate);
half4 addColor = AddTexture(addUV, _AddTex, sampler_AddTex,
finalColor, finalColorAlpha,
_AddTexColor, _AddTexAR, _AddTexBlend, _AddTexBlendModeVec4, _IfAddTexColor, _IfAddTexAlpha);
finalColor.rgb = addColor.rgb;
finalColorAlpha = addColor.a;
#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///菲涅尔部分内容
float3 ViewDir =normalize(_WorldSpaceCameraPos - i.worldPos) + _Dir;
float NoV = abs(dot(normalize(i.worldNormal),ViewDir));
float FNL = saturate( ( pow( ( 1.0 - saturate( abs( NoV ) ) ) , _fnl_power ) * _fnl_sacle ) );
float4 fnlColor = FNL * _fnl_color;
float softedge = pow(NoV,_softFacotr);
//是否影响最终的Alpha值
finalColorAlpha = finalColorAlpha * lerp(1,FNL,_IfFNLAlpha) * lerp(1,softedge,_FNLfanxiangkaiguan);
finalColor +=fnlColor.rgb;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///软粒子 需要开启深度图
#ifdef _SOFT_PARTICAL
float4 screenPosNorm = i.screenPos/i.screenPos.w;
float screenDepth88 = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE( _CameraDepthTexture,sampler_CameraDepthTexture, screenPosNorm.xy),_ZBufferParams);
float distanceDepth = saturate( ( screenDepth88 - LinearEyeDepth( screenPosNorm.z ,_ZBufferParams) ) / ( _DepthfadeFactor ) );
float softDepth = lerp(1.0, distanceDepth, _Depthfadeon);
finalColorAlpha *=softDepth;
#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///与遮罩贴图混合
//MaskTexture
float4 maskTexColor = float4(1,1,1,1);
float maskPlus = 1;
//float3 maskColor = 1;
float3 tempmaskcolor = 1;
#ifdef _MASK_TEX
float2 maskTexcoord = i.uv_texcoord.xy;
float2 maskUV = ConvertUV(maskTexcoord, _MaskTex_ST,
_CustomdataMaskUV, _MaskOffsetUC1, _MaskOffsetUC2Vec4, _MaskOffsetVC1, _MaskOffsetVC2Vec4, customData1, customData2,
_Mask_Uspeed, _Mask_Vspeed, _MaskC, _MaskCV, _Mask_rotat);
half4 maskColor = GetMaskTextureData(maskUV, _MaskTex, sampler_MaskTex,
finalColor, finalColorAlpha, _MaskAlphaRA, _IfMaskColor, _Mask_scale);
finalColor = maskColor.rgb;
finalColorAlpha = maskColor.a;
#endif
//启动额外遮罩贴图
#ifdef _MASK_PLUS_TEX
float2 maskPlusTexcoord = i.uv_texcoord.xy;
float2 maskPlusUV = ConvertUV(maskPlusTexcoord, _MaskPlusTex_ST, 0, 0, (half4)0, 0, (half4)0, (half4)0, (half4)0,
_MaskPlusUspeed, _MaskPlusVspeed, _MaskPlusC, _MaskPlusCV, _MaskPlusR);
half4 maskPlusTexColor = GetMaskTextureData(maskPlusUV, _MaskPlusTex, sampler_MaskPlusTex,
finalColor, finalColorAlpha, _MaskPlusAR, 0, 1);
finalColorAlpha = maskPlusTexColor.a;
#endif
///与溶解贴图混合
#ifdef _DISSOLVE_TEX
float2 dissolveTexcoord = i.uv_texcoord.xy;
half2 dissolveUV = ConvertUV(dissolveTexcoord, _DissloveTex_ST,
_IfDissolveOffsetC, _DissolveOffsetUC1, _DissolveOffsetUC2Vec4, _DissolveOffsetVC1, _DissolveOffsetVC2Vec4, customData1, customData2,
_DisTex_Uspeed, _DisTex_Vspeed, _DissolveC, _DissolveCV, _DIssolve_rotat);
float4 dissolveTexColor = SAMPLE_TEXTURE2D(_DissloveTex,sampler_DissloveTex,dissolveUV);
float dissolve = lerp(dissolveTexColor.a, dissolveTexColor.r, _DissolveAR);
float4 customDataDissChannel = lerp(customData1, customData2, _DissolveFactorC1);
float dissFactorCustom = dot(_DissolveFactorC2Vec4, customDataDissChannel);
//float dissFactor = ( _CustomdataDis == 0.0 ? ( _DIssloveFactor + 0.001 ) : ( _CustomdataDisT == 0.0 ? dissFactorCustom : (1.0 + (i.vertexColor.a - 0.0) * (0.0 - 1.0) / (1.0 - 0.0)) ) );
dissFactorCustom = lerp(dissFactorCustom, (1.0 - i.vertexColor.a), _CustomdataDisT);
float dissFactor = lerp(_DIssloveFactor, dissFactorCustom, _CustomdataDis);
//return float4(_CustomDataToZero,_CustomDataToZero,_CustomDataToZero,1);
//附加溶解贴图
#ifdef _DISSOLVE_PLUS_TEX
float2 dissolveAddTexUV = i.uv_texcoord.xy * _DisslovePlusTex_ST.xy + _DisslovePlusTex_ST.zw;
half cosValue = cos(_DissolvePlusR * RADIAN);
half sinValue = sin(_DissolvePlusR * RADIAN);
dissolveAddTexUV = mul(dissolveAddTexUV- half2(0.5, 0.5) , half2x2(cosValue, -sinValue, sinValue, cosValue)) + half2(0.5, 0.5);
//附加溶解贴图Clamp
float2 dissolvePlusUV = dissolveAddTexUV;
float2 dissolvePlusUVClamp = clamp(dissolveAddTexUV,0,1);
dissolvePlusUV.x = lerp(dissolvePlusUV.x, dissolvePlusUVClamp.x, _DissolvePlusC);
dissolvePlusUV.y = lerp(dissolvePlusUV.y, dissolvePlusUVClamp.y, _DissolvePlusCV);
//采样附加溶解贴图
float4 dissolveAddTexColor = SAMPLE_TEXTURE2D(_DisslovePlusTex,sampler_DisslovePlusTex,dissolvePlusUV);
//是否使用R通道
float dissolveAdd = lerp(dissolveAddTexColor.a,dissolveAddTexColor.r,_DissolvePlusAR);
//混合附加溶解贴图和溶解贴图的值
//根据溶解参数做变化.
float powDissolve = saturate(pow(abs(dissolve), _DissolveTexExp) + dissolveAdd/2);
powDissolve = saturate(pow(dissolve,_DissolveTexExp)/_DissolveTexDivide + dissolveAdd/2);
#else
float powDissolve = saturate(pow(abs(dissolve), _DissolveTexExp) + dissolve/2);
#endif
//float temp_output_57_0_g571 = saturate( pow( ( (float)_DissolveAR == 0.0 ? dissolveTexColor.a : dissolveTexColor.r ) , _DissolveTexExp ) );
//float powDissolve = saturate((((temp_output_57_0_g571 / _DissolveTexDivide) + ( _IfDissolvePlus == 0.0 ? temp_output_57_0_g571 : lerp(dissolveAddTexColor.a, dissolveAddTexColor.r, _DissolvePlusAR))) * 0.5));
//float powDissolve = saturate(pow(abs(dissolve), _DissolveTexExp));//saturate(((temp_output_57_0_g571 + temp_output_57_0_g571) * 0.5));
float temp_output_3_0_g571 = (dissFactor * (1.0 + _DIssloveWide));
float temp_output_1783_43 = step((temp_output_3_0_g571 - _DIssloveWide) , powDissolve);
float temp_output_2_0_g571 = (_DIssloveSoft + 1.0) * dissFactor;
float smoothstepResult21_g571 = smoothstep((temp_output_2_0_g571 - _DIssloveSoft) , temp_output_2_0_g571 , powDissolve);
float dissolveAlpha = lerp(smoothstepResult21_g571, temp_output_1783_43, _sot_sting_A);
finalColorAlpha *=dissolveAlpha;
#endif
///////////////////////////////////////////////////////////////////////////////
//调整总透明度
finalColorAlpha *= _MainAlpha;
//判断混合模式 如果是AlphaAdd则要乘以alpha
finalColor.rgb = lerp(1.0, finalColorAlpha, _AlphaAdd) * finalColor.rgb;
finalColorAlpha = clamp(finalColorAlpha,0,1);
//return float4(finalColorAlpha,finalColorAlpha,finalColorAlpha,1);
return float4(finalColor.rgb,finalColorAlpha);
}
Input vertexFunc( inout appdata_full v )
{
Input o;
//NITY_INITIALIZE_OUTPUT( Input, o );
o = (Input)0;
half4 customData1 = half4(v.texcoord.zw, v.texcoord1.xy);
half4 customData2 = half4(v.texcoord1.zw, v.texcoord2.xy);
/////////////////////////////////////////////////////////////////////
///顶点偏移贴图部分
float VtoOffset = 0;
#ifdef _VTO_TEX
float2 VtoUV = ConvertUV(v.texcoord.xy, _VTOTex_ST, 0, 0, (half4)0, 0, (half4)0, (half4)0, (half4)0,
_VTOTex_Uspeed, _VTOTex_Vspeed, _VTOC, _VTOCV, _VTOR);
//采样顶点偏移贴图
float4 VtoTex = SAMPLE_TEXTURE2D_LOD(_VTOTex,sampler_VTOTex,VtoUV,0);
//是否使用自定义数据 _VTOFactorCustom
float4 CustomData = lerp(customData1, customData2, _VTOFactorC1);
float VTOFactorCustomData = dot(_VTOFactorC2Vec4, CustomData);
//使用顶点偏移贴图的a通道还是r通道?
VtoOffset = lerp(VtoTex.a,VtoTex.r,_VTOAR);
//是否Remap
VtoOffset = lerp(VtoOffset,VtoOffset - 0.5,_VTORemap);
VtoOffset *=lerp(_VTOFactor,VTOFactorCustomData,_VTOFactorCustom);
#endif
/////////////////////////////////////////////////////////////////////
//顶点在法线方向上作偏移
v.vertex = v.vertex + float4(VtoOffset * normalize(v.normal),0);
return o;
}
Varyings vert( appdata_full v )
{
Varyings o;
UNITY_SETUP_INSTANCE_ID( v );
o = (Varyings)0;
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
UNITY_TRANSFER_INSTANCE_ID( v, o );
Input customInputData;
customInputData = vertexFunc(v);
o.posWS = mul(unity_ObjectToWorld, v.vertex).xyz;
o.normal = TransformObjectToWorldNormal(v.normal);
o.customPack1.xyzw = v.texcoord;
//外界调整uv缩放值的时候使用, 默认缩放值为1
o.customPack1.x = o.customPack1.x * _TextureUScale + _TextureUValue;
o.customPack1.y = o.customPack1.y * _TextureVScale + _TextureVValue;
o.customPack2.xyzw = v.texcoord1;
o.customPack3.xyzw = v.texcoord2;
o.pos = TransformObjectToHClip(v.vertex.xyz);
o.screenPos = ComputeScreenPos( o.pos );
o.color = v.color;
return o;
}
half4 Frag(Varyings IN,half facing : VFACE): SV_Target
{
UNITY_SETUP_INSTANCE_ID( IN );
Input surfIN;
surfIN = (Input)0;
surfIN.uv_texcoord = IN.customPack1.xyzw;
surfIN.uv2_texcoord2 = IN.customPack2.xyzw;
surfIN.uv3_texcoord3 = IN.customPack3.xyzw;
surfIN.worldPos = IN.posWS;
surfIN.worldNormal = IN.normal;
surfIN.screenPos = IN.screenPos;
surfIN.vertexColor = IN.color;
surfIN.positionCS = IN.pos;
half4 color = Func(surfIN, facing);
return color;
}
ENDHLSL
Pass
{
Name "UniversalForward"
Tags{"LightMode" = "UniversalForward" }
Blend [_Scr] [_Dst]
//ZTest On
HLSLPROGRAM
#pragma vertex vert
#pragma fragment Frag
ENDHLSL
}
Pass
{
Name "Distortion"
Tags {"LightMode" = "Distortion" }
Blend [_Scr] [_Dst]
//ZTest On
HLSLPROGRAM
#pragma vertex vert
#pragma fragment Frag
ENDHLSL
}
Pass
{
Name "AfterDistortion"
Tags {"LightMode" = "AfterDistortion" }
Blend [_Scr] [_Dst]
//ZTest On
HLSLPROGRAM
#pragma vertex vert
#pragma fragment Frag
ENDHLSL
}
}
FallBack "Hidden/Universal Render Pipeline/FallbackError"
CustomEditor "Yoka.MGame.PandaShader.PandavfxGUI"
}