Skip to content

Commit 57e5256

Browse files
YvainRaeymaekersEvergreen
authored andcommitted
[UUM-117002] Fix incorrectly computed transforms and AABBs in UnifiedRayTracing API
1 parent 9e7888e commit 57e5256

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Compute/ComputeRayTracingAccelStruct.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -508,12 +508,15 @@ TopLevelAccelStruct CpuBuildForTopLevelAccelStruct(CommandBuffer cmd, RadeonRays
508508

509509
var m = ConvertTranform(instance.localToWorldTransform);
510510
var bounds = GeometryUtility.CalculateBounds(new Vector3[]
511-
{ new Vector3(aabb.Min.x, aabb.Min.y, aabb.Max.z),
512-
new Vector3(aabb.Min.x, aabb.Max.y, aabb.Min.z),
513-
new Vector3(aabb.Min.x, aabb.Max.y, aabb.Max.z),
514-
new Vector3(aabb.Max.x, aabb.Min.y, aabb.Max.z),
515-
new Vector3(aabb.Max.x, aabb.Max.y, aabb.Min.z),
516-
new Vector3(aabb.Max.x, aabb.Max.y, aabb.Max.z)
511+
{
512+
new Vector3(aabb.Min.x, aabb.Min.y, aabb.Min.z),
513+
new Vector3(aabb.Min.x, aabb.Min.y, aabb.Max.z),
514+
new Vector3(aabb.Min.x, aabb.Max.y, aabb.Min.z),
515+
new Vector3(aabb.Min.x, aabb.Max.y, aabb.Max.z),
516+
new Vector3(aabb.Max.x, aabb.Min.y, aabb.Min.z),
517+
new Vector3(aabb.Max.x, aabb.Min.y, aabb.Max.z),
518+
new Vector3(aabb.Max.x, aabb.Max.y, aabb.Min.z),
519+
new Vector3(aabb.Max.x, aabb.Max.y, aabb.Max.z)
517520
}, m);
518521

519522
prims[i].primID = (uint)i;

Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Compute/RadeonRays/RadeonRaysAPI.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,18 +119,18 @@ public static Transform TRS(float3 translation, float3 rotation, float3 scale)
119119

120120
public Transform Inverse()
121121
{
122-
float4x4 m = new float4x4();
123-
m[0] = new float4(row0.x, row1.x, row2.x, 0);
124-
m[1] = new float4(row0.y, row1.y, row2.y, 0);
125-
m[2] = new float4(row0.z, row1.z, row2.z, 0);
126-
m[3] = new float4(row0.w, row1.w, row2.w, 1);
122+
float3x3 m = new float3x3();
123+
m[0] = new float3(row0.x, row1.x, row2.x);
124+
m[1] = new float3(row0.y, row1.y, row2.y);
125+
m[2] = new float3(row0.z, row1.z, row2.z);
127126

128-
m = math.fastinverse(m);
127+
m = math.inverse(m);
128+
var t = -math.mul(m, new float3(row0.w, row1.w, row2.w));
129129

130130
Transform res;
131-
res.row0 = new float4(m[0].x, m[1].x, m[2].x, m[3].x);
132-
res.row1 = new float4(m[0].y, m[1].y, m[2].y, m[3].y);
133-
res.row2 = new float4(m[0].z, m[1].z, m[2].z, m[3].z);
131+
res.row0 = new float4(m[0].x, m[1].x, m[2].x, t.x);
132+
res.row1 = new float4(m[0].y, m[1].y, m[2].y, t.y);
133+
res.row2 = new float4(m[0].z, m[1].z, m[2].z, t.z);
134134

135135
return res;
136136
}

Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/transform.hlsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ Transform Inverse(in Transform t)
6666

6767
Aabb TransformAabb(in Aabb aabb, in Transform t)
6868
{
69-
float3 p0 = aabb.pmin;
69+
float3 p0 = float3(aabb.pmin.x, aabb.pmin.y, aabb.pmin.z);
7070
float3 p1 = float3(aabb.pmin.x, aabb.pmin.y, aabb.pmax.z);
7171
float3 p2 = float3(aabb.pmin.x, aabb.pmax.y, aabb.pmin.z);
7272
float3 p3 = float3(aabb.pmin.x, aabb.pmax.y, aabb.pmax.z);
73-
float3 p4 = float3(aabb.pmax.x, aabb.pmin.y, aabb.pmax.z);
74-
float3 p5 = float3(aabb.pmax.x, aabb.pmax.y, aabb.pmin.z);
75-
float3 p6 = float3(aabb.pmax.x, aabb.pmax.y, aabb.pmax.z);
76-
float3 p7 = aabb.pmax;
73+
float3 p4 = float3(aabb.pmax.x, aabb.pmin.y, aabb.pmin.z);
74+
float3 p5 = float3(aabb.pmax.x, aabb.pmin.y, aabb.pmax.z);
75+
float3 p6 = float3(aabb.pmax.x, aabb.pmax.y, aabb.pmin.z);
76+
float3 p7 = float3(aabb.pmax.x, aabb.pmax.y, aabb.pmax.z);
7777

7878
p0 = TransformPointT(p0, t);
7979
p1 = TransformPointT(p1, t);
@@ -98,4 +98,4 @@ Aabb TransformAabb(in Aabb aabb, in Transform t)
9898
}
9999
#endif
100100

101-
#endif // TRANSFORM_HLSL
101+
#endif // TRANSFORM_HLSL

0 commit comments

Comments
 (0)