Exemplo n.º 1
0
        public void Foldout(int xOffset, string name, PoiToon gui)
        {
            var style = new GUIStyle("ShurikenModuleTitle");

            style.font          = new GUIStyle(EditorStyles.label).font;
            style.border        = new RectOffset(15, 7, 4, 4);
            style.fixedHeight   = 22;
            style.contentOffset = new Vector2(20f, -2f);
            style.margin.left   = 30 * xOffset;

            var rect = GUILayoutUtility.GetRect(16f + 20f, 22f, style);

            GUI.Box(rect, name, style);

            var e = Event.current;

            var toggleRect = new Rect(rect.x + 4f, rect.y + 2f, 13f, 13f);

            if (e.type == EventType.Repaint)
            {
                EditorStyles.foldout.Draw(toggleRect, false, false, getState(), false);
            }

            if (e.type == EventType.MouseDown && rect.Contains(e.mousePosition))
            {
                this.Toggle();
                e.Use();
                gui.sendActiveShader = true;
            }
        }
Exemplo n.º 2
0
    //test if the path to the presets has changed
    public void testPresetsChanged(MaterialProperty[] props)
    {
        MaterialProperty presetsProperty = PoiToon.FindProperty(props, "shader_presets");

        if (!(presetsProperty == null))
        {
            testPresetsChanged(presetsProperty);
        }
        else
        {
            hasPresets = false;
        }
    }
Exemplo n.º 3
0
    public static void restorePoiMaterials()
    {
        StreamReader reader = new StreamReader(POI_MATERIALS_FILE_PATH);

        string l;

        while ((l = reader.ReadLine()) != null)
        {
            string[] materialData = l.Split(new string[] { ":" }, System.StringSplitOptions.None);
            Material material     = AssetDatabase.LoadAssetAtPath <Material>(AssetDatabase.GUIDToAssetPath(materialData[0]));
            Shader   shader       = Shader.Find(materialData[1]);
            material.shader      = shader;
            material.renderQueue = int.Parse(materialData[2]);
            PoiToon.UpdateRenderQueue(material, shader);
        }
        RepaintAllMaterialEditors();

        reader.Close();
    }
Exemplo n.º 4
0
    public static void updateQueueShadersIfNessecary()
    {
        string[] guids = AssetDatabase.FindAssets("poiUpdatedShaders");
        if (guids.Length == 0)
        {
            return;
        }
        string file_path = AssetDatabase.GUIDToAssetPath(guids[0]);

        if (!file_path.Contains("/poiUpdatedShaders"))
        {
            return;
        }
        StreamReader    reader = new StreamReader(file_path);
        string          shader_file_name;
        List <Material> materialsToUpdate = new List <Material>();
        List <int>      renderQueues      = new List <int>();

        while ((shader_file_name = reader.ReadLine()) != null)
        {
            //for each updated shader
            string[] shaderGuids       = AssetDatabase.FindAssets(shader_file_name);
            string   defaultShaderGuid = null;
            foreach (string g in shaderGuids)
            {
                if (AssetDatabase.GUIDToAssetPath(g).EndsWith(shader_file_name + ".shader"))
                {
                    defaultShaderGuid = g;
                }
            }
            if (defaultShaderGuid == null)
            {
                continue;
            }
            Shader   defaultShader = AssetDatabase.LoadAssetAtPath <Shader>(AssetDatabase.GUIDToAssetPath(defaultShaderGuid));
            string[] matGuids      = AssetDatabase.FindAssets("t:material");
            materialsToUpdate.Clear();
            renderQueues.Clear();
            foreach (string mG in matGuids)
            {
                Material material = AssetDatabase.LoadAssetAtPath <Material>(AssetDatabase.GUIDToAssetPath(mG));
                if (material.shader.name.Contains(defaultShader.name) && material.shader.name.Length > defaultShader.name.Length)
                {
                    materialsToUpdate.Add(material);
                    renderQueues.Add(material.renderQueue);
                    material.shader = defaultShader;
                }
            }
            for (int i = 0; i < shaderGuids.Length; i++)
            {
                if (shaderGuids[i] != defaultShaderGuid)
                {
                    AssetDatabase.DeleteAsset(AssetDatabase.GUIDToAssetPath(shaderGuids[i]));
                }
            }
            for (int i = 0; i < materialsToUpdate.Count; i++)
            {
                materialsToUpdate[i].renderQueue = renderQueues[i];
                PoiToon.UpdateRenderQueue(materialsToUpdate[i], defaultShader);
            }
        }
        reader.Close();
        File.Delete(file_path);
        AssetDatabase.DeleteAsset(file_path);
    }
Exemplo n.º 5
0
    public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props)
    {
        Material material = materialEditor.target as Material;

        HeaderInit(materialEditor);

        // map shader properties to script variables
        FindProperties(props);

        // set up style for the base look
        SetupStyle();

        // load default toggle values
        LoadDefaults(material);

        DrawMasterLabel();

        // main section
        m_mainOptions = PoiToonUI.Foldout("Main", m_mainOptions);
        if (m_mainOptions.getState())
        {
            EditorGUILayout.Space();

            materialEditor.ShaderProperty(m_color, Styles.Color);
            materialEditor.ShaderProperty(m_desaturation, Styles.Desaturation);
            materialEditor.ShaderProperty(m_mainTex, Styles.MainTex);
            materialEditor.ShaderProperty(m_normalMap, Styles.NormalMap);
            materialEditor.ShaderProperty(m_normalIntensity, Styles.NormalIntensity);
            materialEditor.ShaderProperty(m_clip, Styles.Clip);

            EditorGUILayout.Space();
        }

        m_metallicOptions = PoiToonUI.Foldout("Metallic", m_metallicOptions);
        if (m_metallicOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_cubeMap, Styles.CubeMap);
            materialEditor.ShaderProperty(m_sampleWorld, Styles.SampleWorld);
            materialEditor.ShaderProperty(m_metallicMap, Styles.MetallicMap);
            materialEditor.ShaderProperty(m_metallic, Styles.Metallic);
            materialEditor.ShaderProperty(m_roughnessMap, Styles.RoughnessMap);
            materialEditor.ShaderProperty(m_roughness, Styles.Roughness);
            EditorGUILayout.Space();
        }

        // outline section
        m_outlineOptions = PoiToonUI.Foldout("Outline", m_outlineOptions);

        if (m_outlineOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_lineWidth, Styles.LineWidth);
            materialEditor.ShaderProperty(m_outlineColor, Styles.OutlineColor);
            materialEditor.ShaderProperty(m_outlineEmission, Styles.OutlineEmission);
            materialEditor.ShaderProperty(m_outlineTexture, Styles.OutlineTexture);
            materialEditor.ShaderProperty(m_speed, Styles.Speed);

            EditorGUILayout.Space();
        }

        // emissive section
        m_emissionOptions = PoiToonUI.Foldout("Emission", m_emissionOptions);
        if (m_emissionOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_emissionColor, Styles.EmissionColor);
            materialEditor.ShaderProperty(m_emissionMap, Styles.EmissionMap);
            materialEditor.ShaderProperty(m_emissionScrollSpeed, Styles.EmissionScrollSpeed);
            materialEditor.ShaderProperty(m_emissionStrength, Styles.EmissionStrength);
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_emissiveBlinkMin, Styles.EmissiveBlinkMin);
            materialEditor.ShaderProperty(m_emissiveBlinkMax, Styles.EmissiveBlinkMax);
            materialEditor.ShaderProperty(m_emissiveBlinkVelocity, Styles.EmissiveBlinkVelocity);
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_emissiveScrollEnabled, Styles.EmissiveScrollEnabled);
            materialEditor.ShaderProperty(m_emissiveScrollDirection, Styles.EmissiveScrollDirection);
            materialEditor.ShaderProperty(m_emissiveScrollWidth, Styles.EmissiveScrollWidth);
            materialEditor.ShaderProperty(m_emissiveScrollVelocity, Styles.EmissiveScrollVelocity);
            materialEditor.ShaderProperty(m_emissiveScrollInterval, Styles.EmissiveScrollInterval);
            EditorGUILayout.Space();
        }

        // fake lighting
        m_fakeLightingOptions = PoiToonUI.Foldout("Fake Lighting", m_fakeLightingOptions);
        if (m_fakeLightingOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_lightingGradient, Styles.LightingGradient);
            materialEditor.ShaderProperty(m_lightingShadowStrength, Styles.LightingShadowStrength);
            materialEditor.ShaderProperty(m_lightingShadowOffset, Styles.LightingShadowOffsett);
            materialEditor.ShaderProperty(m_forceLightDirection, Styles.ForceLightDirection);
            materialEditor.ShaderProperty(m_lightingDirection, Styles.LightingDirection);
            materialEditor.ShaderProperty(m_minBrightness, Styles.MinBrightness);
            materialEditor.ShaderProperty(m_maxDirectionalIntensity, Styles.MaxDirectionalIntensity);
            materialEditor.ShaderProperty(m_additiveRamp, Styles.AdditiveRamp);
            EditorGUILayout.Space();
        }

        // Specular Highlights
        m_specularHighlightsOptions = PoiToonUI.Foldout("Specular Highlight", m_specularHighlightsOptions);
        if (m_specularHighlightsOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_specularMap, Styles.SpecularMap);
            materialEditor.ShaderProperty(m_gloss, Styles.Gloss);
            materialEditor.ShaderProperty(m_specularColor, Styles.SpecularColor);
            materialEditor.ShaderProperty(m_specularStrength, Styles.SpecularStrength);
            materialEditor.ShaderProperty(m_specularBias, Styles.SpecularBias);
            materialEditor.ShaderProperty(m_hardSpecular, Styles.HardSpecular);
            materialEditor.ShaderProperty(m_specularSize, Styles.SpecularSize);
            EditorGUILayout.Space();
        }

        // Rim Lighting
        m_rimLightOptions = PoiToonUI.Foldout("Rim Lighting", m_rimLightOptions);
        if (m_rimLightOptions.getState())
        {
            EditorGUILayout.Space();
            materialEditor.ShaderProperty(m_rimColor, Styles.RimColor);
            materialEditor.ShaderProperty(m_rimStrength, Styles.RimGlowStrength);
            materialEditor.ShaderProperty(m_rimSharpness, Styles.RimSharpness);
            materialEditor.ShaderProperty(m_rimWidth, Styles.RimWidth);
            materialEditor.ShaderProperty(m__rimLightColorBias, Styles.RimColorBias);
            materialEditor.ShaderProperty(m_rimTex, Styles.RimTexture);
            materialEditor.ShaderProperty(m_rimTexPanSpeed, Styles.RimTexturePanSpeed);
            EditorGUILayout.Space();
        }

        m_stencilOptions = PoiToonUI.Foldout("Stencil", m_stencilOptions);
        if (m_stencilOptions.getState())
        {
            EditorGUILayout.Space();

            materialEditor.ShaderProperty(m_stencilRef, Styles.StencilRef);
            materialEditor.ShaderProperty(m_stencilCompareFunction, Styles.StencilCompareFunction);
            materialEditor.ShaderProperty(m_stencilOp, Styles.StencilOp);

            EditorGUILayout.Space();
        }

        m_miscOptions = PoiToonUI.Foldout("Misc", m_miscOptions);
        if (m_miscOptions.getState())
        {
            EditorGUILayout.Space();

            materialEditor.ShaderProperty(m_cullMode, Styles.CullMode);
            materialEditor.ShaderProperty(m_srcBlend, Styles.SrcBlend);
            materialEditor.ShaderProperty(m_dstBlend, Styles.DstBlend);
            materialEditor.ShaderProperty(m_zTest, Styles.ZTest);

            EditorGUILayout.Space();
        }

        ToggleDefines(material);

        EditorGUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        PoiToon.linkButton(70, 20, "Github", "https://github.com/poiyomi/PoiyomiToonShader");
        GUILayout.Space(2);
        PoiToon.linkButton(70, 20, "Discord", "https://discord.gg/Ays52PY");
        GUILayout.Space(2);
        PoiToon.linkButton(70, 20, "Donate", "https://www.paypal.me/poiyomi");
        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
    }
Exemplo n.º 6
0
    public void applyPreset(string presetName, MaterialProperty[] props, Material[] materials)
    {
        List <string[]> sets;

        if (presets.TryGetValue(presetName, out sets))
        {
            foreach (string[] set in sets)
            {
                MaterialProperty p = PoiToon.FindProperty(props, set[0]);
                if (p != null)
                {
                    if (p.type == MaterialProperty.PropType.Texture)
                    {
                        string[] guids = AssetDatabase.FindAssets(set[1] + " t:Texture", null);
                        if (guids.Length == 0)
                        {
                            Debug.LogError("Couldn't find texture: " + set[1]);
                        }
                        else
                        {
                            string  path = AssetDatabase.GUIDToAssetPath(guids[0]);
                            Texture tex  = (Texture)EditorGUIUtility.Load(path);
                            foreach (Material m in materials)
                            {
                                m.SetTexture(Shader.PropertyToID(set[0]), tex);
                            }
                        }
                    }
                    else if (p.type == MaterialProperty.PropType.Float || p.type == MaterialProperty.PropType.Range)
                    {
                        float value;
                        if (float.TryParse(set[1], out value))
                        {
                            foreach (Material m in materials)
                            {
                                m.SetFloat(Shader.PropertyToID(set[0]), value);
                            }
                        }
                    }
                    else if (p.type == MaterialProperty.PropType.Vector)
                    {
                        string[] xyzw   = set[1].Split(",".ToCharArray());
                        Vector4  vector = new Vector4(float.Parse(xyzw[0]), float.Parse(xyzw[1]), float.Parse(xyzw[2]), float.Parse(xyzw[3]));
                        foreach (Material m in materials)
                        {
                            m.SetVector(Shader.PropertyToID(set[0]), vector);
                        }
                    }
                    else if (p.type == MaterialProperty.PropType.Color)
                    {
                        float[]  rgb       = new float[3];
                        string[] rgbString = set[1].Split(',');
                        float.TryParse(rgbString[0], out rgb[0]);
                        float.TryParse(rgbString[1], out rgb[1]);
                        float.TryParse(rgbString[2], out rgb[2]);
                        foreach (Material m in materials)
                        {
                            m.SetColor(Shader.PropertyToID(set[0]), new Color(rgb[0], rgb[1], rgb[2]));
                        }
                    }
                }
                else if (set[0] == "render_queue")
                {
                    int q = 0;
                    Debug.Log(set[0] + "," + set[1]);
                    if (int.TryParse(set[1], out q))
                    {
                        foreach (Material m in materials)
                        {
                            m.renderQueue = q;
                        }
                    }
                }
            }
        }
    }