主题包初步装载
This commit is contained in:
8
Assets/Shaders/VFX.meta
Normal file
8
Assets/Shaders/VFX.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44a6be033c2af4cecaefb9b3dd0cf3a4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
363
Assets/Shaders/VFX/Pandavfx_Function.hlsl
Executable file
363
Assets/Shaders/VFX/Pandavfx_Function.hlsl
Executable 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
|
||||
7
Assets/Shaders/VFX/Pandavfx_Function.hlsl.meta
Executable file
7
Assets/Shaders/VFX/Pandavfx_Function.hlsl.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15557e8a2f58f5f498b2b3a6c5fddf96
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
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"
|
||||
}
|
||||
10
Assets/Shaders/VFX/Pandavfx_v2.3_URP.shader.meta
Executable file
10
Assets/Shaders/VFX/Pandavfx_v2.3_URP.shader.meta
Executable file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4af258f019782954c9c32cd616f51c3b
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
preprocessorOverride: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user