515 lines
31 KiB
C#
515 lines
31 KiB
C#
#if !LILTOON_VRCSDK3_AVATARS && !LILTOON_VRCSDK3_WORLDS && VRC_SDK_VRCSDK3
|
|
#if UDON
|
|
#define LILTOON_VRCSDK3_WORLDS
|
|
#else
|
|
#define LILTOON_VRCSDK3_AVATARS
|
|
#endif
|
|
#endif
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Reflection;
|
|
|
|
using Object = UnityEngine.Object;
|
|
|
|
namespace lilToon
|
|
{
|
|
public partial class lilToonInspector
|
|
{
|
|
|
|
private void DrawRenderingModeSettings(Material material, string sTransparentMode, string[] sRenderingModeList, string[] sRenderingModeListLite)
|
|
{
|
|
if(isMultiVariants)
|
|
{
|
|
GUI.enabled = false;
|
|
EditorGUI.showMixedValue = true;
|
|
lilEditorGUI.Popup(GetLoc("sRenderingMode"), (int)renderingModeBuf, sRenderingModeList);
|
|
EditorGUI.showMixedValue = false;
|
|
GUI.enabled = true;
|
|
}
|
|
else
|
|
{
|
|
if(isShowRenderMode && !isMulti)
|
|
{
|
|
RenderingMode renderingMode;
|
|
if(isLite) renderingMode = (RenderingMode)lilEditorGUI.Popup(GetLoc("sRenderingMode"), (int)renderingModeBuf, sRenderingModeListLite);
|
|
else renderingMode = (RenderingMode)lilEditorGUI.Popup(GetLoc("sRenderingMode"), (int)renderingModeBuf, sRenderingModeList);
|
|
if(renderingModeBuf != renderingMode)
|
|
{
|
|
SetupMaterialWithRenderingMode(renderingMode, transparentModeBuf);
|
|
if(renderingMode == RenderingMode.Cutout || renderingMode == RenderingMode.FurCutout) cutoff.floatValue = 0.5f;
|
|
if(renderingMode == RenderingMode.Transparent || renderingMode == RenderingMode.Fur || renderingMode == RenderingMode.FurTwoPass) cutoff.floatValue = 0.001f;
|
|
if(transparentModeBuf == TransparentMode.TwoPass)
|
|
{
|
|
preCutoff.floatValue = 0.001f;
|
|
cull.floatValue = 2.0f;
|
|
preCull.floatValue = 1.0f;
|
|
}
|
|
}
|
|
}
|
|
else if(isShowRenderMode && isMulti)
|
|
{
|
|
float transparentModeMatBuf = transparentModeMat.floatValue;
|
|
m_MaterialEditor.ShaderProperty(transparentModeMat, sTransparentMode);
|
|
if(transparentModeMatBuf != transparentModeMat.floatValue)
|
|
{
|
|
SetupMaterialWithRenderingMode(renderingModeBuf, transparentModeBuf);
|
|
if(transparentModeMat.floatValue == 1.0f || transparentModeMat.floatValue == 5.0f) cutoff.floatValue = 0.5f;
|
|
if(transparentModeMat.floatValue == 2.0f || transparentModeMat.floatValue == 4.0f) cutoff.floatValue = 0.001f;
|
|
}
|
|
}
|
|
if(renderingModeBuf == RenderingMode.Transparent)
|
|
{
|
|
var transparentMode = (TransparentMode)lilEditorGUI.Popup(GetLoc("sTransparentMode"), (int)transparentModeBuf, sTransparentModeList);
|
|
if(transparentModeBuf != transparentMode)
|
|
{
|
|
SetupMaterialWithRenderingMode(renderingModeBuf, transparentMode);
|
|
}
|
|
if(transparentModeBuf == TransparentMode.OnePass && vertexLightStrength.floatValue != 1.0f && lilRenderPipelineReader.GetRP() == lilRenderPipeline.BRP && lilEditorGUI.AutoFixHelpBox(GetLoc("sHelpOnePassVertexLight")))
|
|
{
|
|
vertexLightStrength.floatValue = 1.0f;
|
|
}
|
|
}
|
|
if(renderingModeBuf == RenderingMode.Fur || renderingModeBuf == RenderingMode.FurCutout || renderingModeBuf == RenderingMode.FurTwoPass)
|
|
{
|
|
EditorGUILayout.HelpBox(GetLoc("sHelpRenderingFur"), MessageType.Warning);
|
|
}
|
|
if(lilDirectoryManager.ExistsClusterCreatorKit())
|
|
{
|
|
if(renderingModeBuf == RenderingMode.Refraction || renderingModeBuf == RenderingMode.RefractionBlur || renderingModeBuf == RenderingMode.Gem)
|
|
{
|
|
EditorGUILayout.HelpBox(GetLoc("sHelpGrabPass"), MessageType.Warning);
|
|
}
|
|
if(renderingModeBuf == RenderingMode.Fur || renderingModeBuf == RenderingMode.FurCutout || renderingModeBuf == RenderingMode.FurTwoPass)
|
|
{
|
|
EditorGUILayout.HelpBox(GetLoc("sHelpGeometryShader"), MessageType.Warning);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void DrawBaseSettings(Material material, string sTransparentMode, string[] sRenderingModeList, string[] sRenderingModeListLite, string[] sTransparentModeList)
|
|
{
|
|
DrawRenderingModeSettings(material, sTransparentMode, sRenderingModeList, sRenderingModeListLite);
|
|
|
|
if(!ShouldDrawBlock(PropertyBlock.Base)) return;
|
|
|
|
EditorGUILayout.Space();
|
|
GUILayout.Label(GetLoc("sBaseSetting"), boldLabel);
|
|
|
|
edSet.isShowBase = lilEditorGUI.Foldout(GetLoc("sBaseSetting"), edSet.isShowBase);
|
|
DrawMenuButton(GetLoc("sAnchorBaseSetting"), PropertyBlock.Base);
|
|
if(edSet.isShowBase)
|
|
{
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
if(isMulti)
|
|
{
|
|
LocalizedProperty(asOverlay);
|
|
}
|
|
if(isUseAlpha)
|
|
{
|
|
LocalizedProperty(cutoff);
|
|
}
|
|
if(!isGem && !isFakeShadow)
|
|
{
|
|
LocalizedProperty(cull);
|
|
EditorGUI.indentLevel++;
|
|
if(cull.floatValue == 1.0f && lilEditorGUI.AutoFixHelpBox(GetLoc("sHelpCullMode")))
|
|
{
|
|
cull.floatValue = 2.0f;
|
|
}
|
|
if(cull.floatValue <= 1.0f || transparentModeBuf == TransparentMode.TwoPass && preCull.floatValue <= 1.0f)
|
|
{
|
|
LocalizedProperty(flipNormal);
|
|
LocalizedProperty(backfaceForceShadow);
|
|
if(!isLite)
|
|
{
|
|
LocalizedPropertyColorWithAlpha(backfaceColor);
|
|
}
|
|
}
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
LocalizedProperty(invisible);
|
|
LocalizedProperty(zwrite);
|
|
if(zwrite.floatValue != 1.0f && !isGem && lilEditorGUI.AutoFixHelpBox(GetLoc("sHelpZWrite")))
|
|
{
|
|
zwrite.floatValue = 1.0f;
|
|
}
|
|
if(isMulti) LocalizedProperty(useClippingCanceller);
|
|
if(!isFakeShadow) LocalizedProperty(aaStrength);
|
|
if(!isFakeShadow && renderingModeBuf == RenderingMode.Cutout || (isMulti && transparentModeMat.floatValue == 1.0f))
|
|
{
|
|
LocalizedProperty(useDither);
|
|
if(lilEditorGUI.CheckPropertyToDraw(ditherTex, ditherMaxValue) && useDither.floatValue == 1.0f)
|
|
{
|
|
EditorGUI.indentLevel++;
|
|
EditorGUI.BeginChangeCheck();
|
|
LocalizedPropertyTexture(ditherContent, ditherTex);
|
|
if(EditorGUI.EndChangeCheck() && ditherTex.textureValue != null)
|
|
{
|
|
ditherMaxValue.floatValue = Mathf.Clamp(ditherTex.textureValue.width * ditherTex.textureValue.height-1, 0, 255);
|
|
}
|
|
LocalizedProperty(ditherMaxValue);
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Space(16);
|
|
if(GUILayout.Button("x2" )){ditherTex.textureValue = AssetDatabase.LoadAssetAtPath<Texture2D>(lilDirectoryManager.GetMainFolderPath() + "/Texture/lil_bayer_2x2.png"); ditherMaxValue.floatValue = 3 ;}
|
|
if(GUILayout.Button("x4" )){ditherTex.textureValue = AssetDatabase.LoadAssetAtPath<Texture2D>(lilDirectoryManager.GetMainFolderPath() + "/Texture/lil_bayer_4x4.png"); ditherMaxValue.floatValue = 15 ;}
|
|
if(GUILayout.Button("x8" )){ditherTex.textureValue = AssetDatabase.LoadAssetAtPath<Texture2D>(lilDirectoryManager.GetMainFolderPath() + "/Texture/lil_bayer_8x8.png"); ditherMaxValue.floatValue = 63 ;}
|
|
if(GUILayout.Button("x16")){ditherTex.textureValue = AssetDatabase.LoadAssetAtPath<Texture2D>(lilDirectoryManager.GetMainFolderPath() + "/Texture/lil_bayer_16x16.png"); ditherMaxValue.floatValue = 255;}
|
|
EditorGUILayout.EndHorizontal();
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
}
|
|
RenderQueueField();
|
|
if((renderingModeBuf >= RenderingMode.Transparent && renderingModeBuf != RenderingMode.FurCutout) || (isMulti && transparentModeMat.floatValue == 2.0f))
|
|
{
|
|
#if LILTOON_VRCSDK3_WORLDS
|
|
if(material.renderQueue <= 2999 && zwrite.floatValue == 1.0f)
|
|
{
|
|
EditorGUILayout.HelpBox(GetLoc("sHelpTransparentForWorld"),MessageType.Warning);
|
|
}
|
|
#else
|
|
EditorGUILayout.HelpBox(GetLoc("sHelpRenderingTransparent"),MessageType.Warning);
|
|
#endif
|
|
}
|
|
if(isLite)
|
|
{
|
|
lilEditorGUI.DrawLine();
|
|
LocalizedPropertyTexture(triMaskContent, triMask);
|
|
}
|
|
EditorGUILayout.EndVertical();
|
|
|
|
if(transparentModeBuf == TransparentMode.TwoPass)
|
|
{
|
|
EditorGUILayout.LabelField("PrePass");
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
LocalizedProperty(preOutType);
|
|
|
|
int preBlendMode = -1;
|
|
if(preSrcBlend.floatValue == 1.0f && preDstBlend.floatValue == 10.0f) preBlendMode = 0; // Normal
|
|
if(preSrcBlend.floatValue == 1.0f && preDstBlend.floatValue == 1.0f) preBlendMode = 1; // Add
|
|
if(preSrcBlend.floatValue == 1.0f && preDstBlend.floatValue == 6.0f) preBlendMode = 2; // Screen
|
|
if(preSrcBlend.floatValue == 0.0f && preDstBlend.floatValue == 3.0f) preBlendMode = 3; // Mul
|
|
EditorGUI.BeginChangeCheck();
|
|
preBlendMode = lilEditorGUI.Popup(Event.current.alt ? preSrcBlend.name + ", " + preDstBlend.name : GetLoc("sBlendMode"), preBlendMode, sBlendModeList);
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
switch(preBlendMode)
|
|
{
|
|
case 0:
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 10.0f;
|
|
break;
|
|
case 1:
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 1.0f;
|
|
break;
|
|
case 2:
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 6.0f;
|
|
break;
|
|
case 3:
|
|
preSrcBlend.floatValue = 0.0f;
|
|
preDstBlend.floatValue = 3.0f;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
LocalizedProperty(preCull);
|
|
LocalizedProperty(preZwrite);
|
|
LocalizedPropertyColorWithAlpha(preColor);
|
|
LocalizedProperty(preCutoff);
|
|
|
|
edSet.isShowPrePreset = lilEditorGUI.DrawSimpleFoldout(GetLoc("sPresets"), edSet.isShowPrePreset, isCustomEditor);
|
|
if(edSet.isShowPrePreset)
|
|
{
|
|
EditorGUI.indentLevel++;
|
|
if(lilEditorGUI.Button(GetLoc("sTransparentPresetsPreWriteDepth")))
|
|
{
|
|
preColor.colorValue = Color.white;
|
|
preOutType.floatValue = 2.0f;
|
|
preCutoff.floatValue = -0.001f;
|
|
preSrcBlend.floatValue = 0.0f;
|
|
preDstBlend.floatValue = 3.0f;
|
|
preZwrite.floatValue = 1.0f;
|
|
preCull.floatValue = cull.floatValue;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = stencilComp.floatValue;
|
|
mainColor.colorValue = new Color(mainColor.colorValue.r, mainColor.colorValue.g, mainColor.colorValue.b, 1.0f);
|
|
ztest.floatValue = (float)CompareFunction.LessEqual;
|
|
}
|
|
if(lilEditorGUI.Button(GetLoc("sTransparentPresetsColorTransparent")))
|
|
{
|
|
preColor.colorValue = new Color(0.75f,0.0f,0.0f,1.0f);
|
|
preOutType.floatValue = 1.0f;
|
|
preCutoff.floatValue = -0.001f;
|
|
preSrcBlend.floatValue = 0.0f;
|
|
preDstBlend.floatValue = 3.0f;
|
|
preZwrite.floatValue = 0.0f;
|
|
preCull.floatValue = cull.floatValue;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = stencilComp.floatValue;
|
|
mainColor.colorValue = new Color(mainColor.colorValue.r, mainColor.colorValue.g, mainColor.colorValue.b, 0.0f);
|
|
cutoff.floatValue = -0.001f;
|
|
ztest.floatValue = (float)CompareFunction.LessEqual;
|
|
}
|
|
if(lilEditorGUI.Button(GetLoc("sTransparentPresetsBackAndFront")))
|
|
{
|
|
preColor.colorValue = Color.white;
|
|
preOutType.floatValue = 0.0f;
|
|
preCutoff.floatValue = cutoff.floatValue;
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 10.0f;
|
|
preZwrite.floatValue = 1.0f;
|
|
preCull.floatValue = 1.0f;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = stencilComp.floatValue;
|
|
mainColor.colorValue = new Color(mainColor.colorValue.r, mainColor.colorValue.g, mainColor.colorValue.b, 1.0f);
|
|
cull.floatValue = 0.0f;
|
|
ztest.floatValue = (float)CompareFunction.Less;
|
|
}
|
|
if(lilEditorGUI.Button(GetLoc("sTransparentPresetsCutoutAndTransparent")))
|
|
{
|
|
preColor.colorValue = Color.white;
|
|
preOutType.floatValue = 0.0f;
|
|
preCutoff.floatValue = 0.95f;
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 10.0f;
|
|
preZwrite.floatValue = 1.0f;
|
|
preCull.floatValue = cull.floatValue;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = stencilComp.floatValue;
|
|
mainColor.colorValue = new Color(mainColor.colorValue.r, mainColor.colorValue.g, mainColor.colorValue.b, 1.0f);
|
|
ztest.floatValue = (float)CompareFunction.LessEqual;
|
|
}
|
|
if(lilEditorGUI.Button(GetLoc("sTransparentPresetsFadeStencil")))
|
|
{
|
|
preColor.colorValue = new Color(1.0f,1.0f,1.0f,0.5f);
|
|
preOutType.floatValue = 0.0f;
|
|
preCutoff.floatValue = cutoff.floatValue;
|
|
preSrcBlend.floatValue = 1.0f;
|
|
preDstBlend.floatValue = 10.0f;
|
|
preZwrite.floatValue = 1.0f;
|
|
preCull.floatValue = cull.floatValue;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = (float)CompareFunction.Equal;
|
|
mainColor.colorValue = new Color(mainColor.colorValue.r, mainColor.colorValue.g, mainColor.colorValue.b, 1.0f);
|
|
ztest.floatValue = (float)CompareFunction.Less;
|
|
}
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
|
|
EditorGUILayout.LabelField(GetLoc("sSimpleStencilSettings"));
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
int stencilMode = -1;
|
|
if(stencilComp.floatValue == (float)CompareFunction.Always && stencilPass.floatValue == (float)StencilOp.Keep) stencilMode = 0; // Normal
|
|
if(stencilComp.floatValue == (float)CompareFunction.Always && stencilPass.floatValue == (float)StencilOp.Replace) stencilMode = 1; // Writer
|
|
if(stencilComp.floatValue == (float)CompareFunction.NotEqual && stencilPass.floatValue == (float)StencilOp.Keep) stencilMode = 2; // Reader
|
|
if(stencilComp.floatValue == (float)CompareFunction.Equal && stencilPass.floatValue == (float)StencilOp.Keep) stencilMode = 3; // Reader (Invert)
|
|
if(transparentModeBuf == TransparentMode.TwoPass &&
|
|
stencilComp.floatValue == (float)CompareFunction.Always && stencilPass.floatValue == (float)StencilOp.Keep &&
|
|
preStencilComp.floatValue == (float)CompareFunction.Equal && preStencilPass.floatValue == (float)StencilOp.Keep
|
|
) stencilMode = 4; // Reader (Fade)
|
|
|
|
int outlineStencilMode = -1;
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
if(transparentModeBuf == TransparentMode.TwoPass) stencilMode = lilEditorGUI.Popup("Mode", stencilMode, new[]{GetLoc("sStencilModeNormal"),GetLoc("sStencilModeWriter"),GetLoc("sStencilModeReader"),GetLoc("sStencilModeReaderInvert"),GetLoc("sStencilModeReaderFade")});
|
|
else stencilMode = lilEditorGUI.Popup("Mode", stencilMode, new[]{GetLoc("sStencilModeNormal"),GetLoc("sStencilModeWriter"),GetLoc("sStencilModeReader"),GetLoc("sStencilModeReaderInvert")});
|
|
if(isOutl)
|
|
{
|
|
if(outlineStencilComp.floatValue == (float)CompareFunction.Always && outlineStencilPass.floatValue == (float)StencilOp.Keep) outlineStencilMode = 0; // Normal
|
|
if(outlineStencilComp.floatValue == (float)CompareFunction.Always && outlineStencilPass.floatValue == (float)StencilOp.Replace) outlineStencilMode = 1; // Writer
|
|
if(outlineStencilComp.floatValue == (float)CompareFunction.NotEqual && outlineStencilPass.floatValue == (float)StencilOp.Keep) outlineStencilMode = 2; // Reader
|
|
if(outlineStencilComp.floatValue == (float)CompareFunction.Equal && outlineStencilPass.floatValue == (float)StencilOp.Keep) outlineStencilMode = 3; // Reader (Invert)
|
|
outlineStencilMode = lilEditorGUI.Popup("Mode (" + GetLoc("sOutline") + ")", outlineStencilMode, new[]{GetLoc("sStencilModeNormal"),GetLoc("sStencilModeWriter"),GetLoc("sStencilModeReader"),GetLoc("sStencilModeReaderInvert")});
|
|
}
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
SetupMaterialWithRenderingMode(renderingModeBuf, transparentModeBuf);
|
|
int shaderRenderQueue = isMulti ? material.renderQueue : material.shader.renderQueue;
|
|
switch(stencilMode)
|
|
{
|
|
case 0:
|
|
stencilRef.floatValue = 0;
|
|
stencilComp.floatValue = (float)CompareFunction.Always;
|
|
stencilPass.floatValue = (float)StencilOp.Keep;
|
|
if(!isMulti) material.renderQueue = -1;
|
|
break;
|
|
case 1: // Writer
|
|
stencilComp.floatValue = (float)CompareFunction.Always;
|
|
stencilPass.floatValue = (float)StencilOp.Replace;
|
|
material.renderQueue = shaderRenderQueue > 2451 ? -1 : 2451;
|
|
break;
|
|
case 2: // Reader
|
|
stencilComp.floatValue = (float)CompareFunction.NotEqual;
|
|
stencilPass.floatValue = (float)StencilOp.Keep;
|
|
material.renderQueue = shaderRenderQueue > 2452 ? -1 : 2452;
|
|
break;
|
|
case 3: // Reader (Invert)
|
|
stencilComp.floatValue = (float)CompareFunction.Equal;
|
|
stencilPass.floatValue = (float)StencilOp.Keep;
|
|
material.renderQueue = shaderRenderQueue > 2452 ? -1 : 2452;
|
|
break;
|
|
case 4: // Reader (Fade)
|
|
stencilComp.floatValue = (float)CompareFunction.Always;
|
|
stencilPass.floatValue = (float)StencilOp.Keep;
|
|
material.renderQueue = shaderRenderQueue > 2452 ? -1 : 2452;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if(stencilMode != 0 && stencilRef.floatValue == 0) stencilRef.floatValue = 1;
|
|
stencilReadMask.floatValue = 255.0f;
|
|
stencilWriteMask.floatValue = 255.0f;
|
|
stencilFail.floatValue = (float)StencilOp.Keep;
|
|
stencilZFail.floatValue = (float)StencilOp.Keep;
|
|
if(isOutl)
|
|
{
|
|
switch(outlineStencilMode)
|
|
{
|
|
case 0:
|
|
outlineStencilComp.floatValue = (float)CompareFunction.Always;
|
|
outlineStencilPass.floatValue = (float)StencilOp.Keep;
|
|
break;
|
|
case 1: // Writer
|
|
outlineStencilComp.floatValue = (float)CompareFunction.Always;
|
|
outlineStencilPass.floatValue = (float)StencilOp.Replace;
|
|
break;
|
|
case 2: // Reader
|
|
outlineStencilComp.floatValue = (float)CompareFunction.NotEqual;
|
|
outlineStencilPass.floatValue = (float)StencilOp.Keep;
|
|
break;
|
|
case 3: // Reader (Invert)
|
|
outlineStencilComp.floatValue = (float)CompareFunction.Equal;
|
|
outlineStencilPass.floatValue = (float)StencilOp.Keep;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
outlineStencilRef.floatValue = stencilRef.floatValue;
|
|
outlineStencilReadMask.floatValue = 255.0f;
|
|
outlineStencilWriteMask.floatValue = 255.0f;
|
|
outlineStencilFail.floatValue = (float)StencilOp.Keep;
|
|
outlineStencilZFail.floatValue = (float)StencilOp.Keep;
|
|
}
|
|
if(isFur)
|
|
{
|
|
furStencilRef.floatValue = stencilRef.floatValue;
|
|
furStencilComp.floatValue = stencilComp.floatValue;
|
|
furStencilPass.floatValue = stencilPass.floatValue;
|
|
furStencilReadMask.floatValue = stencilReadMask.floatValue;
|
|
furStencilWriteMask.floatValue = stencilWriteMask.floatValue;
|
|
furStencilFail.floatValue = stencilFail.floatValue;
|
|
furStencilZFail.floatValue = stencilZFail.floatValue;
|
|
}
|
|
if(transparentModeBuf == TransparentMode.TwoPass)
|
|
{
|
|
ztest.floatValue = stencilMode == 4 ? (float)CompareFunction.Less : (float)CompareFunction.LessEqual;
|
|
preStencilRef.floatValue = stencilRef.floatValue;
|
|
preStencilComp.floatValue = stencilMode == 4 ? (float)CompareFunction.Equal : stencilComp.floatValue;
|
|
preStencilPass.floatValue = stencilPass.floatValue;
|
|
preStencilReadMask.floatValue = stencilReadMask.floatValue;
|
|
preStencilWriteMask.floatValue = stencilWriteMask.floatValue;
|
|
preStencilFail.floatValue = stencilFail.floatValue;
|
|
preStencilZFail.floatValue = stencilZFail.floatValue;
|
|
}
|
|
}
|
|
if(stencilMode != 0 || isOutl && outlineStencilMode != 0)
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
LocalizedProperty(stencilRef);
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
if(isOutl) outlineStencilRef.floatValue = stencilRef.floatValue;
|
|
if(isFur) furStencilRef.floatValue = stencilRef.floatValue;
|
|
if(transparentModeBuf == TransparentMode.TwoPass) preStencilRef.floatValue = stencilRef.floatValue;
|
|
}
|
|
}
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
}
|
|
|
|
private void DrawLightingSettings()
|
|
{
|
|
if(!ShouldDrawBlock(PropertyBlock.Lighting)) return;
|
|
edSet.isShowLightingSettings = lilEditorGUI.Foldout(GetLoc("sLightingSettings"), edSet.isShowLightingSettings);
|
|
DrawMenuButton(GetLoc("sAnchorLighting"), PropertyBlock.Lighting);
|
|
if(edSet.isShowLightingSettings)
|
|
{
|
|
EditorGUILayout.LabelField(GetLoc("sBaseSetting"));
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
LocalizedProperty(lightMinLimit);
|
|
LocalizedProperty(lightMaxLimit);
|
|
LocalizedProperty(monochromeLighting);
|
|
if(shadowEnvStrength != null) LocalizedProperty(shadowEnvStrength);
|
|
var button = lilEditorGUI.Buttons(GetLoc("sLightingPreset"), GetLoc("sLightingPresetDefault"), GetLoc("sLightingPresetSemiMonochrome"));
|
|
if(button[0]) ApplyLightingPreset(LightingPreset.Default);
|
|
if(button[1]) ApplyLightingPreset(LightingPreset.SemiMonochrome);
|
|
EditorGUILayout.EndVertical();
|
|
|
|
EditorGUILayout.LabelField(GetLoc("sAdvanced"));
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
LocalizedProperty(asUnlit);
|
|
if(asUnlit.floatValue != 0 && lilEditorGUI.AutoFixHelpBox(GetLoc("sAsUnlitWarn")))
|
|
{
|
|
asUnlit.floatValue = 0.0f;
|
|
}
|
|
LocalizedProperty(vertexLightStrength);
|
|
LocalizedProperty(lightDirectionOverride);
|
|
if(isTransparent || (isFur && !isCutout)) LocalizedProperty(alphaBoostFA);
|
|
BlendOpFASetting();
|
|
LocalizedProperty(beforeExposureLimit);
|
|
LocalizedProperty(lilDirectionalLightStrength);
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
}
|
|
|
|
private void BlendOpFASetting()
|
|
{
|
|
if(blendOpFA == null) return;
|
|
int selecting = blendOpFA.floatValue == 0 ? 0 : (blendOpFA.floatValue == 4 ? 1 : 2);
|
|
EditorGUI.BeginChangeCheck();
|
|
EditorGUI.showMixedValue = blendOpFA.hasMixedValue;
|
|
selecting = lilEditorGUI.Popup(Event.current.alt ? blendOpFA.name : GetLoc("sLightBlending"), selecting, new string[]{GetLoc("sBlendingAdd"), GetLoc("sBlendingMax")});
|
|
EditorGUI.showMixedValue = false;
|
|
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
blendOpFA.floatValue = selecting == 0 ? 0 : (selecting == 1 ? 4 : blendOpFA.floatValue);
|
|
}
|
|
}
|
|
|
|
private void DrawLightingSettingsSimple()
|
|
{
|
|
if(!ShouldDrawBlock(PropertyBlock.Lighting)) return;
|
|
edSet.isShowLightingSettings = lilEditorGUI.Foldout(GetLoc("sLightingSettings"), edSet.isShowLightingSettings);
|
|
DrawMenuButton(GetLoc("sAnchorLighting"), PropertyBlock.Lighting);
|
|
if(edSet.isShowLightingSettings)
|
|
{
|
|
EditorGUILayout.LabelField(GetLoc("sBaseSetting"));
|
|
EditorGUILayout.BeginVertical(customBox);
|
|
LocalizedProperty(lightMinLimit);
|
|
LocalizedProperty(lightMaxLimit);
|
|
LocalizedProperty(monochromeLighting);
|
|
if(shadowEnvStrength != null) LocalizedProperty(shadowEnvStrength);
|
|
var button = lilEditorGUI.Buttons(GetLoc("sLightingPreset"), GetLoc("sLightingPresetDefault"), GetLoc("sLightingPresetSemiMonochrome"));
|
|
if(button[0]) ApplyLightingPreset(LightingPreset.Default);
|
|
if(button[1]) ApplyLightingPreset(LightingPreset.SemiMonochrome);
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|