主题包初步装载

This commit is contained in:
SoulliesOfficial
2025-02-09 11:09:54 -05:00
parent e3a8450a27
commit 3b0c65e277
63 changed files with 2702 additions and 190 deletions

8
Assets/Shaders/VFX.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 44a6be033c2af4cecaefb9b3dd0cf3a4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,363 @@
#ifndef PANDAVFX_FUNCTION
#define PANDAVFX_FUNCTION
struct appdata_full {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
half4 color : COLOR;
uint instanceID : SV_InstanceID;
};
struct Input
{
float4 uv_texcoord : TEXCOORD0;
float3 worldPos;
float4 positionCS;
float4 uv2_texcoord2;
float4 uv3_texcoord3;
float4 vertexColor : COLOR;
float3 worldNormal;
float4 screenPos;
half ASEVFace : VFACE;
};
struct Varyings
{
//V2F_SHADOW_CASTER;
float4 pos : SV_POSITION;
float4 customPack1 : TEXCOORD0;
float4 customPack2 : TEXCOORD1;
float4 customPack3 : TEXCOORD2;
float4 screenPos : TEXCOORD3;
float3 normal : TEXCOORD4;
float3 posWS : TEXCOORD5;
half4 color : COLOR0;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
uniform float _Scr;
uniform float _Comparison;
uniform float _Fail;
uniform float _Ztest;
uniform float _Dst;
uniform float _Pass;
uniform float _Zwrite;
uniform float _Reference;
uniform float _Cullmode;
uniform float _AlphaAdd;
uniform float4 _BackFaceColor;
TEXTURE2D(_VTOTex);
SAMPLER(sampler_VTOTex);
uniform float _VTOC;
uniform float _VTOTex_Uspeed;
uniform float _VTOTex_Vspeed;
uniform float4 _VTOTex_ST;
uniform float _VTOCV;
uniform float _VTOFactorCustom;
uniform float _VTOFactor;
uniform float _VTOFactorC2;
uniform half4 _VTOFactorC2Vec4;
uniform float _VTOFactorC1;
uniform float _VTORemap;
uniform float _VTOAR;
uniform half _VTOR;
TEXTURE2D(_MaskTex);
SAMPLER(sampler_MaskTex);
uniform float _MaskC;
uniform float _Mask_Uspeed;
uniform float _Mask_Vspeed;
uniform float4 _MaskTex_ST;
uniform float _DistortMask;
uniform float _IfFlowmap;
uniform float _Mask_scale;
uniform float _MaskAlphaRA;
uniform float _CustomdataMaskUV;
uniform half4 _MaskOffsetUC2Vec4;
uniform float _MaskOffsetUC1;
uniform half4 _MaskOffsetVC2Vec4;
uniform float _MaskOffsetVC1;
uniform float _MaskCV;
uniform float _IfMaskPlusTex;
uniform float _MaskPlusAR;
uniform half _Mask_rotat;
uniform half _MaskPlusR;
TEXTURE2D(_DistortTex);
SAMPLER(sampler_DistortTex);
uniform float _DistortTex_Uspeed;
uniform float _DistortTex_Vspeed;
uniform float4 _DistortTex_ST;
uniform float _DistortTexAR;
uniform float _CustomDistort;
uniform float _DistortFactor;
uniform half4 _DistortFactorC2Vec4;
uniform float _DistortFactorC1;
uniform float _DistortRemap;
uniform float _IfBeingDistorted;
//uniform sampler2D _DistortMaskTex;
TEXTURE2D(_DistortMaskTex);
SAMPLER(sampler_DistortMaskTex);
uniform float _DistortMaskTexC;
uniform float4 _DistortMaskTex_ST;
uniform float _DistortMaskTexCV;
uniform float _DistortMaskTexAR;
uniform half _DistortMaskTexR;
TEXTURE2D(_MaskPlusTex);
SAMPLER(sampler_MaskPlusTex);
uniform float _MaskPlusC;
uniform float _MaskPlusUspeed;
uniform float _MaskPlusVspeed;
uniform float4 _MaskPlusTex_ST;
uniform float _MaskPlusCV;
uniform float _IfMaskColor;
TEXTURE2D(_MainTex);
uniform float _MainTex_ar;
SAMPLER(sampler_MainTex);
uniform float _MainUV2;
uniform float _MaintexC;
uniform float _MainTex_Uspeed;
uniform float _MainTex_Vspeed;
uniform float _CustomdataMainTexUV;
uniform half4 _MainOffsetUC2Vec4;
uniform float _MainOffsetUC1;
uniform half4 _MainOffsetVC2Vec4;
uniform float _MainOffsetVC1;
uniform float4 _MainTex_ST;
uniform float _MaintexCV;
uniform float4 _MainColor;
uniform float _MainAlpha;
uniform half _MainTex_rotat;
TEXTURE2D(_CameraOpaqueTexture);
SAMPLER(sampler_CameraOpaqueTexture);
uniform float4 _CameraOpaqueTexture_ST;
TEXTURE2D(_CameraOpaqueAndTransparentTexture);
SAMPLER(sampler_CameraOpaqueAndTransparentTexture);
uniform float4 _CameraOpaqueAndTransparentTexture_ST;
TEXTURE2D(_AddTex);
SAMPLER(sampler_AddTex);
uniform float _AddTexC;
uniform float _AddTexUspeed;
uniform float _AddTexVspeed;
uniform float4 _AddTex_ST;
uniform float _CAddTexUV;
uniform float _CAddTexUVT;
uniform float _IfAddTexAlpha;
uniform half4 _AddTexBlendModeVec4;
uniform float _AddTexAR;
uniform float _AddTexCV;
uniform float _AddTexBlend;
uniform float _IfAddTex;
uniform float _IfAddTexColor;
uniform float4 _AddTexColor;
uniform half _AddRotate;
TEXTURE2D(_DissloveTex);
SAMPLER(sampler_DissloveTex);
uniform float _DissolveC;
uniform float _DisTex_Uspeed;
uniform float _DisTex_Vspeed;
uniform float4 _DissloveTex_ST;
uniform float _sot_sting_A;
uniform float _DIssloveSoft;
uniform float _CustomdataDis;
uniform float _IfDissolveColor;
uniform float _DIssloveFactor;
uniform half4 _DissolveFactorC2Vec4;
uniform float _DissolveFactorC1;
uniform float _DissolveAR;
uniform float _IfDissolveOffsetC;
uniform half4 _DissolveOffsetUC2Vec4;
uniform float _DissolveOffsetUC1;
uniform half4 _DissolveOffsetVC2Vec4;
uniform float _DissolveOffsetVC1;
uniform float _DissolveCV;
uniform float _DissolveTexExp;
uniform float _DIssloveWide;
uniform float _CustomdataDisT;
TEXTURE2D(_DisslovePlusTex);
SAMPLER(sampler_DisslovePlusTex);
uniform float4 _DisslovePlusTex_ST;
uniform float _IfDissolvePlus;
uniform float _DissolvePlusAR;
uniform float _DissolvePlusC;
uniform float _DissolvePlusCV;
uniform half _DissolveTexDivide;
uniform half _DIssolve_rotat;
uniform half _DissolvePlusR;
TEXTURE2D(_CameraDepthTexture);
SAMPLER(sampler_CameraDepthTexture);
uniform float4 _CameraDepthTexture_TexelSize;
uniform float _DepthfadeFactor;
uniform float _softFacotr;
uniform float _Depthfadeon;
uniform float _FNLfanxiangkaiguan;
uniform float _IfFNLAlpha;
uniform float3 _Dir;
uniform float _fnl_power;
uniform float _fnl_sacle;
uniform float4 _fnl_color;
uniform float4 _DIssloveColor;
uniform float _CenterU;
uniform float _CenterV;
uniform float _UVPolar;
//粒子系统材质球适配Linerenderer时使用
uniform float _TextureUScale;
uniform float _TextureUValue;
uniform float _TextureVScale;
uniform float _TextureVValue;
uniform float _CustomDataToZero;
//uniform float _UVTest;
CBUFFER_END
#define RADIAN 0.0174533
float2 ConvertUV(float2 uv, float4 textureST,
half useCustom, half uDataIndex, half4 uDataChannel, half vDataIndex, half4 vDataChannel,half4 data1, half4 data2,
half uSpeed, half vSpeed,
half uClamp, half vClamp,
half rotate)
{
float2 convertedUV = uv * textureST.xy + textureST.zw;
half4 uData = lerp(data1, data2, uDataIndex);
half u = dot(uDataChannel, uData);
half4 vData = lerp(data1, data2, vDataIndex);
half v = dot(vDataChannel, vData);
half2 offset = lerp(half2(0, 0), half2(u, v), useCustom);
convertedUV += _Time.y * half2(uSpeed, vSpeed) + offset;
half cosValue = cos(rotate * RADIAN);
half sinValue = sin(rotate * RADIAN);
convertedUV = mul(convertedUV- half2(0.5, 0.5) , half2x2(cosValue, -sinValue, sinValue, cosValue)) + half2(0.5, 0.5);
float2 clampUV = clamp(convertedUV, 0, 1);
convertedUV.x = lerp(convertedUV.x, clampUV.x, uClamp);
convertedUV.y = lerp(convertedUV.y, clampUV.y, vClamp);
return convertedUV;
}
/**
* UV扭曲贴图部分
* \param uv
* \param distortUV
*/
float2 GetDistortTextureData(float2 uv, Texture2D tex, SamplerState samplerState, half distortFactor, half useRChannel = 0, half remap = 0, half isFlow = 0)
{
float2 distortUV = float2(0,0);
float4 distortTex =float4(0,0,0,0);
float distort = 0;
//采样扭曲贴图
distortTex = SAMPLE_TEXTURE2D(tex, samplerState, uv);
//是否使用a通道
distort = lerp(distortTex.a, distortTex.r, useRChannel);
//是否remap
distort = lerp(distort,distort*0.5-1,remap);
float4 distortTexRemap = lerp(distortTex,distortTex*0.5-1,remap);
//扭曲强度 区分是customdata 还是输入参数
float distortFract = distortFactor;
//FlowMap化
float3 disortFlowMap = float3(distortFract*(float2(distortTexRemap.r,distortTexRemap.g)-uv.xy),0);
distortUV = (distort * distortFract).xx;
distortUV = lerp(distortUV, disortFlowMap.xy, isFlow);
return distortUV;
}
/**
* MaskTexture
*/
half4 GetMaskTextureData(float2 uv, Texture2D tex, SamplerState samplerState, float3 scrColor, float scrAlpha, half useRChannel = 0, half isMaskColor = 0, half maskScale = 1)
{
//采样遮罩贴图
half4 maskTexColor = SAMPLE_TEXTURE2D(tex, samplerState,uv);
//maskTexColor *= _AddTexColor.rgba;
//遮罩贴图是否使用R通道作为遮罩源头
half mask = lerp(maskTexColor.a, maskTexColor.r, useRChannel);
mask *= maskScale;
scrColor = lerp(scrColor, scrColor * maskTexColor.rgb, isMaskColor);
scrAlpha = scrAlpha * mask;
return half4(scrColor, scrAlpha);
}
half4 AddTexture(float2 uv, Texture2D tex, SamplerState samplerState,
half3 srcColor, half srcAlpha,
half4 addTexColor, half useRchannel, half blendFactor,
half4 blendMode, half blendColor, half blendAlpha)
{
half4 addColor = SAMPLE_TEXTURE2D(tex, samplerState, uv);
addColor *= addTexColor.rgba;
float3 reFineResultAddTex = addColor.rgb;
float addColorAlpha = lerp(addColor.a, addColor.r, useRchannel);
float4 blendColAddTex = lerp(float4(srcColor, srcAlpha), float4(reFineResultAddTex.rgb, addColorAlpha), blendFactor);
float4 multiplyColAddTex = float4(srcColor, srcAlpha) * float4(reFineResultAddTex.rgb, addColorAlpha);
float4 addColAddTex = float4(srcColor, srcAlpha) + float4(reFineResultAddTex.rgb, addColorAlpha);
float4x4 blendMatrix;
blendMatrix._11_21_31_41 = blendColAddTex;
blendMatrix._12_22_32_42 = addColAddTex;
blendMatrix._13_23_33_43 = multiplyColAddTex;
blendMatrix._14_24_34_44 = float4(srcColor, srcAlpha);
float4 finalColorTemp = float4(0,0,0,0);
//根据addTex的blendMode决定使用哪个数据
finalColorTemp = mul(blendMatrix, blendMode);
srcColor = lerp(srcColor, finalColorTemp.rgb, blendColor);
srcAlpha = lerp(srcAlpha, finalColorTemp.a, blendAlpha);
return half4(srcColor, srcAlpha);
}
half3 GetLitColor(half3 normal, half3 color, float3 worldPos)
{
// 主光用半lambert计算
half3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * color;
half3 worldNomal = normal;
half3 worldLightDir = normalize(_MainLightPosition.xyz);
half3 lambert = 0.5 * dot(worldNomal, worldLightDir) + 0.5;
half3 diffuse = lambert * color * _MainLightColor.xyz + ambient;
// 增加其他光源的影响
uint lightsCount = GetAdditionalLightsCount();
for (uint lightIndex = 0u; lightIndex < lightsCount; ++lightIndex)
{
Light light = GetAdditionalLight(lightIndex, worldPos);
diffuse += light.color * light.distanceAttenuation * light.shadowAttenuation;
}
return diffuse;
}
#endif

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 15557e8a2f58f5f498b2b3a6c5fddf96
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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"
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4af258f019782954c9c32cd616f51c3b
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
preprocessorOverride: 0
userData:
assetBundleName:
assetBundleVariant: