Ejemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        serObj.Update();

        waterBase = (FluvioWaterBase)serObj.targetObject;
        oceanBase = ((FluvioWaterBase)serObj.targetObject).gameObject;
        if (!oceanBase)
        {
            return;
        }

        GUILayout.Label("This script helps adjusting water material properties", EditorStyles.miniBoldLabel);

        EditorGUILayout.PropertyField(sharedMaterial, new GUIContent("Material"));
        oceanMaterial = (Material)sharedMaterial.objectReferenceValue;

        if (!oceanMaterial)
        {
            sharedMaterial.objectReferenceValue = (Object)FluvioWaterEditorUtility.LocateValidWaterMaterial(oceanBase.transform);
            serObj.ApplyModifiedProperties();
            oceanMaterial = (Material)sharedMaterial.objectReferenceValue;
            if (!oceanMaterial)
            {
                return;
            }
        }

        EditorGUILayout.Separator();

        GUILayout.Label("Overall Quality", EditorStyles.boldLabel);
        EditorGUILayout.PropertyField(waterQuality, new GUIContent("Quality"));
        EditorGUILayout.PropertyField(edgeBlend, new GUIContent("Edge blend?"));

        if (waterQuality.intValue > (int)FluvioWaterQuality.Low && !SystemInfo.supportsRenderTextures)
        {
            EditorGUILayout.HelpBox("Water features not supported", MessageType.Warning);
        }
        if (edgeBlend.boolValue && !SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.Depth))
        {
            EditorGUILayout.HelpBox("Edge blend not supported", MessageType.Warning);
        }

        EditorGUILayout.Separator();

        bool hasShore = oceanMaterial.HasProperty("_ShoreTex");

        GUILayout.Label("Main Colors", EditorStyles.boldLabel);
        GUILayout.Label("Alpha values define blending with realtime textures", EditorStyles.miniBoldLabel);

        FluvioWaterEditorUtility.SetMaterialColor("_BaseColor", EditorGUILayout.ColorField("Refraction", FluvioWaterEditorUtility.GetMaterialColor("_BaseColor", oceanMaterial)), oceanMaterial);
        FluvioWaterEditorUtility.SetMaterialColor("_ReflectionColor", EditorGUILayout.ColorField("Reflection", FluvioWaterEditorUtility.GetMaterialColor("_ReflectionColor", oceanMaterial)), oceanMaterial);

        EditorGUILayout.Separator();

        GUILayout.Label("Main Textures", EditorStyles.boldLabel);
        GUILayout.Label("Used for small waves (bumps), foam and white caps", EditorStyles.miniBoldLabel);

        FluvioWaterEditorUtility.SetMaterialTexture("_BumpMap", (Texture)EditorGUILayout.ObjectField("Normals", FluvioWaterEditorUtility.GetMaterialTexture("_BumpMap", waterBase.sharedMaterial), typeof(Texture), false), waterBase.sharedMaterial);
        if (hasShore)
        {
            FluvioWaterEditorUtility.SetMaterialTexture("_ShoreTex", (Texture)EditorGUILayout.ObjectField("Shore & Foam", FluvioWaterEditorUtility.GetMaterialTexture("_ShoreTex", waterBase.sharedMaterial), typeof(Texture), false), waterBase.sharedMaterial);
        }

        Vector4 animationTiling;
        Vector4 animationDirection;

        Vector2 firstTiling;
        Vector2 secondTiling;
        Vector2 firstDirection;
        Vector2 secondDirection;

        animationTiling    = FluvioWaterEditorUtility.GetMaterialVector("_BumpTiling", oceanMaterial);
        animationDirection = FluvioWaterEditorUtility.GetMaterialVector("_BumpDirection", oceanMaterial);

        firstTiling  = new Vector2(animationTiling.x * 100.0F, animationTiling.y * 100.0F);
        secondTiling = new Vector2(animationTiling.z * 100.0F, animationTiling.w * 100.0F);

        firstTiling  = EditorGUILayout.Vector2Field("Tiling 1", firstTiling);
        secondTiling = EditorGUILayout.Vector2Field("Tiling 2", secondTiling);

        //firstTiling.x = EditorGUILayout.FloatField("1st Tiling U", firstTiling.x);
        //firstTiling.y = EditorGUILayout.FloatField("1st Tiling V", firstTiling.y);
        //secondTiling.x = EditorGUILayout.FloatField("2nd Tiling U", secondTiling.x);
        //secondTiling.y = EditorGUILayout.FloatField("2nd Tiling V", secondTiling.y);

        firstDirection  = new Vector2(animationDirection.x, animationDirection.y);
        secondDirection = new Vector2(animationDirection.z, animationDirection.w);

        //firstDirection.x = EditorGUILayout.FloatField("1st Animation U", firstDirection.x);
        //firstDirection.y = EditorGUILayout.FloatField("1st Animation V", firstDirection.y);
        //secondDirection.x = EditorGUILayout.FloatField("2nd Animation U", secondDirection.x);
        //secondDirection.y = EditorGUILayout.FloatField("2nd Animation V", secondDirection.y);

        firstDirection  = EditorGUILayout.Vector2Field("Direction 1", firstDirection);
        secondDirection = EditorGUILayout.Vector2Field("Direction 2", secondDirection);

        animationTiling    = new Vector4(firstTiling.x / 100.0F, firstTiling.y / 100.0F, secondTiling.x / 100.0F, secondTiling.y / 100.0F);
        animationDirection = new Vector4(firstDirection.x, firstDirection.y, secondDirection.x, secondDirection.y);

        FluvioWaterEditorUtility.SetMaterialVector("_BumpTiling", animationTiling, oceanMaterial);
        FluvioWaterEditorUtility.SetMaterialVector("_BumpDirection", animationDirection, oceanMaterial);

        Vector4 displacementParameter = FluvioWaterEditorUtility.GetMaterialVector("_DistortParams", oceanMaterial);
        Vector4 fade = FluvioWaterEditorUtility.GetMaterialVector("_InvFadeParemeter", oceanMaterial);

        EditorGUILayout.Separator();

        GUILayout.Label("Normals", EditorStyles.boldLabel);
        GUILayout.Label("Displacement for fresnel, specular and reflection/refraction", EditorStyles.miniBoldLabel);

        float gerstnerNormalIntensity = FluvioWaterEditorUtility.GetMaterialFloat("_GerstnerIntensity", oceanMaterial);

        gerstnerNormalIntensity = EditorGUILayout.Slider("Per Vertex", gerstnerNormalIntensity, -2.5F, 2.5F);
        FluvioWaterEditorUtility.SetMaterialFloat("_GerstnerIntensity", gerstnerNormalIntensity, oceanMaterial);

        displacementParameter.x = EditorGUILayout.Slider("Per Pixel", displacementParameter.x, -4.0F, 4.0F);
        displacementParameter.y = EditorGUILayout.Slider("Distortion", displacementParameter.y, -0.5F, 0.5F);
        // fade.z = EditorGUILayout.Slider("Distance fade", fade.z, 0.0f, 0.5f);

        EditorGUILayout.Separator();

        GUILayout.Label("Fresnel", EditorStyles.boldLabel);
        GUILayout.Label("Defines reflection to refraction relation", EditorStyles.miniBoldLabel);

        if (!oceanMaterial.HasProperty("_Fresnel"))
        {
            if (oceanMaterial.HasProperty("_FresnelScale"))
            {
                float fresnelScale = EditorGUILayout.Slider("Intensity", FluvioWaterEditorUtility.GetMaterialFloat("_FresnelScale", oceanMaterial), 0.1F, 4.0F);
                FluvioWaterEditorUtility.SetMaterialFloat("_FresnelScale", fresnelScale, oceanMaterial);
            }
            displacementParameter.z = EditorGUILayout.Slider("Power", displacementParameter.z, 0.1F, 10.0F);
            displacementParameter.w = EditorGUILayout.Slider("Bias", displacementParameter.w, -3.0F, 3.0F);
        }
        else
        {
            Texture fresnelTex = (Texture)EditorGUILayout.ObjectField(
                "Ramp",
                (Texture)FluvioWaterEditorUtility.GetMaterialTexture("_Fresnel",
                                                                     oceanMaterial),
                typeof(Texture),
                false);
            FluvioWaterEditorUtility.SetMaterialTexture("_Fresnel", fresnelTex, oceanMaterial);
        }

        EditorGUILayout.Separator();

        FluvioWaterEditorUtility.SetMaterialVector("_DistortParams", displacementParameter, oceanMaterial);

        if (edgeBlend.boolValue)
        {
            GUILayout.Label("Fading", EditorStyles.boldLabel);

            fade.x = EditorGUILayout.Slider("Edge fade", fade.x, 0.001f, 3.0f);
            if (hasShore)
            {
                fade.y = EditorGUILayout.Slider("Shore fade", fade.y, 0.001f, 3.0f);
            }
            fade.w = EditorGUILayout.Slider("Extinction fade", fade.w, 0.0f, 2.5f);

            FluvioWaterEditorUtility.SetMaterialVector("_InvFadeParemeter", fade, oceanMaterial);
        }
        EditorGUILayout.Separator();

        if (oceanMaterial.HasProperty("_Foam"))
        {
            GUILayout.Label("Foam", EditorStyles.boldLabel);

            Vector4 foam = FluvioWaterEditorUtility.GetMaterialVector("_Foam", oceanMaterial);

            foam.x = EditorGUILayout.Slider("Intensity", foam.x, 0.0F, 1.0F);
            foam.y = EditorGUILayout.Slider("Cutoff", foam.y, 0.0F, 1.0F);

            FluvioWaterEditorUtility.SetMaterialVector("_Foam", foam, oceanMaterial);
        }

        serObj.ApplyModifiedProperties();
    }
    public override void OnInspectorGUI()
    {
        serObj.Update();

        GameObject      go = ((FluvioGerstnerDisplace)serObj.targetObject).gameObject;
        FluvioWaterBase wb = (FluvioWaterBase)go.GetComponent(typeof(FluvioWaterBase));
        Material        sharedWaterMaterial = wb.sharedMaterial;

        GUILayout.Label("Animates vertices using up 4 generated waves", EditorStyles.miniBoldLabel);

        if (sharedWaterMaterial)
        {
            Vector4 amplitude   = FluvioWaterEditorUtility.GetMaterialVector("_GAmplitude", sharedWaterMaterial);
            Vector4 frequency   = FluvioWaterEditorUtility.GetMaterialVector("_GFrequency", sharedWaterMaterial);
            Vector4 steepness   = FluvioWaterEditorUtility.GetMaterialVector("_GSteepness", sharedWaterMaterial);
            Vector4 speed       = FluvioWaterEditorUtility.GetMaterialVector("_GSpeed", sharedWaterMaterial);
            Vector4 directionAB = FluvioWaterEditorUtility.GetMaterialVector("_GDirectionAB", sharedWaterMaterial);
            Vector4 directionCD = FluvioWaterEditorUtility.GetMaterialVector("_GDirectionCD", sharedWaterMaterial);

            amplitude   = EditorGUILayout.Vector4Field("Amplitude (Height offset)", amplitude);
            frequency   = EditorGUILayout.Vector4Field("Frequency (Tiling)", frequency);
            steepness   = EditorGUILayout.Vector4Field("Steepness", steepness);
            speed       = EditorGUILayout.Vector4Field("Speed", speed);
            directionAB = EditorGUILayout.Vector4Field("Direction scale (Wave 1 (X,Y) and 2 (Z,W))", directionAB);
            directionCD = EditorGUILayout.Vector4Field("Direction scale (Wave 3 (X,Y) and 4 (Z,W))", directionCD);

            if (GUI.changed)
            {
                FluvioWaterEditorUtility.SetMaterialVector("_GAmplitude", amplitude, sharedWaterMaterial);
                FluvioWaterEditorUtility.SetMaterialVector("_GFrequency", frequency, sharedWaterMaterial);
                FluvioWaterEditorUtility.SetMaterialVector("_GSteepness", steepness, sharedWaterMaterial);
                FluvioWaterEditorUtility.SetMaterialVector("_GSpeed", speed, sharedWaterMaterial);
                FluvioWaterEditorUtility.SetMaterialVector("_GDirectionAB", directionAB, sharedWaterMaterial);
                FluvioWaterEditorUtility.SetMaterialVector("_GDirectionCD", directionCD, sharedWaterMaterial);
            }

            /*
             *
             * Vector4 animationTiling = WaterEditorUtility.GetMaterialVector("_AnimationTiling", sharedWaterMaterial);
             * Vector4 animationDirection = WaterEditorUtility.GetMaterialVector("_AnimationDirection", sharedWaterMaterial);
             *
             * float firstTilingU = animationTiling.x*100.0F;
             * float firstTilingV = animationTiling.y*100.0F;
             * float firstDirectionU = animationDirection.x;
             * float firstDirectionV = animationDirection.y;
             *
             * float secondTilingU = animationTiling.z*100.0F;
             * float secondTilingV = animationTiling.w*100.0F;
             * float secondDirectionU = animationDirection.z;
             * float secondDirectionV = animationDirection.w;
             *
             *
             * EditorGUILayout.BeginHorizontal ();
             * firstTilingU = EditorGUILayout.FloatField("First Tiling U", firstTilingU);
             * firstTilingV = EditorGUILayout.FloatField("First Tiling V", firstTilingV);
             * EditorGUILayout.EndHorizontal ();
             * EditorGUILayout.BeginHorizontal ();
             * secondTilingU = EditorGUILayout.FloatField("Second Tiling U", secondTilingU);
             * secondTilingV = EditorGUILayout.FloatField("Second Tiling V", secondTilingV);
             * EditorGUILayout.EndHorizontal ();
             *
             * EditorGUILayout.BeginHorizontal ();
             * firstDirectionU = EditorGUILayout.FloatField("1st Animation U", firstDirectionU);
             * firstDirectionV = EditorGUILayout.FloatField("1st Animation V", firstDirectionV);
             * EditorGUILayout.EndHorizontal ();
             * EditorGUILayout.BeginHorizontal ();
             * secondDirectionU = EditorGUILayout.FloatField("2nd Animation U", secondDirectionU);
             * secondDirectionV = EditorGUILayout.FloatField("2nd Animation V", secondDirectionV);
             * EditorGUILayout.EndHorizontal ();
             *
             * animationDirection = new Vector4(firstDirectionU,firstDirectionV, secondDirectionU,secondDirectionV);
             * animationTiling = new Vector4(firstTilingU/100.0F,firstTilingV/100.0F, secondTilingU/100.0F,secondTilingV/100.0F);
             *
             * WaterEditorUtility.SetMaterialVector("_AnimationTiling", animationTiling, sharedWaterMaterial);
             * WaterEditorUtility.SetMaterialVector("_AnimationDirection", animationDirection, sharedWaterMaterial);
             *
             * EditorGUILayout.Separator ();
             *
             * GUILayout.Label ("Displacement Strength", EditorStyles.boldLabel);
             *
             * float heightDisplacement = WaterEditorUtility.GetMaterialFloat("_HeightDisplacement", sharedWaterMaterial);
             *
             * heightDisplacement = EditorGUILayout.Slider("Height", heightDisplacement, 0.0F, 5.0F);
             * WaterEditorUtility.SetMaterialFloat("_HeightDisplacement", heightDisplacement, sharedWaterMaterial);
             */
        }

        serObj.ApplyModifiedProperties();
    }