123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #if HAS_VFX_GRAPH
- using System.Collections.Generic;
- using System.Linq;
-
- using UnityEngine;
-
- namespace UnityEditor.VFX.URP
- {
- [VFXHelpURL("Context-OutputPrimitive")]
- [VFXInfo(name = "Output ParticleStrip|URP Lit|Quad", category = "#3Output Strip", experimental = true)]
- class VFXURPLitQuadStripOutput : VFXAbstractParticleURPLitOutput
- {
- protected VFXURPLitQuadStripOutput() : base(true) {} // strips
-
- public override string name => "Output ParticleStrip".AppendLabel("URP Lit").AppendLabel("Quad");
- public override string codeGeneratorTemplate => RenderPipeTemplate("VFXParticleLitPlanarPrimitive");
- public override VFXTaskType taskType => VFXTaskType.ParticleQuadOutput;
- public override bool supportsUV => 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);
-
- foreach (var attribute in flipbookAttributes)
- yield return attribute;
- }
- }
-
- 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
|