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.
113 lines
5.3 KiB
113 lines
5.3 KiB
#if HAS_VFX_GRAPH |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using UnityEditor.VFX.Block; |
|
using UnityEngine; |
|
|
|
namespace UnityEditor.VFX.URP |
|
{ |
|
[VFXInfo(experimental = true)] |
|
class VFXURPLitQuadStripOutput : VFXAbstractParticleURPLitOutput |
|
{ |
|
protected VFXURPLitQuadStripOutput() : base(true) {} // strips |
|
|
|
public override string name { get { return "Output ParticleStrip URP Lit Quad"; } } |
|
public override string codeGeneratorTemplate { get { return RenderPipeTemplate("VFXParticleLitPlanarPrimitive"); } } |
|
public override VFXTaskType taskType { get { return VFXTaskType.ParticleQuadOutput; } } |
|
public override bool supportsUV { get { return true; } } |
|
|
|
[VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), SerializeField, Tooltip("When enabled, a Normal Bending Factor slider becomes available in the output which can be used to adjust the curvature of the normals.")] |
|
protected bool normalBending = false; |
|
|
|
[VFXSetting, SerializeField, Tooltip("Specifies the way the UVs are interpolated along the strip. They can either be stretched or repeated per segment.")] |
|
private StripTilingMode tilingMode = StripTilingMode.Stretch; |
|
|
|
[VFXSetting, SerializeField, Tooltip("When enabled, uvs for the strips are swapped.")] |
|
protected bool swapUV = false; |
|
|
|
public class NormalBendingProperties |
|
{ |
|
[Range(0, 1), Tooltip("Controls the amount by which the normals will be bent, creating a rounder look.")] |
|
public float normalBendingFactor = 0.1f; |
|
} |
|
|
|
public class CustomUVInputProperties |
|
{ |
|
[Tooltip("Specifies the texture coordinate value (u or v depending on swap UV being enabled) used along the strip.")] |
|
public float texCoord = 0.0f; |
|
} |
|
|
|
protected override IEnumerable<VFXPropertyWithValue> inputProperties |
|
{ |
|
get |
|
{ |
|
var properties = base.inputProperties; |
|
if (normalBending) |
|
properties = properties.Concat(PropertiesFromType(nameof(NormalBendingProperties))); |
|
if (tilingMode == StripTilingMode.Custom) |
|
properties = properties.Concat(PropertiesFromType(nameof(CustomUVInputProperties))); |
|
return properties; |
|
} |
|
} |
|
|
|
public override IEnumerable<VFXAttributeInfo> attributes |
|
{ |
|
get |
|
{ |
|
yield return new VFXAttributeInfo(VFXAttribute.Position, VFXAttributeMode.Read); |
|
if (colorMode != ColorMode.None) |
|
yield return new VFXAttributeInfo(VFXAttribute.Color, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.Alpha, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AxisX, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AxisY, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AxisZ, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AngleX, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AngleY, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.AngleZ, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.PivotX, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.PivotY, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.PivotZ, VFXAttributeMode.Read); |
|
yield return new VFXAttributeInfo(VFXAttribute.Size, VFXAttributeMode.Read); |
|
|
|
if (usesFlipbook) |
|
yield return new VFXAttributeInfo(VFXAttribute.TexIndex, VFXAttributeMode.Read); |
|
} |
|
} |
|
|
|
protected override IEnumerable<VFXNamedExpression> CollectGPUExpressions(IEnumerable<VFXNamedExpression> slotExpressions) |
|
{ |
|
foreach (var exp in base.CollectGPUExpressions(slotExpressions)) |
|
yield return exp; |
|
|
|
if (normalBending) |
|
yield return slotExpressions.First(o => o.name == nameof(NormalBendingProperties.normalBendingFactor)); |
|
if (tilingMode == StripTilingMode.Custom) |
|
yield return slotExpressions.First(o => o.name == nameof(CustomUVInputProperties.texCoord)); |
|
} |
|
|
|
public override IEnumerable<string> additionalDefines |
|
{ |
|
get |
|
{ |
|
foreach (var d in base.additionalDefines) |
|
yield return d; |
|
|
|
if (normalBending) |
|
yield return "USE_NORMAL_BENDING"; |
|
|
|
if (tilingMode == StripTilingMode.Stretch) |
|
yield return "VFX_STRIPS_UV_STRECHED"; |
|
else if (tilingMode == StripTilingMode.RepeatPerSegment) |
|
yield return "VFX_STRIPS_UV_PER_SEGMENT"; |
|
|
|
if (swapUV) |
|
yield return "VFX_STRIPS_SWAP_UV"; |
|
|
|
yield return "FORCE_NORMAL_VARYING"; // To avoid discrepancy between depth and color pass which could cause glitch with ztest |
|
|
|
yield return VFXPlanarPrimitiveHelper.GetShaderDefine(VFXPrimitiveType.Quad); |
|
} |
|
} |
|
} |
|
} |
|
#endif
|
|
|