新增unity的牛逼shader和熊猫超级shader
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3936a867430e83f4cbda293633399068
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,100 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b7f59e54f2bfd184b9dd451a678d089b, type: 3}
|
||||
m_Name: 3DPostionShake
|
||||
m_EditorClassIdentifier:
|
||||
PositionNoise:
|
||||
- X:
|
||||
Frequency: 3.2
|
||||
Amplitude: 0.011
|
||||
Constant: 1
|
||||
Y:
|
||||
Frequency: 1.9
|
||||
Amplitude: 0.059
|
||||
Constant: 1
|
||||
Z:
|
||||
Frequency: 3.33
|
||||
Amplitude: 0.021
|
||||
Constant: 1
|
||||
- X:
|
||||
Frequency: 7.7
|
||||
Amplitude: 0.009
|
||||
Constant: 1
|
||||
Y:
|
||||
Frequency: 9.1
|
||||
Amplitude: 0.04
|
||||
Constant: 0
|
||||
Z:
|
||||
Frequency: 9.22
|
||||
Amplitude: 0.009
|
||||
Constant: 1
|
||||
- X:
|
||||
Frequency: 51.51
|
||||
Amplitude: 0.002
|
||||
Constant: 1
|
||||
Y:
|
||||
Frequency: 55.54
|
||||
Amplitude: 0.05
|
||||
Constant: 1
|
||||
Z:
|
||||
Frequency: 58.55
|
||||
Amplitude: 0.017
|
||||
Constant: 1
|
||||
OrientationNoise:
|
||||
- X:
|
||||
Frequency: 6.17
|
||||
Amplitude: 1
|
||||
Constant: 0
|
||||
Y:
|
||||
Frequency: 33.6
|
||||
Amplitude: 0.4
|
||||
Constant: 1
|
||||
Z:
|
||||
Frequency: 50
|
||||
Amplitude: 0.29
|
||||
Constant: 1
|
||||
- X:
|
||||
Frequency: 50
|
||||
Amplitude: 0.78
|
||||
Constant: 1
|
||||
Y:
|
||||
Frequency: 1.18
|
||||
Amplitude: 0.01
|
||||
Constant: 0
|
||||
Z:
|
||||
Frequency: 3.93
|
||||
Amplitude: 0.8
|
||||
Constant: 0
|
||||
- X:
|
||||
Frequency: 0
|
||||
Amplitude: 0
|
||||
Constant: 0
|
||||
Y:
|
||||
Frequency: 2.52
|
||||
Amplitude: 1.88
|
||||
Constant: 0
|
||||
Z:
|
||||
Frequency: 4.75
|
||||
Amplitude: 1.1
|
||||
Constant: 0
|
||||
- X:
|
||||
Frequency: 0
|
||||
Amplitude: 0
|
||||
Constant: 0
|
||||
Y:
|
||||
Frequency: 0
|
||||
Amplitude: 0
|
||||
Constant: 0
|
||||
Z:
|
||||
Frequency: 0
|
||||
Amplitude: 0
|
||||
Constant: 0
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3a1931bdb3088e4ebf4755df90c90e9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b3052f0c1288a045a0be3d63f109623
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,340 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.AnimatedValues;
|
||||
using System.Reflection;
|
||||
#if CINIMACHINE_3_0
|
||||
using Unity.Cinemachine;
|
||||
#endif
|
||||
using NBShader;
|
||||
|
||||
using System;
|
||||
// using Unity.Properties;
|
||||
namespace NBShaderEditor
|
||||
{
|
||||
|
||||
[CustomEditor(typeof(PostProcessingController))]
|
||||
public class PostProcessingControllerGUI : Editor
|
||||
{
|
||||
private SerializedProperty _managerProperty;
|
||||
private SerializedProperty _indexProperty;
|
||||
|
||||
private Action delayExcuteReflect = () => { };
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
PostProcessingController ppController = (PostProcessingController)target;
|
||||
serializedObject.Update();
|
||||
|
||||
_managerProperty = serializedObject.FindProperty("_manager");
|
||||
_indexProperty = serializedObject.FindProperty("_index");
|
||||
EditorGUI.BeginDisabledGroup(true);
|
||||
EditorGUILayout.PropertyField(_managerProperty);
|
||||
EditorGUI.EndDisabledGroup();
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty customScreenCenterPosProp = serializedObject.FindProperty("customScreenCenterPos");
|
||||
EditorGUILayout.PropertyField(customScreenCenterPosProp, new GUIContent("自定义屏幕中心"));
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetScreenCenterPos", ppController);
|
||||
}
|
||||
|
||||
SerializedProperty caToggleProp = serializedObject.FindProperty("chromaticAberrationToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[0], "色散", caToggleProp,
|
||||
drawEndChangeCheck: isChangeToggle => { ReflectMethod("InitAllSettings", ppController); }
|
||||
, drawBlock: isToggle =>
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty caFromDistortProp = serializedObject.FindProperty("caFromDistort");
|
||||
EditorGUILayout.PropertyField(caFromDistortProp, new GUIContent("色散UV跟随后处理扭曲"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetUVFromDistort", ppController);
|
||||
}
|
||||
|
||||
SerializedProperty caIntensityProps = serializedObject.FindProperty("chromaticAberrationIntensity");
|
||||
EditorGUILayout.PropertyField(caIntensityProps, new GUIContent("色散强度"));
|
||||
|
||||
if (!ppController.caFromDistort)
|
||||
{
|
||||
SerializedProperty caPosProp = serializedObject.FindProperty("chromaticAberrationPos");
|
||||
EditorGUILayout.PropertyField(caPosProp, new GUIContent("色散位置"));
|
||||
|
||||
SerializedProperty caRangeProp = serializedObject.FindProperty("chromaticAberrationRange");
|
||||
EditorGUILayout.PropertyField(caRangeProp, new GUIContent("色散过渡范围"));
|
||||
}
|
||||
});
|
||||
|
||||
SerializedProperty distortSpeedToggleProp = serializedObject.FindProperty("distortSpeedToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[1], "扭曲", distortSpeedToggleProp, drawEndChangeCheck:
|
||||
isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty distortScreenUVModeProp = serializedObject.FindProperty("distortScreenUVMode");
|
||||
EditorGUILayout.PropertyField(distortScreenUVModeProp, new GUIContent("后处理走常规屏幕坐标"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetUVFromDistort", ppController);
|
||||
}
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty distortSpeedTextureProp = serializedObject.FindProperty("distortSpeedTexture");
|
||||
EditorGUILayout.PropertyField(distortSpeedTextureProp, new GUIContent("后处理扭曲贴图"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("InitAllSettings", ppController);
|
||||
}
|
||||
|
||||
if (ppController.distortScreenUVMode)
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty distortTextureMidValueProp =
|
||||
serializedObject.FindProperty("distortTextureMidValue");
|
||||
EditorGUILayout.PropertyField(distortTextureMidValueProp, new GUIContent("扭曲贴图中间值"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetTexture", ppController);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SerializedProperty distortSpeedTexStProp = serializedObject.FindProperty("distortSpeedTexSt");
|
||||
EditorGUILayout.PropertyField(distortSpeedTexStProp, new GUIContent("扭曲贴图缩放平移"));
|
||||
SerializedProperty distortSpeedIntensityProp =
|
||||
serializedObject.FindProperty("distortSpeedIntensity");
|
||||
EditorGUILayout.PropertyField(distortSpeedIntensityProp, new GUIContent("扭曲强度"));
|
||||
|
||||
if (!ppController.distortScreenUVMode)
|
||||
{
|
||||
SerializedProperty distortSpeedPositionProp =
|
||||
serializedObject.FindProperty("distortSpeedPosition");
|
||||
EditorGUILayout.PropertyField(distortSpeedPositionProp, new GUIContent("扭曲位置"));
|
||||
SerializedProperty distortSpeedRangeProp = serializedObject.FindProperty("distortSpeedRange");
|
||||
EditorGUILayout.PropertyField(distortSpeedRangeProp, new GUIContent("扭曲过渡范围"));
|
||||
}
|
||||
|
||||
SerializedProperty distortSpeedMoveSpeedXProp =
|
||||
serializedObject.FindProperty("distortSpeedMoveSpeedX");
|
||||
EditorGUILayout.PropertyField(distortSpeedMoveSpeedXProp, new GUIContent("扭曲纹理流动X"));
|
||||
SerializedProperty distortSpeedMoveSpeed = serializedObject.FindProperty("distortSpeedMoveSpeed");
|
||||
EditorGUILayout.PropertyField(distortSpeedMoveSpeed, new GUIContent("扭曲纹理流动Y"));
|
||||
});
|
||||
|
||||
|
||||
SerializedProperty radialBlurToggleProp = serializedObject.FindProperty("radialBlurToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[2], "径向模糊", radialBlurToggleProp, drawEndChangeCheck:
|
||||
isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty radialBlurFromDistortProp =
|
||||
serializedObject.FindProperty("radialBlurFromDistort");
|
||||
EditorGUILayout.PropertyField(radialBlurFromDistortProp, new GUIContent("径向模糊跟随后处理扭曲"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetUVFromDistort", ppController);
|
||||
}
|
||||
|
||||
SerializedProperty radialBlurSampleCountProp =
|
||||
serializedObject.FindProperty("radialBlurSampleCount");
|
||||
EditorGUILayout.PropertyField(radialBlurSampleCountProp, new GUIContent("采样次数"));
|
||||
SerializedProperty radialBlurIntensityProp = serializedObject.FindProperty("radialBlurIntensity");
|
||||
EditorGUILayout.PropertyField(radialBlurIntensityProp, new GUIContent("强度"));
|
||||
if (!ppController.radialBlurFromDistort)
|
||||
{
|
||||
SerializedProperty radialBlurPosProp = serializedObject.FindProperty("radialBlurPos");
|
||||
EditorGUILayout.PropertyField(radialBlurPosProp, new GUIContent("位置"));
|
||||
SerializedProperty radialBlurRangeProp = serializedObject.FindProperty("radialBlurRange");
|
||||
EditorGUILayout.PropertyField(radialBlurRangeProp, new GUIContent("过渡范围"));
|
||||
}
|
||||
});
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
SerializedProperty cameraShakeToggleProp = serializedObject.FindProperty("cameraShakeToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[3], "震屏", cameraShakeToggleProp, drawEndChangeCheck:
|
||||
isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty cinemachineCameraProp = serializedObject.FindProperty("cinemachineCamera");
|
||||
EditorGUILayout.PropertyField(cinemachineCameraProp, new GUIContent("绑定Cinemachine相机"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ppController.InitCinemachineCamera();
|
||||
}
|
||||
|
||||
SerializedProperty cameraShakeIntensityProp = serializedObject.FindProperty("cameraShakeIntensity");
|
||||
EditorGUILayout.PropertyField(cameraShakeIntensityProp, new GUIContent("相机震动强度"));
|
||||
});
|
||||
#endif
|
||||
|
||||
SerializedProperty overlayTextureToggleProp = serializedObject.FindProperty("overlayTextureToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[4], "肌理叠加图", overlayTextureToggleProp,
|
||||
drawEndChangeCheck: isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty overlayTexturePolarCoordModeProp =
|
||||
serializedObject.FindProperty("overlayTexturePolarCoordMode");
|
||||
EditorGUILayout.PropertyField(overlayTexturePolarCoordModeProp, new GUIContent("肌理图极坐标模式"));
|
||||
SerializedProperty overlayTextureProp = serializedObject.FindProperty("overlayTexture");
|
||||
EditorGUILayout.PropertyField(overlayTextureProp, new GUIContent("肌理图"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetTexture", ppController);
|
||||
}
|
||||
|
||||
SerializedProperty overlayTextureStProp = serializedObject.FindProperty("overlayTextureSt");
|
||||
EditorGUILayout.PropertyField(overlayTextureStProp, new GUIContent("肌理图缩放平移"));
|
||||
SerializedProperty overlayTextureAnimProp = serializedObject.FindProperty("overlayTextureAnim");
|
||||
EditorGUILayout.PropertyField(overlayTextureAnimProp, new GUIContent("肌理图偏移动画"));
|
||||
SerializedProperty overlayTextureIntensityProp =
|
||||
serializedObject.FindProperty("overlayTextureIntensity");
|
||||
EditorGUILayout.PropertyField(overlayTextureIntensityProp, new GUIContent("肌理图强度"));
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty overlayMaskTextureProp = serializedObject.FindProperty("overlayMaskTexture");
|
||||
EditorGUILayout.PropertyField(overlayMaskTextureProp, new GUIContent("肌理蒙版图"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetTexture", ppController);
|
||||
}
|
||||
|
||||
SerializedProperty overlayMaskTextureStProp = serializedObject.FindProperty("overlayMaskTextureSt");
|
||||
EditorGUILayout.PropertyField(overlayMaskTextureStProp, new GUIContent("肌理图蒙版缩放平移"));
|
||||
|
||||
});
|
||||
|
||||
SerializedProperty flashToggleProp = serializedObject.FindProperty("flashToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[5], "反闪", flashToggleProp, drawEndChangeCheck:
|
||||
isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
SerializedProperty flashIntensityProp = serializedObject.FindProperty("flashIntensity");
|
||||
EditorGUILayout.PropertyField(flashIntensityProp, new GUIContent("反转效果强度"));
|
||||
SerializedProperty flashGradientRangeProp = serializedObject.FindProperty("flashGradientRange");
|
||||
EditorGUILayout.PropertyField(flashGradientRangeProp, new GUIContent("过渡起始亮度"));
|
||||
SerializedProperty flashContrastProp = serializedObject.FindProperty("flashContrast");
|
||||
EditorGUILayout.PropertyField(flashContrastProp, new GUIContent("过渡范围"));
|
||||
SerializedProperty flashColorProp = serializedObject.FindProperty("flashColor");
|
||||
EditorGUILayout.PropertyField(flashColorProp, new GUIContent("亮部闪颜色"));
|
||||
SerializedProperty blackFlashColorProp = serializedObject.FindProperty("blackFlashColor");
|
||||
EditorGUILayout.PropertyField(blackFlashColorProp, new GUIContent("暗部闪颜色"));
|
||||
SerializedProperty flashInvertIntensityProp = serializedObject.FindProperty("flashInvertIntensity");
|
||||
EditorGUILayout.PropertyField(flashInvertIntensityProp, new GUIContent("反转度"));
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
SerializedProperty flashTexture = serializedObject.FindProperty("flashTexture");
|
||||
EditorGUILayout.PropertyField(flashTexture, new GUIContent("反闪纹理图"));
|
||||
SerializedProperty flashTexturePolarCoordModeProp = serializedObject.FindProperty("flashTexturePolarCoordMode");
|
||||
EditorGUILayout.PropertyField(flashTexturePolarCoordModeProp, new GUIContent("反闪纹理图极坐标模式"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
ReflectMethod("SetTexture", ppController);
|
||||
}
|
||||
SerializedProperty flashTextureScaleOffsetProp = serializedObject.FindProperty("flashTextureScaleOffset");
|
||||
EditorGUILayout.PropertyField(flashTextureScaleOffsetProp, new GUIContent("反闪纹理图缩放平移"));
|
||||
SerializedProperty flashVecProp = serializedObject.FindProperty("flashVec");
|
||||
EditorGUILayout.PropertyField(flashVecProp, new GUIContent("反闪纹理图偏移速度"));
|
||||
SerializedProperty flashDeSaturateIntensityProp = serializedObject.FindProperty("flashDeSaturateIntensity");
|
||||
EditorGUILayout.PropertyField(flashDeSaturateIntensityProp, new GUIContent("纹理图Pow"));
|
||||
SerializedProperty flashTextureIntensityProp = serializedObject.FindProperty("flashTextureIntensity");
|
||||
EditorGUILayout.PropertyField(flashTextureIntensityProp, new GUIContent("纹理图混合程度"));
|
||||
SerializedProperty flashVecZWProp = serializedObject.FindProperty("flashVecZW");
|
||||
EditorGUILayout.PropertyField(flashVecZWProp, new GUIContent("反闪纹理图遮罩位置/过渡范围"));
|
||||
|
||||
});
|
||||
|
||||
SerializedProperty vignetteToggleProp = serializedObject.FindProperty("vignetteToggle");
|
||||
DrawToggleFoldOut(ppController.AnimBools[6], "暗角", vignetteToggleProp, drawEndChangeCheck:
|
||||
isChangeToggle => { ReflectMethod("InitAllSettings", ppController); },
|
||||
drawBlock: isToggle =>
|
||||
{
|
||||
SerializedProperty vignetteColorProp = serializedObject.FindProperty("vignetteColor");
|
||||
EditorGUILayout.PropertyField(vignetteColorProp, new GUIContent("暗角颜色"));
|
||||
SerializedProperty vignetteIntensityProp = serializedObject.FindProperty("vignetteIntensity");
|
||||
EditorGUILayout.PropertyField(vignetteIntensityProp, new GUIContent("暗角强度"));
|
||||
SerializedProperty vignetteRoundnessProp = serializedObject.FindProperty("vignetteRoundness");
|
||||
EditorGUILayout.PropertyField(vignetteRoundnessProp, new GUIContent("暗角圆度"));
|
||||
SerializedProperty vignetteSmothnessProp = serializedObject.FindProperty("vignetteSmothness");
|
||||
EditorGUILayout.PropertyField(vignetteSmothnessProp, new GUIContent("暗角平滑度"));
|
||||
SerializedProperty vignetteFillProp = serializedObject.FindProperty("vignetteFill");
|
||||
EditorGUILayout.PropertyField(vignetteFillProp, new GUIContent("暗角填充度"));
|
||||
});
|
||||
|
||||
if (GUILayout.Button("选择当前Manager"))
|
||||
{
|
||||
ReflectMethod("FindManager", ppController);
|
||||
}
|
||||
#if CINIMACHINE_3_0
|
||||
if (GUILayout.Button("选择当前CinemachineCamera"))
|
||||
{
|
||||
ppController.FindVirtualCamera();
|
||||
}
|
||||
#endif
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
|
||||
}
|
||||
|
||||
public void DrawToggleFoldOut(AnimBool foldOutAnimBool, string label, SerializedProperty boolProperty,
|
||||
bool isIndentBlock = true,
|
||||
FontStyle fontStyle = FontStyle.Bold,
|
||||
Action<bool> drawBlock = null, Action<bool> drawEndChangeCheck = null)
|
||||
{
|
||||
if (fontStyle == FontStyle.Bold)
|
||||
{
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
var rect = EditorGUILayout.GetControlRect();
|
||||
|
||||
var foldoutRect = new Rect(rect.x, rect.y, rect.width, rect.height);
|
||||
var labelRect = new Rect(rect.x + 18f, rect.y, rect.width - 18f, rect.height);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUI.PropertyField(rect, boolProperty, new GUIContent(""));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
drawEndChangeCheck?.Invoke(boolProperty.boolValue);
|
||||
}
|
||||
|
||||
foldOutAnimBool.target = EditorGUI.Foldout(foldoutRect, foldOutAnimBool.target, string.Empty, true);
|
||||
var origFontStyle = EditorStyles.label.fontStyle;
|
||||
EditorStyles.label.fontStyle = fontStyle;
|
||||
EditorGUI.LabelField(labelRect, label);
|
||||
EditorStyles.label.fontStyle = origFontStyle;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
if (isIndentBlock) EditorGUI.indentLevel++;
|
||||
float faded = foldOutAnimBool.faded;
|
||||
if (faded == 0) faded = 0.00001f; //用于欺骗FadeGroup,不要让他真的关闭了。这样会藏不住相关的GUI。我们的目的是,GUI藏住,但是逻辑还是在跑。drawBlock要执行。
|
||||
EditorGUILayout.BeginFadeGroup(faded);
|
||||
{
|
||||
EditorGUI.BeginDisabledGroup(!boolProperty.boolValue);
|
||||
drawBlock?.Invoke(boolProperty.boolValue);
|
||||
EditorGUI.EndDisabledGroup();
|
||||
}
|
||||
EditorGUILayout.EndFadeGroup();
|
||||
if (isIndentBlock) EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
void ReflectMethod(string methodName, PostProcessingController controller)
|
||||
{
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
MethodInfo privateMethod =
|
||||
typeof(PostProcessingController).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
if (privateMethod != null)
|
||||
{
|
||||
privateMethod.Invoke(controller, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Private method " + methodName + " not found!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed187d8c0d9f5b14aa156ff45e7405c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,75 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Reflection;
|
||||
using NBShader;
|
||||
|
||||
namespace NBShaderEditor
|
||||
{
|
||||
[CustomEditor(typeof(PostProcessingManager))]
|
||||
public class PostProcessingManagerGUI : Editor
|
||||
{
|
||||
private PostProcessingManager _ppManager;
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
|
||||
_ppManager = (PostProcessingManager)target;
|
||||
serializedObject.Update();
|
||||
DrawToggle("controllerIndexFlags","_controllerIndexFlags");
|
||||
DrawToggle("色散开关",PostProcessingManager.chromaticAberrationToggles);
|
||||
DrawToggle("径向扭曲开关",PostProcessingManager.distortSpeedToggles);
|
||||
DrawToggle("径向模糊开关",PostProcessingManager.radialBlurToggles);
|
||||
#if CINIMACHINE_3_0
|
||||
DrawToggle("震屏开关",PostProcessingManager.cameraShakeToggles);
|
||||
#endif
|
||||
DrawToggle("肌理开关",PostProcessingManager.overlayTextureToggles);
|
||||
DrawToggle("黑白闪开关",PostProcessingManager.flashToggles);
|
||||
DrawToggle("暗角开关",PostProcessingManager.vignetteToggles);
|
||||
if (PostProcessingManager.material)
|
||||
{
|
||||
DrawToggle32("ShaderFlags", PostProcessingManager.material.GetInteger(NBPostProcessFlags.FlagsId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DrawToggle(string label, string propertyName)
|
||||
{
|
||||
int intValue = ReflectIntValue(propertyName);
|
||||
DrawToggle(label,intValue);
|
||||
}
|
||||
|
||||
void DrawToggle(string label, int intValue)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField(label);
|
||||
EditorGUILayout.LabelField(BinaryIntDrawer.DrawBinaryInt(intValue,8));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
void DrawToggle32(string label, int intValue)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField(label);
|
||||
EditorGUILayout.LabelField(BinaryIntDrawer.DrawBinaryInt(intValue,32));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
int ReflectIntValue(string propertyName)
|
||||
{
|
||||
|
||||
FieldInfo privateField = typeof(PostProcessingManager).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
if (privateField != null)
|
||||
{
|
||||
// 获取私有字段的值
|
||||
int value = (int)privateField.GetValue(_ppManager);
|
||||
return value;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("PostProcessingManagerGUI获取变量错误");
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7bf2aa095c38c4972ba5c008ae40a3f3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.postprocessing.Editor",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:a1f23b61b189bd949adfd0f7a353734f",
|
||||
"GUID:8495541fcd41b0c40b5b6e6e7a7639d1",
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2",
|
||||
"GUID:4307f53044263cf4b835bd812fc161a4"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [
|
||||
{
|
||||
"name": "com.unity.cinemachine",
|
||||
"expression": "3.0",
|
||||
"define": "CINIMACHINE_3_0"
|
||||
}
|
||||
],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 12fb0c569d0951c40a3f4013cd8758b5
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f0e3118134388949838b53cc48e9c89
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
|
||||
# Rider ignored files
|
||||
/modules.xml
|
||||
/projectSettingsUpdater.xml
|
||||
/.idea.Runtime.iml
|
||||
/contentModel.xml
|
||||
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||
</project>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="UserContentModel">
|
||||
<attachedFolders />
|
||||
<explicitIncludes />
|
||||
<explicitExcludes />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,234 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class DisturbanceMaskRenderPass : ScriptableRenderPass
|
||||
{
|
||||
private ProfilingSampler _profilingSampler;
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
private RTHandle _DisturbanceMaskRTHandle;
|
||||
private RTHandle _cameraDepthRTHandle;
|
||||
private RTHandle _DownRT;
|
||||
#else
|
||||
private static readonly int _DisturbanceMaskRTID = Shader.PropertyToID("_DisturbanceMaskRT");
|
||||
private static readonly int _DownRTID = Shader.PropertyToID("_DisturbanceMaskTex");
|
||||
private RenderTargetIdentifier _DisturbanceMaskRTHandle = new RenderTargetIdentifier (_DisturbanceMaskRTID);
|
||||
private RenderTargetIdentifier _cameraDepthRTHandle;
|
||||
private RenderTargetIdentifier _DownRT = new RenderTargetIdentifier (_DownRTID);
|
||||
#endif
|
||||
private Material tempMat;
|
||||
|
||||
private readonly Downsampling _downSampling;
|
||||
|
||||
private Material _renderMaskMat ;
|
||||
// public LayerMask _DisturbanceMaskLayer = 1 << 25;
|
||||
private FilteringSettings _Filtering;
|
||||
private static readonly int CameraTexture = Shader.PropertyToID("_CameraTexture");
|
||||
private static readonly int SampleOffset = Shader.PropertyToID("_SampleOffset");
|
||||
|
||||
private readonly List<ShaderTagId> _shaderTag = new List<ShaderTagId>()
|
||||
{
|
||||
// new ShaderTagId("UniversalForward"),
|
||||
// new ShaderTagId("SRPDefaultUnlit"),
|
||||
// new ShaderTagId("UniversalForwardOnly")
|
||||
new ShaderTagId("NBDeferredDistortPass")
|
||||
};
|
||||
|
||||
public DisturbanceMaskRenderPass(ProfilingSampler profilingSampler,Material DisturbanceMaskMat, Downsampling downSampling)
|
||||
{
|
||||
_profilingSampler = profilingSampler;
|
||||
_renderMaskMat = DisturbanceMaskMat;
|
||||
_downSampling = downSampling;
|
||||
}
|
||||
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
|
||||
public void SetUp ( RTHandle cameraRTHandle )
|
||||
{
|
||||
|
||||
RenderTextureDescriptor descrip = cameraRTHandle.rt.descriptor;
|
||||
|
||||
descrip.colorFormat = RenderTextureFormat.RGHalf;
|
||||
descrip.depthBufferBits = 0;
|
||||
RenderingUtils.ReAllocateIfNeeded(ref _DisturbanceMaskRTHandle, descrip, name: "DisturbanceMaskRT");
|
||||
|
||||
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
descrip.width /= 2;
|
||||
descrip.height /= 2;
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
descrip.width /= 4;
|
||||
descrip.height /= 4;
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
descrip.width /= 4;
|
||||
descrip.height /= 4;
|
||||
break;
|
||||
}
|
||||
RenderingUtils.ReAllocateIfNeeded(ref _DownRT, descrip, name:"MaskDownCopyRT");
|
||||
}
|
||||
#else
|
||||
//在AddPass之前触发
|
||||
|
||||
public void SetUpDisturbanceMask(RenderTextureDescriptor descrip ,CommandBuffer cmd)
|
||||
{
|
||||
|
||||
descrip.colorFormat = RenderTextureFormat.RGHalf;
|
||||
descrip.depthBufferBits = 0;
|
||||
cmd.GetTemporaryRT(_DisturbanceMaskRTID, descrip,FilterMode.Bilinear);
|
||||
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
descrip.width /= 2;
|
||||
descrip.height /= 2;
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
descrip.width /= 4;
|
||||
descrip.height /= 4;
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
descrip.width /= 4;
|
||||
descrip.height /= 4;
|
||||
break;
|
||||
}
|
||||
cmd.GetTemporaryRT(_DownRTID, descrip,FilterMode.Bilinear);
|
||||
}
|
||||
#endif
|
||||
|
||||
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
|
||||
{
|
||||
_Filtering = new FilteringSettings(RenderQueueRange.all);
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_cameraDepthRTHandle = renderingData.cameraData.renderer.cameraDepthTargetHandle;
|
||||
#else
|
||||
_cameraDepthRTHandle = renderingData.cameraData.renderer.cameraDepthTarget;
|
||||
SetUpDisturbanceMask(renderingData.cameraData.cameraTargetDescriptor,cmd);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
private readonly Color _clearDisturbanceMaskColor = new Color(0f, 0f, 0f, 1f);
|
||||
|
||||
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
|
||||
{
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
ConfigureTarget(_DisturbanceMaskRTHandle, _cameraDepthRTHandle);
|
||||
#else
|
||||
ConfigureTarget(_DisturbanceMaskRTID, _cameraDepthRTHandle);
|
||||
|
||||
#endif
|
||||
//将RT清空
|
||||
ConfigureClear(ClearFlag.Color, _clearDisturbanceMaskColor);
|
||||
}
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
|
||||
if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView))
|
||||
return;
|
||||
|
||||
if (!_renderMaskMat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var DisturbanceDraw = CreateDrawingSettings(_shaderTag, ref renderingData, renderingData.cameraData.defaultOpaqueSortFlags);
|
||||
|
||||
CommandBuffer cmd = CommandBufferPool.Get();
|
||||
using (new ProfilingScope(cmd, _profilingSampler))
|
||||
{
|
||||
context.DrawRenderers(renderingData.cullResults, ref DisturbanceDraw, ref _Filtering);
|
||||
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_renderMaskMat.SetTexture(CameraTexture, _DisturbanceMaskRTHandle);
|
||||
cmd.SetRenderTarget((RenderTargetIdentifier)_DownRT);
|
||||
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, Vector2.one, _renderMaskMat, 0);
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, Vector2.one, _renderMaskMat, 0);
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
_renderMaskMat.SetFloat(SampleOffset, 2);
|
||||
Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, Vector2.one, _renderMaskMat, 1);
|
||||
break;
|
||||
default:
|
||||
Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, Vector2.one, _renderMaskMat, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// cmd.SetGlobalTexture(_DisturbanceMaskRTID, _DisturbanceMaskRTHandle);
|
||||
//Bug:在非播放状态时,_DisturbanceMaskRTID在这里会经常丢失。造成画面闪烁。但是,只要有一个DistortObject在Scene中,并LockInspector,就不会闪烁,非常奇怪。
|
||||
cmd.SetGlobalTexture(CameraTexture, _DisturbanceMaskRTHandle);
|
||||
// _renderMaskMat.SetTexture(CameraTexture, Shader.GetGlobalTexture(_DisturbanceMaskRTID));
|
||||
cmd.SetRenderTarget(_DownRT);
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
// Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2);
|
||||
Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0);
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
// Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2);
|
||||
Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0);
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
_renderMaskMat.SetFloat(SampleOffset, 2);
|
||||
// Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 1);
|
||||
// cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 1);
|
||||
// cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 3);
|
||||
Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,1);
|
||||
break;
|
||||
default:
|
||||
// Blitter.BlitTexture(cmd, _DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.Blit(_DisturbanceMaskRTHandle, _DownRT, _renderMaskMat, 0);
|
||||
// cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _renderMaskMat, 0, 2);
|
||||
Blit(cmd, _DisturbanceMaskRTHandle,_DownRT,_renderMaskMat,0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
cmd.SetGlobalTexture("_DisturbanceMaskTex", _DownRT);
|
||||
|
||||
}
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
|
||||
#if !UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
// Cleanup any allocated resources that were created during the execution of this render pass.
|
||||
public override void OnCameraCleanup(CommandBuffer cmd)
|
||||
{
|
||||
cmd.ReleaseTemporaryRT(_DisturbanceMaskRTID);
|
||||
cmd.ReleaseTemporaryRT(_DownRTID);
|
||||
}
|
||||
|
||||
//JustForSimple
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
#else
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_DisturbanceMaskRTHandle?.Release();
|
||||
_DownRT?.Release();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1e411db03f9f4d85aa8a5e485158c961
|
||||
timeCreated: 1757141532
|
||||
@@ -0,0 +1,167 @@
|
||||
// using ConfigSystem.MConfig;
|
||||
// using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class NBPostProcess : ScriptableRendererFeature
|
||||
{
|
||||
private NBPostProcessRenderPass _renderPass;
|
||||
private DisturbanceMaskRenderPass _disturbanceMaskRenderPass;
|
||||
private ScreenColorRenderPass _screenColorRenderPass;
|
||||
private RenderCameraOpaqueDistortObjectPass _renderCameraOpaqueDistortObjectPass;
|
||||
|
||||
|
||||
public static Material NBPostProcessMaterial;
|
||||
|
||||
//public MaskFormat maskFormat = MaskFormat.RG32;
|
||||
public Downsampling downSampling = Downsampling.None;
|
||||
|
||||
private Material _disturbanceDownSampleMat;
|
||||
private Material _screenColorDownSampleMat;
|
||||
private float _screenHeight;
|
||||
private ProfilingSampler _profilingSampler;
|
||||
|
||||
// private PostProcessingManager manager;-+
|
||||
static Mesh s_FullscreenTriangle;
|
||||
/// <summary>
|
||||
/// A fullscreen triangle mesh.抄自Unity的后处理包,拿到一个全屏的Triangle。
|
||||
/// </summary>
|
||||
static Mesh fullscreenTriangle;
|
||||
|
||||
|
||||
private bool canFind = false;
|
||||
public override void Create()
|
||||
{
|
||||
|
||||
if (Shader.Find("XuanXuan/ColorBlit") == null ||
|
||||
Shader.Find("XuanXuan/Postprocess/NBPostProcessUber") == null)
|
||||
{
|
||||
canFind = false;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
canFind = true;
|
||||
}
|
||||
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_screenColorDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBlit"));
|
||||
#else
|
||||
_screenColorDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBufferBlit"));
|
||||
#endif
|
||||
_screenColorRenderPass = new ScreenColorRenderPass(_screenColorDownSampleMat, downSampling);
|
||||
_screenColorRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
|
||||
|
||||
|
||||
_profilingSampler = new ProfilingSampler("DisturbanceRender");
|
||||
_disturbanceDownSampleMat = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/ColorBlit"));
|
||||
_disturbanceMaskRenderPass = new DisturbanceMaskRenderPass(_profilingSampler,_disturbanceDownSampleMat,downSampling);
|
||||
_disturbanceMaskRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
|
||||
|
||||
_renderCameraOpaqueDistortObjectPass = new RenderCameraOpaqueDistortObjectPass();
|
||||
_renderCameraOpaqueDistortObjectPass.renderPassEvent = RenderPassEvent.BeforeRenderingTransparents;
|
||||
|
||||
#if !UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_profilingSampler = new ProfilingSampler("DisturbanceDownRTBlit");
|
||||
#endif
|
||||
|
||||
if (fullscreenTriangle == null)
|
||||
{
|
||||
/*UNITY_NEAR_CLIP_VALUE*/
|
||||
float nearClipZ = -1;
|
||||
if (SystemInfo.usesReversedZBuffer)
|
||||
nearClipZ = 1;
|
||||
|
||||
fullscreenTriangle = new Mesh();
|
||||
fullscreenTriangle.vertices = GetFullScreenTriangleVertexPosition(nearClipZ);
|
||||
fullscreenTriangle.uv = GetFullScreenTriangleTexCoord();
|
||||
fullscreenTriangle.triangles = new int[3] { 0, 1, 2 };
|
||||
}
|
||||
|
||||
// Shader shader = Shader.Find("XuanXuan/Postprocess/NBPostProcessUber");
|
||||
NBPostProcessMaterial = CoreUtils.CreateEngineMaterial(Shader.Find("XuanXuan/Postprocess/NBPostProcessUber"));
|
||||
|
||||
PostProcessingManager.InitMat();
|
||||
|
||||
|
||||
_renderPass = new NBPostProcessRenderPass(NBPostProcessMaterial,fullscreenTriangle);
|
||||
_renderPass.renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
|
||||
|
||||
}
|
||||
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
|
||||
public override void SetupRenderPasses(ScriptableRenderer renderer, in RenderingData renderingData)
|
||||
{
|
||||
if ((renderingData.cameraData.cameraType == CameraType.Game ||
|
||||
renderingData.cameraData.cameraType == CameraType.SceneView) && canFind)
|
||||
{
|
||||
|
||||
_disturbanceMaskRenderPass.ConfigureInput(ScriptableRenderPassInput.Color);
|
||||
_disturbanceMaskRenderPass.SetUp(renderer.cameraColorTargetHandle);
|
||||
|
||||
_screenColorRenderPass.ConfigureInput(ScriptableRenderPassInput.Color);
|
||||
_screenColorRenderPass.SetUp(renderer.cameraColorTargetHandle);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
|
||||
{
|
||||
if ((renderingData.cameraData.cameraType == CameraType.Game ||
|
||||
renderingData.cameraData.cameraType == CameraType.SceneView) && canFind)
|
||||
{
|
||||
|
||||
#if !UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_screenColorRenderPass.ConfigureInput(ScriptableRenderPassInput.Color);
|
||||
_screenColorRenderPass.SetUp(renderer);
|
||||
#endif
|
||||
renderer.EnqueuePass(_renderCameraOpaqueDistortObjectPass);
|
||||
renderer.EnqueuePass(_screenColorRenderPass);
|
||||
renderer.EnqueuePass(_disturbanceMaskRenderPass);
|
||||
renderer.EnqueuePass(_renderPass);
|
||||
}
|
||||
}
|
||||
|
||||
// Should match Common.hlsl
|
||||
static Vector3[] GetFullScreenTriangleVertexPosition(float z /*= UNITY_NEAR_CLIP_VALUE*/)
|
||||
{
|
||||
var r = new Vector3[3];
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
Vector2 uv = new Vector2((i << 1) & 2, i & 2);
|
||||
r[i] = new Vector3(uv.x * 2.0f - 1.0f, uv.y * 2.0f - 1.0f, z);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
// Should match Common.hlsl
|
||||
static Vector2[] GetFullScreenTriangleTexCoord()
|
||||
{
|
||||
var r = new Vector2[3];
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (SystemInfo.graphicsUVStartsAtTop)
|
||||
r[i] = new Vector2((i << 1) & 2, 1.0f - (i & 2));
|
||||
else
|
||||
r[i] = new Vector2((i << 1) & 2, i & 2);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
CoreUtils.Destroy(_disturbanceDownSampleMat);
|
||||
//CoreUtils.Destroy(NBPostProcessMaterial);
|
||||
_disturbanceMaskRenderPass?.Dispose();
|
||||
CoreUtils.Destroy(_screenColorDownSampleMat);
|
||||
_screenColorRenderPass?.Dispose();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d5a1f9350d8fc2c46a372955ef0e73b5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,53 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
namespace NBShader
|
||||
{
|
||||
public class NBPostProcessRenderPass : ScriptableRenderPass
|
||||
{
|
||||
private ProfilingSampler _profilingSampler;
|
||||
public static Material _material;
|
||||
public Mesh _fullScreenMesh;
|
||||
|
||||
public NBPostProcessFlags _shaderFlag => PostProcessingManager.flags;
|
||||
|
||||
private Vector4 _lastOutlineProps;
|
||||
public Vector4 outLinePorps = Vector4.one;
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView))
|
||||
return;
|
||||
|
||||
// if(!_shaderFlag.CheckFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON))return;//Disturbance需要执行
|
||||
|
||||
//ConfigureTarget()
|
||||
CommandBuffer cmdBuffer = CommandBufferPool.Get();
|
||||
cmdBuffer.Clear();
|
||||
// cmdBuffer.name = "NBPostProcess";
|
||||
|
||||
using (new ProfilingScope(cmdBuffer,_profilingSampler))
|
||||
{
|
||||
Camera camera = renderingData.cameraData.camera;
|
||||
cmdBuffer.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity);
|
||||
|
||||
if(_material == null) return;
|
||||
cmdBuffer.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0, 0);
|
||||
|
||||
cmdBuffer.SetViewProjectionMatrices(camera.worldToCameraMatrix, camera.projectionMatrix);
|
||||
|
||||
}
|
||||
|
||||
context.ExecuteCommandBuffer(cmdBuffer);
|
||||
CommandBufferPool.Release(cmdBuffer);
|
||||
}
|
||||
|
||||
public NBPostProcessRenderPass(Material mat,Mesh mesh)
|
||||
{
|
||||
_material = mat;
|
||||
_fullScreenMesh = mesh;
|
||||
_profilingSampler ??= new ProfilingSampler("NBPostProcess");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2a20551d205e487f89b91897e9cb7a43
|
||||
timeCreated: 1757141611
|
||||
@@ -0,0 +1,40 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class NBPostProcessFlags : ShaderFlagsBase
|
||||
{
|
||||
public const string FlagsName = "_NBPostProcessFlags";
|
||||
public static int FlagsId = Shader.PropertyToID(FlagsName);
|
||||
|
||||
public override int GetShaderFlagsId(int index = 0)
|
||||
{
|
||||
return FlagsId;
|
||||
}
|
||||
|
||||
protected override string GetShaderFlagsName(int index = 0)
|
||||
{
|
||||
return FlagsName;
|
||||
}
|
||||
|
||||
public NBPostProcessFlags(Material material = null) : base(material)
|
||||
{
|
||||
}
|
||||
|
||||
public const int FLAG_BIT_NB_POSTPROCESS_ON = 1 << 0;
|
||||
public const int FLAG_BIT_DISTORT_SPEED = 1 << 1;
|
||||
public const int FLAG_BIT_OVERLAYTEXTURE = 1 << 2;
|
||||
public const int FLAG_BIT_FLASH = 1 << 3;
|
||||
public const int FLAG_BIT_CHORATICABERRAT = 1 << 4;
|
||||
public const int FLAG_BIT_RADIALBLUR = 1 << 5;
|
||||
public const int FLAG_BIT_VIGNETTE = 1 << 6;
|
||||
public const int FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD = 1 << 7;
|
||||
public const int FLAG_BIT_OVERLAYTEXTURE_MASKMAP = 1 << 8;
|
||||
public const int FLAG_BIT_POST_DISTORT_SCREEN_UV = 1 << 9; //默认来自于PolarUV
|
||||
public const int FLAG_BIT_RADIALBLUR_BY_DISTORT = 1 << 10; //默认来自于PolarUV
|
||||
public const int FLAG_BIT_CHORATICABERRAT_BY_DISTORT = 1 << 11; //默认来自于PolarUV
|
||||
public const int FLAG_BIT_FLASHTEXTURE_POLLARCOORD = 1 << 12;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be6a95b97f4bc3846bdada66138f6da1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,518 @@
|
||||
using UnityEngine;
|
||||
#if CINIMACHINE_3_0
|
||||
using Unity.Cinemachine;
|
||||
#endif
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor.AnimatedValues;
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
public class PostProcessingController : MonoBehaviour
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
public AnimBool[] AnimBools = new AnimBool[10];
|
||||
#endif
|
||||
[SerializeField]
|
||||
private PostProcessingManager _manager;
|
||||
|
||||
public int index
|
||||
{
|
||||
get
|
||||
{
|
||||
return _index;
|
||||
}
|
||||
}
|
||||
private int _index;
|
||||
public void SetIndex(int controllerIndex)
|
||||
{
|
||||
_index = controllerIndex;
|
||||
}
|
||||
|
||||
public Vector2 customScreenCenterPos = new Vector2(0.5f, 0.5f);
|
||||
private Vector2 _lastCustomScreenCenterPos = new Vector2(0.5f, 0.5f);
|
||||
public bool chromaticAberrationToggle = false;
|
||||
public bool caFromDistort = false;
|
||||
public float chromaticAberrationIntensity = 0.2f;
|
||||
public float chromaticAberrationPos = 0.5f;
|
||||
public float chromaticAberrationRange = 0.5f;
|
||||
public bool distortSpeedToggle = false;
|
||||
public bool distortScreenUVMode = false;
|
||||
public Texture2D distortSpeedTexture;
|
||||
public float distortTextureMidValue = 1;
|
||||
public Vector4 distortSpeedTexSt = new Vector4(30,1,0,0);
|
||||
public float distortSpeedIntensity = 1f;
|
||||
public float distortSpeedPosition = 0.5f;
|
||||
public float distortSpeedRange = 1f;
|
||||
public float distortSpeedMoveSpeedX = 0.1f;
|
||||
public float distortSpeedMoveSpeed = -0.5f;//因为老的做法是没有X偏移的,只有Y的偏移,不改变量兼容老做法。
|
||||
private readonly int _distortSpeedTextureID = Shader.PropertyToID("_SpeedDistortMap");
|
||||
private readonly int _distortSpeedTextureStID = Shader.PropertyToID("_SpeedDistortMap_ST");
|
||||
public bool radialBlurToggle = false;
|
||||
public bool radialBlurFromDistort = false;
|
||||
[Range(1,12)]
|
||||
public int radialBlurSampleCount = 4;
|
||||
public float radialBlurIntensity = 1;
|
||||
public float radialBlurPos = 0.5f;
|
||||
public float radialBlurRange = 0.5f;
|
||||
#if CINIMACHINE_3_0
|
||||
public bool cameraShakeToggle = false;
|
||||
public CinemachineCamera cinemachineCamera;
|
||||
public float cameraShakeIntensity;
|
||||
#endif
|
||||
|
||||
public bool overlayTextureToggle = false;
|
||||
public bool overlayTexturePolarCoordMode = false;
|
||||
public Texture2D overlayTexture;
|
||||
private readonly int _overlayTextureID = Shader.PropertyToID("_TextureOverlay");
|
||||
private readonly int _overlayTextureStID = Shader.PropertyToID("_TextureOverlay_ST");
|
||||
private readonly int _textureOverlayAnimProperty = Shader.PropertyToID("_TextureOverlayAnim");
|
||||
private readonly int _textureOverlayMaskProperty = Shader.PropertyToID("_TextureOverlayMask");
|
||||
private readonly int _textureOverlayMaskStProperty = Shader.PropertyToID("_TextureOverlayMask_ST");
|
||||
public Vector4 overlayTextureSt = new Vector4(1, 1, 0, 0);
|
||||
public Vector2 overlayTextureAnim = new Vector2(0, 0);
|
||||
public float overlayTextureIntensity = 1f;
|
||||
public Texture2D overlayMaskTexture;
|
||||
public Vector4 overlayMaskTextureSt;
|
||||
|
||||
public bool flashToggle = false;
|
||||
[Range(0,1)]
|
||||
public float flashIntensity = 1f;
|
||||
[Range(0,1)]
|
||||
public float flashInvertIntensity = 0f;
|
||||
public float flashDeSaturateIntensity = 1f;
|
||||
public float flashGradientRange = 0.25f;
|
||||
public float flashContrast = 0.5f;
|
||||
[ColorUsage(false, true)]
|
||||
public Color flashColor = new Color(2f,2f,2f,1f);
|
||||
[ColorUsage(false, true)]
|
||||
public Color blackFlashColor = new Color(0f,0f,0f,1f);
|
||||
private readonly int _flashTextureProperty = Shader.PropertyToID("_FlashTexture");
|
||||
public Texture2D flashTexture;
|
||||
public Vector4 flashTextureScaleOffset = new Vector4(10f,0.1f,0f,0f);
|
||||
public bool flashTexturePolarCoordMode = true;
|
||||
public Vector2 flashVec = new Vector2(0, 0.05f);
|
||||
public Vector2 flashVecZW = new Vector2(0.2f, 0.2f);//FlashTextureMask
|
||||
public float flashTextureIntensity = 0.5f;
|
||||
|
||||
public bool vignetteToggle = false;
|
||||
public Color vignetteColor = Color.black;
|
||||
private readonly int _vignetteColorID = Shader.PropertyToID("_VignetteColor");
|
||||
public float vignetteIntensity = 1;
|
||||
public float vignetteRoundness = 1;
|
||||
public float vignetteSmothness = 10;
|
||||
[Range(0,1)]
|
||||
public float vignetteFill = 0f;
|
||||
|
||||
|
||||
public void InitController()
|
||||
{
|
||||
if (this.isActiveAndEnabled == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_manager = PostProcessingManager.Instance;
|
||||
|
||||
_manager.InitController(this);
|
||||
InitAllSettings();
|
||||
|
||||
}
|
||||
|
||||
void InitAllSettings()
|
||||
{
|
||||
SetScreenCenterPos();
|
||||
SetToggles();
|
||||
SetUVFromDistort();
|
||||
SetTexture();
|
||||
#if CINIMACHINE_3_0
|
||||
InitCinemachineCamera();
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetScreenCenterPos()
|
||||
{
|
||||
PostProcessingManager.customScreenCenterPos = customScreenCenterPos;
|
||||
_lastCustomScreenCenterPos = customScreenCenterPos;
|
||||
}
|
||||
|
||||
void SetUVFromDistort()
|
||||
{
|
||||
PostProcessingManager.isDistortScreenUVMode = distortScreenUVMode;
|
||||
PostProcessingManager.isCaByDistort = caFromDistort;
|
||||
PostProcessingManager.isRadialBlurByDistort = radialBlurFromDistort;
|
||||
}
|
||||
|
||||
private void SetTexture()
|
||||
{
|
||||
if(PostProcessingManager.material == null) return;
|
||||
if (distortSpeedToggle)
|
||||
{
|
||||
if (distortSpeedTexture != null)
|
||||
{
|
||||
PostProcessingManager.material.SetTexture(_distortSpeedTextureID, distortSpeedTexture);
|
||||
PostProcessingManager.distortTextureMidValue = distortTextureMidValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
PostProcessingManager.material.SetTexture(_distortSpeedTextureID, null);
|
||||
}
|
||||
}
|
||||
|
||||
if (flashToggle&& flashTexture)
|
||||
{
|
||||
PostProcessingManager.material.SetTexture(_flashTextureProperty, flashTexture);
|
||||
if (flashTexturePolarCoordMode)
|
||||
{
|
||||
PostProcessingManager.flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_FLASHTEXTURE_POLLARCOORD);
|
||||
}
|
||||
else
|
||||
{
|
||||
PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_FLASHTEXTURE_POLLARCOORD);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PostProcessingManager.material.SetTexture(_flashTextureProperty, null);
|
||||
PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_FLASHTEXTURE_POLLARCOORD);
|
||||
}
|
||||
|
||||
if (overlayTextureToggle)
|
||||
{
|
||||
if (overlayTexturePolarCoordMode)
|
||||
{
|
||||
PostProcessingManager.flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD);
|
||||
}
|
||||
else
|
||||
{
|
||||
PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD);
|
||||
}
|
||||
|
||||
if (overlayTexture)
|
||||
{
|
||||
Debug.Log("SetOverlayTexture");
|
||||
PostProcessingManager.material.SetTexture(_overlayTextureID,overlayTexture);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("ClearOverlayTexture");
|
||||
PostProcessingManager.material.SetTexture(_overlayTextureID,null);
|
||||
}
|
||||
|
||||
if (overlayMaskTexture)
|
||||
{
|
||||
Debug.Log("SetOverlayMaskTexture");
|
||||
PostProcessingManager.material.SetTexture(_textureOverlayMaskProperty,overlayMaskTexture);
|
||||
PostProcessingManager.flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_MASKMAP);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("ClearOverlayMaskTexture");
|
||||
PostProcessingManager.flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE_MASKMAP);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void SetToggles()
|
||||
{
|
||||
SetBit(ref PostProcessingManager.chromaticAberrationToggles,index,chromaticAberrationToggle);
|
||||
SetBit(ref PostProcessingManager.distortSpeedToggles,index,distortSpeedToggle);
|
||||
#if CINIMACHINE_3_0
|
||||
SetBit(ref PostProcessingManager.cameraShakeToggles,index,cameraShakeToggle);
|
||||
#endif
|
||||
SetBit(ref PostProcessingManager.overlayTextureToggles,index,overlayTextureToggle);
|
||||
SetBit(ref PostProcessingManager.flashToggles,index,flashToggle);
|
||||
SetBit(ref PostProcessingManager.radialBlurToggles,index,radialBlurToggle);
|
||||
SetBit(ref PostProcessingManager.vignetteToggles,index,vignetteToggle);
|
||||
|
||||
#if UNITY_EDITOR
|
||||
SetTexture();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
private void ClearToggles()
|
||||
{
|
||||
SetBit(ref PostProcessingManager.chromaticAberrationToggles,index,false);
|
||||
SetBit(ref PostProcessingManager.distortSpeedToggles,index,false);
|
||||
#if CINIMACHINE_3_0
|
||||
SetBit(ref PostProcessingManager.cameraShakeToggles,index,false);
|
||||
#endif
|
||||
SetBit(ref PostProcessingManager.overlayTextureToggles,index,false);
|
||||
SetBit(ref PostProcessingManager.flashToggles,index,false);
|
||||
SetBit(ref PostProcessingManager.radialBlurToggles,index,false);
|
||||
SetBit(ref PostProcessingManager.vignetteToggles,index,false);
|
||||
}
|
||||
|
||||
private bool _lastChormaticAberrationToggle = false;
|
||||
private bool _lastDistortSpeedToggle = false;
|
||||
#if CINIMACHINE_3_0
|
||||
private bool _lastCamerashakeToggle = false;
|
||||
#endif
|
||||
private bool _lastOverlayTextureToggle = false;
|
||||
private bool _lastFlashToggle= false;
|
||||
private bool _lastRadialBlurToggle= false;
|
||||
private bool _lastVignetteToggle= false;
|
||||
|
||||
bool checkIfToggleChanged(ref bool lastTogggle, bool currentToggle)
|
||||
{
|
||||
if (lastTogggle != currentToggle)
|
||||
{
|
||||
lastTogggle = currentToggle;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void SetBit(ref int bit, int index,bool bitToggle)
|
||||
{
|
||||
if (bitToggle)
|
||||
{
|
||||
bit |= (1 << index);
|
||||
}
|
||||
else
|
||||
{
|
||||
bit &= ~(1 << index);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
void FindManager()
|
||||
{
|
||||
UnityEditor.Selection.activeObject = _manager.gameObject;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
#if UNITY_EDITOR
|
||||
public void FindVirtualCamera()
|
||||
{
|
||||
UnityEditor.Selection.activeObject = _manager.currentVirtualCamera;
|
||||
}
|
||||
#endif
|
||||
|
||||
public void InitCinemachineCamera()
|
||||
{
|
||||
if (cinemachineCamera)
|
||||
{
|
||||
if (!cinemachineCamera.gameObject.TryGetComponent<CinemachineBasicMultiChannelPerlin>(out var _perlin))
|
||||
{
|
||||
_perlin = cinemachineCamera.gameObject.AddComponent<CinemachineBasicMultiChannelPerlin>();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (_perlin)
|
||||
{
|
||||
if (_perlin.NoiseProfile == null)
|
||||
{
|
||||
_perlin.NoiseProfile =
|
||||
UnityEditor.AssetDatabase.LoadAssetAtPath<NoiseSettings>(
|
||||
"Packages/com.xuanxuan.nb.fx/NBPostProcessing/3DPostionShake.asset");
|
||||
_perlin.FrequencyGain = 5f; //做一个自定义
|
||||
}
|
||||
_perlin.AmplitudeGain = 0f; //一开始先不要震动
|
||||
}
|
||||
|
||||
if (_manager)
|
||||
{
|
||||
_manager.currentVirtualCamera = cinemachineCamera;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// Debug.Log("InitController");
|
||||
InitController();
|
||||
#if UNITY_EDITOR
|
||||
// 注册编辑器帧更新事件
|
||||
EditorApplication.update += ControllerEditorUpdate;
|
||||
_manager.ReRegistEditorUpdate();//保证Manager的注册在最后
|
||||
#endif
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
// Debug.Log("EndController");
|
||||
EndController();
|
||||
#if UNITY_EDITOR
|
||||
// 注册编辑器帧更新事件
|
||||
EditorApplication.update -= ControllerEditorUpdate;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool isFirstUpdate = true;
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
if (isFirstUpdate)
|
||||
{
|
||||
isFirstUpdate = false;
|
||||
return;
|
||||
}
|
||||
if(!PostProcessingManager.material) return;
|
||||
//#if UNITY_EDITOR
|
||||
//Odin的ToggleGroup和OnValueChange功能冲突,导致不一定生效。不好调试。所以用手动的方式更新。
|
||||
bool isToggleChanged = false;
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastChormaticAberrationToggle, chromaticAberrationToggle);
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastDistortSpeedToggle, distortSpeedToggle);
|
||||
#if CINIMACHINE_3_0
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastCamerashakeToggle, cameraShakeToggle);
|
||||
#endif
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastOverlayTextureToggle, overlayTextureToggle);
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastFlashToggle, flashToggle);
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastRadialBlurToggle, radialBlurToggle);
|
||||
isToggleChanged |= checkIfToggleChanged(ref _lastVignetteToggle, vignetteToggle);
|
||||
if (isToggleChanged)
|
||||
{
|
||||
SetToggles();
|
||||
}
|
||||
//#endif
|
||||
|
||||
if (customScreenCenterPos != _lastCustomScreenCenterPos)
|
||||
{
|
||||
SetScreenCenterPos();
|
||||
}
|
||||
|
||||
|
||||
if (chromaticAberrationToggle)
|
||||
{
|
||||
PostProcessingManager.chromaticAberrationIntensity =
|
||||
Mathf.Max(PostProcessingManager.chromaticAberrationIntensity, chromaticAberrationIntensity);
|
||||
PostProcessingManager.chromaticAberrationPos =
|
||||
Mathf.Max(PostProcessingManager.chromaticAberrationPos, chromaticAberrationPos);
|
||||
PostProcessingManager.chromaticAberrationRange =
|
||||
Mathf.Max(PostProcessingManager.chromaticAberrationRange, chromaticAberrationRange);
|
||||
}
|
||||
|
||||
if (distortSpeedToggle)
|
||||
{
|
||||
if (index == PostProcessingManager.laseUpdateControllerIndex)
|
||||
{
|
||||
//只有这里才会更新Scale
|
||||
PostProcessingManager.material.SetVector(_distortSpeedTextureStID, distortSpeedTexSt);
|
||||
}
|
||||
|
||||
PostProcessingManager.distortSpeedIntensity =
|
||||
Mathf.Max(PostProcessingManager.distortSpeedIntensity, distortSpeedIntensity);
|
||||
PostProcessingManager.distortSpeedPosition =
|
||||
Mathf.Max(PostProcessingManager.distortSpeedPosition, distortSpeedPosition);
|
||||
PostProcessingManager.distortSpeedRange =
|
||||
Mathf.Max(PostProcessingManager.distortSpeedRange, distortSpeedRange);
|
||||
PostProcessingManager.distortSpeedMoveSpeedX =
|
||||
Mathf.Abs(PostProcessingManager.distortSpeedMoveSpeedX) > Mathf.Abs(distortSpeedMoveSpeedX)
|
||||
? PostProcessingManager.distortSpeedMoveSpeedX
|
||||
: distortSpeedMoveSpeedX;
|
||||
PostProcessingManager.distortSpeedMoveSpeedY =
|
||||
Mathf.Abs(PostProcessingManager.distortSpeedMoveSpeedY) > Mathf.Abs(distortSpeedMoveSpeed)
|
||||
? PostProcessingManager.distortSpeedMoveSpeedY
|
||||
: distortSpeedMoveSpeed;
|
||||
}
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
if (cameraShakeToggle)
|
||||
{
|
||||
PostProcessingManager.cameraShakeIntensity =
|
||||
Mathf.Max(PostProcessingManager.cameraShakeIntensity, cameraShakeIntensity);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
if (overlayTextureToggle)
|
||||
{
|
||||
if (index == PostProcessingManager.laseUpdateControllerIndex)
|
||||
{
|
||||
PostProcessingManager.material.SetVector(_overlayTextureStID, overlayTextureSt);
|
||||
PostProcessingManager.material.SetVector(_textureOverlayMaskStProperty, overlayMaskTextureSt);
|
||||
PostProcessingManager.material.SetVector(_textureOverlayAnimProperty,overlayTextureAnim);
|
||||
}
|
||||
|
||||
PostProcessingManager.overlayTextureIntensity = Mathf.Max(PostProcessingManager.overlayTextureIntensity,
|
||||
overlayTextureIntensity);
|
||||
}
|
||||
|
||||
if (flashToggle)
|
||||
{
|
||||
PostProcessingManager.flashDesaturateIntensity =
|
||||
Mathf.Max(PostProcessingManager.flashDesaturateIntensity, flashDeSaturateIntensity);
|
||||
PostProcessingManager.flashInvertIntensity =
|
||||
Mathf.Max(PostProcessingManager.flashInvertIntensity, flashInvertIntensity);
|
||||
PostProcessingManager.flashIntensity = Mathf.Max(PostProcessingManager.flashIntensity, flashIntensity);
|
||||
PostProcessingManager.flashContrast =
|
||||
Mathf.Max(PostProcessingManager.flashContrast, flashContrast);
|
||||
PostProcessingManager.flashGradientRange = Mathf.Max(PostProcessingManager.flashGradientRange, flashGradientRange);
|
||||
PostProcessingManager.flashVec = new Vector4(flashVec.x,flashVec.y,flashVecZW.x,flashVecZW.y);
|
||||
PostProcessingManager.flashTextureIntensity = Mathf.Max(PostProcessingManager.flashTextureIntensity, flashTextureIntensity);
|
||||
PostProcessingManager.flashTextureScaleOffset = flashTextureScaleOffset;
|
||||
|
||||
PostProcessingManager.flashColor = flashColor;
|
||||
PostProcessingManager.blackFlashColor = blackFlashColor;
|
||||
}
|
||||
|
||||
if (radialBlurToggle)
|
||||
{
|
||||
PostProcessingManager.radialBlurIntensity =
|
||||
Mathf.Max(PostProcessingManager.radialBlurIntensity, radialBlurIntensity);
|
||||
PostProcessingManager.radialBlurSampleCount = Mathf.Max(PostProcessingManager.radialBlurSampleCount,
|
||||
radialBlurSampleCount);
|
||||
PostProcessingManager.radialBlurPos = Mathf.Max(PostProcessingManager.radialBlurPos, radialBlurPos);
|
||||
PostProcessingManager.radialBlurRange = Mathf.Max(PostProcessingManager.radialBlurRange, radialBlurRange);
|
||||
}
|
||||
|
||||
if (vignetteToggle)
|
||||
{
|
||||
PostProcessingManager.vignetteIntensity =
|
||||
Mathf.Max(PostProcessingManager.vignetteIntensity, vignetteIntensity);
|
||||
PostProcessingManager.vignetteRoundness = Mathf.Max(PostProcessingManager.vignetteRoundness, vignetteRoundness);
|
||||
PostProcessingManager.vignetteSmothness = Mathf.Max(PostProcessingManager.vignetteSmothness, vignetteSmothness);
|
||||
PostProcessingManager.vignetteFill = Mathf.Max(PostProcessingManager.vignetteFill, vignetteFill);
|
||||
if (index == PostProcessingManager.laseUpdateControllerIndex)
|
||||
{
|
||||
PostProcessingManager.material.SetColor(_vignetteColorID,vignetteColor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void EndController()
|
||||
{
|
||||
ClearToggles();
|
||||
_manager.EndController(this);
|
||||
}
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[UnityEditor.MenuItem("GameObject/创建NB后处理特效")]
|
||||
static void CreatMenu()
|
||||
{
|
||||
GameObject Effect = new GameObject();
|
||||
Effect.name = "NBPostprocessController";
|
||||
PostProcessingController controller = Effect.AddComponent<PostProcessingController>();
|
||||
|
||||
UnityEditor.Selection.activeObject = Effect;
|
||||
}
|
||||
|
||||
void ControllerEditorUpdate()
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
Update();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 909ea7d136ae0c349a24f02cac1f5f71
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- manager: {instanceID: 0}
|
||||
- distortSpeedTexture: {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3}
|
||||
- overlayTexture: {instanceID: 0}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,731 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
using Unity.Cinemachine;
|
||||
#endif
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
|
||||
|
||||
[ExecuteAlways]
|
||||
public class PostProcessingManager : MonoBehaviour
|
||||
{
|
||||
//单例实现
|
||||
private static PostProcessingManager _instance = null;
|
||||
|
||||
public static PostProcessingManager Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
// #if UNITY_2022_1_OR_NEWER
|
||||
// _instance = FindFirstObjectByType<PostProcessingManager>();
|
||||
// #else
|
||||
_instance = FindObjectOfType<PostProcessingManager>(); //因为兼容性因素,保留较慢版本
|
||||
// #endif
|
||||
if (_instance == null)
|
||||
{
|
||||
GameObject singletonObj = new GameObject();
|
||||
_instance = singletonObj.AddComponent<PostProcessingManager>();
|
||||
singletonObj.name = "NBPostProcessManager";
|
||||
if (Application.isPlaying)
|
||||
{
|
||||
DontDestroyOnLoad(singletonObj);
|
||||
}
|
||||
else
|
||||
{
|
||||
singletonObj.hideFlags = HideFlags.HideAndDontSave;//如果要调试可以去掉这个属性
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
DestroyImmediate(this);
|
||||
}
|
||||
}
|
||||
|
||||
// [ReadOnly] public Volume volume;
|
||||
// private static VolumeProfile profile;
|
||||
// [ReadOnly]
|
||||
public static Material material
|
||||
{
|
||||
get { return NBPostProcess.NBPostProcessMaterial; }
|
||||
}
|
||||
|
||||
public static NBPostProcessFlags flags = new NBPostProcessFlags();
|
||||
|
||||
// public CinemachineBrain cameraBrain;
|
||||
// public CinemachineVirtualCamera currentVirtualCamera;
|
||||
#if CINIMACHINE_3_0
|
||||
public CinemachineCamera currentVirtualCamera;
|
||||
private CinemachineBasicMultiChannelPerlin _perlin;
|
||||
#endif
|
||||
|
||||
public static void InitMat()
|
||||
{
|
||||
flags.SetMaterial(PostProcessingManager.material);
|
||||
if (_instance)
|
||||
{
|
||||
_instance.ResetEffect();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (_controllerIndexFlags > 0)
|
||||
{
|
||||
ReRegistEditorUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorApplication.update += EditorUpdate;
|
||||
}
|
||||
// 注册编辑器帧更新事件
|
||||
#endif
|
||||
|
||||
//重置Flag
|
||||
flags = new NBPostProcessFlags(material);
|
||||
flags.SetFlagBits(0);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
// 注册编辑器帧更新事件
|
||||
EditorApplication.update -= EditorUpdate;
|
||||
#endif
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON);
|
||||
}
|
||||
|
||||
|
||||
// [ShowInInspector]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
private int _controllerIndexFlags = 0;
|
||||
|
||||
public static int laseUpdateControllerIndex;
|
||||
|
||||
private int GetControllerIndex()
|
||||
{
|
||||
for (int i = 0; i < 31; i++)
|
||||
{
|
||||
if (((~_controllerIndexFlags) & (1 << i)) != 0)
|
||||
{
|
||||
_controllerIndexFlags |= (1 << i);
|
||||
laseUpdateControllerIndex = i;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 32;
|
||||
}
|
||||
|
||||
private void ReleaseControllerIndex(int index)
|
||||
{
|
||||
_controllerIndexFlags &= ~(1 << index);
|
||||
}
|
||||
|
||||
private int CountBit(int bit)
|
||||
{
|
||||
int count = 0;
|
||||
while (bit > 0)
|
||||
{
|
||||
bit = bit & (bit - 1);
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
//每次Controller触发Play都会触发Init
|
||||
public void InitController(PostProcessingController controller)
|
||||
{
|
||||
#if CINIMACHINE_3_0
|
||||
if (controller.cinemachineCamera != null)
|
||||
{
|
||||
currentVirtualCamera = controller.cinemachineCamera;
|
||||
_perlin = currentVirtualCamera.gameObject.GetComponent<CinemachineBasicMultiChannelPerlin>();
|
||||
}
|
||||
#endif
|
||||
|
||||
controller.SetIndex(GetControllerIndex());
|
||||
}
|
||||
|
||||
public void EndController(PostProcessingController controller)
|
||||
{
|
||||
#if CINIMACHINE_3_0
|
||||
if (currentVirtualCamera == controller.cinemachineCamera)
|
||||
{
|
||||
currentVirtualCamera = null;
|
||||
_perlin = null;
|
||||
}
|
||||
#endif
|
||||
|
||||
ReleaseControllerIndex(controller.index);
|
||||
controller.SetIndex(32); //设置32为关闭index
|
||||
}
|
||||
|
||||
private void EffectUpdater(Action initEffect, Action updateEffect, Action endEffect, ref bool lastIsEffect,
|
||||
int effectToggles)
|
||||
{
|
||||
if (effectToggles > 0)
|
||||
{
|
||||
if (!lastIsEffect)
|
||||
{
|
||||
initEffect();
|
||||
}
|
||||
|
||||
updateEffect();
|
||||
lastIsEffect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (lastIsEffect)
|
||||
{
|
||||
endEffect();
|
||||
lastIsEffect = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private bool isFirstUpdate = true;
|
||||
|
||||
private void ResetEffect()
|
||||
{
|
||||
if (_lastIsChromaticAberration)
|
||||
{
|
||||
EndChromaticAberration();
|
||||
_lastIsChromaticAberration = false;
|
||||
}
|
||||
|
||||
if (_lastIsRadialBlur)
|
||||
{
|
||||
EndRadialBlur();
|
||||
_lastIsRadialBlur = false;
|
||||
}
|
||||
|
||||
if (_lastIsDistortSpeed)
|
||||
{
|
||||
EndDistortSpeed();
|
||||
_lastIsDistortSpeed = false;
|
||||
}
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
if (_lastIsCameraShake)
|
||||
{
|
||||
EndCameraShake();
|
||||
_lastIsCameraShake = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (_lastIsOverlayTexture)
|
||||
{
|
||||
EndOverlayTexture();
|
||||
_lastIsOverlayTexture = false;
|
||||
}
|
||||
|
||||
if (_lastIsFlash)
|
||||
{
|
||||
EndFlash();
|
||||
_lastIsFlash = false;
|
||||
}
|
||||
|
||||
if (_lastIsVignette)
|
||||
{
|
||||
EndVignette();
|
||||
_lastIsVignette = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void LateUpdate() //晚于所有脚本触发。
|
||||
{
|
||||
if (isFirstUpdate)
|
||||
{
|
||||
isFirstUpdate = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!material) return;
|
||||
/*
|
||||
#if UNITY_EDITOR
|
||||
if (flags.GetMaterial() != PostProcessingManager.material)
|
||||
{
|
||||
flags.SetMaterial(PostProcessingManager.material);
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
|
||||
if (_controllerIndexFlags == 0)
|
||||
{
|
||||
ResetEffect();
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON);
|
||||
return;
|
||||
}
|
||||
|
||||
EffectUpdater(InitChromaticAberration, UpdateChromaticAberration, EndChromaticAberration,
|
||||
ref _lastIsChromaticAberration, chromaticAberrationToggles);
|
||||
EffectUpdater(InitDistortSpeed, UpdateDistortSpeed, EndDistortSpeed, ref _lastIsDistortSpeed,
|
||||
distortSpeedToggles);
|
||||
EffectUpdater(InitRadialBlur, UpdateRadialBlur, EndRadialBlur, ref _lastIsRadialBlur, radialBlurToggles);
|
||||
|
||||
bool isSetCustomScreenCenterPos =
|
||||
(chromaticAberrationToggles | distortSpeedToggles | radialBlurToggles|flashToggles) > 0;
|
||||
|
||||
if (isSetCustomScreenCenterPos)
|
||||
{
|
||||
material.SetVector(_customScreenCenterProperty,
|
||||
new Vector4(customScreenCenterPos.x, customScreenCenterPos.y, 0, 0));
|
||||
}
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
EffectUpdater(() => { }, UpdateCameraShake, EndCameraShake, ref _lastIsCameraShake, cameraShakeToggles);
|
||||
#endif
|
||||
EffectUpdater(InitOverlayTexture, UpdateOverlayTexture, EndOverlayTexture, ref _lastIsOverlayTexture,
|
||||
overlayTextureToggles);
|
||||
EffectUpdater(InitFlash, UpdateFlash, EndFlash, ref _lastIsFlash, flashToggles);
|
||||
EffectUpdater(InitVignette, UpdateVignette, EndVignette, ref _lastIsVignette, vignetteToggles);
|
||||
|
||||
bool hasEffect =
|
||||
(
|
||||
chromaticAberrationToggles |
|
||||
distortSpeedToggles |
|
||||
#if CINIMACHINE_3_0
|
||||
cameraShakeToggles |
|
||||
#endif
|
||||
radialBlurToggles |
|
||||
overlayTextureToggles |
|
||||
flashToggles |
|
||||
vignetteToggles
|
||||
) > 0;
|
||||
|
||||
if (hasEffect)
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_NB_POSTPROCESS_ON);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private readonly int _customScreenCenterProperty = Shader.PropertyToID("_CustomScreenCenter");
|
||||
public static Vector2 customScreenCenterPos = new Vector2(0.5f, 0.5f);
|
||||
|
||||
|
||||
|
||||
|
||||
#region 色散
|
||||
|
||||
//色散相关
|
||||
// private ChromaticAberration chromaticAberrationComp;
|
||||
// private bool preserveChromaticAberrationActive;
|
||||
// private float preserveChromaticAberrationIntensity;
|
||||
private bool _lastIsChromaticAberration = false;
|
||||
private readonly int _chromaticAberrationVecProperty = Shader.PropertyToID("_ChromaticAberrationVec");
|
||||
|
||||
public static int chromaticAberrationToggles = 0;
|
||||
|
||||
public static bool isCaByDistort = false;
|
||||
private bool _lastIsCaByDistort = false;
|
||||
|
||||
public static float chromaticAberrationIntensity = 0;
|
||||
public static float chromaticAberrationPos = 0;
|
||||
public static float chromaticAberrationRange = 0;
|
||||
|
||||
private void InitChromaticAberration()
|
||||
{
|
||||
// Debug.Log("InitCA");
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT);
|
||||
}
|
||||
|
||||
private void UpdateChromaticAberration()
|
||||
{
|
||||
if (_lastIsCaByDistort != isCaByDistort)
|
||||
{
|
||||
if (isCaByDistort)
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT_BY_DISTORT);
|
||||
}
|
||||
else
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT_BY_DISTORT);
|
||||
}
|
||||
|
||||
_lastIsCaByDistort = isCaByDistort;
|
||||
}
|
||||
|
||||
material.SetVector(_chromaticAberrationVecProperty,
|
||||
new Vector4(chromaticAberrationIntensity, chromaticAberrationPos, chromaticAberrationRange));
|
||||
chromaticAberrationIntensity = 0; //等待下一次update
|
||||
chromaticAberrationPos = 0; //等待下一次update
|
||||
chromaticAberrationRange = 0; //等待下一次update
|
||||
}
|
||||
|
||||
private void EndChromaticAberration()
|
||||
{
|
||||
// Debug.Log("EndCA");
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_CHORATICABERRAT);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 径向速度扭曲
|
||||
|
||||
//径向速度扭曲相关
|
||||
private readonly int _distortVecProperty = Shader.PropertyToID("_SpeedDistortVec");
|
||||
private readonly int _distortVec2Property = Shader.PropertyToID("_SpeedDistortVec2");
|
||||
private bool _lastIsDistortSpeed = false;
|
||||
|
||||
public static bool isDistortScreenUVMode;
|
||||
|
||||
private bool _lastIsDistortScreenUVMode;
|
||||
|
||||
// [ShowInInspector]
|
||||
// [LabelText("径向扭曲开关")]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
public static int distortSpeedToggles;
|
||||
|
||||
public static Texture2D distortTexture2D;
|
||||
|
||||
public static float distortSpeedIntensity = 0;
|
||||
public static float distortSpeedPosition = 0;
|
||||
public static float distortSpeedRange = 0;
|
||||
public static float distortSpeedMoveSpeedX = 0;
|
||||
public static float distortSpeedMoveSpeedY = 0;
|
||||
public static float distortTextureMidValue = 0;
|
||||
|
||||
private void InitDistortSpeed()
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_DISTORT_SPEED);
|
||||
}
|
||||
|
||||
private void UpdateDistortSpeed()
|
||||
{
|
||||
if (_lastIsDistortScreenUVMode != isDistortScreenUVMode)
|
||||
{
|
||||
if (isDistortScreenUVMode)
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_POST_DISTORT_SCREEN_UV);
|
||||
}
|
||||
else
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_POST_DISTORT_SCREEN_UV);
|
||||
}
|
||||
|
||||
_lastIsDistortScreenUVMode = isDistortScreenUVMode;
|
||||
}
|
||||
|
||||
Vector4 distortVec = new Vector4(distortSpeedIntensity, distortSpeedPosition, distortSpeedRange,
|
||||
distortTextureMidValue);
|
||||
Vector4 distortVec2 = new Vector4(distortSpeedMoveSpeedX, distortSpeedMoveSpeedY, 0, 0);
|
||||
material.SetVector(_distortVecProperty, distortVec);
|
||||
material.SetVector(_distortVec2Property, distortVec2);
|
||||
distortSpeedIntensity = 0;
|
||||
distortSpeedPosition = 0;
|
||||
distortSpeedRange = 0;
|
||||
distortSpeedMoveSpeedX = 0;
|
||||
distortSpeedMoveSpeedY = 0;
|
||||
}
|
||||
|
||||
private void EndDistortSpeed()
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_DISTORT_SPEED);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 径向模糊
|
||||
|
||||
// [ShowInInspector]
|
||||
// [LabelText("径向模糊开关")]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
public static int radialBlurToggles = 0;
|
||||
private readonly int _radialBlurVecProperty = Shader.PropertyToID("_RadialBlurVec");
|
||||
public static float radialBlurIntensity = 0;
|
||||
public static float radialBlurPos = 0;
|
||||
public static float radialBlurRange = 0;
|
||||
public static int radialBlurSampleCount = 4;
|
||||
public static bool isRadialBlurByDistort = false;
|
||||
private bool _lastIsRadialBlurByDistort = false;
|
||||
|
||||
private bool _lastIsRadialBlur = false;
|
||||
|
||||
private void InitRadialBlur()
|
||||
{
|
||||
// Debug.Log("InitRB");
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR);
|
||||
}
|
||||
|
||||
private void UpdateRadialBlur()
|
||||
{
|
||||
if (_lastIsRadialBlurByDistort != isRadialBlurByDistort)
|
||||
{
|
||||
if (isRadialBlurByDistort)
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR_BY_DISTORT);
|
||||
}
|
||||
else
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR_BY_DISTORT);
|
||||
}
|
||||
|
||||
_lastIsRadialBlurByDistort = isRadialBlurByDistort;
|
||||
}
|
||||
|
||||
Vector4 radialBlurVec = new Vector4(radialBlurIntensity * 0.1f / radialBlurSampleCount, radialBlurPos,
|
||||
radialBlurRange, radialBlurSampleCount);
|
||||
material.SetVector(_radialBlurVecProperty, radialBlurVec);
|
||||
radialBlurIntensity = 0;
|
||||
radialBlurSampleCount = 0;
|
||||
radialBlurPos = 0;
|
||||
radialBlurRange = 0;
|
||||
}
|
||||
|
||||
private void EndRadialBlur()
|
||||
{
|
||||
// Debug.Log("EndRB");
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_RADIALBLUR);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 震屏
|
||||
|
||||
#if CINIMACHINE_3_0
|
||||
|
||||
public static int cameraShakeToggles = 0;
|
||||
|
||||
|
||||
private bool _lastIsCameraShake = false;
|
||||
public static float cameraShakeIntensity = 0;
|
||||
|
||||
private void UpdateCameraShake()
|
||||
{
|
||||
if (_perlin)
|
||||
{
|
||||
_perlin.AmplitudeGain = cameraShakeIntensity;
|
||||
}
|
||||
|
||||
cameraShakeIntensity = 0;
|
||||
// #if UNITY_EDITOR
|
||||
if (currentVirtualCamera)
|
||||
{
|
||||
CinemachineCore.SoloCamera = currentVirtualCamera;
|
||||
}
|
||||
// #endif
|
||||
// Debug.Log(_perlin.m_AmplitudeGain);
|
||||
}
|
||||
|
||||
private void EndCameraShake()
|
||||
{
|
||||
if (_perlin)
|
||||
{
|
||||
_perlin.AmplitudeGain = 0;
|
||||
}
|
||||
|
||||
CinemachineCore.SoloCamera = null;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
|
||||
#region 肌理叠加
|
||||
|
||||
//肌理图
|
||||
//注意,肌理图就是硬切,只有intensity可以做差值。
|
||||
// [ShowInInspector]
|
||||
// [LabelText("肌理开关")]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
public static int overlayTextureToggles = 0;
|
||||
|
||||
private bool _lastIsOverlayTexture = false;
|
||||
|
||||
public static float overlayTextureIntensity = 0;
|
||||
|
||||
private readonly int _overlayTextureProperty = Shader.PropertyToID("_TextureOverlay");
|
||||
private readonly int _overlayTextureStProperty = Shader.PropertyToID("_TextureOverlay_ST");
|
||||
private readonly int _overlayTextureIntensityProperty = Shader.PropertyToID("_TextureOverlayIntensity");
|
||||
|
||||
private void InitOverlayTexture()
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE);
|
||||
}
|
||||
|
||||
private void UpdateOverlayTexture()
|
||||
{
|
||||
material.SetFloat(_overlayTextureIntensityProperty, overlayTextureIntensity);
|
||||
overlayTextureIntensity = 0;
|
||||
}
|
||||
|
||||
private void EndOverlayTexture()
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_OVERLAYTEXTURE);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 黑白闪
|
||||
|
||||
// [ShowInInspector]
|
||||
// [LabelText("黑白闪开关")]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
public static int flashToggles = 0;
|
||||
|
||||
private bool _lastIsFlash = false;
|
||||
|
||||
public static float flashDesaturateIntensity = 0;
|
||||
public static float flashGradientRange = 0;
|
||||
public static Vector4 flashTextureScaleOffset = new Vector4(1,1,0,0);
|
||||
public static Vector4 flashVec = new Vector4(0, 0);
|
||||
public static float flashTextureIntensity = 0.5f;
|
||||
public static float flashIntensity = 1;
|
||||
|
||||
public static float flashInvertIntensity = 0;
|
||||
|
||||
public static float flashContrast = 0;
|
||||
|
||||
public static Color flashColor = new Color(1, 1, 1, 1);
|
||||
public static Color blackFlashColor = new Color(0, 0, 0, 1);
|
||||
|
||||
private readonly int _flashIntensityProperty = Shader.PropertyToID("_FlashIntensity");
|
||||
private readonly int _flashDesaturateProperty = Shader.PropertyToID("_DeSaturateIntensity");
|
||||
private readonly int _flashInvertProperty = Shader.PropertyToID("_InvertIntensity");
|
||||
private readonly int _flashContrastProperty = Shader.PropertyToID("_Contrast");
|
||||
private readonly int _flashColorProperty = Shader.PropertyToID("_FlashColor");
|
||||
private readonly int _blackFlashColorProperty = Shader.PropertyToID("_BlackFlashColor");
|
||||
private readonly int _flashGradientRangeProp = Shader.PropertyToID("_FlashGradientRange");
|
||||
private readonly int _flashTextureScaleOffsetProp = Shader.PropertyToID("_FlashTexture_ST");
|
||||
private readonly int _flashVecProp = Shader.PropertyToID("_FlashVec");
|
||||
private readonly int _flashTextureIntensityProp = Shader.PropertyToID("_FlashTextureIntensity");
|
||||
|
||||
private void InitFlash()
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_FLASH);
|
||||
}
|
||||
|
||||
private void UpdateFlash()
|
||||
{
|
||||
material.SetFloat(_flashDesaturateProperty, flashDesaturateIntensity);
|
||||
material.SetFloat(_flashInvertProperty, flashInvertIntensity);
|
||||
material.SetFloat(_flashContrastProperty, flashContrast);
|
||||
material.SetColor(_flashColorProperty, flashColor);
|
||||
material.SetColor(_blackFlashColorProperty, blackFlashColor);
|
||||
material.SetFloat(_flashGradientRangeProp, flashGradientRange);
|
||||
material.SetVector(_flashTextureScaleOffsetProp, flashTextureScaleOffset);
|
||||
material.SetVector(_flashVecProp, flashVec);
|
||||
material.SetFloat(_flashTextureIntensityProp, flashTextureIntensity);
|
||||
material.SetFloat(_flashIntensityProperty, flashIntensity);
|
||||
|
||||
flashDesaturateIntensity = 0;
|
||||
flashInvertIntensity = 0;
|
||||
flashContrast = 0;
|
||||
flashColor = Color.white;
|
||||
blackFlashColor = Color.black;
|
||||
flashGradientRange = 0;
|
||||
flashTextureScaleOffset = Vector4.zero;
|
||||
flashTextureIntensity = 0;
|
||||
flashVec = Vector4.zero;
|
||||
flashIntensity = 0;
|
||||
}
|
||||
|
||||
private void EndFlash()
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_FLASH);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 暗角
|
||||
|
||||
// [ShowInInspector]
|
||||
// [LabelText("暗角开关")]
|
||||
// #if UNITY_EDITOR
|
||||
// [BinaryInt(8)]
|
||||
// #endif
|
||||
public static int vignetteToggles = 0;
|
||||
|
||||
private bool _lastIsVignette;
|
||||
|
||||
public static float vignetteIntensity = 0f;
|
||||
public static float vignetteRoundness = 0f;
|
||||
public static float vignetteSmothness = 0f;
|
||||
public static float vignetteFill = 0f;
|
||||
|
||||
private readonly int _vignetteVecProperty = Shader.PropertyToID("_VignetteVec");
|
||||
|
||||
private void InitVignette()
|
||||
{
|
||||
flags.SetFlagBits(NBPostProcessFlags.FLAG_BIT_VIGNETTE);
|
||||
}
|
||||
|
||||
|
||||
private void UpdateVignette()
|
||||
{
|
||||
Vector4 vignetteVec = new Vector4(vignetteIntensity, vignetteRoundness, vignetteSmothness, vignetteFill);
|
||||
material.SetVector(_vignetteVecProperty, vignetteVec);
|
||||
vignetteIntensity = 0;
|
||||
vignetteRoundness = 0;
|
||||
vignetteSmothness = 0;
|
||||
vignetteFill = 0;
|
||||
}
|
||||
|
||||
private void EndVignette()
|
||||
{
|
||||
flags.ClearFlagBits(NBPostProcessFlags.FLAG_BIT_VIGNETTE);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
void EditorUpdate()
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
LateUpdate(); //每帧Update会导致SceneView闪
|
||||
}
|
||||
}
|
||||
|
||||
public void ReRegistEditorUpdate()
|
||||
{
|
||||
EditorApplication.update -= EditorUpdate;
|
||||
EditorApplication.update += EditorUpdate;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe30e455c04f33342bb3d1c227855682
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class RenderCameraOpaqueDistortObjectPass: ScriptableRenderPass
|
||||
{
|
||||
private ProfilingSampler _profilingSampler = new ProfilingSampler("RenderCameraOpaqueDistortObject");
|
||||
|
||||
private FilteringSettings _Filtering;
|
||||
private readonly List<ShaderTagId> _shaderTag = new List<ShaderTagId>()
|
||||
{
|
||||
// new ShaderTagId("UniversalForward"),
|
||||
// new ShaderTagId("SRPDefaultUnlit"),
|
||||
// new ShaderTagId("UniversalForwardOnly")
|
||||
new ShaderTagId("NBCameraOpaqueDistortPass")
|
||||
};
|
||||
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
|
||||
{
|
||||
_Filtering = new FilteringSettings(RenderQueueRange.all);
|
||||
}
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView))
|
||||
return;
|
||||
var DisturbanceDraw = CreateDrawingSettings(_shaderTag, ref renderingData, renderingData.cameraData.defaultOpaqueSortFlags);
|
||||
CommandBuffer cmd = CommandBufferPool.Get();
|
||||
using (new ProfilingScope(cmd, _profilingSampler))
|
||||
{
|
||||
context.DrawRenderers(renderingData.cullResults, ref DisturbanceDraw, ref _Filtering);
|
||||
}
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d9bf1337892f42c489f6d9e553271b59
|
||||
timeCreated: 1757141058
|
||||
@@ -0,0 +1,189 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
using System.Reflection;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class ScreenColorRenderPass : ScriptableRenderPass
|
||||
{
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
private RTHandle _screenColorHandle;
|
||||
private RTHandle _tempRTHandle;
|
||||
#else
|
||||
private RenderTargetIdentifier _screenColorHandle;
|
||||
private static readonly int _screenColorRTID = Shader.PropertyToID("_screenColorRT");
|
||||
private RenderTargetIdentifier _tempRTHandle = new RenderTargetIdentifier(_tempRTID);
|
||||
private static readonly int _tempRTID = Shader.PropertyToID("CopyColorRT");
|
||||
#endif
|
||||
private ProfilingSampler _profilingSampler;
|
||||
private readonly Downsampling _downSampling;
|
||||
readonly Material _material;
|
||||
private static readonly int CameraTexture = Shader.PropertyToID("_CameraTexture");
|
||||
private static readonly int SampleOffset = Shader.PropertyToID("_SampleOffset");
|
||||
|
||||
public ScreenColorRenderPass(Material material, Downsampling downSampling)
|
||||
{
|
||||
_material = material;
|
||||
_downSampling = downSampling;
|
||||
}
|
||||
|
||||
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
|
||||
{
|
||||
ConfigureTarget(_screenColorHandle);
|
||||
|
||||
}
|
||||
|
||||
public void SetUp(RTHandle colorHandle)
|
||||
{
|
||||
_profilingSampler ??= new ProfilingSampler("ScreenColorRender");
|
||||
_screenColorHandle = colorHandle;
|
||||
RenderTextureDescriptor descriptor = _screenColorHandle.rt.descriptor;
|
||||
descriptor.autoGenerateMips = true;
|
||||
descriptor.useMipMap = true;
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
descriptor.width /= 2;
|
||||
descriptor.height /= 2;
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
descriptor.width /= 4;
|
||||
descriptor.height /= 4;
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
descriptor.width /= 4;
|
||||
descriptor.height /= 4;
|
||||
break;
|
||||
}
|
||||
RenderingUtils.ReAllocateIfNeeded(ref _tempRTHandle, descriptor,name:"CopyColorRT");
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
FieldInfo cameraColorAttachment = typeof(UniversalRenderer).GetField("m_ActiveCameraColorAttachment", BindingFlags.NonPublic|BindingFlags.Instance);
|
||||
|
||||
|
||||
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
|
||||
{
|
||||
|
||||
var renderer = (UniversalRenderer)renderingData.cameraData.renderer;
|
||||
|
||||
// cmd.SetGlobalTexture(_screenColorRTID,_screenColorHandle);
|
||||
SetUpCopyColorRT(renderer,renderingData.cameraData.cameraTargetDescriptor,cmd);
|
||||
ConfigureTarget(_tempRTHandle);
|
||||
ConfigureClear(ClearFlag.Color, Color.clear);
|
||||
}
|
||||
|
||||
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetUp(ScriptableRenderer renderer)
|
||||
{
|
||||
RenderTargetHandle value = (RenderTargetHandle)cameraColorAttachment.GetValue(renderer);
|
||||
_screenColorHandle = value.Identifier();
|
||||
// _screenColorHandle = colorTarget;
|
||||
}
|
||||
|
||||
public void SetUpCopyColorRT(ScriptableRenderer renderer,RenderTextureDescriptor descriptor ,CommandBuffer cmd)
|
||||
{
|
||||
descriptor.autoGenerateMips = true;
|
||||
descriptor.useMipMap = true;
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
descriptor.width /= 2;
|
||||
descriptor.height /= 2;
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
descriptor.width /= 4;
|
||||
descriptor.height /= 4;
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
descriptor.width /= 4;
|
||||
descriptor.height /= 4;
|
||||
break;
|
||||
}
|
||||
cmd.GetTemporaryRT( _tempRTID, descriptor,FilterMode.Bilinear);
|
||||
}
|
||||
|
||||
public override void OnCameraCleanup(CommandBuffer cmd)
|
||||
{
|
||||
cmd.ReleaseTemporaryRT(_tempRTID);
|
||||
}
|
||||
#endif
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
if (!(renderingData.cameraData.cameraType == CameraType.Game || renderingData.cameraData.cameraType == CameraType.SceneView))
|
||||
return;
|
||||
if (_material == null)
|
||||
return;
|
||||
CommandBuffer cmd = CommandBufferPool.Get();
|
||||
|
||||
using (new ProfilingScope(cmd, _profilingSampler))
|
||||
{
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
|
||||
_material.SetTexture(CameraTexture, _screenColorHandle);
|
||||
cmd.SetRenderTarget((RenderTargetIdentifier)_tempRTHandle);
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
|
||||
Blitter.BlitTexture(cmd, _screenColorHandle, Vector2.one, _material, 0);
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
Blitter.BlitTexture(cmd, _screenColorHandle, Vector2.one, _material, 0);
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
_material.SetFloat(SampleOffset,2);
|
||||
Blitter.BlitTexture(cmd, _screenColorHandle, Vector2.one, _material, 1);
|
||||
break;
|
||||
default:
|
||||
Blitter.BlitTexture(cmd, _screenColorHandle, Vector2.one, _material, 0);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
cmd.SetGlobalTexture(_screenColorRTID,_screenColorHandle);
|
||||
|
||||
_material.SetTexture(CameraTexture,Shader.GetGlobalTexture(_screenColorRTID));
|
||||
cmd.SetRenderTarget(_tempRTHandle);
|
||||
switch (_downSampling)
|
||||
{
|
||||
case Downsampling._2xBilinear:
|
||||
cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0);
|
||||
break;
|
||||
case Downsampling._4xBilinear:
|
||||
cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0);
|
||||
break;
|
||||
case Downsampling._4xBox:
|
||||
_material.SetFloat(SampleOffset,2);
|
||||
cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,1);
|
||||
break;
|
||||
default:
|
||||
cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _material, 0,0);
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
cmd.SetGlobalTexture("_ScreenColorCopy1", _tempRTHandle);
|
||||
}
|
||||
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
cmd.Clear();
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
#if UNIVERSAL_RP_13_1_2_OR_NEWER
|
||||
_tempRTHandle?.Release();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ff8358dc3f3531d4c92a43a49d07f36c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.postprocessing",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:df380645f10b7bc4b97d4f5eb6303d95",
|
||||
"GUID:15fc0a57446b3144c949da3e2b9737a9",
|
||||
"GUID:4307f53044263cf4b835bd812fc161a4",
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [
|
||||
{
|
||||
"name": "com.unity.cinemachine",
|
||||
"expression": "3.0",
|
||||
"define": "CINIMACHINE_3_0"
|
||||
},
|
||||
{
|
||||
"name": "com.unity.render-pipelines.universal",
|
||||
"expression": "13.1.2",
|
||||
"define": "UNIVERSAL_RP_13_1_2_OR_NEWER"
|
||||
}
|
||||
],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a1f23b61b189bd949adfd0f7a353734f
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b96c6f78e9ea0924b92677f2c4812124
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,238 @@
|
||||
Shader "XuanXuan/ColorBlit"
|
||||
{
|
||||
HLSLINCLUDE
|
||||
#pragma target 2.0
|
||||
#pragma editor_sync_compilation
|
||||
#pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY
|
||||
#pragma multi_compile _ BLIT_SINGLE_SLICE
|
||||
// Core.hlsl for XR dependencies
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
||||
ENDHLSL
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"
|
||||
}
|
||||
ZWrite Off Cull Off
|
||||
Pass
|
||||
{
|
||||
Name "ColorBlitPass0"
|
||||
|
||||
HLSLPROGRAM
|
||||
#pragma vertex vert
|
||||
// #pragma vertex vert
|
||||
// #pragma fragment FragNearest
|
||||
#pragma fragment frag
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
Texture2D _CameraTexture;
|
||||
// Texture2D _CameraTexture;
|
||||
//
|
||||
// struct MyAttributes
|
||||
// {
|
||||
// float4 positionOS : POSITION;
|
||||
// float4 texCoord : TEXCOORD0;
|
||||
// };
|
||||
|
||||
//
|
||||
// Varyings vert(MyAttributes IN)
|
||||
// {
|
||||
// Varyings OUT = (Varyings)0;
|
||||
// OUT.positionCS = float4(IN.positionOS.xyz,1);
|
||||
// half4 clipVertex = OUT.positionCS/OUT.positionCS.w;
|
||||
// OUT.texcoord = ComputeScreenPos(clipVertex);
|
||||
// return OUT;
|
||||
// }
|
||||
|
||||
Varyings vert(Attributes input)//避开官方_BlitScaleBias为0的错误。
|
||||
{
|
||||
Varyings output;
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||
|
||||
#if SHADER_API_GLES
|
||||
float4 pos = input.positionOS;
|
||||
float2 uv = input.uv;
|
||||
#else
|
||||
float4 pos = GetFullScreenTriangleVertexPosition(input.vertexID);
|
||||
float2 uv = GetFullScreenTriangleTexCoord(input.vertexID);
|
||||
#endif
|
||||
|
||||
output.positionCS = pos;
|
||||
// output.texcoord = uv * _BlitScaleBias.xy + _BlitScaleBias.zw;
|
||||
output.texcoord = uv;
|
||||
return output;
|
||||
}
|
||||
|
||||
half4 frag (Varyings input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
|
||||
float4 color = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_LinearRepeat, input.texcoord);
|
||||
|
||||
return color;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
Pass
|
||||
{
|
||||
Name "BoxDownsample"
|
||||
|
||||
ZWrite Off
|
||||
Cull Off
|
||||
|
||||
HLSLPROGRAM
|
||||
// #pragma vertex Vert
|
||||
#pragma vertex vert
|
||||
#pragma fragment FragBoxDownsample
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
|
||||
Texture2D _CameraTexture;
|
||||
SAMPLER(sampler_CameraTexture);
|
||||
|
||||
#if UNITY_VERSION < 202320
|
||||
float4 _BlitTexture_TexelSize;
|
||||
#endif
|
||||
|
||||
Varyings vert(Attributes input)//避开官方_BlitScaleBias为0的错误。
|
||||
{
|
||||
Varyings output;
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||
|
||||
#if SHADER_API_GLES
|
||||
float4 pos = input.positionOS;
|
||||
float2 uv = input.uv;
|
||||
#else
|
||||
float4 pos = GetFullScreenTriangleVertexPosition(input.vertexID);
|
||||
float2 uv = GetFullScreenTriangleTexCoord(input.vertexID);
|
||||
#endif
|
||||
|
||||
output.positionCS = pos;
|
||||
// output.texcoord = uv * _BlitScaleBias.xy + _BlitScaleBias.zw;
|
||||
output.texcoord = uv;
|
||||
return output;
|
||||
}
|
||||
|
||||
float _SampleOffset;
|
||||
|
||||
half4 FragBoxDownsample(Varyings input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset,
|
||||
_SampleOffset);
|
||||
|
||||
half4 s;
|
||||
|
||||
s = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xw);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zw);
|
||||
|
||||
return s * 0.25h;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
Pass
|
||||
{
|
||||
Name "ColorBlitPass_URP_13_1_2_OR_OLDER"
|
||||
|
||||
HLSLPROGRAM
|
||||
#pragma vertex vert
|
||||
// #pragma vertex vert
|
||||
// #pragma fragment FragNearest
|
||||
#pragma fragment frag
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
Texture2D _CameraTexture;
|
||||
// Texture2D _CameraTexture;
|
||||
|
||||
struct MyAttributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
float4 texCoord : TEXCOORD0;
|
||||
};
|
||||
|
||||
|
||||
Varyings vert(MyAttributes IN)
|
||||
{
|
||||
Varyings OUT = (Varyings)0;
|
||||
OUT.positionCS = float4(IN.positionOS.xyz,1);
|
||||
half4 clipVertex = OUT.positionCS/OUT.positionCS.w;
|
||||
OUT.texcoord = ComputeScreenPos(clipVertex);
|
||||
return OUT;
|
||||
}
|
||||
half4 frag (Varyings input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
|
||||
float4 color = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_LinearRepeat, input.texcoord);
|
||||
|
||||
return color;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
Pass
|
||||
{
|
||||
Name "BoxDownsample_URP_13_1_2_OR_OLDER"
|
||||
|
||||
ZWrite Off
|
||||
Cull Off
|
||||
|
||||
HLSLPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment FragBoxDownsample
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
|
||||
Texture2D _CameraTexture;
|
||||
SAMPLER(sampler_CameraTexture);
|
||||
|
||||
#if UNITY_VERSION < 202320
|
||||
float4 _BlitTexture_TexelSize;
|
||||
#endif
|
||||
|
||||
|
||||
float _SampleOffset;
|
||||
struct MyAttributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
float4 texCoord : TEXCOORD0;
|
||||
};
|
||||
|
||||
Varyings vert(MyAttributes IN)
|
||||
{
|
||||
Varyings OUT = (Varyings)0;
|
||||
OUT.positionCS = float4(IN.positionOS.xyz,1);
|
||||
half4 clipVertex = OUT.positionCS/OUT.positionCS.w;
|
||||
OUT.texcoord = ComputeScreenPos(clipVertex);
|
||||
return OUT;
|
||||
}
|
||||
|
||||
half4 FragBoxDownsample(Varyings input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset,
|
||||
_SampleOffset);
|
||||
|
||||
half4 s;
|
||||
|
||||
s = SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.xw);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraTexture, sampler_CameraTexture, uv + d.zw);
|
||||
|
||||
return s * 0.25h;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e92fe624a4f13d4eadc7753e236006a
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,105 @@
|
||||
Shader "XuanXuan/ColorBufferBlit"
|
||||
{
|
||||
HLSLINCLUDE
|
||||
#pragma target 2.0
|
||||
#pragma editor_sync_compilation
|
||||
#pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY
|
||||
#pragma multi_compile _ BLIT_SINGLE_SLICE
|
||||
// Core.hlsl for XR dependencies
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
||||
ENDHLSL
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"
|
||||
}
|
||||
ZWrite Off Cull Off
|
||||
Pass
|
||||
{
|
||||
Name "ColorBlitPass0"
|
||||
|
||||
HLSLPROGRAM
|
||||
// #pragma vertex Vert
|
||||
#pragma vertex vert
|
||||
// #pragma fragment FragNearest
|
||||
#pragma fragment frag
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
|
||||
Texture2D _CameraColorTexture;
|
||||
SAMPLER(sampler_CameraColorTexture);
|
||||
|
||||
struct MyAttributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
float4 texCoord : TEXCOORD0;
|
||||
};
|
||||
|
||||
|
||||
Varyings vert(MyAttributes IN)
|
||||
{
|
||||
Varyings OUT = (Varyings)0;
|
||||
OUT.positionCS = float4(IN.positionOS.xyz,1);
|
||||
half4 clipVertex = OUT.positionCS/OUT.positionCS.w;
|
||||
OUT.texcoord = ComputeScreenPos(clipVertex);
|
||||
return OUT;
|
||||
}
|
||||
half4 frag (Varyings input) : SV_Target
|
||||
{
|
||||
// UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
float4 color = SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_LinearRepeat, input.texcoord);
|
||||
|
||||
|
||||
return color;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
Pass
|
||||
{
|
||||
Name "BoxDownsample"
|
||||
|
||||
ZWrite Off
|
||||
Cull Off
|
||||
|
||||
HLSLPROGRAM
|
||||
#pragma vertex Vert
|
||||
#pragma fragment FragBoxDownsample
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
|
||||
// Texture2D _CameraTexture;
|
||||
// SAMPLER(sampler_CameraTexture);
|
||||
Texture2D _CameraColorTexture;
|
||||
SAMPLER(sampler_CameraColorTexture);
|
||||
|
||||
#if UNITY_VERSION < 202320
|
||||
float4 _BlitTexture_TexelSize;
|
||||
#endif
|
||||
|
||||
|
||||
float _SampleOffset;
|
||||
|
||||
half4 FragBoxDownsample(Varyings input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
||||
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
float4 d = _BlitTexture_TexelSize.xyxy * float4(-_SampleOffset, -_SampleOffset, _SampleOffset,
|
||||
_SampleOffset);
|
||||
|
||||
half4 s;
|
||||
|
||||
s = SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.xy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.zy);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.xw);
|
||||
s += SAMPLE_TEXTURE2D_X(_CameraColorTexture, sampler_CameraColorTexture, uv + d.zw);
|
||||
|
||||
return s * 0.25h;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3150dab783854cd6b791d5db3be4a966
|
||||
timeCreated: 1747582276
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,156 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f808d0c8608b954d8f20cb4132c3049
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,113 @@
|
||||
Shader "XuanXuan/Disturbance"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
[MhGroup(Main)]_mainTex("Main", float) = 0
|
||||
[MhTexture(Main)] _MaskMap("Mask Map", 2D) = "white" {}
|
||||
|
||||
[MhTexture(Main,_Strength,on)]_NoiseMap("Noise Map", 2D) = "white"{}
|
||||
[HideInInspector]_Strength("Strength", Range(-0.2,0.2)) =0.1
|
||||
[MhToggleKeyword(Main,_PARTICLE_CUSTOMDATA_ON)]_ParticleCustomDataOn("Particle customData Strength", float) = 0
|
||||
[HideInInspector]_SurfaceType("surfaceType",float)=1
|
||||
[HideInInspector] _QueueOffset("Queue offset", Float) = 0.0
|
||||
}
|
||||
|
||||
// The SubShader block containing the Shader code.
|
||||
SubShader
|
||||
{
|
||||
// SubShader Tags define when and under which conditions a SubShader block or
|
||||
// a pass is executed.
|
||||
Tags
|
||||
{
|
||||
"RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "Queue" = "Transparent" "IgnoreProjector" = "True"
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
//ZTest Always
|
||||
Cull Off
|
||||
HLSLPROGRAM
|
||||
//gpuInstancing on
|
||||
#pragma multi_compile_instancing
|
||||
#pragma instancing_options renderinglayer
|
||||
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||||
#pragma target 3.5 DOTS_INSTANCING_ON
|
||||
|
||||
#pragma shader_feature_local_fragment _PARTICLE_CUSTOMDATA_ON
|
||||
#pragma enable_d3d11_debug_symbols
|
||||
|
||||
|
||||
// This line defines the name of the vertex shader.
|
||||
#pragma vertex vert
|
||||
// This line defines the name of the fragment shader.
|
||||
#pragma fragment frag
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
|
||||
|
||||
|
||||
// This example uses the Attributes structure as an input structure in
|
||||
// the vertex shader.
|
||||
struct Attributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
float4 uv : TEXCOORD0;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
// The positions in this struct must have the SV_POSITION semantic.
|
||||
float4 positionHCS : SV_POSITION;
|
||||
float4 uv :TEXCOORD0;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
Texture2D _NoiseMap;
|
||||
SAMPLER(sampler_NoiseMap);
|
||||
|
||||
Texture2D _MaskMap;
|
||||
SAMPLER(sampler_MaskMap);
|
||||
float _Strength;
|
||||
|
||||
CBUFFER_START(UnityPerMaterial)
|
||||
|
||||
float4 _NoiseMap_ST;
|
||||
|
||||
CBUFFER_END
|
||||
|
||||
|
||||
Varyings vert(Attributes IN)
|
||||
{
|
||||
Varyings OUT;
|
||||
// Declaring the output object (OUT) with the Varyings struct.
|
||||
|
||||
UNITY_SETUP_INSTANCE_ID(IN);
|
||||
UNITY_TRANSFER_INSTANCE_ID(IN, OUT);
|
||||
|
||||
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
|
||||
OUT.uv = IN.uv;
|
||||
return OUT;
|
||||
}
|
||||
|
||||
half4 frag(Varyings IN) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_INSTANCE_ID(IN);
|
||||
|
||||
half2 screenSpaceUV = IN.positionHCS.xy / _ScaledScreenParams.xy;
|
||||
const half2 noiseUV = screenSpaceUV * _NoiseMap_ST.xy + _NoiseMap_ST.zw;
|
||||
|
||||
half noise = SAMPLE_TEXTURE2D(_NoiseMap, sampler_NoiseMap, noiseUV).r * 2 - 1;
|
||||
half mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, IN.uv.xy).r;
|
||||
noise = lerp(0, noise, mask);
|
||||
|
||||
//noise = (noise * _Strength * 5) * 0.5 + 0.5;
|
||||
noise = (noise * _Strength) * 1.25 + 0.5;
|
||||
|
||||
return half4(noise.xxx, 1.0);
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
customEditor "ShaderEditor.MhBaseShaderGUI"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b530af6d4d97eb4c8f3725d4cd3e9b8
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
Shader "XuanXuan/FullScreenDisturbance"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_Strength("Strength", Range(-0.2,0.2)) =0
|
||||
_BaseMap("Base Map", 2D) = "white"
|
||||
//_Mask("Mask", 2D) = "white"
|
||||
|
||||
}
|
||||
|
||||
// The SubShader block containing the Shader code.
|
||||
SubShader
|
||||
{
|
||||
// SubShader Tags define when and under which conditions a SubShader block or
|
||||
// a pass is executed.
|
||||
Tags
|
||||
{
|
||||
"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
|
||||
stencil
|
||||
{
|
||||
Ref 1
|
||||
Comp equal
|
||||
Pass keep
|
||||
}
|
||||
HLSLPROGRAM
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
// This line defines the name of the vertex shader.
|
||||
#pragma vertex vert
|
||||
// This line defines the name of the fragment shader.
|
||||
#pragma fragment frag
|
||||
|
||||
Texture2D _BlitTexture;
|
||||
SAMPLER(sampler_BlitTexture);
|
||||
Texture2D _BaseMap;
|
||||
SAMPLER(sampler_BaseMap);
|
||||
Texture2D _Mask;
|
||||
SAMPLER(simpler_Mask);
|
||||
float _Strength;
|
||||
|
||||
struct Attributes
|
||||
{
|
||||
#if UNITY_ANY_INSTANCING_ENABLED
|
||||
uint instanceID : INSTANCEID_SEMANTIC;
|
||||
#endif
|
||||
uint vertexID : VERTEXID_SEMANTIC;
|
||||
};
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
float4 position : SV_POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
#if UNITY_ANY_INSTANCING_ENABLED
|
||||
uint instanceID : CUSTOM_INSTANCE_ID;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
Varyings vert(Attributes input)
|
||||
{
|
||||
Varyings output;
|
||||
output.position = GetFullScreenTriangleVertexPosition(input.vertexID, UNITY_NEAR_CLIP_VALUE);
|
||||
output.uv = output.position.xy * 0.5 + 0.5;
|
||||
return output;
|
||||
}
|
||||
|
||||
float4 frag(Varyings packedInput):SV_TARGET
|
||||
{
|
||||
float2 baseUV = packedInput.position / _ScreenParams.xy;
|
||||
float3 noise = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, baseUV);
|
||||
noise=lerp(0,noise,noise.b);
|
||||
baseUV += noise.xy * _Strength;
|
||||
return SAMPLE_TEXTURE2D(_BlitTexture, sampler_BlitTexture, baseUV);
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 126dad763ce350945945655d5c062248
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures:
|
||||
- _BaseMap: {instanceID: 0}
|
||||
- _Mask: {instanceID: 0}
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e73bff430617bbc44ae5b87fb0fa9abf
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef POST_PROCESSING_FLAGS
|
||||
#define POST_PROCESSING_FLAGS
|
||||
|
||||
|
||||
#if defined(CUSTOM_POSTPROCESS)
|
||||
uint _NBPostProcessFlags;
|
||||
#define FLAG_BIT_NB_POSTPROCESS_ON (1 << 0)
|
||||
#define FLAG_BIT_DISTORT_SPEED (1 << 1)
|
||||
#define FLAG_BIT_OVERLAYTEXTURE (1 << 2)
|
||||
#define FLAG_BIT_FLASH (1 << 3)
|
||||
#define FLAG_BIT_CHORATICABERRAT (1 << 4)
|
||||
#define FLAG_BIT_RADIALBLUR (1 << 5)
|
||||
#define FLAG_BIT_VIGNETTE (1 << 6)
|
||||
#define FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD (1 << 7)
|
||||
#define FLAG_BIT_OVERLAYTEXTURE_MASKMAP (1 << 8)
|
||||
#define FLAG_BIT_POST_DISTORT_SCREEN_UV (1 << 9)
|
||||
#define FLAG_BIT_RADIALBLUR_BY_DISTORT (1 << 10)
|
||||
#define FLAG_BIT_CHORATICABERRAT_BY_DISTORT (1 << 11)
|
||||
#define FLAG_BIT_FLASHTEXTURE_POLLARCOORD (1 << 12)
|
||||
|
||||
|
||||
|
||||
bool CheckLocalFlags(uint bits)
|
||||
{
|
||||
return (_NBPostProcessFlags&bits) != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d59b331ef0707e49a98c91244bd0c1a
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,434 @@
|
||||
Shader "XuanXuan/Postprocess/NBPostProcessUber"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
// [MainTexture] _BaseMap("Base Map", 2D) = "white"
|
||||
_SpeedDistortMap("速度径向扭曲贴图", 2D) = "white"
|
||||
_SpeedDistortVec("速度径向 x强度y位置z范围w速度",Vector) = (0,0,0,0)
|
||||
_SpeedDistortVec2("速度径向 x:uvX速度 y:uvY速度",Vector) = (0,0,0,0)
|
||||
|
||||
_TextureOverlay("肌理附加图",2D) = "white"
|
||||
_TextureOverlayIntensity("肌理附加强度",Float) = 0
|
||||
_TextureOverlayAnim("机理图动画",Vector) = (0,0,0,0)
|
||||
_TextureOverlayMask("肌理图蒙板",2D) = "white"
|
||||
|
||||
_InvertIntensity("反向强度",Float) = 0
|
||||
_DeSaturateIntensity("饱和度强度",Float) = 0
|
||||
_Contrast("对比度",Float) = 1
|
||||
_FlashIntensity("反闪效果强度",Float) = 1
|
||||
_FlashColor("闪颜色", Vector) = (1, 1, 1, 1)
|
||||
_BlackFlashColor("闪黑颜色", Vector) = (0, 0, 0, 1)
|
||||
_FlashTexture("黑白闪细节图",2D) = "white"
|
||||
_FlashTextureIntensity("黑白细节图混合强度",Float) = 0.5
|
||||
_FlashGradientRange("黑白闪过渡范围",Float) = 1
|
||||
_FlashVec("xy:FlashTextureOffsetAnim",Vector) = (0,0,0,0)
|
||||
|
||||
|
||||
[HideInInspector] _NBPostProcessFlags("_NBPostProcessFlags", Integer) = 0
|
||||
_ChromaticAberrationVector("色散矢量",Vector) = (1,0,0,0)
|
||||
|
||||
_CustomScreenCenter("自定义屏幕中心",Vector) = (0.5,0.5,0,0)
|
||||
_RadialBlurVec("径向模糊矢量 x强度",Vector) = (1,0,0,0)
|
||||
_VignetteVec("暗角矢量 x强度,y圆度,z光滑度",Vector) = (1,0,0,0)
|
||||
|
||||
|
||||
//不知道为什么,这里写成Color老是出错。
|
||||
_VignetteColor("暗角颜色",Vector) = (0.0,0.0,0.0,1.0)
|
||||
|
||||
}
|
||||
|
||||
// The SubShader block containing the Shader code.
|
||||
SubShader
|
||||
{
|
||||
// SubShader Tags define when and under which conditions a SubShader block or
|
||||
// a pass is executed.
|
||||
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
|
||||
|
||||
Pass
|
||||
{
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
ZTest Off
|
||||
HLSLPROGRAM
|
||||
// This line defines the name of the vertex shader.
|
||||
#pragma vertex vert
|
||||
// This line defines the name of the fragment shader.
|
||||
#pragma fragment frag
|
||||
#define CUSTOM_POSTPROCESS
|
||||
// #define _POLARCOORDINATES
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
|
||||
|
||||
#include "HLSL/PostProcessingFlags.hlsl"
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
|
||||
|
||||
// This example uses the Attributes structure as an input structure in
|
||||
// the vertex shader.
|
||||
|
||||
|
||||
struct Attributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
};
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
// The positions in this struct must have the SV_POSITION semantic.
|
||||
float4 positionHCS : SV_POSITION;
|
||||
half2 uv :TEXCOORD0;
|
||||
};
|
||||
|
||||
TEXTURE2D(_ScreenColorCopy1);
|
||||
SAMPLER(_linear_clamp);
|
||||
SAMPLER(sampler_ScreenColorCopy1);
|
||||
|
||||
TEXTURE2D(_DisturbanceMaskTex);
|
||||
SAMPLER(sampler_DisturbanceMaskTex);
|
||||
|
||||
Texture2D _SpeedDistortMap;
|
||||
SAMPLER(sampler_SpeedDistortMap);
|
||||
|
||||
TEXTURE2D(_TextureOverlay);
|
||||
SAMPLER(sampler_TextureOverlay);
|
||||
TEXTURE2D(_TextureOverlayMask);
|
||||
SAMPLER(sampler_TextureOverlayMask);
|
||||
|
||||
TEXTURE2D(_FlashTexture);
|
||||
SAMPLER(sampler_FlashTexture);
|
||||
|
||||
#if UNITY_VERSION < 202220
|
||||
SAMPLER(sampler_LinearClamp);
|
||||
#endif
|
||||
|
||||
CBUFFER_START(UnityPerMaterial)
|
||||
|
||||
float4 _SpeedDistortMap_ST;
|
||||
half4 _SpeedDistortVec;
|
||||
float4 _SpeedDistortVec2;
|
||||
|
||||
half4 _TextureOverlay_ST;
|
||||
half _TextureOverlayIntensity;
|
||||
half4 _TextureOverlayMask_ST;
|
||||
half4 _TextureOverlayAnim;
|
||||
|
||||
half _FlashIntensity;
|
||||
half _InvertIntensity;
|
||||
half _DeSaturateIntensity;
|
||||
half _Contrast;
|
||||
half _FlashGradientRange;
|
||||
half _FlashTextureIntensity;
|
||||
float4 _FlashTexture_ST;
|
||||
float4 _FlashVec;
|
||||
half3 _FlashColor;
|
||||
half3 _BlackFlashColor;
|
||||
|
||||
half4 _ChromaticAberrationVec;
|
||||
half4 _CustomScreenCenter;
|
||||
half4 _RadialBlurVec;
|
||||
half4 _VignetteVec;
|
||||
half4 _VignetteColor;
|
||||
|
||||
CBUFFER_END
|
||||
|
||||
half4 SAMPLE_TEXTURE2D_CHORATICABERRAT(half2 screenUV,half2 distortUV,half2 blurVec,half distToCenter)
|
||||
{
|
||||
if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT))
|
||||
{
|
||||
blurVec = blurVec*0.25*_ChromaticAberrationVec.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
half intensity = 1;
|
||||
half range = _ChromaticAberrationVec.z*0.5f;
|
||||
intensity = NB_Remap(distToCenter,_ChromaticAberrationVec.y-range,_ChromaticAberrationVec.y+range,0,1);
|
||||
blurVec = blurVec*0.25*_ChromaticAberrationVec.x*intensity;
|
||||
}
|
||||
half r = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, screenUV + distortUV ).x;
|
||||
half g = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, blurVec + screenUV + distortUV ).y;
|
||||
half b = SAMPLE_TEXTURE2D_X(_ScreenColorCopy1, sampler_LinearClamp, blurVec * 2.0 + screenUV + distortUV).z;
|
||||
|
||||
half a = dot(blurVec,blurVec)*100000;
|
||||
return half4(r,g,b,a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Varyings vert(Attributes IN)
|
||||
{
|
||||
// Declaring the output object (OUT) with the Varyings struct.
|
||||
Varyings OUT;
|
||||
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
|
||||
half4 clipVertex = OUT.positionHCS/OUT.positionHCS.w;
|
||||
OUT.uv = ComputeScreenPos(clipVertex);
|
||||
// Returning the output.
|
||||
return OUT;
|
||||
}
|
||||
|
||||
half4 frag(Varyings IN) : SV_Target
|
||||
{
|
||||
half2 screenUV = IN.uv;
|
||||
half2 distortUV = 0;
|
||||
half2 distortUVWithoutIntensity=0;
|
||||
|
||||
half4 color = 0;
|
||||
|
||||
half2 polarCoordinates = 0;
|
||||
|
||||
//half disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV)) * 2 - 1 + 0.00392; //8位0.5校准
|
||||
//disturbanceMask *= 0.4;
|
||||
//half2 disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV).xy) * 0.8 - 0.398432; //上面两行合并
|
||||
|
||||
half2 disturbanceMask = (SAMPLE_TEXTURE2D(_DisturbanceMaskTex, _linear_clamp, screenUV).xy);
|
||||
// return half4(disturbanceMask,0,1);//上面两行合并
|
||||
|
||||
|
||||
color.a = SimpleSmoothstep(0,0.01,abs(disturbanceMask.x + disturbanceMask.y));
|
||||
screenUV += disturbanceMask;
|
||||
|
||||
UNITY_BRANCH
|
||||
if (!CheckLocalFlags(FLAG_BIT_NB_POSTPROCESS_ON))
|
||||
{
|
||||
color.rgb = SAMPLE_TEXTURE2D(_ScreenColorCopy1, _linear_clamp, screenUV).rgb;
|
||||
}
|
||||
|
||||
UNITY_BRANCH
|
||||
if((CheckLocalFlags(FLAG_BIT_DISTORT_SPEED)& (!CheckLocalFlags(FLAG_BIT_POST_DISTORT_SCREEN_UV)))|CheckLocalFlags(FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD)|CheckLocalFlags(FLAG_BIT_FLASHTEXTURE_POLLARCOORD)|CheckLocalFlags(FLAG_BIT_FLASH))
|
||||
{
|
||||
polarCoordinates= PolarCoordinates(screenUV,_CustomScreenCenter.xy);
|
||||
}
|
||||
|
||||
|
||||
UNITY_BRANCH
|
||||
if(CheckLocalFlags(FLAG_BIT_DISTORT_SPEED))
|
||||
{
|
||||
_SpeedDistortMap_ST.zw += _SpeedDistortVec2.xy * _Time.y;
|
||||
// return half4(polarCoordinates,0,1);
|
||||
half2 distortSpeedUV;
|
||||
if(CheckLocalFlags(FLAG_BIT_POST_DISTORT_SCREEN_UV))
|
||||
{
|
||||
distortSpeedUV = screenUV* _SpeedDistortMap_ST.xy+_SpeedDistortMap_ST.zw;
|
||||
half2 noise = SAMPLE_TEXTURE2D(_SpeedDistortMap,sampler_SpeedDistortMap,distortSpeedUV);
|
||||
noise = noise * 2-1+_SpeedDistortVec.w*0.1;
|
||||
half distortStrength = _SpeedDistortVec.x * 0.2;
|
||||
distortUVWithoutIntensity = noise;
|
||||
distortUV = noise * distortStrength;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
distortSpeedUV = polarCoordinates * _SpeedDistortMap_ST.xy + _SpeedDistortMap_ST.zw;
|
||||
half noise = SAMPLE_TEXTURE2D(_SpeedDistortMap,sampler_SpeedDistortMap,distortSpeedUV);
|
||||
noise *= SimpleSmoothstep(_SpeedDistortVec.y,_SpeedDistortVec.y+_SpeedDistortVec.z,(distortSpeedUV.y - _SpeedDistortMap_ST.w)/_SpeedDistortMap_ST.y);
|
||||
half distortStrength = - _SpeedDistortVec.x * 0.2;
|
||||
distortUV = normalize(screenUV-_CustomScreenCenter.xy)*noise;
|
||||
distortUVWithoutIntensity = distortUV;
|
||||
distortUV *= distortStrength;
|
||||
}
|
||||
|
||||
|
||||
color.a += dot(distortUV,distortUV)*100000;
|
||||
}
|
||||
else
|
||||
{
|
||||
distortUVWithoutIntensity = disturbanceMask;
|
||||
}
|
||||
|
||||
// return half4(((dot(distortUV,distortUV)*100000)).rrr,1);
|
||||
|
||||
UNITY_BRANCH
|
||||
if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT) || CheckLocalFlags(FLAG_BIT_RADIALBLUR))
|
||||
{
|
||||
float2 blurVec = 0;
|
||||
half dist = 0;
|
||||
|
||||
if(!CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT)|!CheckLocalFlags(FLAG_BIT_RADIALBLUR_BY_DISTORT))
|
||||
{
|
||||
blurVec = _CustomScreenCenter.xy - screenUV;
|
||||
dist = dot(blurVec,blurVec)*4;
|
||||
}
|
||||
|
||||
float2 choraticaBerratBlurVec;
|
||||
if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT))
|
||||
{
|
||||
if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT_BY_DISTORT))
|
||||
{
|
||||
choraticaBerratBlurVec = distortUVWithoutIntensity;
|
||||
}
|
||||
else
|
||||
{
|
||||
choraticaBerratBlurVec = blurVec;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(CheckLocalFlags(FLAG_BIT_RADIALBLUR))
|
||||
{
|
||||
|
||||
float2 radialblurVec;
|
||||
if(CheckLocalFlags(FLAG_BIT_RADIALBLUR_BY_DISTORT))
|
||||
{
|
||||
radialblurVec = distortUVWithoutIntensity*_RadialBlurVec.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
_RadialBlurVec.z *= 0.5;
|
||||
half rangeIntensity = NB_Remap(dist,_RadialBlurVec.y-_RadialBlurVec.z,_RadialBlurVec.y+_RadialBlurVec.z,0,1);
|
||||
rangeIntensity = saturate(rangeIntensity);
|
||||
radialblurVec = blurVec*_RadialBlurVec.x*rangeIntensity;
|
||||
}
|
||||
color.a += dot(blurVec,blurVec)*100;
|
||||
|
||||
half3 acumulateColor = half3(0, 0, 0);
|
||||
|
||||
int iteration = _RadialBlurVec.w;
|
||||
[unroll(12)]
|
||||
for(int i = 0;i<iteration;i++)
|
||||
{
|
||||
if(CheckLocalFlags(FLAG_BIT_CHORATICABERRAT))
|
||||
{
|
||||
//sample *3
|
||||
acumulateColor += SAMPLE_TEXTURE2D_CHORATICABERRAT(screenUV,distortUV,choraticaBerratBlurVec,dist);
|
||||
}
|
||||
else
|
||||
{
|
||||
acumulateColor += SAMPLE_TEXTURE2D(_ScreenColorCopy1,_linear_clamp,screenUV + distortUV);
|
||||
}
|
||||
screenUV += radialblurVec;
|
||||
}
|
||||
color.rgb = acumulateColor / iteration;
|
||||
}
|
||||
else
|
||||
{
|
||||
half4 choraticaBerratColor = SAMPLE_TEXTURE2D_CHORATICABERRAT(screenUV,distortUV,choraticaBerratBlurVec,dist);
|
||||
color.rgb = choraticaBerratColor.rgb;
|
||||
color.a += choraticaBerratColor.a;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
color.rgb = SAMPLE_TEXTURE2D(_ScreenColorCopy1,_linear_clamp,screenUV + distortUV);
|
||||
}
|
||||
|
||||
// return half4(color.aaa,1);
|
||||
|
||||
|
||||
|
||||
UNITY_BRANCH
|
||||
if(CheckLocalFlags(FLAG_BIT_OVERLAYTEXTURE))
|
||||
{
|
||||
half2 overlayTexUV;
|
||||
if(CheckLocalFlags(FLAG_BIT_OVERLAYTEXTURE_POLLARCOORD))
|
||||
{
|
||||
overlayTexUV = polarCoordinates;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
overlayTexUV = screenUV;
|
||||
}
|
||||
|
||||
float2 overlayMainTexUV = TRANSFORM_TEX(overlayTexUV,_TextureOverlay);
|
||||
overlayMainTexUV = UVOffsetAnimaiton(overlayMainTexUV,_TextureOverlayAnim.xy,_Time.y);
|
||||
half4 overlayTexSample = SAMPLE_TEXTURE2D(_TextureOverlay,sampler_TextureOverlay,overlayMainTexUV);
|
||||
|
||||
half overlayTexMask = 1;
|
||||
if (CheckLocalFlags(FLAG_BIT_OVERLAYTEXTURE_MASKMAP))
|
||||
{
|
||||
float2 overlayTexMaskUV = TRANSFORM_TEX(overlayTexUV,_TextureOverlayMask);
|
||||
overlayTexMask = SAMPLE_TEXTURE2D(_TextureOverlayMask,sampler_TextureOverlayMask,overlayTexMaskUV);
|
||||
}
|
||||
color.rgb *= lerp(1,overlayTexSample.rgb,overlayTexSample.a*_TextureOverlayIntensity*overlayTexMask);
|
||||
// return half4( lerp(overlayTexSample.rgb,1,overlayTexSample.a*_TextureOverlayIntensity),1);
|
||||
color.a += _TextureOverlayIntensity;
|
||||
}
|
||||
|
||||
UNITY_BRANCH
|
||||
if(CheckLocalFlags(FLAG_BIT_FLASH))
|
||||
{
|
||||
|
||||
// //因为颜色空间的特殊原因,这里的转换运算可能会造成性能热点,后续考虑优化。
|
||||
// half3 invertColor = SRGBToLinear(1- LinearToSRGB(color.xyz));
|
||||
// color.rgb = lerp(color.rgb,invertColor,_InvertIntensity);
|
||||
|
||||
half flashLuminace = luminance(color.rgb);
|
||||
|
||||
half2 flashTexUV ;
|
||||
if(CheckLocalFlags(FLAG_BIT_FLASHTEXTURE_POLLARCOORD))
|
||||
{
|
||||
flashTexUV = polarCoordinates;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
flashTexUV = screenUV;
|
||||
}
|
||||
half flashTexMask = SimpleSmoothstep(_FlashVec.z,_FlashVec.z+_FlashVec.w,flashTexUV.y);
|
||||
// flashTexMask *= flashTexMask;
|
||||
|
||||
flashTexUV = TRANSFORM_TEX(flashTexUV,_FlashTexture);
|
||||
flashTexUV = UVOffsetAnimaiton(flashTexUV,_FlashVec.xy,_Time.y);
|
||||
|
||||
half flashTexColor = SAMPLE_TEXTURE2D(_FlashTexture,sampler_FlashTexture,flashTexUV).r;
|
||||
flashTexColor = pow(flashTexColor,_DeSaturateIntensity);
|
||||
|
||||
_FlashTextureIntensity *= flashTexMask;
|
||||
|
||||
|
||||
flashLuminace = lerp(flashLuminace,flashTexColor,_FlashTextureIntensity);
|
||||
half RangeMin = _FlashGradientRange;
|
||||
half RangeMax = RangeMin + _Contrast;
|
||||
flashLuminace = SimpleSmoothstep(RangeMin,RangeMax,flashLuminace);
|
||||
half3 finalBlackFlashColor = lerp(_FlashColor,_BlackFlashColor,_InvertIntensity);
|
||||
half3 finalFlashColor = lerp(_BlackFlashColor,_FlashColor,_InvertIntensity);
|
||||
|
||||
half3 endColor = lerp(finalBlackFlashColor,finalFlashColor,flashLuminace);
|
||||
color.rgb = lerp(color.rgb,endColor,_FlashIntensity);
|
||||
color.a = 1;
|
||||
|
||||
|
||||
// half3 endColor = lerp(_BlackFlashColor,_FlashColor,luminance(color.rgb));
|
||||
// color.rgb = lerp(color.rgb,endColor,_InvertIntensity);
|
||||
//
|
||||
// color.xyz = RgbToHsv(color.rgb);
|
||||
// half3 colorHSV = color.xyz;
|
||||
// color.y *= _DeSaturateIntensity;
|
||||
// color.rgb = HsvToRgb(color.xyz);
|
||||
//
|
||||
// color.rgb = lerp(half3(0.5,0.5,0.5),color.rgb,_Contrast);
|
||||
//
|
||||
// color.a = 1;
|
||||
}
|
||||
|
||||
UNITY_BRANCH
|
||||
if(CheckLocalFlags(FLAG_BIT_VIGNETTE))
|
||||
{
|
||||
_VignetteVec.x *= _VignetteColor.a;
|
||||
half2 screenVec = (_CustomScreenCenter.xy - screenUV)*_VignetteVec.x;
|
||||
screenVec.x *= _VignetteVec.y;
|
||||
half2 dist = dot(screenVec,screenVec);
|
||||
dist = saturate(dist);
|
||||
half factor = pow(1-dist,_VignetteVec.z) ;
|
||||
// color.rgb *= lerp(_VignetteColor,(1.0).xxx,factor);
|
||||
factor = 1- factor;
|
||||
factor = lerp(factor,1,_VignetteVec.w);
|
||||
// _VignetteColor *= factor;
|
||||
color.rgb = lerp(color,_VignetteColor,factor);
|
||||
color.a =1;
|
||||
}
|
||||
|
||||
// return half4(_TextureOverlayIntensity.rrr,1);
|
||||
// float finalIntensity = (_SpeedDistortVec.x+ _TextureOverlayIntensity +_InvertIntensity +(1- _DeSaturateIntensity)+_Contrast)*2;
|
||||
// finalIntensity = saturate(finalIntensity);
|
||||
|
||||
// return half4(saturate(color.a).rrr,1);
|
||||
|
||||
return half4(color.rgb,saturate(color.a));
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5fd213d22763447c4aa106605e06184e
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures:
|
||||
- _SpeedDistortMap: {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3}
|
||||
- _TextureOverlay: {instanceID: 0}
|
||||
- _TextureOverlayMask: {instanceID: 0}
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc38b53417a9dae4889ac1e800e06e01
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af9e4a2cbc9cee94485138c3bc876c62
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="91023a6b-e90c-4b7e-ad29-2c758b62337b" name="更改" comment="" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"associatedIndex": 1
|
||||
}]]></component>
|
||||
<component name="ProjectId" id="2woZni0kkDvAva6vMvSRxXle59k" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="默认任务">
|
||||
<changelist id="91023a6b-e90c-4b7e-ad29-2c758b62337b" name="更改" comment="" />
|
||||
<created>1746710058620</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1746710058620</updated>
|
||||
<workItem from="1746710064595" duration="3599000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="false" />
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,146 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof(AnimationSheetHelper))]
|
||||
public class AnimationSheetHelperEditor : Editor
|
||||
{
|
||||
SerializedProperty isParticleBaseShader;
|
||||
SerializedProperty isPostProcessShader;
|
||||
SerializedProperty postProcessingController;
|
||||
SerializedProperty propertyName;
|
||||
|
||||
SerializedProperty xSize;
|
||||
SerializedProperty ySize;
|
||||
|
||||
SerializedProperty manualPlay;
|
||||
SerializedProperty manualPlayePos;
|
||||
SerializedProperty speed;
|
||||
|
||||
SerializedProperty scaleOffset;
|
||||
SerializedProperty mat;
|
||||
SerializedProperty frameIndex;
|
||||
SerializedProperty frameCount;
|
||||
|
||||
private AnimationSheetHelper _target;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
_target = (AnimationSheetHelper)target;
|
||||
|
||||
isParticleBaseShader = serializedObject.FindProperty("isParticleBaseShader");
|
||||
// isPostProcessShader = serializedObject.FindProperty("isPostProcessShader");
|
||||
// postProcessingController = serializedObject.FindProperty("postProcessingController");
|
||||
propertyName = serializedObject.FindProperty("propertyName");
|
||||
|
||||
xSize = serializedObject.FindProperty("xSize");
|
||||
ySize = serializedObject.FindProperty("ySize");
|
||||
|
||||
manualPlay = serializedObject.FindProperty("manualPlay");
|
||||
manualPlayePos = serializedObject.FindProperty("manualPlayePos");
|
||||
speed = serializedObject.FindProperty("speed");
|
||||
|
||||
scaleOffset = serializedObject.FindProperty("scaleOffset");
|
||||
mat = serializedObject.FindProperty("mat");
|
||||
frameIndex = serializedObject.FindProperty("frameIndex");
|
||||
frameCount = serializedObject.FindProperty("frameCount");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
DrawShaderSection();
|
||||
EditorGUILayout.Space(5);
|
||||
DrawAnimationSection();
|
||||
EditorGUILayout.Space(5);
|
||||
DrawRuntimeInfo();
|
||||
EditorGUILayout.Space(8);
|
||||
DrawInitButton();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
#region Sections
|
||||
|
||||
void DrawShaderSection()
|
||||
{
|
||||
EditorGUILayout.LabelField("Shader 设置", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(isParticleBaseShader, new GUIContent("使用 NB Shader"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
_target.InitParticleBaseShaderToggle();
|
||||
EditorUtility.SetDirty(_target);
|
||||
}
|
||||
|
||||
// EditorGUI.BeginChangeCheck();
|
||||
// EditorGUILayout.PropertyField(isPostProcessShader, new GUIContent("使用 后处理扭曲"));
|
||||
// if (EditorGUI.EndChangeCheck())
|
||||
// {
|
||||
// serializedObject.ApplyModifiedProperties();
|
||||
// // _target.InitPostProcessToggle();
|
||||
// EditorUtility.SetDirty(_target);
|
||||
// }
|
||||
|
||||
// if (isPostProcessShader.boolValue)
|
||||
// {
|
||||
// GUI.enabled = false;
|
||||
// EditorGUILayout.PropertyField(postProcessingController);
|
||||
// GUI.enabled = true;
|
||||
// }
|
||||
|
||||
EditorGUILayout.PropertyField(propertyName, new GUIContent("Shader 属性名"));
|
||||
}
|
||||
|
||||
void DrawAnimationSection()
|
||||
{
|
||||
EditorGUILayout.LabelField("序列帧设置", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(xSize, new GUIContent("横向帧数量"));
|
||||
EditorGUILayout.PropertyField(ySize, new GUIContent("纵向帧数量"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
_target.Init();
|
||||
EditorUtility.SetDirty(_target);
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
EditorGUILayout.PropertyField(manualPlay, new GUIContent("手动控制播放"));
|
||||
|
||||
if (manualPlay.boolValue)
|
||||
{
|
||||
EditorGUILayout.PropertyField(manualPlayePos, new GUIContent("手动播放位置"));
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.PropertyField(speed, new GUIContent("播放速度 fps"));
|
||||
}
|
||||
}
|
||||
|
||||
void DrawRuntimeInfo()
|
||||
{
|
||||
EditorGUILayout.LabelField("运行时信息", EditorStyles.boldLabel);
|
||||
|
||||
GUI.enabled = false;
|
||||
EditorGUILayout.PropertyField(scaleOffset, new GUIContent("Tiling Offset"));
|
||||
EditorGUILayout.PropertyField(mat, new GUIContent("Material"));
|
||||
EditorGUILayout.PropertyField(frameIndex);
|
||||
EditorGUILayout.PropertyField(frameCount);
|
||||
GUI.enabled = true;
|
||||
}
|
||||
|
||||
void DrawInitButton()
|
||||
{
|
||||
if (GUILayout.Button("初始化", GUILayout.Height(28)))
|
||||
{
|
||||
_target.Init();
|
||||
EditorUtility.SetDirty(_target);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e1a5d6748bd4515869cb9c6ebd2b548
|
||||
timeCreated: 1769260616
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01d5272ee28d1384d9f555c579592a6b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.shaders.Editor",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:0e3b0e6ce60c7a34094f8f9822c0b7f2",
|
||||
"GUID:8495541fcd41b0c40b5b6e6e7a7639d1",
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5e03fab8dc9c256468083d9bc82a73c3
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4684518ac782305428f8c0434c85d1c0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,328 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
// using Sirenix.OdinInspector;
|
||||
// using Unity.Mathematics;
|
||||
using UnityEngine.UI;
|
||||
using System.Collections.Generic;
|
||||
using NBShader;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
[ExecuteInEditMode]
|
||||
public class AnimationSheetHelper : MonoBehaviour,IMaterialModifier
|
||||
{
|
||||
|
||||
public bool isParticleBaseShader = true;
|
||||
|
||||
public string propertyName = "_BaseMap_ST";
|
||||
|
||||
private int _propertyID;
|
||||
private int _particleBaseAniBlendStPropertyID = Shader.PropertyToID("_BaseMap_AnimationSheetBlend_ST");
|
||||
private int _particleBaseAniBlendIntensityPropertyID = Shader.PropertyToID("_AnimationSheetHelperBlendIntensity");
|
||||
private W9ParticleShaderFlags _flags = new W9ParticleShaderFlags();
|
||||
|
||||
|
||||
|
||||
// [LabelText("序列帧图横向帧数量")]
|
||||
// [OnValueChanged("Init")]
|
||||
public int xSize = 4;
|
||||
|
||||
// [LabelText("序列帧图纵向帧数量")]
|
||||
// [OnValueChanged("Init")]
|
||||
public int ySize = 4;
|
||||
|
||||
// [LabelText("手动控制播放")]
|
||||
public bool manualPlay = false;
|
||||
|
||||
// [ShowIf("manualPlay")]
|
||||
// [LabelText("手动播放位置")] [Range(0, 1)]
|
||||
public float manualPlayePos = 0;
|
||||
|
||||
// [LabelText("播放速度fps")]
|
||||
// [HideIf("manualPlay")]
|
||||
public float speed = 16;
|
||||
|
||||
// [ReadOnly]
|
||||
// [LabelText("TillingOffset")]
|
||||
public Vector4 scaleOffset;
|
||||
// [ReadOnly]
|
||||
public Material mat;
|
||||
|
||||
// [ReadOnly]
|
||||
public int frameIndex;
|
||||
// [ReadOnly]
|
||||
public int frameCount;
|
||||
|
||||
private float _time;
|
||||
|
||||
private float _xScale;
|
||||
private float _yScale;
|
||||
|
||||
private static List<Material> usedMaterialList = new List<Material>();
|
||||
|
||||
|
||||
// // Start is called before the first frame update
|
||||
// void Start()
|
||||
// {
|
||||
// Debug.Log( "ASUpadate_Start");
|
||||
// Init();
|
||||
// }
|
||||
private void OnEnable()
|
||||
{
|
||||
// Debug.Log( "ASUpadate_OnEnable");
|
||||
Init();
|
||||
#if UNITY_EDITOR
|
||||
EditorApplication.update += EditorUpdate;
|
||||
#endif
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Init();
|
||||
|
||||
//清掉,避免参数保留。
|
||||
if (isParticleBaseShader)
|
||||
{
|
||||
if (mat)
|
||||
{
|
||||
_flags.SetMaterial(mat);
|
||||
_flags.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER,index:1);
|
||||
}
|
||||
}
|
||||
|
||||
if (usedMaterialList.Contains(mat))
|
||||
{
|
||||
usedMaterialList.Remove(mat);
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
EditorApplication.update -= EditorUpdate;
|
||||
#endif
|
||||
}
|
||||
|
||||
// [Button("初始化")]
|
||||
public void Init()
|
||||
{
|
||||
_time = 0;
|
||||
if (xSize <= 0)
|
||||
{
|
||||
xSize = 1;
|
||||
}
|
||||
|
||||
if (ySize <= 0)
|
||||
{
|
||||
ySize = 1;
|
||||
}
|
||||
frameCount = xSize * ySize;
|
||||
|
||||
_xScale = 1 / (float)xSize;
|
||||
_yScale = 1 / (float)ySize;
|
||||
// if (frameCount <= 0)
|
||||
// {
|
||||
// frameCount = 1;
|
||||
// }
|
||||
// scaleOffset = new Vector4(1f/(float)xSize,1f/ (float)ySize, 0, 0);
|
||||
|
||||
if (gameObject.TryGetComponent(out Graphic g))
|
||||
{
|
||||
if (Application.isPlaying)
|
||||
{
|
||||
mat = g.materialForRendering;
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = g.material;
|
||||
}
|
||||
}
|
||||
else if (gameObject.TryGetComponent(out Renderer r))
|
||||
{
|
||||
if (Application.isPlaying)
|
||||
{
|
||||
mat = r.material;
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = r.sharedMaterial;
|
||||
}
|
||||
// Debug.Log("AS_GetRenderer:Mat--"+mat.name);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = null;
|
||||
}
|
||||
|
||||
InitParticleBaseShaderToggle();
|
||||
// InitPostProcessToggle();
|
||||
|
||||
|
||||
_propertyID = Shader.PropertyToID(propertyName);
|
||||
if (mat != null)
|
||||
{
|
||||
mat.SetVector(_propertyID,CalSt(0));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void InitParticleBaseShaderToggle()
|
||||
{
|
||||
if (isParticleBaseShader)
|
||||
{
|
||||
_flags.SetMaterial(mat);
|
||||
// Debug.Log(_flags.CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE,index:1));
|
||||
if(_flags.CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_UIEFFECT_ON) && !_flags.CheckFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE,index:1))
|
||||
{
|
||||
propertyName = "_UI_MainTex_ST";
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyName = "_BaseMap_ST";
|
||||
}
|
||||
if (mat)
|
||||
{
|
||||
|
||||
_flags.SetMaterial(mat);
|
||||
_flags.SetFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER,index:1);
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// if (mat)
|
||||
// {
|
||||
// if (mat.shader.name == "Mh2/Effects/Particle_NiuBi")
|
||||
// {
|
||||
// _flags.SetMaterial(mat);
|
||||
// _flags.ClearFlagBits(W9ParticleShaderFlags.FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER,index:1);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// public void InitPostProcessToggle()
|
||||
// {
|
||||
// if (isPostProcessShader)
|
||||
// {
|
||||
// TryGetComponent<PostProcessingController>(out postProcessingController);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// postProcessingController = null;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// Update is called once per frame
|
||||
private int _lastIndex;
|
||||
private int _nextIndex = 1;
|
||||
private float _blendLerp;
|
||||
private void Update()
|
||||
{
|
||||
// if (!isPostProcessShader)//后处理控制不通过才知。
|
||||
// {
|
||||
// if(!mat || _propertyID==0) return;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
float frameIndexFloat;
|
||||
if (manualPlay)
|
||||
{
|
||||
float playPos = Mathf.Repeat(manualPlayePos, 1f);
|
||||
frameIndexFloat = playPos * frameCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
_time += (float)editorDeltaTime * speed;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
_time += Time.deltaTime * speed;
|
||||
}
|
||||
frameIndexFloat = _time % frameCount;
|
||||
}
|
||||
frameIndex = (int) frameIndexFloat;
|
||||
if (frameIndex == frameCount)
|
||||
{
|
||||
frameIndex = frameCount - 1;
|
||||
}
|
||||
|
||||
|
||||
if (_lastIndex != frameIndex)
|
||||
{
|
||||
// if (isPostProcessShader)
|
||||
// {
|
||||
// postProcessingController.distortSpeedTexSt = CalSt(frameIndex);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
mat.SetVector(_propertyID,CalSt(frameIndex));
|
||||
// }
|
||||
_lastIndex = frameIndex;
|
||||
_nextIndex = frameIndex + 1;
|
||||
if (isParticleBaseShader)
|
||||
{
|
||||
mat.SetVector(_particleBaseAniBlendStPropertyID,CalSt(_nextIndex));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (isParticleBaseShader)
|
||||
{
|
||||
_blendLerp = Mathf.Repeat(frameIndexFloat,1f);
|
||||
mat.SetFloat(_particleBaseAniBlendIntensityPropertyID,_blendLerp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public Material GetModifiedMaterial(Material baseMaterial)
|
||||
{
|
||||
if (usedMaterialList.Contains(baseMaterial))
|
||||
{
|
||||
//有可能打断UI合批,烦请客户端判断
|
||||
Material newMat = Instantiate(baseMaterial);
|
||||
mat = newMat;
|
||||
usedMaterialList.Add(newMat);
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = baseMaterial;
|
||||
usedMaterialList.Add(baseMaterial);
|
||||
}
|
||||
return mat;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private Vector4 CalSt(int index)
|
||||
{
|
||||
float xOffset = (index % xSize)*_xScale;
|
||||
float yOffset = (ySize - index / xSize -1)*_yScale;
|
||||
return new Vector4(_xScale, _yScale, xOffset, yOffset);
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
private double editorDeltaTime = 0;
|
||||
private double lastEditorTime = 0;
|
||||
void EditorUpdate()
|
||||
{
|
||||
|
||||
if (lastEditorTime == 0)
|
||||
{
|
||||
lastEditorTime = EditorApplication.timeSinceStartup;
|
||||
}
|
||||
editorDeltaTime = EditorApplication.timeSinceStartup - lastEditorTime;
|
||||
lastEditorTime = EditorApplication.timeSinceStartup;
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
Update();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf793623f3ea13b4db35460280cb6ded
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,91 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
// using Sirenix.OdinInspector;
|
||||
namespace NBShader
|
||||
{
|
||||
[ExecuteAlways]
|
||||
public class NBShaderSpriteHelper : MonoBehaviour
|
||||
{
|
||||
public Sprite sprite;
|
||||
|
||||
// [ReadOnly]
|
||||
public SpriteRenderer spRenderer;
|
||||
|
||||
// [ReadOnly]
|
||||
public Image image;
|
||||
|
||||
[InspectorButton("初始化", "Init")] public bool ButtomInspector;
|
||||
|
||||
private Material mat;
|
||||
|
||||
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
if (TryGetComponent<SpriteRenderer>(out SpriteRenderer spr))
|
||||
{
|
||||
spRenderer = spr;
|
||||
sprite = spr.sprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TryGetComponent<Image>(out Image im))
|
||||
{
|
||||
image = im;
|
||||
sprite = im.sprite;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (sprite)
|
||||
{
|
||||
Texture texture = sprite.texture;
|
||||
Rect rect = sprite.textureRect;
|
||||
// sharedMaterial.SetVector("_BaseMapReverseST",CalScaleOffset(spRenderer.sprite.textureRect,spRenderer.sprite.texture));
|
||||
|
||||
if (spRenderer)
|
||||
{
|
||||
if (Application.isPlaying)
|
||||
{
|
||||
mat = spRenderer.material;
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = spRenderer.sharedMaterial;
|
||||
}
|
||||
}
|
||||
else if (image)
|
||||
{
|
||||
mat = image.material;
|
||||
}
|
||||
|
||||
if (mat && mat.shader.name == "Effects/NBShader")
|
||||
{
|
||||
mat.SetVector("_MainTex_Reverse_ST", CalScaleOffset(rect, texture));
|
||||
Debug.Log(mat.name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Vector4 CalScaleOffset(Rect textureRect, Texture texture)
|
||||
{
|
||||
//这是一个反向的scale offset。
|
||||
//算法:如果原scale offset。转换后会是 scaleAfter= 1 / scale , offsetAfter = - offset/scale;
|
||||
Vector2 scaleAfter = new Vector2(texture.width / textureRect.width, texture.height / textureRect.height);
|
||||
Vector2 offsetAfter = new Vector2(-(textureRect.x / texture.width) * scaleAfter.x,
|
||||
-(textureRect.y / texture.height) * scaleAfter.y);
|
||||
Vector4 scaleOffset = new Vector4(scaleAfter.x, scaleAfter.y, offsetAfter.x, offsetAfter.y);
|
||||
return scaleOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58ec7ff2f9b58f5459946ac86028eacf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,768 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBShader
|
||||
{
|
||||
public class W9ParticleShaderFlags : ShaderFlagsBase
|
||||
{
|
||||
public const string FlagsName = "_W9ParticleShaderFlags";
|
||||
public static int FlagsId = Shader.PropertyToID(FlagsName);
|
||||
|
||||
|
||||
public const string Flags1Name = "_W9ParticleShaderFlags1";
|
||||
public static int Flags1Id = Shader.PropertyToID(Flags1Name);
|
||||
|
||||
public const string WrapFlagsName = "_W9ParticleShaderWrapFlags";
|
||||
public static int WrapFlagsId = Shader.PropertyToID(WrapFlagsName);
|
||||
|
||||
public const string foldOutFlagName = "_W9ParticleShaderGUIFoldToggle";
|
||||
public static int foldOutFlagId = Shader.PropertyToID(foldOutFlagName);
|
||||
|
||||
public const string foldOutFlagName1 = "_W9ParticleShaderGUIFoldToggle1";
|
||||
public static int foldOutFlagId1 = Shader.PropertyToID(foldOutFlagName1);
|
||||
|
||||
public const string foldOutFlagName2 = "_W9ParticleShaderGUIFoldToggle2";
|
||||
public static int foldOutFlagId2 = Shader.PropertyToID(foldOutFlagName2);
|
||||
|
||||
public const string colorChannelFlagName = "_W9ParticleShaderColorChannelFlag";
|
||||
public static int colorChannelFlagId = Shader.PropertyToID(colorChannelFlagName);
|
||||
|
||||
public const string pNoiseBlendFlagName = "_W9ParticleShaderPNoiseBlendFlag";
|
||||
public static int pNoiseBlendFlagId = Shader.PropertyToID(pNoiseBlendFlagName);
|
||||
|
||||
// public const string WrapFlags2Name = "_W9ParticleShaderWrapFlags2";
|
||||
// public static int WrapFlags2Id = Shader.PropertyToID(WrapFlags2Name);
|
||||
|
||||
public override int GetShaderFlagsId(int index = 0)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return FlagsId;
|
||||
|
||||
case 1:
|
||||
return Flags1Id;
|
||||
|
||||
case 2:
|
||||
return WrapFlagsId;
|
||||
|
||||
//FoldOut必须要紧挨着,因为按照Index去拿AnimBool
|
||||
case 3:
|
||||
return foldOutFlagId;
|
||||
|
||||
case 4:
|
||||
return foldOutFlagId1;
|
||||
|
||||
case 5:
|
||||
return foldOutFlagId2;
|
||||
|
||||
case 6:
|
||||
return colorChannelFlagId;
|
||||
|
||||
case 7:
|
||||
return pNoiseBlendFlagId;
|
||||
// case 8:
|
||||
// return WrapFlags2Id;
|
||||
|
||||
default:
|
||||
return FlagsId;
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetShaderFlagsName(int index = 0)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return FlagsName;
|
||||
|
||||
case 1:
|
||||
return Flags1Name;
|
||||
|
||||
case 2:
|
||||
return WrapFlagsName;
|
||||
|
||||
case 3:
|
||||
return foldOutFlagName;
|
||||
|
||||
case 4:
|
||||
return foldOutFlagName1;
|
||||
|
||||
case 5:
|
||||
return colorChannelFlagName;
|
||||
|
||||
default:
|
||||
return FlagsName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public W9ParticleShaderFlags(Material material = null) : base(material)
|
||||
{
|
||||
}
|
||||
|
||||
public const int FLAG_BIT_SATURABILITY_ON = 1 << 0;
|
||||
public const int FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE = 1 << 1;
|
||||
public const int FLAG_BIT_PARTICLE_FRESNEL_FADE_ON = 1 << 2;
|
||||
public const int FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON = 1 << 3;
|
||||
public const int FLAG_BIT_PARTICLE_USETEXCOORD2 = 1 << 4;
|
||||
public const int FLAG_BIT_PARTICLE_DISTANCEFADE_ON = 1 << 5;
|
||||
public const int FLAG_BIT_PARTICLE_CHORATICABERRAT = 1 << 6;
|
||||
public const int FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON = 1 << 7;
|
||||
public const int FLAG_BIT_PARTICLE_POLARCOORDINATES_ON = 1 << 8;
|
||||
public const int FLAG_BIT_PARTICLE_UTWIRL_ON = 1 << 9;
|
||||
public const int FLAG_BIT_PARTICLE_LINEARTOGAMMA_ON = 1 << 10;
|
||||
public const int FLAG_BIT_PARTICLE_FRESNEL_ON = 1 << 11;
|
||||
public const int FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON = 1 << 12;
|
||||
public const int FLAG_BIT_PARTICLE_FRESNEL_COLOR_AFFETCT_BY_ALPHA = 1 << 13;
|
||||
public const int FLAG_BIT_PARTICLE_UIEFFECT_ON = 1 << 14;
|
||||
public const int FLAG_BIT_PARTICLE_UNSCALETIME_ON = 1 << 15;
|
||||
public const int FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON = 1 << 16;
|
||||
public const int FLAG_BIT_PARTICLE_CUSTOMDATA1_ON = 1 << 17;
|
||||
public const int FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON = 1 << 18;
|
||||
public const int FLAG_BIT_HUESHIFT_ON = 1 << 19;
|
||||
public const int FLAG_BIT_PARTICLE_CUSTOMDATA2_ON = 1 << 20;
|
||||
public const int FLAG_BIT_PARTICLE_NORMALMAP_MASK_MODE = 1 << 21;
|
||||
public const int FLAG_BIT_PARTICLE_COLOR_ADJUSTMENT_ONLY_AFFECT_MAINTEX = 1 << 22;
|
||||
public const int FLAG_BIT_PARTICLE_RAMP_COLOR_MAP_MODE_ON = 1 << 23;
|
||||
public const int FLAG_BIT_PARTICLE_RAMP_COLOR_BLEND_ADD = 1 << 24;
|
||||
public const int FLAG_BIT_PARTICLE_COLOR_BLEND_ALPHA_MULTIPLY_MODE = 1 << 25;
|
||||
public const int FLAG_BIT_PARTICLE_DISSOLVE_RAMP_MAP = 1 << 26;
|
||||
public const int FLAG_BIT_PARTICLE_DISSOLVE_MASK = 1 << 27;
|
||||
public const int FLAG_BIT_PARTICLE_BACKCOLOR = 1 << 28;
|
||||
public const int FLAG_BIT_PARTICLE_COLOR_MULTI_ALPHA = 1 << 29;
|
||||
public const int FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON = 1 << 30;
|
||||
public const int FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR = 1 << 31;
|
||||
|
||||
public const int FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE = 1 << 0;
|
||||
public const int FLAG_BIT_PARTICLE_1_PARALLAX_MAPPING = 1 << 1;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASKMAP_GRADIENT = 1 << 2;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASKMAP_2_GRADIENT = 1 << 3;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASKMAP_3_GRADIENT = 1 << 4;
|
||||
public const int FLAG_BIT_PARTICLE_1_DISSOLVE_LINE_MASK = 1 << 5;
|
||||
public const int FLAG_BIT_PARTICLE_1_DISSOLVE_RAMP_MULITPLY = 1 << 6;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASK_REFINE = 1 << 7;
|
||||
public const int FLAG_BIT_PARTICLE_1_SCREEN_DISTORT_ALPHA_REFINE = 1 << 8;
|
||||
public const int FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR = 1 << 9;
|
||||
public const int FLAG_BIT_PARTICLE_1_PROGRAM_NOISE_SIMPLE = 1 << 10;
|
||||
public const int FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP = 1 << 11;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASK_MAP2 = 1 << 12;
|
||||
public const int FLAG_BIT_PARTICLE_1_MASK_MAP3 = 1 << 13;
|
||||
public const int FLAG_BIT_PARTICLE_1_NOISE_MASKMAP = 1 << 14;
|
||||
public const int FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER = 1 << 15;
|
||||
public const int FLAG_BIT_PARTICLE_1_PROGRAM_NOISE_VORONOI = 1 << 16;
|
||||
public const int FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE = 1 << 17;
|
||||
public const int FLAG_BIT_PARTICLE_1_USE_TEXCOORD1 = 1 << 18;
|
||||
public const int FLAG_BIT_PARTICLE_1_USE_TEXCOORD2 = 1 << 19;
|
||||
public const int FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE = 1 << 20;
|
||||
public const int FLAG_BIT_PARTICLE_1_UV_FROM_MESH = 1 << 21; //3D条件下,如果不是来源于Mesh,就默认来源于粒子。
|
||||
public const int FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE = 1 << 22; //3D条件下,如果不是来源于Mesh,就默认来源于粒子。
|
||||
public const int FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM = 1 << 23; //3D条件下,如果不是来源于Mesh,就默认来源于粒子。
|
||||
public const int FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST = 1 << 24;
|
||||
public const int FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO = 1 << 25;
|
||||
public const int FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP = 1 << 26;
|
||||
public const int FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE = 1 << 27;
|
||||
public const int FLAG_BIT_PARTICLE_1_BUMP_TEX_UV_FOLLOW_MAINTEX = 1 << 28;
|
||||
public const int FLAG_BIT_PARTICLE_1_SIXWAY_RAMPMAP = 1 << 29;
|
||||
public const int FLAG_BIT_PARTICLE_1_MATCAP_MULTY_MODE = 1 << 30;
|
||||
|
||||
|
||||
public const int FLAG_BIT_WRAPMODE_BASEMAP = 1 << 0;
|
||||
public const int FLAG_BIT_WRAPMODE_MASKMAP = 1 << 1;
|
||||
public const int FLAG_BIT_WRAPMODE_MASKMAP2 = 1 << 2;
|
||||
public const int FLAG_BIT_WRAPMODE_NOISEMAP = 1 << 3;
|
||||
public const int FLAG_BIT_WRAPMODE_EMISSIONMAP = 1 << 4;
|
||||
public const int FLAG_BIT_WRAPMODE_DISSOLVE_MAP = 1 << 5;
|
||||
public const int FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP = 1 << 6;
|
||||
public const int FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP = 1 << 7;
|
||||
public const int FLAG_BIT_WRAPMODE_COLORBLENDMAP = 1 << 8;
|
||||
public const int FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP = 1 << 9;
|
||||
public const int FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP = 1 << 10;
|
||||
public const int FLAG_BIT_WRAPMODE_MASKMAP3 = 1 << 11;
|
||||
public const int FLAG_BIT_WRAPMODE_NOISE_MASKMAP = 1 << 12;
|
||||
public const int FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP = 1 << 13;
|
||||
public const int FLAG_BIT_WRAPMODE_BUMPTEX = 1 << 14;
|
||||
public const int FLAG_BIT_WRAPMODE_RAMP_COLOR_MAP = 1 << 15;
|
||||
|
||||
// public const int FLAG_BIT_WRAPMODE2_SHAREDUV = 1 << 0;
|
||||
|
||||
public const int foldOutBitMeshOption = 1 << 0;
|
||||
public const int foldOutBitMainTexOption = 1 << 1;
|
||||
public const int foldOutBitBaseOption = 1 << 2;
|
||||
public const int foldOutBitFeatureOption = 1 << 3;
|
||||
public const int foldOutBitBaseMap = 1 << 4;
|
||||
public const int foldOutBitMask = 1 << 5;
|
||||
public const int foldOutBitMaskMap = 1 << 6;
|
||||
public const int foldOutBitMask2 = 1 << 7;
|
||||
public const int foldOutBitMask3 = 1 << 8;
|
||||
public const int foldOutBitTwril = 1 << 9;
|
||||
public const int foldOutBitPolar = 1 << 10;
|
||||
public const int foldOutBitHueShift = 1 << 11;
|
||||
public const int foldOutBitSaturability = 1 << 12;
|
||||
public const int foldOutBitDistanceFade = 1 << 13;
|
||||
public const int foldOutBitSoftParticles = 1 << 14;
|
||||
public const int foldOutBitMaskRotate = 1 << 15;
|
||||
public const int foldOutBitNoise = 1 << 16;
|
||||
public const int foldOutBitNoiseMap = 1 << 17;
|
||||
public const int foldOutBitNoiseMaskToggle = 1 << 18;
|
||||
public const int foldOutBitEmission = 1 << 19;
|
||||
public const int foldOutBitDistortionChoraticaberrat = 1 << 20;
|
||||
public const int foldOutDissolve = 1 << 21;
|
||||
public const int foldOutDissolveMap = 1 << 22;
|
||||
public const int foldOutProgramNoise = 1 << 23;
|
||||
public const int foldOutDissolveRampMap = 1 << 24;
|
||||
public const int foldOutDissolveMask = 1 << 25;
|
||||
public const int foldOutColorBlend = 1 << 26;
|
||||
public const int foldOutFresnel = 1 << 27;
|
||||
public const int foldOutDepthOutline = 1 << 28;
|
||||
public const int foldOutVertexOffset = 1 << 29;
|
||||
public const int foldOutParallexMapping = 1 << 30;
|
||||
// public const int foldOutBit1Portal= 1 << 31;
|
||||
|
||||
|
||||
|
||||
|
||||
public const int foldOutBit1UVModeMainTex = 1 << 0;
|
||||
public const int foldOutBit1UVModeMaskMap = 1 << 1;
|
||||
public const int foldOutBit1UVModeMaskMap2 = 1 << 2;
|
||||
public const int foldOutBit1UVModeMaskMap3 = 1 << 3;
|
||||
public const int foldOutBit1UVModeNoiseMap = 1 << 4;
|
||||
public const int foldOutBit1UVModeNoiseMaskMap = 1 << 5;
|
||||
public const int foldOutBit1UVModeEmissionMap = 1 << 6;
|
||||
public const int foldOutBit1UVModeDissolveMap = 1 << 7;
|
||||
public const int foldOutBit1UVModeDissolveMaskMap = 1 << 8;
|
||||
public const int foldOutBit1UVModeColorBlendMap = 1 << 9;
|
||||
public const int foldOutBit1UVModeVertexOffsetMap = 1 << 10;
|
||||
public const int foldOutBit1UVModeVertexOffsetMaskMap = 1 << 11;
|
||||
public const int foldOutBit1UVModeBumpTex = 1 << 12;
|
||||
public const int foldOutBit1UVModeRampColorMap = 1 << 13;
|
||||
public const int foldOutBit1UVModeProgramNoise = 1 << 14;
|
||||
|
||||
//留一些位置给以后可能会增加的贴图。
|
||||
public const int foldOutBit1Portal = 1 << 20;
|
||||
public const int foldOutBit1ZOffset = 1 << 21;
|
||||
public const int foldOutBit1CustomStencilTest = 1 << 22;
|
||||
public const int foldOutBit1TaOption = 1 << 23;
|
||||
public const int foldOutBit1MianTexContrast = 1 << 24;
|
||||
public const int foldOutBit1VertexOffsetMask = 1 << 25;
|
||||
public const int foldOutBit1MainTexColorRefine = 1 << 26;
|
||||
public const int foldOutBit1LightOption = 1 << 27;
|
||||
public const int foldOutBit1ShaderKeyword = 1 << 28;
|
||||
public const int foldOutBit1BumpTex = 1 << 29;
|
||||
|
||||
public const int foldOutBit2BumpTexToggle = 1 << 0;
|
||||
public const int foldOutBit2MatCapToggle = 1 << 1;
|
||||
public const int foldOutBit2RampColor = 1 << 2;
|
||||
public const int foldOutBit2DissolveLine = 1 << 3;
|
||||
public const int foldOutBit2BaseBackColor = 1 << 4;
|
||||
public const int foldOutBit2MaskRefine = 1 << 5;
|
||||
public const int foldOutBit2ScreenDistortAlphaRefine = 1 << 6;
|
||||
public const int foldOutBit2ProgramNoiseSimple = 1 << 7;
|
||||
public const int foldOutBit2ProgramNoiseVoronoi = 1 << 8;
|
||||
public const int foldOutBit2ColorAdjustment = 1 << 9;
|
||||
public const int foldOutBit2SharedUV = 1 << 10;
|
||||
public const int foldOutBit2SharedUVMode = 1 << 11;
|
||||
|
||||
|
||||
#region CustomDataCodes
|
||||
|
||||
public const string CustomDataFlag0Name = "_W9ParticleCustomDataFlag0";
|
||||
public const string CustomDataFlag1Name = "_W9ParticleCustomDataFlag1";
|
||||
public const string CustomDataFlag2Name = "_W9ParticleCustomDataFlag2";
|
||||
public const string CustomDataFlag3Name = "_W9ParticleCustomDataFlag3";
|
||||
public static int CustomDataFlag0Id = Shader.PropertyToID(CustomDataFlag0Name);
|
||||
public static int CustomDataFlag1Id = Shader.PropertyToID(CustomDataFlag1Name);
|
||||
public static int CustomDataFlag2Id = Shader.PropertyToID(CustomDataFlag2Name);
|
||||
public static int CustomDataFlag3Id = Shader.PropertyToID(CustomDataFlag3Name);
|
||||
|
||||
public enum CutomDataComponent
|
||||
{
|
||||
Off,
|
||||
CustomData1X,
|
||||
CustomData1Y,
|
||||
CustomData1Z,
|
||||
CustomData1W,
|
||||
CustomData2X,
|
||||
CustomData2Y,
|
||||
CustomData2Z,
|
||||
CustomData2W,
|
||||
UnKnownOrMixed = -1
|
||||
}
|
||||
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X = 0 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y = 1 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY = 2 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT = 3 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X = 4 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y = 5 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET = 6 * 4;
|
||||
public const int FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY = 7 * 4;
|
||||
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X = 0 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y = 1 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY = 2 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_SATURATE = 3 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X = 4 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y = 5 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY = 6 * 4;
|
||||
public const int FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY = 7 * 4;
|
||||
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X = 0 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y = 1 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X = 2 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y = 3 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X = 4 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y = 5 * 4;
|
||||
public const int FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST = 6 * 4;
|
||||
//---->这里还有一个坑可以用哦
|
||||
|
||||
public const int FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X = 0 * 4;
|
||||
public const int FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y = 1 * 4;
|
||||
public const int FLAGBIT_POS_3_CUSTOMDATA_SHARED_UV_OFFSET_X = 2 * 4;
|
||||
public const int FLAGBIT_POS_3_CUSTOMDATA_SHARED_UV_OFFSET_Y = 3 * 4;
|
||||
|
||||
|
||||
public const int isCustomDataBit = 1 << 3;
|
||||
public const int Data12Bit = 1 << 2; //true CustomData1 / false CustomData2
|
||||
public const int DataXYorZWBit = 1 << 1; //true xy / false zw
|
||||
public const int DataXZorYWBit = 1 << 0; //true xz / false yw
|
||||
public const int CustomData1XBit = isCustomDataBit | Data12Bit | DataXYorZWBit | DataXZorYWBit;
|
||||
public const int CustomData1YBit = isCustomDataBit | Data12Bit | DataXYorZWBit;
|
||||
public const int CustomData1ZBit = isCustomDataBit | Data12Bit | DataXZorYWBit;
|
||||
public const int CustomData1WBit = isCustomDataBit | Data12Bit;
|
||||
public const int CustomData2XBit = isCustomDataBit | DataXYorZWBit | DataXZorYWBit;
|
||||
public const int CustomData2YBit = isCustomDataBit | DataXYorZWBit;
|
||||
public const int CustomData2ZBit = isCustomDataBit | DataXZorYWBit;
|
||||
public const int CustomData2WBit = isCustomDataBit;
|
||||
|
||||
private int GetCustomDataFlagID(int dataIndex)
|
||||
{
|
||||
switch (dataIndex)
|
||||
{
|
||||
case 0:
|
||||
return CustomDataFlag0Id;
|
||||
|
||||
case 1:
|
||||
return CustomDataFlag1Id;
|
||||
|
||||
case 2:
|
||||
return CustomDataFlag2Id;
|
||||
case 3:
|
||||
return CustomDataFlag3Id;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public string GetCustomDataFlagPropertyName(int dataIndex)
|
||||
{
|
||||
switch (dataIndex)
|
||||
{
|
||||
case 0:
|
||||
return CustomDataFlag0Name;
|
||||
|
||||
case 1:
|
||||
return CustomDataFlag1Name;
|
||||
|
||||
case 2:
|
||||
return CustomDataFlag2Name;
|
||||
|
||||
case 3:
|
||||
return CustomDataFlag3Name;
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public CutomDataComponent GetCustomDataFlag(int dataBitPos, int dataIndex)
|
||||
{
|
||||
int bit = material.GetInteger(GetCustomDataFlagID(dataIndex));
|
||||
|
||||
bit = bit >> dataBitPos;
|
||||
bit &= 15; // binary 1111
|
||||
|
||||
if ((bit & isCustomDataBit) == 0)
|
||||
{
|
||||
return CutomDataComponent.Off;
|
||||
}
|
||||
else if (bit == CustomData1XBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData1X;
|
||||
}
|
||||
else if (bit == CustomData1YBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData1Y;
|
||||
}
|
||||
else if (bit == CustomData1ZBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData1Z;
|
||||
}
|
||||
else if (bit == CustomData1WBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData1W;
|
||||
}
|
||||
else if (bit == CustomData2XBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData2X;
|
||||
}
|
||||
else if (bit == CustomData2YBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData2Y;
|
||||
}
|
||||
else if (bit == CustomData2ZBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData2Z;
|
||||
}
|
||||
else if (bit == CustomData2WBit)
|
||||
{
|
||||
return CutomDataComponent.CustomData2W;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
Debug.Log("不可能存在的情况");
|
||||
return CutomDataComponent.Off;
|
||||
|
||||
}
|
||||
|
||||
public void SetCustomDataFlag(CutomDataComponent cutomDataComponent, int dataBitPos, int dataIndex)
|
||||
{
|
||||
int bit = 0;
|
||||
switch (cutomDataComponent)
|
||||
{
|
||||
case CutomDataComponent.Off:
|
||||
bit = 0;
|
||||
break;
|
||||
case CutomDataComponent.CustomData1X:
|
||||
bit = CustomData1XBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData1Y:
|
||||
bit = CustomData1YBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData1Z:
|
||||
bit = CustomData1ZBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData1W:
|
||||
bit = CustomData1WBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData2X:
|
||||
bit = CustomData2XBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData2Y:
|
||||
bit = CustomData2YBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData2Z:
|
||||
bit = CustomData2ZBit;
|
||||
break;
|
||||
case CutomDataComponent.CustomData2W:
|
||||
bit = CustomData2WBit;
|
||||
break;
|
||||
}
|
||||
|
||||
bit = bit << dataBitPos;
|
||||
int clearBit = ~(15 << dataBitPos); //~ (1111 << dataBitPos)
|
||||
|
||||
int materialBit = material.GetInteger(GetCustomDataFlagID(dataIndex));
|
||||
materialBit = materialBit & clearBit;
|
||||
materialBit = materialBit | bit;
|
||||
material.SetInteger(GetCustomDataFlagID(dataIndex), materialBit);
|
||||
}
|
||||
|
||||
public bool IsCustomDataOn()
|
||||
{
|
||||
int prop0Flag = material.GetInteger(CustomDataFlag0Id);
|
||||
int prop1Flag = material.GetInteger(CustomDataFlag1Id);
|
||||
int prop2Flag = material.GetInteger(CustomDataFlag2Id);
|
||||
int prop3Flag = material.GetInteger(CustomDataFlag3Id);
|
||||
uint dataOnBit = 0b_1000_1000_1000_1000_1000_1000_1000_1000; //10001000100010001000100010001000;
|
||||
|
||||
return ((prop0Flag & dataOnBit) > 0) || ((prop1Flag & dataOnBit) > 0) || ((prop2Flag & dataOnBit) > 0) ||
|
||||
((prop3Flag & dataOnBit) > 0);
|
||||
}
|
||||
|
||||
bool CheckCustomData(int dataIndex, int flagIndex)
|
||||
{
|
||||
int flagID = 0;
|
||||
switch (flagIndex)
|
||||
{
|
||||
case 0:
|
||||
flagID = CustomDataFlag0Id;
|
||||
break;
|
||||
case 1:
|
||||
flagID = CustomDataFlag1Id;
|
||||
break;
|
||||
case 2:
|
||||
flagID = CustomDataFlag2Id;
|
||||
break;
|
||||
case 3:
|
||||
flagID = CustomDataFlag3Id;
|
||||
break;
|
||||
}
|
||||
|
||||
int flag = material.GetInteger(flagID);
|
||||
int i = 0;
|
||||
while (i < 8)
|
||||
{
|
||||
int bit = flag >> (4 * i);
|
||||
if (dataIndex == 1)
|
||||
{
|
||||
if ((bit & 0b_1000) > 0 && (bit & 0b_0100) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (dataIndex == 2)
|
||||
{
|
||||
if ((bit & 0b_1000) > 0 && (bit & 0b_0100) == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
i += 1;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsCustomData1On()
|
||||
{
|
||||
if (!IsCustomDataOn())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isCustomData1On = false;
|
||||
isCustomData1On |= CheckCustomData(1, 0);
|
||||
isCustomData1On |= CheckCustomData(1, 1);
|
||||
isCustomData1On |= CheckCustomData(1, 2);
|
||||
isCustomData1On |= CheckCustomData(1, 3);
|
||||
return isCustomData1On;
|
||||
}
|
||||
|
||||
public bool IsCustomData2On()
|
||||
{
|
||||
if (!IsCustomDataOn())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isCustomData1On = false;
|
||||
isCustomData1On |= CheckCustomData(2, 0);
|
||||
isCustomData1On |= CheckCustomData(2, 1);
|
||||
isCustomData1On |= CheckCustomData(2, 2);
|
||||
isCustomData1On |= CheckCustomData(2, 3);
|
||||
return isCustomData1On;
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public const string UVModeFlag0Name = "_UVModeFlag0";
|
||||
public const string UVModeFlagType0Name = "_UVModeFlagType0";
|
||||
public static int UVModeFlag0PropID = Shader.PropertyToID(UVModeFlag0Name);
|
||||
public static int UVModeFlagType0PropID = Shader.PropertyToID(UVModeFlagType0Name);
|
||||
|
||||
public string GetUVModePropName(int dataIndex)
|
||||
{
|
||||
switch (dataIndex)
|
||||
{
|
||||
case 0:
|
||||
return UVModeFlag0Name;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public enum UVMode
|
||||
{
|
||||
DefaultUVChannel, //0 0b_00 modeIndex 00
|
||||
SpecialUVChannel, //1 0b_01 modeIndex 00
|
||||
PolarOrTwirl, //2 0b_10 modeIndex 00
|
||||
Cylinder, //3 0b_11 modeIndex 00
|
||||
MainTex, //0 0b_00 modeIndex 01
|
||||
ScreenUV, //1 0b_01 modeIndex 01
|
||||
WorldPos, //2 0b_10 modeIndex 01
|
||||
ObjectPos, //3 0b_11 modeIndex 01
|
||||
CommonUV, //0 0b_00 modeIndex 10
|
||||
UnknownOrMixed = -1
|
||||
}
|
||||
|
||||
public const int FLAG_BIT_UVMODE_POS_0_MAINTEX = 0 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_MASKMAP = 1 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_MASKMAP_2 = 2 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_MASKMAP_3 = 3 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_NOISE_MAP = 4 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP = 5 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_EMISSION_MAP = 6 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP = 7 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP = 8 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP = 9 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP = 10 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP = 11 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_BUMPMAP = 12 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_RAMP_COLOR_MAP = 13 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_PROGRAM_NOISE = 14 * 2;
|
||||
public const int FLAG_BIT_UVMODE_POS_0_SHAREDUV = 15 * 2;
|
||||
|
||||
public void GetUVModeFlagPropID(int flagIndex, out int flagID, out int flagTypeID)
|
||||
{
|
||||
switch (flagIndex)
|
||||
{
|
||||
case 0:
|
||||
flagID = UVModeFlag0PropID;
|
||||
flagTypeID = UVModeFlagType0PropID;
|
||||
return;
|
||||
}
|
||||
|
||||
flagID = 0;
|
||||
flagTypeID = 0;
|
||||
|
||||
}
|
||||
|
||||
public void SetUVMode(UVMode mode, int uvModePos, int flagIndex = 0)
|
||||
{
|
||||
GetUVModeFlagPropID(flagIndex, out int uvModeFlagPropId, out int uvModeFlagTypePropId);
|
||||
int uvModeFlag = material.GetInteger(uvModeFlagPropId);
|
||||
int uvModeFlagType = material.GetInteger(uvModeFlagTypePropId);
|
||||
|
||||
|
||||
int clearFlag = 0b_11 << uvModePos;
|
||||
clearFlag = ~ clearFlag;
|
||||
|
||||
uvModeFlag &= clearFlag;
|
||||
int modeBit = (int)mode % 4 << uvModePos;
|
||||
uvModeFlag |= modeBit;
|
||||
uvModeFlagType &= clearFlag;
|
||||
int typeBit = (int)mode / 4 << uvModePos;
|
||||
uvModeFlagType |= typeBit;
|
||||
|
||||
material.SetInteger(uvModeFlagPropId, uvModeFlag);
|
||||
material.SetInteger(uvModeFlagTypePropId, uvModeFlagType);
|
||||
}
|
||||
|
||||
public UVMode GetUVMode(int uvModePos, int flagIndex = 0)
|
||||
{
|
||||
GetUVModeFlagPropID(flagIndex, out int uvModeFlagPropId, out int uvModeFlagTypePropId);
|
||||
int uvModeFlag = material.GetInteger(uvModeFlagPropId);
|
||||
uvModeFlag = uvModeFlag >> uvModePos;
|
||||
uvModeFlag &= 0b_11;
|
||||
int uvModeFlagType = material.GetInteger(uvModeFlagTypePropId);
|
||||
uvModeFlagType = uvModeFlagType >> uvModePos;
|
||||
uvModeFlagType &= 0b_11;
|
||||
return (UVMode)(uvModeFlag + 4 * uvModeFlagType);
|
||||
}
|
||||
|
||||
public bool CheckIsUVModeOn(UVMode mode)
|
||||
{
|
||||
uint uvModeFlag0 = (uint)material.GetInteger(UVModeFlag0PropID);
|
||||
uint uvModeFlagType0 = (uint)material.GetInteger(UVModeFlagType0PropID);
|
||||
|
||||
uint uvModeflagBit = (uint)mode % 4;
|
||||
uint uvModeflagTypeBit = (uint)mode / 4;
|
||||
|
||||
bool isUvMode = false;
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
uint checkflagBit = uvModeFlag0 >> (i * 2);
|
||||
checkflagBit = checkflagBit & 0b_11;
|
||||
uint checkflagTypeBit = uvModeflagTypeBit >> (i * 2);
|
||||
checkflagTypeBit = checkflagTypeBit & 0b_11;
|
||||
if (checkflagBit == uvModeflagBit && checkflagTypeBit == uvModeflagTypeBit)
|
||||
{
|
||||
isUvMode = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return isUvMode;
|
||||
}
|
||||
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_MAINTEX_ALPHA = 0 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP1 = 1 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP2 = 2 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP3 = 3 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_NOISE_MASK = 4 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_DISSOLVE_MAP = 5 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_DISSOLVE_MASK_MAP = 6 * 2;
|
||||
public const int FLAG_BIT_COLOR_CHANNEL_POS_0_RAMP_COLOR_MAP = 7 * 2;
|
||||
|
||||
|
||||
public enum ColorChannel
|
||||
{
|
||||
X,
|
||||
Y,
|
||||
Z,
|
||||
W,
|
||||
UnKnownOrMixedValue
|
||||
}
|
||||
|
||||
public void SetColorChanel(ColorChannel channel, int colorChannelFlagPos)
|
||||
{
|
||||
int colorChannelFlag = material.GetInteger(colorChannelFlagId);
|
||||
|
||||
int clearFlag = 0b_11 << colorChannelFlagPos;
|
||||
clearFlag = ~ clearFlag;
|
||||
|
||||
colorChannelFlag &= clearFlag;
|
||||
int channelBit = (int)channel << colorChannelFlagPos;
|
||||
colorChannelFlag |= channelBit;
|
||||
|
||||
material.SetInteger(colorChannelFlagId, colorChannelFlag);
|
||||
}
|
||||
|
||||
public ColorChannel GetColorChanel(int colorChannelFlagPos)
|
||||
{
|
||||
int colorChannelFlag = material.GetInteger(colorChannelFlagId);
|
||||
colorChannelFlag = colorChannelFlag >> colorChannelFlagPos;
|
||||
colorChannelFlag &= 0b_11;
|
||||
return (ColorChannel)colorChannelFlag;
|
||||
}
|
||||
|
||||
public const int FLAG_BIT_PNOISE_BLEND_POS_0_BASE_BLEND = 0 * 3;
|
||||
public const int FLAG_BIT_PNOISE_BLEND_POS_0_MASK = 1 * 3;
|
||||
public const int FLAG_BIT_PNOISE_BLEND_POS_0_DISSOLVE = 2 * 3;
|
||||
public const int FLAG_BIT_PNOISE_BLEND_POS_0_DISTORT = 3 * 3;
|
||||
public const int FLAG_BIT_PNOISE_BLEND_POS_0_MAINTEX = 4 * 3;
|
||||
|
||||
public enum PNoiseBlendMode
|
||||
{
|
||||
NotUse = 0,
|
||||
Multiply = 1,
|
||||
Min = 2,
|
||||
HardLight = 3,
|
||||
UnKnownOrMixedValue = -1
|
||||
|
||||
//后续看看要不要更多吧
|
||||
}
|
||||
|
||||
public void SetPNoiseBlendMode(PNoiseBlendMode mode, int pNoiseBlendModeFlagPos)
|
||||
{
|
||||
int pNoiseBlendFlag = material.GetInteger(pNoiseBlendFlagId);
|
||||
int blendMode = (int)mode;
|
||||
if (blendMode < 0) return;
|
||||
int clearFlag = 0b_111 << pNoiseBlendModeFlagPos;
|
||||
clearFlag = ~clearFlag;
|
||||
pNoiseBlendFlag &= clearFlag;
|
||||
int pNoiseBlendBit = blendMode << pNoiseBlendModeFlagPos;
|
||||
//先不考虑超过4个选项(2bit)的情况
|
||||
pNoiseBlendFlag |= pNoiseBlendBit;
|
||||
material.SetInteger(pNoiseBlendFlagId, pNoiseBlendFlag);
|
||||
}
|
||||
|
||||
public PNoiseBlendMode GetPNoiseBlendMode(int pNoiseBlendModeFlagPos)
|
||||
{
|
||||
int pNoiseBlendFlag = material.GetInteger(pNoiseBlendFlagId);
|
||||
pNoiseBlendFlag = pNoiseBlendFlag >> pNoiseBlendModeFlagPos;
|
||||
pNoiseBlendFlag &= 0b_111;
|
||||
//先不考虑超过4个选项(2bit)的情况
|
||||
return (PNoiseBlendMode)pNoiseBlendFlag;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b13c8a972207b57458dd444106acbf3a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.shaders",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e3b0e6ce60c7a34094f8f9822c0b7f2
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5fdc89efbf4a9bf4c9449cc01f16d08a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 944a1679494774748b2936893c18c9ce
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,320 @@
|
||||
#ifndef EFFECT_FLAGS
|
||||
#define EFFECT_FLAGS
|
||||
|
||||
#define FLAG_BIT_SATURABILITY_ON (1 << 0)
|
||||
#define FLAG_BIT_PARTICLE_NOISE_CHORATICABERRAT_WITH_NOISE (1 << 1)
|
||||
#define FLAG_BIT_PARTICLE_FRESNEL_FADE_ON (1 << 2)
|
||||
#define FLAG_BIT_PARTICLE_FRESNEL_COLOR_ON (1 << 3)
|
||||
#define FLAG_BIT_PARTICLE_USETEXCOORD2 (1 << 4)
|
||||
#define FLAG_BIT_PARTICLE_DISTANCEFADE_ON (1 << 5)
|
||||
#define FLAG_BIT_PARTICLE_CHORATICABERRAT (1 << 6)
|
||||
#define FLAG_BIT_PARTILCE_MASKMAPROTATIONANIMATION_ON (1 << 7)
|
||||
#define FLAG_BIT_PARTICLE_POLARCOORDINATES_ON (1 << 8)
|
||||
#define FLAG_BIT_PARTICLE_UTWIRL_ON (1 << 9)
|
||||
#define FLAG_BIT_PARTICLE_LINEARTOGAMMA_ON (1 << 10)
|
||||
#define FLAG_BIT_PARTICLE_FRESNEL_ON (1 << 11)
|
||||
#define FLAG_BIT_PARTICLE_NOISEMAP_NORMALIZEED_ON (1 << 12)
|
||||
#define FLAG_BIT_PARTICLE_FRESNEL_COLOR_AFFETCT_BY_ALPHA (1 << 13)
|
||||
#define FLAG_BIT_PARTICLE_UIEFFECT_ON (1 << 14)
|
||||
#define FLAG_BIT_PARTICLE_UNSCALETIME_ON (1 << 15)
|
||||
#define FLAG_BIT_PARTICLE_SCRIPTABLETIME_ON (1 << 16)
|
||||
#define FLAG_BIT_PARTICLE_CUSTOMDATA1_ON (1 << 17)
|
||||
#define FLAG_BIT_PARTICLE_FRESNEL_INVERT_ON (1 << 18)
|
||||
#define FLAG_BIT_HUESHIFT_ON (1 << 19)
|
||||
#define FLAG_BIT_PARTICLE_CUSTOMDATA2_ON (1 << 20)
|
||||
#define FLAG_BIT_PARTICLE_NORMALMAP_MASK_MODE (1 << 21)
|
||||
#define FLAG_BIT_PARTICLE_COLOR_ADJUSTMENT_ONLY_AFFECT_MAINTEX (1 << 22)
|
||||
#define FLAG_BIT_PARTICLE_RAMP_COLOR_MAP_MODE_ON (1 << 23)
|
||||
#define FLAG_BIT_PARTICLE_RAMP_COLOR_BLEND_ADD (1 << 24)
|
||||
#define FLAG_BIT_PARTICLE_COLOR_BLEND_ALPHA_MULTIPLY_MODE (1 << 25)
|
||||
#define FLAG_BIT_PARTICLE_DISSOLVE_RAMP_MAP (1 << 26)
|
||||
#define FLAG_BIT_PARTICLE_DISSOLVE_MASK (1 << 27)
|
||||
#define FLAG_BIT_PARTICLE_BACKCOLOR (1 << 28)
|
||||
#define FLAG_BIT_PARTICLE_COLOR_MULTI_ALPHA (1 << 29)
|
||||
#define FLAG_BIT_PARTICLE_VERTEX_OFFSET_ON (1 << 30)
|
||||
#define FLAG_BIT_PARTICLE_VERTEX_OFFSET_NORMAL_DIR (1 << 31)
|
||||
// uint _W9ParticleShaderFlags;
|
||||
|
||||
#define FLAG_BIT_PARTICLE_1_DEPTH_OUTLINE (1 << 0)
|
||||
#define FLAG_BIT_PARTICLE_1_PARALLAX_MAPPING (1 << 1)
|
||||
#define FLAG_BIT_PARTICLE_1_MASKMAP_GRADIENT (1 << 2)
|
||||
#define FLAG_BIT_PARTICLE_1_MASKMAP_2_GRADIENT (1 << 3)
|
||||
#define FLAG_BIT_PARTICLE_1_MASKMAP_3_GRADIENT (1 << 4)
|
||||
#define FLAG_BIT_PARTICLE_1_DISSOLVE_LINE_MASK (1 << 5)
|
||||
#define FLAG_BIT_PARTICLE_1_DISSOLVE_RAMP_MULITPLY (1 << 6)
|
||||
#define FLAG_BIT_PARTICLE_1_MASK_REFINE (1 << 7)
|
||||
#define FLAG_BIT_PARTICLE_1_SCREEN_DISTORT_ALPHA_REFINE (1 << 8)
|
||||
#define FLAG_BIT_PARTICLE_1_IGNORE_VERTEX_COLOR (1 << 9)
|
||||
#define FLAG_BIT_PARTICLE_1_PROGRAM_NOISE_SIMPLE (1 << 10)
|
||||
#define FLAG_BIT_PARTICLE_1_DISSOVLE_USE_RAMP (1 << 11)
|
||||
#define FLAG_BIT_PARTICLE_1_MASK_MAP2 (1 << 12)
|
||||
#define FLAG_BIT_PARTICLE_1_MASK_MAP3 (1 << 13)
|
||||
#define FLAG_BIT_PARTICLE_1_NOISE_MASKMAP (1 << 14)
|
||||
#define FLAG_BIT_PARTICLE_1_ANIMATION_SHEET_HELPER (1 << 15)
|
||||
#define FLAG_BIT_PARTICLE_1_PROGRAM_NOISE_VORONOI (1 << 16)
|
||||
#define FLAG_BIT_PARTICLE_1_UIEFFECT_SPRITE_MODE (1 << 17)
|
||||
#define FLAG_BIT_PARTICLE_1_USE_TEXCOORD1 (1 << 18)
|
||||
#define FLAG_BIT_PARTICLE_1_USE_TEXCOORD2 (1 << 19)
|
||||
#define FLAG_BIT_PARTICLE_1_CYLINDER_CORDINATE (1 << 20)
|
||||
#define FLAG_BIT_PARTICLE_1_UV_FROM_MESH (1 << 21)
|
||||
#define FLAG_BIT_PARTICLE_1_UIEFFECT_BASEMAP_MODE (1 << 22)
|
||||
#define FLAG_BIT_PARTICLE_1_IS_PARTICLE_SYSTEM (1 << 23)
|
||||
#define FLAG_BIT_PARTICLE_1_MAINTEX_CONTRAST (1 << 24)
|
||||
#define FLAG_BIT_PARTICLE_1_VERTEXOFFSET_START_FROM_ZERO (1 << 25)
|
||||
#define FLAG_BIT_PARTICLE_1_VERTEXOFFSET_MASKMAP (1 << 26)
|
||||
#define FLAG_BIT_PARTICLE_1_MAINTEX_COLOR_REFINE (1 << 27)
|
||||
#define FLAG_BIT_PARTICLE_1_BUMP_TEX_UV_FOLLOW_MAINTEX (1 << 28)
|
||||
#define FLAG_BIT_PARTICLE_1_SIXWAY_RAMPMAP (1 << 29)
|
||||
#define FLAG_BIT_PARTICLE_1_MATCAP_MULTY_MODE (1 << 30)
|
||||
|
||||
|
||||
//WrapMode不能够超过16位(因为会占用x和x+16两个bit位)
|
||||
#define FLAG_BIT_WRAPMODE_BASEMAP (1 << 0)
|
||||
#define FLAG_BIT_WRAPMODE_MASKMAP (1 << 1)
|
||||
#define FLAG_BIT_WRAPMODE_MASKMAP2 (1 << 2)
|
||||
#define FLAG_BIT_WRAPMODE_NOISEMAP (1 << 3)
|
||||
#define FLAG_BIT_WRAPMODE_EMISSIONMAP (1 << 4)
|
||||
#define FLAG_BIT_WRAPMODE_DISSOLVE_MAP (1 << 5)
|
||||
#define FLAG_BIT_WRAPMODE_DISSOLVE_MASKMAP (1 << 6)
|
||||
#define FLAG_BIT_WRAPMODE_DISSOLVE_RAMPMAP (1 << 7)
|
||||
#define FLAG_BIT_WRAPMODE_COLORBLENDMAP (1 << 8)
|
||||
#define FLAG_BIT_WRAPMODE_VERTEXOFFSETMAP (1 << 9)
|
||||
#define FLAG_BIT_WRAPMODE_PARALLAXMAPPINGMAP (1 << 10)
|
||||
#define FLAG_BIT_WRAPMODE_MASKMAP3 (1 << 11)
|
||||
#define FLAG_BIT_WRAPMODE_NOISE_MASKMAP (1 << 12)
|
||||
#define FLAG_BIT_WRAPMODE_VERTEXOFFSET_MASKMAP (1 << 13)
|
||||
#define FLAG_BIT_WRAPMODE_BUMPTEX (1 << 14)
|
||||
#define FLAG_BIT_WRAPMODE_RAMP_COLOR_MAP (1 << 15)
|
||||
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_X (0*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_MAINTEX_OFFSET_Y (1*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_DISSOLVE_INTENSITY (2*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_HUESHIFT (3*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_X (4*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_MASK_OFFSET_Y (5*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_FRESNEL_OFFSET (6*4)
|
||||
#define FLAGBIT_POS_0_CUSTOMDATA_CHORATICABERRAT_INTENSITY (7*4)
|
||||
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_X (0*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_OFFSET_Y (1*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_NOISE_INTENSITY (2*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_SATURATE (3*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_X (4*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_VERTEX_OFFSET_Y (5*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_VERTEXOFFSET_INTENSITY (6*4)
|
||||
#define FLAGBIT_POS_1_CUSTOMDATA_DISSOLVE_MASK_INTENSITY (7*4)
|
||||
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_X (0*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE1_OFFSET_Y (1*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_X (2*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_DISSOLVE_NOISE2_OFFSET_Y (3*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_X (4*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_NOISE_DIRECTION_Y (5*4)
|
||||
#define FLAGBIT_POS_2_CUSTOMDATA_MAINTEX_CONTRAST (6*4)
|
||||
//---->这里还有一个坑可以用哦
|
||||
|
||||
#define FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_X (0*4)
|
||||
#define FLAGBIT_POS_3_CUSTOMDATA_VERTEX_OFFSET_MASK_Y (1*4)
|
||||
#define FLAGBIT_POS_3_CUSTOMDATA_SHARED_UV_OFFSET_X (2*4)
|
||||
#define FLAGBIT_POS_3_CUSTOMDATA_SHARED_UV_OFFSET_Y (3*4)
|
||||
|
||||
#define isCustomDataBit (1 << 3)
|
||||
#define Data12Bit (1 << 2)
|
||||
#define DataXYorZWBit (1 << 1)
|
||||
#define DataXZorYWBit (1 << 0)
|
||||
|
||||
#define FLAG_BIT_UVMODE_POS_0_MAINTEX (0*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_MASKMAP (1*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_MASKMAP_2 (2*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_MASKMAP_3 (3*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_NOISE_MAP (4*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_NOISE_MASK_MAP (5*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_EMISSION_MAP (6*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_DISSOLVE_MAP (7*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_DISSOLVE_MASK_MAP (8*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_COLOR_BLEND_MAP (9*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MAP (10*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_VERTEX_OFFSET_MASKMAP (11*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_BUMPTEX (12*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_RAMP_COLOR_MAP (13*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_PROGRAM_NOISE (14*2)
|
||||
#define FLAG_BIT_UVMODE_POS_0_SHAREDUV (15*2)
|
||||
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_MAINTEX_ALPHA (0*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP1 (1*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP2 (2*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_MASKMAP3 (3*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_NOISE_MASK (4*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_DISSOLVE_MAP (5*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_DISSOLVE_MASK_MAP (6*2)
|
||||
#define FLAG_BIT_COLOR_CHANNEL_POS_0_RAMP_COLOR_MAP (7*2)
|
||||
|
||||
float GetCustomData(uint flagProperty,int flagPos,float orignValue,half4 cutstomData1,half4 customData2)
|
||||
{
|
||||
uint bit = flagProperty >> flagPos;
|
||||
|
||||
// bit &= 15;// binary 1111 这一步可能是没必要的。
|
||||
UNITY_BRANCH
|
||||
if((bit & isCustomDataBit) == 0)
|
||||
{
|
||||
return orignValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
half4 customData = 0;
|
||||
if((bit & Data12Bit))
|
||||
{
|
||||
customData = cutstomData1;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
customData = customData2;
|
||||
}
|
||||
|
||||
if(bit & DataXYorZWBit)
|
||||
{
|
||||
if(bit & DataXZorYWBit)
|
||||
{
|
||||
return customData.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
return customData.y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(bit & DataXZorYWBit)
|
||||
{
|
||||
return customData.z;
|
||||
}
|
||||
else
|
||||
{
|
||||
return customData.w;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 999;//提示错误
|
||||
}
|
||||
|
||||
|
||||
struct BaseUVs
|
||||
{
|
||||
float2 defaultUVChannel;
|
||||
float2 specialUVChannel;
|
||||
float2 uvAfterTwirlPolar;
|
||||
float2 cylinderUV;
|
||||
float2 mainTexUV;
|
||||
float2 screenUV;
|
||||
float2 worldPosUV;
|
||||
float2 objectPosUV;
|
||||
float2 sharedUV;
|
||||
};
|
||||
|
||||
float2 GetUVByUVMode(uint flagProperty,uint flagTypeProperty,int flagPos,BaseUVs baseUVs)
|
||||
{
|
||||
flagProperty = flagProperty >> flagPos;
|
||||
flagProperty &= 3;
|
||||
flagTypeProperty = flagTypeProperty >> flagPos;
|
||||
flagTypeProperty &= 3;
|
||||
switch (flagTypeProperty)
|
||||
{
|
||||
case 0:
|
||||
switch(flagProperty)
|
||||
{
|
||||
case 0:
|
||||
return baseUVs.defaultUVChannel;
|
||||
case 1:
|
||||
return baseUVs.specialUVChannel;
|
||||
case 2:
|
||||
return baseUVs.uvAfterTwirlPolar;
|
||||
case 3:
|
||||
return baseUVs.cylinderUV;
|
||||
default:
|
||||
return baseUVs.defaultUVChannel;
|
||||
}
|
||||
case 1:
|
||||
switch(flagProperty)
|
||||
{
|
||||
case 0:
|
||||
return baseUVs.mainTexUV;
|
||||
case 1:
|
||||
return baseUVs.screenUV;
|
||||
case 2:
|
||||
return baseUVs.worldPosUV;
|
||||
case 3:
|
||||
return baseUVs.objectPosUV;
|
||||
default:
|
||||
return baseUVs.defaultUVChannel;
|
||||
}
|
||||
case 2:
|
||||
switch(flagProperty)
|
||||
{
|
||||
case 0:
|
||||
return baseUVs.sharedUV;
|
||||
default:
|
||||
return baseUVs.defaultUVChannel;
|
||||
}
|
||||
default:
|
||||
return baseUVs.defaultUVChannel;
|
||||
}
|
||||
}
|
||||
|
||||
half Blend_HardLight(half Base, half Blend)
|
||||
{
|
||||
half result1 = 1.0 - 2.0 * (1.0 - Base) * (1.0 - Blend);
|
||||
half result2 = 2.0 * Base * Blend;
|
||||
half zeroOrOne = step(Blend, 0.5);
|
||||
half Out = result2 * zeroOrOne + (1 - zeroOrOne) * result1;
|
||||
return Out;
|
||||
}
|
||||
|
||||
#define FLAG_BIT_PNOISE_BLEND_POS_0_BASE_BLEND (0*3)
|
||||
#define FLAG_BIT_PNOISE_BLEND_POS_0_MASK (1*3)
|
||||
#define FLAG_BIT_PNOISE_BLEND_POS_0_DISSOLVE (2*3)
|
||||
#define FLAG_BIT_PNOISE_BLEND_POS_0_DISTORT (3*3)
|
||||
#define FLAG_BIT_PNOISE_BLEND_POS_0_MAINTEX (4*3)
|
||||
|
||||
half BlendPNoise(uint flagProperty,int flagPos,half source,half pNoise,half opacity)
|
||||
{
|
||||
flagProperty = flagProperty >> flagPos;
|
||||
flagProperty &= 7;
|
||||
switch(flagProperty)
|
||||
{
|
||||
case 0:
|
||||
return source;
|
||||
case 1:
|
||||
return lerp(source,pNoise*source,opacity);
|
||||
case 2:
|
||||
return lerp(source,min(pNoise,source),opacity);
|
||||
case 3:
|
||||
return lerp(source,Blend_HardLight(source,pNoise),opacity);
|
||||
default:
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
//ForDistort
|
||||
half2 BlendPNoise(uint flagProperty,int flagPos,half2 source,half2 pNoise,half opacity)
|
||||
{
|
||||
flagProperty = flagProperty >> flagPos;
|
||||
flagProperty &= 7;
|
||||
switch(flagProperty)
|
||||
{
|
||||
case 0:
|
||||
return source;
|
||||
case 1:
|
||||
return lerp(source,pNoise*source,opacity);
|
||||
case 2:
|
||||
return lerp(source,min(pNoise,source),opacity);
|
||||
case 3:
|
||||
return lerp(source,Blend_HardLight(source,pNoise),opacity);
|
||||
default:
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4918b275ae4dce948a5cedc6f3612066
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9187c1d488f62d9458d6ce67858a43b3
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03da5256bb8bf0b4496b10ee6b449be4
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,357 @@
|
||||
#ifndef SIX_WAY_SMOKE_LIT_HLSL
|
||||
#define SIX_WAY_SMOKE_LIT_HLSL
|
||||
//这部分尽量借鉴 UnityEditor.VFX.HDRP.SixWaySmokeLit
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
|
||||
#include "ParticlesUnlitInputNew.hlsl"
|
||||
|
||||
// Generated from UnityEditor.VFX.HDRP.SixWaySmokeLit+BSDFData
|
||||
// PackingRules = Exact
|
||||
struct BSDFData
|
||||
{
|
||||
uint materialFeatures;
|
||||
float absorptionRange;
|
||||
real4 diffuseColor;
|
||||
real3 fresnel0;
|
||||
real ambientOcclusion;
|
||||
float3 normalWS;
|
||||
float4 tangentWS;
|
||||
real3 geomNormalWS;
|
||||
real3 rigRTBk;
|
||||
real3 rigLBtF;
|
||||
real3 bakeDiffuseLighting0;//rigRTBk.x
|
||||
real3 bakeDiffuseLighting1;//rigRTBk.y
|
||||
real3 bakeDiffuseLighting2;// bsdfData.tangentWS.w > 0.0f ? rigRTBk.z : rigLBtF.z
|
||||
real3 backBakeDiffuseLighting0;//rigLBtF.x
|
||||
real3 backBakeDiffuseLighting1;//rigLBtF.y
|
||||
real3 backBakeDiffuseLighting2;// bsdfData.tangentWS.w > 0.0f ? rigLBtF.z : rigRTBk.z
|
||||
|
||||
//-----NBShaders-----
|
||||
real3 emission;
|
||||
real emissionInput;//NegativeTex.a
|
||||
real alpha;//PositiveTex.a
|
||||
|
||||
};
|
||||
|
||||
#define ABSORPTION_EPSILON max(REAL_MIN, 1e-5)
|
||||
|
||||
real3 ComputeDensityScales(real3 absorptionColor)
|
||||
{
|
||||
absorptionColor.rgb = max(ABSORPTION_EPSILON, absorptionColor.rgb);
|
||||
|
||||
// Empirical value used to parametrize absorption from color
|
||||
const real absorptionStrength = 0.2f;
|
||||
return 1.0f + log2(absorptionColor.rgb) / log2(absorptionStrength);
|
||||
}
|
||||
|
||||
real3 GetTransmissionWithAbsorption(real transmission, real4 absorptionColor, real absorptionRange)
|
||||
{
|
||||
#if defined(VFX_SIX_WAY_ABSORPTION)
|
||||
real3 densityScales = ComputeDensityScales(absorptionColor.rgb);
|
||||
|
||||
#ifdef VFX_BLENDMODE_PREMULTIPLY
|
||||
absorptionRange *= (absorptionColor.a > 0) ? absorptionColor.a : 1.0f;
|
||||
#endif
|
||||
|
||||
// real3 outTransmission = GetTransmissionWithAbsorption(transmission, densityScales, absorptionRange);
|
||||
real3 outTransmission = pow(saturate(transmission / absorptionRange), densityScales);
|
||||
outTransmission *= absorptionRange;
|
||||
|
||||
return outTransmission;
|
||||
#else
|
||||
return transmission.xxx * absorptionColor.rgb; // simple multiply
|
||||
#endif
|
||||
}
|
||||
|
||||
void ModifyBakedDiffuseLighting(BSDFData bsdfData, inout float3 bakeDiffuseLighting)
|
||||
{
|
||||
bakeDiffuseLighting = 0;
|
||||
|
||||
// Scale to be energy conserving: Total energy = 4*pi; divided by 6 directions
|
||||
float scale = 4.0f * PI / 6.0f;
|
||||
|
||||
float3 frontBakeDiffuseLighting = bsdfData.tangentWS.w > 0.0f ? bsdfData.bakeDiffuseLighting2 : bsdfData.backBakeDiffuseLighting2;
|
||||
float3 backBakeDiffuseLighting = bsdfData.tangentWS.w > 0.0f ? bsdfData.backBakeDiffuseLighting2 : bsdfData.bakeDiffuseLighting2;
|
||||
|
||||
float3x3 bakeDiffuseLightingMat;
|
||||
bakeDiffuseLightingMat[0] = bsdfData.bakeDiffuseLighting0;
|
||||
bakeDiffuseLightingMat[1] = bsdfData.bakeDiffuseLighting1;
|
||||
bakeDiffuseLightingMat[2] = frontBakeDiffuseLighting;
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigRTBk.x, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[0];
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigRTBk.y, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[1];
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigRTBk.z, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[2];
|
||||
|
||||
bakeDiffuseLightingMat[0] = bsdfData.backBakeDiffuseLighting0;
|
||||
bakeDiffuseLightingMat[1] = bsdfData.backBakeDiffuseLighting1;
|
||||
bakeDiffuseLightingMat[2] = backBakeDiffuseLighting;
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigLBtF.x, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[0];
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigLBtF.y, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[1];
|
||||
bakeDiffuseLighting += GetTransmissionWithAbsorption(bsdfData.rigLBtF.z, bsdfData.diffuseColor, bsdfData.absorptionRange) * bakeDiffuseLightingMat[2];
|
||||
|
||||
bakeDiffuseLighting *= scale;
|
||||
|
||||
}
|
||||
|
||||
//世界空间到切线空间方向转换
|
||||
float3 TransformToLocalFrame(float3 L, BSDFData bsdfData)
|
||||
{
|
||||
float3 zVec = -bsdfData.normalWS;
|
||||
float3 xVec = bsdfData.tangentWS.xyz;
|
||||
float3 yVec = -cross(zVec, xVec) * bsdfData.tangentWS.w;//原代码没有负值,实际测试需要负值
|
||||
float3x3 tbn = float3x3(xVec, yVec, zVec);
|
||||
return mul(tbn, L);
|
||||
}
|
||||
|
||||
CBSDF EvaluateBSDF(float3 L, BSDFData bsdfData)
|
||||
{
|
||||
CBSDF cbsdf;
|
||||
ZERO_INITIALIZE(CBSDF, cbsdf);
|
||||
|
||||
float3 dir = TransformToLocalFrame(L, bsdfData);
|
||||
float3 weights = dir >= 0 ? bsdfData.rigRTBk.xyz : bsdfData.rigLBtF.xyz;
|
||||
float3 sqrDir = dir*dir;
|
||||
|
||||
cbsdf.diffR = GetTransmissionWithAbsorption(dot(sqrDir, weights), bsdfData.diffuseColor, bsdfData.absorptionRange);
|
||||
|
||||
return cbsdf;
|
||||
}
|
||||
|
||||
|
||||
//这一步最好在面板上做完
|
||||
half GetAbsorptionRange(float absorptionStrenth)
|
||||
{
|
||||
return INV_PI + saturate(absorptionStrenth) * (1 - INV_PI);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//---------NBShaderUtility-----------
|
||||
|
||||
//UseInVerTex
|
||||
void GetSixWayBakeDiffuseLight(real3 normalWS,real3 tangentWS,real3 biTangentWS,
|
||||
inout half3 bakeDiffuseLighting0,inout half3 bakeDiffuseLighting1,inout half3 bakeDiffuseLighting2,
|
||||
inout half3 backBakeDiffuseLighting0,inout half3 backBakeDiffuseLighting1,inout half3 backBakeDiffuseLighting2)
|
||||
{
|
||||
bakeDiffuseLighting0 = SampleSHVertex(tangentWS);
|
||||
bakeDiffuseLighting1 = SampleSHVertex(biTangentWS);
|
||||
bakeDiffuseLighting2 = SampleSHVertex(-normalWS);
|
||||
backBakeDiffuseLighting0 = SampleSHVertex(-tangentWS);
|
||||
backBakeDiffuseLighting1 = SampleSHVertex(-biTangentWS);
|
||||
backBakeDiffuseLighting2 = SampleSHVertex(normalWS);
|
||||
}
|
||||
|
||||
LightingData CreateSixWayLightingData(InputData inputData, half3 emission)
|
||||
{
|
||||
LightingData lightingData;
|
||||
|
||||
lightingData.giColor = inputData.bakedGI;
|
||||
lightingData.emissionColor = emission;
|
||||
lightingData.vertexLightingColor = 0;
|
||||
lightingData.mainLightColor = 0;
|
||||
lightingData.additionalLightsColor = 0;
|
||||
|
||||
return lightingData;
|
||||
}
|
||||
|
||||
void GetSixWayEmission(inout BSDFData bsdfData,Texture2D rampMap,half4 emissionColor,bool isRampMap)
|
||||
{
|
||||
float input = pow(bsdfData.emissionInput,_SixWayInfo.y);
|
||||
half3 emission = emissionColor * emissionColor.a;
|
||||
if (isRampMap)
|
||||
{
|
||||
half4 rampSample = rampMap.Sample(sampler_linear_clamp,half2(input,0.5));
|
||||
emission = emission * rampSample * rampSample.a;
|
||||
}
|
||||
else
|
||||
{
|
||||
emission *= input;
|
||||
}
|
||||
bsdfData.emission = emission;
|
||||
}
|
||||
|
||||
half3 LightingSixWay(Light light,InputData inputData, BSDFData bsdfData)
|
||||
{
|
||||
half3 cbsdf_R = EvaluateBSDF(light.direction,bsdfData).diffR;
|
||||
half3 radiance = light.color * light.distanceAttenuation * light.shadowAttenuation;
|
||||
return PI * cbsdf_R * radiance;
|
||||
}
|
||||
|
||||
|
||||
//光照流程--->原型为UniversalFragmentBlinnPhong
|
||||
half4 UniversalFragmentSixWay(InputData inputData,BSDFData bsdfData)
|
||||
{
|
||||
// #if defined(DEBUG_DISPLAY)
|
||||
// half4 debugColor;
|
||||
//
|
||||
// if (CanDebugOverrideOutputColor(inputData, surfaceData, debugColor))
|
||||
// {
|
||||
// return debugColor;
|
||||
// }
|
||||
// #endif
|
||||
|
||||
#ifdef _LIGHT_LAYERS
|
||||
uint meshRenderingLayers = GetMeshRenderingLayer();
|
||||
#endif
|
||||
half4 shadowMask = CalculateShadowMask(inputData);
|
||||
// AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData);
|
||||
AmbientOcclusionFactor aoFactor;
|
||||
aoFactor.directAmbientOcclusion = 1;
|
||||
aoFactor.indirectAmbientOcclusion = 1;
|
||||
Light mainLight = GetMainLight(inputData, shadowMask, aoFactor);
|
||||
|
||||
// MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);
|
||||
|
||||
// inputData.bakedGI *= surfaceData.albedo;
|
||||
|
||||
// LightingData lightingData = CreateLightingData(inputData, surfaceData);
|
||||
LightingData lightingData = CreateSixWayLightingData(inputData,bsdfData.emission);
|
||||
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.mainLightColor += LightingSixWay(mainLight, inputData, bsdfData);
|
||||
}
|
||||
|
||||
#if defined(_ADDITIONAL_LIGHTS)
|
||||
uint pixelLightCount = GetAdditionalLightsCount();
|
||||
|
||||
#if USE_FORWARD_PLUS
|
||||
for (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++)
|
||||
{
|
||||
FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK
|
||||
|
||||
Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.additionalLightsColor += LightingSixWay(light, inputData, bsdfData);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
LIGHT_LOOP_BEGIN(pixelLightCount)
|
||||
Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.additionalLightsColor += LightingSixWay(light, inputData, bsdfData);
|
||||
}
|
||||
LIGHT_LOOP_END
|
||||
#endif
|
||||
|
||||
#if defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||||
lightingData.vertexLightingColor += inputData.vertexLighting * surfaceData.albedo;
|
||||
#endif
|
||||
|
||||
return CalculateFinalColor(lightingData, bsdfData.alpha);
|
||||
}
|
||||
half3 LightingHalfLambert(half3 lightColor, half3 lightDir, half3 normal)
|
||||
{
|
||||
half NdotL = saturate(dot(normal, lightDir));
|
||||
NdotL = NdotL*0.5 + 0.5;
|
||||
return lightColor * NdotL;
|
||||
}
|
||||
half3 CalculateHalfLambertBlinnPhong(Light light, InputData inputData, SurfaceData surfaceData)
|
||||
{
|
||||
half3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation);
|
||||
half3 lightDiffuseColor = LightingHalfLambert(attenuatedLightColor, light.direction, inputData.normalWS);
|
||||
|
||||
half3 lightSpecularColor = half3(0,0,0);
|
||||
#if defined(_SPECGLOSSMAP) || defined(_SPECULAR_COLOR)
|
||||
half smoothness = exp2(10 * surfaceData.smoothness + 1);
|
||||
|
||||
lightSpecularColor += LightingSpecular(attenuatedLightColor, light.direction, inputData.normalWS, inputData.viewDirectionWS, half4(surfaceData.specular, 1), smoothness);
|
||||
#endif
|
||||
|
||||
#if _ALPHAPREMULTIPLY_ON
|
||||
return lightDiffuseColor * surfaceData.albedo * surfaceData.alpha + lightSpecularColor;
|
||||
#else
|
||||
return lightDiffuseColor * surfaceData.albedo + lightSpecularColor;
|
||||
#endif
|
||||
}
|
||||
half4 UniversalFragmentHalfLambert(InputData inputData, half3 diffuse, half4 specularGloss, half smoothness, half3 emission, half alpha, half3 normalTS)
|
||||
{
|
||||
|
||||
SurfaceData surfaceData;
|
||||
|
||||
surfaceData.albedo = diffuse;
|
||||
surfaceData.alpha = alpha;
|
||||
surfaceData.emission = emission;
|
||||
surfaceData.metallic = 0;
|
||||
surfaceData.occlusion = 1;
|
||||
surfaceData.smoothness = smoothness;
|
||||
surfaceData.specular = specularGloss.rgb;
|
||||
surfaceData.clearCoatMask = 0;
|
||||
surfaceData.clearCoatSmoothness = 1;
|
||||
surfaceData.normalTS = normalTS;
|
||||
|
||||
|
||||
// #if defined(DEBUG_DISPLAY)
|
||||
// half4 debugColor;
|
||||
//
|
||||
// if (CanDebugOverrideOutputColor(inputData, surfaceData, debugColor))
|
||||
// {
|
||||
// return debugColor;
|
||||
// }
|
||||
// #endif
|
||||
|
||||
#ifdef _LIGHT_LAYERS
|
||||
uint meshRenderingLayers = GetMeshRenderingLayer();
|
||||
#endif
|
||||
|
||||
half4 shadowMask = CalculateShadowMask(inputData);
|
||||
AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData);
|
||||
Light mainLight = GetMainLight(inputData, shadowMask, aoFactor);
|
||||
|
||||
MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);
|
||||
|
||||
inputData.bakedGI *= surfaceData.albedo;
|
||||
|
||||
LightingData lightingData = CreateLightingData(inputData, surfaceData);
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.mainLightColor += CalculateHalfLambertBlinnPhong(mainLight, inputData, surfaceData);
|
||||
}
|
||||
|
||||
#if defined(_ADDITIONAL_LIGHTS)
|
||||
uint pixelLightCount = GetAdditionalLightsCount();
|
||||
|
||||
#if USE_FORWARD_PLUS
|
||||
for (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++)
|
||||
{
|
||||
FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECK
|
||||
|
||||
Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
LIGHT_LOOP_BEGIN(pixelLightCount)
|
||||
Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
|
||||
#ifdef _LIGHT_LAYERS
|
||||
if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
|
||||
#endif
|
||||
{
|
||||
lightingData.additionalLightsColor += CalculateHalfLambertBlinnPhong(light, inputData, surfaceData);
|
||||
}
|
||||
LIGHT_LOOP_END
|
||||
#endif
|
||||
|
||||
#if defined(_ADDITIONAL_LIGHTS_VERTEX)
|
||||
lightingData.vertexLightingColor += inputData.vertexLighting * surfaceData.albedo;
|
||||
#endif
|
||||
|
||||
return CalculateFinalColor(lightingData, surfaceData.alpha);
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70e94bdedafe40bfb7f8e77cdc4bef0f
|
||||
timeCreated: 1751704445
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7184a95c20fc1a441a8815af4c795ccd
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,75 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9177edf81a5b2354490ec4d66c4c069d, type: 3}
|
||||
m_Name: StencilConfig
|
||||
m_EditorClassIdentifier: Assembly-CSharp-Editor:stencilTestHelper:StencilValuesConfig
|
||||
Config:
|
||||
- key: ParticleBaseDefault
|
||||
Values:
|
||||
DefaultQueue: 3100
|
||||
Ref: 0
|
||||
Comp: 8
|
||||
Pass: 0
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
- key: Disturbance
|
||||
Values:
|
||||
DefaultQueue: 3000
|
||||
Ref: 0
|
||||
Comp: 8
|
||||
Pass: 0
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
- key: ParticalBasePortal
|
||||
Values:
|
||||
DefaultQueue: 3100
|
||||
Ref: 200
|
||||
Comp: 3
|
||||
Pass: 0
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
- key: ParticalBasePortalMask
|
||||
Values:
|
||||
DefaultQueue: 2000
|
||||
Ref: 200
|
||||
Comp: 8
|
||||
Pass: 2
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
- key: ParticleBaseDecal
|
||||
Values:
|
||||
DefaultQueue: 3100
|
||||
Ref: 2
|
||||
Comp: 7
|
||||
Pass: 0
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
- key: ParticleWithoutPlayer
|
||||
Values:
|
||||
DefaultQueue: 3100
|
||||
Ref: 5
|
||||
Comp: 5
|
||||
Pass: 0
|
||||
Fail: 0
|
||||
ZFail: 0
|
||||
ReadMask: 255
|
||||
WriteMask: 255
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7093501998f1b24483fa6c8eddcf8fb
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dbb9a18213f2fff4b86e60510703bec7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 95e40beb3a78e8144b5af938f9e6b2e6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="91023a6b-e90c-4b7e-ad29-2c758b62337b" name="更改" comment="" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"associatedIndex": 1
|
||||
}]]></component>
|
||||
<component name="ProjectId" id="2woZni0kkDvAva6vMvSRxXle59k" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="默认任务">
|
||||
<changelist id="91023a6b-e90c-4b7e-ad29-2c758b62337b" name="更改" comment="" />
|
||||
<created>1746710058620</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1746710058620</updated>
|
||||
<workItem from="1746710064595" duration="3599000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="false" />
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,45 @@
|
||||
using UnityEditor;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using NBShader;
|
||||
namespace NBShaderEditor
|
||||
{
|
||||
public class NBShaderGUI:ShaderGUI
|
||||
{
|
||||
NBShaderRootItem NBRootItem = new NBShaderRootItem();
|
||||
|
||||
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
|
||||
{
|
||||
NBRootItem.OnGUI(materialEditor, properties);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class NBShaderRootItem:ShaderGUIRootItem
|
||||
{
|
||||
public override void InitFlags(List<Material> mats)
|
||||
{
|
||||
ShaderFlags = new List<ShaderFlagsBase>();
|
||||
foreach (Material mat in mats)
|
||||
{
|
||||
W9ParticleShaderFlags flag = new W9ParticleShaderFlags(mat);
|
||||
ShaderFlags.Add(flag);
|
||||
}
|
||||
}
|
||||
|
||||
public ModeBigBlockItem modeBigBlock;
|
||||
public BaseOptionBigBlockItem baseOptionBigBlock;
|
||||
public override void OnChildOnGUI()
|
||||
{
|
||||
if (IsInit)
|
||||
{
|
||||
modeBigBlock = new ModeBigBlockItem(this,null);
|
||||
baseOptionBigBlock = new BaseOptionBigBlockItem(this,null);
|
||||
|
||||
}
|
||||
modeBigBlock.OnGUI();
|
||||
baseOptionBigBlock.OnGUI();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b18ce80080b45c7a5b2a0f8cc2492d7
|
||||
timeCreated: 1758206263
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50e1a495cb24f82429902d4d23679f43
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,83 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace NBShaderEditor
|
||||
{
|
||||
public class BaseOptionBigBlockItem:ShaderGUIBigBlockItem
|
||||
{
|
||||
public BaseOptionBigBlockItem(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) :
|
||||
base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
GuiContent = new GUIContent("基本全局功能", "全局控制功能");
|
||||
FoldOutPropertyName = "_BaseOptionBigBlockItemFoldOut";
|
||||
_baseColorIntensityItem = new BaseColorIntensityItem(rootItem, this);
|
||||
_alphaAllItem = new AlphaAllItem(rootItem, this);
|
||||
_zTestItem = new ZTestItem(rootItem, this);
|
||||
base.InitTriggerByChild();
|
||||
|
||||
}
|
||||
|
||||
BaseColorIntensityItem _baseColorIntensityItem;
|
||||
AlphaAllItem _alphaAllItem;
|
||||
ZTestItem _zTestItem;
|
||||
|
||||
public override void DrawBlock()
|
||||
{
|
||||
_baseColorIntensityItem.OnGUI();
|
||||
_alphaAllItem.OnGUI();
|
||||
_zTestItem.OnGUI();
|
||||
}
|
||||
}
|
||||
public class BaseColorIntensityItem:ShaderGUIFloatItem
|
||||
{
|
||||
public BaseColorIntensityItem(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
PropertyName = "_BaseColorIntensityForTimeline";
|
||||
GuiContent = new GUIContent("整体颜色强度", "");
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
}
|
||||
|
||||
public class AlphaAllItem:ShaderGUISliderItem
|
||||
{
|
||||
public AlphaAllItem(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
PropertyName = "_AlphaAll";
|
||||
GuiContent = new GUIContent("整体透明度");
|
||||
RangePropertyName = "AlphaAllRangeVec";
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
}
|
||||
|
||||
public class ZTestItem : ShaderGUIPopUpItem
|
||||
{
|
||||
public ZTestItem(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
PropertyName = "_ZTest";
|
||||
GuiContent = new GUIContent("深度测试");
|
||||
PopUpNames = Enum.GetNames(typeof(CompareFunction));
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
|
||||
public override void OnGUI()
|
||||
{
|
||||
MixedBool uiEffectEnabled = MeshModePopUp.MeshSourceModeDic[RootItem].UIEffectEnabled();
|
||||
if (uiEffectEnabled == MixedBool.True)
|
||||
{
|
||||
if (!Mathf.Approximately(PropertyInfo.Property.floatValue,(float)CompareFunction.LessEqual))
|
||||
{
|
||||
PropertyInfo.Property.floatValue = (float)CompareFunction.LessEqual;
|
||||
}
|
||||
return; //UIEffeect不应比较深度
|
||||
}
|
||||
else if (uiEffectEnabled == MixedBool.Mixed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
base.OnGUI();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 135aa1fd916c4155b15cada119fdf3fd
|
||||
timeCreated: 1758549245
|
||||
@@ -0,0 +1,385 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
namespace NBShaderEditor
|
||||
{
|
||||
public class ModeBigBlockItem:ShaderGUIBigBlockItem
|
||||
{
|
||||
public ModeBigBlockItem(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
GuiContent = new GUIContent("模式设置", "各种基础模式设置");
|
||||
FoldOutPropertyName = "_BigBlockModeSettingFoldOut";
|
||||
_meshModePopUp = new MeshModePopUp(rootItem, this);
|
||||
_transparentMode = new TransparentModePopUp(rootItem, this);
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
|
||||
private MeshModePopUp _meshModePopUp;
|
||||
private TransparentModePopUp _transparentMode;
|
||||
|
||||
public override void DrawBlock()
|
||||
{
|
||||
_meshModePopUp.OnGUI();
|
||||
_transparentMode.OnGUI();
|
||||
}
|
||||
}
|
||||
public enum MeshSourceMode
|
||||
{
|
||||
Particle,
|
||||
Mesh,
|
||||
UIEffectRawImage,
|
||||
UIEffectSprite,
|
||||
UIEffectBaseMap,
|
||||
UIParticle,
|
||||
UnKnowOrMixed = -1
|
||||
}
|
||||
|
||||
public class MeshModePopUp : ShaderGUIPopUpItem,IDisposable
|
||||
{
|
||||
public MeshSourceMode MeshSourceMode;
|
||||
public static Dictionary<ShaderGUIRootItem,MeshModePopUp> MeshSourceModeDic = new Dictionary<ShaderGUIRootItem,MeshModePopUp>();
|
||||
public MeshModePopUp(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) :
|
||||
base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
PopUpNames = new[]
|
||||
{
|
||||
"粒子系统",
|
||||
"模型(非粒子发射)",
|
||||
"2D RawImage",
|
||||
"2D 精灵",
|
||||
"2D 材质贴图",
|
||||
"2D UIParticle"
|
||||
};
|
||||
PropertyName = "_MeshSourceMode";
|
||||
GuiContent = new GUIContent("Mesh来源模式", "Mesh来源模式和当前的对象类型一致");
|
||||
MeshSourceModeDic.Add(rootItem,this);
|
||||
InitTriggerByChild();
|
||||
}
|
||||
|
||||
public MixedBool UIEffectEnabled()
|
||||
{
|
||||
if ((int)MeshSourceMode >= 2)
|
||||
{
|
||||
return MixedBool.True;
|
||||
}
|
||||
else if (MeshSourceMode == MeshSourceMode.UnKnowOrMixed)
|
||||
{
|
||||
return MixedBool.Mixed;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MixedBool.False;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnGUI()
|
||||
{
|
||||
base.OnGUI();
|
||||
if (PropertyInfo.Property.hasMixedValue)
|
||||
{
|
||||
MeshSourceMode = MeshSourceMode.UnKnowOrMixed;
|
||||
}
|
||||
else
|
||||
{
|
||||
MeshSourceMode = (MeshSourceMode)PropertyInfo.Property.floatValue;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
MeshSourceModeDic.Remove(RootItem);
|
||||
}
|
||||
}
|
||||
|
||||
public enum TransparentMode
|
||||
{
|
||||
Opaque = 0,
|
||||
Transparent = 1,
|
||||
CutOff = 2,
|
||||
UnKnowOrMixed = -1
|
||||
}
|
||||
|
||||
public class TransparentModePopUp : ShaderGUIPopUpItem,IDisposable
|
||||
{
|
||||
|
||||
public TransparentMode TransparentMode;
|
||||
public static Dictionary<ShaderGUIRootItem,TransparentModePopUp> TransparentModeDic =
|
||||
new Dictionary<ShaderGUIRootItem, TransparentModePopUp>();
|
||||
public TransparentModePopUp(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) :
|
||||
base(rootItem, parentItem: parentItem)
|
||||
{
|
||||
PopUpNames = new[]
|
||||
{
|
||||
"不透明Opaque",
|
||||
"半透明Transparent",
|
||||
"不透明裁剪CutOff"
|
||||
};
|
||||
PropertyName = "_TransparentMode";
|
||||
GuiContent = new GUIContent("透明模式", "透明模式");
|
||||
TransparentModeDic.Add(RootItem,this);
|
||||
_cutOffSlider = new CutOffSlider(RootItem, this);
|
||||
_blendPopUp = new BlendPopUp(RootItem, this);
|
||||
PropertyInfo = RootItem.PropertyInfoDic[PropertyName];
|
||||
TransparentMode = (TransparentMode)PropertyInfo.Property.floatValue;
|
||||
InitTriggerByChild();
|
||||
}
|
||||
|
||||
|
||||
public override void OnGUI()
|
||||
{
|
||||
base.OnGUI();
|
||||
if (PropertyInfo.Property.hasMixedValue)
|
||||
{
|
||||
TransparentMode = TransparentMode.UnKnowOrMixed;
|
||||
}
|
||||
else
|
||||
{
|
||||
TransparentMode = (TransparentMode)PropertyInfo.Property.floatValue;
|
||||
}
|
||||
}
|
||||
|
||||
private CutOffSlider _cutOffSlider;
|
||||
private BlendPopUp _blendPopUp;
|
||||
public override void DrawBlock()
|
||||
{
|
||||
if (TransparentMode== TransparentMode.CutOff)
|
||||
{
|
||||
_cutOffSlider.OnGUI();
|
||||
}
|
||||
|
||||
if (TransparentMode == TransparentMode.Transparent)
|
||||
{
|
||||
_blendPopUp.OnGUI();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override void OnEndChange()
|
||||
{
|
||||
TransparentMode = (TransparentMode)PropertyInfo.Property.floatValue;
|
||||
ShaderPropertyInfo zWritePropInfo = RootItem.PropertyInfoDic["_ZWrite"];//TODO ModifyToZWriteToggleGUI
|
||||
ShaderPropertyInfo queueBiasPropInfo = RootItem.PropertyInfoDic["_QueueBias"];//TODO ModifyToQueueBiasGUI
|
||||
|
||||
|
||||
switch (TransparentMode)
|
||||
{
|
||||
case TransparentMode.Opaque:
|
||||
zWritePropInfo.Property.floatValue = 1;
|
||||
foreach (var mat in RootItem.Mats)
|
||||
{
|
||||
mat.renderQueue = 2100 + (int)queueBiasPropInfo.Property.floatValue; //3D粒子永远最前显示
|
||||
}
|
||||
_blendPopUp.PropertyInfo.Property.floatValue = (float)BlendMode.Opaque;
|
||||
_blendPopUp.OnEndChange();
|
||||
break;
|
||||
case TransparentMode.Transparent:
|
||||
zWritePropInfo.Property.floatValue = 0;
|
||||
|
||||
foreach (var mat in RootItem.Mats)
|
||||
{
|
||||
mat.renderQueue = 3000 + (int)queueBiasPropInfo.Property.floatValue;
|
||||
}
|
||||
|
||||
if (_blendPopUp.BlendMode == BlendMode.Opaque)
|
||||
{
|
||||
_blendPopUp.PropertyInfo.Property.floatValue = (float)BlendMode.Alpha;//如果设置错误则强制设置。
|
||||
_blendPopUp.OnEndChange();
|
||||
}
|
||||
|
||||
break;
|
||||
case TransparentMode.CutOff:
|
||||
zWritePropInfo.Property.floatValue = 1;
|
||||
foreach (var mat in RootItem.Mats)
|
||||
{
|
||||
mat.renderQueue = 2450 + (int)queueBiasPropInfo.Property.floatValue; //3D粒子永远最前显示
|
||||
}
|
||||
_blendPopUp.PropertyInfo.Property.floatValue = (float)BlendMode.Opaque;
|
||||
_blendPopUp.OnEndChange();
|
||||
break;
|
||||
}
|
||||
|
||||
foreach (var mat in RootItem.Mats)
|
||||
{
|
||||
if (TransparentMode == TransparentMode.CutOff)
|
||||
{
|
||||
mat.EnableKeyword("_ALPHATEST_ON");
|
||||
}
|
||||
else
|
||||
{
|
||||
mat.DisableKeyword("_ALPHATEST_ON");
|
||||
}
|
||||
}
|
||||
|
||||
base.OnEndChange();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
TransparentModeDic.Remove(RootItem);//回收时清掉相关引用。?会不会有时序问题
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class CutOffSlider:ShaderGUISliderItem
|
||||
{
|
||||
public CutOffSlider(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem)
|
||||
{
|
||||
PropertyName = "_Cutoff";
|
||||
GuiContent = new GUIContent("裁剪位置", "0为完全不裁剪,1为完全裁剪");
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum BlendMode
|
||||
{
|
||||
Alpha, // Old school alpha-blending mode, fresnel does not affect amount of transparency
|
||||
Premultiply, // Physically plausible transparency mode, implemented as alpha pre-multiply
|
||||
Additive,
|
||||
Multiply,
|
||||
Opaque,
|
||||
UnKnowOrMixed = -1
|
||||
}
|
||||
|
||||
public class BlendPopUp : ShaderGUIPopUpItem,IDisposable
|
||||
{
|
||||
public BlendMode BlendMode;
|
||||
public static Dictionary<ShaderGUIRootItem,BlendPopUp> BlendModeDic = new Dictionary<ShaderGUIRootItem,BlendPopUp>();
|
||||
public BlendPopUp(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem)
|
||||
{
|
||||
PropertyName = "_Blend";
|
||||
PopUpNames = new[]
|
||||
{
|
||||
"透明度混合AlphaBlend",
|
||||
"预乘PreMultiply",
|
||||
"叠加Additive",
|
||||
"正片叠底Multiply"
|
||||
};
|
||||
GuiContent = new GUIContent("混合模式");
|
||||
BlendModeDic.Add(rootItem,this);
|
||||
_addToPreMultiplySlider = new AddToPreMultiplySlider(rootItem, this);
|
||||
InitTriggerByChild();
|
||||
}
|
||||
|
||||
public override void OnGUI()
|
||||
{
|
||||
base.OnGUI();
|
||||
if (PropertyInfo.Property.hasMixedValue)
|
||||
{
|
||||
BlendMode = BlendMode.UnKnowOrMixed;
|
||||
}
|
||||
else
|
||||
{
|
||||
BlendMode = (BlendMode)PropertyInfo.Property.floatValue;
|
||||
}
|
||||
}
|
||||
|
||||
private AddToPreMultiplySlider _addToPreMultiplySlider;
|
||||
public override void DrawBlock()
|
||||
{
|
||||
if (BlendMode == BlendMode.Additive || BlendMode == BlendMode.Premultiply)
|
||||
{
|
||||
_addToPreMultiplySlider.OnGUI();
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnEndChange()
|
||||
{
|
||||
BlendMode = (BlendMode)PropertyInfo.Property.floatValue;
|
||||
if (BlendMode == BlendMode.Additive)
|
||||
{
|
||||
_addToPreMultiplySlider.PropertyInfo.Property.floatValue = 0;
|
||||
_addToPreMultiplySlider.OnEndChange();
|
||||
}
|
||||
|
||||
if (BlendMode == BlendMode.Premultiply)
|
||||
{
|
||||
_addToPreMultiplySlider.PropertyInfo.Property.floatValue = 1;
|
||||
_addToPreMultiplySlider.OnEndChange();
|
||||
}
|
||||
|
||||
foreach (var mat in RootItem.Mats)
|
||||
{
|
||||
switch (BlendMode)
|
||||
{
|
||||
case BlendMode.Alpha:
|
||||
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
|
||||
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
|
||||
mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
|
||||
mat.DisableKeyword("_ALPHAMODULATE_ON");
|
||||
break;
|
||||
case BlendMode.Premultiply:
|
||||
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
|
||||
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
|
||||
mat.EnableKeyword("_ALPHAPREMULTIPLY_ON");
|
||||
mat.DisableKeyword("_ALPHAMODULATE_ON");
|
||||
break;
|
||||
case BlendMode.Additive:
|
||||
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
|
||||
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
|
||||
mat.EnableKeyword("_ALPHAPREMULTIPLY_ON");
|
||||
mat.DisableKeyword("_ALPHAMODULATE_ON");
|
||||
break;
|
||||
case BlendMode.Multiply:
|
||||
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor);
|
||||
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
|
||||
mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
|
||||
mat.EnableKeyword("_ALPHAMODULATE_ON");
|
||||
break;
|
||||
case BlendMode.Opaque:
|
||||
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
|
||||
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
|
||||
mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
base.OnEndChange();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
BlendModeDic.Remove(RootItem);
|
||||
}
|
||||
}
|
||||
|
||||
public class AddToPreMultiplySlider : ShaderGUISliderItem
|
||||
{
|
||||
public AddToPreMultiplySlider(ShaderGUIRootItem rootItem, ShaderGUIItem parentItem) : base(rootItem, parentItem)
|
||||
{
|
||||
PropertyName = "_AdditiveToPreMultiplyAlphaLerp";
|
||||
GuiContent = new GUIContent("叠加到预乘混合", "0为叠加混合,1为预乘混合");
|
||||
base.InitTriggerByChild();
|
||||
}
|
||||
|
||||
public override void CheckIsPropertyModified(bool isCallByChild = false)
|
||||
{
|
||||
float defaultValue = 0;
|
||||
BlendPopUp blendPopUp = BlendPopUp.BlendModeDic[RootItem];
|
||||
if (blendPopUp.BlendMode == BlendMode.Premultiply)
|
||||
{
|
||||
defaultValue = 1;
|
||||
}
|
||||
|
||||
HasModified = !Mathf.Approximately(defaultValue,PropertyInfo.Property.floatValue);
|
||||
ParentItem?.CheckIsPropertyModified(true);
|
||||
|
||||
}
|
||||
|
||||
public override void ExecuteReset(bool isCallByParent = false)
|
||||
{
|
||||
float defaultValue = 0;
|
||||
BlendPopUp blendPopUp = BlendPopUp.BlendModeDic[RootItem];
|
||||
if (blendPopUp.BlendMode == BlendMode.Premultiply)
|
||||
{
|
||||
defaultValue = 1;
|
||||
}
|
||||
|
||||
PropertyInfo.Property.floatValue = defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed09665b113c407dbfb8c818b74f48aa
|
||||
timeCreated: 1758445745
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.shaders2.Editor",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:0e3b0e6ce60c7a34094f8f9822c0b7f2",
|
||||
"GUID:8495541fcd41b0c40b5b6e6e7a7639d1",
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6e0dde26488c0e44a9afcddc82a907e9
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a21852943b9bc9840919005d3eb6dcc9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "com.xuanxuan.nb.shaders2",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:8f9e4d586616f13449cfeb86c5f704c2"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aed681b6b9e69ff4dbd8d55e012b87ff
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1e09642e7a55f5c42b63bcee4d005692
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,980 @@
|
||||
Shader "Hidden/Effects/NBShader2开发中"
|
||||
//Shader "Effects/NBShader2开发中"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_BigBlockModeSettingFoldOut("_BigBlockModeSettingFoldOut",Float) = 0
|
||||
_BaseOptionBigBlockItemFoldOut("BaseOptionBigBlockItem",Float) = 0
|
||||
_MeshSourceMode("Mesh来源模式",Float) = 0
|
||||
_UIEffect_Toggle("UI模式_Toggle",Float) = 0
|
||||
_DistortionBothDirection_Toggle("__DistortionBothDirection_Toggle",Float) = 0
|
||||
_DistanceFade_Toggle("_DistanceFade_Toggle",Float) = 0
|
||||
_ChangeSaturability_Toggle("__ChangeSaturability_Toggle",Float) = 0
|
||||
_Mask_Toggle("__Mask_Toggle",Float) = 0
|
||||
_Mask_RotationToggle("__Mask_RotationToggle",Float) = 0
|
||||
_Mask2_Toggle("__Mask2_Toggle",Float) = 0
|
||||
_Mask3_Toggle("__Mask3_Toggle",Float) = 0
|
||||
_BaseBackColor_Toggle("__BaseBackColor_Toggle",Float) = 0
|
||||
_UseUV1_Toggle("__UseUV1_Toggle",Float) = 0
|
||||
_TransparentMode("_TransparentMode",Float) = 1
|
||||
_ForceZWriteToggle("_ForceZWriteToggle",Float) = 0
|
||||
|
||||
_Dissolve_Toggle("__Dissolve_Toggle",Float) = 0
|
||||
_DissolveMask_Toggle("__DissolveMask_Toggle",Float) = 0
|
||||
_DissolveVoronoi_Toggle("__DissolveVoronoi_Toggle",Float) = 0
|
||||
_Dissolve_useRampMap_Toggle("__Dissolve_useRampMap_Toggle",Float) = 0
|
||||
_Dissolve_Test_Toggle("__Dissolve_Test_Toggle",Float) = 0
|
||||
|
||||
|
||||
_FresnelMode("__FresnelMode",Float) = 0
|
||||
_InvertFresnel_Toggle("__InvertFresnel_Toggle",Float) = 0
|
||||
_HueShift_Toggle("__HueShift_Toggle",Float) = 0
|
||||
_BackFaceColor_Toggle("_BackFaceColor_Toggle",Float) = 0
|
||||
_BackFirstPassToggle("_BackFirstPassToggle",Float) = 0
|
||||
|
||||
_PolarCordinateOnlySpecialFunciton_Toggle("极坐标仅对特殊功能生效_Toggle",Float) = 0
|
||||
|
||||
_CustomData1X_MainTexOffsetX_Toggle("_CustomData1X_MainTexOffsetX_Toggle",Float) = 0
|
||||
_CustomData1Y_MainTexOffsetY_Toggle("_CustomData1Y_MainTexOffsetY_Toggle",Float) = 0
|
||||
_CustomData1Z_Dissolve_Toggle("_CustomData1Z_Dissolve_Toggle",Float) = 0
|
||||
_CustomData1W_HueShift_Toggle("_CustomData1W_HueShift_Toggle",Float) = 0
|
||||
_CustomData2X_MaskMapOffsetX_Toggle("_CustomData2X_MaskMapOffsetX_Toggle",Float) = 0
|
||||
_CustomData2Y_MaskMapOffsetY_Toggle("_CustomData2Y_MaskMapOffsetY_Toggle",Float) = 0
|
||||
_CustomData2Z_FresnelOffset_Toggle("_CustomData2Z_FresnelOffset_Toggle",Float) = 0
|
||||
_CustomData2W_Toggle("_CustomData2W_Toggle",Float) = 0
|
||||
|
||||
// [PerRendererData] [MainTexture] _MainTex("Sprite Texture-ignore", 2D) = "white" {}
|
||||
[PerRendererData] _MainTex ("Sprite Texture-ignore", 2D) = "white" {}
|
||||
_Color("颜色贴图叠加", Color) = (1,1,1,1)
|
||||
_UI_MainTex_ST("UI模式主贴图 xy:UV缩放 zw:UV偏移",vector) = (1,1,0,0)
|
||||
_MainTex_Reverse_ST("MainTex_Reverse_ST-ignore",Vector) = (1,1,0,0)
|
||||
|
||||
_BaseMap ("主贴图 xy:UV缩放 zw:UV偏移", 2D) = "white" { }
|
||||
_BaseMapMaskMapOffset ("xy主贴图偏移速度", vector) = (0, 0, 0, 0)
|
||||
|
||||
_BaseMapUVRotation ("主贴图旋转", Range(0, 360)) = 0
|
||||
_BaseMapUVRotationSpeed ("主贴图旋转速度",Float) = 0
|
||||
[HDR]_BaseColor ("主贴图颜色_hdr", Color) = (1, 1, 1, 1)//HDR颜色不需要做Gamma Linear转换,Unity默认用Linear颜色
|
||||
// _BaseColor ("Base Color", Color) = (1, 1, 1, 1)//HDR颜色不需要做Gamma Linear转换,Unity默认用Linear颜色
|
||||
[HDR]_BaseBackColor ("背面颜色_hdr", Color) = (1, 1, 1, 1)//HDR颜色不需要做Gamma Linear转换,Unity默认用Linear颜色
|
||||
_BaseColorIntensityForTimeline("整体颜色强度", Range(0,10)) = 1 //独立出来是以为Timeline K颜色的时候会很奇怪的影响色相
|
||||
_Saturability("饱和度", range(0,1)) = 0
|
||||
_Contrast_Toggle("__Contrast_Toggle",Float) = 0
|
||||
_Contrast("对比度", Float) = 1
|
||||
_ContrastMidColor ("对比度中值颜色", Color) = (0.5, 0.5, 0.5, 1)//HDR颜色不需要做Gamma Linear转换,Unity默认用Linear颜色
|
||||
_HueShift("色相",Range(0,1)) = 0
|
||||
_BaseMapColorRefine_Toggle ("__BaseMapColorRefine_Toggle",Float) = 0
|
||||
_BaseMapColorRefine("主贴图颜色Refine",Vector) = (1,1,2,1)
|
||||
_AlphaAll("整体透明度",Range(0,1)) = 1
|
||||
_IgnoreVetexColor_Toggle("_IgnoreVetexColor_Toggle",Float) = 0
|
||||
|
||||
_SpecialUVChannelMode("特殊UV通道选择",Float) = 0
|
||||
|
||||
_CylinderUVRotate("圆柱UV旋转",Vector) = (0,0,90,0)
|
||||
_CylinderUVPosOffset("圆柱UV位置偏移",Vector) = (0,0,0,0)
|
||||
_CylinderMatrix0("圆柱偏移矩阵0",Vector) = (0,0,0,0)
|
||||
_CylinderMatrix1("圆柱偏移矩阵1",Vector) = (0,0,0,0)
|
||||
_CylinderMatrix2("圆柱偏移矩阵2",Vector) = (0,0,0,0)
|
||||
_CylinderMatrix3("圆柱偏移矩阵3",Vector) = (0,0,0,0)
|
||||
|
||||
_Cutoff ("裁剪位置", float) = 0.5
|
||||
|
||||
//--------------光照部分-------------
|
||||
_FxLightMode("灯光模式",Float) = 0
|
||||
_BumpMapToggle("法线贴图开关",Float) = 0
|
||||
_BumpMapMaskMode("法线贴图多通道模式",Float) = 0
|
||||
_BumpScale("Scale", Float) = 1.0
|
||||
_BumpTex("Normal Map", 2D) = "bump" {}
|
||||
_MaterialInfo("x:金属度,y:光滑度",Vector) = (1,1,0,0)
|
||||
_BlinnPhongSpecularToggle("BlinnPhong高光开关",Float) = 0
|
||||
[HDR]_SpecularColor("BlinnPhong高光颜色",Color) = (1,1,1,1)
|
||||
//-----------SixWayLight----------
|
||||
_RigRTBk("六路正方向图(P)",2D) = "white"{}
|
||||
_RigLBtF("六路反方向图(N)",2D) = "white"{}
|
||||
_SixWayColorAbsorptionToggle("六路光颜色吸收开关",Float) = 0
|
||||
_SixWayInfo("x:六路吸收强度",Vector) = (0.5,0,0,0)
|
||||
_SixWayEmissionRamp("六路自发光Ramp",2D) = "white"{}
|
||||
[HDR]_SixWayEmissionColor("六路自发光颜色",Color) = (1,0.5,0,1)
|
||||
|
||||
//-----MatCap------
|
||||
_MatCapToggle("MatCap开关",Float) = 0
|
||||
_MatCapTex("MatCap图",2D) = "white"{}
|
||||
[HDR]_MatCapColor("MatCap颜色",Color) = (1,1,1,1)
|
||||
_MatCapInfo("x:MatCap叠加和相乘过渡",Vector) = (1,0,0,0)
|
||||
// _MatCapBlendMode("MatCap叠加模式",Float) = 0
|
||||
|
||||
//时间缩放影响开关----------
|
||||
[HideInInspector] _TimeMode("__TimeMode",float) = 0.0
|
||||
|
||||
_StencilWithoutPlayerToggle("剔除主角色开关",Float) = 0.0
|
||||
|
||||
// MaskMap-----------
|
||||
_MaskRefineToggle("遮罩整体调整开关",Float) = 0
|
||||
_MaskRefineVec("遮罩整体调整:x:Pow,y:相乘,z:相加",Vector) = (1,1,0,0)
|
||||
_MaskMap ("遮罩贴图 xy:UV缩放 zw:UV偏移", 2D) = "white" { }
|
||||
_MaskMap2 ("遮罩2贴图 xy:UV缩放 zw:UV偏移", 2D) = "white"{}
|
||||
_MaskMap3 ("遮罩3贴图 xy:UV缩放 zw:UV偏移", 2D) = "white"{}
|
||||
_MaskMapOffsetAnition("xy:遮罩偏移速度,zw:遮罩2偏移速度", vector) = (0,0,0,0)
|
||||
_MaskMap3OffsetAnition("xy:遮罩3偏移速度", vector) = (0,0,0,0)
|
||||
_MaskMapUVRotation ("遮罩旋转", Range(0, 360)) = 0.0
|
||||
_MaskDistortion_intensity ("遮罩扭曲强度", float) = 0.0
|
||||
_MaskMapRotationSpeed("遮罩旋转速度", float) = 0.0
|
||||
_MaskMapVec("x整体遮罩强度,y遮罩2旋转,z遮罩3旋转",Vector) = (1,0,0,0)
|
||||
|
||||
_MaskMapGradientToggle("遮罩渐变模式",Float) = 0
|
||||
_MaskMapGradientCount("颜色映射数量",Integer) = 2
|
||||
_MaskMapGradientFloat0("x:MaskAlpha0,y:Pos0,z:MaskAlpha1,w:Pos1",Vector) = (0,0,1,1)
|
||||
_MaskMapGradientFloat1("x:MaskAlpha2,y:Pos2,z:MaskAlpha3,w:Pos3",Vector) = (1,0,1,1)
|
||||
_MaskMapGradientFloat2("x:MaskAlpha4,y:Pos4,z:MaskAlpha5,w:Pos5",Vector) = (1,0,1,1)
|
||||
_MaskMap2GradientToggle("遮罩2渐变模式",Float) = 0
|
||||
_MaskMap2GradientCount("颜色映射数量",Integer) = 2
|
||||
_MaskMap2GradientFloat0("x:Mask2Alpha0,y:Pos0,z:Mask2Alpha1,w:Pos1",Vector) = (0,0,1,1)
|
||||
_MaskMap2GradientFloat1("x:Mask2Alpha2,y:Pos2,z:Mask2Alpha3,w:Pos3",Vector) = (1,0,1,1)
|
||||
_MaskMap2GradientFloat2("x:Mask2Alpha4,y:Pos4,z:Mask2Alpha5,w:Pos5",Vector) = (1,0,1,1)
|
||||
_MaskMap3GradientToggle("遮罩3渐变模式",Float) = 0
|
||||
_MaskMap3GradientCount("颜色映射数量",Integer) = 2
|
||||
_MaskMap3GradientFloat0("x:Mask3Alpha0,y:Pos0,z:Mask3Alpha1,w:Pos1",Vector) = (0,0,1,1)
|
||||
_MaskMap3GradientFloat1("x:Mask3Alpha2,y:Pos2,z:Mask3Alpha3,w:Pos3",Vector) = (1,0,1,1)
|
||||
_MaskMap3GradientFloat2("x:Mask3Alpha4,y:Pos4,z:Mask3Alpha5,w:Pos5",Vector) = (1,0,1,1)
|
||||
|
||||
// 擦除----------------
|
||||
//[Header(ChaChu(Anima For CustomData.z).......)]
|
||||
//[KeywordEnum(NoChange,XianXing, JingXiang, Self)] _ch ("ChaChu mode", Float) = 0
|
||||
[HideInInspector] _Chachu ("__Chachu_ignore", Float) = 0.0
|
||||
_EdgeFade ("EdgeFade_ignore", Range(0, 1)) = 0.05
|
||||
_XianXingCH_UVRota ("XianXingCH_UVRota_ignore", float) = 0
|
||||
_jingxiangCH_dire ("Direction_ignore", Range(0, 1)) = 0
|
||||
|
||||
// 漩涡 -------------------
|
||||
//[Toggle(_JIZUOBIAO)] _N121 ("JIZUOBIAO?", float) = 0
|
||||
[HideInInspector] _UTwirlEnabled ("__UTwirlEnabled", Float) = 0.0
|
||||
_TWParameter ("xy:旋转扭曲中心", vector) = (0.5, 0.5, 0, 0)
|
||||
_TWStrength ("旋转扭曲强度", float) = 0
|
||||
|
||||
|
||||
// 极坐标 -------------------
|
||||
//[Toggle(_JIZUOBIAO)] _N121 ("JIZUOBIAO?", float) = 0
|
||||
[HideInInspector]_PolarCoordinatesEnabled ("__PolarCoordinatesEnabled", Float) = 0.0
|
||||
_PCCenter ("xy:极坐标中心 z:极坐标强度", vector) = (0.5, 0.5, 1, 0)//位置坐标用的前两个分量,z分量给强度。
|
||||
_WorldPosUVMode("_WorldPosUVMode",Float) = 0
|
||||
_ObjectPosUVMode("_ObjectPosUVMode",Float) = 0
|
||||
|
||||
// 噪波 --------------
|
||||
//[Toggle(_NOISEMAP)]_N ("NOISEMAP?", float) =0
|
||||
[HideInInspector] _ScreenDistortModeToggle("_ScreenDistortModeToggle",Float) = 0
|
||||
[HideInInspector] _DisableMainPassToggle("_ScreenDistortModeToggle",Float) = 0
|
||||
[HideInInspector] _DistortMode("_DistortMode",Float) = 0
|
||||
[HideInInspector] _noisemapEnabled ("__noisemapEnabled", Float) = 0.0
|
||||
[HideInInspector] _noiseMaskMap_Toggle ("__noiseMaskMap_Toggle", Float) = 0.0
|
||||
_RefractionIOR("折射率",Float) = 1.5
|
||||
_NoiseMap ("扭曲贴图 xy:UV缩放 zw:UV偏移", 2D) = "white" { }
|
||||
_NoiseMaskMap ("扭曲遮罩贴图 xy:UV缩放 zw:UV偏移", 2D) = "white" { }
|
||||
_NoiseMapUVRotation("扭曲旋转",Range(0,360)) = 0
|
||||
_NoiseOffset ("xy:扭曲偏移速度 ", vector) = (0, 0, 0, 0)//w分量为本地uv坐标到世界坐标的变化
|
||||
_TexDistortion_intensity ("主贴图扭曲强度", float) = 0.5
|
||||
_NoiseIntensity("整体扭曲强度",Float) = 1
|
||||
_ScreenDistortIntensity("屏幕扭曲强度",Float) = 1
|
||||
|
||||
_ScreenDistortAlphaRefineToggle("屏幕扭曲Alpha调整开关",Float) = 0
|
||||
_ScreenDistortAlphaPow("屏幕扭曲AlphaPow",Float) = 1
|
||||
_ScreenDistortAlphaMulti("屏幕扭曲Alpha相乘",Float) = 1
|
||||
_ScreenDistortAlphaAdd("屏幕扭曲Alpha相加",Float) = 0
|
||||
_DistortionDirection ("扭曲方向xy, 色散强度z", vector) = (1,1,0,0)
|
||||
_Distortion_Choraticaberrat_Toggle("扭曲色散开关_Toggle",Float) = 0
|
||||
_Distortion_Choraticaberrat_WithNoise_Toggle("色散受扭曲影响_Toggle",Float) = 1
|
||||
|
||||
// 流光 ----------
|
||||
//[Header(LiuGuang(Anima For CustomData.w).......)]
|
||||
//[Toggle(_EMISSION)]_N1 ("EMISSION?", float) = 0
|
||||
[HideInInspector] _EmissionEnabled ("__EmissionEnabled", Float) = 0.0
|
||||
_EmissionMap ("流光贴图 xy:UV缩放 zw:UV偏移", 2D) = "white" { }
|
||||
_EmissionMapUVRotation ("流光贴图旋转", Range(0, 360)) = 0
|
||||
_Emi_Distortion_intensity ("流光贴图扭转强度", float) = 0
|
||||
_EmissionMapUVOffset ("xy:流光贴图偏移速度", vector) = (0, 0, 0, 0)
|
||||
_EmissionSelfAlphaWeight ("__EmissionSelfAlphaWeight_ignore", float) = 0
|
||||
_uvRapSoft ("LiuuvRapSoft-ignore", Range(0, 1)) = 0
|
||||
[HDR]_EmissionMapColor ("流光贴图颜色_hdr", Color) = (1, 1, 1, 1)
|
||||
_EmissionMapColorIntensity("流光颜色强度", float) = 1
|
||||
|
||||
//颜色渐变贴图--------
|
||||
_ColorBlendMap_Toggle("__ColorBlendMap_Toggle",Float) = 0
|
||||
_ColorBlendMap("颜色渐变贴图 xy:UV缩放 zw:UV偏移",2D) = "white"{}
|
||||
[HDR]_ColorBlendColor("颜色渐变叠加_hdr",Color) = (1,1,1,1)
|
||||
_ColorBlendMapOffset("xy:颜色渐变贴图偏移动画",Vector) = (0,0,0,0)
|
||||
_ColorBlendAlphaMultiplyMode("颜色渐变Alpha相乘开关",Float) = 0
|
||||
_ColorBlendVec("x:颜色渐变扰动强度z:Alpha强度w:旋转",Vector) = (0,0,1,0)
|
||||
|
||||
//颜色映射Ramp
|
||||
_RampColorToggle("颜色映射开关",Float) = 0
|
||||
_RampColorSourceMode("Ramp来源模式",Float) = 0
|
||||
_RampColorBlendMode("Ramp颜色混合模式",Float) = 0
|
||||
_RampColorMap("颜色映射黑白图",2D) = "white"{}
|
||||
_RampColor0("rgb:RampColor0,a:pos",Color) = (0,0,0,0)
|
||||
_RampColor1("rgb:RampColor1,a:pos",Color) = (1,0,0,1)
|
||||
_RampColor2("rgb:RampColor2,a:pos",Color) = (1,1,1,1)
|
||||
_RampColor3("rgb:RampColor3,a:pos",Color) = (1,1,1,1)
|
||||
_RampColor4("rgb:RampColor4,a:pos",Color) = (1,1,1,1)
|
||||
_RampColor5("rgb:RampColor5,a:pos",Color) = (1,1,1,1)
|
||||
_RampColorAlpha0("x:RampColorAlpha0,y:Pos0,z:RampColorAlpha1,w:Pos1",Vector) = (1,0,1,1)
|
||||
_RampColorAlpha1("x:RampColorAlpha2,y:Pos2,z:RampColorAlpha3,w:Pos3",Vector) = (1,0,1,1)
|
||||
_RampColorAlpha2("x:RampColorAlpha4,y:Pos4,z:RampColorAlpha5,w:Pos5",Vector) = (1,0,1,1)
|
||||
_RampColorCount("颜色映射数量",Integer) = 2
|
||||
[HDR]_RampColorBlendColor("颜色映射叠加颜色_hdr",Color) = (1,1,1,1)
|
||||
_RampColorMapOffset("xy:颜色映射贴图偏移动画,w:旋转",Vector) = (0,0,0,0)
|
||||
|
||||
|
||||
// Rongjie ------------------
|
||||
// [Header(RongJie(Anima For CustomData.y).......)]
|
||||
// [Toggle(_DISSOLVE)]_RJ ("RONGJIE?", float) = 0
|
||||
_Dissolve ("x:溶解强度 y:溶解值Pow z:过程溶解强度 w:溶解硬软度", vector) = (0.5, 1, 0, 0.1)
|
||||
_DissolveMap("溶解贴图 xy:UV缩放 zw:UV偏移",2D) = "grey"{}
|
||||
_DissolveMaskMap("局部溶解蒙版 xy:UV缩放 zw:UV偏移",2D) = "white"{}
|
||||
_DissolveOffsetRotateDistort("xy:溶解贴图偏移速度 z:溶解贴图旋转",Vector) = (0,0,0,0)
|
||||
[HDR]_DissolveLineColor("溶解描边颜色_hdr",Color) = (1,0,0,1)
|
||||
_DissolveVoronoi_Vec("xy:噪波1缩放,zw:噪波2缩放",Vector) = (1,1,2,2)
|
||||
_DissolveVoronoi_Vec2("x:噪波1和噪波2混合系数(圆尖),y:噪波整体和溶解贴图混合系数,z:噪波1速度,w:噪波2速度",Vector) = (1,1,2,2)
|
||||
_DissolveVoronoi_Vec3("xy:噪波1偏移速度,zw:噪波2偏移速度",Vector) = (0,0,0,0)
|
||||
_DissolveVoronoi_Vec4("xy:噪波1偏移,zw:噪波2偏移",Vector) = (0,0,0,0)
|
||||
_Dissolve_Vec2("x:Ramp位置偏移,y:Ramp范围",Vector) = (0.2,0.1,0,0)
|
||||
_DissolveRampMap("溶解Ramp图",2D) = "white"{}
|
||||
_DissolveRampColorBlendMode("溶解Ramp图混合模式",Float) = 0
|
||||
[HDR]_DissolveRampColor("溶解Ramp颜色_hdr",Color) = (1,1,1,1)
|
||||
_DissolveLineMaskToggle("溶解描边开关",Float) = 0
|
||||
|
||||
_DissolveRampSourceMode("溶解Ramp来源模式",Float) = 0
|
||||
_DissolveRampColor0("rgb:DissolveRampColor0,a:pos",Color) = (1,0,0,0)
|
||||
_DissolveRampColor1("rgb:DissolveRampColor1,a:pos",Color) = (0,0,0,1)
|
||||
_DissolveRampColor2("rgb:DissolveRampColor2,a:pos",Color) = (1,1,1,1)
|
||||
_DissolveRampColor3("rgb:DissolveRampColor3,a:pos",Color) = (1,1,1,1)
|
||||
_DissolveRampColor4("rgb:DissolveRampColor4,a:pos",Color) = (1,1,1,1)
|
||||
_DissolveRampColor5("rgb:DissolveRampColor5,a:pos",Color) = (1,1,1,1)
|
||||
_DissolveRampAlpha0("x:DissolveRampAlpha0,y:Pos0,z:DissolveRampAlpha1,w:Pos1",Vector) = (1,0,1,1)
|
||||
_DissolveRampAlpha1("x:DissolveRampAlpha2,y:Pos2,z:DissolveRampAlpha3,w:Pos3",Vector) = (1,0,1,1)
|
||||
_DissolveRampAlpha2("x:DissolveRampAlpha4,y:Pos4,z:DissolveRampAlpha5,w:Pos5",Vector) = (1,0,1,1)
|
||||
_DissolveRampCount("溶解Ramp映射数量",Integer) = 2
|
||||
|
||||
|
||||
_CustomData1X ("ignore", float) = 0
|
||||
_CustomData1Y ("ignore", float) = 0
|
||||
//因为希望本Shader兼容CanvasRender,由于Canvas渲染只会传递TEXCOORD通道的xy分量(zw分量忽略)的特性,所以强制让CustomedData只传递xy分量。
|
||||
_CustomData2X ("ignore", float) = 0
|
||||
|
||||
// -------------------------------------
|
||||
// Particle specific 属于粒子特殊的属性
|
||||
[ToggleOff] _CustomData ("__CustomData_Toggle", Float) = 0.0 //Toggleoff 和 Toggle 的区别
|
||||
[ToggleOff] _FlipbookBlending ("__flipbookblending_Toggle", Float) = 0.0 //Toggleoff 和 Toggle 的区别
|
||||
// _SoftParticlesNearFadeDistance ("Soft Particles Near Fade", Float) = 0.0
|
||||
// _SoftParticlesFarFadeDistance ("Soft Particles Far Fade", Float) = 1.0
|
||||
//[Toggle] _Fading ("Fading? =Default(1,2,0,0)", Float) = 0.0
|
||||
_CameraNearFadeDistance ("Camera Near Fade-ignore", Float) = 1.0
|
||||
_CameraFarFadeDistance ("Camera Far Fade-ignore", Float) = 2.0
|
||||
//临时
|
||||
_fogintensity ("雾影响强度", Range(0, 1)) = 1
|
||||
// -------------------------------------
|
||||
// Hidden properties - Generic 通用的隐藏属性
|
||||
_AdditiveToPreMultiplyAlphaLerp("相加到预乘混合",Float) = 0.0
|
||||
[HideInInspector] _Blend ("__mode-ignore", Float) = 0.0
|
||||
[HideInInspector] _AlphaClip ("__clip-ignore", Float) = 0.0
|
||||
[HideInInspector] _SrcBlend ("__src-ignore", Float) = 1.0
|
||||
[HideInInspector] _DstBlend ("__dst-ignore", Float) = 0.0
|
||||
[HideInInspector] _Cull ("__cull-ignore", Float) = 2.0
|
||||
[HideInInspector] _ZTest ("__ztest-ignore", Float) = 4.0 //默认值LEqual
|
||||
[HideInInspector] _ZWrite("__ZWrite-ignore", Float) = 0 //默认值LEqual
|
||||
// [HideInInspector] _ZTestt ("__ztestt", Float) = 4.0//雨轩:注释掉了。。。这是个什么鬼。。。
|
||||
|
||||
_CustomStencilTest ("__CustomStencilTest-ignore", Float) = 0
|
||||
_StencilKeyIndex("__StencilKeyIndex-ignore",Float) = 0
|
||||
[Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("__StencilComp-ignore", Float) = 8
|
||||
_Stencil("Stencil ID-ignore", Float) = 0
|
||||
[Enum(UnityEngine.Rendering.StencilOp)]_StencilOp("Stencil Operation-ignore", Float) = 0
|
||||
_StencilWriteMask ("Stencil Write Mask-ignore", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask-ignore", Float) = 255
|
||||
_ColorMask("Color Mask-ignore", Float) = 15
|
||||
|
||||
//[HideInInspector] _ZTestO ("__ztest0", Float) = 1.0
|
||||
_FresnelFadeDistance ("菲涅尔透明乘数", float) = 1
|
||||
_FresnelUnit("菲涅尔通用", Vector) = (0,0.5,1,0.5)
|
||||
|
||||
_DepthOutline_Toggle("深度描边",Float) = 0
|
||||
[HDR]_DepthOutline_Color("深度描边颜色_hdr",Color) = (1,1,1,1)
|
||||
_DepthOutline_Vec("菲涅尔深度描边参数",Vector) = (0,0.5,0,0)
|
||||
_FresnelColorAffectByAlpha("菲涅尔颜色受Alpha影响",Float) = 1
|
||||
// _DepthOutline_withoutFresnel_Toggle("深度描边关闭菲涅尔",Float) = 0
|
||||
// _FresnelUnit2("菲涅尔通用2", Vector) = (1,1,0,0)
|
||||
|
||||
_DepthDecal_Toggle("深度贴花",Float) = 0
|
||||
|
||||
_VertexOffset_Toggle("顶点偏移",Float) = 0
|
||||
_VertexOffset_Map("顶点偏移贴图",2D) = "white"{}
|
||||
_VertexOffset_Vec("xy:顶点偏移动画z:顶点偏移强度",Vector) = (0,0,1,0)
|
||||
_VertexOffset_NormalDir_Toggle("顶点偏移自定义方向开关",Float) = 0
|
||||
_VertexOffset_StartFromZero("顶点偏移从零开始开关",Float) = 0
|
||||
_VertexOffset_CustomDir("顶点偏移自定义方向",Vector) = (1,1,1,0)
|
||||
|
||||
_VertexOffset_Mask_Toggle("顶点偏移遮罩开关",Float) = 0
|
||||
_VertexOffset_MaskMap("顶点偏移遮罩贴图",2D) = "white"{}
|
||||
_VertexOffset_MaskMap_Vec("xy:顶点偏移遮罩动画z:顶点偏移遮罩强度",Vector) = (0,0,1,0)
|
||||
|
||||
|
||||
_ParallaxMapping_Toggle("视差",Float) = 0
|
||||
_ParallaxMapping_Map("视差贴图",2D) = "white"{}
|
||||
_ParallaxMapping_Intensity("视差强度",Float) = 0.05
|
||||
_ParallaxMapping_Vec("遮蔽视差层数 x:最小值,y:最大值",Vector) = (5,30,0,0)
|
||||
|
||||
|
||||
// Particle specific 粒子特殊的隐藏属性
|
||||
[HideInInspector] _ColorMode ("_ColorMode", Float) = 0.0
|
||||
[HideInInspector] _BaseColorAddSubDiff ("_ColorMode", Vector) = (0, 0, 0, 0)
|
||||
[HideInInspector] _SoftParticlesEnabled ("__softparticlesenabled", Float) = 0.0
|
||||
[HideInInspector] _CameraFadingEnabled ("__camerafadingenabled", Float) = 0.0
|
||||
[HideInInspector] _SoftParticleFadeParams ("xy:软粒子远近裁剪面", Vector) = (0, 0.5, 0, 0)
|
||||
[HideInInspector] _CameraFadeParams ("__camerafadeparams_ignore", Vector) = (0, 0, 0, 0)
|
||||
[HideInInspector] _IntersectEnabled("__IntersectEnabled_ignore",Float) = 0.0
|
||||
[HideInInspector] _IntersectRadius("__IntersectRadius_ignore",Float) = 0.3
|
||||
[HideInInspector] _IntersectColor("__IntersectColor_ignore",Color) = (1,1,1,1)
|
||||
|
||||
|
||||
// Editmode props 编辑模式下的PropFlags?
|
||||
[HideInInspector] _QueueBias ("Queue偏移_QueueBias", Float) =0
|
||||
|
||||
// ObsoleteProperties 弃用的属性????
|
||||
[HideInInspector] _FlipbookMode ("flipbook mode", Float) = 0
|
||||
[HideInInspector] _Mode ("mode", Float) = 0
|
||||
// [HideInInspector] _Color ("color", Color) = (1, 1, 1, 1)
|
||||
|
||||
[HideInInspector]_fresnelEnabled ("__fresnelEnabled", Float) = 0.0
|
||||
[NoScaleOffset]_FresnelHDRITex("__FresnelHDRITex_ignore",Cube) = "white"{}
|
||||
[HDR]_FresnelColor ("菲涅尔颜色_hdr", COLOR) = (1, 1, 1, 1)
|
||||
_FresnelRotation("菲涅尔方向偏移",vector) = (0,0,0,0.5)
|
||||
_FresnelInOutSlider ("direction-ignore", Range(0, 1)) = 1
|
||||
_FrePower ("FrePower-ignore", Range(0,1)) = 0.5
|
||||
_FresnelSelfAlphaWeight("__FresnelSelfAlphaWeight-ignore",float) = 0
|
||||
//用于程序控制透明属性
|
||||
[HideInInspector] _ColorA ("ColorA-ignore", Color) = (1,1,1,1)
|
||||
|
||||
_Portal_Toggle("模板视差开关",Float) = 0
|
||||
_Portal_MaskToggle("模板视差蒙版开关",Float) = 0
|
||||
|
||||
//基于深度的a通道控制
|
||||
[HideInInspector] _Fade("xy:近距离透明过度范围", Vector) = (2,4,0,0)
|
||||
|
||||
[HideInInspector] _InspectorData("__InspectorData-ignore",vector) = (1,1,0,0)
|
||||
|
||||
[Header(ZOffset)]
|
||||
_ZOffset_Toggle("深度偏移_Toggle",Float) = 0
|
||||
_offsetFactor("深度偏移Sacle-ignore", range(-2000,2000)) = 0
|
||||
_offsetUnits("深度偏移单位距离-ignore", range(-2000,2000)) = 0
|
||||
|
||||
_WorldSpaceUVModeSelector("_WordSpaceUVModeSelector",Float) = 1
|
||||
_ObjectSpaceUVModeSelector("_ObjectSpaceUVModeSelector",Float) = 1
|
||||
|
||||
[HideInInspector] _W9ParticleShaderFlags("_W9ParticleShaderFlags", Integer) = 0
|
||||
[HideInInspector] _W9ParticleShaderFlags1("_W9ParticleShaderFlags1", Integer) = 0
|
||||
[HideInInspector] _W9ParticleShaderWrapFlags("_W9ParticleShaderWrapFlags", Integer) = 0
|
||||
[HideInInspector] _W9ParticleCustomDataFlag0("_W9ParticleCustomDataFlag0", Integer) = 0
|
||||
[HideInInspector] _W9ParticleCustomDataFlag1("_W9ParticleCustomDataFlag1", Integer) = 0
|
||||
[HideInInspector] _W9ParticleCustomDataFlag2("_W9ParticleCustomDataFlag2", Integer) = 0
|
||||
[HideInInspector] _W9ParticleCustomDataFlag3("_W9ParticleCustomDataFlag3", Integer) = 0
|
||||
[HideInInspector] _UVModeFlag0("_UVModeFlag0", Integer) = 0
|
||||
[HideInInspector] _UVModeFlagType0("_UVModeFlagType0", Integer) = 0
|
||||
[HideInInspector] _W9ParticleShaderGUIFoldToggle("_W9ParticleShaderGUIFoldToggle", Integer) = 3//前2个开关默认打开
|
||||
[HideInInspector] _W9ParticleShaderGUIFoldToggle1("_W9ParticleShaderGUIFoldToggle1", Integer) = 255//这边默认全开
|
||||
[HideInInspector] _W9ParticleShaderGUIFoldToggle2("_W9ParticleShaderGUIFoldToggle2", Integer) = 255//这边默认全开
|
||||
[HideInInspector] _W9ParticleShaderColorChannelFlag("_W9ParticleShaderColorChannelFlag", Integer) = 3//默认主贴图开A通道
|
||||
|
||||
|
||||
SaturabilityRangeVec("_Saturability",Vector) = (0,1,0,0)
|
||||
TexDistortionintensityRangeVec("_TexDistortion_intensity",Vector) = (-1,1,0,0)
|
||||
MaskDistortionIntensityRangeVec("_MaskDistortion_intensity",Vector) = (-2,2,0,0)
|
||||
EmiDistortionIntensityRangeVec("_TexDistortion_intensity",Vector) = (-1,1,0,0)
|
||||
BumpScaleRangeVec("_BumpScale",Vector) = (-1,1,0,0)
|
||||
DissolveXRangeVec("_Dissolve.x",Vector) = (-1,2,0,0)
|
||||
Dissolve2XRangeVec("_Dissolve_Vec2.x",Vector) = (0,1,0,0)
|
||||
Dissolve2YRangeVec("_Dissolve_Vec2.y",Vector) = (0,1,0,0)
|
||||
AlphaAllRangeVec("_AlphaAll",Vector) = (0,1,0,0)
|
||||
_NoiseIntensityRangeVec("_NoiseIntensity",Vector) = (0,1,0,0)
|
||||
_ScreenDistortIntensityRangeVec("_ScreenDistortIntensity",Vector) = (0,1,0,0)
|
||||
_ParallaxMapping_IntensityRangeVec("_ParallaxMappingRangeVec",Vector) = (0,0.1,0,0)
|
||||
// _offsetUnits("深度偏移单位距离-ignore", range(-2000,2000)) = 0
|
||||
}
|
||||
SubShader
|
||||
{
|
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Sphere" "CanUseSpriteAtlas"="True" }
|
||||
|
||||
Stencil
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
|
||||
//BlendOp[_BlendOp] //考虑注释~
|
||||
Blend[_SrcBlend][_DstBlend]
|
||||
ZWrite [_ZWrite]//粒子不写入深度缓冲
|
||||
ZTest[_ZTest]
|
||||
|
||||
ColorMask [_ColorMask]
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// 预渲染反面Pass,基本理念。先剔除正面棉片,渲染反面面片(一般在后),然后常规Pass再渲染正面(一般在前)
|
||||
// 这样可以应对大部分的特效半透明渲染的次序问题。
|
||||
// URP下的多Pass渲染,需要使用特定的LightModeTag:
|
||||
// https://zhuanlan.zhihu.com/p/469589277#:~:text=%E6%B3%A8%E6%84%8F%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%85%89%E7%85%A7pass%E7%9A%84%E5%85%89%E7%85%A7tag%E4%B8%BA%20%22LightMode%22%20%3D%20%22SRPDefaultUnlit%22%EF%BC%8C%E8%BF%99%E6%98%AF%E5%9B%A0%E4%B8%BA%E5%BF%85%E9%A1%BB%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%89%B9%E5%AE%9A%E7%9A%84%E5%87%A0%E4%B8%AALightMode%20%E6%89%8D%E8%83%BD%E6%AD%A3%E7%A1%AE%E8%A2%AB%E6%B8%B2%E6%9F%93%E3%80%82%E5%85%B7%E4%BD%93%E5%93%AA%E5%87%A0%E4%B8%AA%20LightMode%20%E8%A7%81URP%E5%8C%85%E9%87%8C%E7%9A%84%20Runtime/Passes%20%E9%87%8C%E7%9A%84%20DrawObjectsPass.cs%E8%84%9A%E6%9C%AC%EF%BC%8C%E9%87%8C%E9%9D%A2%E6%9C%89%E5%A6%82%E4%B8%8B%E4%BB%A3%E7%A0%81%EF%BC%9A
|
||||
// 开关Pass,同样也需要用到LightTag
|
||||
// https://blog.csdn.net/shaoy1234567/article/details/106494878
|
||||
|
||||
Pass
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"LightMode" = "SRPDefaultUnlit" "Queue"="Opaque"
|
||||
}
|
||||
offset [_offsetFactor], [_offsetUnits]
|
||||
Name "SRPDefaultUnlit"
|
||||
Cull Front
|
||||
|
||||
HLSLPROGRAM
|
||||
#define PARTICLE
|
||||
#if defined ( SHADER_API_GLES)||defined(SHADER_API_GLES3)
|
||||
#pragma target 3.0
|
||||
#else
|
||||
#pragma target 4.5
|
||||
#endif
|
||||
|
||||
|
||||
#pragma exclude_renderers d3d11_9x
|
||||
#pragma exclude_renderers d3d9
|
||||
|
||||
#pragma enable_d3d11_debug_symbols // 保留D3D11调试符号
|
||||
|
||||
// -------------------------------------
|
||||
// Material Keywords
|
||||
// #pragma shader_feature_local _ _SCREEN_DISTORT_MODE
|
||||
#pragma shader_feature_local _ _DISTORT_REFRACTION
|
||||
#pragma shader_feature_local _ _MASKMAP_ON
|
||||
// #pragma shader_feature_local _MASKMAP
|
||||
// #pragma shader_feature_local _MASKMAP2
|
||||
//#pragma shader_feature_local _NOISEMAP
|
||||
#pragma shader_feature_local _NOISEMAP
|
||||
//#pragma shader_feature_local _EMISSION //流光
|
||||
#pragma shader_feature_local _EMISSION
|
||||
//#pragma shader_feature_local _ _DISSOLVE //溶解
|
||||
#pragma shader_feature_local _DISSOLVE
|
||||
//后续Test类的关键字要找机会排除
|
||||
#pragma shader_feature_local _DISSOLVE_EDITOR_TEST
|
||||
#pragma shader_feature_local _COLORMAPBLEND//颜色渐变
|
||||
#pragma shader_feature_local _COLOR_RAMP//颜色映射
|
||||
|
||||
//将光照和UI混用,达到节省Keywords的目的。
|
||||
#pragma multi_compile _ UNITY_UI_CLIP_RECT _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS//UI 2D遮罩
|
||||
// #pragma multi_compile _ _UIPARTICLE_ON//用于UIParticle组件动态更改参数//暂时注释掉,觉得没什么意义
|
||||
#pragma multi_compile _ SOFT_UI_FRAME EVALUATE_SH_MIXED EVALUATE_SH_VERTEX//用于UI软蒙版
|
||||
|
||||
// #pragma shader_feature_local _PARCUSTOMDATA_ON
|
||||
|
||||
//用于特效层关键字
|
||||
// #pragma shader_feature_local _UIEFFECT_ON
|
||||
|
||||
#pragma shader_feature_local _ FRESNEL_CUBEMAP FRESNEL_REFLECTIONPROBE
|
||||
|
||||
|
||||
// -------------------------------------
|
||||
// Particle Keywords
|
||||
#pragma shader_feature_local _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON //设置alpah Add 。。组合
|
||||
#pragma shader_feature_local _ALPHATEST_ON
|
||||
//#pragma shader_feature_local _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON //粒子颜色和材质颜色的混合运算 暂时先不要了
|
||||
#pragma shader_feature_local _FLIPBOOKBLENDING_ON
|
||||
#pragma shader_feature_local _SOFTPARTICLES_ON
|
||||
// #pragma shader_feature_local _OCCLUDEOPACITY_ON
|
||||
// #pragma shader_feature_local _ _SATURABILITY_ON
|
||||
|
||||
//UnscaleTime用于接收项目传的公开不受缩放影响的Time值
|
||||
#pragma shader_feature_local _UNSCALETIME
|
||||
//scriptableTime用于程序每帧传值
|
||||
#pragma shader_feature_local _SCRIPTABLETIME
|
||||
//#pragma shader_feature_local _DISTORTION_ON
|
||||
#pragma shader_feature_local _NOISEMAP_NORMALIZEED
|
||||
|
||||
#pragma shader_feature_local _DEPTH_DECAL
|
||||
#pragma shader_feature_local _PARALLAX_MAPPING
|
||||
|
||||
#pragma shader_feature_local _STENCIL_WITHOUT_PLAYER
|
||||
|
||||
//LIGHTING
|
||||
#pragma shader_feature_local _FX_LIGHT_MODE_UNLIT _FX_LIGHT_MODE_BLINN_PHONG _FX_LIGHT_MODE_HALF_LAMBERT _FX_LIGHT_MODE_PBR _FX_LIGHT_MODE_SIX_WAY
|
||||
#pragma shader_feature_local _ _NORMALMAP
|
||||
#pragma shader_feature_local _ _MATCAP
|
||||
#pragma shader_feature_local _ _SPECULAR_COLOR
|
||||
#pragma shader_feature_local _ VFX_SIX_WAY_ABSORPTION
|
||||
|
||||
|
||||
// -------------------------------------
|
||||
// Unity defined keywords
|
||||
// 之后进行优化时再说。
|
||||
#pragma multi_compile_fog
|
||||
// #define FOG_EXP2 1
|
||||
|
||||
|
||||
// #if defined(_SOFTPARTICLES_ON)
|
||||
// #define NEED_EYE_DEPTH
|
||||
// #endif
|
||||
|
||||
#define PARTICLE_BACKFACE_PASS
|
||||
|
||||
#pragma vertex vertParticleUnlit
|
||||
#pragma fragment fragParticleUnlit
|
||||
|
||||
// #include "UnityCG.cginc"
|
||||
// #include "AutoLight.cginc"
|
||||
// #include "UnityUI.cginc"
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
|
||||
#include "Packages/com.xuanxuan.nb.fx/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl"
|
||||
|
||||
ENDHLSL
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Forward pass.
|
||||
Pass
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"LightMode" = "UniversalForward"
|
||||
} //Queue设置是希望特效渲染在场景透明物体前面
|
||||
offset [_offsetFactor], [_offsetUnits]
|
||||
Cull[_Cull]
|
||||
|
||||
HLSLPROGRAM
|
||||
#define PARTICLE
|
||||
//20240228 target3.0 顶点着色器限制16个输出。提高版本
|
||||
#if defined ( SHADER_API_GLES)||defined(SHADER_API_GLES3)
|
||||
#pragma target 3.0
|
||||
#else
|
||||
#pragma target 4.5
|
||||
#endif
|
||||
|
||||
// -------------------------------------
|
||||
// Material Keywords
|
||||
|
||||
#pragma enable_d3d11_debug_symbols // 保留D3D11调试符号
|
||||
|
||||
// #pragma shader_feature_local _ _SCREEN_DISTORT_MODE
|
||||
#pragma shader_feature_local _ _DISTORT_REFRACTION
|
||||
#pragma shader_feature_local _ _MASKMAP_ON
|
||||
// #pragma shader_feature_local _MASKMAP
|
||||
// #pragma shader_feature_local _MASKMAP2
|
||||
//#pragma shader_feature_local _NOISEMAP
|
||||
#pragma shader_feature_local _NOISEMAP
|
||||
//#pragma shader_feature_local _EMISSION //流光
|
||||
#pragma shader_feature_local _EMISSION
|
||||
//#pragma shader_feature_local _ _DISSOLVE //溶解
|
||||
#pragma shader_feature_local _DISSOLVE
|
||||
//后续Test类的关键字要找机会排除
|
||||
#pragma shader_feature_local _DISSOLVE_EDITOR_TEST
|
||||
#pragma shader_feature_local _COLORMAPBLEND//颜色渐变
|
||||
#pragma shader_feature_local _COLOR_RAMP//颜色映射
|
||||
|
||||
|
||||
|
||||
#pragma multi_compile_local _ UNITY_UI_CLIP_RECT _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS //UI 2D遮罩
|
||||
// #pragma shader_feature_local _PARCUSTOMDATA_ON
|
||||
|
||||
//用于特效层关键字
|
||||
// #pragma shader_feature_local _UIEFFECT_ON
|
||||
|
||||
#pragma shader_feature_local _ FRESNEL_CUBEMAP FRESNEL_REFLECTIONPROBE
|
||||
|
||||
|
||||
// #pragma multi_compile _ _UIPARTICLE_ON//用于UIParticle组件动态更改参数//暂时注释掉,觉得没什么意义
|
||||
#pragma multi_compile _ SOFT_UI_FRAME EVALUATE_SH_MIXED EVALUATE_SH_VERTEX//用于UI软蒙版
|
||||
// -------------------------------------
|
||||
// Particle Keywords
|
||||
#pragma shader_feature_local _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON //设置alpah Add 。。组合
|
||||
#pragma shader_feature_local _ALPHATEST_ON
|
||||
//#pragma shader_feature_local _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON //粒子颜色和材质颜色的混合运算 暂时先不要了
|
||||
#pragma shader_feature_local _FLIPBOOKBLENDING_ON
|
||||
#pragma shader_feature_local _SOFTPARTICLES_ON
|
||||
// #pragma shader_feature_local _OCCLUDEOPACITY_ON
|
||||
// #pragma shader_feature_local _ _SATURABILITY_ON
|
||||
|
||||
//UnscaleTime用于接收项目传的公开不受缩放影响的Time值
|
||||
#pragma shader_feature_local _UNSCALETIME
|
||||
//scriptableTime用于程序每帧传值
|
||||
#pragma shader_feature_local _SCRIPTABLETIME
|
||||
//#pragma shader_feature_local _DISTORTION_ON
|
||||
#pragma shader_feature_local _NOISEMAP_NORMALIZEED
|
||||
|
||||
#pragma shader_feature_local _DEPTH_DECAL
|
||||
#pragma shader_feature_local _PARALLAX_MAPPING
|
||||
|
||||
#pragma shader_feature_local _STENCIL_WITHOUT_PLAYER
|
||||
|
||||
//LIGHTING
|
||||
#pragma shader_feature_local _FX_LIGHT_MODE_UNLIT _FX_LIGHT_MODE_BLINN_PHONG _FX_LIGHT_MODE_HALF_LAMBERT _FX_LIGHT_MODE_PBR _FX_LIGHT_MODE_SIX_WAY
|
||||
#pragma shader_feature_local _ _NORMALMAP
|
||||
#pragma shader_feature_local _ _MATCAP
|
||||
#pragma shader_feature_local _ _SPECULAR_COLOR
|
||||
#pragma shader_feature_local _ VFX_SIX_WAY_ABSORPTION
|
||||
|
||||
// -------------------------------------
|
||||
// Unity defined keywords
|
||||
// 之后进行优化时再说。
|
||||
#pragma multi_compile_fog
|
||||
// #define FOG_EXP2 1
|
||||
|
||||
#pragma vertex vertParticleUnlit
|
||||
#pragma fragment fragParticleUnlit
|
||||
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
// The DeclareDepthTexture.hlsl file contains utilities for sampling the Camera
|
||||
// depth texture.
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
#include "Packages/com.xuanxuan.nb.fx/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl"
|
||||
|
||||
|
||||
ENDHLSL
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Distort pass.
|
||||
Pass
|
||||
{
|
||||
Tags{
|
||||
"LightMode" = "NBCameraOpaqueDistortPass"
|
||||
} //Queue设置是希望特效渲染在场景透明物体前面
|
||||
offset [_offsetFactor], [_offsetUnits]
|
||||
Cull[_Cull]
|
||||
|
||||
HLSLPROGRAM
|
||||
#define PARTICLE
|
||||
//20240228 target3.0 顶点着色器限制16个输出。提高版本
|
||||
#if defined ( SHADER_API_GLES)||defined(SHADER_API_GLES3)
|
||||
#pragma target 3.0
|
||||
#else
|
||||
#pragma target 4.5
|
||||
#endif
|
||||
|
||||
// -------------------------------------
|
||||
// Material Keywords
|
||||
|
||||
#pragma enable_d3d11_debug_symbols // 保留D3D11调试符号
|
||||
|
||||
#define _SCREEN_DISTORT_MODE
|
||||
#define _CAMERA_OPAQUE_DISTORT_PASS
|
||||
#pragma shader_feature_local _ _DISTORT_REFRACTION
|
||||
#pragma shader_feature_local _ _MASKMAP_ON
|
||||
// #pragma shader_feature_local _MASKMAP
|
||||
// #pragma shader_feature_local _MASKMAP2
|
||||
//#pragma shader_feature_local _NOISEMAP
|
||||
#pragma shader_feature_local _NOISEMAP
|
||||
//#pragma shader_feature_local _EMISSION //流光
|
||||
// #pragma shader_feature_local _EMISSION
|
||||
//#pragma shader_feature_local _ _DISSOLVE //溶解
|
||||
#pragma shader_feature_local _DISSOLVE
|
||||
//后续Test类的关键字要找机会排除
|
||||
#pragma shader_feature_local _DISSOLVE_EDITOR_TEST
|
||||
// #pragma shader_feature_local _COLORMAPBLEND//颜色渐变
|
||||
// #pragma shader_feature_local _COLOR_RAMP//颜色映射
|
||||
|
||||
|
||||
|
||||
// #pragma multi_compile_local _ UNITY_UI_CLIP_RECT _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS //UI 2D遮罩
|
||||
// #pragma shader_feature_local _PARCUSTOMDATA_ON
|
||||
|
||||
//用于特效层关键字
|
||||
// #pragma shader_feature_local _UIEFFECT_ON
|
||||
|
||||
#pragma shader_feature_local _ FRESNEL_CUBEMAP FRESNEL_REFLECTIONPROBE
|
||||
|
||||
|
||||
// #pragma multi_compile _ _UIPARTICLE_ON//用于UIParticle组件动态更改参数//暂时注释掉,觉得没什么意义
|
||||
#pragma multi_compile _ SOFT_UI_FRAME EVALUATE_SH_MIXED EVALUATE_SH_VERTEX//用于UI软蒙版
|
||||
// -------------------------------------
|
||||
// Particle Keywords
|
||||
#pragma shader_feature_local _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON //设置alpah Add 。。组合
|
||||
#pragma shader_feature_local _ALPHATEST_ON
|
||||
//#pragma shader_feature_local _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON //粒子颜色和材质颜色的混合运算 暂时先不要了
|
||||
#pragma shader_feature_local _FLIPBOOKBLENDING_ON
|
||||
#pragma shader_feature_local _SOFTPARTICLES_ON
|
||||
// #pragma shader_feature_local _OCCLUDEOPACITY_ON
|
||||
// #pragma shader_feature_local _ _SATURABILITY_ON
|
||||
|
||||
//UnscaleTime用于接收项目传的公开不受缩放影响的Time值
|
||||
#pragma shader_feature_local _UNSCALETIME
|
||||
//scriptableTime用于程序每帧传值
|
||||
#pragma shader_feature_local _SCRIPTABLETIME
|
||||
//#pragma shader_feature_local _DISTORTION_ON
|
||||
#pragma shader_feature_local _NOISEMAP_NORMALIZEED
|
||||
|
||||
#pragma shader_feature_local _DEPTH_DECAL
|
||||
// #pragma shader_feature_local _PARALLAX_MAPPING
|
||||
|
||||
#pragma shader_feature_local _STENCIL_WITHOUT_PLAYER
|
||||
|
||||
//LIGHTING
|
||||
// #pragma shader_feature_local _FX_LIGHT_MODE_UNLIT _FX_LIGHT_MODE_BLINN_PHONG _FX_LIGHT_MODE_HALF_LAMBERT _FX_LIGHT_MODE_PBR _FX_LIGHT_MODE_SIX_WAY
|
||||
#pragma shader_feature_local _ _NORMALMAP
|
||||
// #pragma shader_feature_local _ _MATCAP
|
||||
// #pragma shader_feature_local _ _SPECULAR_COLOR
|
||||
// #pragma shader_feature_local _ VFX_SIX_WAY_ABSORPTION
|
||||
|
||||
// -------------------------------------
|
||||
// Unity defined keywords
|
||||
// 之后进行优化时再说。
|
||||
#pragma multi_compile_fog
|
||||
// #define FOG_EXP2 1
|
||||
|
||||
#pragma vertex vertParticleUnlit
|
||||
#pragma fragment fragParticleUnlit
|
||||
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
// The DeclareDepthTexture.hlsl file contains utilities for sampling the Camera
|
||||
// depth texture.
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
#include "Packages/com.xuanxuan.nb.fx/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl"
|
||||
|
||||
|
||||
ENDHLSL
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Distort pass.
|
||||
Pass
|
||||
{
|
||||
Tags{
|
||||
"LightMode" = "NBDeferredDistortPass"
|
||||
} //Queue设置是希望特效渲染在场景透明物体前面
|
||||
offset [_offsetFactor], [_offsetUnits]
|
||||
Cull[_Cull]
|
||||
|
||||
HLSLPROGRAM
|
||||
#define PARTICLE
|
||||
//20240228 target3.0 顶点着色器限制16个输出。提高版本
|
||||
#if defined ( SHADER_API_GLES)||defined(SHADER_API_GLES3)
|
||||
#pragma target 3.0
|
||||
#else
|
||||
#pragma target 4.5
|
||||
#endif
|
||||
|
||||
// -------------------------------------
|
||||
// Material Keywords
|
||||
|
||||
#pragma enable_d3d11_debug_symbols // 保留D3D11调试符号
|
||||
|
||||
#define _SCREEN_DISTORT_MODE
|
||||
#define _DEFERRED_DISTORT_PASS
|
||||
#pragma shader_feature_local _ _DISTORT_REFRACTION
|
||||
|
||||
#pragma shader_feature_local _ _MASKMAP_ON
|
||||
// #pragma shader_feature_local _MASKMAP
|
||||
// #pragma shader_feature_local _MASKMAP2
|
||||
//#pragma shader_feature_local _NOISEMAP
|
||||
#pragma shader_feature_local _NOISEMAP
|
||||
//#pragma shader_feature_local _EMISSION //流光
|
||||
// #pragma shader_feature_local _EMISSION
|
||||
//#pragma shader_feature_local _ _DISSOLVE //溶解
|
||||
#pragma shader_feature_local _DISSOLVE
|
||||
//后续Test类的关键字要找机会排除
|
||||
#pragma shader_feature_local _DISSOLVE_EDITOR_TEST
|
||||
// #pragma shader_feature_local _COLORMAPBLEND//颜色渐变
|
||||
// #pragma shader_feature_local _COLOR_RAMP//颜色映射
|
||||
|
||||
|
||||
|
||||
// #pragma multi_compile_local _ UNITY_UI_CLIP_RECT _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS //UI 2D遮罩
|
||||
// #pragma shader_feature_local _PARCUSTOMDATA_ON
|
||||
|
||||
//用于特效层关键字
|
||||
// #pragma shader_feature_local _UIEFFECT_ON
|
||||
|
||||
#pragma shader_feature_local _ FRESNEL_CUBEMAP FRESNEL_REFLECTIONPROBE
|
||||
|
||||
|
||||
// #pragma multi_compile _ _UIPARTICLE_ON//用于UIParticle组件动态更改参数//暂时注释掉,觉得没什么意义
|
||||
#pragma multi_compile _ SOFT_UI_FRAME EVALUATE_SH_MIXED EVALUATE_SH_VERTEX//用于UI软蒙版
|
||||
// -------------------------------------
|
||||
// Particle Keywords
|
||||
#pragma shader_feature_local _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON //设置alpah Add 。。组合
|
||||
#pragma shader_feature_local _ALPHATEST_ON
|
||||
//#pragma shader_feature_local _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON //粒子颜色和材质颜色的混合运算 暂时先不要了
|
||||
#pragma shader_feature_local _FLIPBOOKBLENDING_ON
|
||||
#pragma shader_feature_local _SOFTPARTICLES_ON
|
||||
// #pragma shader_feature_local _OCCLUDEOPACITY_ON
|
||||
// #pragma shader_feature_local _ _SATURABILITY_ON
|
||||
|
||||
//UnscaleTime用于接收项目传的公开不受缩放影响的Time值
|
||||
#pragma shader_feature_local _UNSCALETIME
|
||||
//scriptableTime用于程序每帧传值
|
||||
#pragma shader_feature_local _SCRIPTABLETIME
|
||||
//#pragma shader_feature_local _DISTORTION_ON
|
||||
#pragma shader_feature_local _NOISEMAP_NORMALIZEED
|
||||
|
||||
#pragma shader_feature_local _DEPTH_DECAL
|
||||
// #pragma shader_feature_local _PARALLAX_MAPPING
|
||||
|
||||
#pragma shader_feature_local _STENCIL_WITHOUT_PLAYER
|
||||
|
||||
//LIGHTING
|
||||
// #pragma shader_feature_local _FX_LIGHT_MODE_UNLIT _FX_LIGHT_MODE_BLINN_PHONG _FX_LIGHT_MODE_HALF_LAMBERT _FX_LIGHT_MODE_PBR _FX_LIGHT_MODE_SIX_WAY
|
||||
#pragma shader_feature_local _ _NORMALMAP
|
||||
// #pragma shader_feature_local _ _MATCAP
|
||||
// #pragma shader_feature_local _ _SPECULAR_COLOR
|
||||
// #pragma shader_feature_local _ VFX_SIX_WAY_ABSORPTION
|
||||
|
||||
// -------------------------------------
|
||||
// Unity defined keywords
|
||||
// 之后进行优化时再说。
|
||||
#pragma multi_compile_fog
|
||||
// #define FOG_EXP2 1
|
||||
|
||||
#pragma vertex vertParticleUnlit
|
||||
#pragma fragment fragParticleUnlit
|
||||
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
// The DeclareDepthTexture.hlsl file contains utilities for sampling the Camera
|
||||
// depth texture.
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
#include "Packages/com.xuanxuan.nb.fx/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl"
|
||||
|
||||
|
||||
ENDHLSL
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Forward pass.
|
||||
Pass
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"LightMode" = "Universal2D"
|
||||
} //Queue设置是希望特效渲染在场景透明物体前面
|
||||
offset [_offsetFactor], [_offsetUnits]
|
||||
Cull[_Cull]
|
||||
|
||||
HLSLPROGRAM
|
||||
#define PARTICLE
|
||||
//20240228 target3.0 顶点着色器限制16个输出。提高版本
|
||||
#if defined ( SHADER_API_GLES)||defined(SHADER_API_GLES3)
|
||||
#pragma target 3.0
|
||||
#else
|
||||
#pragma target 4.5
|
||||
#endif
|
||||
|
||||
// -------------------------------------
|
||||
// Material Keywords
|
||||
|
||||
#pragma enable_d3d11_debug_symbols // 保留D3D11调试符号
|
||||
|
||||
#pragma shader_feature_local _ _SCREEN_DISTORT_MODE
|
||||
#pragma shader_feature_local _ _MASKMAP_ON
|
||||
// #pragma shader_feature_local _MASKMAP
|
||||
// #pragma shader_feature_local _MASKMAP2
|
||||
//#pragma shader_feature_local _NOISEMAP
|
||||
#pragma shader_feature_local _NOISEMAP
|
||||
//#pragma shader_feature_local _EMISSION //流光
|
||||
#pragma shader_feature_local _EMISSION
|
||||
//#pragma shader_feature_local _ _DISSOLVE //溶解
|
||||
#pragma shader_feature_local _DISSOLVE
|
||||
//后续Test类的关键字要找机会排除
|
||||
#pragma shader_feature_local _DISSOLVE_EDITOR_TEST
|
||||
#pragma shader_feature_local _COLORMAPBLEND//颜色渐变
|
||||
#pragma shader_feature_local _COLOR_RAMP//颜色映射
|
||||
|
||||
|
||||
|
||||
#pragma multi_compile_local _ UNITY_UI_CLIP_RECT _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS //UI 2D遮罩
|
||||
// #pragma shader_feature_local _ _CH_XIANXING _CH_JINGXIANG _CH_SELF //线性擦除 径向擦除 mask擦除
|
||||
#pragma shader_feature_local _PARCUSTOMDATA_ON
|
||||
|
||||
//用于特效层关键字
|
||||
// #pragma shader_feature_local _UIEFFECT_ON
|
||||
|
||||
#pragma shader_feature_local _ FRESNEL_CUBEMAP FRESNEL_REFLECTIONPROBE
|
||||
|
||||
|
||||
// #pragma multi_compile _ _UIPARTICLE_ON//用于UIParticle组件动态更改参数//暂时注释掉,觉得没什么意义
|
||||
#pragma multi_compile _ SOFT_UI_FRAME EVALUATE_SH_MIXED EVALUATE_SH_VERTEX//用于UI软蒙版
|
||||
// -------------------------------------
|
||||
// Particle Keywords
|
||||
#pragma shader_feature_local _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON //设置alpah Add 。。组合
|
||||
#pragma shader_feature_local _ALPHATEST_ON
|
||||
//#pragma shader_feature_local _ _COLOROVERLAY_ON _COLORCOLOR_ON _COLORADDSUBDIFF_ON //粒子颜色和材质颜色的混合运算 暂时先不要了
|
||||
#pragma shader_feature_local _FLIPBOOKBLENDING_ON
|
||||
// #pragma shader_feature_local _SOFTPARTICLES_ON
|
||||
// #pragma shader_feature_local _OCCLUDEOPACITY_ON
|
||||
// #pragma shader_feature_local _ _SATURABILITY_ON
|
||||
|
||||
//UnscaleTime用于接收项目传的公开不受缩放影响的Time值
|
||||
#pragma shader_feature_local _UNSCALETIME
|
||||
//scriptableTime用于程序每帧传值
|
||||
#pragma shader_feature_local _SCRIPTABLETIME
|
||||
//#pragma shader_feature_local _DISTORTION_ON
|
||||
#pragma shader_feature_local _NOISEMAP_NORMALIZEED
|
||||
|
||||
// #pragma shader_feature_local _DEPTH_DECAL
|
||||
// #pragma shader_feature_local _PARALLAX_MAPPING
|
||||
|
||||
#pragma shader_feature_local _STENCIL_WITHOUT_PLAYER
|
||||
|
||||
//LIGHTING
|
||||
// #pragma shader_feature_local _FX_LIGHT_MODE_UNLIT _FX_LIGHT_MODE_BLINN_PHONG _FX_LIGHT_MODE_HALF_LAMBERT _FX_LIGHT_MODE_PBR _FX_LIGHT_MODE_SIX_WAY
|
||||
#pragma shader_feature_local _ _NORMALMAP
|
||||
// #pragma shader_feature_local _ _MATCAP
|
||||
// #pragma shader_feature_local _ _SPECULAR_COLOR
|
||||
// #pragma shader_feature_local _ VFX_SIX_WAY_ABSORPTION
|
||||
|
||||
// -------------------------------------
|
||||
// Unity defined keywords
|
||||
// 之后进行优化时再说。
|
||||
#pragma multi_compile_fog
|
||||
// #define FOG_EXP2 1
|
||||
|
||||
#pragma vertex vertParticleUnlit
|
||||
#pragma fragment fragParticleUnlit
|
||||
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
// The DeclareDepthTexture.hlsl file contains utilities for sampling the Camera
|
||||
// depth texture.
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||
|
||||
#include "../../XuanXuanRenderUtility/Shader/HLSL/XuanXuan_Utility.hlsl"
|
||||
|
||||
#include "Packages/com.xuanxuan.nb.fx/NBShaders/Shader/HLSL/ParticlesUnlitForwardPassNew.hlsl"
|
||||
|
||||
|
||||
ENDHLSL
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
CustomEditor "NBShaderEditor.NBShaderGUI"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user