Files
UnrealEngine/Engine/Plugins/Experimental/DynamicWind/Shaders/Shared/DynamicWindCommon.ush
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

85 lines
2.1 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#define DYNAMIC_WIND_INVALID_BONE_INDEX 65535
#define DYNAMIC_WIND_DIRECTIONALITY_SLICES 8
#ifdef __cplusplus
namespace UE::HLSL
{
#endif //__cplusplus
struct FDynamicWindSkeletonData
{
/** The index of the first element of the FDynamicWindBoneData for this skeleton */
uint BoneDataOffset;
/** The height (in units) of the skeleton */
float SkeletonHeight;
/** How much to attenuate trunk bones in the skeleton (0-1) */
float GustAttenuation;
/** The maximum SimulationGroupIndex value for all bones in the skeleton */
uint MaxSimulationGroupIndex : 31;
/** Whether or not this object is ground cover */
uint bIsGroundCover : 1;
};
struct FDynamicWindBoneData
{
/** The index of this bone's parent bone, in the skeleton */
uint ParentBoneIndex;
/** The wind influence of this bone */
float Influence;
/** The simulation group for this bone */
int SimulationGroupIndex;
/** The length of bone chain that this bone is a member of */
float BoneChainLength;
/** Initial local-space orientation of the bone */
float4 BindPoseRotation;
/** Initial local-space position of the bone */
float3 BindPosePosition;
/** Whether this bone is to be considered part of a tree trunk */
uint bIsTrunkBone;
};
struct FDynamicWindBlockHeader
{
/** Index of the related FDynamicWindSkeletonData for the block */
uint SkeletonDataIndex;
/** Byte offset of the transforms to be written in the transform buffer */
uint BlockDstTransformOffset;
/** Number of bones in this block */
uint BlockNumBones : 8;
/** Index of the first bone (in the skeleton) of the block */
uint BlockBoneOffset : 24;
/** Index of the unique directional anim this block is associated with */
uint BlockDirectionalityIndex : 8;
/** Total number of transforms to be written for this skeleton anim. */
uint TotalTransformCount : 24;
};
#ifdef __cplusplus
} // namespace UE::HLSL
using FDynamicWindSkeletonData = UE::HLSL::FDynamicWindSkeletonData;
using FDynamicWindBoneData = UE::HLSL::FDynamicWindBoneData;
using FDynamicWindBlockHeader = UE::HLSL::FDynamicWindBlockHeader;
#endif //__cplusplus