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.
63 lines
2.9 KiB
63 lines
2.9 KiB
using System.Collections.Generic;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.VFX.Block
|
|
{
|
|
sealed class CollisionSDFDeprecated : CollisionBase
|
|
{
|
|
public override string name => GetNamePrefix(behavior) + "Signed Distance Field";
|
|
|
|
public class InputProperties
|
|
{
|
|
public Texture3D DistanceField = VFXResources.defaultResources.signedDistanceField;
|
|
public OrientedBox FieldTransform = OrientedBox.defaultValue;
|
|
}
|
|
|
|
public override void Sanitize(int version)
|
|
{
|
|
var newCollisionSDF = ScriptableObject.CreateInstance<CollisionShape>();
|
|
SanitizeHelper.MigrateBlockCollisionShapeToComposed(newCollisionSDF, this, CollisionShapeBase.Type.SignedDistanceField);
|
|
ReplaceModel(newCollisionSDF, this);
|
|
}
|
|
|
|
public override IEnumerable<VFXNamedExpression> parameters
|
|
{
|
|
get
|
|
{
|
|
foreach (var input in base.parameters)
|
|
yield return input;
|
|
|
|
VFXExpression transform = null;
|
|
VFXExpression SDF = null;
|
|
foreach (var input in GetExpressionsFromSlots(this))
|
|
{
|
|
if (input.name == "FieldTransform")
|
|
{
|
|
transform = input.exp;
|
|
VFXExpression scale = new VFXExpressionAbs(new VFXExpressionExtractScaleFromMatrix(transform));
|
|
yield return new VFXNamedExpression(VFXOperatorUtility.Reciprocal(scale), "invScale");
|
|
yield return new VFXNamedExpression(VFXOperatorUtility.IsTRSMatrixZeroScaled(transform), "isZeroScaled");
|
|
yield return new VFXNamedExpression(new VFXExpressionInverseTRSMatrix(transform), "InvFieldTransform");
|
|
}
|
|
|
|
if (input.name == "DistanceField")
|
|
SDF = input.exp;
|
|
|
|
}
|
|
var w = new VFXExpressionCastUintToFloat(new VFXExpressionTextureWidth(SDF));
|
|
var h = new VFXExpressionCastUintToFloat(new VFXExpressionTextureHeight(SDF));
|
|
var d = new VFXExpressionCastUintToFloat(new VFXExpressionTextureDepth(SDF));
|
|
var uvStep = VFXOperatorUtility.Reciprocal(new VFXExpressionCombine(w, h, d));
|
|
var maxDim = VFXOperatorUtility.Max3(w, h, d);
|
|
var textureDimScale = uvStep * new VFXExpressionCombine(maxDim, maxDim, maxDim);
|
|
var textureDimInvScale = VFXOperatorUtility.Reciprocal(textureDimScale);
|
|
var stepSize = VFXOperatorUtility.Reciprocal(maxDim);
|
|
yield return new VFXNamedExpression(uvStep, "uvStep");
|
|
yield return new VFXNamedExpression(textureDimScale, "textureDimScale");
|
|
yield return new VFXNamedExpression(textureDimInvScale, "textureDimInvScale");
|
|
yield return new VFXNamedExpression(stepSize, "stepSizeMeter");
|
|
}
|
|
}
|
|
}
|
|
}
|