Skip to content

Commit ffb654b

Browse files
Merge pull request #351 from P0rc3lain/faster-bound
Speed up calculation slightly
2 parents 60c2010 + 4dfa692 commit ffb654b

3 files changed

Lines changed: 17 additions & 6 deletions

File tree

Engine/Core/Extensions/simd/simd_float3+Extension.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,15 @@ extension simd_float3 {
1616
public var normalized: simd_float3 {
1717
self / norm
1818
}
19+
public mutating func normalize() {
20+
self /= norm
21+
}
1922
public func randomPerpendicular(length: Float = 1) -> simd_float3 {
20-
cross(self, simd_float3.random()).normalized * length
23+
let randomVector = simd_float3.random()
24+
var perpendicular = cross(self, randomVector)
25+
perpendicular.normalize()
26+
perpendicular *= length
27+
return perpendicular
2128
}
2229
public init(_ x: Int, _ y: Int, _ z: Int) {
2330
self.init(Float(x), Float(y), Float(z))

Engine/Core/Extensions/simd/simd_float3x3+Extension.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ extension simd_float3x3 {
1010
}
1111
public static func from(directionVector binormal: simd_float3) -> simd_float3x3 {
1212
assertEqual(length(binormal), 1)
13-
var normal = simd_float3.random().normalized
14-
normal = (normal - dot(binormal, normal) * binormal).normalized
15-
let tangent = cross(normal, binormal).normalized
13+
var normal = simd_float3.random()
14+
normal.normalize()
15+
normal = (normal - dot(binormal, normal) * binormal)
16+
normal.normalize()
17+
var tangent = cross(normal, binormal)
18+
tangent.normalize()
1619
assert(dot(normal, binormal) == 0)
1720
assert(dot(tangent, binormal) == 0)
1821
return simd_float3x3(tangent, normal, -binormal)

Engine/Core/Scene/Ray/PNRay.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public struct PNRay {
1818
}
1919

2020
func * (_ lhs: simd_float4x4, _ rhs: PNRay) -> PNRay {
21-
let ldir = simd_float3x3(lhs.rotation) * rhs.direction
21+
var ldir = simd_float3x3(lhs.rotation) * rhs.direction
22+
ldir.normalize()
2223
let lori = lhs * simd_float4(rhs.origin, 1)
23-
return PNRay(origin: lori.xyz, direction: ldir.normalized)
24+
return PNRay(origin: lori.xyz, direction: ldir)
2425
}

0 commit comments

Comments
 (0)