#include "bindless_structs.hlsli" float3 GetLocalDir(float Side, float3 GlobalInvocationID) { float HalfSide = Side / 2; float AxisSign = 2.0f * (0.5f - (GlobalInvocationID.z % 2)); float3 LocalDir; if (GlobalInvocationID.z < 2) { LocalDir = float3(AxisSign * HalfSide, HalfSide - GlobalInvocationID.y, (HalfSide - GlobalInvocationID.x) * AxisSign); } else if (GlobalInvocationID.z < 4) { LocalDir = float3(GlobalInvocationID.x - HalfSide, AxisSign * HalfSide, AxisSign * (GlobalInvocationID.y - HalfSide)); } else { LocalDir = float3((GlobalInvocationID.x - HalfSide) * AxisSign, HalfSide - GlobalInvocationID.y, HalfSide * AxisSign); } return normalize(LocalDir); }