Streamingle_URP/Assets/External/NiloToonURP/Runtime/Volume/NiloToonScreenSpaceOutlineV2ControlVolume.cs

68 lines
4.1 KiB
C#

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.Serialization;
namespace NiloToon.NiloToonURP
{
[System.Serializable, VolumeComponentMenu("NiloToon/Hidden/Screen Space Outline V2 (NiloToon)")]
public class NiloToonScreenSpaceOutlineV2ControlVolume : VolumeComponent, IPostProcessComponent
{
[Header("WIP code. It will not trigger rendering, don't use this volume now.")]
[Header("--------------------------")]
[Header("Require enable ScreenSpace outline in NiloToonAllInOne renderer feature in order for this volume to become effective.")]
[Header("*In Camera, turn on Temporal Anti-aliasing(TAA) is critical for screen space outline to look stable when camera moves.")]
[Header("--------------------------")]
[Header("Intensity")]
public ClampedFloatParameter intensity = new ClampedFloatParameter(0, 0, 1);
public ClampedFloatParameter intensityForCharacter = new ClampedFloatParameter(1, 0, 1);
public ClampedFloatParameter intensityForEnvironment = new ClampedFloatParameter(1, 0, 1);
[Header("Width")]
public ClampedFloatParameter widthMultiplier = new ClampedFloatParameter(1, 0, 10f);
public ClampedFloatParameter widthMultiplierForCharacter = new ClampedFloatParameter(1, 0, 10f);
public ClampedFloatParameter widthMultiplierForEnvironment = new ClampedFloatParameter(1, 0, 10f);
public ClampedFloatParameter extraWidthMultiplierForXR = new ClampedFloatParameter(0.2f, 0, 10f);
[Header("Tint Color")]
public ColorParameter outlineTintColor = new ColorParameter(Color.white, false, false, true);
public ColorParameter outlineTintColorForChar = new ColorParameter(Color.white, false, false, true);
public ColorParameter outlineTintColorForEnvi = new ColorParameter(Color.white, false, false, true);
[Header("Edge: Geometry Edge")]
public BoolParameter drawGeometryEdgeOutline = new BoolParameter(true);
public BoolParameter drawGeometryEdgeOutlineForChar = new BoolParameter(true);
public BoolParameter drawGeometryEdgeOutlineForEnvi = new BoolParameter(true);
public ClampedFloatParameter geometryEdgeThreshold = new ClampedFloatParameter(1, 0, 100f);
public ClampedFloatParameter geometryEdgeThresholdForCharacter = new ClampedFloatParameter(1, 0f, 100f);
public ClampedFloatParameter geometryEdgeThresholdForEnvironment = new ClampedFloatParameter(1, 0f, 100f);
[Header("Edge: Normal Angle")]
public BoolParameter drawNormalAngleOutline = new BoolParameter(true);
public BoolParameter drawNormalAngleOutlineForChar = new BoolParameter(true);
public BoolParameter drawNormalAngleOutlineForEnvi = new BoolParameter(true);
public ClampedFloatParameter normalAngleMin = new ClampedFloatParameter(40, 0, 180);
public ClampedFloatParameter normalAngleMinForCharacter = new ClampedFloatParameter(40, 0, 180f);
public ClampedFloatParameter normalAngleMinForEnvironment = new ClampedFloatParameter(40, 0, 180f);
public ClampedFloatParameter normalAngleMax = new ClampedFloatParameter(180, 0, 180);
public ClampedFloatParameter normalAngleMaxForCharacter = new ClampedFloatParameter(180, 0, 180f);
public ClampedFloatParameter normalAngleMaxForEnvironment = new ClampedFloatParameter(180, 0, 180f);
[Header("Edge: Material ID Boundary (Character only)")]
public BoolParameter drawMaterialBoundaryOutline = new BoolParameter(true);
[Header("Edge: Custom ID Boundary (Character only)")]
public BoolParameter drawCustomIDBoundaryOutline = new BoolParameter(true);
[Header("Edge: Wireframe")]
public BoolParameter drawWireframeOutline = new BoolParameter(false);
public bool IsActive() =>
(intensity.value > 0.0f && widthMultiplier.value > 0.0f) &&
(drawGeometryEdgeOutline.value || drawNormalAngleOutline.value || drawMaterialBoundaryOutline.value || drawCustomIDBoundaryOutline.value || drawWireframeOutline.value);
public bool IsTileCompatible() => false;
}
}