主题包初步装载
This commit is contained in:
558
Assets/Shaders/VFX/Pandavfx_v2.3_URP.shader
Executable file
558
Assets/Shaders/VFX/Pandavfx_v2.3_URP.shader
Executable file
@@ -0,0 +1,558 @@
|
||||
|
||||
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"
|
||||
}
|
||||
Reference in New Issue
Block a user