Files
UnrealEngineUWP/Engine/Shaders/Private/MeshDistanceFieldCommon.ush
tiago costa ad0bd67d38 Store FDFObjectData::WorldToVolume/VolumeToWorld as FLWCInverseMatrix/FLWCMatrix.
- Added LWCHackToFloat to higher level code.
- Converted a few simple usages to work correctly in LWC.

#rb none
#preflight none
#jira none

[CL 19256116 by tiago costa in ue5-main branch]
2022-03-03 17:54:46 -05:00

36 lines
1.4 KiB
Plaintext

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
MeshDistanceFieldCommon.ush
=============================================================================*/
float DistanceToNearestSurfaceForObject(FDFObjectData DFObjectData, float3 WorldPosition, float MaxDistance)
{
float4x4 WorldToVolume = LWCHackToFloat(DFObjectData.WorldToVolume);
float3 VolumePosition = mul(float4(WorldPosition, 1), WorldToVolume).xyz;
float3 ClampedVolumePosition = clamp(VolumePosition, -DFObjectData.VolumePositionExtent, DFObjectData.VolumePositionExtent);
float DistanceToBox = length((VolumePosition - ClampedVolumePosition) * DFObjectData.VolumeToWorldScale);
float DistanceToOccluder = MaxDistance;
BRANCH
if (DistanceToBox < MaxDistance)
{
DistanceToOccluder = DistanceToMeshSurfaceStandalone(ClampedVolumePosition, DFObjectData) * DFObjectData.VolumeScale + DistanceToBox;
// Don't allow negative SDF distance to stick out of the bounding box
if (DistanceToBox > 0.0f)
{
DistanceToOccluder = max(DistanceToOccluder, DistanceToBox);
}
}
return DistanceToOccluder;
}
float DistanceToNearestSurfaceForObject(uint ObjectIndex, float3 WorldPosition, float MaxDistance)
{
FDFObjectData DFObjectData = LoadDFObjectData(ObjectIndex);
return DistanceToNearestSurfaceForObject(DFObjectData, WorldPosition, MaxDistance);
}