Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
HairApplyGlobalPose.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2026 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5void ApplyGlobalPose(JPH_IN_OUT(JPH_HairPosition) ioPos, float3 inRestPosition, JPH_Quat inRestOrientation, JPH_IN(JPH_HairGlobalPoseTransform) inGlobalPoseTransform, JPH_IN(JPH_HairMaterial) inMaterial, float inStrandFraction)
6{
7 // LERP between stored global pose and global pose skinned to the scalp
8 float skin_factor = GradientSamplerSample(inMaterial.mSkinGlobalPose, inStrandFraction);
9 float3 in_position = inRestPosition;
10 in_position += skin_factor * (inGlobalPoseTransform.mPosition + JPH_QuatMulVec3(inGlobalPoseTransform.mRotation, in_position) - in_position);
11 JPH_Quat in_rotation = inRestOrientation;
12 in_rotation += skin_factor * (JPH_QuatMulQuat(inGlobalPoseTransform.mRotation, in_rotation) - in_rotation);
13
14 // LERP between simulated position and skinned position
15 float pose_factor = GradientSamplerSample(inMaterial.mGlobalPose, inStrandFraction);
16 ioPos.mPosition += pose_factor * (in_position - ioPos.mPosition);
17 ioPos.mRotation += pose_factor * (in_rotation - ioPos.mRotation);
18 ioPos.mRotation = normalize(ioPos.mRotation);
19}
void ApplyGlobalPose(JPH_IN_OUT(JPH_HairPosition) ioPos, float3 inRestPosition, JPH_Quat inRestOrientation, JPH_IN(JPH_HairGlobalPoseTransform) inGlobalPoseTransform, JPH_IN(JPH_HairMaterial) inMaterial, float inStrandFraction)
Definition HairApplyGlobalPose.h:5
float GradientSamplerSample(float4 inSampler, float inStrandFraction)
Definition HairCommon.h:40
#define JPH_IN_OUT(type)
Definition ShaderCore.h:83
#define JPH_IN(type)
Definition ShaderCore.h:81
float4 JPH_Quat
Definition ShaderCore.h:50
JPH_Quat JPH_QuatMulQuat(JPH_Quat inLHS, JPH_Quat inRHS)
Definition ShaderQuat.h:15
float3 JPH_QuatMulVec3(JPH_Quat inLHS, float3 inRHS)
Definition ShaderQuat.h:5