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(); }