summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs227
1 files changed, 227 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs
new file mode 100644
index 00000000..34c8e548
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/Master/RenderingOptionsOpHelper.cs
@@ -0,0 +1,227 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace AmplifyShaderEditor
+{
+ public enum DisableBatchingTagValues
+ {
+ True,
+ False,
+ LODFading
+ }
+
+ [Serializable]
+ public class RenderingOptionsOpHelper
+ {
+ private const string RenderingOptionsStr = " Rendering Options";
+ private readonly static GUIContent EmissionGIFlags = new GUIContent( "Emission GI Flag", "Modifies Emission GI flags" );
+ private readonly static GUIContent LODCrossfadeContent = new GUIContent( " LOD Group Cross Fade", "Applies a dither crossfade to be used with LOD groups for smoother transitions. Uses one interpolator\nDefault: OFF" );
+ private readonly static GUIContent DisableBatchingContent = new GUIContent( "Disable Batching", "\nDisables objects to be batched and used with DrawCallBatching Default: False" );
+ private readonly static GUIContent IgnoreProjectorContent = new GUIContent( " Ignore Projector", "\nIf True then an object that uses this shader will not be affected by Projectors Default: False" );
+ private readonly static GUIContent UseDefaultCasterContent = new GUIContent( " Use Default Shadow Caster", "\nIf True always use surface default shadow caster Default: False" );
+ private readonly static GUIContent ForceNoShadowCastingContent = new GUIContent( " Force No Shadow Casting", "\nIf True then an object that is rendered using this subshader will never cast shadows Default: False" );
+ private readonly static GUIContent ForceEnableInstancingContent = new GUIContent( " Force Enable Instancing", "\nIf True forces instancing on shader independent of having instanced properties" );
+#if UNITY_5_6_OR_NEWER
+ private readonly static GUIContent ForceDisableInstancingContent = new GUIContent( " Force Disable Instancing", "\nIf True forces disable instancing on shader independent of having instanced properties" );
+#endif
+ private readonly static GUIContent SpecularHightlightsContent = new GUIContent( " Fwd Specular Highlights Toggle", "\nIf True creates a material toggle to set Unity's internal specular highlight rendering keyword" );
+ private readonly static GUIContent ReflectionsContent = new GUIContent( " Fwd Reflections Toggle", "\nIf True creates a material toggle to set Unity's internal reflections rendering keyword" );
+
+ [SerializeField]
+ private bool m_forceEnableInstancing = false;
+
+ [SerializeField]
+ private bool m_forceDisableInstancing = false;
+
+ [SerializeField]
+ private bool m_specularHighlightToggle = false;
+
+ [SerializeField]
+ private bool m_reflectionsToggle = false;
+
+ [SerializeField]
+ private bool m_lodCrossfade = false;
+
+ [SerializeField]
+ private DisableBatchingTagValues m_disableBatching = DisableBatchingTagValues.False;
+
+ [SerializeField]
+ private bool m_ignoreProjector = false;
+
+ [SerializeField]
+ private bool m_useDefaultShadowCaster = false;
+
+ [SerializeField]
+ private bool m_forceNoShadowCasting = false;
+
+ [SerializeField]
+ private List<CodeGenerationData> m_codeGenerationDataList;
+
+ public RenderingOptionsOpHelper()
+ {
+ m_codeGenerationDataList = new List<CodeGenerationData>();
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Deferred", "exclude_path:deferred" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Forward", "exclude_path:forward" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Exclude Legacy Deferred", "exclude_path:prepass" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Shadows", "noshadow" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Ambient Light", "noambient" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Per Vertex Light", "novertexlights" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Lightmaps", "nolightmap " ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Dynamic Global GI", "nodynlightmap" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Directional lightmaps", "nodirlightmap" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Built-in Fog", "nofog" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Meta Pass", "nometa" ) );
+ m_codeGenerationDataList.Add( new CodeGenerationData( " Add Pass", "noforwardadd" ) );
+ }
+
+ public bool IsOptionActive( string option )
+ {
+ return !m_codeGenerationDataList.Find( x => x.Name.Equals( option ) ).IsActive;
+ }
+
+ public void Draw( StandardSurfaceOutputNode owner )
+ {
+ bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingOptions;
+ NodeUtils.DrawPropertyGroup( ref value, RenderingOptionsStr, () =>
+ {
+ int codeGenCount = m_codeGenerationDataList.Count;
+ // Starting from index 4 because other options are already contemplated with m_renderPath and add/receive shadows
+ for( int i = 4; i < codeGenCount; i++ )
+ {
+ m_codeGenerationDataList[ i ].IsActive = !owner.EditorGUILayoutToggleLeft( m_codeGenerationDataList[ i ].Name, !m_codeGenerationDataList[ i ].IsActive );
+ }
+ m_lodCrossfade = owner.EditorGUILayoutToggleLeft( LODCrossfadeContent, m_lodCrossfade );
+ m_ignoreProjector = owner.EditorGUILayoutToggleLeft( IgnoreProjectorContent, m_ignoreProjector );
+ EditorGUI.BeginDisabledGroup( !owner.CastShadows );
+ m_useDefaultShadowCaster = owner.EditorGUILayoutToggleLeft( UseDefaultCasterContent, m_useDefaultShadowCaster );
+ EditorGUI.EndDisabledGroup();
+ m_forceNoShadowCasting = owner.EditorGUILayoutToggleLeft( ForceNoShadowCastingContent, m_forceNoShadowCasting );
+ if( owner.ContainerGraph.IsInstancedShader )
+ {
+ GUI.enabled = false;
+ owner.EditorGUILayoutToggleLeft( ForceEnableInstancingContent, true );
+ GUI.enabled = true;
+ }
+ else
+ {
+ m_forceEnableInstancing = owner.EditorGUILayoutToggleLeft( ForceEnableInstancingContent, m_forceEnableInstancing );
+ }
+
+#if UNITY_5_6_OR_NEWER
+ m_forceDisableInstancing = owner.EditorGUILayoutToggleLeft( ForceDisableInstancingContent, m_forceDisableInstancing );
+#endif
+ m_specularHighlightToggle = owner.EditorGUILayoutToggleLeft( SpecularHightlightsContent, m_specularHighlightToggle );
+ m_reflectionsToggle = owner.EditorGUILayoutToggleLeft( ReflectionsContent, m_reflectionsToggle );
+ m_disableBatching = (DisableBatchingTagValues)owner.EditorGUILayoutEnumPopup( DisableBatchingContent, m_disableBatching );
+ Material mat = owner.ContainerGraph.CurrentMaterial;
+ if( mat != null )
+ {
+ mat.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)owner.EditorGUILayoutEnumPopup( EmissionGIFlags, mat.globalIlluminationFlags );
+ }
+ } );
+ owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingOptions = value;
+ }
+
+ public void Build( ref string OptionalParameters )
+ {
+ int codeGenCount = m_codeGenerationDataList.Count;
+
+ for( int i = 0; i < codeGenCount; i++ )
+ {
+ if( m_codeGenerationDataList[ i ].IsActive )
+ {
+ OptionalParameters += m_codeGenerationDataList[ i ].Value + Constants.OptionalParametersSep;
+ }
+ }
+
+#if UNITY_2017_1_OR_NEWER
+ if( m_lodCrossfade )
+ {
+ OptionalParameters += Constants.LodCrossFadeOption2017 + Constants.OptionalParametersSep;
+ }
+#endif
+ }
+
+ public void ReadFromString( ref uint index, ref string[] nodeParams )
+ {
+ for( int i = 0; i < m_codeGenerationDataList.Count; i++ )
+ {
+ m_codeGenerationDataList[ i ].IsActive = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 10005 )
+ {
+ m_lodCrossfade = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 10007 )
+ {
+ m_disableBatching = (DisableBatchingTagValues)Enum.Parse( typeof( DisableBatchingTagValues ), nodeParams[ index++ ] );
+ m_ignoreProjector = Convert.ToBoolean( nodeParams[ index++ ] );
+ m_forceNoShadowCasting = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 11002 )
+ {
+ m_forceEnableInstancing = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 15205 )
+ {
+ m_forceDisableInstancing = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 14403 )
+ {
+ m_specularHighlightToggle = Convert.ToBoolean( nodeParams[ index++ ] );
+ m_reflectionsToggle = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+
+ if( UIUtils.CurrentShaderVersion() > 16307 )
+ {
+ m_useDefaultShadowCaster = Convert.ToBoolean( nodeParams[ index++ ] );
+ }
+ }
+
+ public void WriteToString( ref string nodeInfo )
+ {
+ for( int i = 0; i < m_codeGenerationDataList.Count; i++ )
+ {
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_codeGenerationDataList[ i ].IsActive );
+ }
+
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_lodCrossfade );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_disableBatching );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_ignoreProjector );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_forceNoShadowCasting );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_forceEnableInstancing );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_forceDisableInstancing );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_specularHighlightToggle );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_reflectionsToggle );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_useDefaultShadowCaster );
+ }
+
+ public void Destroy()
+ {
+ m_codeGenerationDataList.Clear();
+ m_codeGenerationDataList = null;
+ }
+ public bool UseDefaultShadowCaster { get { return m_useDefaultShadowCaster; } }
+ public bool ForceEnableInstancing { get { return m_forceEnableInstancing; } }
+ public bool ForceDisableInstancing { get { return m_forceDisableInstancing; } }
+
+ public bool LodCrossfade { get { return m_lodCrossfade; } }
+ public bool IgnoreProjectorValue { get { return m_ignoreProjector; } set { m_ignoreProjector = value; } }
+ public bool SpecularHighlightToggle { get { return m_specularHighlightToggle; } set { m_specularHighlightToggle = value; } }
+ public bool ReflectionsToggle { get { return m_reflectionsToggle; } set { m_reflectionsToggle = value; } }
+
+ public string DisableBatchingTag { get { return ( m_disableBatching != DisableBatchingTagValues.False ) ? string.Format( Constants.TagFormat, "DisableBatching", m_disableBatching ) : string.Empty; } }
+ public string IgnoreProjectorTag { get { return ( m_ignoreProjector ) ? string.Format( Constants.TagFormat, "IgnoreProjector", "True" ) : string.Empty; } }
+ public string ForceNoShadowCastingTag { get { return ( m_forceNoShadowCasting ) ? string.Format( Constants.TagFormat, "ForceNoShadowCasting", "True" ) : string.Empty; } }
+ }
+}