You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.9 KiB
161 lines
5.9 KiB
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Experimental.Rendering;
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition
|
|
{
|
|
[CanEditMultipleObjects]
|
|
[CustomEditor(typeof(CloudLayer))]
|
|
class CloudLayerEditor : VolumeComponentEditor
|
|
{
|
|
struct CloudMapParameter
|
|
{
|
|
public SerializedDataParameter cloudMap;
|
|
public SerializedDataParameter[] opacities;
|
|
|
|
public SerializedDataParameter altitude;
|
|
public SerializedDataParameter rotation;
|
|
public SerializedDataParameter tint;
|
|
public SerializedDataParameter exposure;
|
|
|
|
public SerializedDataParameter distortion;
|
|
public SerializedDataParameter scrollOrientation;
|
|
public SerializedDataParameter scrollSpeed;
|
|
public SerializedDataParameter flowmap;
|
|
|
|
public SerializedDataParameter raymarching;
|
|
public SerializedDataParameter steps;
|
|
public SerializedDataParameter thickness;
|
|
public SerializedDataParameter probeDimmer;
|
|
|
|
public SerializedDataParameter castShadows;
|
|
}
|
|
|
|
CloudMapParameter UnpackCloudMap(SerializedProperty serializedProperty)
|
|
{
|
|
var p = new RelativePropertyFetcher<CloudLayer.CloudMap>(serializedProperty);
|
|
|
|
return new CloudMapParameter
|
|
{
|
|
cloudMap = Unpack(p.Find(x => x.cloudMap)),
|
|
opacities = new SerializedDataParameter[]
|
|
{
|
|
Unpack(p.Find(x => x.opacityR)),
|
|
Unpack(p.Find(x => x.opacityG)),
|
|
Unpack(p.Find(x => x.opacityB)),
|
|
Unpack(p.Find(x => x.opacityA))
|
|
},
|
|
|
|
altitude = Unpack(p.Find(x => x.altitude)),
|
|
rotation = Unpack(p.Find(x => x.rotation)),
|
|
tint = Unpack(p.Find(x => x.tint)),
|
|
exposure = Unpack(p.Find(x => x.exposure)),
|
|
|
|
distortion = Unpack(p.Find(x => x.distortionMode)),
|
|
scrollOrientation = Unpack(p.Find(x => x.scrollOrientation)),
|
|
scrollSpeed = Unpack(p.Find(x => x.scrollSpeed)),
|
|
flowmap = Unpack(p.Find(x => x.flowmap)),
|
|
|
|
raymarching = Unpack(p.Find(x => x.lighting)),
|
|
steps = Unpack(p.Find(x => x.steps)),
|
|
thickness = Unpack(p.Find(x => x.thickness)),
|
|
probeDimmer = Unpack(p.Find(x => x.ambientProbeDimmer)),
|
|
castShadows = Unpack(p.Find(x => x.castShadows)),
|
|
};
|
|
}
|
|
|
|
SerializedDataParameter m_Opacity, m_UpperHemisphereOnly, m_LayerCount;
|
|
SerializedDataParameter m_Resolution, m_ShadowResolution;
|
|
SerializedDataParameter m_ShadowMultiplier, m_ShadowTint, m_ShadowSize;
|
|
CloudMapParameter[] m_Layers;
|
|
|
|
public override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
|
|
var o = new PropertyFetcher<CloudLayer>(serializedObject);
|
|
|
|
m_Opacity = Unpack(o.Find(x => x.opacity));
|
|
m_UpperHemisphereOnly = Unpack(o.Find(x => x.upperHemisphereOnly));
|
|
m_LayerCount = Unpack(o.Find(x => x.layers));
|
|
m_Resolution = Unpack(o.Find(x => x.resolution));
|
|
|
|
m_ShadowMultiplier = Unpack(o.Find(x => x.shadowMultiplier));
|
|
m_ShadowTint = Unpack(o.Find(x => x.shadowTint));
|
|
m_ShadowResolution = Unpack(o.Find(x => x.shadowResolution));
|
|
m_ShadowSize = Unpack(o.Find(x => x.shadowSize));
|
|
|
|
m_Layers = new CloudMapParameter[]
|
|
{
|
|
UnpackCloudMap(o.Find(x => x.layerA)),
|
|
UnpackCloudMap(o.Find(x => x.layerB))
|
|
};
|
|
}
|
|
|
|
void PropertyField(CloudMapParameter map, string label)
|
|
{
|
|
DrawHeader(label);
|
|
|
|
PropertyField(map.cloudMap);
|
|
using (new IndentLevelScope())
|
|
{
|
|
for (int i = 0; i < 4; i++)
|
|
PropertyField(map.opacities[i]);
|
|
}
|
|
|
|
PropertyField(map.altitude);
|
|
PropertyField(map.rotation);
|
|
PropertyField(map.tint);
|
|
PropertyField(map.exposure);
|
|
|
|
PropertyField(map.distortion);
|
|
if (map.distortion.value.intValue != (int)CloudDistortionMode.None)
|
|
{
|
|
using (new IndentLevelScope())
|
|
{
|
|
PropertyField(map.scrollOrientation);
|
|
PropertyField(map.scrollSpeed);
|
|
if (map.distortion.value.intValue == (int)CloudDistortionMode.Flowmap)
|
|
{
|
|
PropertyField(map.flowmap);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
PropertyField(map.raymarching);
|
|
using (new IndentLevelScope())
|
|
{
|
|
PropertyField(map.steps);
|
|
PropertyField(map.thickness);
|
|
PropertyField(map.probeDimmer);
|
|
}
|
|
PropertyField(map.castShadows);
|
|
}
|
|
|
|
bool CastShadows => m_Layers[0].castShadows.value.boolValue || (m_LayerCount.value.intValue == (int)CloudMapMode.Double && m_Layers[1].castShadows.value.boolValue);
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
PropertyField(m_Opacity);
|
|
if (showAdditionalProperties)
|
|
PropertyField(m_UpperHemisphereOnly);
|
|
PropertyField(m_LayerCount);
|
|
if (showAdditionalProperties)
|
|
PropertyField(m_Resolution);
|
|
|
|
PropertyField(m_Layers[0], "Layer A");
|
|
if (m_LayerCount.value.intValue == (int)CloudMapMode.Double)
|
|
PropertyField(m_Layers[1], "Layer B");
|
|
|
|
PropertyField(m_ShadowMultiplier);
|
|
PropertyField(m_ShadowTint);
|
|
if (showAdditionalProperties)
|
|
PropertyField(m_ShadowResolution);
|
|
|
|
PropertyField(m_ShadowSize);
|
|
}
|
|
}
|
|
}
|