145 lines
6.8 KiB
C#
145 lines
6.8 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
public class LiquidSurfaceShaderGUI_Simplified : ShaderGUI
|
|
{
|
|
private static MaterialProperty P(string n, MaterialProperty[] p) => FindProperty(n, p, false);
|
|
|
|
public override void OnGUI(MaterialEditor m, MaterialProperty[] props)
|
|
{
|
|
var surface = P("_SurfaceType", props);
|
|
var mainTex = P("_MainTex", props);
|
|
var baseCol = P("_BaseColor", props);
|
|
|
|
// Water
|
|
var tint = P("_WaterTint", props);
|
|
var depth = P("_DepthStrength", props);
|
|
|
|
var waveAmp = P("_WaveAmplitude", props);
|
|
var waveLen = P("_WaveLength", props);
|
|
var waveSpd = P("_WaveSpeed", props);
|
|
var waveDir = P("_WaveDirection", props);
|
|
|
|
var nTex = P("_NormalMap", props);
|
|
var nStr = P("_NormalStrength", props);
|
|
var sDet = P("_SurfaceDetail", props);
|
|
|
|
var refr = P("_RefractionStrength", props);
|
|
var fres = P("_FresnelStrength", props);
|
|
|
|
var foamTex = P("_FoamTex", props);
|
|
var foamStr = P("_FoamStrength", props);
|
|
var foamBias = P("_FoamBias", props);
|
|
|
|
// NEW: UV scroll speeds
|
|
var n1Spd = P("_WaterNormal1Speed", props);
|
|
var n2Spd = P("_WaterNormal2Speed", props);
|
|
var foamSpd = P("_FoamScrollSpeed", props);
|
|
|
|
var shoreStr = P("_ShorelineStrength", props);
|
|
var shoreSharp= P("_ShorelineSharpness", props);
|
|
var absorbStr = P("_AbsorptionStrength", props);
|
|
|
|
// Lava
|
|
var emis = P("_EmissionColor", props);
|
|
var vScale = P("_VoronoiScale", props);
|
|
var vThr = P("_VoronoiThreshold", props);
|
|
var crackG = P("_LavaCrackGlow", props);
|
|
var edgeG = P("_LavaEdgeGlow", props);
|
|
var bDen = P("_BubbleDensity", props);
|
|
var bFlow = P("_BubbleFlow", props);
|
|
var bStr = P("_BubbleStrength", props);
|
|
var bFade = P("_BubbleFade", props);
|
|
|
|
// Vertex distortion
|
|
var vStr = P("_VertexDistortStrength", props);
|
|
var vSpd = P("_VertexDistortSpeed", props);
|
|
|
|
EditorGUILayout.LabelField("Universal Liquid Surface (Simplified)", EditorStyles.boldLabel);
|
|
if (surface != null) m.ShaderProperty(surface, "Surface Type");
|
|
EditorGUILayout.Space();
|
|
|
|
if (mainTex != null && baseCol != null)
|
|
m.TexturePropertySingleLine(new GUIContent("Main Texture"), mainTex, baseCol);
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
int mode = surface != null ? (int)surface.floatValue : 0;
|
|
switch (mode)
|
|
{
|
|
case 0: // Water
|
|
EditorGUILayout.LabelField("Color & Depth", EditorStyles.boldLabel);
|
|
if (tint != null) m.ShaderProperty(tint, "Water Tint");
|
|
if (depth != null) m.ShaderProperty(depth, "Depth Strength");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Waves", EditorStyles.boldLabel);
|
|
if (waveAmp != null) m.ShaderProperty(waveAmp, "Amplitude");
|
|
if (waveLen != null) m.ShaderProperty(waveLen, "Length");
|
|
if (waveSpd != null) m.ShaderProperty(waveSpd, "Speed");
|
|
if (waveDir != null) m.ShaderProperty(waveDir, "Direction X,Y");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Surface", EditorStyles.boldLabel);
|
|
if (nTex != null) m.TexturePropertySingleLine(new GUIContent("Normal Map"), nTex);
|
|
if (nStr != null) m.ShaderProperty(nStr, "Normal Strength");
|
|
if (sDet != null) m.ShaderProperty(sDet, "Surface Detail");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Optics", EditorStyles.boldLabel);
|
|
if (refr != null) m.ShaderProperty(refr, "Refraction Strength");
|
|
if (fres != null) m.ShaderProperty(fres, "Fresnel Strength");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Foam", EditorStyles.boldLabel);
|
|
if (foamTex != null) m.TexturePropertySingleLine(new GUIContent("Foam Texture"), foamTex, foamStr);
|
|
if (foamBias != null) m.ShaderProperty(foamBias, "Foam Bias");
|
|
if (shoreStr != null) m.ShaderProperty(shoreStr, "Shoreline Strength");
|
|
if (shoreSharp!= null) m.ShaderProperty(shoreSharp, "Shoreline Sharpness");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("UV Scrolling", EditorStyles.boldLabel);
|
|
if (n1Spd != null) m.ShaderProperty(n1Spd, "Normal 1 Speed (X,Y)");
|
|
if (n2Spd != null) m.ShaderProperty(n2Spd, "Normal 2 Speed (X,Y)");
|
|
if (foamSpd != null) m.ShaderProperty(foamSpd, "Foam Scroll Speed (X,Y)");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Depth Absorption", EditorStyles.boldLabel);
|
|
if (absorbStr != null) m.ShaderProperty(absorbStr, "Absorption Strength");
|
|
break;
|
|
|
|
case 1: // Lava
|
|
EditorGUILayout.LabelField("Lava Settings", EditorStyles.boldLabel);
|
|
if (emis != null) m.ShaderProperty(emis, "Emission Color");
|
|
if (vScale != null) m.ShaderProperty(vScale, "Voronoi Scale");
|
|
if (vThr != null) m.ShaderProperty(vThr, "Voronoi Threshold");
|
|
if (crackG != null) m.ShaderProperty(crackG, "Crack Glow");
|
|
if (edgeG != null) m.ShaderProperty(edgeG, "Edge Glow");
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Procedural Bubbles", EditorStyles.boldLabel);
|
|
if (bDen != null) m.ShaderProperty(bDen, "Bubble Density");
|
|
if (bFlow != null) m.ShaderProperty(bFlow, "Bubble Flow Speed");
|
|
if (bStr != null) m.ShaderProperty(bStr, "Bubble Strength");
|
|
if (bFade != null) m.ShaderProperty(bFade, "Bubble Fade Sharpness");
|
|
break;
|
|
|
|
case 2: // Ice
|
|
EditorGUILayout.LabelField("Ice Settings", EditorStyles.boldLabel);
|
|
EditorGUILayout.HelpBox("Ice uses MainTex + BaseColor + Fresnel glow.", MessageType.Info);
|
|
break;
|
|
|
|
case 3: // River
|
|
EditorGUILayout.LabelField("River Settings", EditorStyles.boldLabel);
|
|
if (foamTex != null) m.TexturePropertySingleLine(new GUIContent("Foam Texture"), foamTex, foamStr);
|
|
if (foamSpd != null) m.ShaderProperty(foamSpd, "Foam Scroll Speed (X,Y)");
|
|
break;
|
|
}
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Vertex Distortion (Global)", EditorStyles.boldLabel);
|
|
if (vStr != null) m.ShaderProperty(vStr, "Distortion Strength");
|
|
if (vSpd != null) m.ShaderProperty(vSpd, "Distortion Speed");
|
|
}
|
|
}
|