HairUpdateRoots.hlsl 1.2 KB

123456789101112131415161718192021222324252627282930
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2026 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include "HairUpdateRootsBindings.h"
  5. #include "HairCommon.h"
  6. JPH_SHADER_FUNCTION_BEGIN(void, main, cHairPerStrandBatch, 1, 1)
  7. JPH_SHADER_PARAM_THREAD_ID(tid)
  8. JPH_SHADER_FUNCTION_END
  9. {
  10. // Check if this is a valid strand
  11. uint strand_idx = tid.x;
  12. if (strand_idx >= cNumStrands)
  13. return;
  14. float inv_fraction = 1.0f - cIterationFraction;
  15. JPH_HairPosition pos = gPositions[strand_idx];
  16. JPH_HairPosition target_pos = gTargetPositions[strand_idx];
  17. pos.mPosition = pos.mPosition * inv_fraction + target_pos.mPosition * cIterationFraction;
  18. pos.mRotation = normalize(pos.mRotation * inv_fraction + target_pos.mRotation * cIterationFraction);
  19. gPositions[strand_idx] = pos;
  20. JPH_HairGlobalPoseTransform transf = gGlobalPoseTransforms[strand_idx];
  21. JPH_HairGlobalPoseTransform target_transf = gTargetGlobalPoseTransforms[strand_idx];
  22. transf.mPosition = transf.mPosition * inv_fraction + target_transf.mPosition * cIterationFraction;
  23. transf.mRotation = normalize(transf.mRotation * inv_fraction + target_transf.mRotation * cIterationFraction);
  24. gGlobalPoseTransforms[strand_idx] = transf;
  25. }