public virtual void SetLightingMaterialKeywords(Material material)
 {
     ShurikenMaster.LightMode lightMode = (ShurikenMaster.LightMode)material.GetInt("_LightMode");
     ShurikenMaster.SetKeyword(material, "VFX_LIGHTING", lightMode == ShurikenMaster.LightMode.DynamicPerPixel);
     ShurikenMaster.SetKeyword(material, "VFX_LIGHTING_VERTEX", lightMode == ShurikenMaster.LightMode.DynamicPerVertex);
     ShurikenMaster.SetKeyword(material, "VFX_LIGHTING_SH", lightMode == ShurikenMaster.LightMode.LightProbeProxyVolume);
 }
        public virtual void ShaderPropertiesLightingGUI(Material material)
        {
            ShurikenMaster.LightMode light = (ShurikenMaster.LightMode)material.GetInt("_LightMode");

            lightMode.floatValue = (float)(ShurikenMaster.LightMode)EditorGUILayout.EnumPopup("Lighting Mode", light);
            if (light == ShurikenMaster.LightMode.DynamicPerPixel || light == ShurikenMaster.LightMode.DynamicPerVertex)
            {
                if (light == ShurikenMaster.LightMode.DynamicPerPixel)
                {
                    m_MaterialEditor.TexturePropertySingleLine(Content.normalMap, normalMap, null);
                }
                else
                {
                    EditorGUILayout.LabelField(Content.vertexNormals);
                }

                using (new IndentScope(1))
                {
                    lightDirectionality.floatValue = EditorGUILayout.Slider(Content.lightDirectionality, lightDirectionality.floatValue, 0, 1);
                }
            }
        }
        protected void HandleMiniLog(Material material)
        {
            m_MiniLog.Clear();

            if (GetCapability(ShurikenMaster.Capabilities.Lighting))
            {
                ShurikenMaster.LightMode lightMode = (ShurikenMaster.LightMode)material.GetInt("_LightMode");

                if (lightMode != ShurikenMaster.LightMode.Unlit)
                {
                    m_MiniLog.Log("Ensure shuriken vertex stream declares NORMALS", MessageType.Info);
                    if (lightMode != ShurikenMaster.LightMode.DynamicPerVertex && material.GetTexture("_NormalMap") != null)
                    {
                        m_MiniLog.Log("Ensure shuriken vertex stream declares TANGENT", MessageType.Info);
                    }
                }
            }

            if (!QualitySettings.softParticles && material.GetFloat("_SoftParticle") == 1.0f)
            {
                m_MiniLog.Log("Soft Particles needs to be enabled in your quality settings", MessageType.Warning);
            }
        }
        protected void ShaderPropertiesVertexStreamsGUI(Material material)
        {
            bool useLighting         = false;
            bool useTangents         = false;
            bool useFlipbookBlending = false;
            bool useCustom1          = false;

            if (GetCapability(ShurikenMaster.Capabilities.Lighting))
            {
                ShurikenMaster.LightMode lightMode = (ShurikenMaster.LightMode)material.GetInt("_LightMode");
                useLighting = lightMode != ShurikenMaster.LightMode.Unlit;
                useTangents = lightMode != ShurikenMaster.LightMode.DynamicPerVertex && material.GetTexture("_NormalMap") != null && useLighting;
            }
            if (GetCapability(ShurikenMaster.Capabilities.FlipbookBlending))
            {
                useFlipbookBlending = flipbookBlend.floatValue == 1.0f;
            }

            ShurikenMaster.DrawHeader(Content.vertexStreamHeader, EditorGUIUtility.ObjectContent(null, typeof(Mesh)).image);

            if (material.IsKeywordEnabled("SKM_REQUIRE_CUSTOM1"))
            {
                useCustom1 = false;
            }

            using (new GUILayout.HorizontalScope())
            {
                GUILayout.FlexibleSpace();

                // Set the streams on all systems using this material
                if (GUILayout.Button(Content.streamApplyToAllSystemsText, EditorStyles.miniButton, GUILayout.Width(120)))
                {
                    List <ParticleSystemVertexStream> streams = new List <ParticleSystemVertexStream>();
                    streams.Add(ParticleSystemVertexStream.Position);

                    if (useLighting)
                    {
                        streams.Add(ParticleSystemVertexStream.Normal);
                    }

                    streams.Add(ParticleSystemVertexStream.Color);
                    streams.Add(ParticleSystemVertexStream.UV);

                    if (useFlipbookBlending)
                    {
                        streams.Add(ParticleSystemVertexStream.UV2);
                        streams.Add(ParticleSystemVertexStream.AnimBlend);
                    }

                    if (useCustom1)
                    {
                        streams.Add(ParticleSystemVertexStream.Custom1X);
                    }

                    if (useTangents)
                    {
                        streams.Add(ParticleSystemVertexStream.Tangent);
                    }

                    ParticleSystemRenderer[] renderers = UnityEngine.Object.FindObjectsOfType(typeof(ParticleSystemRenderer)) as ParticleSystemRenderer[];
                    foreach (ParticleSystemRenderer renderer in renderers)
                    {
                        if (renderer.sharedMaterial == material)
                        {
                            renderer.SetActiveVertexStreams(streams);
                        }
                    }
                }
            }

            // Display list of streams required to make this shader work
            EditorGUI.indentLevel++;
            EditorGUILayout.LabelField(Content.streamPositionText, EditorStyles.label);

            if (useLighting)
            {
                EditorGUILayout.LabelField(Content.streamNormalText, EditorStyles.label);
            }

            EditorGUILayout.LabelField(Content.streamColorText, EditorStyles.label);
            EditorGUILayout.LabelField(Content.streamUVText, EditorStyles.label);

            if (useFlipbookBlending)
            {
                EditorGUILayout.LabelField(Content.streamUV2Text, EditorStyles.label);
                EditorGUILayout.LabelField(Content.streamAnimBlendText, EditorStyles.label);
            }

            if (useTangents)
            {
                EditorGUILayout.LabelField(Content.streamTangentText, EditorStyles.label);
            }

            EditorGUI.indentLevel--;
            EditorGUILayout.Space();
        }