Skip to content

Commit

Permalink
Fix ViewDir with vertex light calculations and add blend mode overrid…
Browse files Browse the repository at this point in the history
…e checkbox
  • Loading branch information
Xiexe committed Jul 14, 2021
1 parent 75b6b93 commit 37de03a
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 69 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ Main/Patreon.meta
Main/Plugins/Patreon/
Main/Plugins/Patreon.meta
Main/Plugins/*.zip
Main/Plugins/*.zip.meta
Main/Plugins/*.zip.meta
Main/Plugins/RDPS/
135 changes: 68 additions & 67 deletions Editor/XSToonInspector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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");
Expand Down Expand Up @@ -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);

Expand All @@ -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;
}
}

Expand All @@ -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)
Expand Down Expand Up @@ -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", ""));
Expand Down
2 changes: 1 addition & 1 deletion Main/CGIncludes/XSLighting.cginc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions Main/Plugins/RDPS.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 37de03a

Please sign in to comment.