559 lines
24 KiB
GLSL
Executable File
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"
|
|
}
|