diff --git a/.gitignore b/.gitignore index 24b5f2d..3b6f9d5 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ Main/Patreon.meta Main/Plugins/Patreon/ Main/Plugins/Patreon.meta Main/Plugins/*.zip -Main/Plugins/*.zip.meta \ No newline at end of file +Main/Plugins/*.zip.meta +Main/Plugins/RDPS/ \ No newline at end of file diff --git a/Editor/XSToonInspector.cs b/Editor/XSToonInspector.cs index 23b2345..7bd9776 100644 --- a/Editor/XSToonInspector.cs +++ b/Editor/XSToonInspector.cs @@ -218,6 +218,7 @@ public class XSToonInspector : ShaderGUI //!RDPSPropsInjection + private static bool OverrideRenderSettings = false; protected static int BlendMode; protected bool isPatreonShader = false; protected bool isEyeTracking = false; @@ -233,9 +234,10 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro Material material = materialEditor.target as Material; Shader shader = material.shader; - isCutout = material.GetInt("_BlendMode") == 1; - isDithered = material.GetInt("_BlendMode") == 2; - isA2C = material.GetInt("_BlendMode") == 3; + BlendMode = material.GetInt("_BlendMode"); + isCutout = BlendMode == 1; + isDithered = BlendMode == 2; + isA2C = BlendMode == 3; isOutlined = shader.name.Contains("Outline"); isPatreonShader = shader.name.Contains("Patreon"); isEyeTracking = shader.name.Contains("EyeTracking"); @@ -285,9 +287,9 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro DrawRimlightSettings(materialEditor, material); DrawHalfToneSettings(materialEditor, material); DrawTransmissionSettings(materialEditor, material); - + PluginGUI(materialEditor, material); - + DrawAdvancedSettings(materialEditor, material); DrawPatreonSettings(materialEditor, material); @@ -310,70 +312,66 @@ private void SetupFoldoutDictionary(Material material) private void DoBlendModeSettings(Material material) { - int currentBlendMode = material.GetInt("_BlendMode"); - //!RDPSBlendModeInjection + if (OverrideRenderSettings) + return; - if (BlendMode != currentBlendMode) + switch (BlendMode) { - BlendMode = currentBlendMode; - switch (BlendMode) - { - case 0: //Opaque - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.Zero, - (int) UnityEngine.Rendering.RenderQueue.Geometry, 1, 0); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHATEST_ON"); - break; - - case 1: //Cutout - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.Zero, - (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 0); - material.DisableKeyword("_ALPHABLEND_ON"); - material.EnableKeyword("_ALPHATEST_ON"); - break; - - case 2: //Dithered - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.Zero, - (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 0); - material.DisableKeyword("_ALPHABLEND_ON"); - material.EnableKeyword("_ALPHATEST_ON"); - break; - - case 3: //Alpha To Coverage - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.Zero, - (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 1); - material.EnableKeyword("_ALPHABLEND_ON"); - material.EnableKeyword("_ALPHATEST_ON"); - break; - - case 4: //Transparent - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha, - (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); - material.EnableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHATEST_ON"); - break; - - case 5: //Fade - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.SrcAlpha, - (int) UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha, - (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); - material.EnableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHATEST_ON"); - break; - - case 6: //Additive - SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.BlendMode.One, - (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHATEST_ON"); - break; - } + case 0: //Opaque + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.Zero, + (int) UnityEngine.Rendering.RenderQueue.Geometry, 1, 0); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHATEST_ON"); + break; + + case 1: //Cutout + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.Zero, + (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 0); + material.DisableKeyword("_ALPHABLEND_ON"); + material.EnableKeyword("_ALPHATEST_ON"); + break; + + case 2: //Dithered + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.Zero, + (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 0); + material.DisableKeyword("_ALPHABLEND_ON"); + material.EnableKeyword("_ALPHATEST_ON"); + break; + + case 3: //Alpha To Coverage + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.Zero, + (int) UnityEngine.Rendering.RenderQueue.AlphaTest, 1, 1); + material.EnableKeyword("_ALPHABLEND_ON"); + material.EnableKeyword("_ALPHATEST_ON"); + break; + + case 4: //Transparent + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha, + (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); + material.EnableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHATEST_ON"); + break; + + case 5: //Fade + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.SrcAlpha, + (int) UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha, + (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); + material.EnableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHATEST_ON"); + break; + + case 6: //Additive + SetBlend(material, (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.BlendMode.One, + (int) UnityEngine.Rendering.RenderQueue.Transparent, 0, 0); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHATEST_ON"); + break; } } @@ -383,6 +381,7 @@ private void SetBlend(Material material, int src, int dst, int renderQueue, int material.SetInt("_DstBlend", dst); material.SetInt("_ZWrite", zwrite); material.SetInt("_AlphaToMask", alphatocoverage); + material.renderQueue = renderQueue; } private void DrawMainSettings(MaterialEditor materialEditor, Material material) @@ -769,6 +768,8 @@ private void DrawAdvancedSettings(MaterialEditor materialEditor, Material materi materialEditor.ShaderProperty(_StencilOp, _StencilOp.displayName); XSStyles.Separator(); + OverrideRenderSettings = EditorGUILayout.Toggle(new GUIContent("Override Render Settings", "Allows manual control over all render settings (Queue, ZWrite, Etc.)"), OverrideRenderSettings); + materialEditor.ShaderProperty(_SrcBlend, new GUIContent("SrcBlend", "")); materialEditor.ShaderProperty(_DstBlend, new GUIContent("DstBlend", "")); materialEditor.ShaderProperty(_ZWrite, new GUIContent("ZWrite", "")); diff --git a/Main/CGIncludes/XSLighting.cginc b/Main/CGIncludes/XSLighting.cginc index f28c998..e3d6563 100644 --- a/Main/CGIncludes/XSLighting.cginc +++ b/Main/CGIncludes/XSLighting.cginc @@ -35,7 +35,7 @@ half4 BRDF_XSLighting(HookData data) vertexLightDiffuse = getVertexLightsDiffuse(i, vLight); indirectDiffuse += vertexLightDiffuse; - vertexLightSpec = getVertexLightSpecular(i, d, vLight, i.normal, viewDir, _AnisotropicSpecular) * occlusion; + vertexLightSpec = getVertexLightSpecular(i, d, vLight, i.normal, dirs.viewDir, _AnisotropicSpecular) * occlusion; #endif half lightAvg = (dot(indirectDiffuse.rgb, grayscaleVec) + dot(lightCol.rgb, grayscaleVec)) / 2; diff --git a/Main/Plugins/RDPS.meta b/Main/Plugins/RDPS.meta new file mode 100644 index 0000000..5220cc5 --- /dev/null +++ b/Main/Plugins/RDPS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6e841e7c5c33334ebdba5ab1a26f33d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: