From a970b273d5085066a5ba5d2153edc34ff85ac14b Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Thu, 18 Jun 2026 23:20:07 -0700 Subject: [PATCH 01/15] [Patch] Add vision light probes --- .../Renderer/Pipelines/RenderPipeLines.swift | 14 + .../Pipelines/RenderPipelineType.swift | 1 + .../Renderer/PostProcessRenderPasses.swift | 67 ++++ .../UntoldEngine/Renderer/RenderPasses.swift | 34 +- .../Renderer/RuntimeEnvironmentLighting.swift | 218 ++++++++++ .../Shaders/iblPreFilterShaders.metal | 63 +++ .../UntoldEngineKernels-ios.air | Bin 144560 -> 146096 bytes .../UntoldEngineKernels-ios.metallib | Bin 484161 -> 491143 bytes .../UntoldEngineKernels-iossim.metallib | Bin 483505 -> 491143 bytes .../UntoldEngineKernels-tvos.air | Bin 144544 -> 146064 bytes .../UntoldEngineKernels-tvos.metallib | Bin 482033 -> 488999 bytes .../UntoldEngineKernels-tvossim.air | Bin 144560 -> 146096 bytes .../UntoldEngineKernels-tvossim.metallib | Bin 484433 -> 491415 bytes .../UntoldEngineKernels-xros.air | Bin 144544 -> 146064 bytes .../UntoldEngineKernels-xros.metallib | Bin 482049 -> 489015 bytes .../UntoldEngineKernels-xrossim.air | Bin 144560 -> 146096 bytes .../UntoldEngineKernels-xrossim.metallib | Bin 484449 -> 491431 bytes .../UntoldEngineKernels.metallib | Bin 481217 -> 488183 bytes .../Utils/EngineSettingsAPI.swift | 3 + Sources/UntoldEngineXR/UntoldEngineXR.swift | 106 +++-- .../XREnvironmentLightingSystem.swift | 373 ++++++++++++++++++ .../RendererTest.swift | 9 + .../RuntimeEnvironmentLightingTests.swift | 184 +++++++++ 23 files changed, 1016 insertions(+), 56 deletions(-) create mode 100644 Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift create mode 100644 Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift create mode 100644 Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift diff --git a/Sources/UntoldEngine/Renderer/Pipelines/RenderPipeLines.swift b/Sources/UntoldEngine/Renderer/Pipelines/RenderPipeLines.swift index c217349c..1b2dab49 100644 --- a/Sources/UntoldEngine/Renderer/Pipelines/RenderPipeLines.swift +++ b/Sources/UntoldEngine/Renderer/Pipelines/RenderPipeLines.swift @@ -729,6 +729,19 @@ public func InitIBLPreFilterPipeline() -> RenderPipeline? { ) } +public func InitXRIBLCubePreFilterPipeline() -> RenderPipeline? { + CreatePipeline( + vertexShader: "vertexIBLPreFilterShader", + fragmentShader: "fragmentXRIBLCubePreFilterShader", + vertexDescriptor: createIBLPreFilterVertexDescriptor(), + colorFormats: [wf.ibl, wf.ibl, wf.ibl], + depthFormat: .invalid, + depthCompareFunction: .less, + depthEnabled: false, + name: "XR IBL Cube Pre-Filter Pipeline" + ) +} + public func InitLookPipeline() -> RenderPipeline? { CreatePipeline( vertexShader: "vertexLookShader", @@ -920,6 +933,7 @@ public func DefaultPipeLines() -> [(RenderPipelineType, RenderPipelineInitBlock) (.ssaoUpsample, InitSSAOUpsamplePipeline), (.environment, InitEnvironmentPipeline), (.iblPreFilter, InitIBLPreFilterPipeline), + (.xrIBLCubePreFilter, InitXRIBLCubePreFilterPipeline), (.gaussianTBDRInitialize, InitGaussianTBDRInitializePipeline), (.gaussianTBDRDraw, InitGaussianTBDRDrawPipeline), (.gaussianTBDRPostprocess, InitGaussianTBDRPostprocessPipeline), diff --git a/Sources/UntoldEngine/Renderer/Pipelines/RenderPipelineType.swift b/Sources/UntoldEngine/Renderer/Pipelines/RenderPipelineType.swift index 9233aca3..907a8471 100644 --- a/Sources/UntoldEngine/Renderer/Pipelines/RenderPipelineType.swift +++ b/Sources/UntoldEngine/Renderer/Pipelines/RenderPipelineType.swift @@ -45,6 +45,7 @@ public extension RenderPipelineType { static let ssaoUpsample: RenderPipelineType = "ssaoUpsample" static let environment: RenderPipelineType = "environment" static let iblPreFilter: RenderPipelineType = "iblPreFilter" + static let xrIBLCubePreFilter: RenderPipelineType = "xrIBLCubePreFilter" static let gaussianTBDRInitialize: RenderPipelineType = "gaussianTBDRInitialize" static let gaussianTBDRDraw: RenderPipelineType = "gaussianTBDRDraw" static let gaussianTBDRPostprocess: RenderPipelineType = "gaussianTBDRPostprocess" diff --git a/Sources/UntoldEngine/Renderer/PostProcessRenderPasses.swift b/Sources/UntoldEngine/Renderer/PostProcessRenderPasses.swift index ebd84f7b..fad68a37 100644 --- a/Sources/UntoldEngine/Renderer/PostProcessRenderPasses.swift +++ b/Sources/UntoldEngine/Renderer/PostProcessRenderPasses.swift @@ -115,3 +115,70 @@ func executeIBLPreFilterPass(uCommandBuffer: MTLCommandBuffer, _ envTexture: MTL } } } + +public func executeXRIBLCubePreFilterPass( + commandBuffer: MTLCommandBuffer, + environmentCubeTexture: MTLTexture, + target: RuntimeEnvironmentLightingTextureSet +) -> Bool { + guard environmentCubeTexture.textureType == .typeCube else { + Logger.logWarning(message: "[XRLighting] Environment probe texture is not a cube texture") + return false + } + + guard let iblPrefilterPipeline = PipelineManager.shared.renderPipelinesByType[.xrIBLCubePreFilter] else { + handleError(.pipelineStateNulled, "xrIBLCubePreFilterPipeline is nil") + return false + } + + guard iblPrefilterPipeline.success, + let pipelineState = iblPrefilterPipeline.pipelineState + else { + return false + } + + let renderPassDescriptor = MTLRenderPassDescriptor() + renderPassDescriptor.renderTargetWidth = target.irradianceMap.width + renderPassDescriptor.renderTargetHeight = target.irradianceMap.height + + renderPassDescriptor.colorAttachments[0].texture = target.irradianceMap + renderPassDescriptor.colorAttachments[0].loadAction = .dontCare + renderPassDescriptor.colorAttachments[0].storeAction = .store + + renderPassDescriptor.colorAttachments[1].texture = target.specularMap + renderPassDescriptor.colorAttachments[1].loadAction = .dontCare + renderPassDescriptor.colorAttachments[1].storeAction = .store + + renderPassDescriptor.colorAttachments[2].texture = target.brdfMap + renderPassDescriptor.colorAttachments[2].loadAction = .dontCare + renderPassDescriptor.colorAttachments[2].storeAction = .store + + guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor) else { + return false + } + + renderEncoder.setRenderPipelineState(pipelineState) + renderEncoder.pushDebugGroup("XR IBL Cube Pre-Filter Pass") + renderEncoder.label = "XR IBL Cube Pre-Filter Pass" + renderEncoder.setVertexBuffer(bufferResources.quadVerticesBuffer, offset: 0, index: 0) + renderEncoder.setVertexBuffer(bufferResources.quadTexCoordsBuffer, offset: 0, index: 1) + renderEncoder.setFragmentTexture(environmentCubeTexture, index: 0) + renderEncoder.drawIndexedPrimitivesTracked( + type: .triangle, + indexCount: 6, + indexType: .uint16, + indexBuffer: bufferResources.quadIndexBuffer!, + indexBufferOffset: 0 + ) + renderEncoder.popDebugGroup() + renderEncoder.endEncoding() + + guard let blitEncoder = commandBuffer.makeBlitCommandEncoder() else { + return false + } + blitEncoder.label = "XR IBL Specular Mipmap Generation" + blitEncoder.generateMipmaps(for: target.specularMap) + blitEncoder.endEncoding() + + return true +} diff --git a/Sources/UntoldEngine/Renderer/RenderPasses.swift b/Sources/UntoldEngine/Renderer/RenderPasses.swift index ae404324..c6bd8d2a 100644 --- a/Sources/UntoldEngine/Renderer/RenderPasses.swift +++ b/Sources/UntoldEngine/Renderer/RenderPasses.swift @@ -1961,9 +1961,10 @@ public enum RenderPasses { renderEncoder.setFragmentBytes(&csmUniforms, length: MemoryLayout.stride, index: Int(lightPassLightOrthoViewMatrixIndex.rawValue)) renderEncoder.setFragmentTexture(textureResources.csmShadowMap, index: Int(lightPassShadowTextureIndex.rawValue)) - renderEncoder.setFragmentTexture(textureResources.irradianceMap, index: Int(lightPassIBLIrradianceTextureIndex.rawValue)) - renderEncoder.setFragmentTexture(textureResources.specularMap, index: Int(lightPassIBLSpecularTextureIndex.rawValue)) - renderEncoder.setFragmentTexture(textureResources.iblBRDFMap, index: Int(lightPassIBLBRDFMapTextureIndex.rawValue)) + let environmentLighting = resolveCurrentEnvironmentLighting() + renderEncoder.setFragmentTexture(environmentLighting.irradianceMap, index: Int(lightPassIBLIrradianceTextureIndex.rawValue)) + renderEncoder.setFragmentTexture(environmentLighting.specularMap, index: Int(lightPassIBLSpecularTextureIndex.rawValue)) + renderEncoder.setFragmentTexture(environmentLighting.brdfMap, index: Int(lightPassIBLBRDFMapTextureIndex.rawValue)) renderEncoder.setFragmentTexture(textureResources.areaTextureLTCMag, index: Int(lightPassAreaLTCMagTextureIndex.rawValue)) renderEncoder.setFragmentTexture(textureResources.areaTextureLTCMat, index: Int(lightPassAreaLTCMatTextureIndex.rawValue)) @@ -2000,8 +2001,8 @@ public enum RenderPasses { ) var brdfParameters = IBLParamsUniform() - brdfParameters.applyIBL = applyIBL - brdfParameters.ambientIntensity = ambientIntensity + brdfParameters.applyIBL = environmentLighting.applyIBL + brdfParameters.ambientIntensity = environmentLighting.ambientIntensity renderEncoder.setFragmentBytes(&brdfParameters, length: MemoryLayout.stride, index: Int(lightPassIBLParamIndex.rawValue)) var lightPassRotationAngle = envRotationAngle @@ -2676,20 +2677,22 @@ public enum RenderPasses { renderEncoder.setFragmentTexture(textureResources.areaTextureLTCMag, index: Int(lightPassAreaLTCMagTextureIndex.rawValue)) + let environmentLighting = resolveCurrentEnvironmentLighting() + // ibl renderEncoder.setFragmentTexture( - textureResources.irradianceMap, index: Int(lightPassIBLIrradianceTextureIndex.rawValue) + environmentLighting.irradianceMap, index: Int(lightPassIBLIrradianceTextureIndex.rawValue) ) renderEncoder.setFragmentTexture( - textureResources.specularMap, index: Int(lightPassIBLSpecularTextureIndex.rawValue) + environmentLighting.specularMap, index: Int(lightPassIBLSpecularTextureIndex.rawValue) ) renderEncoder.setFragmentTexture( - textureResources.iblBRDFMap, index: Int(lightPassIBLBRDFMapTextureIndex.rawValue) + environmentLighting.brdfMap, index: Int(lightPassIBLBRDFMapTextureIndex.rawValue) ) var brdfParameters = IBLParamsUniform() - brdfParameters.applyIBL = applyIBL - brdfParameters.ambientIntensity = ambientIntensity + brdfParameters.applyIBL = environmentLighting.applyIBL + brdfParameters.ambientIntensity = environmentLighting.ambientIntensity renderEncoder.setFragmentBytes( &brdfParameters, length: MemoryLayout.stride, @@ -2983,16 +2986,17 @@ public enum RenderPasses { textureResources.areaTextureLTCMag, index: Int(transparencyPassAreaLTCMagTextureIndex.rawValue) ) + let environmentLighting = resolveCurrentEnvironmentLighting() renderEncoder.setFragmentTexture( - textureResources.irradianceMap, + environmentLighting.irradianceMap, index: Int(transparencyPassIBLIrradianceTextureIndex.rawValue) ) renderEncoder.setFragmentTexture( - textureResources.specularMap, + environmentLighting.specularMap, index: Int(transparencyPassIBLSpecularTextureIndex.rawValue) ) renderEncoder.setFragmentTexture( - textureResources.iblBRDFMap, + environmentLighting.brdfMap, index: Int(transparencyPassIBLBRDFMapTextureIndex.rawValue) ) renderEncoder.setFragmentTexture( @@ -3001,8 +3005,8 @@ public enum RenderPasses { ) var iblParameters = IBLParamsUniform() - iblParameters.applyIBL = applyIBL - iblParameters.ambientIntensity = ambientIntensity + iblParameters.applyIBL = environmentLighting.applyIBL + iblParameters.ambientIntensity = environmentLighting.ambientIntensity renderEncoder.setFragmentBytes( &iblParameters, length: MemoryLayout.stride, diff --git a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift new file mode 100644 index 00000000..d01c3bea --- /dev/null +++ b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift @@ -0,0 +1,218 @@ +// +// RuntimeEnvironmentLighting.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import Foundation +import Metal + +public enum RuntimeEnvironmentLightingMode: Sendable, Equatable { + case authoredOnly + case staticIBL + case realWorldEstimate + case authoredPlusRealWorldEstimate +} + +public struct RuntimeEnvironmentLighting { + public var irradianceMap: MTLTexture? + public var specularMap: MTLTexture? + public var brdfMap: MTLTexture? + public var intensityScale: Float + public var timestamp: CFTimeInterval + public var isValid: Bool + + public init( + irradianceMap: MTLTexture?, + specularMap: MTLTexture?, + brdfMap: MTLTexture?, + intensityScale: Float = 1.0, + timestamp: CFTimeInterval = Date().timeIntervalSinceReferenceDate, + isValid: Bool + ) { + self.irradianceMap = irradianceMap + self.specularMap = specularMap + self.brdfMap = brdfMap + self.intensityScale = intensityScale + self.timestamp = timestamp + self.isValid = isValid + } +} + +func resolveCurrentEnvironmentLighting() -> ResolvedEnvironmentLighting { + RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: textureResources.irradianceMap, + staticSpecularMap: textureResources.specularMap, + staticBRDFMap: textureResources.iblBRDFMap, + staticIBLEnabled: applyIBL, + ambientIntensity: ambientIntensity + ) +} + +public struct RuntimeEnvironmentLightingTextureSet { + public var irradianceMap: MTLTexture + public var specularMap: MTLTexture + public var brdfMap: MTLTexture +} + +public struct ResolvedEnvironmentLighting { + public var irradianceMap: MTLTexture? + public var specularMap: MTLTexture? + public var brdfMap: MTLTexture? + public var applyIBL: Bool + public var ambientIntensity: Float + public var mode: RuntimeEnvironmentLightingMode + public var fallbackReason: String? +} + +public func makeRuntimeEnvironmentLightingTextureSet(labelPrefix: String) -> RuntimeEnvironmentLightingTextureSet? { + let currentRenderInfo = renderInfo + let wf = currentRenderInfo.colorPipeline.working + let iblSize = 256 + + guard let irradianceMap = createTexture( + device: currentRenderInfo.device, + label: "\(labelPrefix) Irradiance Texture", + pixelFormat: wf.ibl, + width: iblSize, + height: iblSize, + usage: [.shaderRead, .renderTarget], + storageMode: .private + ) else { return nil } + + guard let specularMap = createTexture( + device: currentRenderInfo.device, + label: "\(labelPrefix) Specular Texture", + pixelFormat: wf.ibl, + width: iblSize, + height: iblSize, + usage: [.shaderRead, .renderTarget], + storageMode: .private, + mipMapLevels: 6 + ) else { return nil } + + guard let brdfMap = createTexture( + device: currentRenderInfo.device, + label: "\(labelPrefix) BRDF Texture", + pixelFormat: wf.ibl, + width: iblSize, + height: iblSize, + usage: [.shaderRead, .renderTarget], + storageMode: .private + ) else { return nil } + + return RuntimeEnvironmentLightingTextureSet( + irradianceMap: irradianceMap, + specularMap: specularMap, + brdfMap: brdfMap + ) +} + +public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { + public static let shared = RuntimeEnvironmentLightingStore() + + private let lock = NSLock() + private var modeValue: RuntimeEnvironmentLightingMode = .staticIBL + private var xrLightingValue: RuntimeEnvironmentLighting? + + private init() {} + + public var mode: RuntimeEnvironmentLightingMode { + get { + lock.lock() + let value = modeValue + lock.unlock() + return value + } + set { + lock.lock() + modeValue = newValue + lock.unlock() + } + } + + public func publishXRLighting(_ lighting: RuntimeEnvironmentLighting?) { + lock.lock() + xrLightingValue = lighting + lock.unlock() + } + + public func latestXRLighting() -> RuntimeEnvironmentLighting? { + lock.lock() + let value = xrLightingValue + lock.unlock() + return value + } + + public func reset() { + lock.lock() + modeValue = .staticIBL + xrLightingValue = nil + lock.unlock() + } + + public func resolve( + staticIrradianceMap: MTLTexture?, + staticSpecularMap: MTLTexture?, + staticBRDFMap: MTLTexture?, + staticIBLEnabled: Bool, + ambientIntensity: Float + ) -> ResolvedEnvironmentLighting { + lock.lock() + let currentMode = modeValue + let xrLighting = xrLightingValue + lock.unlock() + + let staticLighting = ResolvedEnvironmentLighting( + irradianceMap: staticIrradianceMap, + specularMap: staticSpecularMap, + brdfMap: staticBRDFMap, + applyIBL: staticIBLEnabled, + ambientIntensity: ambientIntensity, + mode: .staticIBL, + fallbackReason: nil + ) + + switch currentMode { + case .authoredOnly: + return ResolvedEnvironmentLighting( + irradianceMap: staticIrradianceMap, + specularMap: staticSpecularMap, + brdfMap: staticBRDFMap, + applyIBL: false, + ambientIntensity: ambientIntensity, + mode: .authoredOnly, + fallbackReason: nil + ) + + case .staticIBL: + return staticLighting + + case .realWorldEstimate, .authoredPlusRealWorldEstimate: + guard let xrLighting, + xrLighting.isValid, + let irradianceMap = xrLighting.irradianceMap, + let specularMap = xrLighting.specularMap, + let brdfMap = xrLighting.brdfMap + else { + var fallback = staticLighting + fallback.fallbackReason = "XR lighting unavailable" + return fallback + } + + return ResolvedEnvironmentLighting( + irradianceMap: irradianceMap, + specularMap: specularMap, + brdfMap: brdfMap, + applyIBL: true, + ambientIntensity: ambientIntensity * xrLighting.intensityScale, + mode: currentMode, + fallbackReason: nil + ) + } + } +} diff --git a/Sources/UntoldEngine/Shaders/iblPreFilterShaders.metal b/Sources/UntoldEngine/Shaders/iblPreFilterShaders.metal index 9b142f39..4915f755 100644 --- a/Sources/UntoldEngine/Shaders/iblPreFilterShaders.metal +++ b/Sources/UntoldEngine/Shaders/iblPreFilterShaders.metal @@ -40,3 +40,66 @@ fragment IBLFragmentOut fragmentIBLPreFilterShader(VertexCompositeOutput in [[st return out; } + +static float3 xrIBLNormalFromEquirectUV(float2 texCoords) { + float thetaN = M_PI_F * (1.0 - texCoords.y); + float phiN = 2.0 * M_PI_F * (1.0 - texCoords.x); + return float3(sin(thetaN) * cos(phiN), sin(thetaN) * sin(phiN), cos(thetaN)); +} + +static float4 diffuseImportanceMapCube(float2 texCoords, texturecube environmentTexture) { + constexpr sampler s(coord::normalized, + filter::linear, + mip_filter::none, + address::clamp_to_edge); + + constexpr uint sampleCount = 128u; + float3 normal = xrIBLNormalFromEquirectUV(texCoords); + float3x3 normalSpace = getNormalSpace(normal); + float3 result = float3(0.0); + + for (uint n = 1u; n <= sampleCount; n++) { + float2 p = hammersley(n, sampleCount); + float theta = asin(sqrt(p.y)); + float phi = 2.0 * M_PI_F * p.x; + float3 pos = float3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)); + float3 posGlob = normalize(normalSpace * pos); + result += environmentTexture.sample(s, posGlob).rgb; + } + + return float4(result / float(sampleCount), 1.0); +} + +static float4 specularImportanceMapCube(float2 texCoords, texturecube environmentTexture) { + constexpr sampler s(coord::normalized, + filter::linear, + mip_filter::none, + address::clamp_to_edge); + + constexpr float shininess = 600.0; + constexpr uint sampleCount = 128u; + float3 normal = xrIBLNormalFromEquirectUV(texCoords); + float3x3 normalSpace = getNormalSpace(normal); + float3 result = float3(0.0); + + for (uint n = 1u; n <= sampleCount; n++) { + float2 p = hammersley(n, sampleCount); + float theta = acos(pow(1.0 - p.y, 1.0 / (shininess + 1.0))); + float phi = 2.0 * M_PI_F * p.x; + float3 pos = float3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)); + float3 posGlob = normalize(normalSpace * pos); + result += environmentTexture.sample(s, posGlob).rgb; + } + + result = result / float(sampleCount) * (shininess + 2.0) / (shininess + 1.0); + return float4(result, 1.0); +} + +fragment IBLFragmentOut fragmentXRIBLCubePreFilterShader(VertexCompositeOutput in [[stage_in]], + texturecube environmentTexture [[texture(0)]]) { + IBLFragmentOut out; + out.irradiance = diffuseImportanceMapCube(in.uvCoords, environmentTexture); + out.specular = specularImportanceMapCube(in.uvCoords, environmentTexture); + out.brdfMap = BRDFIntegrationMap(1.0 - in.uvCoords.y, in.uvCoords.x); + return out; +} diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.air index b875e1c6c4966480b3ac53619fae3155727d42dc..b0ab49c629c97c7a7c0fdc458b76e0ce69c2152d 100644 GIT binary patch delta 56705 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 bZ1IwXIn%RoPoJf6Z&YhsByM;)`tSb%F3Sr@ delta 55024 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.metallib index 317a013eb9828b3c7abe203010ffcaa482b77e54..c8fd5a41b342a0d7c17a25e904f85c3c2ec64411 100644 GIT binary patch delta 3970 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-iossim.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-iossim.metallib index 7edd29d6b1008e284bf05374f2ad21d9ff1c2444..c8fd5a41b342a0d7c17a25e904f85c3c2ec64411 100644 GIT binary patch delta 19836 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�ea<`G3a= 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 CJ_`u| diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.air index 00b7a77ae41cd6cf9fce2419f370659a0033195e..5bedcb0650c9fd4735ab4ad83dd34db5ce365c89 100644 GIT binary patch delta 56695 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 acRJv5sxidreUDS7Xs2cY`CO*$?|%V(-BU>b diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.metallib index abcba15560354653f8a5457d2f425fa6e97f9cea..ab0d60ada4bbdd933aeb309e746deef5b380907d 100644 GIT binary patch delta 3977 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 VmayabK^zSN4duY|gXGq({{zncqk8}V delta 903 zcmYLHT}V@57(P44bEebe+gX|DrrXr%IXZWoK|wWtE*ixK!sgE^sjm8CVDv*E(P9@8 z2r3UXvowRi0u#f;l7e*+%o_>1C`h3zi|7X->86Xmo$s>_yyrd7`#jHk-tXm``R3YO zbS0wkNT)>*g(5*nR|vAOdDJT8pFZ;~2(v-n5G`oxp7$5lM!^K~?6vGqzP5|Nil%K91RXyBL(wv12zvB{mE+BygaCNZDalW5X6^ zt`sPxDBWpAyKaR?+k+J6R$ME%c--|7#_| zsAH1%&29HxQ_RiW3Pz9!(#`&4dU{B>T6-N&xc&pzXN#=)?JP{S-YHIp+lInz78>GG WxJ_D14=t=qGzw_QOAG7DrSZR5MCKa+ diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.air index 3aabb006d9bae5c887dfc518c112288b786461f3..c4ab2caaf97a96c6a3f5e8c067c2ed525278ed1e 100644 GIT binary patch delta 56705 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 A*8l(j delta 55010 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.metallib index a74f74a4339302a0534eda2ca5ead46f55d84ddd..e732346ec67ef12fe4c4939f5c4fcf0d08f85dfe 100644 GIT binary patch delta 3970 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 W$xy457#qQ&L{|=7auSP5&aHoq^yf(c diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.air index 046dd04e7b16fc08cb5761c2d0abc3550b8d6d2c..5c934d3906ce367559e13248fc5a32c095e80131 100644 GIT binary patch delta 56695 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 acRJv5sxidreUDS7Xs2cY`CO*$?|%V(-BU>b diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.metallib index 1d5ced198460346122264901fb93c07e4806f462..acf26aa6dc5d884388f4e0582919c9a88c67773c 100644 GIT binary patch delta 3996 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 delta 903 zcmYLHZ%7ki7{A?lH=QQ$Ze^mI-lk4>IyYxfP|fLwMzKM#`Dd79pUPrjR1ip{2uUP3 z`B5`VGYBd$G0GNFu#jN;B7;5@q~Iruup&tM(udyNd)mQs&;6d?@AusEKD?fe(cT<4?_(b&tt>AUvi$Ba%Nsn)5B)6nTbcjV^H`z^ zX{U_I>M%O1RUEa+s8AyE3=?n}19K>kVYZfQ^iw5*xI%ccg!U>GhwM@Or7)1uV1~kR zJK+~UQ-g{gM+jDj*|4qIR~-X*7mZ)T_Onxt*!wl9R3k8buS)6+x3*4k}(rt3fH`dpDQznvGet#^w@gKcBMHUkYl X6>Jl>M#omx1sVl3#MH{Vbb0C@$M5HL diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xrossim.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xrossim.air index 9066ac7c2883adc98bc9d7def210f4358028bcc5..067444b2f9d7220059cab50979be7e58737e4303 100644 GIT binary patch delta 56705 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 A*8l(j delta 55010 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xrossim.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xrossim.metallib index 851da72fcc276a0628b18d765b6e97bc1bddbd9a..da476f1f6acde341d11159f5f901ef910223474c 100644 GIT binary patch delta 3981 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 PI1B=Yd}PBENgw(@U0I_t delta 904 zcmYL{TSyd97{_O4oLO5pJI<7uxw^Z$t2^GtRj{bMK`g~?2#%MnB!wQjU>G3;(nAQD zAf)^&FQpg;87LTCHp+*MdRSi;>7}3^6zTF}AQS`zc6QFe2F`r*|9;>1o&Pz^qb=83 z!WE5};U=3P3OfX0I9HH`?z46w^>kQoL6{G+4`(%t&(m3abBM)Nk;MmfEXIAT|MZjS zNIv3z6{7_av=-<%;!=_8Zc(RLfsnAV4q*XVc{vt->~2Ain~3B!8uN7=@R;~ZWmnRY z2`Yy@L|k2?4LUl!VdQy{n%ec?Pd)-q_ybd$Ec6;wm&xlPxx{y{uDXkmGCo9frJ$(8&pFVO^v7FXbnpz)cGn@(I ztZ%9EvUZKLInEa67@KxD&~3D%+@OYH3N{M@_-VA@CDk);SxxG{9H@#QR7E7?{r{XZ z7}2Kq+ytL%d{L~Mxf2W{8l*FRvwC_+xT@Q=1z!J=*Ava2x}B%f)e{*5q58p4y^St0 X7OIz)h6ZQXCA!k+l4G;$O4|K@N diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels.metallib index 42f13b859f186fceed8ffe9de65f1ffffdacb187..ef32b0fb51573c97ff16c1611dff23e3d5fb7307 100644 GIT binary patch delta 4019 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 delta 898 zcmYLHUr19?7(ctWduP++?%t?nPPgf%yW8BHLD3)o^)QN!0^ULJ>h=!9+p? zA>~JDnqt&Lp;1z?iXJ9J=!^BHNDm{(dZH!ZJGV!CvYx<%g~obh{Mc_$->rbnJ5*_(Ng(jS1%| z9CRzf+7eCB(e8<()MK}-o9T<5bGYwO1eb)`DhI}DR9vcP!`=!-AdXE+s%*mor4-$y zzFTa#QQ3|Ym9*-9ld^le@tMNhF%t&EDqeXF^&4;6!N;9CW6J(g6-Rw>^(U8ITu%3x za@KbWw|sN}P}rkNe0LG<8v3~TjxSXPW~%H$SVGgbov1Ie;X-u^2dfpaae#5G*@6+- zA{V20yA_SP6>k3?EKpN+R6_4=HwOG2X!R>1nPy3fejck7KY1x(*y~3|H_)RiV(uNo zv4DZXfFe$? @@ -69,36 +70,9 @@ @MainActor public func initUntoldXR(device: MTLDevice, commandQueue: MTLCommandQueue, layerRenderer: LayerRenderer) { configureSpatialEventBridge() + applyXRLightingMode(RuntimeEnvironmentLightingStore.shared.mode) - // Start ARKit tracking asynchronously - // Use unstructured Task to avoid blocking initialization - let worldTracking = worldTracking - let arSession = arSession - let planeDetection = planeDetection - Task { - do { - guard worldTracking.state != .running else { return } - - // Check world sensing authorization before attempting to run. - let authStatus = await arSession.queryAuthorization(for: [.worldSensing]) - if authStatus[.worldSensing] == .denied { - print("⚠️ World sensing authorization denied — plane detection disabled. Grant permission in Settings > Privacy > World Sensing.") - // Still run with world tracking only so device tracking works. - try await arSession.run([worldTracking]) - return - } - - var providers: [any DataProvider] = [worldTracking] - if PlaneDetectionProvider.isSupported { - providers.append(planeDetection) - } else { - print("⚠️ PlaneDetectionProvider is not supported on this device") - } - try await arSession.run(providers) - } catch { - print("⚠️ Failed to start ARKit providers: \(error)") - } - } + startARKitProviders() // Start monitoring plane anchor updates in the background. if PlaneDetectionProvider.isSupported { @@ -249,9 +223,49 @@ lock.unlock() planeMonitorTask?.cancel() planeMonitorTask = nil + xrEnvironmentLightingSystem.setEnabled(false) RealSurfacePlaneStore.shared.clear() } + private func startARKitProviders() { + #if canImport(ARKit) + let worldTracking = worldTracking + let arSession = arSession + let planeDetection = planeDetection + let xrEnvironmentLightingSystem = xrEnvironmentLightingSystem + + Task { + do { + // Check world sensing authorization before attempting plane detection. + let authStatus = await arSession.queryAuthorization(for: [.worldSensing]) + let worldSensingAllowed = authStatus[.worldSensing] != .denied + + var providers: [any DataProvider] = [worldTracking] + + if worldSensingAllowed { + if PlaneDetectionProvider.isSupported { + providers.append(planeDetection) + } else { + print("⚠️ PlaneDetectionProvider is not supported on this device") + } + } else { + print("⚠️ World sensing authorization denied — plane detection disabled. Grant permission in Settings > Privacy > World Sensing.") + } + + if let lightingProvider = xrEnvironmentLightingSystem.providerForSession { + providers.append(lightingProvider) + } + + try await arSession.run(providers) + xrEnvironmentLightingSystem.markProviderRunning(xrEnvironmentLightingSystem.providerForSession != nil) + } catch { + xrEnvironmentLightingSystem.markProviderRunning(false) + print("⚠️ Failed to start ARKit providers: \(error)") + } + } + #endif + } + private func isRunning() -> Bool { lock.lock() let running = _isRunning @@ -696,18 +710,9 @@ lastWorldTrackingRecoveryAttemptTime = now - let worldTracking = worldTracking - let arSession = arSession - - Task { - do { - guard worldTracking.state != .running else { return } - try await arSession.run([worldTracking]) - print("✓ XR world tracking restarted") - } catch { - print("⚠️ XR world tracking recovery failed: \(error)") - } - } + guard worldTracking.state != .running else { return } + startARKitProviders() + print("✓ XR ARKit providers recovery scheduled") #endif } @@ -737,6 +742,25 @@ break } } + + public func setXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { + RuntimeEnvironmentLightingStore.shared.mode = mode + applyXRLightingMode(mode) + startARKitProviders() + } + + private func applyXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { + switch mode { + case .realWorldEstimate, .authoredPlusRealWorldEstimate: + xrEnvironmentLightingSystem.setEnabled(true) + case .authoredOnly, .staticIBL: + xrEnvironmentLightingSystem.setEnabled(false) + } + } + + public func xrEnvironmentLightingDiagnostics() -> XREnvironmentLightingDiagnostics { + xrEnvironmentLightingSystem.diagnostics() + } } #endif diff --git a/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift new file mode 100644 index 00000000..9fea1daf --- /dev/null +++ b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift @@ -0,0 +1,373 @@ +// +// XREnvironmentLightingSystem.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +#if os(visionOS) + import Foundation + import Metal + import UntoldEngine + #if canImport(ARKit) + import ARKit + #endif + + public struct XREnvironmentLightingDiagnostics: Sendable, Equatable { + public var enabled: Bool + public var providerSupported: Bool + public var providerRunning: Bool + public var latestProbeTimestamp: CFTimeInterval? + public var latestProbeTextureValid: Bool + public var latestCameraScaleReference: Float? + public var prefilterInFlight: Bool + public var lastPrefilterDurationMs: Double? + public var acceptedProbeUpdateCount: Int + public var skippedProbeUpdateCount: Int + public var fallbackReason: String? + } + + public final class XREnvironmentLightingSystem: @unchecked Sendable { + private let lock = NSLock() + private var enabledValue = false + private var providerRunningValue = false + private var latestProbeTimestampValue: CFTimeInterval? + private var latestProbeTextureValidValue = false + private var latestCameraScaleReferenceValue: Float? + private var prefilterInFlightValue = false + private var lastPrefilterDurationMsValue: Double? + private var acceptedProbeUpdateCountValue = 0 + private var skippedProbeUpdateCountValue = 0 + private var fallbackReasonValue: String? + private var lastAcceptedProbeUpdateTime: CFTimeInterval = 0 + private var probeMonitorTask: Task? + private var textureSets: [RuntimeEnvironmentLightingTextureSet] = [] + private var currentReadTextureSetIndex = 0 + private var prefilterGeneration: UInt64 = 0 + + #if canImport(ARKit) + private let environmentLightEstimationProvider: EnvironmentLightEstimationProvider? + #endif + + public var minimumProbeUpdateInterval: CFTimeInterval = 0.5 + + public init() { + #if canImport(ARKit) + if EnvironmentLightEstimationProvider.isSupported { + environmentLightEstimationProvider = EnvironmentLightEstimationProvider() + } else { + environmentLightEstimationProvider = nil + } + #endif + } + + deinit { + probeMonitorTask?.cancel() + } + + public var enabled: Bool { + lock.lock() + let value = enabledValue + lock.unlock() + return value + } + + public var providerSupported: Bool { + #if canImport(ARKit) + environmentLightEstimationProvider != nil + #else + false + #endif + } + + #if canImport(ARKit) + public var providerForSession: (any DataProvider)? { + guard enabled, let environmentLightEstimationProvider else { return nil } + return environmentLightEstimationProvider + } + #endif + + public func setEnabled(_ enabled: Bool) { + lock.lock() + enabledValue = enabled + if !enabled { + fallbackReasonValue = nil + latestProbeTimestampValue = nil + latestProbeTextureValidValue = false + latestCameraScaleReferenceValue = nil + providerRunningValue = false + prefilterInFlightValue = false + lastPrefilterDurationMsValue = nil + lastAcceptedProbeUpdateTime = 0 + prefilterGeneration &+= 1 + RuntimeEnvironmentLightingStore.shared.publishXRLighting(nil) + } + lock.unlock() + + if enabled { + startProbeMonitor() + } else { + stopProbeMonitor() + } + } + + public func markProviderRunning(_ running: Bool) { + lock.lock() + providerRunningValue = running + lock.unlock() + } + + public func shouldAcceptProbeUpdate(timestamp: CFTimeInterval) -> Bool { + lock.lock() + defer { lock.unlock() } + + guard enabledValue else { + skippedProbeUpdateCountValue += 1 + fallbackReasonValue = "XR lighting disabled" + return false + } + + guard timestamp - lastAcceptedProbeUpdateTime >= minimumProbeUpdateInterval else { + skippedProbeUpdateCountValue += 1 + return false + } + + lastAcceptedProbeUpdateTime = timestamp + latestProbeTimestampValue = timestamp + acceptedProbeUpdateCountValue += 1 + fallbackReasonValue = nil + return true + } + + public func publishUnavailableProbe(reason: String) { + lock.lock() + latestProbeTextureValidValue = false + fallbackReasonValue = reason + lock.unlock() + } + + #if canImport(ARKit) + private func startProbeMonitor() { + guard probeMonitorTask == nil else { return } + guard let provider = environmentLightEstimationProvider else { + publishUnavailableProbe(reason: "Environment light estimation unsupported") + return + } + + probeMonitorTask = Task(priority: .utility) { [weak self, provider] in + for await update in provider.anchorUpdates { + if Task.isCancelled { break } + self?.handleProbeAnchorUpdate(update) + } + } + } + + private func stopProbeMonitor() { + probeMonitorTask?.cancel() + probeMonitorTask = nil + } + + private func handleProbeAnchorUpdate(_ update: AnchorUpdate) { + switch update.event { + case .added, .updated: + let anchor = update.anchor + guard shouldAcceptProbeUpdate(timestamp: anchor.timestamp) else { return } + + let hasTexture = anchor.environmentTexture != nil + lock.lock() + latestProbeTextureValidValue = hasTexture + latestCameraScaleReferenceValue = anchor.cameraScaleReference + if !hasTexture { + fallbackReasonValue = "XR probe texture unavailable" + } + lock.unlock() + + if let environmentTexture = anchor.environmentTexture { + scheduleProbePrefilter( + environmentTexture: environmentTexture, + timestamp: anchor.timestamp, + retainedAnchor: anchor + ) + } + + case .removed: + publishUnavailableProbe(reason: "XR probe anchor removed") + + @unknown default: + publishUnavailableProbe(reason: "Unknown XR probe update") + } + } + #else + private func startProbeMonitor() {} + + private func stopProbeMonitor() {} + #endif + + private func ensureTextureSets() -> Bool { + if textureSets.count == 2 { return true } + + guard let first = makeRuntimeEnvironmentLightingTextureSet(labelPrefix: "XR Runtime IBL A"), + let second = makeRuntimeEnvironmentLightingTextureSet(labelPrefix: "XR Runtime IBL B") + else { + fallbackReasonValue = "Unable to allocate XR IBL textures" + return false + } + + textureSets = [first, second] + currentReadTextureSetIndex = 0 + return true + } + + private func beginPrefilterIfPossible() -> (textureSetIndex: Int, textureSet: RuntimeEnvironmentLightingTextureSet, generation: UInt64)? { + lock.lock() + defer { lock.unlock() } + + guard enabledValue else { + fallbackReasonValue = "XR lighting disabled" + return nil + } + + guard !prefilterInFlightValue else { + skippedProbeUpdateCountValue += 1 + return nil + } + + guard ensureTextureSets() else { + return nil + } + + let writeIndex = currentReadTextureSetIndex == 0 ? 1 : 0 + let textureSet = textureSets[writeIndex] + prefilterGeneration &+= 1 + prefilterInFlightValue = true + fallbackReasonValue = nil + return (writeIndex, textureSet, prefilterGeneration) + } + + private func finishPrefilter( + succeeded: Bool, + textureSetIndex: Int, + generation: UInt64, + timestamp: CFTimeInterval, + durationMs: Double + ) { + lock.lock() + + guard enabledValue, generation == prefilterGeneration else { + lock.unlock() + return + } + + prefilterInFlightValue = false + lastPrefilterDurationMsValue = durationMs + + guard succeeded, textureSets.indices.contains(textureSetIndex) else { + fallbackReasonValue = "XR probe prefilter failed" + lock.unlock() + return + } + + currentReadTextureSetIndex = textureSetIndex + let textureSet = textureSets[textureSetIndex] + fallbackReasonValue = nil + lock.unlock() + + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: textureSet.irradianceMap, + specularMap: textureSet.specularMap, + brdfMap: textureSet.brdfMap, + intensityScale: 1.0, + timestamp: timestamp, + isValid: true + ) + ) + } + + private func scheduleProbePrefilter( + environmentTexture: MTLTexture, + timestamp: CFTimeInterval, + retainedAnchor: Any + ) { + guard environmentTexture.textureType == .typeCube else { + publishUnavailableProbe(reason: "XR probe texture is not a cube texture") + return + } + + guard let prefilter = beginPrefilterIfPossible() else { return } + let textureSetIndex = prefilter.textureSetIndex + let textureSet = prefilter.textureSet + let generation = prefilter.generation + + guard let commandBuffer = renderInfo.commandQueue.makeCommandBuffer() else { + finishPrefilter( + succeeded: false, + textureSetIndex: textureSetIndex, + generation: generation, + timestamp: timestamp, + durationMs: 0 + ) + return + } + + commandBuffer.label = "XR Environment Probe IBL Prefilter" + let startTime = Date().timeIntervalSinceReferenceDate + let encoded = executeXRIBLCubePreFilterPass( + commandBuffer: commandBuffer, + environmentCubeTexture: environmentTexture, + target: textureSet + ) + + guard encoded else { + finishPrefilter( + succeeded: false, + textureSetIndex: textureSetIndex, + generation: generation, + timestamp: timestamp, + durationMs: 0 + ) + return + } + + commandBuffer.addCompletedHandler { [weak self, retainedAnchor] commandBuffer in + _ = retainedAnchor + let durationMs = (Date().timeIntervalSinceReferenceDate - startTime) * 1000.0 + self?.finishPrefilter( + succeeded: commandBuffer.status == .completed, + textureSetIndex: textureSetIndex, + generation: generation, + timestamp: timestamp, + durationMs: durationMs + ) + } + commandBuffer.commit() + } + + public func diagnostics() -> XREnvironmentLightingDiagnostics { + lock.lock() + #if canImport(ARKit) + let providerRunning = environmentLightEstimationProvider?.state == .running + #else + let providerRunning = providerRunningValue + #endif + let diagnostics = XREnvironmentLightingDiagnostics( + enabled: enabledValue, + providerSupported: providerSupported, + providerRunning: providerRunning, + latestProbeTimestamp: latestProbeTimestampValue, + latestProbeTextureValid: latestProbeTextureValidValue, + latestCameraScaleReference: latestCameraScaleReferenceValue, + prefilterInFlight: prefilterInFlightValue, + lastPrefilterDurationMs: lastPrefilterDurationMsValue, + acceptedProbeUpdateCount: acceptedProbeUpdateCountValue, + skippedProbeUpdateCount: skippedProbeUpdateCountValue, + fallbackReason: fallbackReasonValue + ) + lock.unlock() + return diagnostics + } + } +#endif diff --git a/Tests/UntoldEngineRenderTests/RendererTest.swift b/Tests/UntoldEngineRenderTests/RendererTest.swift index ba292de5..38efdb0b 100644 --- a/Tests/UntoldEngineRenderTests/RendererTest.swift +++ b/Tests/UntoldEngineRenderTests/RendererTest.swift @@ -338,6 +338,15 @@ final class RendererTests: BaseRenderSetup { XCTAssertTrue(outputPipeline.success, "Output transform pipeline should compile successfully") } + func testXRIBLCubePreFilterPipelineInitialized() { + guard let pipeline = PipelineManager.shared.renderPipelinesByType[.xrIBLCubePreFilter] else { + XCTFail("XR IBL cube prefilter pipeline should be initialized") + return + } + + XCTAssertTrue(pipeline.success, "XR IBL cube prefilter pipeline should compile successfully") + } + func testSMAAEdgesPipelineInitialized() { guard let pipeline = PipelineManager.shared.renderPipelinesByType[.smaaEdges] else { XCTFail("SMAA edges pipeline should be initialized") diff --git a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift new file mode 100644 index 00000000..89f9dd19 --- /dev/null +++ b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift @@ -0,0 +1,184 @@ +// +// RuntimeEnvironmentLightingTests.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import Metal +@testable import UntoldEngine +import XCTest + +final class RuntimeEnvironmentLightingTests: XCTestCase { + override func tearDown() { + RuntimeEnvironmentLightingStore.shared.reset() + super.tearDown() + } + + func testDefaultModePreservesStaticIBLBehavior() { + RuntimeEnvironmentLightingStore.shared.reset() + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: true, + ambientIntensity: 0.7 + ) + + XCTAssertEqual(resolved.mode, .staticIBL) + XCTAssertTrue(resolved.applyIBL) + XCTAssertEqual(resolved.ambientIntensity, 0.7, accuracy: 0.0001) + XCTAssertNil(resolved.fallbackReason) + } + + func testAuthoredOnlyDisablesIBLWithoutChangingStaticTextureInputs() { + RuntimeEnvironmentLightingStore.shared.mode = .authoredOnly + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: true, + ambientIntensity: 0.4 + ) + + XCTAssertEqual(resolved.mode, .authoredOnly) + XCTAssertFalse(resolved.applyIBL) + XCTAssertEqual(resolved.ambientIntensity, 0.4, accuracy: 0.0001) + } + + func testRealWorldEstimateFallsBackToStaticIBLWhenNoXRLightingIsAvailable() { + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: true, + ambientIntensity: 0.5 + ) + + XCTAssertEqual(resolved.mode, .staticIBL) + XCTAssertTrue(resolved.applyIBL) + XCTAssertEqual(resolved.ambientIntensity, 0.5, accuracy: 0.0001) + XCTAssertEqual(resolved.fallbackReason, "XR lighting unavailable") + } + + func testInvalidXRLightingFallsBackToStaticIBL() { + RuntimeEnvironmentLightingStore.shared.mode = .authoredPlusRealWorldEstimate + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: nil, + specularMap: nil, + brdfMap: nil, + intensityScale: 2.0, + isValid: false + ) + ) + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: false, + ambientIntensity: 0.2 + ) + + XCTAssertEqual(resolved.mode, .staticIBL) + XCTAssertFalse(resolved.applyIBL) + XCTAssertEqual(resolved.ambientIntensity, 0.2, accuracy: 0.0001) + XCTAssertEqual(resolved.fallbackReason, "XR lighting unavailable") + } + + func testRenderingEnvironmentSettingUpdatesLightingMode() { + setRendering(.environment(.lightingMode(.realWorldEstimate))) + + XCTAssertEqual(RuntimeEnvironmentLightingStore.shared.mode, .realWorldEstimate) + } + + func testValidXRLightingOverridesStaticIBLAndAppliesIntensityScale() throws { + guard let device = MTLCreateSystemDefaultDevice() else { + throw XCTSkip("Metal device is required for texture-backed XR lighting test") + } + + let xrIrradiance = try makeTexture(device: device, label: "XR Irradiance") + let xrSpecular = try makeTexture(device: device, label: "XR Specular") + let xrBRDF = try makeTexture(device: device, label: "XR BRDF") + let staticIrradiance = try makeTexture(device: device, label: "Static Irradiance") + let staticSpecular = try makeTexture(device: device, label: "Static Specular") + let staticBRDF = try makeTexture(device: device, label: "Static BRDF") + + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: xrIrradiance, + specularMap: xrSpecular, + brdfMap: xrBRDF, + intensityScale: 1.5, + isValid: true + ) + ) + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: staticIrradiance, + staticSpecularMap: staticSpecular, + staticBRDFMap: staticBRDF, + staticIBLEnabled: false, + ambientIntensity: 0.4 + ) + + XCTAssertEqual(resolved.mode, .realWorldEstimate) + XCTAssertTrue(resolved.applyIBL) + XCTAssertTrue(resolved.irradianceMap === xrIrradiance) + XCTAssertTrue(resolved.specularMap === xrSpecular) + XCTAssertTrue(resolved.brdfMap === xrBRDF) + XCTAssertEqual(resolved.ambientIntensity, 0.6, accuracy: 0.0001) + XCTAssertNil(resolved.fallbackReason) + } + + func testIncompleteXRLightingFallsBackWithoutApplyingIntensityScale() { + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: nil, + specularMap: nil, + brdfMap: nil, + intensityScale: 2.5, + isValid: true + ) + ) + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: true, + ambientIntensity: 0.4 + ) + + XCTAssertEqual(resolved.mode, .staticIBL) + XCTAssertEqual(resolved.ambientIntensity, 0.4, accuracy: 0.0001) + XCTAssertEqual(resolved.fallbackReason, "XR lighting unavailable") + } + + private func makeTexture(device: MTLDevice, label: String) throws -> MTLTexture { + let descriptor = MTLTextureDescriptor.texture2DDescriptor( + pixelFormat: .rgba8Unorm, + width: 1, + height: 1, + mipmapped: false + ) + descriptor.usage = [.shaderRead] + + guard let texture = device.makeTexture(descriptor: descriptor) else { + throw XCTSkip("Unable to allocate test texture: \(label)") + } + + texture.label = label + return texture + } +} From e7db55498a4fc023421ed5303eb70d17cfe5840a Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Fri, 19 Jun 2026 07:01:32 -0700 Subject: [PATCH 02/15] [Patch] Added xr light probe contribution factor --- .../Renderer/RuntimeEnvironmentLighting.swift | 24 +++- .../Utils/EngineSettingsAPI.swift | 3 + Sources/UntoldEngineXR/UntoldEngineXR.swift | 4 + .../XREnvironmentLightingSystem.swift | 2 + .../RuntimeEnvironmentLightingTests.swift | 41 ++++++ docs/API/UsingXRLighting.md | 122 ++++++++++++++++++ 6 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 docs/API/UsingXRLighting.md diff --git a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift index d01c3bea..b95270cb 100644 --- a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift +++ b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift @@ -117,6 +117,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { private let lock = NSLock() private var modeValue: RuntimeEnvironmentLightingMode = .staticIBL + private var realWorldLightingContributionValue: Float = 1.0 private var xrLightingValue: RuntimeEnvironmentLighting? private init() {} @@ -135,6 +136,20 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { } } + public var realWorldLightingContribution: Float { + get { + lock.lock() + let value = realWorldLightingContributionValue + lock.unlock() + return value + } + set { + lock.lock() + realWorldLightingContributionValue = Self.sanitizedContribution(newValue) + lock.unlock() + } + } + public func publishXRLighting(_ lighting: RuntimeEnvironmentLighting?) { lock.lock() xrLightingValue = lighting @@ -151,6 +166,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { public func reset() { lock.lock() modeValue = .staticIBL + realWorldLightingContributionValue = 1.0 xrLightingValue = nil lock.unlock() } @@ -164,6 +180,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { ) -> ResolvedEnvironmentLighting { lock.lock() let currentMode = modeValue + let realWorldLightingContribution = realWorldLightingContributionValue let xrLighting = xrLightingValue lock.unlock() @@ -209,10 +226,15 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { specularMap: specularMap, brdfMap: brdfMap, applyIBL: true, - ambientIntensity: ambientIntensity * xrLighting.intensityScale, + ambientIntensity: ambientIntensity * xrLighting.intensityScale * realWorldLightingContribution, mode: currentMode, fallbackReason: nil ) } } + + private static func sanitizedContribution(_ value: Float) -> Float { + guard value.isFinite else { return 1.0 } + return max(value, 0.0) + } } diff --git a/Sources/UntoldEngine/Utils/EngineSettingsAPI.swift b/Sources/UntoldEngine/Utils/EngineSettingsAPI.swift index edb87a89..92080fee 100644 --- a/Sources/UntoldEngine/Utils/EngineSettingsAPI.swift +++ b/Sources/UntoldEngine/Utils/EngineSettingsAPI.swift @@ -68,6 +68,7 @@ public enum RenderingEnvironmentProperty: Sendable { case ibl(Bool) case visible(Bool) case lightingMode(RuntimeEnvironmentLightingMode) + case realWorldLightingContribution(Float) } public enum WireframeProperty: Sendable { @@ -101,6 +102,8 @@ private func applyRenderingEnvironmentProperty(_ property: RenderingEnvironmentP renderEnvironment = value case let .lightingMode(value): RuntimeEnvironmentLightingStore.shared.mode = value + case let .realWorldLightingContribution(value): + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = value } } diff --git a/Sources/UntoldEngineXR/UntoldEngineXR.swift b/Sources/UntoldEngineXR/UntoldEngineXR.swift index 2ac62ff9..673457b7 100644 --- a/Sources/UntoldEngineXR/UntoldEngineXR.swift +++ b/Sources/UntoldEngineXR/UntoldEngineXR.swift @@ -749,6 +749,10 @@ startARKitProviders() } + public func setXRLightingContribution(_ factor: Float) { + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = factor + } + private func applyXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { switch mode { case .realWorldEstimate, .authoredPlusRealWorldEstimate: diff --git a/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift index 9fea1daf..b876ca3b 100644 --- a/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift +++ b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift @@ -25,6 +25,7 @@ public var latestCameraScaleReference: Float? public var prefilterInFlight: Bool public var lastPrefilterDurationMs: Double? + public var realWorldLightingContribution: Float public var acceptedProbeUpdateCount: Int public var skippedProbeUpdateCount: Int public var fallbackReason: String? @@ -362,6 +363,7 @@ latestCameraScaleReference: latestCameraScaleReferenceValue, prefilterInFlight: prefilterInFlightValue, lastPrefilterDurationMs: lastPrefilterDurationMsValue, + realWorldLightingContribution: RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution, acceptedProbeUpdateCount: acceptedProbeUpdateCountValue, skippedProbeUpdateCount: skippedProbeUpdateCountValue, fallbackReason: fallbackReasonValue diff --git a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift index 89f9dd19..b7f2558b 100644 --- a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift +++ b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift @@ -100,6 +100,12 @@ final class RuntimeEnvironmentLightingTests: XCTestCase { XCTAssertEqual(RuntimeEnvironmentLightingStore.shared.mode, .realWorldEstimate) } + func testRenderingEnvironmentSettingUpdatesRealWorldLightingContribution() { + setRendering(.environment(.realWorldLightingContribution(0.35))) + + XCTAssertEqual(RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution, 0.35, accuracy: 0.0001) + } + func testValidXRLightingOverridesStaticIBLAndAppliesIntensityScale() throws { guard let device = MTLCreateSystemDefaultDevice() else { throw XCTSkip("Metal device is required for texture-backed XR lighting test") @@ -140,6 +146,41 @@ final class RuntimeEnvironmentLightingTests: XCTestCase { XCTAssertNil(resolved.fallbackReason) } + func testRealWorldLightingContributionScalesExistingXRLighting() throws { + guard let device = MTLCreateSystemDefaultDevice() else { + throw XCTSkip("Metal device is required for texture-backed XR lighting test") + } + + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = 0.25 + try RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: makeTexture(device: device, label: "XR Irradiance"), + specularMap: makeTexture(device: device, label: "XR Specular"), + brdfMap: makeTexture(device: device, label: "XR BRDF"), + intensityScale: 2.0, + isValid: true + ) + ) + + let resolved = RuntimeEnvironmentLightingStore.shared.resolve( + staticIrradianceMap: nil, + staticSpecularMap: nil, + staticBRDFMap: nil, + staticIBLEnabled: true, + ambientIntensity: 0.8 + ) + + XCTAssertEqual(resolved.ambientIntensity, 0.4, accuracy: 0.0001) + XCTAssertNil(resolved.fallbackReason) + } + + func testRealWorldLightingContributionClampsNegativeValues() { + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = -0.5 + + XCTAssertEqual(RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution, 0.0, accuracy: 0.0001) + } + func testIncompleteXRLightingFallsBackWithoutApplyingIntensityScale() { RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate RuntimeEnvironmentLightingStore.shared.publishXRLighting( diff --git a/docs/API/UsingXRLighting.md b/docs/API/UsingXRLighting.md new file mode 100644 index 00000000..dd7aeb1d --- /dev/null +++ b/docs/API/UsingXRLighting.md @@ -0,0 +1,122 @@ +# XR Lighting + +XR lighting lets a visionOS app shade virtual content with the Vision Pro's real-world environment light estimate. The engine receives environment probe updates from ARKit, prefilters the probe into IBL textures, and uses those textures in the normal PBR lighting path. + +This is independent of passthrough visibility. A scene can use real-world lighting in mixed passthrough or while rendering only virtual content. + +## Startup Setup + +Enable XR lighting when the `UntoldEngineXR` instance is created, before starting the XR render loop: + +```swift +if let xr = UntoldEngineXR(layerRenderer: layerRenderer) { + XRHolder.shared.xr = xr + + xr.setImmersionMode(xrImmersionMode: .mixed) + xr.setXRLightingMode(.realWorldEstimate) + xr.setXRLightingContribution(1.0) + + xr.start() + xr.runLoop() +} +``` + +`setXRLightingMode(_:)` owns the Vision Pro provider lifecycle. It enables or disables ARKit environment light estimation and restarts the ARKit provider set when needed. + +Practical rule: + +```swift +// Startup/session setup +xr.setXRLightingMode(.realWorldEstimate) + +// Runtime tuning +xr.setXRLightingContribution(0.75) +``` + +Set the lighting mode during XR startup. Change the contribution factor whenever the app needs to tune the strength of real-world lighting. + +## Lighting Modes + +```swift +xr.setXRLightingMode(.authoredOnly) +xr.setXRLightingMode(.staticIBL) +xr.setXRLightingMode(.realWorldEstimate) +xr.setXRLightingMode(.authoredPlusRealWorldEstimate) +``` + +| Mode | Effect | +|---|---| +| `.authoredOnly` | Disables IBL contribution and uses authored lights only. | +| `.staticIBL` | Uses the engine's loaded/static HDR IBL path. | +| `.realWorldEstimate` | Uses Vision Pro environment light probes when available. | +| `.authoredPlusRealWorldEstimate` | Uses authored lights plus Vision Pro environment light probes. | + +If real-world lighting is enabled but no valid probe is available yet, the renderer falls back to the static IBL path. + +## Contribution Factor + +Use the contribution factor to tune how strongly the Vision Pro lighting probe affects the scene: + +```swift +xr.setXRLightingContribution(0.75) +``` + +The value is a non-negative multiplier: + +| Value | Meaning | +|---|---| +| `0.0` | Real-world IBL contributes no ambient/specular lighting. | +| `0.5` | Half-strength real-world IBL. | +| `1.0` | Default full-strength real-world IBL. | +| `> 1.0` | Boosted real-world IBL. | + +Negative values are clamped to `0.0`. Non-finite values reset to `1.0`. + +The factor applies immediately to the latest cached probe; the app does not need to wait for ARKit to publish another probe update. + +The same multiplier can be set through the rendering settings API: + +```swift +setRendering(.environment(.realWorldLightingContribution(0.75))) +``` + +This only changes the contribution factor. Use `xr.setXRLightingMode(_:)` to enable or disable the Vision Pro provider. + +Unlike `setXRLightingMode(_:)`, the contribution factor can be changed at runtime. It does not start, stop, or restart ARKit providers. + +## Diagnostics + +Use diagnostics while testing on Vision Pro: + +```swift +print("XR Lighting:", xr.xrEnvironmentLightingDiagnostics()) +``` + +Important fields: + +| Field | Meaning | +|---|---| +| `enabled` | Whether the engine requested XR environment lighting. | +| `providerSupported` | Whether ARKit environment light estimation is supported. | +| `providerRunning` | Whether the ARKit provider is currently running. | +| `latestProbeTimestamp` | Timestamp of the latest accepted probe update. | +| `latestProbeTextureValid` | Whether the latest accepted probe contained a usable texture. | +| `prefilterInFlight` | Whether the engine is currently converting a probe into runtime IBL textures. | +| `lastPrefilterDurationMs` | GPU command duration for the most recent prefilter pass. | +| `realWorldLightingContribution` | Current real-world lighting contribution multiplier. | +| `acceptedProbeUpdateCount` | Number of probe updates accepted by the engine. | +| `skippedProbeUpdateCount` | Number of probe updates skipped because of throttling or in-flight work. | +| `fallbackReason` | Reason XR lighting is unavailable, if the renderer is falling back. | + +Probe updates are not expected every frame. ARKit publishes updates opportunistically as the real-world estimate changes. The engine throttles accepted probe work to avoid unnecessary GPU prefiltering. + +## Passthrough + +XR lighting and passthrough are separate controls: + +```swift +xr.setImmersionMode(xrImmersionMode: .mixed) +xr.setXRLightingMode(.realWorldEstimate) +``` + +Mixed passthrough controls whether the real camera view is visible. XR lighting controls how virtual content is shaded. They can be used together or independently. From 23d88bf2d6a7840a33455ec9da2e88e4e03af7a4 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Tue, 23 Jun 2026 09:14:34 -0700 Subject: [PATCH 03/15] [Patch] Add virtual light --- README.md | 1 + Sources/CShaderTypes/ShaderTypes.h | 2 + .../Renderer/RuntimeEnvironmentLighting.swift | 8 + .../UntoldEngine/Shaders/LightShader.metal | 43 +- .../Systems/LightPortalSystem.swift | 449 +++++++++++++++ .../UntoldEngine/Systems/LightingSystem.swift | 295 ++++++++++ .../Systems/RegistrationSystem.swift | 2 + .../Systems/TransformSystem.swift | 2 + .../UntoldEngineKernels-ios.air | Bin 146096 -> 146752 bytes .../UntoldEngineKernels-ios.metallib | Bin 491143 -> 493799 bytes .../UntoldEngineKernels-tvos.air | Bin 146064 -> 146720 bytes .../UntoldEngineKernels-tvos.metallib | Bin 488999 -> 491655 bytes .../UntoldEngineKernels-tvossim.air | Bin 146096 -> 146752 bytes .../UntoldEngineKernels-tvossim.metallib | Bin 491415 -> 494071 bytes .../UntoldEngineKernels-xros.air | Bin 146064 -> 146720 bytes .../UntoldEngineKernels-xros.metallib | Bin 489015 -> 491671 bytes .../UntoldEngineKernels-xrossim.air | Bin 146096 -> 146752 bytes .../UntoldEngineKernels-xrossim.metallib | Bin 491431 -> 494087 bytes .../UntoldEngineKernels.metallib | Bin 488183 -> 490823 bytes .../Utils/SceneContextVisibility.swift | 150 +++++ Sources/UntoldEngineXR/UntoldEngineXR.swift | 102 +++- .../XREnvironmentLightingSystem.swift | 189 ++++++- .../LightSystemTest.swift | 37 ++ .../RendererTest.swift | 195 +++++++ .../LightPortalSystemTests.swift | 532 ++++++++++++++++++ .../SceneContextVisibilityTests.swift | 91 +++ Tests/UntoldEngineTests/TestEngineReset.swift | 4 + docs/API/UsingLightPortals.md | 162 ++++++ docs/API/UsingSceneChannels.md | 8 + docs/API/UsingXRLighting.md | 18 + 30 files changed, 2272 insertions(+), 18 deletions(-) create mode 100644 Sources/UntoldEngine/Systems/LightPortalSystem.swift create mode 100644 Tests/UntoldEngineTests/LightPortalSystemTests.swift create mode 100644 docs/API/UsingLightPortals.md diff --git a/README.md b/README.md index a2ec42d9..f2a610d1 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ Untold Engine is well-suited for: - [Camera System](docs/API/UsingCameraSystem.md) - [Rendering System](docs/API/UsingRenderingSystem.md) - [Lighting System](docs/API/UsingLightingSystem.md) +- [Light Portals](docs/API/UsingLightPortals.md) - [Materials](docs/API/UsingMaterials.md) - [Input System](docs/API/UsingInputSystem.md) - [Physics System](docs/API/UsingPhysicsSystem.md) diff --git a/Sources/CShaderTypes/ShaderTypes.h b/Sources/CShaderTypes/ShaderTypes.h index 4c513c49..50a547c0 100644 --- a/Sources/CShaderTypes/ShaderTypes.h +++ b/Sources/CShaderTypes/ShaderTypes.h @@ -73,6 +73,8 @@ typedef struct{ simd_float3 up; simd_float2 bounds; float intensity; + float range; + float nearSourceSuppressionRadius; bool twoSided; }AreaLightUniform; diff --git a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift index b95270cb..7f91f3d7 100644 --- a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift +++ b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift @@ -10,6 +10,7 @@ import Foundation import Metal +import simd public enum RuntimeEnvironmentLightingMode: Sendable, Equatable { case authoredOnly @@ -23,6 +24,7 @@ public struct RuntimeEnvironmentLighting { public var specularMap: MTLTexture? public var brdfMap: MTLTexture? public var intensityScale: Float + public var tintColor: simd_float3 public var timestamp: CFTimeInterval public var isValid: Bool @@ -31,6 +33,7 @@ public struct RuntimeEnvironmentLighting { specularMap: MTLTexture?, brdfMap: MTLTexture?, intensityScale: Float = 1.0, + tintColor: simd_float3 = simd_float3(1.0, 1.0, 1.0), timestamp: CFTimeInterval = Date().timeIntervalSinceReferenceDate, isValid: Bool ) { @@ -38,6 +41,7 @@ public struct RuntimeEnvironmentLighting { self.specularMap = specularMap self.brdfMap = brdfMap self.intensityScale = intensityScale + self.tintColor = tintColor self.timestamp = timestamp self.isValid = isValid } @@ -133,6 +137,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { lock.lock() modeValue = newValue lock.unlock() + resetLightPortalAreaLightCache() } } @@ -147,6 +152,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { lock.lock() realWorldLightingContributionValue = Self.sanitizedContribution(newValue) lock.unlock() + resetLightPortalAreaLightCache() } } @@ -154,6 +160,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { lock.lock() xrLightingValue = lighting lock.unlock() + resetLightPortalAreaLightCache() } public func latestXRLighting() -> RuntimeEnvironmentLighting? { @@ -169,6 +176,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { realWorldLightingContributionValue = 1.0 xrLightingValue = nil lock.unlock() + resetLightPortalAreaLightCache() } public func resolve( diff --git a/Sources/UntoldEngine/Shaders/LightShader.metal b/Sources/UntoldEngine/Shaders/LightShader.metal index d75f35b2..c2ff9cc6 100644 --- a/Sources/UntoldEngine/Shaders/LightShader.metal +++ b/Sources/UntoldEngine/Shaders/LightShader.metal @@ -150,6 +150,43 @@ LightContribution computeSpotLightContribution(constant SpotLightUniform &light, return outC; } +static inline float areaLightSurfaceDistance(constant AreaLightUniform &light, + float3 P, + float3 emittingNormal) { + float3 rightN = normalize(light.right); + float3 upN = normalize(light.up); + float3 toLightSample = P - light.position; + float planeDistance = abs(dot(toLightSample, emittingNormal)); + float2 rectangleDistance = abs(float2(dot(toLightSample, rightN), dot(toLightSample, upN))) - light.bounds * 0.5; + float edgeDistance = length(max(rectangleDistance, float2(0.0))); + return length(float2(planeDistance, edgeDistance)); +} + +static inline float areaLightRangeAttenuation(constant AreaLightUniform &light, + float3 P, + float3 emittingNormal) { + if (light.range <= 0.0) { + return 1.0; + } + + float distanceToLight = areaLightSurfaceDistance(light, P, emittingNormal); + return 1.0 - smoothstep(light.range * 0.75, light.range, distanceToLight); +} + +static inline float areaLightNearSourceAttenuation(constant AreaLightUniform &light, + float3 P, + float3 emittingNormal) { + if (light.nearSourceSuppressionRadius <= 0.0) { + return 1.0; + } + + float sourceDistance = areaLightSurfaceDistance(light, P, emittingNormal); + return smoothstep( + light.nearSourceSuppressionRadius * 0.35, + light.nearSourceSuppressionRadius, + sourceDistance + ); +} LightContribution evaluateAreaLight(constant AreaLightUniform &light, float4 verticesInWorldSpace, @@ -229,10 +266,12 @@ LightContribution evaluateAreaLight(constant AreaLightUniform &light, float3 f0 = mix(float3(0.04), inBaseColor.rgb, metallic); float3 fresnelScale = f0 * t2.x + (1.0 - f0) * t2.y; float3 diffuseBRDF = inBaseColor.rgb * (1.0 - metallic); + float lightAttenuation = areaLightRangeAttenuation(light, P, emittingNormal) + * areaLightNearSourceAttenuation(light, P, emittingNormal); LightContribution outC; - outC.diff = (half3)(light.intensity * light.color * Lo_diffuse * diffuseBRDF); - outC.spec = light.intensity * light.color * Lo_spec * fresnelScale; + outC.diff = (half3)(lightAttenuation * light.intensity * light.color * Lo_diffuse * diffuseBRDF); + outC.spec = lightAttenuation * light.intensity * light.color * Lo_spec * fresnelScale; return outC; diff --git a/Sources/UntoldEngine/Systems/LightPortalSystem.swift b/Sources/UntoldEngine/Systems/LightPortalSystem.swift new file mode 100644 index 00000000..ad541103 --- /dev/null +++ b/Sources/UntoldEngine/Systems/LightPortalSystem.swift @@ -0,0 +1,449 @@ +// +// LightPortalSystem.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import Foundation +import simd + +public struct LightPortalCandidate: Sendable { + public let entityId: EntityID + public let channels: SceneChannel + public let mode: SceneChannelLightPortalMode + public let worldTransform: simd_float4x4 + public let localBoundsMin: simd_float3 + public let localBoundsMax: simd_float3 +} + +public struct LightPortalDiscoveryDiagnostics: Equatable, Sendable { + public var scannedRenderableEntityCount: Int + public var candidateCount: Int + public var skippedHiddenCount: Int + public var skippedInvisibleRenderComponentCount: Int + public var skippedDisabledPortalCount: Int + public var skippedInvalidGeometryCount: Int + + public static let empty = LightPortalDiscoveryDiagnostics( + scannedRenderableEntityCount: 0, + candidateCount: 0, + skippedHiddenCount: 0, + skippedInvisibleRenderComponentCount: 0, + skippedDisabledPortalCount: 0, + skippedInvalidGeometryCount: 0 + ) +} + +public struct LightPortalProxyLight: Equatable, Sendable { + public let sourceEntityId: EntityID + public let channels: SceneChannel + public let position: simd_float3 + public let forward: simd_float3 + public let right: simd_float3 + public let up: simd_float3 + public let bounds: simd_float2 + public let color: simd_float3 + public let intensity: Float + public let range: Float + public let distanceToCamera: Float + public let useRealWorldTint: Bool +} + +public struct LightPortalResolutionDiagnostics: Equatable, Sendable { + public var discoveredCandidateCount: Int + public var activePortalCount: Int + public var skippedByActivationDistanceCount: Int + public var maxActivePortals: Int + + public static let empty = LightPortalResolutionDiagnostics( + discoveredCandidateCount: 0, + activePortalCount: 0, + skippedByActivationDistanceCount: 0, + maxActivePortals: 0 + ) +} + +public final class LightPortalSystem: @unchecked Sendable { + public static let shared = LightPortalSystem() + + private let minimumPortalSurfaceDimension: Float = 0.01 + private let maximumPortalThicknessFraction: Float = 0.25 + private let lock = NSLock() + private var lastDiagnostics: LightPortalDiscoveryDiagnostics = .empty + private var lastResolutionDiagnostics: LightPortalResolutionDiagnostics = .empty + + private init() {} + + public func discoverCandidates() -> [LightPortalCandidate] { + guard hasSceneChannelLightPortalsEnabled() else { + setDiagnostics(.empty) + return [] + } + + let renderComponentId = getComponentId(for: RenderComponent.self) + let worldTransformComponentId = getComponentId(for: WorldTransformComponent.self) + let localTransformComponentId = getComponentId(for: LocalTransformComponent.self) + let entityIds = queryEntitiesWithComponentIds( + [renderComponentId, worldTransformComponentId, localTransformComponentId], + in: scene + ).sorted() + + var candidates: [LightPortalCandidate] = [] + var diagnostics = LightPortalDiscoveryDiagnostics.empty + diagnostics.scannedRenderableEntityCount = entityIds.count + + for entityId in entityIds { + guard let renderComponent = scene.get(component: RenderComponent.self, for: entityId) else { + continue + } + + if renderComponent.isVisible == false { + diagnostics.skippedInvisibleRenderComponentCount += 1 + continue + } + + if shouldHideSceneEntity(entityId: entityId) { + diagnostics.skippedHiddenCount += 1 + continue + } + + let channels = getEntitySceneChannels(entityId: entityId) + let mode = sceneChannelLightPortalMode(for: channels) + guard case .enabled = mode else { + diagnostics.skippedDisabledPortalCount += 1 + continue + } + + guard let worldTransform = scene.get(component: WorldTransformComponent.self, for: entityId), + let localTransform = scene.get(component: LocalTransformComponent.self, for: entityId) + else { + continue + } + + guard isValidPortalGeometry(localBoundsMin: localTransform.boundingBox.min, localBoundsMax: localTransform.boundingBox.max) else { + diagnostics.skippedInvalidGeometryCount += 1 + continue + } + + candidates.append( + LightPortalCandidate( + entityId: entityId, + channels: channels, + mode: mode, + worldTransform: worldTransform.space, + localBoundsMin: localTransform.boundingBox.min, + localBoundsMax: localTransform.boundingBox.max + ) + ) + } + + diagnostics.candidateCount = candidates.count + setDiagnostics(diagnostics) + return candidates + } + + public func resolveProxyLights(cameraPosition: simd_float3) -> [LightPortalProxyLight] { + let candidates = discoverCandidates() + let resolved = resolveProxyLights(from: candidates, cameraPosition: cameraPosition) + setResolutionDiagnostics(resolved.diagnostics) + return resolved.proxyLights + } + + public func resolveProxyLightsForActiveCamera() -> [LightPortalProxyLight] { + guard let camera = CameraSystem.shared.activeCamera, + let cameraComponent = scene.get(component: CameraComponent.self, for: camera) + else { + let candidates = discoverCandidates() + let resolved = resolveProxyLights(from: candidates, cameraPosition: nil) + setResolutionDiagnostics(resolved.diagnostics) + return resolved.proxyLights + } + + return resolveProxyLights(cameraPosition: SceneRootTransform.shared.effectiveCameraPosition(cameraComponent.localPosition)) + } + + public func discoveryDiagnostics() -> LightPortalDiscoveryDiagnostics { + lock.lock() + let diagnostics = lastDiagnostics + lock.unlock() + return diagnostics + } + + public func resolutionDiagnostics() -> LightPortalResolutionDiagnostics { + lock.lock() + let diagnostics = lastResolutionDiagnostics + lock.unlock() + return diagnostics + } + + func resetDiagnostics() { + setDiagnostics(.empty) + setResolutionDiagnostics(.empty) + } + + private func setDiagnostics(_ diagnostics: LightPortalDiscoveryDiagnostics) { + lock.lock() + lastDiagnostics = diagnostics + lock.unlock() + } + + private func setResolutionDiagnostics(_ diagnostics: LightPortalResolutionDiagnostics) { + lock.lock() + lastResolutionDiagnostics = diagnostics + lock.unlock() + } + + private func resolveProxyLights( + from candidates: [LightPortalCandidate], + cameraPosition: simd_float3? + ) -> (proxyLights: [LightPortalProxyLight], diagnostics: LightPortalResolutionDiagnostics) { + var diagnostics = LightPortalResolutionDiagnostics.empty + diagnostics.discoveredCandidateCount = candidates.count + + var maxActivePortals = 0 + var activeChannelCapsByRawValue: [UInt64: Int] = [:] + var resolvedProxyLights: [LightPortalProxyLight] = [] + var channelRawValuesByEntityId: [EntityID: [UInt64]] = [:] + + for candidate in candidates { + guard case let .enabled( + intensity, + range, + useRealWorldTint, + candidateMaxActivePortals, + activationDistance + ) = candidate.mode else { + continue + } + + maxActivePortals = max(maxActivePortals, candidateMaxActivePortals) + let portalChannelRawValues = enabledLightPortalRawChannelValues(in: candidate.channels) + channelRawValuesByEntityId[candidate.entityId] = portalChannelRawValues + for rawValue in portalChannelRawValues { + let channel = SceneChannel(rawValue: rawValue) + if case let .enabled(_, _, _, channelMaxActivePortals, _) = getSceneChannelLightPortalMode(channel) { + activeChannelCapsByRawValue[rawValue] = channelMaxActivePortals + } + } + + let position = portalCenter(candidate) + let frame = portalFrame(candidate) + let distanceToCamera: Float + if let cameraPosition { + distanceToCamera = distanceToPortalRectangle(cameraPosition, center: position, frame: frame) + if distanceToCamera > activationDistance { + diagnostics.skippedByActivationDistanceCount += 1 + continue + } + } else { + distanceToCamera = 0.0 + } + + resolvedProxyLights.append( + LightPortalProxyLight( + sourceEntityId: candidate.entityId, + channels: candidate.channels, + position: position, + forward: frame.forward, + right: frame.right, + up: frame.up, + bounds: frame.bounds, + color: simd_float3(1.0, 1.0, 1.0), + intensity: intensity, + range: range, + distanceToCamera: distanceToCamera, + useRealWorldTint: useRealWorldTint + ) + ) + } + + resolvedProxyLights.sort { + if $0.distanceToCamera == $1.distanceToCamera { + return $0.sourceEntityId < $1.sourceEntityId + } + return $0.distanceToCamera < $1.distanceToCamera + } + + diagnostics.maxActivePortals = maxActivePortals + if maxActivePortals <= 0 { + diagnostics.activePortalCount = 0 + return ([], diagnostics) + } + + var selectedProxyLights: [LightPortalProxyLight] = [] + var activeCountsByRawValue: [UInt64: Int] = [:] + for proxyLight in resolvedProxyLights { + let rawValues = channelRawValuesByEntityId[proxyLight.sourceEntityId] ?? [] + let cappedRawValues = rawValues.filter { activeChannelCapsByRawValue[$0] != nil } + + if cappedRawValues.isEmpty { + if selectedProxyLights.count >= maxActivePortals { + continue + } + } else { + let hasRemainingChannelCapacity = cappedRawValues.allSatisfy { rawValue in + let cap = activeChannelCapsByRawValue[rawValue] ?? 0 + return (activeCountsByRawValue[rawValue] ?? 0) < cap + } + guard hasRemainingChannelCapacity else { continue } + } + + selectedProxyLights.append(proxyLight) + for rawValue in cappedRawValues { + activeCountsByRawValue[rawValue, default: 0] += 1 + } + } + diagnostics.activePortalCount = selectedProxyLights.count + return (selectedProxyLights, diagnostics) + } + + private func portalCenter(_ candidate: LightPortalCandidate) -> simd_float3 { + let localCenter = (candidate.localBoundsMin + candidate.localBoundsMax) * 0.5 + let worldCenter = simd_mul(candidate.worldTransform, simd_float4(localCenter, 1.0)) + return simd_float3(worldCenter.x, worldCenter.y, worldCenter.z) + } + + private struct PortalFrame { + var forward: simd_float3 + var right: simd_float3 + var up: simd_float3 + var bounds: simd_float2 + } + + private struct PortalAxis { + var index: Int + var localSize: Float + } + + private func portalFrame(_ candidate: LightPortalCandidate) -> PortalFrame { + let localSize = abs(candidate.localBoundsMax - candidate.localBoundsMin) + let axes = [ + PortalAxis(index: 0, localSize: localSize.x), + PortalAxis(index: 1, localSize: localSize.y), + PortalAxis(index: 2, localSize: localSize.z), + ].sorted { + if $0.localSize == $1.localSize { + return $0.index < $1.index + } + return $0.localSize > $1.localSize + } + + let rightAxis = axes[0].index + let upAxis = axes[1].index + let normalAxis = axes[2].index + + let rightWorld = worldAxis(candidate.worldTransform, axis: rightAxis) + let upWorld = worldAxis(candidate.worldTransform, axis: upAxis) + let forwardWorld = worldAxis(candidate.worldTransform, axis: normalAxis) + + return PortalFrame( + forward: normalizedAxis(forwardWorld, fallback: simd_float3(0.0, 0.0, 1.0)), + right: normalizedAxis(rightWorld, fallback: simd_float3(1.0, 0.0, 0.0)), + up: normalizedAxis(upWorld, fallback: simd_float3(0.0, 1.0, 0.0)), + bounds: simd_float2( + max(localSizeForAxis(localSize, axis: rightAxis) * simd_length(rightWorld), 0.001), + max(localSizeForAxis(localSize, axis: upAxis) * simd_length(upWorld), 0.001) + ) + ) + } + + private func isValidPortalGeometry(localBoundsMin: simd_float3, localBoundsMax: simd_float3) -> Bool { + let localSize = abs(localBoundsMax - localBoundsMin) + guard localSize.x.isFinite, localSize.y.isFinite, localSize.z.isFinite else { + return false + } + + let sortedSizes = [localSize.x, localSize.y, localSize.z].sorted(by: >) + guard sortedSizes[0] >= minimumPortalSurfaceDimension, + sortedSizes[1] >= minimumPortalSurfaceDimension + else { + return false + } + + let thickness = sortedSizes[2] + return thickness <= sortedSizes[1] * maximumPortalThicknessFraction + } + + private func enabledLightPortalRawChannelValues(in channels: SceneChannel) -> [UInt64] { + rawChannelValues(in: channels).filter { rawValue in + let channel = SceneChannel(rawValue: rawValue) + if case .enabled = getSceneChannelLightPortalMode(channel) { + return true + } + return false + } + } + + private func rawChannelValues(in channels: SceneChannel) -> [UInt64] { + var values: [UInt64] = [] + var remaining = channels.rawValue + while remaining != 0 { + let rawValue = remaining & (~remaining &+ 1) + values.append(rawValue) + remaining &= ~rawValue + } + return values + } + + private func distanceToPortalRectangle(_ point: simd_float3, center: simd_float3, frame: PortalFrame) -> Float { + let toPoint = point - center + let planeDistance = abs(simd_dot(toPoint, frame.forward)) + let rectangleDistance = abs(simd_float2(simd_dot(toPoint, frame.right), simd_dot(toPoint, frame.up))) - frame.bounds * 0.5 + let edgeDistance = simd_length(max(rectangleDistance, simd_float2.zero)) + return simd_length(simd_float2(planeDistance, edgeDistance)) + } + + private func worldAxis(_ transform: simd_float4x4, axis: Int) -> simd_float3 { + switch axis { + case 0: + return simd_float3(transform.columns.0.x, transform.columns.0.y, transform.columns.0.z) + case 1: + return simd_float3(transform.columns.1.x, transform.columns.1.y, transform.columns.1.z) + default: + return simd_float3(transform.columns.2.x, transform.columns.2.y, transform.columns.2.z) + } + } + + private func localSizeForAxis(_ localSize: simd_float3, axis: Int) -> Float { + switch axis { + case 0: + return localSize.x + case 1: + return localSize.y + default: + return localSize.z + } + } + + private func normalizedAxis(_ value: simd_float3, fallback: simd_float3) -> simd_float3 { + let lengthSquared = simd_length_squared(value) + guard lengthSquared > 0.000001, lengthSquared.isFinite else { + return fallback + } + return simd_normalize(value) + } +} + +public func discoverSceneLightPortalCandidates() -> [LightPortalCandidate] { + LightPortalSystem.shared.discoverCandidates() +} + +public func getLightPortalDiscoveryDiagnostics() -> LightPortalDiscoveryDiagnostics { + LightPortalSystem.shared.discoveryDiagnostics() +} + +public func resolveSceneLightPortalProxyLights(cameraPosition: simd_float3) -> [LightPortalProxyLight] { + LightPortalSystem.shared.resolveProxyLights(cameraPosition: cameraPosition) +} + +public func resolveSceneLightPortalProxyLightsForActiveCamera() -> [LightPortalProxyLight] { + LightPortalSystem.shared.resolveProxyLightsForActiveCamera() +} + +public func getLightPortalResolutionDiagnostics() -> LightPortalResolutionDiagnostics { + LightPortalSystem.shared.resolutionDiagnostics() +} diff --git a/Sources/UntoldEngine/Systems/LightingSystem.swift b/Sources/UntoldEngine/Systems/LightingSystem.swift index 3b0564ca..897e8089 100644 --- a/Sources/UntoldEngine/Systems/LightingSystem.swift +++ b/Sources/UntoldEngine/Systems/LightingSystem.swift @@ -18,6 +18,10 @@ public final class LightingSystem: @unchecked Sendable { private let activeDirectionalLightLock = NSLock() private var _activeDirectionalLight: EntityID? + private let lightPortalRenderDiagnosticsLock = NSLock() + private var latestLightPortalRenderDiagnostics = LightPortalRenderDiagnostics.empty + private let lightPortalAreaLightCacheLock = NSLock() + private var lightPortalAreaLightCache: LightPortalAreaLightCache? private init() {} @@ -33,6 +37,63 @@ public final class LightingSystem: @unchecked Sendable { activeDirectionalLightLock.unlock() } } + + fileprivate func setLightPortalRenderDiagnostics(_ diagnostics: LightPortalRenderDiagnostics) { + lightPortalRenderDiagnosticsLock.lock() + latestLightPortalRenderDiagnostics = diagnostics + lightPortalRenderDiagnosticsLock.unlock() + } + + fileprivate func getLightPortalRenderDiagnostics() -> LightPortalRenderDiagnostics { + lightPortalRenderDiagnosticsLock.lock() + let diagnostics = latestLightPortalRenderDiagnostics + lightPortalRenderDiagnosticsLock.unlock() + return diagnostics + } + + fileprivate func cachedLightPortalAreaLights( + frameIndex: Int, + authoredAreaLightCount: Int, + remainingAreaLightCapacity: Int + ) -> (areaLights: [AreaLight], diagnostics: LightPortalRenderDiagnostics)? { + lightPortalAreaLightCacheLock.lock() + let cache = lightPortalAreaLightCache + lightPortalAreaLightCacheLock.unlock() + + guard cache?.frameIndex == frameIndex, + cache?.authoredAreaLightCount == authoredAreaLightCount, + cache?.remainingAreaLightCapacity == remainingAreaLightCapacity, + let cache + else { + return nil + } + + return (cache.areaLights, cache.diagnostics) + } + + fileprivate func setCachedLightPortalAreaLights( + frameIndex: Int, + authoredAreaLightCount: Int, + remainingAreaLightCapacity: Int, + areaLights: [AreaLight], + diagnostics: LightPortalRenderDiagnostics + ) { + lightPortalAreaLightCacheLock.lock() + lightPortalAreaLightCache = LightPortalAreaLightCache( + frameIndex: frameIndex, + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: remainingAreaLightCapacity, + areaLights: areaLights, + diagnostics: diagnostics + ) + lightPortalAreaLightCacheLock.unlock() + } + + fileprivate func resetLightPortalAreaLightCache() { + lightPortalAreaLightCacheLock.lock() + lightPortalAreaLightCache = nil + lightPortalAreaLightCacheLock.unlock() + } } public struct DirectionalLight { @@ -67,9 +128,73 @@ public struct AreaLight { var up: simd_float3 = .init(0.0, 1.0, 0.0) // Up vector defining the surface orientation var bounds: simd_float2 = .one var intensity: Float = 1.0 // Light intensity + var range: Float = 0.0 // Maximum influence distance; 0 keeps legacy unlimited area-light behavior + var nearSourceSuppressionRadius: Float = 0.0 // Radius near the light surface that fades contribution; 0 disables var twoSided: Bool = false // Whether the light emits from both sides } +private enum LightPortalLightingTuning { + static let suppressionFractionOfMinDimension: Float = 0.2 + static let minSuppressionRadius: Float = 0.15 + static let maxSuppressionRadius: Float = 0.5 +} + +private struct LightPortalAreaLightCache { + var frameIndex: Int + var authoredAreaLightCount: Int + var remainingAreaLightCapacity: Int + var areaLights: [AreaLight] + var diagnostics: LightPortalRenderDiagnostics +} + +public struct LightPortalRenderDiagnostics: Equatable, Sendable { + public var authoredAreaLightCount: Int + public var portalAreaLightCount: Int + public var remainingAreaLightCapacity: Int + public var environmentIntensityScale: Float + public var xrIntensityScale: Float? + public var environmentTintColor: simd_float3 + public var realWorldLightingContribution: Float + public var xrLightingValid: Bool + public var minEffectivePortalIntensity: Float? + public var maxEffectivePortalIntensity: Float? + public var averageEffectivePortalIntensity: Float? + public var totalEffectivePortalIntensity: Float + public var fallbackReason: String? + + public static let empty = LightPortalRenderDiagnostics( + authoredAreaLightCount: 0, + portalAreaLightCount: 0, + remainingAreaLightCapacity: 0, + environmentIntensityScale: 1.0, + xrIntensityScale: nil, + environmentTintColor: simd_float3(1.0, 1.0, 1.0), + realWorldLightingContribution: 1.0, + xrLightingValid: false, + minEffectivePortalIntensity: nil, + maxEffectivePortalIntensity: nil, + averageEffectivePortalIntensity: nil, + totalEffectivePortalIntensity: 0.0, + fallbackReason: nil + ) +} + +private func setLightPortalRenderDiagnostics(_ diagnostics: LightPortalRenderDiagnostics) { + LightingSystem.shared.setLightPortalRenderDiagnostics(diagnostics) +} + +public func getLightPortalRenderDiagnostics() -> LightPortalRenderDiagnostics { + LightingSystem.shared.getLightPortalRenderDiagnostics() +} + +public func resetLightPortalRenderDiagnostics() { + setLightPortalRenderDiagnostics(.empty) +} + +public func resetLightPortalAreaLightCache() { + LightingSystem.shared.resetLightPortalAreaLightCache() +} + private func applyDefaultLightOrientation(entityId: EntityID) { // Engine light emission is defined as local -Z transformed into world space. // Rotate identity lights so the default emission direction points along -Y. @@ -759,9 +884,179 @@ func getAreaLights() -> [AreaLight] { areaLights.append(areaLight) } + appendLightPortalAreaLights(to: &areaLights) return areaLights } +private func appendLightPortalAreaLights(to areaLights: inout [AreaLight]) { + let authoredAreaLightCount = areaLights.count + let remainingCapacity = max(maxAreaLights - areaLights.count, 0) + let frameIndex = cullFrameIndex + guard remainingCapacity > 0 else { + let diagnostics = inactiveLightPortalRenderDiagnostics( + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: 0, + fallbackReason: "No remaining area-light capacity" + ) + setLightPortalRenderDiagnostics(diagnostics) + return + } + guard hasSceneChannelLightPortalsEnabled() else { + setLightPortalRenderDiagnostics(.empty) + return + } + + if let cached = LightingSystem.shared.cachedLightPortalAreaLights( + frameIndex: frameIndex, + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: remainingCapacity + ) { + areaLights.append(contentsOf: cached.areaLights) + setLightPortalRenderDiagnostics(cached.diagnostics) + return + } + + let proxyLights = resolveSceneLightPortalProxyLightsForActiveCamera() + guard proxyLights.isEmpty == false else { + let diagnostics = inactiveLightPortalRenderDiagnostics( + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: remainingCapacity, + fallbackReason: "No active portal proxy lights" + ) + LightingSystem.shared.setCachedLightPortalAreaLights( + frameIndex: frameIndex, + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: remainingCapacity, + areaLights: [], + diagnostics: diagnostics + ) + setLightPortalRenderDiagnostics(diagnostics) + return + } + + let environment = lightPortalEnvironmentIntensityScale() + var effectiveIntensities: [Float] = [] + var portalAreaLights: [AreaLight] = [] + for proxyLight in proxyLights.prefix(remainingCapacity) { + let effectiveIntensity = proxyLight.intensity * (proxyLight.useRealWorldTint ? environment.scale : 1.0) + var areaLight = AreaLight() + areaLight.position = proxyLight.position + areaLight.color = proxyLight.useRealWorldTint ? environment.tintColor : proxyLight.color + areaLight.intensity = effectiveIntensity + areaLight.range = proxyLight.range + areaLight.forward = proxyLight.forward + areaLight.right = proxyLight.right + areaLight.up = proxyLight.up + areaLight.bounds = proxyLight.bounds + areaLight.twoSided = true + areaLight.nearSourceSuppressionRadius = lightPortalNearSourceSuppressionRadius(for: proxyLight) + portalAreaLights.append(areaLight) + effectiveIntensities.append(effectiveIntensity) + } + + let totalEffectiveIntensity = effectiveIntensities.reduce(0.0, +) + let diagnostics = LightPortalRenderDiagnostics( + authoredAreaLightCount: authoredAreaLightCount, + portalAreaLightCount: effectiveIntensities.count, + remainingAreaLightCapacity: remainingCapacity, + environmentIntensityScale: environment.scale, + xrIntensityScale: environment.xrIntensityScale, + environmentTintColor: environment.tintColor, + realWorldLightingContribution: environment.realWorldLightingContribution, + xrLightingValid: environment.xrLightingValid, + minEffectivePortalIntensity: effectiveIntensities.min(), + maxEffectivePortalIntensity: effectiveIntensities.max(), + averageEffectivePortalIntensity: effectiveIntensities.isEmpty ? nil : totalEffectiveIntensity / Float(effectiveIntensities.count), + totalEffectivePortalIntensity: totalEffectiveIntensity, + fallbackReason: environment.fallbackReason + ) + LightingSystem.shared.setCachedLightPortalAreaLights( + frameIndex: frameIndex, + authoredAreaLightCount: authoredAreaLightCount, + remainingAreaLightCapacity: remainingCapacity, + areaLights: portalAreaLights, + diagnostics: diagnostics + ) + areaLights.append(contentsOf: portalAreaLights) + setLightPortalRenderDiagnostics(diagnostics) +} + +private func inactiveLightPortalRenderDiagnostics( + authoredAreaLightCount: Int, + remainingAreaLightCapacity: Int, + fallbackReason: String +) -> LightPortalRenderDiagnostics { + LightPortalRenderDiagnostics( + authoredAreaLightCount: authoredAreaLightCount, + portalAreaLightCount: 0, + remainingAreaLightCapacity: remainingAreaLightCapacity, + environmentIntensityScale: 1.0, + xrIntensityScale: nil, + environmentTintColor: simd_float3(1.0, 1.0, 1.0), + realWorldLightingContribution: RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution, + xrLightingValid: false, + minEffectivePortalIntensity: nil, + maxEffectivePortalIntensity: nil, + averageEffectivePortalIntensity: nil, + totalEffectivePortalIntensity: 0.0, + fallbackReason: fallbackReason + ) +} + +private func lightPortalNearSourceSuppressionRadius(for proxyLight: LightPortalProxyLight) -> Float { + let minDimension = max(min(proxyLight.bounds.x, proxyLight.bounds.y), 0.001) + return min( + max( + minDimension * LightPortalLightingTuning.suppressionFractionOfMinDimension, + LightPortalLightingTuning.minSuppressionRadius + ), + LightPortalLightingTuning.maxSuppressionRadius + ) +} + +private func lightPortalEnvironmentIntensityScale() -> ( + scale: Float, + xrIntensityScale: Float?, + tintColor: simd_float3, + realWorldLightingContribution: Float, + xrLightingValid: Bool, + fallbackReason: String? +) { + let realWorldLightingContribution = RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution + switch RuntimeEnvironmentLightingStore.shared.mode { + case .realWorldEstimate, .authoredPlusRealWorldEstimate: + guard let xrLighting = RuntimeEnvironmentLightingStore.shared.latestXRLighting(), + xrLighting.isValid + else { + return ( + scale: 0.0, + xrIntensityScale: nil, + tintColor: simd_float3(1.0, 1.0, 1.0), + realWorldLightingContribution: realWorldLightingContribution, + xrLightingValid: false, + fallbackReason: "XR lighting unavailable for real-world portal tint" + ) + } + return ( + scale: xrLighting.intensityScale * realWorldLightingContribution, + xrIntensityScale: xrLighting.intensityScale, + tintColor: xrLighting.tintColor, + realWorldLightingContribution: realWorldLightingContribution, + xrLightingValid: true, + fallbackReason: nil + ) + case .authoredOnly, .staticIBL: + return ( + scale: 1.0, + xrIntensityScale: nil, + tintColor: simd_float3(1.0, 1.0, 1.0), + realWorldLightingContribution: realWorldLightingContribution, + xrLightingValid: false, + fallbackReason: "Runtime environment mode is not XR real-world lighting" + ) + } +} + func getAreaLightCount() -> Int { let lightComponentID = getComponentId(for: AreaLightComponent.self) diff --git a/Sources/UntoldEngine/Systems/RegistrationSystem.swift b/Sources/UntoldEngine/Systems/RegistrationSystem.swift index 9817210f..36d4b844 100644 --- a/Sources/UntoldEngine/Systems/RegistrationSystem.swift +++ b/Sources/UntoldEngine/Systems/RegistrationSystem.swift @@ -2448,6 +2448,7 @@ func removeEntityMesh(entityId: EntityID) { renderComponent.cleanUp() scene.remove(component: RenderComponent.self, from: entityId) removedAnyResourceOwner = true + resetLightPortalAreaLightCache() } // deassocate entity to mesh @@ -2671,6 +2672,7 @@ func registerRenderComponent(entityId: EntityID, meshes: [Mesh], url: URL, asset renderComponent.assetName = assetName renderComponent.assetURL = url entityMeshMap[entityId] = resolvedMeshes + resetLightPortalAreaLightCache() let entityName = getEntityName(entityId: entityId) let channelSourceName = entityName.isEmpty ? assetName : entityName setDefaultEntitySceneChannels(entityId: entityId, channels: defaultSceneChannels(forName: channelSourceName)) diff --git a/Sources/UntoldEngine/Systems/TransformSystem.swift b/Sources/UntoldEngine/Systems/TransformSystem.swift index 4f7dd53d..9fd357fb 100644 --- a/Sources/UntoldEngine/Systems/TransformSystem.swift +++ b/Sources/UntoldEngine/Systems/TransformSystem.swift @@ -22,6 +22,8 @@ private func syncCameraTransformIfNeeded(entityId: EntityID, localTransformCompo } func syncWorldTransformAndMarkOctreeDirty(entityId: EntityID) { + resetLightPortalAreaLightCache() + // Keep world transforms and octree bounds current for the whole hierarchy. // Imported multi-mesh assets usually have renderable children under a non-render root. guard scene.get(component: ScenegraphComponent.self, for: entityId) != nil else { diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.air index b0ab49c629c97c7a7c0fdc458b76e0ce69c2152d..02c7744b4e0e359891ff104edc9a95148b72f6af 100644 GIT binary patch delta 35239 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 E0Eze-NdN!< diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvos.air index 5bedcb0650c9fd4735ab4ad83dd34db5ce365c89..ce68df5ba4a5b1b0e0511cf0460ebadb26ae5a0d 100644 GIT binary patch delta 35303 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 delta 34643 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

)SWoP2TNNq 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-tvossim.air index c4ab2caaf97a96c6a3f5e8c067c2ed525278ed1e..23895dc2cf100a37bf7d0f23f59173492a1f886d 100644 GIT binary patch delta 35227 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 delta 32726 zcmcGW4O~;z|M>5=d+){=Y~yh-gbh%6)XRf{%EQJ$5K)Iwp{Wf}L-PUDib~xR;8c_u z*w8Q45Hu>QVU|=@ds4`#rdiSVYc+f*E58PYMn(Gn+`A2l>i7NrUa#MOFZA5=IiGXx z=RBWt@B5ygo5BruCiyKWDaxTCbi@lmbfE}_7?k_`vgmS2*Wv?HVkAkAguJn`;6{|- z>yD>BwVwVw%s3v%yS%0fhon*67(it&GNWEuMNp`=dl4LclZ z)A~1_UB*}|ja;(HYn^xLoJ}PzWn)p3acUUD$;6uWO^$84I#m?2&=P#|_r;mgXQQvb z7vCK9-1Nosug%{rTrYhltn=fMf}dRxiKR_MOc+B|f;CBff}659?53)iH4M`$F8_5J zyQwjnWmp}A`!@LoFqGSwy3}XmR#l1gaJ!3E(r*6!P^EZ6gg$Fe;6Bjd(#V+ATk$#3X z{di#0K@iH-yld8iuGHr}CUN9qxF{B|kY`&5+n!*Uz%qO=ZMG4CEZ% zG!zlrG)z=5h_75><|%$n+N9+S^R>HvPBQrKxUAiuyo^EkGbszfn5Ic74>631lwbR7 z%8qAKXz-5?{}?BpO+g>A)6qpu_hv`Zi}_8Dzq*$8R@3EIqZTM4zF|qE7@}pV2?o(1 z;;^NH+?d)jv|LhnFtV^^R2lio&Rx2%!*8!?Km@rGy1gUzQ0@D7m=_Q1{W^TRXcuzr zxzj9_6rC*B*qT;2qLqT#4u{$jMicb$MTI=+JTjH7duM!!$F}PBC10$}5NR!vWF6sU zW7!Cu-0KWaI-k0eU(()KEK((&68V&0@e7=3T2>3uAd&3iNsFlP^U{Makgn+rB*0~Xq&%XlHV zA_i?bb)(mHNTEG_$_XiZYPsLy7fRv+t)fFJ)|8`ExqKd}q{r|twY+hP-yB`JP|KK$SUqQ5=*RIJwh3sGa;-|Yx+YuW}D-=yxz@J>SeW#$uKI_8( zF>Qu;VN>n>t9TX;+HNl2Q8;;DCkKxf(u}&0N>%6=4TCT8KH}{!Je)IoQm1^?UJ;Rh zc<~E^Ph|aiKv_lzK)?zL#h(ArF^s9f;xNH4Ku zYvI=lr0r!s&ino#?U+j8_&i~MZe&~Bq`3VSm37JsCHVfr$l?%3jX+(cjcShihM4+P z;bb)Dq0M3b^A7vb+m7>nS1tXAXx{p$7_Z@QmYmj0Sdj%ZPGqH3WEICq>#l2AwS*3a zt6~9yymEqAh&@O<5&t_ng+@nr71GAQSdrDUd&_>q>Kjtct{}8 zam?ofUljs|xPPE_DqI+j&?F!rH4&u5tp7eYG*gMtRp8^1BBWC#4&39kM2O6C@R4_r zkb1lBJtUu?cJHgX?VtcR6oD3k$Z4{;$JBFaEEusN68SUI>q~C??VQKQ8tj)B1#oouz08;l`WxcfY|VZ9BdNyP0Ycn+5d_|XbK1)%R$`Mj{7E9_UY)l zS0`E)e50I3t7o{4rIVJeL+dEZl;cbr(FIk~XgHWFf}0?e9)bNS2j;lY@i`zfaO&O) z?+F>W@si$*p#nd5-dUvD?@LaA8d)u4`BYwf{iR?Pbwju>{Gh64Z2WRMLNkJAETimi zx*tU75-75}HTAFGbJIm;6R43fshV0F$aqk|LU;p8nW_R1XY1;B2q+F>Weox$F?AUyzzb|{;$~+no?Xo2qc)L3;7ib#SWV-JFEayY#u%<%1UOf*%D2dtFPd;>(%GQWTrX`5d_0!_Nhh_c(l z&ODD`>_d{d$QfgRA!P-Y!PU1Z80<8oiorfyva2rApk0A|6xcT7?SF5#UAi&roel3@ z`ssE^*B>t za2DdkiC6rv%XGuBKd>1TTT03k2s$K|Bav1%U+w0p1`` zCV=EMkenqGAti|*I01qIG7(ZR4Fqq4V2DhF6if%fdmvDQsR6zqNC&|s5bOg%2`QM> zAYz$W8c~A?d5F;Pp0TlVYC(>Kf?y3Oc0!&^coa(_RQ3@aGNW$_=LeC=#*xk8d`H+E zzO{4uh~u&W5dT}zO^U;QB*m-@QtZb~LCaQCr=DkdAwWY1*fJpP9=2VNj}&*I791%q?HdKB}}a)zZm$ zO3XFK9@{)~lFIA_bVnMZBRJ<>Xe zH0XHz-&CY~L;H*uWZ!=3inNx{YPioZ$y-&(Uxr9oTfTBdIt7t_bv!=eiX`kKl=uw? zcbH&qadLkbaW~7Ecg()S3g%;oA7rdX&lFpHZzz~gh)D0FCT0}n-AXWC=WZCpN1gB6 zW}Bs99on$kxek#85q+i+E*()Db1+)!Q@-TV}9pg4mp`aNL|ikc1p$#9`^>1 z-Ol3dx(nt**v>8 zqm~}qg3jsHPHN66G-)&XEpdJ3UeIF1b!fs`=4K3Q3r*J8KFKMq@FcCUX4qwmi23|k zX3PMX^Low|c1nX%odId(zUZ=tU{B?f<~{Ac!7#&hgZb1A;=8H)nXQ}#GLkVTu2;I& zZkykko6u_IoG1xn`XY zZLsnr;ZLS5XQy_NX}?1-qR7JS)U!7^Lx<%4aRc7Z6O2Iee#rx0dTw`eZbUB>uaYtB z9hlxH`T}Z1nb(jnq=CLE1!)8LMw9P~tfP!DyL9%jW%h_=w&ZpBP8-K> zA!PZe_Ia)=%iB!8+fBam#F9&dEid?yvf#(m!H>5EKWPcxHV~|&g&s-@J**CW>1?Qp zFFckcOyT@Q1m_=5(n@@1k^jw3k}06aT~P_=B-!-BH@o~(IIru$qc!_yCfO8BQWEg3 zLpY~Pn3W_`f$lqJg>$M$5FIVlFtiSnG1Y>qR)J1!IIx5nCi{-|5c`xet3NSh>AN@n$*kO z+R(GBEX%3QxQ{bTi@4HN-pL&y8UwZ4%sr1E6-}6jAudfGR zl|3A#%)ZFTzHZC2^O zbX%t6M~sY_7W8xPo@aXZJlE@Ey1EDce(opi1siKm)f?T~pj;hsi^>Po4KgXEN?h$5 zP;y3R8K@PNj^xJ<=kgi^f`u$iow6Zk5xSW(U+$;n(EQ8fx;r9mSjKss6f^}VwS{OD zZui$Hln&p7q;jJ~%)-A#{5SJhr5ScxWe(y=FG}!?fh2A$=%FOLL%gAh)f|_+| zdYwqnDqCS12(o9mKFPSCvM3)2^g>8weH5!XxC663k_lDd@oA!i8Q}|s=Ti|7SLX4o9ug%*9 zX>ynGe3t3zzV)>lecpPgrtYnNFLvrGj<|a_byLEmtowwuu)JG5;zhKq66h4hi$2$+ zHOzA3A-dPVB;B;owd(114Shj~j5S(rH&^BGIO{Ak=mx1ca4HcR^UMq z`sF<)?YhxAZE!%?89|OjSiz#tZV+>>s?<@p1srE1E&8@V;B36i(<|{;{!uYfXH3IG z=v4(fl-FZ#45XD-MES7s$&AlGOw!9l;aZM#R=4cufZLMrE*gFe?Dw=Qr)4K9Saz{d zD!wg9xR~98a2ucCB%?zL?q<#nv#CcUBe)}~c~fr-Sd@~kn>NypFrAH?kZ>NfltFls zkj%*?TE+N8PubVaI^ zB~Ld;)Gyvo(mJ430 zQpK!q1S=zhOIPZ}EnclH6-KY+Rr{p%#wlCqJ09dIIp|Q2lXvHAEh0xeC#4bG{M}(HxU|bFNB9 zt9?GAjVAS)Beaasd=6(SYO!Xo5HF&a?4XY(=@^4OPKJ`h0*8J_T8~T{F4v0(z250p z80jzalH>5Wubk4F!-CGvaQm`d(E5t)Ys~W+p`q;w)G9>G<9@ojc_a3R&GiLW(S_t# zP^sY=tCXs2Hglvsc?wxO!({D*74UcrWHO9X59}57?y+U-@AN;llBVOmU0utHjC^3% zzXkl-+&98j@h+b(j@0d3H|r}=`aVXUKH!T@y;8k!hf;K>>xxmU$n(7;xm_{8n#tTP zN<4OWL~F~_2Y<1+!)l2v*u8GnI&tqFZJtse^u?wI883=bx+2*jO7jhpE?xP7ihFMR zy4aBcJ%8ogH#mvnp`ND)rgz*X$4{h8gdp(H6K1@8YQ{?j89C#{Ff@ILej{qc3ue(J zKk-#v^&+Uk#gUV9%l3-7bH$TShpLQ%hY`9Ok3!mM6{twb(u}0dt!n%!adib6^@HI? zer<@V3x%2QH-?n=-h1Sw)B%@h=IlPiH9u0b<87E72gup+_UTZ#JIs>cl5;8J8$o6H zl*;nGYWQ!;YUFe%HIIT@ax!bxqEkQIbBny#h^kgZAt+bqBl@b+9L89pI<-iC?mokX zRBV!A&tq7C((E&ZWfm6kko10DUH*n^xf@1vH>mP9)aGr_!C(HyhMo=jp8B?oN3|I< zIakgKFF}zYDg2+2@1(H}f-q`2X{MJRR|^{iBFc9hCYJ|hmMf@nD2ZLc9}BQ9GD%N- zn6y$|=rrxT6Q<=ISJLo*j8vG^cXZOtFlQXqEIDuSJE{&fSp*Hz%mzW~{Va_ot~GBG zK^GpC3iY&*esTud@`;(5T*eLHk>ilRjV}$2xt&x`T(DH-n($r9qBQgom?zM=#6crD zt1RqGs+F4jD_F9Kz9g13qCp(6o#<5@wMC2_X!*qb>P9$U*f6>`}kl1a$_;!jG$ zw|p|lUIlyKadT+x+;MYgCCs6lc^#)93bTXgRY8du`MPXeJM!2kD(?+#{^MhIj*F>T z3o*CydQXXzG6(Zzm>ltT2fGrz*k}>m{xY@JwtN`H_G=nqblGg_NQIPru`!2tyCA^X zXaR@iY^XQyOF2T!KbKQf*+=0y6S@l({4HbGZkNLRS%)7HhQzmNnL(j2B+y7DjRR5myM&shS z9A9c|DICbsDAFTqn3n9-A-YJ<7$(3*dEW@mizyG`qXqr+t)j)CEQ`bOp#`0jB0yCuQ;=$ykEuA(Xam87It1X zx!y;o@?jglW^OL!?kCj_A#bfQdEM&vVMkVUi>r1ME$b_p_am!?8s(F$)k6CHyt$mG zIXDc3w?%U|>>| z9?v4M3aZ8y9fl3tF@f?nwEGTe+E`+AWj7_W~>`5-%slhQTO57=&_7uo)^jdO}2rb7luNT#f*KK-4QzrlSLmb49lWsm{ALZ}P*(_7O3Tc|;h$ zzs?!)8t06kXZ6@Xvl>D*SXj2o3)hca;?-t{sz)mPRj{yiZ-hqYg*q)`1yoxIi8Mf` zevMP)Kb8pn1;Zm6EUv`8U3v+94Rv@Dh&g#?EergT(~@-SrHIX(PJW*kenfm5>TGTQ zX`GgXAUM_imXh6X(3|Xj=V2w1D9c3Oq#=gsS22O%hdOMAa{pOX7asWPqA%_l`n5Te zybwN&NO|^bYLX`}HtoS1_|8h%t7lcS@RpjL22nrxU>89umyau!m~nka_^T^VYcqKnEWBtNu#vz$3?d{a~|i7K+iTZ4|$rA zn%P#(j$t3>-45yA0P8PJS3z3UmtnSWbd}l`4mZ$@aFfyPCbl3Nwi0so7Gn@}LBsbu zu*rtsG*}+(UV~JNg<|cWS0WaJLW?CSMZQy5s<3r6)~K{cBh$7=rkNwttcTL<@YkMp zy22(2e@7fH#BW^PGt^J$^Ec`+vOXrIF8jC1JD{YH>GQ>$K{~cSd8`!U`6#SWqDOiX zWTLT6S-aWK8piNq@orXx@Fh{MPvq}%|`X&vn%^;7}&@`Lz#hZI&;wV854 zly0X%g}N7l^aoh9u)AGq>D|2RgK#|OZq3tIppU9JeAv)k&MsG~s8)HFy_tX25*~f! zty%bN)^^y4bZX^hqu-r`WobPsrlk}{w8!P_0`%h7Qbs~cU6GuKA)A1OOYQA%D*|U% zcGkVF@?yuW8kaBJy#S{$IcK-Ri}t;2)_>yYvv-SBQ+w{=}1_p z!&9&*q$6xTqTwU%=U~KV1jiO8i)pEyXSi2~r7(?WD$N{ZvY}CjEmSI?(IJzHc&gbg zBIHp*idjRSl(~^c1yLWR$%Q3iy_98&@e;u9mq$M2&?tfG4D+5$Av;ty?6 zq>XKrMi_ZI<#U1;kf15WE%q3BRg9MNq6s&ua$vX*aDF{iTp!jN#1K|{#--qE-VRV=GD8f`;~IoB~0(GpVR4?>GP-C=Mp`Hw|WgUKPt3$ zZpQJup$;+>z2@mt#q7&8?x1H#Nn&5-!^o3k4uz2?v6+DnkDILZ;lmQ{SohPz;}hGo zIcOJj*+I>0g^D|FyuDrq4PHmh@h_XgX|p>RFUokg1s&SE4PUd(@YrrFLdkodcOXfg zq+%9_#3F}+>-~P&qoUI-NEGbk2P2YdUg4qI<*LS~OPT$w#RCx|mWXSX@WmCWVx&Im zX~|&Yce<^P9p-F8ZjLzcPnCM09+_!YJl#fU)VnP4BNhE35ll$%`V)Deo>~UNw)*Kd za&oGI_28=Rdo{QElWQy+*M*#xAE`&g4+yGejj~U5p@l2K}ZD`BnJD zt$6O(^A~T%K1p7reTHa6I;99U$xQO1`FJ3_ksKmiFJ^`K*Zn@vA&6&wI?VI`hi87` zvuEfO2BSxYE;%&gyGrI{LnSBP#`uvQ{?1#1-#R+5b(_exR^ zYt8-5Fs;bzXs~&!(2pDR8cuzR!=lp&PfFFR@pQa+Hmpr6{Kn~< z#w|tZ55Q7XQNeRS(h|H%l}Fy+vY-?JM;7kcJlE1oS?~-_h|Yn<)ipH+v$|*Nyb78j zPaOddRxUQG!{9EiO>)i(6J3ZJolK>P`J~F=yB7;pJ_HT$f+fbY)xIiSdtS;{OoA2E zA%Z#fRFKbB@>MYFM4;eE8kS1_F z&13AHfxCJ9b1#;sjBBT*AW-F?cejqseoJS%Z+?~?%TH}sKW?ov{VXO(hq+vZ{tWdR z9f+5SZdam^M^CXO4D9hd=cX^*x|y@rK`u;QE91jTpB|!vy@(j6*01_zi{W|}#`SHr z3p83ka!Ix_98m0;K@(lX@PPlq1mBi$Kl?xySYBFL%p5u1CHB8q9@it^?ABL$E<6Ex2nd4+9@is3 z3UV0Y5sypC$?P~?dJ+4Ro0?5gXd0bCAZ-JbwO1G;VYjk}O5CQ=n*AwB2Tkdf^ z^4lOM>)7LZO^J@Q15llmUlB{w{ii!JslBijX|`DUm=zXufxVf$}xOCjEN0j>_L4DRl^u&_4w|$uos#XA2XYHt5Dys%)#W79?B|R5k+fW4f!0dCC6pP@71z|#SaDA!ncOifO;JVxNV!#2>p zGCk6N*Qc8nT%FNCMC&MM@Qh@3#JdrC&1$eGHPxz+iKT$zI3J|9 zJS0A(42?o?eu-2tmp7$7deVHl-YbkV<$S7LK?oe5uv!FwAD)&Fx^+*O6>!U9pGX^o z^eH6wr4&tB=5IY%VeSS2XH6qv6x4rEx{&2B@=q5Obv|5cseN~K3o#{NruXTAs^fAd zXEkB$nn$$I@Jm$+ykw?TD*aZC1hy2>I8mHWL^)GAkzpD?#nnumgr#LQorqhAb<%0R zhO#k~^(VA&uTvT`0WDADM-TCZL7tJtgcvFla=_Q$o(f92}ngKs-WIz}?9F z!Gx+Jf+KFhP-^;*@Pe2RzEdBgXXd(T?4-?VCM>Z}`M`%X3xl~4XebZfq{E_er zyzskyB3k%8poK9L(ZbhP@%~f`qse*~2bzpX;65(2&=j%`(8BSR>L*0mPs$Kvr5aQo zgn!B5ZWPeKS%FosJcyrR>k91Cz_ygxFRys*U)R$zrakw`505S$$M*eBH?;XN0PZ_( zddrYnjum=~^qVDxGSS(eN`p@9yNIu%ow#0sEn$#MU%ug$hp87FR>KP?v1ld9@-+d_iyEaP)iID-ni4a8wLNO3PE&Y{RX#+*J`CXjnS z%DFf1l6yUyxi^u#bEz_Ua7y$|$-O}V^MYq;FZv$1Z#{47BmEraoQ#{uxoD zFAce@ozp^V#-9RO?oJb(Smmbs+e%A^4g*Heh@B zO~h|R!hD41Co1M{Q7D;_L%t(b%o@TEa`m{889n5Cvx@noob*0sW=^5J+X%)L?nZ=p zM~>fg`c{jW*9d0E0Q1fua~M%;0@x`9Q-|;>33rv#_d1Wc$?Usb!c|JR`j~=t!gddL zSk65pVZ%24rigvmNTsY`r^sU^ueF-U}tiZ~UDSnj{d$aPiA zW|45a+#gDqmtHVHXq){vDiP+7a{L!pK{=T}4l;j4zEns1rWDPFs7~KiW_Q%>PG6Vk1^eQzF3C4N1e}@n3X}H%gQG z^0&71>{4f4yaZg`O@74Hu5wf3NI_$uZJT|^6GsJuQCXi=oYF@OSs=>qy2e|j;%oUe zM|mSr8TYY%=Z6dFzx1mBb#r2Cbh*!WAo=_GUG z2)a>)ZLF=^sH@v(?x`=!+bT<#i4Kox0;1RW3j%Nd*Ghcy(VZ9J^$yK%_`|_{wX>CS zRcsWVPd%7>-b_AOR{(`WGE*7wz=fa{!k&Fk9lSY=!sk*--qLjbpE+TjBr)mJUJoQ%vsIT z0eMgb&y~PZE$5)n4lhJ+*hPYV`tmAPpizzPaq&09A4=G3%KQTqXWUlq2sh4EDIwOj z6l2Z<*HBFRl=R{^0;h<29_~Ae?2(LC&$BD{(zu+r0F%2R38-Sh+h~QF#N=ebIkMo& z0h>0tQp@p6>(Mi%E1BbL zHtqOap1)1$BVDSpBxnhg5m>G8lV$*QB`89N2%|}*obKbS3SBRiKHne)Jc}xHyjw1m zE`(=K)inGyPA;EQQgnsT&nM*SIvWyXk>rI9TaErwfVJ9kCMnvdYu+^?_Ye*(JUvZ6 zNMcjzb;BeD*iKP^i;h22?6zQeBw_)3QC7z-(FRO~Ga*8B@HUegvvq>~v3K9IAH zmPyZ&)XjEc_lWAw)*^xhJWY7q^|rJUTZj+a7kIysJqF$uOsrIqY}@R9882h@5zQnqOuqm3>-ls1G)4xhDLTBwuWX?h3H&Hr!Ygjdx z2>#{VH#lPPcRf#Aqg^Oil|P_hAjgK!9EI5MYIe zqHinqw)u`4qyI#J{qF!U1Yk<&tr?>(`@)bo8RH_bT@!o%0U2Ecwk?*hQa#cZJfFjq{?8i@IK z09fV>7Xa4sp8&8E0D#2-0G46;KL)^DW8^*Z2>_UDoGL8)O8|`FPXS=hy8tk9Sldet zYYWRJ0$|i=9E1J(mjD>2$OVA8BTN4h0DEsd0Cqck902y?cmV9ZaRAs8Yh3_X%-;fF zLEa<)meZCu27sN?kN}vx>TdwBHRR-><*xi+0bnouB>?t<3jj0!833bZC>ghJ8~{dD zx!ePQMfy?z7`x%`0I(Vo0HeXHy{jT81%RC-0Wc&}H%I|sdI|ump#U%ut=w>K8N-~P%Y{GlUGC*q!#KVRQ~q~+*Tu{`Vv5vqk5_kKEjE$V zaxWGo6shIbi*}J(2B!)OSf;1gEO$ukU$9w}^{txSB%0+mw)-#8EO%L@kZ6{>tmFo{ z8c5w@cKZJs#&V}tMzUC*%9+4oxlLaEpI9uzB{k+hc>{%Cx$QSkz^~jD)M^lFFk#l8 z@hf+2UUT7B?nH*kM8@G)u0-gDEgFni(46z43%qhgjXCA-U zh9M0WP8Z!W@U>VW)(#le`!3$c2veX+xUQyGo3>SxX4a%xHEDKh+G%Ur8CzOkg{><5 z-QsXz{ZE5FKlKx>J78WU*9Y5NypN(V!o~Zv0Po{2@2P*}ecUCl`U~Di0lbfaSBv>e z5sL7k5=dgtAPFCLG~S;GA9s}{lntL9NB9_4)?$&2{+xw|oweAc2b%L#H_rmCQ|zL3 z&XL=bo_IY)>*P$F+L{*>KFK&Z%IA}$t3xl4wBEI zf8_%0==N~Kzw5B&$}S-2>YF8A&7vg{>E_4SrC$uM~<4-)DyPh`gz=U}uO4moC zbPfuola8Tuk5MR{ibClqE83XbJSZL1lMAIQxIm$FhK~WvqZtj~?7)h{S*5@>*ZBL0S9dTjTf7^bC4X?mv% zU~-Lh(~sW;nBXG_X?nK{U~-3=#{edGLvy+SCdyaLcETJs5nyu9VR9G1z*Imz0(rG6+@RQv1<)D{kL-pW+5}#SH-T5`1YT){;{S$MB3CWEL6TR3 zF}(^s3A_^h{t@7n)HNipw3OnNKw7F*QM?kV>P!EM1@KC| z&8Vv1u)YD4D@}fJUH^$vIzE9?8XVaJudqFx^m&ILNhwj~n8Z#VM=80>-AGbOR9)uB zI%FqPhS*X2e@Q91^^N0pG4!Rdp!x%(bWg<}C?(fmLSOVJO3B^U%Al?N zky4^|ayiTYL@CX?ODVYrxHS_fC3k^6{&$p8DfvvSS+?9zy%+Q6SeUN>n3PR{Nd`S& zP$|4dl0mv8t!27uoZ7?xC4+Rg%D>!;<(ENqk}<~WPel<(lsQA}$sPiU@>jFt|CT^< z7fBpRAW>OtrY~?2NQO_du$cc08o4{E>2EQ_>p8pHb$Zh8n|f^_xE>Og&1 z%h@l~;V(yw?BlrJ2O`KS4ubpuwF3Brf~-)oAOC=o_)$_6TpHc|dKkTnACWu?Rg>ew z;Sz~5824chQ$&(CJis9F7Z1E406$42d0bLX(kF6|laz_a_2`p82PyZs9{DDa^FZ!# zJ#vj(AKX6@Nlg$y8sc$15sV-wF&2;Okskv&NhEn(N)ANQ8IY6oiO2QmUva17amR?H zpWP8Wt|x*Y6g){7d0bLXmc(k1lR5La9{oo_P7+KW*Q4L;*7vv`{SFV2)By@)5qbh% z2R~U79@itcf?N%9kL$UC3~HVvl02?QUjcHm1$bPK{4uw_(sSVnXodiiNb&^Ae36#5kH|-G8_V9o zSfM-fk)INBhp7bUQ#g?vjc?2rg%Ra9QzxQ*Tl$IX)=@(2p=1GPwwCp*k;6Yu1x|;f z(iV&8g7V17SU$^+r0RIMRYZ@B$w8Cu9_yw|+WS74M$5`Dp3b7`P_ZVvqA!}%aR3fu zJF>nSo$M9xiO3ql`m00V7<4rleV2 z@s}z~sf@mwhsuGATE9CgW}dMd=YJ(JQwP^=t&YD3^58NtniHvIRf}Bbx!um@eY^z< zmr;x=?xfB|IFWr)#c5|%dYCT@y(p=IJLoPy_5RA#h_kFyn)g$AtXf+&LECAIBBxje^-5c?M`bSl zG=arJ5AB;omhvl8q#~S!q8fo*`6y59gK96o!9?jv0^aAMSt#6xgI}IuTbV32&BBj! z!LJ`-X?112$NOrDq?|okOYNDtf}*SI>b=(ItnnYN%xoZ9H2jA3o49DFc_nXvSI@6s z!&CbmL7EZiEh(BK$ZbKX6W)4Ym=Io!8XU#R5NMSoC`fB+QqZ0_;d z5JdXmA3~u;2}kYWBC`m5(3wG#1eMZ`W+QY3cwIjrkUrhIuI-PsjVvyB&0OU~hH8$6 z`Me5|flbsMXyk!kOLi`vsCL=!<%y`(_t;Ww9BM^^O8bkBPb9659XJxGqH;i53sVt! zxY^8eaEhA*ymwKn4W@}Xxc3JVwNim)BG7a}V8i=XPqggU*FK$S+1jg9H%vV2ZOaw! zH&qCOoC?M=8W*zrzKO|IOgTI;x$ilD&S+@!#EiZ;W2ti@k#+c)Z@pPW3>Xi&fcpj# z%8uFZRE{qYvOMaZ^Z_DE0xEaQV>BlxjHf6C8QDBUq}r;z()-~sHF7Q{Wz-pYq3=6q zGbhx-cPkx-89W45F)B)pJaX@Pvhy5d70)DF4EZAudwVTJ{sV$a7~@L##h*BW$Ns>) zAv=BOb&o+Fj!Cu{oXfEwWdSX)l!gaXO4{&%b&>%*ph_ZU25ga(F#~EOZOnkJk^yD_ zoZrF@=#k8#2^zh<@D~pXPR^5Fn9(IpW#jX>`^|Z-w#mT#8X5BrrPu-IfAedjUijPZqqe`w| zzJ5)J>r!Mb%{lN&*{=if4adGJ)%5)^QqA?}x_^Hsarqlxm(ow3du`;? zm^W=-mnw4(d|NiU^ObiDUzg^*_|}PEyRL`xy&z&Zd zcHOilci#CNq#u2h_S-LsqmZz*S2KFyW?Ut>z4b80`M~|Ph_np6R zxntzDFH4Wm>A7fAS$h=bKjLfzG;R_aXxLuM;2A=XV>uiWjbqhH&R(io_{j+~4?99T z;rj-bh>>hu;tAc`7?lN-RpLnMCq$a7tYfoKi=?DRtKW zOR}v94yhyHkUA@QNL>>gQdjgX2--l~->poA361Hn`f zwAq!A2q`IaQFuIn?pDJ2d3&IUasm63kQCl(!17vw!czg3Cm|2idl&>J5Ez*$oLT&< zc8+Z!Dnl*02~ zq}0`w_VI`m^h1t1MK%OJ$ytt6*{9dlr54LemVC}RvrzFxhqUGpHS&^epL5uY6bfRETu@S8^`X8Qn~68!b<#XMC3>}bzokQ3CO=@|%v+>*2y{w- z$@3~ztRdFuLrWeev{QrDh=Y`y2WbvbB36_n36U^dn0JO z6Q9%NuSC@3DR?ne5Ulri1-BDgzhDSn3BhD|9)Nh8Eckkp{{|DN;8lA6CrtiNn*8Ol zB}WL^Y+YWdE-!#x29{K_JLSP;;-KgC?1xFiUdUNmTUT0ZiR;G}>9F|Y*5!k>r6x_h zlk%R-SwVW~30Env-AZ{i34@fkFXzEQB^jJJLix{IAEY8Ds&F!`3ptfkAkEW zy;rT%8s>sEcJGcZ|MFrsoIN)q7|LbK06xo8F4GS&w~*!XOU_O2l;|>=FIg_MI@x63 zl<33YgFJ$72KbK9l)hxCfHx1$oqHb2!0f+40;Ncmf!Y5_vp+As%v;J zOFQaHdo8m%@kM$p-e_A(+LSZfL|NP^dziG?I=h?l!tss)YfVyNN4*f<)&uc(IXCRQ zF1+J(crA9`cmJHeL0z5_@*+4XDhauk4I$`rEcf1R_@S~?7UNra9 zj6RVC7ao_EcB_|M129m!@T#=*nzU3>Cck3g93Yd*y~PWHN-9%)O4gjfY+Fj&m6Oru zDp(t*fz$#l(5_VPt<78Nz_a>noRW2L)82aFu*cYIy6|4o*k=!~4d20ZF$kRm14l&;%o5%rW?jwFF zG3AuiF&6(h;-JHNzZCh~U?CE;!Rc-Z)x?x1kRWIb`ofazbQ*Q?VP>}=`X*`eEYl(qY~ZnwFhp|`ieq1)pu*gM$U zsPj6|yz@Y-*TIgR2amqbv6YT6|IsIM(|JtYr*HEN&ii z)H(C+>4=kzuWM!{)*Sy$V$7ME4L_VDI;QSqDGg_BK<%dF=v zFS~Z;@;B$cx-i%4dQ=m?IhZ!ulvEuQB+eeL$bQOee$(cpChs{9QxOzR2Jr?gknvCZ z0`hP~1MUkM;D&IqaMQs5E6(ovTfhrOrSsFz`4i7C$C>PYL z8)gu6iQ|u7iI>WFXoZhPpS$W5G3~A7xOjZi*}%n1 zlA3qF(tKu@W!aWfCHHZ@Jrw`^v2sc9a_RoSoVT3sv!%-iSJs)P)f^M|@AvU}t9AFA z&E9V|?C!4h?jBX{dUcrn>N?&>b<1WFSIeheITn8@a@qiW+Itt{-?7FEHJiS07(aNk z#rw@`XS#LsyHy{&I#T%R;F)^$!mBGYW}@F5Ym*u_#|CfuVt+N?P(?F5IJAGozFc z9)xBp+P$mwLC% zX6n^V)4o|e?Xs%?Zp6QPF8<^(@yOj0a~HsFs=!L`o4oLJ)WW`~g&)ZlI%Eqst+Gjy zH)#Oaeb7~4^WW5e@QS;TsR9!(x=a?>J5+%s88(Rx%R_>zm0rPBzXU!w5Qv~mZBma3 zRl++(A{gIJe$XrpaR$`h3A6E9EjsBXI6%^#vq7Z^N5el~60~T`2WIAxv($J0GU5>% z-y$37(Mg9utJ}5~{e*vxH*cD5_Xgpp#M4U3`%+Z|e5)IZUWCk>q~Qv}7d{u}8LcA5EW3sLoO=<810UBY$%pfh zMR?yHH9`KSU``iNZ?eX9ful%F;ny^&O}>SI#WaPCcY zp@=*HC%Z?1zO7Vwi*MJIP^W;wQ+TJhmh)Q`y9>_D#LaLR3i~*mV~{}-%xBqYeqjD- zx4ltdZyXw#4EE+sQ|yCd#ME%ULMNR(5yj;27HolXCG7O+3I}`z-Uw2`ai_PS1CGm4 zsN5&BP&L!9Jm_VjKBWVk}Ef{@t*QNzU%A}JZ7!e;kUA$;;%daCg9$N)K9O8+tqPpITqMfkd}RxD62fmJ^-Nj zYiPgZw4&5{<*sGCX_iGJxf=ss8j4$2KIPRMOB*NIfiLRDplW`eI~4jFed^kB@{msv z15N{62COkO4-A5&!tTXWHy)ybWE=H)%b|*?Gdbq&6TWk3>XwUCh_;Ktd6n^g)2kpqy5-Q>wirh^B zT7tC~TEb)e?hiyVRq$aoMZc$6f{!GXn{ty__`BxmIfvNN6&GkB?gJ=?9rEy-$?;@@ zu6~&xbH0ddL7Ax?`R_W}fM;9&ZP@=Y7ORwnl}yRJ%HZ5r5qyNR0XUXW>HE;kU$6)% zxSc1&&VcvWkdTDi7s<9CZRnOuNVxq2S4*X(_ZLZ~+I-Y+!cZbRf-wSF+Edz@ay2vH zGvB2T`rHwxe3wIwbg3y+3E)mgisf0r+W$=ltX(M#Cb@RwP!JjAJ>yOqxTBhH%4Q*l zp4%1h#euC}H|prQ775o1r`Fbx0AhRK_fz0-z6R>Fz58hE;gHfx6yjdeFKo*k3mDj- znN@$2WnZlqE8tTKI8l_ZUG@J;I~S;?jx>%ZfeRQA!o!4DC4d!#0*S5)7L=EO*y5`` zDk|@;MFhlZBeo_6P;9A$VtegYYp}MB7Iy zEpne5S)tJfN+*k%O&06^xJuTwY(Bgu>V_8w=1kWxun#=rEHHN*+(vW2kG&hm~Ys~9_DGK zFjl{}ap31oo%NRk{e+>QQCA#xw}X?A@f?klZWXi!#`}RreW(p-)T5uhCNCM^}LuN<~SRXnq|MOY|!~A9NE`!WPOs#tW*9??!6bAqMSY}iYW{pX7jQ{ zyZV9{Ot_Kp9KX*wV{`x0)0=sQ8`c2`n7f%efKja`rcPZBXV!{GT#@2T|^CQ1Rb78hI;se|scY8x?=pIFPIO zUH(>=_XB+!5_~fGylW}E(7C?cRNjk~{*4J$2E}nx#_IYz)t)2O^&{1ucQy5QwVtDW zvRji5>mf)AW_PgejO6>HvbPcuzm?2cHgfWPyw%l_h2{HXe0~qf_ql|`jhuYHJ(KcV zE%?>}C7SvP06XJJ_^s{fbh33U<*{f1;kW9~!EJctvcd7ib`Q*N)kq%2Z*9*){8pat z1Ng00_*Ufve(T8PVc`kB*y=_SUXyBdA5p-4WUHw4ymSJ;_1pk^WdkS{K zo-c`vu%`vzs@%x&ThGp}v@7XinCeH#_df;sekACm7MN;pKZ@TfxCi{!s~o@e(=iLb z)e7ILH1k`z@qd-7&X(UwZV`bgnBNMRBWr%EojaEApWgF2ukIgO-ZGHy<2%aQz*My@ zzZDPOYnaE}5x+GQNYw=2szm%&mt-Q}=XT~l^&o!hmAzXw)`@*Mers_+XZu3RZyjy$ z-;hlCtydhks@w^`wS1F)pZD`_nBS_c1%9i7=suUM42_>C-^aJ; zV6Qcg8_fJx+~le^=5YL0fm=;tifXs863h3OPUN@V%t!pz!$`ibt4I9SZOtIx&tBp* zuOIlWh7g2ry@}rFu`Mq%E98kB!Bx*>wteAmm)XW-cF8-LOg)k;+YnsI^FlG(b%pVr z+5-BX3A9%77@?7{r6BlceT|H(TaWN1Bq}0F26nEI36Dq(KY)W<@F>xkh=N;kLBF*@WzL$_!Sd~s^pkku%w@yTOWdw z%EcI|N=m6&Y^&+#N>P7|k*Z2=tK$r(?B@yyJ9lY3Qq?4U2vQZU2tcaB710Y*8>H;t z#=V5ikv>G-nTOP!FW9U88O+O@9M6{3FbkA&D=3{vQtB>w6qK%M3S4AnDBYgehWb$? z7bG1?CP8vfT%&bDg_Ycsv{$#-vL-N8CA*+BIOW1Jf-RITTMSUTQZa`&#!xyPTtn7S zI#SyQ&SSafFd~_np>(^~L5Ca%r6c)Ut*%b>Cb&BDvPFYXv>8gr&$2-2aPu5X+{DQ} zwQ@6*j`XqS335-o=+jYbCHFLWvTpksA0_%(364sKORecBAE);uHFlQhJ)0rF4VCU$ zG!-9I@35uP;l1R-5fFdYPX1Wsx1FQX?c_gzN~ftuiqIX2-IHJhM1MKbhfwLbZo(oe zUA72Q>6(Zplr*wQjHq2SX1e6h9===qzNTg!Up!U0j5N7 zQpCyznb~t&I*P59S8jo{Tk5#`d1y{EIgWgZ$!hH7O=S-aGQoo5!)*H?Be81~>|n19 zGQNT)6MJuvnIUMBu|d}vIY+q-M3h@Ud*eplbuQ>7+YOZY0Y!?DX>^G&7%dTgm6S1> zoH3UFd3Q)zbBN!b`E{Q2`(-2h4jsda+PK;4X1cq1Nz<21_IbL~j;V&A7jkTyZG&D& z$2W-)wP?@iN{Mx)cPtU6B-EVisE< zx41F8)SI}l8Lnv)3oUm?tuKMx;-q8hVtZ@IEj|Ug^G7&{X4@GQM3V+{G77mxiw}POP5KY5L#RktEq z^~cq(wrZirp+AmRO}a{V)MOPVESTC5BVuEHxcj>+(e=b7+kdDPP1Ef5#;G zr-rqqjAvAHjo49y8P)8-cTB__ci{jHn1MD4bQAQZ&27c(=@SoTPY(l8mSa!zU04yk zSqWce0}V!jHTI7^02&;wW!9p=n%_CWyB-%_K@r2=zR5hL)WTJ)3V`^U1@QJp3vX`{ zbJV=*4q?JG@HRyjrfAOTtB>}nom~44yqD7mkDOa{#JKNB=fxwPlXRVnbVc6j*E8ROrOc>w$gq!g_q9O< z-}64c)Hin7@B>i6aeD&8bt!8?b0(sKU#yio|0zdY`z$;A6-Fk|`mw)%g;}Ls3+w;$ z^n0IFou^Z}m^N6ZmpQkW!y+C|HKfMYSW-JtDuxA=i zg2{-c55lluGK}eiU_BmS!J}}4u)u;znX+6MILOj*chERkFxU44`w=Wysx;cLf*ocB z)~T#n!SEwN6=kJ$zzV)&VFmAcFe~^jVg(ywAIb_wj~uX+1hF?T>neq3kAhZp#PWWK zy*Y$pZ-j3kRxo(iRA@60D;Q;URl}o63#@w~R&X+V@Rma-IyA^#ZT?^ zb*wXR-sebcZQW z@krrLE%Kw9XaPS`xKm609?$@&hNz|G1cM))0JYRVTL}rMie?i_6Bd$fYN>xE_)+iy zwaAYS=s5UMkO8&Se*ygHfT*SAplB~t(@Oe*CR~Sv-H<>nE$BJuQYe^!TAIHC{3w`! zTI&A;$xkiyp9VjQB_KB3-08lC1TRRSmhNx^{Gbix-GCT?A0Y-{F=|5yb)lrtJIpWt qdknzoRd<;dK3kFsG|}`6b}lSHL+`QtF=pA`)nm-*)ng9Yy8i$p_!RvB diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.air b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-xros.air index 5c934d3906ce367559e13248fc5a32c095e80131..9c8adbb20a1835787e1dbaaddbb14e29ea40100a 100644 GIT binary patch delta 35303 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 delta 34643 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 JKI<=g{~x(VjHUnp delta 32721 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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels.metallib index ef32b0fb51573c97ff16c1611dff23e3d5fb7307..de6d4f940fbe9024c93489edc86e96d33b54c839 100644 GIT binary patch delta 37251 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 JUE$S={{hXc6_x-1 diff --git a/Sources/UntoldEngine/Utils/SceneContextVisibility.swift b/Sources/UntoldEngine/Utils/SceneContextVisibility.swift index 1789242c..51d7a94e 100644 --- a/Sources/UntoldEngine/Utils/SceneContextVisibility.swift +++ b/Sources/UntoldEngine/Utils/SceneContextVisibility.swift @@ -38,9 +38,21 @@ public enum SceneChannelRenderMode: Equatable, Sendable { case passthroughGhost(opacity: Float) } +public enum SceneChannelLightPortalMode: Equatable, Sendable { + case disabled + case enabled( + intensity: Float = 1.0, + range: Float = 6.0, + useRealWorldTint: Bool = true, + maxActivePortals: Int = 8, + activationDistance: Float = 15.0 + ) +} + public enum SceneChannelProperty: Sendable { case renderMode(SceneChannelRenderMode) case pickParticipation(Bool) + case lightPortal(SceneChannelLightPortalMode) } private final class SceneChannelVisibilityState: @unchecked Sendable { @@ -129,6 +141,111 @@ private final class SceneChannelVisibilityState: @unchecked Sendable { } } +private final class SceneChannelLightPortalState: @unchecked Sendable { + static let shared = SceneChannelLightPortalState() + + private let lock = NSLock() + private var modesByChannelRawValue: [UInt64: SceneChannelLightPortalMode] = [:] + + func setMode(_ channel: SceneChannel, _ mode: SceneChannelLightPortalMode) { + lock.lock() + for rawValue in rawChannelValues(in: channel) { + switch mode { + case .disabled: + modesByChannelRawValue.removeValue(forKey: rawValue) + case .enabled: + modesByChannelRawValue[rawValue] = sanitizedMode(mode) + } + } + lock.unlock() + } + + func mode(for channels: SceneChannel) -> SceneChannelLightPortalMode { + lock.lock() + let rawValues = rawChannelValues(in: channels) + let modes = rawValues.compactMap { modesByChannelRawValue[$0] } + lock.unlock() + + guard modes.isEmpty == false else { return .disabled } + + var intensity: Float = 0.0 + var range: Float = 0.0 + var useRealWorldTint = false + var maxActivePortals = 0 + var activationDistance: Float = 0.0 + + for mode in modes { + guard case let .enabled( + modeIntensity, + modeRange, + modeUseRealWorldTint, + modeMaxActivePortals, + modeActivationDistance + ) = mode else { + continue + } + + intensity = max(intensity, modeIntensity) + range = max(range, modeRange) + useRealWorldTint = useRealWorldTint || modeUseRealWorldTint + maxActivePortals = max(maxActivePortals, modeMaxActivePortals) + activationDistance = max(activationDistance, modeActivationDistance) + } + + return .enabled( + intensity: intensity, + range: range, + useRealWorldTint: useRealWorldTint, + maxActivePortals: maxActivePortals, + activationDistance: activationDistance + ) + } + + func hasEnabledPortals() -> Bool { + lock.lock() + let enabled = modesByChannelRawValue.isEmpty == false + lock.unlock() + return enabled + } + + func reset() { + lock.lock() + modesByChannelRawValue = [:] + lock.unlock() + } + + private func rawChannelValues(in channels: SceneChannel) -> [UInt64] { + var values: [UInt64] = [] + var remaining = channels.rawValue + while remaining != 0 { + let rawValue = remaining & (~remaining &+ 1) + values.append(rawValue) + remaining &= ~rawValue + } + return values + } + + private func sanitizedMode(_ mode: SceneChannelLightPortalMode) -> SceneChannelLightPortalMode { + switch mode { + case .disabled: + return .disabled + case let .enabled(intensity, range, useRealWorldTint, maxActivePortals, activationDistance): + return .enabled( + intensity: sanitizedNonNegativeFinite(intensity, fallback: 1.0), + range: max(sanitizedNonNegativeFinite(range, fallback: 6.0), 0.001), + useRealWorldTint: useRealWorldTint, + maxActivePortals: max(maxActivePortals, 0), + activationDistance: sanitizedNonNegativeFinite(activationDistance, fallback: 15.0) + ) + } + } + + private func sanitizedNonNegativeFinite(_ value: Float, fallback: Float) -> Float { + guard value.isFinite else { return fallback } + return max(value, 0.0) + } +} + private final class SceneChannelInteractionState: @unchecked Sendable { static let shared = SceneChannelInteractionState() @@ -202,14 +319,17 @@ private final class SceneChannelPrefixRegistry: @unchecked Sendable { public func registerSceneChannelPrefix(_ prefix: String, channels: SceneChannel) { SceneChannelPrefixRegistry.shared.register(prefix: prefix, channels: channels) + resetLightPortalAreaLightCache() } public func unregisterSceneChannelPrefix(_ prefix: String) { SceneChannelPrefixRegistry.shared.unregister(prefix: prefix) + resetLightPortalAreaLightCache() } public func resetSceneChannelPrefixes() { SceneChannelPrefixRegistry.shared.reset() + resetLightPortalAreaLightCache() } public func defaultSceneChannels(forName name: String, isRenderable: Bool = true) -> SceneChannel { @@ -237,6 +357,7 @@ private func setEntitySceneChannels(entityId: EntityID, channels: SceneChannel, if scene.get(component: EntitySceneChannelsComponent.self, for: entityId) != nil { scene.remove(component: EntitySceneChannelsComponent.self, from: entityId) refreshStaticBatchingForSceneChannelChange(entityId: entityId) + resetLightPortalAreaLightCache() } return } @@ -251,6 +372,7 @@ private func setEntitySceneChannels(entityId: EntityID, channels: SceneChannel, component.usesDefaultChannels = usesDefaultChannels if oldChannels != channels { refreshStaticBatchingForSceneChannelChange(entityId: entityId) + resetLightPortalAreaLightCache() } } } @@ -270,6 +392,7 @@ public func removeEntitySceneChannels(entityId: EntityID, channels: SceneChannel } if oldChannels != getEntitySceneChannels(entityId: entityId) { refreshStaticBatchingForSceneChannelChange(entityId: entityId) + resetLightPortalAreaLightCache() } } @@ -289,9 +412,13 @@ public func setSceneChannel(_ channel: SceneChannel, _ property: SceneChannelPro switch property { case let .renderMode(mode): SceneChannelVisibilityState.shared.setRenderMode(channel, mode) + resetLightPortalAreaLightCache() case let .pickParticipation(enabled): SceneChannelInteractionState.shared.setPickParticipation(channel, enabled: enabled) markScenePickingDirty(forChannel: channel) + case let .lightPortal(mode): + SceneChannelLightPortalState.shared.setMode(channel, mode) + resetLightPortalAreaLightCache() } } @@ -307,6 +434,10 @@ public func getSceneChannelPickParticipation(_ channel: SceneChannel) -> Bool { SceneChannelInteractionState.shared.isPickEnabled(for: channel) } +public func getSceneChannelLightPortalMode(_ channel: SceneChannel) -> SceneChannelLightPortalMode { + SceneChannelLightPortalState.shared.mode(for: channel) +} + @available(*, deprecated, message: "Use setSceneChannel(_:, .renderMode(_:)) instead") public func setSceneChannelRenderMode(_ channel: SceneChannel, _ mode: SceneChannelRenderMode) { setSceneChannel(channel, .renderMode(mode)) @@ -320,6 +451,8 @@ public func setSceneChannelVisible(_ channel: SceneChannel, _ visible: Bool) { public func resetSceneChannelVisibility() { SceneChannelVisibilityState.shared.reset() SceneChannelInteractionState.shared.reset() + SceneChannelLightPortalState.shared.reset() + resetLightPortalAreaLightCache() } public func shouldHideSceneEntity(entityId: EntityID) -> Bool { @@ -378,6 +511,23 @@ public func passthroughGhostOpacity(for channels: SceneChannel) -> Float? { } } +public func sceneChannelLightPortalMode(for channels: SceneChannel) -> SceneChannelLightPortalMode { + SceneChannelLightPortalState.shared.mode(for: channels) +} + +public func shouldUseSceneChannelsAsLightPortals(_ channels: SceneChannel) -> Bool { + switch sceneChannelLightPortalMode(for: channels) { + case .enabled: + return true + case .disabled: + return false + } +} + +public func hasSceneChannelLightPortalsEnabled() -> Bool { + SceneChannelLightPortalState.shared.hasEnabledPortals() +} + public func shouldPreserveSceneEntityIdentity(entityId: EntityID) -> Bool { hasEntitySceneChannel(entityId: entityId, channel: .preserveIdentity) } diff --git a/Sources/UntoldEngineXR/UntoldEngineXR.swift b/Sources/UntoldEngineXR/UntoldEngineXR.swift index 673457b7..51b1c91d 100644 --- a/Sources/UntoldEngineXR/UntoldEngineXR.swift +++ b/Sources/UntoldEngineXR/UntoldEngineXR.swift @@ -39,6 +39,9 @@ private var missingAnchorFrameCount: Int = 0 private var lastAnchorDiagnosticsLogTime: CFTimeInterval = 0 private let anchorDiagnosticsLogIntervalSeconds: CFTimeInterval = 1.0 + private var arKitProviderRunAttemptCount: Int = 0 + private var lastXRStallDiagnosticsLogTime: CFTimeInterval = 0 + private let xrStallDiagnosticsLogIntervalSeconds: CFTimeInterval = 1.0 // Reuse render pass descriptors to avoid allocation churn (2 eyes × 90 FPS = 180 allocs/sec) private let passDescriptorLeft = MTLRenderPassDescriptor() @@ -72,7 +75,7 @@ configureSpatialEventBridge() applyXRLightingMode(RuntimeEnvironmentLightingStore.shared.mode) - startARKitProviders() + startARKitProviders(reason: "startup") // Start monitoring plane anchor updates in the background. if PlaneDetectionProvider.isSupported { @@ -227,12 +230,15 @@ RealSurfacePlaneStore.shared.clear() } - private func startARKitProviders() { + private func startARKitProviders(reason: String = "unspecified") { #if canImport(ARKit) let worldTracking = worldTracking let arSession = arSession let planeDetection = planeDetection let xrEnvironmentLightingSystem = xrEnvironmentLightingSystem + arKitProviderRunAttemptCount += 1 + let attempt = arKitProviderRunAttemptCount + let startTime = CACurrentMediaTime() Task { do { @@ -241,10 +247,12 @@ let worldSensingAllowed = authStatus[.worldSensing] != .denied var providers: [any DataProvider] = [worldTracking] + var providerNames = ["WorldTrackingProvider"] if worldSensingAllowed { if PlaneDetectionProvider.isSupported { providers.append(planeDetection) + providerNames.append("PlaneDetectionProvider") } else { print("⚠️ PlaneDetectionProvider is not supported on this device") } @@ -254,12 +262,21 @@ if let lightingProvider = xrEnvironmentLightingSystem.providerForSession { providers.append(lightingProvider) + providerNames.append("EnvironmentLightingProvider") } + let providerList = providerNames.joined(separator: ",") + print("XR ARKit providers run starting: attempt=\(attempt), reason=\(reason), providers=\(providerList), worldSensingAllowed=\(worldSensingAllowed)") try await arSession.run(providers) xrEnvironmentLightingSystem.markProviderRunning(xrEnvironmentLightingSystem.providerForSession != nil) + let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 + let durationText = String(format: "%.2f", durationMs) + print("XR ARKit providers run completed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state))") } catch { xrEnvironmentLightingSystem.markProviderRunning(false) + let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 + let durationText = String(format: "%.2f", durationMs) + print("XR ARKit providers run failed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state)), error=\(error)") print("⚠️ Failed to start ARKit providers: \(error)") } } @@ -423,13 +440,13 @@ } else if let cachedAnchor = lastValidDeviceAnchor { missingAnchorFrameCount += 1 if shouldLogAnchorDiagnostics() { - print("⚠️ XR device anchor missing for \(missingAnchorFrameCount) frame(s); using cached anchor") + printXRAnchorDiagnostics(message: "XR device anchor missing; using cached anchor") } drawable.deviceAnchor = cachedAnchor } else { missingAnchorFrameCount += 1 if shouldLogAnchorDiagnostics() { - print("⚠️ XR device anchor missing for \(missingAnchorFrameCount) frame(s); no cached anchor available") + printXRAnchorDiagnostics(message: "XR device anchor missing; no cached anchor available") } } // Note: If we have no cached anchor either, drawable.deviceAnchor remains nil @@ -522,7 +539,19 @@ func executeXRSystemPass(frame _: LayerRenderer.Frame, drawable: LayerRenderer.Drawable, loading: Bool) { // Wait for available command buffer slot to prevent unbounded memory growth - commandBufferSemaphore.wait() + let semaphoreWaitStart = CACurrentMediaTime() + let firstWaitResult = commandBufferSemaphore.wait(timeout: .now() + .milliseconds(100)) + if firstWaitResult == .timedOut { + let waitMs = (CACurrentMediaTime() - semaphoreWaitStart) * 1000.0 + if shouldLogXRStallDiagnostics() { + printXRCommandBufferStallDiagnostics(waitMs: waitMs, phase: "initial-timeout") + } + commandBufferSemaphore.wait() + } + let semaphoreWaitMs = (CACurrentMediaTime() - semaphoreWaitStart) * 1000.0 + if semaphoreWaitMs > 16.0, shouldLogXRStallDiagnostics() { + printXRCommandBufferStallDiagnostics(waitMs: semaphoreWaitMs, phase: "acquired") + } guard let commandBuffer = renderInfo.commandQueue.makeCommandBuffer() else { // Failed to create command buffer - release semaphore @@ -688,6 +717,60 @@ return true } + private func shouldLogXRStallDiagnostics() -> Bool { + let now = CACurrentMediaTime() + guard now - lastXRStallDiagnosticsLogTime >= xrStallDiagnosticsLogIntervalSeconds else { + return false + } + + lastXRStallDiagnosticsLogTime = now + return true + } + + private func printXRAnchorDiagnostics(message: String) { + #if canImport(ARKit) + let portalDiagnostics = getLightPortalRenderDiagnostics() + let lightingDiagnostics = xrEnvironmentLightingSystem.diagnostics() + let layerState = layerRenderer.map { String(describing: $0.state) } ?? "nil" + print( + "⚠️ \(message): missingFrameCount=\(missingAnchorFrameCount), " + + "worldTrackingState=\(String(describing: worldTracking.state)), " + + "layerState=\(layerState), " + + "lastValidAnchorAvailable=\(lastValidDeviceAnchor != nil), " + + "xrLightingValid=\(lightingDiagnostics.latestProbeTextureValid), " + + "xrIntensityScale=\(String(describing: lightingDiagnostics.latestIntensityScale)), " + + "portalAreaLightCount=\(portalDiagnostics.portalAreaLightCount), " + + "totalPortalIntensity=\(portalDiagnostics.totalEffectivePortalIntensity), " + + "portalFallback=\(String(describing: portalDiagnostics.fallbackReason))" + ) + #else + _ = message + #endif + } + + private func printXRCommandBufferStallDiagnostics(waitMs: Double, phase: String) { + #if canImport(ARKit) + let portalDiagnostics = getLightPortalRenderDiagnostics() + let lightingDiagnostics = xrEnvironmentLightingSystem.diagnostics() + let layerState = layerRenderer.map { String(describing: $0.state) } ?? "nil" + let waitText = String(format: "%.2f", waitMs) + print( + "⚠️ XR command buffer semaphore stall: phase=\(phase), waitMs=\(waitText), " + + "missingAnchorFrameCount=\(missingAnchorFrameCount), " + + "worldTrackingState=\(String(describing: worldTracking.state)), " + + "layerState=\(layerState), " + + "xrLightingValid=\(lightingDiagnostics.latestProbeTextureValid), " + + "xrIntensityScale=\(String(describing: lightingDiagnostics.latestIntensityScale)), " + + "portalAreaLightCount=\(portalDiagnostics.portalAreaLightCount), " + + "totalPortalIntensity=\(portalDiagnostics.totalEffectivePortalIntensity), " + + "portalFallback=\(String(describing: portalDiagnostics.fallbackReason))" + ) + #else + _ = waitMs + _ = phase + #endif + } + private func queryDeviceAnchorIfTrackingRunning(atTimestamp timestamp: TimeInterval) -> DeviceAnchor? { #if canImport(ARKit) guard worldTracking.state == .running else { @@ -705,14 +788,17 @@ #if canImport(ARKit) let now = CACurrentMediaTime() guard now - lastWorldTrackingRecoveryAttemptTime >= worldTrackingRecoveryCooldownSeconds else { + if shouldLogAnchorDiagnostics() { + printXRAnchorDiagnostics(message: "XR world tracking recovery suppressed by cooldown") + } return } lastWorldTrackingRecoveryAttemptTime = now guard worldTracking.state != .running else { return } - startARKitProviders() - print("✓ XR ARKit providers recovery scheduled") + startARKitProviders(reason: "worldTrackingState=\(String(describing: worldTracking.state))") + print("✓ XR ARKit providers recovery scheduled: worldTrackingState=\(String(describing: worldTracking.state)), missingAnchorFrameCount=\(missingAnchorFrameCount)") #endif } @@ -746,7 +832,7 @@ public func setXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { RuntimeEnvironmentLightingStore.shared.mode = mode applyXRLightingMode(mode) - startARKitProviders() + startARKitProviders(reason: "setXRLightingMode(\(mode))") } public func setXRLightingContribution(_ factor: Float) { diff --git a/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift index b876ca3b..73155cd0 100644 --- a/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift +++ b/Sources/UntoldEngineXR/XREnvironmentLightingSystem.swift @@ -11,6 +11,7 @@ #if os(visionOS) import Foundation import Metal + import simd import UntoldEngine #if canImport(ARKit) import ARKit @@ -23,6 +24,8 @@ public var latestProbeTimestamp: CFTimeInterval? public var latestProbeTextureValid: Bool public var latestCameraScaleReference: Float? + public var latestIntensityScale: Float + public var latestTintColor: simd_float3 public var prefilterInFlight: Bool public var lastPrefilterDurationMs: Double? public var realWorldLightingContribution: Float @@ -38,6 +41,8 @@ private var latestProbeTimestampValue: CFTimeInterval? private var latestProbeTextureValidValue = false private var latestCameraScaleReferenceValue: Float? + private var latestIntensityScaleValue: Float = 1.0 + private var latestTintColorValue = simd_float3(1.0, 1.0, 1.0) private var prefilterInFlightValue = false private var lastPrefilterDurationMsValue: Double? private var acceptedProbeUpdateCountValue = 0 @@ -48,6 +53,7 @@ private var textureSets: [RuntimeEnvironmentLightingTextureSet] = [] private var currentReadTextureSetIndex = 0 private var prefilterGeneration: UInt64 = 0 + private let cameraScaleReferenceWhitePoint: Float = 5000.0 #if canImport(ARKit) private let environmentLightEstimationProvider: EnvironmentLightEstimationProvider? @@ -99,6 +105,8 @@ latestProbeTimestampValue = nil latestProbeTextureValidValue = false latestCameraScaleReferenceValue = nil + latestIntensityScaleValue = 1.0 + latestTintColorValue = simd_float3(1.0, 1.0, 1.0) providerRunningValue = false prefilterInFlightValue = false lastPrefilterDurationMsValue = nil @@ -148,6 +156,7 @@ latestProbeTextureValidValue = false fallbackReasonValue = reason lock.unlock() + RuntimeEnvironmentLightingStore.shared.publishXRLighting(nil) } #if canImport(ARKit) @@ -178,18 +187,16 @@ guard shouldAcceptProbeUpdate(timestamp: anchor.timestamp) else { return } let hasTexture = anchor.environmentTexture != nil - lock.lock() - latestProbeTextureValidValue = hasTexture - latestCameraScaleReferenceValue = anchor.cameraScaleReference - if !hasTexture { - fallbackReasonValue = "XR probe texture unavailable" - } - lock.unlock() + let intensityScale = updateProbeCameraScaleReference( + anchor.cameraScaleReference, + hasTexture: hasTexture + ) if let environmentTexture = anchor.environmentTexture { scheduleProbePrefilter( environmentTexture: environmentTexture, timestamp: anchor.timestamp, + intensityScale: intensityScale, retainedAnchor: anchor ) } @@ -253,6 +260,8 @@ textureSetIndex: Int, generation: UInt64, timestamp: CFTimeInterval, + intensityScale: Float, + tintColor: simd_float3, durationMs: Double ) { lock.lock() @@ -268,11 +277,13 @@ guard succeeded, textureSets.indices.contains(textureSetIndex) else { fallbackReasonValue = "XR probe prefilter failed" lock.unlock() + RuntimeEnvironmentLightingStore.shared.publishXRLighting(nil) return } currentReadTextureSetIndex = textureSetIndex let textureSet = textureSets[textureSetIndex] + latestTintColorValue = tintColor fallbackReasonValue = nil lock.unlock() @@ -281,16 +292,54 @@ irradianceMap: textureSet.irradianceMap, specularMap: textureSet.specularMap, brdfMap: textureSet.brdfMap, - intensityScale: 1.0, + intensityScale: intensityScale, + tintColor: tintColor, timestamp: timestamp, isValid: true ) ) } + private func updateProbeCameraScaleReference(_ cameraScaleReference: Float?, hasTexture: Bool) -> Float { + lock.lock() + defer { lock.unlock() } + + latestProbeTextureValidValue = hasTexture + latestCameraScaleReferenceValue = cameraScaleReference + if !hasTexture { + fallbackReasonValue = "XR probe texture unavailable" + latestIntensityScaleValue = 0.0 + latestTintColorValue = simd_float3(1.0, 1.0, 1.0) + RuntimeEnvironmentLightingStore.shared.publishXRLighting(nil) + } + + guard let cameraScaleReference, + cameraScaleReference.isFinite, + cameraScaleReference > 0.0001 + else { + latestIntensityScaleValue = hasTexture ? 1.0 : 0.0 + return latestIntensityScaleValue + } + + let intensityScale = min(max(cameraScaleReference / cameraScaleReferenceWhitePoint, 0.0), 8.0) + latestIntensityScaleValue = intensityScale + return intensityScale + } + + private struct EnvironmentTintReadback { + var buffer: MTLBuffer + var pixelFormat: MTLPixelFormat + var width: Int + var height: Int + var bytesPerRow: Int + var faceBytes: Int + var faceCount: Int + } + private func scheduleProbePrefilter( environmentTexture: MTLTexture, timestamp: CFTimeInterval, + intensityScale: Float, retainedAnchor: Any ) { guard environmentTexture.textureType == .typeCube else { @@ -309,6 +358,8 @@ textureSetIndex: textureSetIndex, generation: generation, timestamp: timestamp, + intensityScale: intensityScale, + tintColor: simd_float3(1.0, 1.0, 1.0), durationMs: 0 ) return @@ -316,6 +367,10 @@ commandBuffer.label = "XR Environment Probe IBL Prefilter" let startTime = Date().timeIntervalSinceReferenceDate + let tintReadback = encodeEnvironmentTintReadback( + commandBuffer: commandBuffer, + environmentTexture: environmentTexture + ) let encoded = executeXRIBLCubePreFilterPass( commandBuffer: commandBuffer, environmentCubeTexture: environmentTexture, @@ -328,6 +383,8 @@ textureSetIndex: textureSetIndex, generation: generation, timestamp: timestamp, + intensityScale: intensityScale, + tintColor: simd_float3(1.0, 1.0, 1.0), durationMs: 0 ) return @@ -336,17 +393,131 @@ commandBuffer.addCompletedHandler { [weak self, retainedAnchor] commandBuffer in _ = retainedAnchor let durationMs = (Date().timeIntervalSinceReferenceDate - startTime) * 1000.0 + let tintColor = tintReadback.map { self?.environmentTint(from: $0) ?? simd_float3(1.0, 1.0, 1.0) } + ?? simd_float3(1.0, 1.0, 1.0) self?.finishPrefilter( succeeded: commandBuffer.status == .completed, textureSetIndex: textureSetIndex, generation: generation, timestamp: timestamp, + intensityScale: intensityScale, + tintColor: tintColor, durationMs: durationMs ) } commandBuffer.commit() } + private func encodeEnvironmentTintReadback( + commandBuffer: MTLCommandBuffer, + environmentTexture: MTLTexture + ) -> EnvironmentTintReadback? { + guard let bytesPerPixel = environmentTintBytesPerPixel(for: environmentTexture.pixelFormat), + let blit = commandBuffer.makeBlitCommandEncoder() + else { return nil } + + let mipLevel = max(environmentTexture.mipmapLevelCount - 1, 0) + let width = max(environmentTexture.width >> mipLevel, 1) + let height = max(environmentTexture.height >> mipLevel, 1) + let bytesPerRow = width * bytesPerPixel + let faceBytes = bytesPerRow * height + let faceCount = 6 + let bufferLength = faceBytes * faceCount + + guard let buffer = renderInfo.device.makeBuffer(length: bufferLength, options: .storageModeShared) else { + blit.endEncoding() + return nil + } + buffer.label = "XR Environment Probe Tint Readback" + + for face in 0 ..< faceCount { + blit.copy( + from: environmentTexture, + sourceSlice: face, + sourceLevel: mipLevel, + sourceOrigin: MTLOrigin(x: 0, y: 0, z: 0), + sourceSize: MTLSize(width: width, height: height, depth: 1), + to: buffer, + destinationOffset: face * faceBytes, + destinationBytesPerRow: bytesPerRow, + destinationBytesPerImage: faceBytes + ) + } + blit.endEncoding() + + return EnvironmentTintReadback( + buffer: buffer, + pixelFormat: environmentTexture.pixelFormat, + width: width, + height: height, + bytesPerRow: bytesPerRow, + faceBytes: faceBytes, + faceCount: faceCount + ) + } + + private func environmentTintBytesPerPixel(for pixelFormat: MTLPixelFormat) -> Int? { + switch pixelFormat { + case .rgba16Float: + return 8 + case .rgba32Float: + return 16 + case .rgba8Unorm, .rgba8Unorm_srgb, .bgra8Unorm, .bgra8Unorm_srgb: + return 4 + default: + return nil + } + } + + private func environmentTint(from readback: EnvironmentTintReadback) -> simd_float3 { + let contents = readback.buffer.contents() + var total = simd_float3(0.0, 0.0, 0.0) + var sampleCount: Float = 0.0 + + for face in 0 ..< readback.faceCount { + let faceBase = face * readback.faceBytes + for y in 0 ..< readback.height { + let rowBase = faceBase + y * readback.bytesPerRow + for x in 0 ..< readback.width { + let offset = rowBase + x * environmentTintBytesPerPixel(for: readback.pixelFormat)! + total += environmentTintPixel(contents: contents, offset: offset, pixelFormat: readback.pixelFormat) + sampleCount += 1.0 + } + } + } + + guard sampleCount > 0.0 else { return simd_float3(1.0, 1.0, 1.0) } + let average = total / sampleCount + let luminance = simd_dot(average, simd_float3(0.2126, 0.7152, 0.0722)) + guard luminance.isFinite, luminance > 0.0001 else { return simd_float3(1.0, 1.0, 1.0) } + + let tint = average / luminance + return simd_clamp(tint, simd_float3(0.25, 0.25, 0.25), simd_float3(2.5, 2.5, 2.5)) + } + + private func environmentTintPixel(contents: UnsafeMutableRawPointer, offset: Int, pixelFormat: MTLPixelFormat) -> simd_float3 { + switch pixelFormat { + case .rgba16Float: + let pointer = contents.advanced(by: offset).assumingMemoryBound(to: UInt16.self) + return simd_float3( + Float(Float16(bitPattern: pointer[0])), + Float(Float16(bitPattern: pointer[1])), + Float(Float16(bitPattern: pointer[2])) + ) + case .rgba32Float: + let pointer = contents.advanced(by: offset).assumingMemoryBound(to: Float.self) + return simd_float3(pointer[0], pointer[1], pointer[2]) + case .rgba8Unorm, .rgba8Unorm_srgb: + let pointer = contents.advanced(by: offset).assumingMemoryBound(to: UInt8.self) + return simd_float3(Float(pointer[0]), Float(pointer[1]), Float(pointer[2])) / 255.0 + case .bgra8Unorm, .bgra8Unorm_srgb: + let pointer = contents.advanced(by: offset).assumingMemoryBound(to: UInt8.self) + return simd_float3(Float(pointer[2]), Float(pointer[1]), Float(pointer[0])) / 255.0 + default: + return simd_float3(1.0, 1.0, 1.0) + } + } + public func diagnostics() -> XREnvironmentLightingDiagnostics { lock.lock() #if canImport(ARKit) @@ -361,6 +532,8 @@ latestProbeTimestamp: latestProbeTimestampValue, latestProbeTextureValid: latestProbeTextureValidValue, latestCameraScaleReference: latestCameraScaleReferenceValue, + latestIntensityScale: latestIntensityScaleValue, + latestTintColor: latestTintColorValue, prefilterInFlight: prefilterInFlightValue, lastPrefilterDurationMs: lastPrefilterDurationMsValue, realWorldLightingContribution: RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution, diff --git a/Tests/UntoldEngineRenderTests/LightSystemTest.swift b/Tests/UntoldEngineRenderTests/LightSystemTest.swift index 45c24f4f..ffa9b2d7 100644 --- a/Tests/UntoldEngineRenderTests/LightSystemTest.swift +++ b/Tests/UntoldEngineRenderTests/LightSystemTest.swift @@ -107,6 +107,43 @@ final class LightSystemTest: BaseRenderSetup { assertVector(getLightTransformForwardAxis(entityId: area), equals: simd_float3(0.0, 1.0, 0.0)) assertVector(getLightEmissionDirection(entityId: area), equals: simd_float3(0.0, -1.0, 0.0)) assertVector(getAreaLights().first?.forward ?? .zero, equals: simd_float3(0.0, 1.0, 0.0)) + XCTAssertEqual(getAreaLights().first?.nearSourceSuppressionRadius ?? -1.0, 0.0) + } + + func testAreaLightShaderUniformLayoutIncludesPortalFields() { + XCTAssertEqual(MemoryLayout.stride, MemoryLayout.stride) + XCTAssertEqual(MemoryLayout.alignment, MemoryLayout.alignment) + + var light = AreaLight() + light.position = simd_float3(1.0, 2.0, 3.0) + light.color = simd_float3(0.75, 0.5, 0.25) + light.forward = simd_float3(0.0, 0.0, 1.0) + light.right = simd_float3(1.0, 0.0, 0.0) + light.up = simd_float3(0.0, 1.0, 0.0) + light.bounds = simd_float2(4.0, 2.0) + light.intensity = 1.5 + light.range = 6.0 + light.nearSourceSuppressionRadius = 0.35 + light.twoSided = true + + let uniform = [light].withUnsafeBufferPointer { buffer in + UnsafeRawBufferPointer( + start: buffer.baseAddress, + count: MemoryLayout.stride + ).load(as: AreaLightUniform.self) + } + + assertVector(uniform.position, equals: light.position) + assertVector(uniform.color, equals: light.color) + assertVector(uniform.forward, equals: light.forward) + assertVector(uniform.right, equals: light.right) + assertVector(uniform.up, equals: light.up) + XCTAssertEqual(uniform.bounds.x, light.bounds.x, accuracy: 0.0001) + XCTAssertEqual(uniform.bounds.y, light.bounds.y, accuracy: 0.0001) + XCTAssertEqual(uniform.intensity, light.intensity, accuracy: 0.0001) + XCTAssertEqual(uniform.range, light.range, accuracy: 0.0001) + XCTAssertEqual(uniform.nearSourceSuppressionRadius, light.nearSourceSuppressionRadius, accuracy: 0.0001) + XCTAssertTrue(uniform.twoSided) } func testGetDirLightParameters() { diff --git a/Tests/UntoldEngineRenderTests/RendererTest.swift b/Tests/UntoldEngineRenderTests/RendererTest.swift index 38efdb0b..e8b4b400 100644 --- a/Tests/UntoldEngineRenderTests/RendererTest.swift +++ b/Tests/UntoldEngineRenderTests/RendererTest.swift @@ -9,6 +9,7 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. import CShaderTypes +import Metal import simd import UniformTypeIdentifiers @testable import UntoldEngine @@ -545,3 +546,197 @@ final class RendererTests: BaseRenderSetup { XCTAssertEqual(tex.pixelFormat, .rgba8Unorm_srgb) } } + +final class LightPortalRendererTests: BaseRenderSetup { + private let portalChannel = SceneChannel.userCustom(index: 30) + + override func initializeAssets() { + ambientIntensity = 0.0 + applyIBL = false + renderEnvironment = false + SSAOParams.shared.enabled = false + + let camera = createEntity() + createGameCamera(entityId: camera) + CameraSystem.shared.activeCamera = camera + cameraLookAt( + entityId: camera, + eye: simd_float3(0.0, 2.0, 6.0), + target: simd_float3(0.0, 0.0, 0.0), + up: simd_float3(0.0, 1.0, 0.0) + ) + + let receiver = createEntity() + setEntityMeshDirect(entityId: receiver, meshes: BasicPrimitives.createCube(extent: 1.0), assetName: "PortalReceiver") + scaleTo(entityId: receiver, scale: simd_float3(4.0, 0.12, 4.0)) + translateTo(entityId: receiver, position: simd_float3(0.0, -0.7, 0.0)) + + let portal = createEntity() + setEntityMeshDirect(entityId: portal, meshes: BasicPrimitives.createCube(extent: 1.0), assetName: "PortalSurface") + scene.get(component: LocalTransformComponent.self, for: portal)?.boundingBox = ( + min: simd_float3(-0.5, -0.5, -0.025), + max: simd_float3(0.5, 0.5, 0.025) + ) + scaleTo(entityId: portal, scale: simd_float3(2.0, 2.0, 0.05)) + translateTo(entityId: portal, position: simd_float3(0.0, 1.1, 2.0)) + setEntitySceneChannels(entityId: portal, channels: portalChannel) + setSceneChannel(portalChannel, .lightPortal(.disabled)) + } + + func testLightPortalIncreasesRenderedLightPassBrightness() { + let disabledLuminance = renderLightPassAverageLuminance() + + setSceneChannel( + portalChannel, + .lightPortal(.enabled( + intensity: 18.0, + range: 8.0, + useRealWorldTint: false, + maxActivePortals: 1, + activationDistance: 20.0 + )) + ) + cullFrameIndex &+= 1 + + let enabledLuminance = renderLightPassAverageLuminance() + let diagnostics = getLightPortalRenderDiagnostics() + + XCTAssertEqual(diagnostics.portalAreaLightCount, 1) + XCTAssertGreaterThan(diagnostics.totalEffectivePortalIntensity, 0.0) + XCTAssertGreaterThan( + enabledLuminance, + disabledLuminance + 0.002, + "Portal-enabled render should produce measurably brighter light-pass pixels" + ) + } + + func testLightPortalRangeAttenuationLimitsRenderedContribution() { + setSceneChannel( + portalChannel, + .lightPortal(.enabled( + intensity: 18.0, + range: 0.25, + useRealWorldTint: false, + maxActivePortals: 1, + activationDistance: 20.0 + )) + ) + cullFrameIndex &+= 1 + let shortRangeLuminance = renderLightPassAverageLuminance() + + setSceneChannel( + portalChannel, + .lightPortal(.enabled( + intensity: 18.0, + range: 8.0, + useRealWorldTint: false, + maxActivePortals: 1, + activationDistance: 20.0 + )) + ) + cullFrameIndex &+= 1 + let normalRangeLuminance = renderLightPassAverageLuminance() + + XCTAssertEqual(getLightPortalRenderDiagnostics().portalAreaLightCount, 1) + XCTAssertGreaterThan( + normalRangeLuminance, + shortRangeLuminance + 0.002, + "Portal range attenuation should reduce contribution outside a short range" + ) + } + + func testMeshRegistrationInvalidatesPortalAreaLightCacheWithinFrame() { + let meshChannel = SceneChannel.userCustom(index: 31) + registerSceneChannelPrefix("WIN_CACHE_", channels: meshChannel) + setSceneChannel(meshChannel, .lightPortal(.enabled( + intensity: 3.0, + range: 8.0, + useRealWorldTint: false, + maxActivePortals: 1, + activationDistance: 20.0 + ))) + + let portal = createEntity() + setEntityName(entityId: portal, name: "WIN_CACHE_Portal") + setEntityMeshDirect(entityId: portal, meshes: BasicPrimitives.createCube(extent: 1.0), assetName: "WIN_CACHE_Portal") + scene.get(component: LocalTransformComponent.self, for: portal)?.boundingBox = ( + min: simd_float3(-0.5, -0.5, -0.025), + max: simd_float3(0.5, 0.5, 0.025) + ) + scaleTo(entityId: portal, scale: simd_float3(2.0, 2.0, 0.05)) + translateTo(entityId: portal, position: simd_float3(0.0, 1.1, 2.0)) + + let initialLights = getAreaLights() + setEntityMeshDirect(entityId: portal, meshes: BasicPrimitives.createCube(extent: 1.0), assetName: "WIN_CACHE_Portal") + let updatedLights = getAreaLights() + + XCTAssertEqual(initialLights.count, 1) + XCTAssertTrue(updatedLights.isEmpty) + XCTAssertEqual(getLightPortalDiscoveryDiagnostics().skippedInvalidGeometryCount, 1) + } + + private func renderLightPassAverageLuminance( + file: StaticString = #filePath, + line: UInt = #line + ) -> Float { + renderer.draw(in: renderer.metalView) + renderInfo.lastCommandBuffer?.waitUntilCompleted() + + guard let texture = renderInfo.deferredRenderPassDescriptor.colorAttachments[Int(colorTarget.rawValue)].texture else { + XCTFail("Expected light-pass color texture", file: file, line: line) + return 0.0 + } + + return averageLuminance( + texture: texture, + normalizedRegion: (x: 0.35, y: 0.35, width: 0.3, height: 0.3), + file: file, + line: line + ) + } + + private func averageLuminance( + texture: MTLTexture, + normalizedRegion: (x: Float, y: Float, width: Float, height: Float), + file: StaticString = #filePath, + line: UInt = #line + ) -> Float { + let x = max(0, min(texture.width - 1, Int(Float(texture.width) * normalizedRegion.x))) + let y = max(0, min(texture.height - 1, Int(Float(texture.height) * normalizedRegion.y))) + let width = max(1, min(texture.width - x, Int(Float(texture.width) * normalizedRegion.width))) + let height = max(1, min(texture.height - y, Int(Float(texture.height) * normalizedRegion.height))) + let region = MTLRegionMake2D(x, y, width, height) + + switch texture.pixelFormat { + case .rgba16Float: + let bytesPerPixel = 8 + let bytesPerRow = width * bytesPerPixel + let sampleCount = width * height + var data = [UInt16](repeating: 0, count: sampleCount * 4) + data.withUnsafeMutableBytes { rawBuffer in + texture.getBytes( + rawBuffer.baseAddress!, + bytesPerRow: bytesPerRow, + from: region, + mipmapLevel: 0 + ) + } + + var total: Float = 0.0 + for index in 0 ..< sampleCount { + let base = index * 4 + let rgb = simd_float3( + Float(Float16(bitPattern: data[base])), + Float(Float16(bitPattern: data[base + 1])), + Float(Float16(bitPattern: data[base + 2])) + ) + total += simd_dot(rgb, simd_float3(0.2126, 0.7152, 0.0722)) + } + return total / Float(sampleCount) + + default: + XCTFail("Unsupported light-pass pixel format: \(texture.pixelFormat)", file: file, line: line) + return 0.0 + } + } +} diff --git a/Tests/UntoldEngineTests/LightPortalSystemTests.swift b/Tests/UntoldEngineTests/LightPortalSystemTests.swift new file mode 100644 index 00000000..8dea979d --- /dev/null +++ b/Tests/UntoldEngineTests/LightPortalSystemTests.swift @@ -0,0 +1,532 @@ +// +// LightPortalSystemTests.swift +// UntoldEngineTests +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import simd +@testable import UntoldEngine +import XCTest + +@MainActor +final class LightPortalSystemTests: XCTestCase { + override func setUp() async throws { + resetEngineTestState() + } + + func testDiscoveryReturnsRenderableEntitiesWithEnabledPortalChannels() { + let windowChannel = SceneChannel.userCustom(index: 0) + setSceneChannel( + windowChannel, + .lightPortal(.enabled(intensity: 2.0, range: 8.0, useRealWorldTint: true, maxActivePortals: 4, activationDistance: 12.0)) + ) + + let entityId = makeRenderableEntity(channels: windowChannel) + let candidates = discoverSceneLightPortalCandidates() + + XCTAssertEqual(candidates.count, 1) + XCTAssertEqual(candidates.first?.entityId, entityId) + XCTAssertEqual(candidates.first?.channels, windowChannel) + XCTAssertEqual(candidates.first?.mode, .enabled(intensity: 2.0, range: 8.0, useRealWorldTint: true, maxActivePortals: 4, activationDistance: 12.0)) + XCTAssertEqual(candidates.first?.localBoundsMin, simd_float3(-1.0, -1.0, -0.05)) + XCTAssertEqual(candidates.first?.localBoundsMax, simd_float3(1.0, 1.0, 0.05)) + + XCTAssertEqual( + getLightPortalDiscoveryDiagnostics(), + LightPortalDiscoveryDiagnostics( + scannedRenderableEntityCount: 1, + candidateCount: 1, + skippedHiddenCount: 0, + skippedInvisibleRenderComponentCount: 0, + skippedDisabledPortalCount: 0, + skippedInvalidGeometryCount: 0 + ) + ) + } + + func testDiscoveryUsesRegisteredPrefixFallbackChannels() { + let windowChannel = SceneChannel.userCustom(index: 1) + registerSceneChannelPrefix("WIN_", channels: windowChannel) + setSceneChannel(windowChannel, .lightPortal(.enabled())) + + let entityId = makeRenderableEntity(name: "WIN_Main") + let candidates = discoverSceneLightPortalCandidates() + + XCTAssertEqual(candidates.map(\.entityId), [entityId]) + XCTAssertEqual(candidates.first?.channels, windowChannel) + } + + func testDiscoverySkipsHiddenAndInvisibleEntities() { + let windowChannel = SceneChannel.userCustom(index: 2) + let hiddenChannel = SceneChannel.userCustom(index: 3) + setSceneChannel(windowChannel, .lightPortal(.enabled())) + setSceneChannel(hiddenChannel, .renderMode(.hidden)) + + let hiddenEntityId = makeRenderableEntity(channels: [windowChannel, hiddenChannel]) + let invisibleEntityId = makeRenderableEntity(channels: windowChannel, renderVisible: false) + let candidates = discoverSceneLightPortalCandidates() + + XCTAssertTrue(candidates.isEmpty) + XCTAssertFalse(candidates.contains { $0.entityId == hiddenEntityId }) + XCTAssertFalse(candidates.contains { $0.entityId == invisibleEntityId }) + + XCTAssertEqual( + getLightPortalDiscoveryDiagnostics(), + LightPortalDiscoveryDiagnostics( + scannedRenderableEntityCount: 2, + candidateCount: 0, + skippedHiddenCount: 1, + skippedInvisibleRenderComponentCount: 1, + skippedDisabledPortalCount: 0, + skippedInvalidGeometryCount: 0 + ) + ) + } + + func testDiscoverySkipsChannelsWithoutEnabledLightPortalMode() { + let windowChannel = SceneChannel.userCustom(index: 4) + setSceneChannel(windowChannel, .lightPortal(.enabled())) + _ = makeRenderableEntity(channels: .contextGeometry) + + let candidates = discoverSceneLightPortalCandidates() + + XCTAssertTrue(candidates.isEmpty) + XCTAssertEqual( + getLightPortalDiscoveryDiagnostics(), + LightPortalDiscoveryDiagnostics( + scannedRenderableEntityCount: 1, + candidateCount: 0, + skippedHiddenCount: 0, + skippedInvisibleRenderComponentCount: 0, + skippedDisabledPortalCount: 1, + skippedInvalidGeometryCount: 0 + ) + ) + } + + func testDiscoveryFastPathSkipsRenderableScanWhenNoPortalChannelsAreEnabled() { + _ = makeRenderableEntity(channels: .contextGeometry) + + let candidates = discoverSceneLightPortalCandidates() + let areaLights = getAreaLights() + + XCTAssertTrue(candidates.isEmpty) + XCTAssertTrue(areaLights.isEmpty) + XCTAssertEqual(getLightPortalDiscoveryDiagnostics(), .empty) + XCTAssertEqual(getLightPortalResolutionDiagnostics(), .empty) + } + + func testResolveProxyLightsDerivesShapeFromPortalTransform() { + let windowChannel = SceneChannel.userCustom(index: 4) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 3.0, range: 9.0, useRealWorldTint: false, maxActivePortals: 2, activationDistance: 20.0))) + + let entityId = makeRenderableEntity(channels: windowChannel) + scene.get(component: LocalTransformComponent.self, for: entityId)?.boundingBox = ( + min: simd_float3(-1.0, -0.5, -0.1), + max: simd_float3(1.0, 0.5, 0.1) + ) + scene.get(component: WorldTransformComponent.self, for: entityId)?.space = matrix4x4Translation(2.0, 3.0, 4.0) * matrix4x4Scale(2.0, 3.0, 1.0) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: simd_float3(2.0, 3.0, 0.0)) + + XCTAssertEqual(proxyLights.count, 1) + let proxyLight = tryUnwrap(proxyLights.first) + XCTAssertEqual(proxyLight.sourceEntityId, entityId) + XCTAssertEqual(proxyLight.channels, windowChannel) + XCTAssertEqual(proxyLight.position, simd_float3(2.0, 3.0, 4.0)) + XCTAssertEqual(proxyLight.forward, simd_float3(0.0, 0.0, 1.0)) + XCTAssertEqual(proxyLight.right, simd_float3(1.0, 0.0, 0.0)) + XCTAssertEqual(proxyLight.up, simd_float3(0.0, 1.0, 0.0)) + XCTAssertEqual(proxyLight.bounds, simd_float2(4.0, 3.0)) + XCTAssertEqual(proxyLight.color, simd_float3(1.0, 1.0, 1.0)) + XCTAssertEqual(proxyLight.intensity, 3.0) + XCTAssertEqual(proxyLight.range, 9.0) + XCTAssertEqual(proxyLight.distanceToCamera, 4.0) + XCTAssertFalse(proxyLight.useRealWorldTint) + } + + func testResolveProxyLightsDerivesPlaneFromLargestBoundsAxes() { + let windowChannel = SceneChannel.userCustom(index: 10) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 3, activationDistance: 20.0))) + + let xyWindow = makePortalEntity(channels: windowChannel, position: simd_float3(0.0, 0.0, 1.0)) + scene.get(component: LocalTransformComponent.self, for: xyWindow)?.boundingBox = ( + min: simd_float3(-2.0, -1.0, -0.05), + max: simd_float3(2.0, 1.0, 0.05) + ) + + let xzWindow = makePortalEntity(channels: windowChannel, position: simd_float3(0.0, 0.0, 2.0)) + scene.get(component: LocalTransformComponent.self, for: xzWindow)?.boundingBox = ( + min: simd_float3(-2.0, -0.05, -1.0), + max: simd_float3(2.0, 0.05, 1.0) + ) + + let yzWindow = makePortalEntity(channels: windowChannel, position: simd_float3(0.0, 0.0, 3.0)) + scene.get(component: LocalTransformComponent.self, for: yzWindow)?.boundingBox = ( + min: simd_float3(-0.05, -2.0, -1.0), + max: simd_float3(0.05, 2.0, 1.0) + ) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + let xyProxy = tryUnwrap(proxyLights.first { $0.sourceEntityId == xyWindow }) + XCTAssertEqual(xyProxy.bounds, simd_float2(4.0, 2.0)) + XCTAssertEqual(xyProxy.right, simd_float3(1.0, 0.0, 0.0)) + XCTAssertEqual(xyProxy.up, simd_float3(0.0, 1.0, 0.0)) + XCTAssertEqual(xyProxy.forward, simd_float3(0.0, 0.0, 1.0)) + + let xzProxy = tryUnwrap(proxyLights.first { $0.sourceEntityId == xzWindow }) + XCTAssertEqual(xzProxy.bounds, simd_float2(4.0, 2.0)) + XCTAssertEqual(xzProxy.right, simd_float3(1.0, 0.0, 0.0)) + XCTAssertEqual(xzProxy.up, simd_float3(0.0, 0.0, 1.0)) + XCTAssertEqual(xzProxy.forward, simd_float3(0.0, 1.0, 0.0)) + + let yzProxy = tryUnwrap(proxyLights.first { $0.sourceEntityId == yzWindow }) + XCTAssertEqual(yzProxy.bounds, simd_float2(4.0, 2.0)) + XCTAssertEqual(yzProxy.right, simd_float3(0.0, 1.0, 0.0)) + XCTAssertEqual(yzProxy.up, simd_float3(0.0, 0.0, 1.0)) + XCTAssertEqual(yzProxy.forward, simd_float3(1.0, 0.0, 0.0)) + } + + func testResolveProxyLightsSelectsNearestActivePortalsWithinCap() { + let windowChannel = SceneChannel.userCustom(index: 5) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 2, activationDistance: 100.0))) + + let far = makePortalEntity(channels: windowChannel, position: simd_float3(20.0, 0.0, 0.0)) + let near = makePortalEntity(channels: windowChannel, position: simd_float3(2.0, 0.0, 0.0)) + let middle = makePortalEntity(channels: windowChannel, position: simd_float3(8.0, 0.0, 0.0)) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + XCTAssertEqual(proxyLights.map(\.sourceEntityId), [near, middle]) + XCTAssertFalse(proxyLights.contains { $0.sourceEntityId == far }) + XCTAssertEqual( + getLightPortalResolutionDiagnostics(), + LightPortalResolutionDiagnostics( + discoveredCandidateCount: 3, + activePortalCount: 2, + skippedByActivationDistanceCount: 0, + maxActivePortals: 2 + ) + ) + } + + func testResolveProxyLightsSkipsPortalsBeyondActivationDistance() { + let windowChannel = SceneChannel.userCustom(index: 6) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 4, activationDistance: 5.0))) + + let active = makePortalEntity(channels: windowChannel, position: simd_float3(3.0, 0.0, 0.0)) + let skipped = makePortalEntity(channels: windowChannel, position: simd_float3(10.0, 0.0, 0.0)) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + XCTAssertEqual(proxyLights.map(\.sourceEntityId), [active]) + XCTAssertFalse(proxyLights.contains { $0.sourceEntityId == skipped }) + XCTAssertEqual( + getLightPortalResolutionDiagnostics(), + LightPortalResolutionDiagnostics( + discoveredCandidateCount: 2, + activePortalCount: 1, + skippedByActivationDistanceCount: 1, + maxActivePortals: 4 + ) + ) + } + + func testResolveProxyLightsUsesDistanceToPortalSurfaceForActivation() { + let windowChannel = SceneChannel.userCustom(index: 14) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 2.0))) + + let entityId = makePortalEntity(channels: windowChannel, position: .zero) + scene.get(component: LocalTransformComponent.self, for: entityId)?.boundingBox = ( + min: simd_float3(-10.0, -1.0, -0.05), + max: simd_float3(10.0, 1.0, 0.05) + ) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: simd_float3(9.5, 0.0, 1.0)) + + XCTAssertEqual(proxyLights.map(\.sourceEntityId), [entityId]) + XCTAssertEqual(proxyLights.first?.distanceToCamera ?? -1.0, 1.0, accuracy: 0.0001) + } + + func testResolveProxyLightsAppliesCapsPerPortalChannel() { + let westWindows = SceneChannel.userCustom(index: 15) + let eastWindows = SceneChannel.userCustom(index: 16) + setSceneChannel(westWindows, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 100.0))) + setSceneChannel(eastWindows, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 100.0))) + + let westNear = makePortalEntity(channels: westWindows, position: simd_float3(1.0, 0.0, 0.0)) + let westFar = makePortalEntity(channels: westWindows, position: simd_float3(2.0, 0.0, 0.0)) + let eastNear = makePortalEntity(channels: eastWindows, position: simd_float3(3.0, 0.0, 0.0)) + let eastFar = makePortalEntity(channels: eastWindows, position: simd_float3(4.0, 0.0, 0.0)) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + XCTAssertEqual(proxyLights.map(\.sourceEntityId), [westNear, eastNear]) + XCTAssertFalse(proxyLights.contains { $0.sourceEntityId == westFar }) + XCTAssertFalse(proxyLights.contains { $0.sourceEntityId == eastFar }) + } + + func testResolveProxyLightsConsumesCapacityForEachPortalChannelMembership() { + let broadWindows = SceneChannel.userCustom(index: 20) + let specificWindows = SceneChannel.userCustom(index: 21) + setSceneChannel(broadWindows, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 100.0))) + setSceneChannel(specificWindows, .lightPortal(.enabled(maxActivePortals: 2, activationDistance: 100.0))) + + let shared = makePortalEntity(channels: [broadWindows, specificWindows], position: simd_float3(1.0, 0.0, 0.0)) + let specificOnly = makePortalEntity(channels: specificWindows, position: simd_float3(2.0, 0.0, 0.0)) + let broadOnly = makePortalEntity(channels: broadWindows, position: simd_float3(3.0, 0.0, 0.0)) + + let proxyLights = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + XCTAssertEqual(proxyLights.map(\.sourceEntityId), [shared, specificOnly]) + XCTAssertFalse(proxyLights.contains { $0.sourceEntityId == broadOnly }) + } + + func testDiscoverySkipsPortalChannelsWithNonThinGeometry() { + let windowChannel = SceneChannel.userCustom(index: 17) + setSceneChannel(windowChannel, .lightPortal(.enabled())) + + _ = makeRenderableEntity(channels: windowChannel, portalBounds: ( + min: simd_float3(-1.0, -1.0, -1.0), + max: simd_float3(1.0, 1.0, 1.0) + )) + + XCTAssertTrue(discoverSceneLightPortalCandidates().isEmpty) + XCTAssertEqual(getLightPortalDiscoveryDiagnostics().skippedInvalidGeometryCount, 1) + } + + func testAreaLightsIncludeResolvedLightPortalProxies() { + let windowChannel = SceneChannel.userCustom(index: 7) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 2.0, range: 6.0, useRealWorldTint: false, maxActivePortals: 2, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 2.0, 3.0)) + + let areaLights = getAreaLights() + + XCTAssertEqual(areaLights.count, 1) + XCTAssertEqual(areaLights[0].position, simd_float3(1.0, 2.0, 3.0)) + XCTAssertEqual(areaLights[0].intensity, 2.0) + XCTAssertEqual(areaLights[0].range, 6.0) + XCTAssertEqual(areaLights[0].nearSourceSuppressionRadius, 0.4, accuracy: 0.0001) + XCTAssertEqual(areaLights[0].bounds, simd_float2(2.0, 2.0)) + XCTAssertTrue(areaLights[0].twoSided) + } + + func testAreaLightsReuseLightPortalCacheWithinFrame() { + let windowChannel = SceneChannel.userCustom(index: 12) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 20.0))) + let entityId = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + + let firstFrameLights = getAreaLights() + scene.get(component: RenderComponent.self, for: entityId)?.isVisible = false + let cachedSameFrameLights = getAreaLights() + + XCTAssertEqual(firstFrameLights.count, 1) + XCTAssertEqual(cachedSameFrameLights.count, 1) + XCTAssertEqual(cachedSameFrameLights[0].position, simd_float3(1.0, 0.0, 0.0)) + XCTAssertEqual(getLightPortalRenderDiagnostics().portalAreaLightCount, 1) + + cullFrameIndex &+= 1 + let nextFrameLights = getAreaLights() + + XCTAssertTrue(nextFrameLights.isEmpty) + XCTAssertEqual(getLightPortalRenderDiagnostics().portalAreaLightCount, 0) + XCTAssertEqual(getLightPortalRenderDiagnostics().fallbackReason, "No active portal proxy lights") + } + + func testSceneChannelLightPortalChangesInvalidateAreaLightCacheWithinFrame() { + let windowChannel = SceneChannel.userCustom(index: 13) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 1.0, useRealWorldTint: false, maxActivePortals: 1, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + + let initialLights = getAreaLights() + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 2.5, useRealWorldTint: false, maxActivePortals: 1, activationDistance: 20.0))) + let updatedLights = getAreaLights() + + XCTAssertEqual(initialLights.count, 1) + XCTAssertEqual(initialLights[0].intensity, 1.0, accuracy: 0.0001) + XCTAssertEqual(updatedLights.count, 1) + XCTAssertEqual(updatedLights[0].intensity, 2.5, accuracy: 0.0001) + XCTAssertEqual(getLightPortalRenderDiagnostics().maxEffectivePortalIntensity, 2.5) + } + + func testTransformChangesInvalidateAreaLightCacheWithinFrame() { + let windowChannel = SceneChannel.userCustom(index: 18) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 20.0))) + let entityId = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + + let initialLights = getAreaLights() + translateTo(entityId: entityId, position: simd_float3(4.0, 0.0, 0.0)) + let updatedLights = getAreaLights() + + XCTAssertEqual(initialLights.first?.position, simd_float3(1.0, 0.0, 0.0)) + XCTAssertEqual(updatedLights.first?.position, simd_float3(4.0, 0.0, 0.0)) + } + + func testActiveCameraMovementInvalidatesAreaLightCacheWithinFrame() { + let windowChannel = SceneChannel.userCustom(index: 22) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 5.0))) + _ = makePortalEntity(channels: windowChannel, position: .zero) + + let camera = createEntity() + createGameCamera(entityId: camera) + translateTo(entityId: camera, position: simd_float3(100.0, 0.0, 0.0)) + + let inactiveLights = getAreaLights() + translateTo(entityId: camera, position: simd_float3(0.0, 0.0, 1.0)) + let activeLights = getAreaLights() + + XCTAssertTrue(inactiveLights.isEmpty) + XCTAssertEqual(activeLights.count, 1) + XCTAssertEqual(getLightPortalRenderDiagnostics().portalAreaLightCount, 1) + } + + func testAreaLightPortalProxyUsesXRContributionScaleWhenRequested() { + let windowChannel = SceneChannel.userCustom(index: 8) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 2.0, useRealWorldTint: true, maxActivePortals: 1, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = 0.5 + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: nil, + specularMap: nil, + brdfMap: nil, + intensityScale: 3.0, + tintColor: simd_float3(1.2, 0.9, 0.6), + isValid: true + ) + ) + + let areaLights = getAreaLights() + + XCTAssertEqual(areaLights.count, 1) + XCTAssertEqual(areaLights[0].intensity, 3.0, accuracy: 0.0001) + XCTAssertEqual(areaLights[0].color, simd_float3(1.2, 0.9, 0.6)) + + let diagnostics = getLightPortalRenderDiagnostics() + XCTAssertEqual(diagnostics.portalAreaLightCount, 1) + XCTAssertEqual(diagnostics.environmentIntensityScale, 1.5, accuracy: 0.0001) + XCTAssertEqual(diagnostics.xrIntensityScale, 3.0) + XCTAssertEqual(diagnostics.environmentTintColor, simd_float3(1.2, 0.9, 0.6)) + XCTAssertEqual(diagnostics.realWorldLightingContribution, 0.5) + XCTAssertEqual(diagnostics.maxEffectivePortalIntensity, 3.0) + XCTAssertNil(diagnostics.fallbackReason) + } + + func testXRLightingChangesInvalidateAreaLightCacheWithinFrame() { + let windowChannel = SceneChannel.userCustom(index: 19) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 2.0, useRealWorldTint: true, maxActivePortals: 1, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution = 1.0 + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: nil, + specularMap: nil, + brdfMap: nil, + intensityScale: 1.0, + tintColor: simd_float3(1.0, 1.0, 1.0), + isValid: true + ) + ) + + let initialLights = getAreaLights() + RuntimeEnvironmentLightingStore.shared.publishXRLighting( + RuntimeEnvironmentLighting( + irradianceMap: nil, + specularMap: nil, + brdfMap: nil, + intensityScale: 3.0, + tintColor: simd_float3(1.3, 0.8, 0.6), + isValid: true + ) + ) + let updatedLights = getAreaLights() + + XCTAssertEqual(initialLights.first?.intensity ?? -1.0, 2.0, accuracy: 0.0001) + XCTAssertEqual(updatedLights.first?.intensity ?? -1.0, 6.0, accuracy: 0.0001) + XCTAssertEqual(updatedLights.first?.color, simd_float3(1.3, 0.8, 0.6)) + } + + func testAreaLightPortalProxyUsesZeroIntensityWhenXRContributionIsUnavailable() { + let windowChannel = SceneChannel.userCustom(index: 11) + setSceneChannel(windowChannel, .lightPortal(.enabled(intensity: 2.0, useRealWorldTint: true, maxActivePortals: 1, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + RuntimeEnvironmentLightingStore.shared.publishXRLighting(nil) + + let areaLights = getAreaLights() + + XCTAssertEqual(areaLights.count, 1) + XCTAssertEqual(areaLights[0].intensity, 0.0, accuracy: 0.0001) + + let diagnostics = getLightPortalRenderDiagnostics() + XCTAssertEqual(diagnostics.portalAreaLightCount, 1) + XCTAssertEqual(diagnostics.environmentIntensityScale, 0.0, accuracy: 0.0001) + XCTAssertFalse(diagnostics.xrLightingValid) + XCTAssertEqual(diagnostics.maxEffectivePortalIntensity, 0.0) + XCTAssertEqual(diagnostics.fallbackReason, "XR lighting unavailable for real-world portal tint") + } + + func testAuthoredAreaLightsTakeCapacityBeforePortalProxyLights() { + for _ in 0 ..< maxAreaLights { + makeAuthoredAreaLight() + } + + let windowChannel = SceneChannel.userCustom(index: 9) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 1, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + + let areaLights = getAreaLights() + + XCTAssertEqual(areaLights.count, maxAreaLights) + XCTAssertFalse(areaLights.contains { $0.position == simd_float3(1.0, 0.0, 0.0) }) + } + + private func makeRenderableEntity( + name: String? = nil, + channels: SceneChannel? = nil, + renderVisible: Bool = true, + portalBounds: (min: simd_float3, max: simd_float3) = ( + min: simd_float3(-1.0, -1.0, -0.05), + max: simd_float3(1.0, 1.0, 0.05) + ) + ) -> EntityID { + let entityId = createEntity() + if let name { + setEntityName(entityId: entityId, name: name) + } + registerComponent(entityId: entityId, componentType: RenderComponent.self) + scene.get(component: LocalTransformComponent.self, for: entityId)?.boundingBox = portalBounds + if let channels { + setEntitySceneChannels(entityId: entityId, channels: channels) + } + scene.get(component: RenderComponent.self, for: entityId)?.isVisible = renderVisible + return entityId + } + + private func makePortalEntity(channels: SceneChannel, position: simd_float3) -> EntityID { + let entityId = makeRenderableEntity(channels: channels) + scene.get(component: WorldTransformComponent.self, for: entityId)?.space = matrix4x4Translation(position.x, position.y, position.z) + return entityId + } + + private func makeAuthoredAreaLight() { + let entityId = createEntity() + registerComponent(entityId: entityId, componentType: LightComponent.self) + registerComponent(entityId: entityId, componentType: AreaLightComponent.self) + } + + private func tryUnwrap(_ value: T?, file: StaticString = #filePath, line: UInt = #line) -> T { + guard let value else { + XCTFail("Expected non-nil value", file: file, line: line) + fatalError("Expected non-nil value") + } + return value + } +} diff --git a/Tests/UntoldEngineTests/SceneContextVisibilityTests.swift b/Tests/UntoldEngineTests/SceneContextVisibilityTests.swift index 1265a6e5..0ecdf60c 100644 --- a/Tests/UntoldEngineTests/SceneContextVisibilityTests.swift +++ b/Tests/UntoldEngineTests/SceneContextVisibilityTests.swift @@ -130,6 +130,97 @@ final class SceneContextVisibilityTests: XCTestCase { XCTAssertEqual(getSceneChannelRenderMode([.contextGeometry, .selectableGeometry, .preserveIdentity]), .hidden) } + func testSceneChannelLightPortalDefaultsToDisabled() { + XCTAssertEqual(getSceneChannelLightPortalMode(.contextGeometry), .disabled) + XCTAssertFalse(shouldUseSceneChannelsAsLightPortals(.contextGeometry)) + XCTAssertFalse(hasSceneChannelLightPortalsEnabled()) + } + + func testSceneChannelLightPortalCanBeEnabledAndDisabled() { + let windowChannel = SceneChannel.userCustom(index: 1) + + setSceneChannel(windowChannel, .lightPortal(.enabled( + intensity: 1.25, + range: 7.5, + useRealWorldTint: true, + maxActivePortals: 6, + activationDistance: 18.0 + ))) + + XCTAssertEqual( + getSceneChannelLightPortalMode(windowChannel), + .enabled( + intensity: 1.25, + range: 7.5, + useRealWorldTint: true, + maxActivePortals: 6, + activationDistance: 18.0 + ) + ) + XCTAssertTrue(shouldUseSceneChannelsAsLightPortals(windowChannel)) + XCTAssertTrue(hasSceneChannelLightPortalsEnabled()) + + setSceneChannel(windowChannel, .lightPortal(.disabled)) + + XCTAssertEqual(getSceneChannelLightPortalMode(windowChannel), .disabled) + XCTAssertFalse(shouldUseSceneChannelsAsLightPortals(windowChannel)) + XCTAssertFalse(hasSceneChannelLightPortalsEnabled()) + } + + func testSceneChannelLightPortalValuesAreClamped() { + let windowChannel = SceneChannel.userCustom(index: 1) + + setSceneChannel(windowChannel, .lightPortal(.enabled( + intensity: -1.0, + range: -5.0, + useRealWorldTint: false, + maxActivePortals: -4, + activationDistance: -.infinity + ))) + + XCTAssertEqual( + getSceneChannelLightPortalMode(windowChannel), + .enabled( + intensity: 0.0, + range: 0.001, + useRealWorldTint: false, + maxActivePortals: 0, + activationDistance: 15.0 + ) + ) + } + + func testCombinedSceneChannelLightPortalUsesMostPermissiveValues() { + let broadChannel = SceneChannel.userCustom(index: 1) + let specificChannel = SceneChannel.userCustom(index: 2) + + setSceneChannel(broadChannel, .lightPortal(.enabled( + intensity: 0.75, + range: 4.0, + useRealWorldTint: false, + maxActivePortals: 4, + activationDistance: 10.0 + ))) + setSceneChannel(specificChannel, .lightPortal(.enabled( + intensity: 1.5, + range: 8.0, + useRealWorldTint: true, + maxActivePortals: 2, + activationDistance: 20.0 + ))) + + XCTAssertEqual( + sceneChannelLightPortalMode(for: [broadChannel, specificChannel]), + .enabled( + intensity: 1.5, + range: 8.0, + useRealWorldTint: true, + maxActivePortals: 4, + activationDistance: 20.0 + ) + ) + } + func testNMNamedEntityIsSelectableSceneEntity() { let entityId = createEntity() setEntityName(entityId: entityId, name: "NM_Pipe_001") diff --git a/Tests/UntoldEngineTests/TestEngineReset.swift b/Tests/UntoldEngineTests/TestEngineReset.swift index 69536f39..b899cfc6 100644 --- a/Tests/UntoldEngineTests/TestEngineReset.swift +++ b/Tests/UntoldEngineTests/TestEngineReset.swift @@ -35,6 +35,10 @@ scenePickingGPUAvailable = false activeEntity = .invalid OctreeSystem.shared.clear() + LightPortalSystem.shared.resetDiagnostics() + resetLightPortalRenderDiagnostics() + resetLightPortalAreaLightCache() + RuntimeEnvironmentLightingStore.shared.reset() resetSceneChannelVisibility() resetSceneChannelPrefixes() setSceneReady(true) diff --git a/docs/API/UsingLightPortals.md b/docs/API/UsingLightPortals.md new file mode 100644 index 00000000..efe6f3cd --- /dev/null +++ b/docs/API/UsingLightPortals.md @@ -0,0 +1,162 @@ +# Light Portals + +Light portals let selected scene-channel geometry act as a proxy source for real-world window light. This is intended for spatial twin scenes where windows, doors, or openings should let ambient real-world light appear to enter the virtual model. + +The feature uses the existing area-light shader path. Each active portal surface becomes a temporary two-sided area light derived from that entity's transform and local bounds. The portal plane is inferred from the two largest local bounding-box axes, so XY, XZ, and YZ window meshes can all be used as portal surfaces. The renderer does not create persistent light entities. + +## Basic Setup + +Define a project-specific channel for windows: + +```swift +extension SceneChannel { + static let windowGeometry = SceneChannel.userCustom(index: 1) +} +``` + +Assign entities to the channel directly: + +```swift +setEntitySceneChannels(entityId: windowEntity, channels: .windowGeometry) +``` + +Or map exported names by prefix: + +```swift +registerSceneChannelPrefix("WIN_", channels: .windowGeometry) +``` + +Enable the channel as a light portal: + +```swift +setSceneChannel( + .windowGeometry, + .lightPortal(.enabled( + intensity: 1.0, + range: 6.0, + useRealWorldTint: true, + maxActivePortals: 8, + activationDistance: 15.0 + )) +) +``` + +Disable it again: + +```swift +setSceneChannel(.windowGeometry, .lightPortal(.disabled)) +``` + +## Parameters + +| Parameter | Meaning | +|---|---| +| `intensity` | Base area-light intensity for each portal. Non-finite values fall back to `1.0`; negative values clamp to `0.0`. | +| `range` | Maximum portal area-light influence distance in scene units, measured from the closest point on the portal rectangle. Portal contribution fades smoothly over the last 25% of the range. | +| `useRealWorldTint` | When real-world XR lighting is active and valid, scales portal intensity by the current XR probe intensity and real-world contribution factor. If XR lighting is unavailable while the runtime mode requests real-world lighting, the portal emits at `0.0` instead of using the configured base intensity. | +| `maxActivePortals` | Maximum active portal proxy lights for the channel. Nearby portals are selected first within each portal-enabled channel. | +| `activationDistance` | Maximum camera distance from the portal rectangle for a portal to become active. | + +If an entity belongs to multiple portal-enabled channels, the engine combines the channel settings using the most permissive intensity, range, and activation distance. `useRealWorldTint` is enabled if any channel requests it. Active portal limits are enforced per portal-enabled channel. + +## XR Lighting + +For Vision Pro real-world lighting, enable XR lighting during app startup: + +```swift +xr.setXRLightingMode(.realWorldEstimate) +xr.setXRLightingContribution(1.0) +``` + +Light portals are independent of passthrough visibility. You can use them with mixed passthrough, without passthrough, or with normal authored virtual rendering. + +`useRealWorldTint: true` applies the XR probe's normalized intensity scale and the engine's real-world lighting contribution multiplier: + +```text +portal intensity = portal intensity * xr intensity scale * real-world contribution +``` + +If no valid XR probe is available while XR real-world lighting is enabled, real-world-tinted portals emit no light. When XR lighting is valid, changing `xr.setXRLightingContribution(...)` or `setRendering(.environment(.realWorldLightingContribution(...)))` affects portal strength immediately. + +## Diagnostics + +Discovery diagnostics report which scene entities are eligible portal surfaces: + +```swift +let candidates = discoverSceneLightPortalCandidates() +let discovery = getLightPortalDiscoveryDiagnostics() +print(candidates) +print(discovery) +``` + +Resolution diagnostics report which portals become active proxy lights: + +```swift +let proxies = resolveSceneLightPortalProxyLightsForActiveCamera() +let resolution = getLightPortalResolutionDiagnostics() +let render = getLightPortalRenderDiagnostics() +print(proxies) +print(resolution) +print(render) +``` + +Important fields: + +| Field | Meaning | +|---|---| +| `scannedRenderableEntityCount` | Renderable entities scanned for portal eligibility. | +| `candidateCount` | Renderable, visible entities on portal-enabled channels. | +| `skippedHiddenCount` | Entities skipped because their scene-channel render mode is hidden. | +| `skippedInvisibleRenderComponentCount` | Entities skipped because their render component is invisible. | +| `skippedDisabledPortalCount` | Renderable entities whose channels are not portal-enabled. | +| `skippedInvalidGeometryCount` | Portal-channel entities skipped because their local bounds are non-finite, too small, or not thin enough to infer a portal plane. | +| `discoveredCandidateCount` | Portal candidates considered for proxy-light resolution. | +| `activePortalCount` | Portal proxy lights emitted after distance filtering and active-count capping. | +| `skippedByActivationDistanceCount` | Candidates outside `activationDistance`. | +| `maxActivePortals` | Active portal cap used for the current resolved list. | +| `environmentIntensityScale` | Final XR/environment multiplier used for real-world-tinted portal proxy lights. | +| `xrIntensityScale` | XR probe intensity scale before the user contribution multiplier. | +| `environmentTintColor` | RGB tint applied to real-world-tinted portal proxy lights. | +| `realWorldLightingContribution` | User contribution multiplier from `xr.setXRLightingContribution(...)` or the rendering settings API. | +| `maxEffectivePortalIntensity` | Brightest portal intensity emitted into the area-light buffer for the latest frame. | + +## Performance + +The feature is designed to be bounded: + +- When no scene channel has light portals enabled, the renderer takes a fast path and skips portal discovery entirely. +- When at least one portal channel is enabled, discovery scans renderable entities with transform and render components. +- Resolution filters by distance to the portal rectangle and sorts candidates by nearest first. +- Portal discovery and resolution are cached per render frame and reused by the engine's render passes. +- Only `maxActivePortals` are emitted as proxy area lights. +- Authored area lights keep priority; portal lights only fill remaining `maxAreaLights` capacity. +- Portal lights fade down near their own source plane to avoid making the window frame itself look like an emissive object. + +For large spatial twins, keep the portal channel narrow. Assign only actual window/opening surfaces to the portal channel, not full walls or entire room shells. + +Recommended starting values: + +```swift +setSceneChannel( + .windowGeometry, + .lightPortal(.enabled( + intensity: 0.5, + range: 4.0, + useRealWorldTint: true, + maxActivePortals: 4, + activationDistance: 10.0 + )) +) +``` + +Increase `maxActivePortals` only if the visual benefit is clear on device. + +## Limitations + +Light portals are an approximation. They do not ray trace sunlight through openings, clip light to the portal shape, or compute physical bounce lighting. They emit proxy area lights from the selected window surfaces. + +Portal brightness follows accepted XR probe updates, not every rendered frame. If the real room lights change, use XR lighting diagnostics to confirm that `acceptedProbeUpdateCount`, `latestProbeTimestamp`, and `latestIntensityScale` changed before judging the visual result. + +The feature does not make windows transparent by itself. Use scene-channel render modes separately if a window or wall should be hidden, wireframed, or rendered as a passthrough ghost. + +Portal proxy lights do not create persistent ECS light entities, so they are not serialized as scene-authored lights. Configure them through scene channels at runtime. diff --git a/docs/API/UsingSceneChannels.md b/docs/API/UsingSceneChannels.md index 3dd6f3d4..76126a71 100644 --- a/docs/API/UsingSceneChannels.md +++ b/docs/API/UsingSceneChannels.md @@ -62,6 +62,14 @@ setSceneChannel(.ceilingGeometry, .renderMode(.wireframe)) New properties can be added to `SceneChannelProperty` in the future without introducing new top-level functions. +Scene channels can also mark selected geometry as light portals for spatial twin window lighting: + +```swift +setSceneChannel(.windowGeometry, .lightPortal(.enabled())) +``` + +See [Light Portals](UsingLightPortals.md) for the full workflow. + ## Render Modes The `.renderMode` property accepts a `SceneChannelRenderMode`: diff --git a/docs/API/UsingXRLighting.md b/docs/API/UsingXRLighting.md index dd7aeb1d..b3d332f0 100644 --- a/docs/API/UsingXRLighting.md +++ b/docs/API/UsingXRLighting.md @@ -101,6 +101,9 @@ Important fields: | `providerRunning` | Whether the ARKit provider is currently running. | | `latestProbeTimestamp` | Timestamp of the latest accepted probe update. | | `latestProbeTextureValid` | Whether the latest accepted probe contained a usable texture. | +| `latestCameraScaleReference` | Raw camera exposure reference reported with the latest accepted probe, when available. | +| `latestIntensityScale` | Engine-normalized brightness scale derived from the probe camera scale reference. This is applied before `realWorldLightingContribution`. | +| `latestTintColor` | Normalized RGB tint sampled from the latest accepted environment probe. Light portals use this for warm/cool real-world color. | | `prefilterInFlight` | Whether the engine is currently converting a probe into runtime IBL textures. | | `lastPrefilterDurationMs` | GPU command duration for the most recent prefilter pass. | | `realWorldLightingContribution` | Current real-world lighting contribution multiplier. | @@ -110,6 +113,8 @@ Important fields: Probe updates are not expected every frame. ARKit publishes updates opportunistically as the real-world estimate changes. The engine throttles accepted probe work to avoid unnecessary GPU prefiltering. +When testing room-light changes, watch `acceptedProbeUpdateCount`, `latestProbeTimestamp`, and `latestIntensityScale`. The visual result only changes after the engine accepts and prefilters a new probe update. + ## Passthrough XR lighting and passthrough are separate controls: @@ -120,3 +125,16 @@ xr.setXRLightingMode(.realWorldEstimate) ``` Mixed passthrough controls whether the real camera view is visible. XR lighting controls how virtual content is shaded. They can be used together or independently. + +## Light Portals + +For spatial twin scenes, selected window geometry can be configured as light portals. A portal emits a bounded proxy area light from the window surface, and can scale its intensity using the current XR lighting estimate: + +```swift +setSceneChannel( + .windowGeometry, + .lightPortal(.enabled(useRealWorldTint: true)) +) +``` + +See [Light Portals](UsingLightPortals.md) for setup details, diagnostics, performance notes, and limitations. From ff0ecebb8ecb7d30052bcc56e4edb9b2ef497502 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Tue, 23 Jun 2026 11:10:48 -0700 Subject: [PATCH 04/15] [Patch] Updated Engine API v2 --- .../UntoldEngine/Utils/InputSystemAPI.swift | 205 ++++++++++ .../Utils/LightingSystemAPI.swift | 113 ++++++ docs/API/UsingEngineSettings.md | 115 ++++++ docs/API/UsingInputSystem.md | 58 ++- docs/API/UsingLightingSystem.md | 106 ++++++ docs/API/UsingSpatialInput.md | 357 ++++++++++-------- 6 files changed, 802 insertions(+), 152 deletions(-) create mode 100644 Sources/UntoldEngine/Utils/InputSystemAPI.swift create mode 100644 Sources/UntoldEngine/Utils/LightingSystemAPI.swift diff --git a/Sources/UntoldEngine/Utils/InputSystemAPI.swift b/Sources/UntoldEngine/Utils/InputSystemAPI.swift new file mode 100644 index 00000000..a30707fc --- /dev/null +++ b/Sources/UntoldEngine/Utils/InputSystemAPI.swift @@ -0,0 +1,205 @@ +// +// InputSystemAPI.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import Foundation +import simd + +// MARK: - Input Config + +public enum XRInputProperty: Sendable { + case pickingBackend(ScenePickingBackendPreference) + case twoHandRotateAxisMode(XRSpatialTwoHandRotateAxisMode) + case sceneReady(Bool) +} + +public enum InputProperty: Sendable { + case xr(XRInputProperty) +} + +public func setInput(_ property: InputProperty) { + switch property { + case let .xr(xrProperty): + applyXRInputProperty(xrProperty) + } +} + +private func applyXRInputProperty(_ property: XRInputProperty) { + switch property { + case let .pickingBackend(preference): + InputSystem.shared.setXRSpatialPickingBackendPreference(preference) + case let .twoHandRotateAxisMode(mode): + InputSystem.shared.setXRTwoHandRotateAxisMode(mode) + case let .sceneReady(ready): + InputSystem.shared.setXRSceneReady(ready) + } +} + +// MARK: - Input Actions + +public func registerXREvents() { + InputSystem.shared.registerXREvents() +} + +public func unregisterXREvents() { + InputSystem.shared.unregisterXREvents() +} + +// MARK: - Input Queries + +public func getXRSpatialInputState() -> XRSpatialInputState { + InputSystem.shared.xrSpatialInputState +} + +public func isXRSceneReady() -> Bool { + InputSystem.shared.isXRSceneReady() +} + +// MARK: - Spatial Manipulation Config (visionOS) + +#if os(visionOS) + + public enum SpatialManipulationProperty: Sendable { + case inputEpsilon(Float) + case intentTranslationThreshold(Float) + case intentRotationThreshold(Float) + case intentDominanceRatio(Float) + case zoomScale(min: Float, max: Float) + case rotationDeltaLimit(perFrame: Float, twoHand: Float) + case twoHandRotationDeadzone(Float) + case rotationSmoothing(factor: Float, deadzone: Float) + case classificationFrames(Int) + } + + public func setSpatialManipulation(_ property: SpatialManipulationProperty) { + let system = SpatialManipulationSystem.shared + switch property { + case let .inputEpsilon(value): + system.inputEpsilon = max(value, 0) + case let .intentTranslationThreshold(value): + system.intentTranslationThresholdMeters = max(value, 0) + case let .intentRotationThreshold(value): + system.intentRotationThresholdRadians = max(value, 0) + case let .intentDominanceRatio(value): + system.intentDominanceRatio = max(value, 1) + case let .zoomScale(minScale, maxScale): + system.minZoomScale = min(minScale, maxScale) + system.maxZoomScale = max(minScale, maxScale) + case let .rotationDeltaLimit(perFrame, twoHand): + system.maxRotationDeltaPerFrameRadians = max(perFrame, 0) + system.maxTwoHandRotationDeltaPerFrameRadians = max(twoHand, 0) + case let .twoHandRotationDeadzone(value): + system.twoHandRotationDeadzoneRadians = max(value, 0) + case let .rotationSmoothing(factor, deadzone): + system.rotationDeltaSmoothingFactor = min(max(factor, 0), 1) + system.rotationDeltaDeadzoneRadians = max(deadzone, 0) + case let .classificationFrames(value): + system.manipulationClassificationFrames = max(value, 0) + } + } + + // MARK: - Spatial Manipulation Lifecycle + + public func processPinchTransformLifecycle(from state: XRSpatialInputState) { + SpatialManipulationSystem.shared.processPinchTransformLifecycle(from: state) + } + + public func applyPinchDragIfNeeded( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + sensitivity: Float = 1.0 + ) { + SpatialManipulationSystem.shared.applyPinchDragIfNeeded(from: state, entityId: entityId, sensitivity: sensitivity) + } + + public func processAnchoredPinchDragLifecycle( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + sensitivity: Float = 1.0 + ) { + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle(from: state, entityId: entityId, sensitivity: sensitivity) + } + + public func processAnchoredSceneDragLifecycle(from state: XRSpatialInputState, sensitivity: Float = 1.0) { + SpatialManipulationSystem.shared.processAnchoredSceneDragLifecycle(from: state, sensitivity: sensitivity) + } + + public func processAnchoredSceneManipulationLifecycle( + from state: XRSpatialInputState, + dragSensitivity: Float = 1.0, + rotateSensitivity: Float = 1.0 + ) { + SpatialManipulationSystem.shared.processAnchoredSceneManipulationLifecycle( + from: state, + dragSensitivity: dragSensitivity, + rotateSensitivity: rotateSensitivity + ) + } + + public func processAnchoredSceneRotateLifecycle(from state: XRSpatialInputState, sensitivity: Float = 1.0) { + SpatialManipulationSystem.shared.processAnchoredSceneRotateLifecycle(from: state, sensitivity: sensitivity) + } + + public func applyTwoHandZoomIfNeeded( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + sensitivity: Float = 1.0 + ) { + SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded(from: state, entityId: entityId, sensitivity: sensitivity) + } + + public func applyTwoHandRotateIfNeeded( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + sensitivity: Float = 1.0, + axisOverrideWorld: simd_float3? = nil + ) { + SpatialManipulationSystem.shared.applyTwoHandRotateIfNeeded( + from: state, + entityId: entityId, + sensitivity: sensitivity, + axisOverrideWorld: axisOverrideWorld + ) + } + + // MARK: - Spatial Manipulation Session Control + + public func resetSpatialManipulation() { + SpatialManipulationSystem.shared.reset() + } + + public func endSpatialManipulation() { + SpatialManipulationSystem.shared.endSpatialManipulation() + } + + public func beginAnchoredPinchDragIfNeeded(from state: XRSpatialInputState, entityId: EntityID? = nil) { + SpatialManipulationSystem.shared.beginAnchoredPinchDragIfNeeded(from: state, entityId: entityId) + } + + public func endAnchoredPinchDrag() { + SpatialManipulationSystem.shared.endAnchoredPinchDrag() + } + + public func beginAnchoredSceneDragIfNeeded(from state: XRSpatialInputState) { + SpatialManipulationSystem.shared.beginAnchoredSceneDragIfNeeded(from: state) + } + + public func endAnchoredSceneDrag() { + SpatialManipulationSystem.shared.endAnchoredSceneDrag() + } + + public func endAnchoredSceneManipulation() { + SpatialManipulationSystem.shared.endAnchoredSceneManipulation() + } + + public func endAnchoredSceneRotate() { + SpatialManipulationSystem.shared.endAnchoredSceneRotate() + } + +#endif diff --git a/Sources/UntoldEngine/Utils/LightingSystemAPI.swift b/Sources/UntoldEngine/Utils/LightingSystemAPI.swift new file mode 100644 index 00000000..37485f23 --- /dev/null +++ b/Sources/UntoldEngine/Utils/LightingSystemAPI.swift @@ -0,0 +1,113 @@ +// +// LightingSystemAPI.swift +// UntoldEngine +// +// Copyright (C) Untold Engine Studios +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import Foundation +import simd + +// MARK: - Light sub-domain enums + +public enum DirectionalLightSetting: Sendable { + case active +} + +public enum PointLightProperty: Sendable { + case radius(Float) + case falloff(Float) + case attenuation(simd_float3) +} + +public enum SpotLightProperty: Sendable { + case coneAngle(Float) + case falloff(Float) + case radius(Float) + case attenuation(simd_float3) +} + +public enum AreaLightProperty: Sendable { + case twoSided(Bool) +} + +// MARK: - Top-level light property enum + +public enum LightEntityProperty: Sendable { + case color(simd_float3) + case intensity(Float) + case directional(DirectionalLightSetting) + case point(PointLightProperty) + case spot(SpotLightProperty) + case area(AreaLightProperty) +} + +// MARK: - Facade + +public func setLight(entityId: EntityID, _ property: LightEntityProperty) { + switch property { + case let .color(value): + updateLightColor(entityId: entityId, color: value) + case let .intensity(value): + updateLightIntensity(entityId: entityId, intensity: value) + case let .directional(setting): + applyDirectionalLightSetting(entityId: entityId, setting) + case let .point(pointProperty): + applyPointLightProperty(entityId: entityId, pointProperty) + case let .spot(spotProperty): + applySpotLightProperty(entityId: entityId, spotProperty) + case let .area(areaProperty): + applyAreaLightProperty(entityId: entityId, areaProperty) + } +} + +// MARK: - Private applicators + +private func applyDirectionalLightSetting(entityId: EntityID, _ setting: DirectionalLightSetting) { + switch setting { + case .active: + guard hasComponent(entityId: entityId, componentType: DirectionalLightComponent.self) else { + Logger.logWarning(message: "[LightingSystem] Cannot set active directional light. Entity \(entityId) has no DirectionalLightComponent.") + return + } + LightingSystem.shared.activeDirectionalLight = entityId + } +} + +private func applyPointLightProperty(entityId: EntityID, _ property: PointLightProperty) { + switch property { + case let .radius(value): + updateLightRadius(entityId: entityId, radius: value) + case let .falloff(value): + updateLightFalloff(entityId: entityId, falloff: value) + case let .attenuation(value): + updateLightAttenuation(entityId: entityId, attenuation: value) + } +} + +private func applySpotLightProperty(entityId: EntityID, _ property: SpotLightProperty) { + switch property { + case let .coneAngle(value): + updateLightConeAngle(entityId: entityId, coneAngle: value) + case let .falloff(value): + updateLightFalloff(entityId: entityId, falloff: value) + case let .radius(value): + updateLightRadius(entityId: entityId, radius: value) + case let .attenuation(value): + updateLightAttenuation(entityId: entityId, attenuation: value) + } +} + +private func applyAreaLightProperty(entityId: EntityID, _ property: AreaLightProperty) { + switch property { + case let .twoSided(value): + guard let areaLightComponent = scene.get(component: AreaLightComponent.self, for: entityId) else { + handleError(.noAreaLightComponent) + return + } + areaLightComponent.twoSided = value + } +} diff --git a/docs/API/UsingEngineSettings.md b/docs/API/UsingEngineSettings.md index d1f62a50..b935f443 100644 --- a/docs/API/UsingEngineSettings.md +++ b/docs/API/UsingEngineSettings.md @@ -186,6 +186,118 @@ setCamera(.defaultFOV(70.0)) setCamera(.clipPlanes(near: 0.1, far: 1000.0)) ``` +## Input (XR) + +```swift +// Register / unregister XR spatial event handling +registerXREvents() +unregisterXREvents() + +// Config +setInput(.xr(.pickingBackend(.octreeGPUPreferred))) +setInput(.xr(.twoHandRotateAxisMode(.dynamicSnapped))) +setInput(.xr(.sceneReady(true))) + +// Query +let state = getXRSpatialInputState() +let ready = isXRSceneReady() +``` + +## Spatial Manipulation (visionOS) + +Use `setSpatialManipulation` for tuning thresholds and behaviour: + +```swift +setSpatialManipulation(.intentTranslationThreshold(0.01)) +setSpatialManipulation(.intentRotationThreshold(0.08)) +setSpatialManipulation(.intentDominanceRatio(1.15)) +setSpatialManipulation(.zoomScale(min: 0.05, max: 20.0)) +setSpatialManipulation(.rotationDeltaLimit(perFrame: 0.12, twoHand: 0.35)) +setSpatialManipulation(.twoHandRotationDeadzone(0.001)) +setSpatialManipulation(.rotationSmoothing(factor: 0.25, deadzone: 0.002)) +setSpatialManipulation(.classificationFrames(3)) +setSpatialManipulation(.inputEpsilon(0.0001)) +``` + +Per-frame lifecycle calls use free functions so callers do not need the shared instance: + +```swift +let state = getXRSpatialInputState() + +// Full pinch-drag + rotate arbitration for a single entity +processPinchTransformLifecycle(from: state) + +// Simpler per-delta drag (call each frame while pinch is active) +applyPinchDragIfNeeded(from: state, entityId: myEntity, sensitivity: 1.0) + +// Anchored drag / rotate for individual entities +processAnchoredPinchDragLifecycle(from: state, entityId: myEntity) + +// Anchored drag / rotate for the entire scene root +processAnchoredSceneDragLifecycle(from: state) +processAnchoredSceneRotateLifecycle(from: state) + +// Unified scene-root manipulation with drag/rotate arbitration +processAnchoredSceneManipulationLifecycle(from: state, dragSensitivity: 1.0, rotateSensitivity: 1.0) + +// Two-hand zoom and rotate for a single entity +applyTwoHandZoomIfNeeded(from: state, entityId: myEntity) +applyTwoHandRotateIfNeeded(from: state, entityId: myEntity) +``` + +Session control: + +```swift +resetSpatialManipulation() +endSpatialManipulation() +endAnchoredPinchDrag() +endAnchoredSceneDrag() +endAnchoredSceneManipulation() +endAnchoredSceneRotate() +``` + +## Lighting + +Use `setLight(entityId:, _:)` for all per-entity light configuration. Light-type-specific properties are grouped under sub-domains that follow the `setDomain(.group(.property(value)))` shape: + +```swift +// Shared across all light types +setLight(entityId: light, .color(simd_float3(1.0, 0.85, 0.7))) +setLight(entityId: light, .intensity(2.5)) + +// Directional light +setLight(entityId: light, .directional(.active)) + +// Point light +setLight(entityId: light, .point(.radius(5.0))) +setLight(entityId: light, .point(.falloff(0.7))) +setLight(entityId: light, .point(.attenuation(simd_float3(1, 0.5, 0.1)))) + +// Spot light +setLight(entityId: light, .spot(.coneAngle(30.0))) +setLight(entityId: light, .spot(.falloff(0.5))) +setLight(entityId: light, .spot(.radius(3.0))) +setLight(entityId: light, .spot(.attenuation(simd_float3(1, 0.5, 0.1)))) + +// Area light +setLight(entityId: light, .area(.twoSided(true))) +``` + +Light creation and query functions remain explicit: + +```swift +createDirLight(entityId: entity) +createPointLight(entityId: entity) +createSpotLight(entityId: entity) +createAreaLight(entityId: entity) + +getLightColor(entityId: entity) +getLightIntensity(entityId: entity) +getLightRadius(entityId: entity) +getLightFalloff(entityId: entity) +getLightConeAngle(entityId: entity) +``` + ## Style Rule For Contributors, when adding new public settings, prefer one of these forms: @@ -200,6 +312,9 @@ setBatching(.newProperty(value)) setSpatialDebug(.newProperty(value)) setLogger(.newProperty(value)) setCamera(.newProperty(value)) +setInput(.xr(.newProperty(value))) +setSpatialManipulation(.newProperty(value)) +setLight(entityId: entity, .lightType(.newProperty(value))) setSceneChannel(.contextGeometry, .renderMode(.wireframe)) ``` diff --git a/docs/API/UsingInputSystem.md b/docs/API/UsingInputSystem.md index eef2416e..2c2f0bd9 100644 --- a/docs/API/UsingInputSystem.md +++ b/docs/API/UsingInputSystem.md @@ -51,7 +51,7 @@ if inputSystem.keyState.dPressed == true { ###Step 2: Using Input to Control Entities -Here’s an example function that moves a car entity based on keyboard inputs: +Here's an example function that moves a car entity based on keyboard inputs: ```swift func moveCar(entityId: EntityID, dt: Float) { @@ -118,8 +118,62 @@ func handleInput() { --- +## XR Input Configuration (visionOS) + +When developing for visionOS, use the `setInput` facade and free functions to configure XR input without touching the shared singleton directly. + +### Registering XR events + +Before any spatial input is received, register the XR event pipeline in your init: + +```swift +func gameInit() { + registerXREvents() +} +``` + +Call `unregisterXREvents()` to stop receiving spatial events when leaving XR mode. + +### Configuring XR behaviour + +```swift +// Choose the spatial picking backend +setInput(.xr(.pickingBackend(.octreeGPUPreferred))) + +// Set how the two-hand rotate axis is derived +setInput(.xr(.twoHandRotateAxisMode(.dynamicSnapped))) + +// Signal that the XR scene is ready to receive input +setInput(.xr(.sceneReady(true))) +``` + +Available two-hand rotate axis modes: + +- `.cameraForward` — rotates around the camera-forward axis (screen-style twist) +- `.dynamic` — derives the axis from actual two-hand motion +- `.dynamicSnapped` — dynamic axis snapped to the dominant world axis (`x`, `y`, or `z`) + +### Reading XR input state + +```swift +func handleInput() { + let state = getXRSpatialInputState() + + if state.spatialTapActive, let entityId = state.pickedEntityId { + Logger.log(message: "Tapped entity: \(entityId)") + } +} +``` + +### Querying scene readiness + +```swift +let ready = isXRSceneReady() +``` + +--- + ## Tips and Best Practices - Debouncing: If you want to execute an action only once per key press, track the key's previous state to avoid repeated triggers. - Game Mode Check: Always ensure the game is in the appropriate mode (e.g., Game Mode) before processing inputs. - Smooth Movement: Use dt (delta time) to ensure frame-rate-independent movement. - diff --git a/docs/API/UsingLightingSystem.md b/docs/API/UsingLightingSystem.md index d936ab1b..9f17e91d 100644 --- a/docs/API/UsingLightingSystem.md +++ b/docs/API/UsingLightingSystem.md @@ -47,3 +47,109 @@ let panel = createEntity() createAreaLight(entityId: panel) ``` +--- + +## Configuring Light Properties + +Use `setLight(entityId:, _:)` to configure any light after creation. The call shape follows the standard engine pattern — shared properties sit at the top level, and type-specific properties are grouped under a sub-domain: + +```swift +setLight(entityId: light, .property(value)) // shared +setLight(entityId: light, .lightType(.property(value))) // type-specific +``` + +### Shared properties (all light types) + +Color and intensity apply to every light type: + +```swift +setLight(entityId: light, .color(simd_float3(1.0, 0.85, 0.7))) +setLight(entityId: light, .intensity(2.5)) +``` + +### Directional light + +The `.directional(.active)` case designates the entity as the scene's active directional light — the one the renderer uses for shadows and directional shading. Only one entity can be active at a time; calling this again on a different entity replaces the previous one. + +```swift +let sun = createEntity() +createDirLight(entityId: sun) +rotateTo(entityId: sun, angle: -45.0, axis: simd_float3(1, 0, 0)) + +setLight(entityId: sun, .color(simd_float3(1.0, 0.95, 0.8))) +setLight(entityId: sun, .intensity(1.2)) +setLight(entityId: sun, .directional(.active)) +``` + +### Point light + +Point lights have a `radius` (effective influence range) and a `falloff` (0 = linear, 1 = physically-based quadratic). You can also override the raw attenuation coefficients if you need exact control: + +```swift +let bulb = createEntity() +createPointLight(entityId: bulb) +translateTo(entityId: bulb, position: simd_float3(0, 2, 0)) + +setLight(entityId: bulb, .color(simd_float3(1, 0.6, 0.2))) +setLight(entityId: bulb, .intensity(3.0)) +setLight(entityId: bulb, .point(.radius(8.0))) +setLight(entityId: bulb, .point(.falloff(0.7))) +setLight(entityId: bulb, .point(.attenuation(simd_float3(1, 0.5, 0.1)))) +``` + +### Spot light + +Spot lights add a cone. `coneAngle` controls the outer cone in degrees; `falloff` softens the inner edge: + +```swift +let spot = createEntity() +createSpotLight(entityId: spot) + +setLight(entityId: spot, .color(simd_float3(1, 1, 0.9))) +setLight(entityId: spot, .intensity(4.0)) +setLight(entityId: spot, .spot(.coneAngle(25.0))) +setLight(entityId: spot, .spot(.falloff(0.6))) +setLight(entityId: spot, .spot(.radius(6.0))) +setLight(entityId: spot, .spot(.attenuation(simd_float3(1, 0.4, 0.08)))) +``` + +### Area light + +Area lights derive their bounds from the entity's scale and orientation. The one configurable flag is `twoSided`, which controls whether the light emits from both faces of the rectangle: + +```swift +let panel = createEntity() +createAreaLight(entityId: panel) + +setLight(entityId: panel, .color(simd_float3(0.9, 0.95, 1.0))) +setLight(entityId: panel, .intensity(5.0)) +setLight(entityId: panel, .area(.twoSided(true))) +``` + +--- + +## Querying Light Properties + +```swift +let color = getLightColor(entityId: light) +let intensity = getLightIntensity(entityId: light) +let radius = getLightRadius(entityId: light) +let falloff = getLightFalloff(entityId: light) +let coneAngle = getLightConeAngle(entityId: light) +``` + +--- + +## Light Direction Queries + +```swift +// World-space semantic emission/travel direction (away from the light) +let emission = getLightEmissionDirection(entityId: light) + +// Local +Z in world space (transform axis, not emission) +let forward = getLightTransformForwardAxis(entityId: light) + +// Direction from shaded point toward the light (BRDF input convention) +let shader = getDirectionalLightShaderDirection(entityId: light) +``` + diff --git a/docs/API/UsingSpatialInput.md b/docs/API/UsingSpatialInput.md index 390766be..d5325c66 100644 --- a/docs/API/UsingSpatialInput.md +++ b/docs/API/UsingSpatialInput.md @@ -1,4 +1,4 @@ -# Spatial Input (vision Pro) +# Spatial Input (Vision Pro) Spatial input in Untold Engine follows a simple pipeline: @@ -8,8 +8,7 @@ Spatial input in Untold Engine follows a simple pipeline: 4. XRSpatialGestureRecognizer processes snapshots each frame. 5. The engine publishes a single XRSpatialInputState your game reads in handleInput(). -That separation keeps the system flexible: the OS-facing code stays in UntoldEngineXR, while gesture classification stays in -the recognizer. +That separation keeps the system flexible: the OS-facing code stays in UntoldEngineXR, while gesture classification stays in the recognizer. ## What You Get in Game Code @@ -27,39 +26,67 @@ So your game logic can stay focused on behavior (select, move, rotate, scale), n ## Important Setup Step -You must enable XR event ingestion: +You must enable XR event ingestion in your init: -InputSystem.shared.registerXREvents() +```swift +func gameInit() { + registerXREvents() +} +``` If you skip this, the callback still receives OS events, but the engine ignores them. +## XR Input Configuration + +Configure XR input behaviour with `setInput` before the scene starts: + +```swift +// Spatial picking backend +setInput(.xr(.pickingBackend(.octreeGPUPreferred))) + +// Two-hand rotate axis derivation +setInput(.xr(.twoHandRotateAxisMode(.dynamicSnapped))) + +// Signal scene readiness +setInput(.xr(.sceneReady(true))) +``` + +Tune spatial manipulation thresholds with `setSpatialManipulation`: + +```swift +setSpatialManipulation(.intentTranslationThreshold(0.01)) +setSpatialManipulation(.intentRotationThreshold(0.08)) +setSpatialManipulation(.classificationFrames(3)) +setSpatialManipulation(.rotationSmoothing(factor: 0.25, deadzone: 0.002)) +setSpatialManipulation(.zoomScale(min: 0.05, max: 20.0)) +``` + ## Typical Frame Usage In your handleInput(): -- Poll InputSystem.shared.xrSpatialInputState. +- Poll `getXRSpatialInputState()` to get the current frame's input. - React to edge-triggered gestures like tap. - Apply continuous updates for drag/zoom/rotate while active. -For object manipulation, use SpatialManipulationSystem for robust pinch-driven transforms, then layer custom behavior on top -when needed. - +For object manipulation, use the spatial manipulation free functions for robust pinch-driven transforms, then layer custom behaviour on top when needed. + ## Quick Example This example shows how to drag and rotate a mesh using the engine: -``` swift +```swift func handleInput() { if gameMode == false { return } - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() if state.spatialTapActive, let entityId = state.pickedEntityId { Logger.log(message: "Tapped entity: \(entityId)") } // Handles drag-based translate + twist rotation on picked entity - SpatialManipulationSystem.shared.processPinchTransformLifecycle(from: state) + processPinchTransformLifecycle(from: state) } ``` @@ -82,38 +109,33 @@ This lifecycle model prevents stuck manipulation sessions. ### Manipulate Parent Instead Of Picked Child -If ray picking hits a child mesh and you want to manipulate the parent -actor: +If ray picking hits a child mesh and you want to manipulate the parent actor: -``` swift -var state = InputSystem.shared.xrSpatialInputState +```swift +var state = getXRSpatialInputState() if let picked = state.pickedEntityId, let parent = getEntityParent(entityId: picked) { state.pickedEntityId = parent } -SpatialManipulationSystem.shared.processPinchTransformLifecycle(from: state) +processPinchTransformLifecycle(from: state) ``` This is useful when: - A character has multiple meshes - A building has sub-meshes -- You want to move the root actor instead of individual geometry - pieces +- You want to move the root actor instead of individual geometry pieces ------------------------------------------------------------------------ ### Important Note -Do not early-return only because `pickedEntityId == nil` before calling -lifecycle processing. +Do not early-return only because `pickedEntityId == nil` before calling lifecycle processing. -End/cancel phases must still propagate to properly close manipulation -sessions.\ -Failing to do so can leave the engine in an inconsistent transform -state. +End/cancel phases must still propagate to properly close manipulation sessions. +Failing to do so can leave the engine in an inconsistent transform state. ------------------------------------------------------------------------ @@ -121,7 +143,7 @@ state. Use these APIs to control whether an entity can be selected by spatial tap/ray picking and what hit representation it uses. -``` swift +```swift setEntityPickParticipation(entityId: entityId, enabled: false) // visible, not pickable setEntityPickHitRepresentationMode(entityId: entityId, mode: .bounds) // pick using bounds setEntityPickHitRepresentationMode(entityId: entityId, mode: .mesh) // pick using mesh (default) @@ -136,12 +158,9 @@ Available APIs: Hit representation modes: -- `.none`\ - Never pickable. -- `.bounds`\ - Pick using bounds intersection. -- `.mesh`\ - Pick using mesh-capable path (default behavior). +- `.none` — Never pickable. +- `.bounds` — Pick using bounds intersection. +- `.mesh` — Pick using mesh-capable path (default behavior). Behavior rules: @@ -154,8 +173,7 @@ Behavior rules: ## Raw Gesture Examples -It is strongly recommended to use the Spatial Helper functions instead -of raw gesture access. +It is strongly recommended to use the spatial free functions instead of raw gesture access. Raw access is useful when: @@ -169,8 +187,8 @@ Raw access is useful when: Vision Pro air-tap gesture. -``` swift -let state = InputSystem.shared.xrSpatialInputState +```swift +let state = getXRSpatialInputState() if state.spatialTapActive, let entityId = state.pickedEntityId { // selectEntity(entityId) } @@ -188,14 +206,13 @@ Use this to: Single-hand pinch detected. -``` swift +```swift if InputSystem.shared.hasSpatialPinch() { // pinch is active } ``` -This does **not** imply dragging yet --- only that a pinch is currently -held. +This does **not** imply dragging yet — only that a pinch is currently held. ------------------------------------------------------------------------ @@ -203,7 +220,7 @@ held. World-space position of pinch. -``` swift +```swift if let pinchPosition = InputSystem.shared.getPinchPosition() { // use pinchPosition } @@ -221,8 +238,8 @@ Useful for: Drag delta while pinch is active. -``` swift -let state = InputSystem.shared.xrSpatialInputState +```swift +let state = getXRSpatialInputState() if state.spatialPinchActive { let dragDelta = InputSystem.shared.getPinchDragDelta() // app-defined translation/scaling response @@ -239,14 +256,13 @@ Common use cases: ## Anchored Pinch Drag Helper -For stable translation (no per-frame delta accumulation), use the -anchored lifecycle helper: +For stable translation (no per-frame delta accumulation), use the anchored lifecycle helper: -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() - SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( + processAnchoredPinchDragLifecycle( from: state, entityId: sceneRootEntity ) @@ -259,8 +275,7 @@ This helper: - Applies absolute displacement from gesture start - Cleans up session state on end/cancel -Use this when moving large roots (buildings/scenes) where incremental -delta jitter can become visible. +Use this when moving large roots (buildings/scenes) where incremental delta jitter can become visible. ------------------------------------------------------------------------ @@ -268,11 +283,11 @@ delta jitter can become visible. For translating the **entire scene root** (rather than a single entity), use the anchored scene drag lifecycle: -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() - SpatialManipulationSystem.shared.processAnchoredSceneDragLifecycle(from: state) + processAnchoredSceneDragLifecycle(from: state) } ``` @@ -284,14 +299,14 @@ This helper: You can adjust movement speed with the `sensitivity` parameter (defaults to `1.0`): -``` swift -SpatialManipulationSystem.shared.processAnchoredSceneDragLifecycle(from: state, sensitivity: 0.5) +```swift +processAnchoredSceneDragLifecycle(from: state, sensitivity: 0.5) ``` To manually end the drag (e.g. on a mode change), call: -``` swift -SpatialManipulationSystem.shared.endAnchoredSceneDrag() +```swift +endAnchoredSceneDrag() ``` Use this when panning an entire scene — for example, sliding a map, architectural model, or level layout in world space. @@ -302,11 +317,11 @@ Use this when panning an entire scene — for example, sliding a map, architectu For rotating the **entire scene root** around world up (`+Y`) while preserving static batching, use the anchored scene rotate lifecycle. This requires a **two-hand pinch + twist** gesture (`spatialRotateActive` with both hands pinching): -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() - SpatialManipulationSystem.shared.processAnchoredSceneRotateLifecycle(from: state) + processAnchoredSceneRotateLifecycle(from: state) } ``` @@ -319,14 +334,14 @@ This helper: You can adjust rotation speed with the `sensitivity` parameter (defaults to `1.0`): -``` swift -SpatialManipulationSystem.shared.processAnchoredSceneRotateLifecycle(from: state, sensitivity: 0.5) +```swift +processAnchoredSceneRotateLifecycle(from: state, sensitivity: 0.5) ``` To manually end rotation (e.g. on a mode change), call: -``` swift -SpatialManipulationSystem.shared.endAnchoredSceneRotate() +```swift +endAnchoredSceneRotate() ``` Use this when aligning or calibrating an already-loaded large scene in place without rebatching. @@ -337,11 +352,11 @@ Use this when aligning or calibrating an already-loaded large scene in place wit To avoid drag/rotate gesture fighting, use the unified scene-root manipulation lifecycle: -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() - SpatialManipulationSystem.shared.processAnchoredSceneManipulationLifecycle( + processAnchoredSceneManipulationLifecycle( from: state, dragSensitivity: 1.0, rotateSensitivity: 0.5 @@ -351,22 +366,22 @@ func handleInput() { Arbitration rules: -- When a pinch is first detected, classification is deferred for a few frames (`manipulationClassificationFrames`, default 3) so the second hand has time to arrive +- When a pinch is first detected, classification is deferred for a few frames so the second hand has time to arrive - Two-hand pinch + twist (`spatialRotateActive` + both hands pinching) routes to scene rotate - Otherwise, after the deferral window expires, pinch drag routes to scene drag - The non-winning session is ended automatically -- Once a mode is chosen, it stays latched (`drag` or `rotate`) until the gesture ends/release happens +- Once a mode is chosen, it stays latched (`drag` or `rotate`) until the gesture ends -You can tune the deferral window (set to 0 to commit immediately): +You can tune the deferral window: -``` swift -SpatialManipulationSystem.shared.manipulationClassificationFrames = 4 // ~44ms at 90 Hz +```swift +setSpatialManipulation(.classificationFrames(4)) // ~44ms at 90 Hz ``` To manually end the unified lifecycle (e.g. on a mode change), call: -``` swift -SpatialManipulationSystem.shared.endAnchoredSceneManipulation() +```swift +endAnchoredSceneManipulation() ``` Use this as the default scene-root helper when your app supports both panning and rotation. @@ -377,39 +392,39 @@ Use this as the default scene-root helper when your app supports both panning an All three scene-level gestures can live in the same input loop — they gate on different input conditions so they don't conflict: -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() // Single-hand pinch + drag → pan the scene - SpatialManipulationSystem.shared.processAnchoredSceneDragLifecycle(from: state) + processAnchoredSceneDragLifecycle(from: state) // Two-hand pinch + twist → rotate the scene (yaw) - SpatialManipulationSystem.shared.processAnchoredSceneRotateLifecycle(from: state) + processAnchoredSceneRotateLifecycle(from: state) // Two-hand pinch + spread/pinch → zoom an entity - SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded(from: state) + applyTwoHandZoomIfNeeded(from: state) } ``` For context-based entity vs. scene rotation — route two-hand twist to entity rotate when something is picked, and to scene rotate otherwise: -``` swift +```swift func handleInput() { - let state = InputSystem.shared.xrSpatialInputState + let state = getXRSpatialInputState() // Scene-level drag (always active) - SpatialManipulationSystem.shared.processAnchoredSceneDragLifecycle(from: state) + processAnchoredSceneDragLifecycle(from: state) if state.pickedEntityId != nil { // Entity is picked → two-hand twist rotates the entity - SpatialManipulationSystem.shared.applyTwoHandRotateIfNeeded(from: state) + applyTwoHandRotateIfNeeded(from: state) } else { // Nothing picked → two-hand twist rotates the scene - SpatialManipulationSystem.shared.processAnchoredSceneRotateLifecycle(from: state) + processAnchoredSceneRotateLifecycle(from: state) } - SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded(from: state) + applyTwoHandZoomIfNeeded(from: state) } ``` @@ -420,35 +435,23 @@ func handleInput() { Apply the built-in zoom response: ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() -SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded( - from: state, - sensitivity: 1.0 -) +applyTwoHandZoomIfNeeded(from: state, sensitivity: 1.0) ``` -By default, the helper scales the parent of the picked entity when available. -If you want to choose the exact target, pass `entityId`: +By default, the helper scales the parent of the picked entity when available. If you want to choose the exact target, pass `entityId`: ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if let picked = state.pickedEntityId { // Scale exactly what was hit - SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded( - from: state, - entityId: picked, - sensitivity: 1.0 - ) + applyTwoHandZoomIfNeeded(from: state, entityId: picked, sensitivity: 1.0) // Or scale its parent explicitly if let parent = getEntityParent(entityId: picked) { - SpatialManipulationSystem.shared.applyTwoHandZoomIfNeeded( - from: state, - entityId: parent, - sensitivity: 1.0 - ) + applyTwoHandZoomIfNeeded(from: state, entityId: parent, sensitivity: 1.0) } } ``` @@ -457,50 +460,38 @@ if let picked = state.pickedEntityId { ## Two-Hand Rotate -Use `setXRTwoHandRotateAxisMode` to control how the rotation axis is derived: +Configure how the rotation axis is derived: ```swift -InputSystem.shared.setXRTwoHandRotateAxisMode(.dynamicSnapped) +setInput(.xr(.twoHandRotateAxisMode(.dynamicSnapped))) ``` Available modes: -- `.cameraForward`: rotates around camera-forward axis (screen-style twist) -- `.dynamic`: derives axis from actual two-hand motion -- `.dynamicSnapped`: dynamic axis snapped to dominant world axis (`x`, `y`, or `z`) +- `.cameraForward` — rotates around camera-forward axis (screen-style twist) +- `.dynamic` — derives axis from actual two-hand motion +- `.dynamicSnapped` — dynamic axis snapped to dominant world axis (`x`, `y`, or `z`) Apply the built-in rotate response: ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() -SpatialManipulationSystem.shared.applyTwoHandRotateIfNeeded( - from: state, - sensitivity: 1.5 -) +applyTwoHandRotateIfNeeded(from: state, sensitivity: 1.5) ``` -By default, the helper rotates the parent of the picked entity when available. -If you want to choose the exact target, pass `entityId`: +By default, the helper rotates the parent of the picked entity when available. If you want to choose the exact target, pass `entityId`: ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if let picked = state.pickedEntityId { // Rotate exactly what was hit - SpatialManipulationSystem.shared.applyTwoHandRotateIfNeeded( - from: state, - entityId: picked, - sensitivity: 1.5 - ) + applyTwoHandRotateIfNeeded(from: state, entityId: picked, sensitivity: 1.5) // Or rotate its parent explicitly if let parent = getEntityParent(entityId: picked) { - SpatialManipulationSystem.shared.applyTwoHandRotateIfNeeded( - from: state, - entityId: parent, - sensitivity: 1.5 - ) + applyTwoHandRotateIfNeeded(from: state, entityId: parent, sensitivity: 1.5) } } ``` @@ -510,10 +501,8 @@ if let picked = state.pickedEntityId { To get the distance to an entity use the following: ```swift -// Get distance to hit-entity -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if state.spatialTapActive, let entityId = state.pickedEntityId { - // get distance let distance = state.pickedEntityDistance print("Object distance: \(distance) meters") } @@ -544,7 +533,7 @@ The `filter` parameter controls which planes are considered by **alignment** and When your app needs to respond to floor or table (whichever the user taps), use a **single call** with a multi-kind filter and inspect `surfaceKind` in the result. Because the function returns the closest qualifying hit, this correctly returns the table when pointing at the table and the floor when pointing at the floor. ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if state.spatialTapActive { let filter = RealSurfaceFilter(alignment: .horizontal, kinds: [.floor, .table]) @@ -571,7 +560,7 @@ if state.spatialTapActive { ### Other filter examples ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if state.spatialTapActive { // Floor only — always ignores tables, seats, and ceilings @@ -639,7 +628,7 @@ When ARKit does not classify a desk or table correctly, use the `hitYRange` para Floor is always near Y≈0. A standard desk or table is typically between 0.5m and 1.1m: ```swift -let state = InputSystem.shared.xrSpatialInputState +let state = getXRSpatialInputState() if state.spatialTapActive { // Floor — accept hits within ±20 cm of ground level @@ -681,39 +670,107 @@ ARKit can initially report a newly-detected horizontal plane as `.unknown` befor ------------------------------------------------------------------------ +## Get Virtual Plane Hit Position + +Virtual planes are purely mathematical — no ARKit scanning required. Use them when you want to cast a ray against a plane you define in code rather than one detected from the real environment. Common cases: snapping objects to the engine's ground level (`Y = 0`), placing content on a wall you defined, or constraining drag to an arbitrary surface. + +Two functions are available, both returning a `PlanePickHit` with `worldPosition` and `distance`: + +### Horizontal ground plane + +`pickGroundPosition` casts against a horizontal plane at a given Y height. `planeY` defaults to `0`. + +```swift +let state = getXRSpatialInputState() + +if state.spatialTapActive { + if let hit = pickGroundPosition( + rayOrigin: state.rayOriginWorld, + rayDirection: state.rayDirectionWorld, + planeY: 0.0 + ) { + Logger.log(message: "Virtual ground hit", vector: hit.worldPosition) + } +} +``` + +Use `planeY` to match a raised or sunken surface — for example `planeY: 0.75` for a table-height virtual plane. + +### Arbitrary virtual plane + +`pickPlanePosition` casts against any plane defined by a world-space point and normal. + +```swift +let state = getXRSpatialInputState() + +if state.spatialTapActive { + // Vertical plane facing +Z, passing through the origin + if let hit = pickPlanePosition( + rayOrigin: state.rayOriginWorld, + rayDirection: state.rayDirectionWorld, + planePoint: simd_float3(0, 0, 0), + planeNormal: simd_float3(0, 0, 1) + ) { + Logger.log(message: "Virtual wall hit", vector: hit.worldPosition) + } +} +``` + +`planePoint` can be any point that lies on the plane — the normal does not need to be pre-normalized. + +### Choosing between virtual and real + +| Goal | Function to use | +|---|---| +| Snap to engine ground (`Y = 0`) | `pickGroundPosition` | +| Snap to a raised virtual surface | `pickGroundPosition(planeY:)` | +| Cast against a wall or angled surface you defined | `pickPlanePosition` | +| Cast against an ARKit-detected physical surface | `pickRealSurfacePosition` | + +Both `pickGroundPosition` and `pickPlanePosition` automatically account for scene root transforms, so the math stays correct even when the scene has been translated or rotated. + +------------------------------------------------------------------------ + ## Spatial Helper Functions -Use these helpers from `SpatialManipulationSystem.shared`: +Use these free functions for spatial manipulation. They all delegate to `SpatialManipulationSystem` internally so you never need to reference the shared singleton directly. -- `processPinchTransformLifecycle(from:)`\ - Recommended default. Handles translation + twist rotation lifecycle - safely. +- `processPinchTransformLifecycle(from:)` + Recommended default. Handles translation + twist rotation lifecycle safely. -- `applyPinchDragIfNeeded(from:entityId:sensitivity:)`\ +- `applyPinchDragIfNeeded(from:entityId:sensitivity:)` Lower-level translation helper if you want full control. -- `processAnchoredSceneDragLifecycle(from:sensitivity:)`\ - Anchored drag for the entire scene root. Applies absolute - displacement via `translateSceneTo`. +- `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:)` + Anchored drag for a single entity. Applies absolute displacement from gesture start. -- `endAnchoredSceneDrag()`\ +- `processAnchoredSceneDragLifecycle(from:sensitivity:)` + Anchored drag for the entire scene root. Applies absolute displacement via `translateSceneTo`. + +- `endAnchoredSceneDrag()` Manually ends an in-progress anchored scene drag session. -- `processAnchoredSceneRotateLifecycle(from:sensitivity:)`\ +- `processAnchoredSceneRotateLifecycle(from:sensitivity:)` Anchored rotate for the entire scene root using two-hand pinch + twist. Applies absolute yaw via `rotateSceneToYaw`. -- `endAnchoredSceneRotate()`\ +- `endAnchoredSceneRotate()` Manually ends an in-progress anchored scene rotate session. -- `processAnchoredSceneManipulationLifecycle(from:dragSensitivity:rotateSensitivity:)`\ - Unified scene-root helper with drag/rotate arbitration to prevent - gesture-fighting. Uses a deferral window (`manipulationClassificationFrames`) before - committing to drag so the second hand has time to arrive for rotate. +- `processAnchoredSceneManipulationLifecycle(from:dragSensitivity:rotateSensitivity:)` + Unified scene-root helper with drag/rotate arbitration to prevent gesture-fighting. -- `endAnchoredSceneManipulation()`\ +- `endAnchoredSceneManipulation()` Ends any in-progress unified scene manipulation (drag, rotate, or pending classification). -- `applyTwoHandZoomIfNeeded(from:sensitivity:)`\ - Provides zoom delta signal. You must define what zoom means in your - app. +- `applyTwoHandZoomIfNeeded(from:entityId:sensitivity:)` + Scales the picked entity (or its parent) using the two-hand spread/pinch gesture. + +- `applyTwoHandRotateIfNeeded(from:entityId:sensitivity:axisOverrideWorld:)` + Rotates the picked entity (or its parent) using the two-hand twist gesture. + +- `endSpatialManipulation()` + Ends the current pinch-transform manipulation session. + +- `resetSpatialManipulation()` + Resets all manipulation session state (use when changing modes or reloading scenes). From c265ff639a747aaeb097241c324aa2874393198d Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Tue, 23 Jun 2026 12:10:49 -0700 Subject: [PATCH 05/15] [Patch] processAnchoredPinchDragLifecycle now supports dragPlane --- .../Systems/SpatialManipulationSystem.swift | 44 ++++++++++++++++--- .../UntoldEngine/Utils/InputSystemAPI.swift | 22 ++++++++-- docs/API/UsingEngineSettings.md | 2 +- docs/API/UsingSpatialInput.md | 9 ++-- 4 files changed, 64 insertions(+), 13 deletions(-) diff --git a/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift b/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift index 98767c10..3180c264 100644 --- a/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift +++ b/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift @@ -12,6 +12,13 @@ import Foundation import simd + public enum SpatialDragPlane: Sendable, Equatable { + case unconstrained + case xy + case xz + case yz + } + private struct SpatialTranslationSession { var entityId: EntityID var planePoint: simd_float3 @@ -53,6 +60,7 @@ var entityId: EntityID var initialInputDevicePositionWorld: simd_float3 var initialEntityWorldPosition: simd_float3 + var dragPlane: SpatialDragPlane } private struct AnchoredSceneDragSession { @@ -319,7 +327,12 @@ /// /// Call this each frame from your input loop. /// It captures the initial hand + entity world positions and applies absolute displacement. - public func processAnchoredPinchDragLifecycle(from state: XRSpatialInputState, entityId: EntityID? = nil, sensitivity: Float = 1.0) { + public func processAnchoredPinchDragLifecycle( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + sensitivity: Float = 1.0, + dragPlane: SpatialDragPlane = .unconstrained + ) { if state.currentPhase == .ended || state.currentPhase == .cancelled { endAnchoredPinchDrag() return @@ -333,7 +346,7 @@ } if anchoredPinchDragSession == nil { - beginAnchoredPinchDragIfNeeded(from: state, entityId: entityId) + beginAnchoredPinchDragIfNeeded(from: state, entityId: entityId, dragPlane: dragPlane) } guard state.spatialDragActive, @@ -354,7 +367,10 @@ else { return } let clampedSensitivity = max(sensitivity, 0) - let delta = (currentInputDevicePosition - session.initialInputDevicePositionWorld) * clampedSensitivity + let delta = projectedDragDelta( + (currentInputDevicePosition - session.initialInputDevicePositionWorld) * clampedSensitivity, + onto: session.dragPlane + ) guard delta.x.isFinite, delta.y.isFinite, delta.z.isFinite else { return } let targetWorldPosition = session.initialEntityWorldPosition + delta @@ -362,7 +378,11 @@ translateTo(entityId: session.entityId, position: targetLocalPosition) } - public func beginAnchoredPinchDragIfNeeded(from state: XRSpatialInputState, entityId: EntityID? = nil) { + public func beginAnchoredPinchDragIfNeeded( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + dragPlane: SpatialDragPlane = .unconstrained + ) { guard anchoredPinchDragSession == nil else { return } guard let target = resolveManipulationTarget(explicitEntityId: entityId, state: state), @@ -382,7 +402,8 @@ anchoredPinchDragSession = AnchoredPinchDragSession( entityId: target, initialInputDevicePositionWorld: initialInputDevicePosition, - initialEntityWorldPosition: getPosition(entityId: target) + initialEntityWorldPosition: getPosition(entityId: target), + dragPlane: dragPlane ) } @@ -390,6 +411,19 @@ anchoredPinchDragSession = nil } + private func projectedDragDelta(_ delta: simd_float3, onto dragPlane: SpatialDragPlane) -> simd_float3 { + switch dragPlane { + case .unconstrained: + return delta + case .xy: + return simd_float3(delta.x, delta.y, 0) + case .xz: + return simd_float3(delta.x, 0, delta.z) + case .yz: + return simd_float3(0, delta.y, delta.z) + } + } + // MARK: - Anchored Scene Drag /// Session-based anchored drag that translates the entire scene root. diff --git a/Sources/UntoldEngine/Utils/InputSystemAPI.swift b/Sources/UntoldEngine/Utils/InputSystemAPI.swift index a30707fc..e4ae9cb3 100644 --- a/Sources/UntoldEngine/Utils/InputSystemAPI.swift +++ b/Sources/UntoldEngine/Utils/InputSystemAPI.swift @@ -121,9 +121,15 @@ public func isXRSceneReady() -> Bool { public func processAnchoredPinchDragLifecycle( from state: XRSpatialInputState, entityId: EntityID? = nil, - sensitivity: Float = 1.0 + sensitivity: Float = 1.0, + dragPlane: SpatialDragPlane = .unconstrained ) { - SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle(from: state, entityId: entityId, sensitivity: sensitivity) + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( + from: state, + entityId: entityId, + sensitivity: sensitivity, + dragPlane: dragPlane + ) } public func processAnchoredSceneDragLifecycle(from state: XRSpatialInputState, sensitivity: Float = 1.0) { @@ -178,8 +184,16 @@ public func isXRSceneReady() -> Bool { SpatialManipulationSystem.shared.endSpatialManipulation() } - public func beginAnchoredPinchDragIfNeeded(from state: XRSpatialInputState, entityId: EntityID? = nil) { - SpatialManipulationSystem.shared.beginAnchoredPinchDragIfNeeded(from: state, entityId: entityId) + public func beginAnchoredPinchDragIfNeeded( + from state: XRSpatialInputState, + entityId: EntityID? = nil, + dragPlane: SpatialDragPlane = .unconstrained + ) { + SpatialManipulationSystem.shared.beginAnchoredPinchDragIfNeeded( + from: state, + entityId: entityId, + dragPlane: dragPlane + ) } public func endAnchoredPinchDrag() { diff --git a/docs/API/UsingEngineSettings.md b/docs/API/UsingEngineSettings.md index b935f443..ad6cc4b0 100644 --- a/docs/API/UsingEngineSettings.md +++ b/docs/API/UsingEngineSettings.md @@ -231,7 +231,7 @@ processPinchTransformLifecycle(from: state) applyPinchDragIfNeeded(from: state, entityId: myEntity, sensitivity: 1.0) // Anchored drag / rotate for individual entities -processAnchoredPinchDragLifecycle(from: state, entityId: myEntity) +processAnchoredPinchDragLifecycle(from: state, entityId: myEntity, dragPlane: .xz) // Anchored drag / rotate for the entire scene root processAnchoredSceneDragLifecycle(from: state) diff --git a/docs/API/UsingSpatialInput.md b/docs/API/UsingSpatialInput.md index d5325c66..b80eb3b1 100644 --- a/docs/API/UsingSpatialInput.md +++ b/docs/API/UsingSpatialInput.md @@ -264,7 +264,8 @@ func handleInput() { processAnchoredPinchDragLifecycle( from: state, - entityId: sceneRootEntity + entityId: sceneRootEntity, + dragPlane: .xz ) } ``` @@ -273,9 +274,11 @@ This helper: - Captures initial hand + entity world positions - Applies absolute displacement from gesture start +- Optionally constrains movement to `.xy`, `.xz`, or `.yz` - Cleans up session state on end/cancel Use this when moving large roots (buildings/scenes) where incremental delta jitter can become visible. +Use `.xz` for floor-plane dragging, `.xy` for wall-plane dragging, and `.unconstrained` for free 3D movement. ------------------------------------------------------------------------ @@ -741,8 +744,8 @@ Use these free functions for spatial manipulation. They all delegate to `Spatial - `applyPinchDragIfNeeded(from:entityId:sensitivity:)` Lower-level translation helper if you want full control. -- `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:)` - Anchored drag for a single entity. Applies absolute displacement from gesture start. +- `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:dragPlane:)` + Anchored drag for a single entity. Applies absolute displacement from gesture start, optionally constrained to a world-axis plane. - `processAnchoredSceneDragLifecycle(from:sensitivity:)` Anchored drag for the entire scene root. Applies absolute displacement via `translateSceneTo`. From ab46cf4fe9325911dcebdabb1521bea4610047a9 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Tue, 23 Jun 2026 12:18:23 -0700 Subject: [PATCH 06/15] [Patch] Implemented the recursive material opacicty fix --- Sources/UntoldEngine/Utils/FuncUtils.swift | 54 +++++++++++++++++++++- docs/API/UsingMaterials.md | 16 ++++++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/Sources/UntoldEngine/Utils/FuncUtils.swift b/Sources/UntoldEngine/Utils/FuncUtils.swift index a8e8c1fa..d6117f43 100644 --- a/Sources/UntoldEngine/Utils/FuncUtils.swift +++ b/Sources/UntoldEngine/Utils/FuncUtils.swift @@ -953,7 +953,26 @@ public func getMaterialEmmissive(entityId: EntityID, meshIndex: Int = 0, submesh getMaterial(entityId: entityId, meshIndex: meshIndex, submeshIndex: submeshIndex)?.emissiveValue ?? .zero } -public func updateMaterialEmmisive(entityId: EntityID, emmissive: simd_float3, meshIndex: Int = 0, submeshIndex: Int = 0) { +public func updateMaterialEmmisive( + entityId: EntityID, + emmissive: simd_float3, + recursive: Bool = false, + meshIndex: Int = 0, + submeshIndex: Int = 0 +) { + if recursive { + for targetEntityId in entityAndDescendantIds(entityId) { + updateMaterialEmmisive( + entityId: targetEntityId, + emmissive: emmissive, + recursive: false, + meshIndex: meshIndex, + submeshIndex: submeshIndex + ) + } + return + } + guard updateMaterial(entityId: entityId, meshIndex: meshIndex, submeshIndex: submeshIndex, mutate: { $0.emissiveValue = emmissive }) else { return } @@ -990,8 +1009,21 @@ public func getMaterialOpacity(entityId: EntityID, meshIndex: Int = 0, submeshIn public func updateMaterialOpacity( entityId: EntityID, opacity: Float, - applyToAllSubmeshes: Bool = true + applyToAllSubmeshes: Bool = true, + recursive: Bool = false ) { + if recursive { + for targetEntityId in entityAndDescendantIds(entityId) { + updateMaterialOpacity( + entityId: targetEntityId, + opacity: opacity, + applyToAllSubmeshes: applyToAllSubmeshes, + recursive: false + ) + } + return + } + let clampedOpacity = max(0.0, min(1.0, opacity)) guard let renderComponent = scene.get(component: RenderComponent.self, for: entityId) else { return @@ -1048,6 +1080,24 @@ public func updateMaterialOpacity( refreshStaticBatchingForMaterialChange(entityId: entityId) } +private func entityAndDescendantIds(_ entityId: EntityID) -> [EntityID] { + var entityIds: [EntityID] = [entityId] + var index = 0 + + while index < entityIds.count { + let currentEntityId = entityIds[index] + index += 1 + + guard let scenegraphComponent = scene.get(component: ScenegraphComponent.self, for: currentEntityId) else { + continue + } + + entityIds.append(contentsOf: scenegraphComponent.children) + } + + return entityIds +} + func makeFloat4Texture(data: [simd_float4], width: Int, height: Int) -> MTLTexture? diff --git a/docs/API/UsingMaterials.md b/docs/API/UsingMaterials.md index f34fe501..fe9064c3 100644 --- a/docs/API/UsingMaterials.md +++ b/docs/API/UsingMaterials.md @@ -85,6 +85,12 @@ let emissive = getMaterialEmmissive(entityId: entity) updateMaterialEmmisive(entityId: entity, emmissive: simd_float3(1.0, 0.5, 0.0)) ``` +To apply the same emissive value to an entity and all of its scenegraph descendants: + +```swift +updateMaterialEmmisive(entityId: rootEntity, emmissive: simd_float3(1.0, 0.5, 0.0), recursive: true) +``` + > **Spelling note:** The API currently uses `getMaterialEmmissive` / `updateMaterialEmmisive` (with double-m). Use these exact names when calling the functions. --- @@ -153,6 +159,12 @@ By default this applies to **every submesh** on the entity. To target a single s updateMaterialOpacity(entityId: entity, opacity: 0.5, applyToAllSubmeshes: false) ``` +To apply opacity to an entity and all of its scenegraph descendants: + +```swift +updateMaterialOpacity(entityId: rootEntity, opacity: 0.5, recursive: true) +``` + Or specify exact indices: ```swift @@ -170,11 +182,11 @@ updateMaterialOpacity(entityId: entity, opacity: 0.5, meshIndex: 0, submeshIndex - `getMaterialMetallic(entityId:meshIndex:submeshIndex:)` → `Float` - `updateMaterialMetallic(entityId:metallic:meshIndex:submeshIndex:)` - `getMaterialEmmissive(entityId:meshIndex:submeshIndex:)` → `simd_float3` -- `updateMaterialEmmisive(entityId:emmissive:meshIndex:submeshIndex:)` +- `updateMaterialEmmisive(entityId:emmissive:recursive:meshIndex:submeshIndex:)` - `getMaterialAlphaMode(entityId:meshIndex:submeshIndex:)` → `MaterialAlphaMode` - `updateMaterialAlphaMode(entityId:mode:meshIndex:submeshIndex:)` - `getMaterialAlphaCutoff(entityId:meshIndex:submeshIndex:)` → `Float` - `updateMaterialAlphaCutoff(entityId:cutoff:meshIndex:submeshIndex:)` - `getMaterialOpacity(entityId:meshIndex:submeshIndex:)` → `Float` -- `updateMaterialOpacity(entityId:opacity:applyToAllSubmeshes:)` +- `updateMaterialOpacity(entityId:opacity:applyToAllSubmeshes:recursive:)` - `updateMaterialOpacity(entityId:opacity:meshIndex:submeshIndex:)` From 90e6b071964ba647b00059a24908d26b1d5373ec Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 05:29:24 -0700 Subject: [PATCH 07/15] [Patch] Added support for drag-snapping --- .../Systems/SpatialManipulationSystem.swift | 10 ++- .../UntoldEngine/Utils/InputSystemAPI.swift | 6 +- .../SpatialManipulationSystemTests.swift | 81 +++++++++++++++++++ docs/API/UsingEngineSettings.md | 8 ++ docs/API/UsingSpatialInput.md | 23 +++++- 5 files changed, 123 insertions(+), 5 deletions(-) diff --git a/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift b/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift index 3180c264..0462ebe1 100644 --- a/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift +++ b/Sources/UntoldEngine/Systems/SpatialManipulationSystem.swift @@ -331,7 +331,8 @@ from state: XRSpatialInputState, entityId: EntityID? = nil, sensitivity: Float = 1.0, - dragPlane: SpatialDragPlane = .unconstrained + dragPlane: SpatialDragPlane = .unconstrained, + positionTransform: ((simd_float3) -> simd_float3)? = nil ) { if state.currentPhase == .ended || state.currentPhase == .cancelled { endAnchoredPinchDrag() @@ -373,7 +374,12 @@ ) guard delta.x.isFinite, delta.y.isFinite, delta.z.isFinite else { return } - let targetWorldPosition = session.initialEntityWorldPosition + delta + let rawTargetWorldPosition = session.initialEntityWorldPosition + delta + let targetWorldPosition = positionTransform?(rawTargetWorldPosition) ?? rawTargetWorldPosition + guard targetWorldPosition.x.isFinite, + targetWorldPosition.y.isFinite, + targetWorldPosition.z.isFinite + else { return } let targetLocalPosition = worldPositionToLocal(entityId: session.entityId, worldPosition: targetWorldPosition) translateTo(entityId: session.entityId, position: targetLocalPosition) } diff --git a/Sources/UntoldEngine/Utils/InputSystemAPI.swift b/Sources/UntoldEngine/Utils/InputSystemAPI.swift index e4ae9cb3..ea28c9d2 100644 --- a/Sources/UntoldEngine/Utils/InputSystemAPI.swift +++ b/Sources/UntoldEngine/Utils/InputSystemAPI.swift @@ -122,13 +122,15 @@ public func isXRSceneReady() -> Bool { from state: XRSpatialInputState, entityId: EntityID? = nil, sensitivity: Float = 1.0, - dragPlane: SpatialDragPlane = .unconstrained + dragPlane: SpatialDragPlane = .unconstrained, + positionTransform: ((simd_float3) -> simd_float3)? = nil ) { SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( from: state, entityId: entityId, sensitivity: sensitivity, - dragPlane: dragPlane + dragPlane: dragPlane, + positionTransform: positionTransform ) } diff --git a/Tests/UntoldEngineTests/SpatialManipulationSystemTests.swift b/Tests/UntoldEngineTests/SpatialManipulationSystemTests.swift index 24688691..2c1c4128 100644 --- a/Tests/UntoldEngineTests/SpatialManipulationSystemTests.swift +++ b/Tests/UntoldEngineTests/SpatialManipulationSystemTests.swift @@ -684,6 +684,72 @@ import XCTest XCTAssertEqual(rotatedForward.z, 0.0, accuracy: 0.0001) } + func test_processAnchoredPinchDragLifecycle_appliesPositionTransformContinuously() { + translateTo(entityId: standaloneEntity, position: .zero) + + let startState = makeAnchoredPinchDragState( + pickedEntityId: standaloneEntity, + inputDevicePositionWorld: .zero, + spatialDragActive: false + ) + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( + from: startState, + entityId: standaloneEntity, + dragPlane: .xz, + positionTransform: { position in + simd_float3(position.x.rounded(), position.y, position.z.rounded()) + } + ) + + let dragState = makeAnchoredPinchDragState( + pickedEntityId: standaloneEntity, + inputDevicePositionWorld: simd_float3(0.76, 0.25, 1.1), + spatialDragActive: true + ) + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( + from: dragState, + entityId: standaloneEntity, + dragPlane: .xz, + positionTransform: { position in + simd_float3(position.x.rounded(), position.y, position.z.rounded()) + } + ) + + let position = getPosition(entityId: standaloneEntity) + XCTAssertEqual(position.x, 1.0, accuracy: 0.0001) + XCTAssertEqual(position.y, 0.0, accuracy: 0.0001) + XCTAssertEqual(position.z, 1.0, accuracy: 0.0001) + } + + func test_processAnchoredPinchDragLifecycle_ignoresNonFinitePositionTransformOutput() { + translateTo(entityId: standaloneEntity, position: .zero) + + let startState = makeAnchoredPinchDragState( + pickedEntityId: standaloneEntity, + inputDevicePositionWorld: .zero, + spatialDragActive: false + ) + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle(from: startState, entityId: standaloneEntity) + + let dragState = makeAnchoredPinchDragState( + pickedEntityId: standaloneEntity, + inputDevicePositionWorld: simd_float3(1.0, 0.0, 1.0), + spatialDragActive: true + ) + SpatialManipulationSystem.shared.processAnchoredPinchDragLifecycle( + from: dragState, + entityId: standaloneEntity, + positionTransform: { _ in + simd_float3(.nan, 0.0, 0.0) + } + ) + + let position = getPosition(entityId: standaloneEntity) + XCTAssertEqual(position.x, 0.0, accuracy: 0.0001) + XCTAssertEqual(position.y, 0.0, accuracy: 0.0001) + XCTAssertEqual(position.z, 0.0, accuracy: 0.0001) + } + private func registerManipulationEntity(_ entityId: EntityID) { registerComponent(entityId: entityId, componentType: LocalTransformComponent.self) registerComponent(entityId: entityId, componentType: WorldTransformComponent.self) @@ -764,6 +830,21 @@ import XCTest return state } + private func makeAnchoredPinchDragState( + pickedEntityId: EntityID, + inputDevicePositionWorld: simd_float3, + spatialPinchActive: Bool = true, + spatialDragActive: Bool = true + ) -> XRSpatialInputState { + var state = XRSpatialInputState() + state.currentPhase = .changed + state.pickedEntityId = pickedEntityId + state.inputDevicePositionWorld = inputDevicePositionWorld + state.spatialPinchActive = spatialPinchActive + state.spatialDragActive = spatialDragActive + return state + } + private func assertMatrixApproximatelyEqual(_ lhs: simd_float3x3, _ rhs: simd_float3x3, accuracy: Float) { XCTAssertEqual(lhs.columns.0.x, rhs.columns.0.x, accuracy: accuracy) XCTAssertEqual(lhs.columns.0.y, rhs.columns.0.y, accuracy: accuracy) diff --git a/docs/API/UsingEngineSettings.md b/docs/API/UsingEngineSettings.md index ad6cc4b0..d2f31027 100644 --- a/docs/API/UsingEngineSettings.md +++ b/docs/API/UsingEngineSettings.md @@ -232,6 +232,14 @@ applyPinchDragIfNeeded(from: state, entityId: myEntity, sensitivity: 1.0) // Anchored drag / rotate for individual entities processAnchoredPinchDragLifecycle(from: state, entityId: myEntity, dragPlane: .xz) +processAnchoredPinchDragLifecycle( + from: state, + entityId: myEntity, + dragPlane: .xz, + positionTransform: { worldPosition in + simd_float3(worldPosition.x.rounded(), worldPosition.y, worldPosition.z.rounded()) + } +) // Anchored drag / rotate for the entire scene root processAnchoredSceneDragLifecycle(from: state) diff --git a/docs/API/UsingSpatialInput.md b/docs/API/UsingSpatialInput.md index b80eb3b1..54b2627d 100644 --- a/docs/API/UsingSpatialInput.md +++ b/docs/API/UsingSpatialInput.md @@ -275,11 +275,32 @@ This helper: - Captures initial hand + entity world positions - Applies absolute displacement from gesture start - Optionally constrains movement to `.xy`, `.xz`, or `.yz` +- Optionally transforms the final world position before it is written - Cleans up session state on end/cancel Use this when moving large roots (buildings/scenes) where incremental delta jitter can become visible. Use `.xz` for floor-plane dragging, `.xy` for wall-plane dragging, and `.unconstrained` for free 3D movement. +Use `positionTransform` for continuous snapping, clamping, or custom placement rules: + +```swift +processAnchoredPinchDragLifecycle( + from: state, + entityId: sceneRootEntity, + dragPlane: .xz, + positionTransform: { worldPosition in + let gridSize: Float = 0.25 + return simd_float3( + (worldPosition.x / gridSize).rounded() * gridSize, + worldPosition.y, + (worldPosition.z / gridSize).rounded() * gridSize + ) + } +) +``` + +The closure receives and returns **world-space** position after sensitivity and `dragPlane` have been applied. If it returns a non-finite value, the engine skips that frame's position write. + ------------------------------------------------------------------------ ## Anchored Scene Drag Helper @@ -744,7 +765,7 @@ Use these free functions for spatial manipulation. They all delegate to `Spatial - `applyPinchDragIfNeeded(from:entityId:sensitivity:)` Lower-level translation helper if you want full control. -- `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:dragPlane:)` +- `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:dragPlane:positionTransform:)` Anchored drag for a single entity. Applies absolute displacement from gesture start, optionally constrained to a world-axis plane. - `processAnchoredSceneDragLifecycle(from:sensitivity:)` From 3c43bbaade1601ead75d2b7f46729bb12df96386 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 05:56:19 -0700 Subject: [PATCH 08/15] [Bugfix] Removed duplicate .authoredPlusRealWorldEstimate variable --- Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift | 3 +-- Sources/UntoldEngine/Systems/LightingSystem.swift | 2 +- Sources/UntoldEngineXR/UntoldEngineXR.swift | 2 +- .../RuntimeEnvironmentLightingTests.swift | 2 +- docs/API/UsingXRLighting.md | 2 -- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift index 7f91f3d7..273f7d3a 100644 --- a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift +++ b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift @@ -16,7 +16,6 @@ public enum RuntimeEnvironmentLightingMode: Sendable, Equatable { case authoredOnly case staticIBL case realWorldEstimate - case authoredPlusRealWorldEstimate } public struct RuntimeEnvironmentLighting { @@ -217,7 +216,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { case .staticIBL: return staticLighting - case .realWorldEstimate, .authoredPlusRealWorldEstimate: + case .realWorldEstimate: guard let xrLighting, xrLighting.isValid, let irradianceMap = xrLighting.irradianceMap, diff --git a/Sources/UntoldEngine/Systems/LightingSystem.swift b/Sources/UntoldEngine/Systems/LightingSystem.swift index 897e8089..7f1dd292 100644 --- a/Sources/UntoldEngine/Systems/LightingSystem.swift +++ b/Sources/UntoldEngine/Systems/LightingSystem.swift @@ -1024,7 +1024,7 @@ private func lightPortalEnvironmentIntensityScale() -> ( ) { let realWorldLightingContribution = RuntimeEnvironmentLightingStore.shared.realWorldLightingContribution switch RuntimeEnvironmentLightingStore.shared.mode { - case .realWorldEstimate, .authoredPlusRealWorldEstimate: + case .realWorldEstimate: guard let xrLighting = RuntimeEnvironmentLightingStore.shared.latestXRLighting(), xrLighting.isValid else { diff --git a/Sources/UntoldEngineXR/UntoldEngineXR.swift b/Sources/UntoldEngineXR/UntoldEngineXR.swift index 51b1c91d..778f0448 100644 --- a/Sources/UntoldEngineXR/UntoldEngineXR.swift +++ b/Sources/UntoldEngineXR/UntoldEngineXR.swift @@ -841,7 +841,7 @@ private func applyXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { switch mode { - case .realWorldEstimate, .authoredPlusRealWorldEstimate: + case .realWorldEstimate: xrEnvironmentLightingSystem.setEnabled(true) case .authoredOnly, .staticIBL: xrEnvironmentLightingSystem.setEnabled(false) diff --git a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift index b7f2558b..07a8ff8f 100644 --- a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift +++ b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift @@ -69,7 +69,7 @@ final class RuntimeEnvironmentLightingTests: XCTestCase { } func testInvalidXRLightingFallsBackToStaticIBL() { - RuntimeEnvironmentLightingStore.shared.mode = .authoredPlusRealWorldEstimate + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate RuntimeEnvironmentLightingStore.shared.publishXRLighting( RuntimeEnvironmentLighting( irradianceMap: nil, diff --git a/docs/API/UsingXRLighting.md b/docs/API/UsingXRLighting.md index b3d332f0..dcb91917 100644 --- a/docs/API/UsingXRLighting.md +++ b/docs/API/UsingXRLighting.md @@ -41,7 +41,6 @@ Set the lighting mode during XR startup. Change the contribution factor whenever xr.setXRLightingMode(.authoredOnly) xr.setXRLightingMode(.staticIBL) xr.setXRLightingMode(.realWorldEstimate) -xr.setXRLightingMode(.authoredPlusRealWorldEstimate) ``` | Mode | Effect | @@ -49,7 +48,6 @@ xr.setXRLightingMode(.authoredPlusRealWorldEstimate) | `.authoredOnly` | Disables IBL contribution and uses authored lights only. | | `.staticIBL` | Uses the engine's loaded/static HDR IBL path. | | `.realWorldEstimate` | Uses Vision Pro environment light probes when available. | -| `.authoredPlusRealWorldEstimate` | Uses authored lights plus Vision Pro environment light probes. | If real-world lighting is enabled but no valid probe is available yet, the renderer falls back to the static IBL path. From 177f8e621a03c0be7cb0434994c154cf8d274ac4 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 06:30:28 -0700 Subject: [PATCH 09/15] [Patch] Route XR lighting through rendering settings --- .../Renderer/RuntimeEnvironmentLighting.swift | 45 +++++++++++++++-- Sources/UntoldEngineXR/UntoldEngineXR.swift | 27 +++++++++-- .../RuntimeEnvironmentLightingTests.swift | 48 +++++++++++++++++++ docs/API/UsingLightPortals.md | 17 ++----- docs/API/UsingLightingSystem.md | 16 ++++++- docs/API/UsingXRLighting.md | 38 ++++++--------- 6 files changed, 147 insertions(+), 44 deletions(-) diff --git a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift index 273f7d3a..3b0715c8 100644 --- a/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift +++ b/Sources/UntoldEngine/Renderer/RuntimeEnvironmentLighting.swift @@ -122,6 +122,7 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { private var modeValue: RuntimeEnvironmentLightingMode = .staticIBL private var realWorldLightingContributionValue: Float = 1.0 private var xrLightingValue: RuntimeEnvironmentLighting? + private var modeObservers: [UUID: @Sendable (RuntimeEnvironmentLightingMode) -> Void] = [:] private init() {} @@ -133,13 +134,42 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { return value } set { - lock.lock() - modeValue = newValue - lock.unlock() - resetLightPortalAreaLightCache() + setMode(newValue) + } + } + + public func setMode(_ mode: RuntimeEnvironmentLightingMode, notifyIfUnchanged: Bool = false) { + lock.lock() + let oldMode = modeValue + modeValue = mode + let shouldNotify = notifyIfUnchanged || oldMode != mode + let observers = shouldNotify ? Array(modeObservers.values) : [] + lock.unlock() + + resetLightPortalAreaLightCache() + + for observer in observers { + observer(mode) } } + @discardableResult + public func observeLightingModeChanges( + _ observer: @escaping @Sendable (RuntimeEnvironmentLightingMode) -> Void + ) -> UUID { + let id = UUID() + lock.lock() + modeObservers[id] = observer + lock.unlock() + return id + } + + public func removeLightingModeChangeObserver(_ id: UUID) { + lock.lock() + modeObservers.removeValue(forKey: id) + lock.unlock() + } + public var realWorldLightingContribution: Float { get { lock.lock() @@ -171,11 +201,18 @@ public final class RuntimeEnvironmentLightingStore: @unchecked Sendable { public func reset() { lock.lock() + let oldMode = modeValue modeValue = .staticIBL realWorldLightingContributionValue = 1.0 xrLightingValue = nil + let observers = oldMode == .staticIBL ? [] : Array(modeObservers.values) lock.unlock() + resetLightPortalAreaLightCache() + + for observer in observers { + observer(.staticIBL) + } } public func resolve( diff --git a/Sources/UntoldEngineXR/UntoldEngineXR.swift b/Sources/UntoldEngineXR/UntoldEngineXR.swift index 778f0448..f435ae2f 100644 --- a/Sources/UntoldEngineXR/UntoldEngineXR.swift +++ b/Sources/UntoldEngineXR/UntoldEngineXR.swift @@ -24,7 +24,7 @@ case full } - public final class UntoldEngineXR { + public final class UntoldEngineXR: @unchecked Sendable { private var renderer: UntoldRenderer? private var _isRunning = false private let lock = NSLock() @@ -48,6 +48,7 @@ private let passDescriptorRight = MTLRenderPassDescriptor() private let spatialGestureRecognizer = XRSpatialGestureRecognizer() private let xrEnvironmentLightingSystem = XREnvironmentLightingSystem() + private var runtimeLightingModeObserverId: UUID? /// Task handle for the plane-update monitor so we can cancel it on shutdown. private var planeMonitorTask: Task? @@ -70,9 +71,16 @@ initUntoldXR(device: device, commandQueue: commandQueue, layerRenderer: layerRenderer) } + deinit { + if let runtimeLightingModeObserverId { + RuntimeEnvironmentLightingStore.shared.removeLightingModeChangeObserver(runtimeLightingModeObserverId) + } + } + @MainActor public func initUntoldXR(device: MTLDevice, commandQueue: MTLCommandQueue, layerRenderer: LayerRenderer) { configureSpatialEventBridge() + registerRuntimeLightingModeObserverIfNeeded() applyXRLightingMode(RuntimeEnvironmentLightingStore.shared.mode) startARKitProviders(reason: "startup") @@ -830,9 +838,7 @@ } public func setXRLightingMode(_ mode: RuntimeEnvironmentLightingMode) { - RuntimeEnvironmentLightingStore.shared.mode = mode - applyXRLightingMode(mode) - startARKitProviders(reason: "setXRLightingMode(\(mode))") + RuntimeEnvironmentLightingStore.shared.setMode(mode, notifyIfUnchanged: true) } public func setXRLightingContribution(_ factor: Float) { @@ -848,6 +854,19 @@ } } + private func registerRuntimeLightingModeObserverIfNeeded() { + guard runtimeLightingModeObserverId == nil else { return } + + runtimeLightingModeObserverId = RuntimeEnvironmentLightingStore.shared.observeLightingModeChanges { [weak self] mode in + self?.handleRuntimeLightingModeChanged(mode) + } + } + + private func handleRuntimeLightingModeChanged(_ mode: RuntimeEnvironmentLightingMode) { + applyXRLightingMode(mode) + startARKitProviders(reason: "RuntimeEnvironmentLightingStore.mode=\(mode)") + } + public func xrEnvironmentLightingDiagnostics() -> XREnvironmentLightingDiagnostics { xrEnvironmentLightingSystem.diagnostics() } diff --git a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift index 07a8ff8f..5990efcd 100644 --- a/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift +++ b/Tests/UntoldEngineRenderTests/RuntimeEnvironmentLightingTests.swift @@ -100,6 +100,36 @@ final class RuntimeEnvironmentLightingTests: XCTestCase { XCTAssertEqual(RuntimeEnvironmentLightingStore.shared.mode, .realWorldEstimate) } + func testRenderingEnvironmentLightingModeNotifiesObservers() { + let recorder = LightingModeRecorder() + let observerId = RuntimeEnvironmentLightingStore.shared.observeLightingModeChanges { mode in + recorder.append(mode) + } + defer { + RuntimeEnvironmentLightingStore.shared.removeLightingModeChangeObserver(observerId) + } + + setRendering(.environment(.lightingMode(.realWorldEstimate))) + + XCTAssertEqual(recorder.values, [.realWorldEstimate]) + } + + func testLightingModeCanNotifyObserversWhenSetToSameValueForLifecycleRefresh() { + RuntimeEnvironmentLightingStore.shared.mode = .realWorldEstimate + + let recorder = LightingModeRecorder() + let observerId = RuntimeEnvironmentLightingStore.shared.observeLightingModeChanges { mode in + recorder.append(mode) + } + defer { + RuntimeEnvironmentLightingStore.shared.removeLightingModeChangeObserver(observerId) + } + + RuntimeEnvironmentLightingStore.shared.setMode(.realWorldEstimate, notifyIfUnchanged: true) + + XCTAssertEqual(recorder.values, [.realWorldEstimate]) + } + func testRenderingEnvironmentSettingUpdatesRealWorldLightingContribution() { setRendering(.environment(.realWorldLightingContribution(0.35))) @@ -223,3 +253,21 @@ final class RuntimeEnvironmentLightingTests: XCTestCase { return texture } } + +private final class LightingModeRecorder: @unchecked Sendable { + private let lock = NSLock() + private var storedValues: [RuntimeEnvironmentLightingMode] = [] + + var values: [RuntimeEnvironmentLightingMode] { + lock.lock() + let values = storedValues + lock.unlock() + return values + } + + func append(_ mode: RuntimeEnvironmentLightingMode) { + lock.lock() + storedValues.append(mode) + lock.unlock() + } +} diff --git a/docs/API/UsingLightPortals.md b/docs/API/UsingLightPortals.md index efe6f3cd..fd19cc04 100644 --- a/docs/API/UsingLightPortals.md +++ b/docs/API/UsingLightPortals.md @@ -59,16 +59,7 @@ setSceneChannel(.windowGeometry, .lightPortal(.disabled)) If an entity belongs to multiple portal-enabled channels, the engine combines the channel settings using the most permissive intensity, range, and activation distance. `useRealWorldTint` is enabled if any channel requests it. Active portal limits are enforced per portal-enabled channel. -## XR Lighting - -For Vision Pro real-world lighting, enable XR lighting during app startup: - -```swift -xr.setXRLightingMode(.realWorldEstimate) -xr.setXRLightingContribution(1.0) -``` - -Light portals are independent of passthrough visibility. You can use them with mixed passthrough, without passthrough, or with normal authored virtual rendering. +## Real-World Tint `useRealWorldTint: true` applies the XR probe's normalized intensity scale and the engine's real-world lighting contribution multiplier: @@ -76,7 +67,9 @@ Light portals are independent of passthrough visibility. You can use them with m portal intensity = portal intensity * xr intensity scale * real-world contribution ``` -If no valid XR probe is available while XR real-world lighting is enabled, real-world-tinted portals emit no light. When XR lighting is valid, changing `xr.setXRLightingContribution(...)` or `setRendering(.environment(.realWorldLightingContribution(...)))` affects portal strength immediately. +If no valid XR probe is available while XR real-world lighting is enabled, real-world-tinted portals emit no light. When XR lighting is valid, changing `setRendering(.environment(.realWorldLightingContribution(...)))` affects portal strength immediately. + +Light portals do not enable XR lighting by themselves. Configure XR real-world probe lighting separately with `setRendering(.environment(.lightingMode(.realWorldEstimate)))`. See [XR Lighting](UsingXRLighting.md) for probe setup, provider lifecycle, diagnostics, and passthrough behavior. ## Diagnostics @@ -117,7 +110,7 @@ Important fields: | `environmentIntensityScale` | Final XR/environment multiplier used for real-world-tinted portal proxy lights. | | `xrIntensityScale` | XR probe intensity scale before the user contribution multiplier. | | `environmentTintColor` | RGB tint applied to real-world-tinted portal proxy lights. | -| `realWorldLightingContribution` | User contribution multiplier from `xr.setXRLightingContribution(...)` or the rendering settings API. | +| `realWorldLightingContribution` | User contribution multiplier from the rendering settings API. | | `maxEffectivePortalIntensity` | Brightest portal intensity emitted into the area-light buffer for the latest frame. | ## Performance diff --git a/docs/API/UsingLightingSystem.md b/docs/API/UsingLightingSystem.md index 9f17e91d..22403ebb 100644 --- a/docs/API/UsingLightingSystem.md +++ b/docs/API/UsingLightingSystem.md @@ -11,6 +11,21 @@ Directional shader uniforms use the opposite vector because the BRDF expects the Area-light shader uniforms keep a separate `forward` value for the LTC rectangle polygon/front normal used to choose winding. Use `getLightEmissionDirection(entityId:)` for editor handles and authored light travel direction; do not treat `AreaLight.forward` as the semantic travel vector. +## Runtime Environment Lighting + +Use rendering environment settings to choose how indirect/environment lighting is resolved: + +```swift +setRendering(.environment(.lightingMode(.authoredOnly))) +setRendering(.environment(.lightingMode(.staticIBL))) +setRendering(.environment(.lightingMode(.realWorldEstimate))) +setRendering(.environment(.realWorldLightingContribution(0.75))) +``` + +`realWorldEstimate` uses Vision Pro environment light probes when an `UntoldEngineXR` instance is active. The XR layer observes the runtime lighting mode, starts or stops the ARKit environment-light provider as needed, and feeds prefiltered probe textures into the normal PBR lighting path. + +See [XR Lighting](UsingXRLighting.md) for Vision Pro probe setup and diagnostics. See [Light Portals](UsingLightPortals.md) for proxy area lights emitted from selected window/opening geometry. + ## Creating Each Light Type ### Directional Light @@ -152,4 +167,3 @@ let forward = getLightTransformForwardAxis(entityId: light) // Direction from shaded point toward the light (BRDF input convention) let shader = getDirectionalLightShaderDirection(entityId: light) ``` - diff --git a/docs/API/UsingXRLighting.md b/docs/API/UsingXRLighting.md index dcb91917..594378ca 100644 --- a/docs/API/UsingXRLighting.md +++ b/docs/API/UsingXRLighting.md @@ -6,41 +6,33 @@ This is independent of passthrough visibility. A scene can use real-world lighti ## Startup Setup -Enable XR lighting when the `UntoldEngineXR` instance is created, before starting the XR render loop: +Enable XR lighting through the normal rendering settings API. This can be done during scene setup, such as from `GameScene`, after the `UntoldEngineXR` instance exists: ```swift -if let xr = UntoldEngineXR(layerRenderer: layerRenderer) { - XRHolder.shared.xr = xr - - xr.setImmersionMode(xrImmersionMode: .mixed) - xr.setXRLightingMode(.realWorldEstimate) - xr.setXRLightingContribution(1.0) - - xr.start() - xr.runLoop() -} +setRendering(.environment(.lightingMode(.realWorldEstimate))) +setRendering(.environment(.realWorldLightingContribution(1.0))) ``` -`setXRLightingMode(_:)` owns the Vision Pro provider lifecycle. It enables or disables ARKit environment light estimation and restarts the ARKit provider set when needed. +When an `UntoldEngineXR` instance is active, changing the rendering lighting mode owns the Vision Pro provider lifecycle. The XR layer observes the runtime lighting mode, enables or disables ARKit environment light estimation, and restarts the ARKit provider set when needed. Practical rule: ```swift -// Startup/session setup -xr.setXRLightingMode(.realWorldEstimate) +// Scene or renderer setup +setRendering(.environment(.lightingMode(.realWorldEstimate))) // Runtime tuning -xr.setXRLightingContribution(0.75) +setRendering(.environment(.realWorldLightingContribution(0.75))) ``` -Set the lighting mode during XR startup. Change the contribution factor whenever the app needs to tune the strength of real-world lighting. +Change the contribution factor whenever the app needs to tune the strength of real-world lighting. ## Lighting Modes ```swift -xr.setXRLightingMode(.authoredOnly) -xr.setXRLightingMode(.staticIBL) -xr.setXRLightingMode(.realWorldEstimate) +setRendering(.environment(.lightingMode(.authoredOnly))) +setRendering(.environment(.lightingMode(.staticIBL))) +setRendering(.environment(.lightingMode(.realWorldEstimate))) ``` | Mode | Effect | @@ -56,7 +48,7 @@ If real-world lighting is enabled but no valid probe is available yet, the rende Use the contribution factor to tune how strongly the Vision Pro lighting probe affects the scene: ```swift -xr.setXRLightingContribution(0.75) +setRendering(.environment(.realWorldLightingContribution(0.75))) ``` The value is a non-negative multiplier: @@ -78,9 +70,9 @@ The same multiplier can be set through the rendering settings API: setRendering(.environment(.realWorldLightingContribution(0.75))) ``` -This only changes the contribution factor. Use `xr.setXRLightingMode(_:)` to enable or disable the Vision Pro provider. +This only changes the contribution factor. Use `setRendering(.environment(.lightingMode(...)))` to enable or disable the Vision Pro provider through the runtime lighting mode. -Unlike `setXRLightingMode(_:)`, the contribution factor can be changed at runtime. It does not start, stop, or restart ARKit providers. +Unlike the lighting mode, the contribution factor can be changed at runtime without starting, stopping, or restarting ARKit providers. ## Diagnostics @@ -119,7 +111,7 @@ XR lighting and passthrough are separate controls: ```swift xr.setImmersionMode(xrImmersionMode: .mixed) -xr.setXRLightingMode(.realWorldEstimate) +setRendering(.environment(.lightingMode(.realWorldEstimate))) ``` Mixed passthrough controls whether the real camera view is visible. XR lighting controls how virtual content is shaded. They can be used together or independently. From c4db39368e6bc37b964b32809805d5f656fc2ad2 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 06:53:39 -0700 Subject: [PATCH 10/15] [Patch] Serialize XR ARKit provider runs --- Sources/UntoldEngineXR/UntoldEngineXR.swift | 167 +++++++++++++++----- 1 file changed, 129 insertions(+), 38 deletions(-) diff --git a/Sources/UntoldEngineXR/UntoldEngineXR.swift b/Sources/UntoldEngineXR/UntoldEngineXR.swift index f435ae2f..5a4e1839 100644 --- a/Sources/UntoldEngineXR/UntoldEngineXR.swift +++ b/Sources/UntoldEngineXR/UntoldEngineXR.swift @@ -40,6 +40,11 @@ private var lastAnchorDiagnosticsLogTime: CFTimeInterval = 0 private let anchorDiagnosticsLogIntervalSeconds: CFTimeInterval = 1.0 private var arKitProviderRunAttemptCount: Int = 0 + private let arKitProviderRunLock = NSLock() + private var arKitProviderRunInProgress = false + private var pendingARKitProviderRunReason: String? + private var lastARKitProviderRunFailureTime: CFTimeInterval = -.infinity + private let arKitProviderFailureCooldownSeconds: CFTimeInterval = 2.0 private var lastXRStallDiagnosticsLogTime: CFTimeInterval = 0 private let xrStallDiagnosticsLogIntervalSeconds: CFTimeInterval = 1.0 @@ -240,55 +245,141 @@ private func startARKitProviders(reason: String = "unspecified") { #if canImport(ARKit) + scheduleARKitProviderRun(reason: reason) + #endif + } + + private func scheduleARKitProviderRun(reason: String) { + #if canImport(ARKit) + let now = CACurrentMediaTime() + let delaySeconds: CFTimeInterval + + arKitProviderRunLock.lock() + if arKitProviderRunInProgress { + pendingARKitProviderRunReason = reason + arKitProviderRunLock.unlock() + print("XR ARKit providers run coalesced: reason=\(reason)") + return + } + + let timeSinceFailure = now - lastARKitProviderRunFailureTime + delaySeconds = max(arKitProviderFailureCooldownSeconds - timeSinceFailure, 0.0) + arKitProviderRunInProgress = true + arKitProviderRunLock.unlock() + + launchARKitProviderRunTask(reason: reason, delaySeconds: delaySeconds) + #endif + } + + private func launchARKitProviderRunTask(reason: String, delaySeconds: CFTimeInterval) { + #if canImport(ARKit) + Task { [weak self] in + guard let self else { return } + + if delaySeconds > 0.0 { + let delayText = String(format: "%.2f", delaySeconds * 1000.0) + print("XR ARKit providers run delayed by failure cooldown: delayMs=\(delayText), reason=\(reason)") + try? await Task.sleep(nanoseconds: UInt64(delaySeconds * 1_000_000_000.0)) + if Task.isCancelled { + finishARKitProviderRun(succeeded: false) + return + } + } + + let effectiveReason = consumePendingARKitProviderRunReason(defaultReason: reason) + let succeeded = await runARKitProvidersOnce(reason: effectiveReason) + finishARKitProviderRun(succeeded: succeeded) + } + #endif + } + + private func consumePendingARKitProviderRunReason(defaultReason: String) -> String { + arKitProviderRunLock.lock() + let reason = pendingARKitProviderRunReason ?? defaultReason + pendingARKitProviderRunReason = nil + arKitProviderRunLock.unlock() + return reason + } + + private func finishARKitProviderRun(succeeded: Bool) { + #if canImport(ARKit) + let pendingReason: String? + arKitProviderRunLock.lock() + if !succeeded { + lastARKitProviderRunFailureTime = CACurrentMediaTime() + } + pendingReason = pendingARKitProviderRunReason + pendingARKitProviderRunReason = nil + arKitProviderRunInProgress = false + arKitProviderRunLock.unlock() + + if let pendingReason { + scheduleARKitProviderRun(reason: pendingReason) + } + #else + _ = succeeded + #endif + } + + #if canImport(ARKit) + private func runARKitProvidersOnce(reason: String) async -> Bool { let worldTracking = worldTracking let arSession = arSession let planeDetection = planeDetection let xrEnvironmentLightingSystem = xrEnvironmentLightingSystem - arKitProviderRunAttemptCount += 1 - let attempt = arKitProviderRunAttemptCount + + let attempt = nextARKitProviderRunAttempt() let startTime = CACurrentMediaTime() - Task { - do { - // Check world sensing authorization before attempting plane detection. - let authStatus = await arSession.queryAuthorization(for: [.worldSensing]) - let worldSensingAllowed = authStatus[.worldSensing] != .denied - - var providers: [any DataProvider] = [worldTracking] - var providerNames = ["WorldTrackingProvider"] - - if worldSensingAllowed { - if PlaneDetectionProvider.isSupported { - providers.append(planeDetection) - providerNames.append("PlaneDetectionProvider") - } else { - print("⚠️ PlaneDetectionProvider is not supported on this device") - } - } else { - print("⚠️ World sensing authorization denied — plane detection disabled. Grant permission in Settings > Privacy > World Sensing.") - } + do { + // Check world sensing authorization before attempting plane detection. + let authStatus = await arSession.queryAuthorization(for: [.worldSensing]) + let worldSensingAllowed = authStatus[.worldSensing] != .denied + + var providers: [any DataProvider] = [worldTracking] + var providerNames = ["WorldTrackingProvider"] - if let lightingProvider = xrEnvironmentLightingSystem.providerForSession { - providers.append(lightingProvider) - providerNames.append("EnvironmentLightingProvider") + if worldSensingAllowed { + if PlaneDetectionProvider.isSupported { + providers.append(planeDetection) + providerNames.append("PlaneDetectionProvider") + } else { + print("⚠️ PlaneDetectionProvider is not supported on this device") } + } else { + print("⚠️ World sensing authorization denied — plane detection disabled. Grant permission in Settings > Privacy > World Sensing.") + } - let providerList = providerNames.joined(separator: ",") - print("XR ARKit providers run starting: attempt=\(attempt), reason=\(reason), providers=\(providerList), worldSensingAllowed=\(worldSensingAllowed)") - try await arSession.run(providers) - xrEnvironmentLightingSystem.markProviderRunning(xrEnvironmentLightingSystem.providerForSession != nil) - let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 - let durationText = String(format: "%.2f", durationMs) - print("XR ARKit providers run completed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state))") - } catch { - xrEnvironmentLightingSystem.markProviderRunning(false) - let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 - let durationText = String(format: "%.2f", durationMs) - print("XR ARKit providers run failed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state)), error=\(error)") - print("⚠️ Failed to start ARKit providers: \(error)") + if let lightingProvider = xrEnvironmentLightingSystem.providerForSession { + providers.append(lightingProvider) + providerNames.append("EnvironmentLightingProvider") } + + let providerList = providerNames.joined(separator: ",") + print("XR ARKit providers run starting: attempt=\(attempt), reason=\(reason), providers=\(providerList), worldSensingAllowed=\(worldSensingAllowed)") + try await arSession.run(providers) + xrEnvironmentLightingSystem.markProviderRunning(xrEnvironmentLightingSystem.providerForSession != nil) + let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 + let durationText = String(format: "%.2f", durationMs) + print("XR ARKit providers run completed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state))") + return true + } catch { + xrEnvironmentLightingSystem.markProviderRunning(false) + let durationMs = (CACurrentMediaTime() - startTime) * 1000.0 + let durationText = String(format: "%.2f", durationMs) + print("XR ARKit providers run failed: attempt=\(attempt), durationMs=\(durationText), worldTrackingState=\(String(describing: worldTracking.state)), error=\(error)") + print("⚠️ Failed to start ARKit providers: \(error)") + return false } - #endif + } + #endif + + private func nextARKitProviderRunAttempt() -> Int { + arKitProviderRunLock.lock() + arKitProviderRunAttemptCount += 1 + let attempt = arKitProviderRunAttemptCount + arKitProviderRunLock.unlock() + return attempt } private func isRunning() -> Bool { From 134054ff78987e5380168df8e98be132dc0f6d95 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 07:06:05 -0700 Subject: [PATCH 11/15] [Test] Added explicit ABI layout tests to lighting system --- .../LightSystemTest.swift | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Tests/UntoldEngineRenderTests/LightSystemTest.swift b/Tests/UntoldEngineRenderTests/LightSystemTest.swift index ffa9b2d7..a1cba2f4 100644 --- a/Tests/UntoldEngineRenderTests/LightSystemTest.swift +++ b/Tests/UntoldEngineRenderTests/LightSystemTest.swift @@ -110,10 +110,46 @@ final class LightSystemTest: BaseRenderSetup { XCTAssertEqual(getAreaLights().first?.nearSourceSuppressionRadius ?? -1.0, 0.0) } - func testAreaLightShaderUniformLayoutIncludesPortalFields() { + func testLightShaderUniformABIStaysStable() { + XCTAssertEqual(MemoryLayout.stride, MemoryLayout.stride) + XCTAssertEqual(MemoryLayout.alignment, MemoryLayout.alignment) + XCTAssertEqual(MemoryLayout.stride, 64) + XCTAssertEqual(MemoryLayout.alignment, 16) + XCTAssertEqual(MemoryLayout.offset(of: \PointLightUniform.attenuation), 0) + XCTAssertEqual(MemoryLayout.offset(of: \PointLightUniform.position), 16) + XCTAssertEqual(MemoryLayout.offset(of: \PointLightUniform.color), 32) + XCTAssertEqual(MemoryLayout.offset(of: \PointLightUniform.intensity), 48) + XCTAssertEqual(MemoryLayout.offset(of: \PointLightUniform.radius), 52) + + XCTAssertEqual(MemoryLayout.stride, MemoryLayout.stride) + XCTAssertEqual(MemoryLayout.alignment, MemoryLayout.alignment) + XCTAssertEqual(MemoryLayout.stride, 80) + XCTAssertEqual(MemoryLayout.alignment, 16) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.attenuation), 0) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.direction), 16) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.position), 32) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.color), 48) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.intensity), 64) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.innerCone), 68) + XCTAssertEqual(MemoryLayout.offset(of: \SpotLightUniform.outerCone), 72) + XCTAssertEqual(MemoryLayout.stride, MemoryLayout.stride) XCTAssertEqual(MemoryLayout.alignment, MemoryLayout.alignment) + XCTAssertEqual(MemoryLayout.stride, 112) + XCTAssertEqual(MemoryLayout.alignment, 16) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.position), 0) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.color), 16) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.forward), 32) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.right), 48) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.up), 64) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.bounds), 80) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.intensity), 88) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.range), 92) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.nearSourceSuppressionRadius), 96) + XCTAssertEqual(MemoryLayout.offset(of: \AreaLightUniform.twoSided), 100) + } + func testAreaLightShaderUniformLayoutIncludesPortalFields() { var light = AreaLight() light.position = simd_float3(1.0, 2.0, 3.0) light.color = simd_float3(0.75, 0.5, 0.25) From e2c41190bd346d35917cfa8681e216b55d6dc2fd Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 08:53:36 -0700 Subject: [PATCH 12/15] [Patch] Added light portal diagnostics --- .../UntoldEngine/Renderer/UntoldEngine.swift | 1 + .../Systems/LightPortalSystem.swift | 146 ++++++++++++++++++ Sources/UntoldEngine/Utils/Logger.swift | 2 + .../LightPortalSystemTests.swift | 30 ++++ .../LoggerCategoryTests.swift | 2 + docs/API/UsingLightPortals.md | 36 +++++ docs/API/UsingProfiler.md | 1 + docs/API/UsingTheLogger.md | 1 + 8 files changed, 219 insertions(+) diff --git a/Sources/UntoldEngine/Renderer/UntoldEngine.swift b/Sources/UntoldEngine/Renderer/UntoldEngine.swift index 1f7c90c4..c14c18fa 100644 --- a/Sources/UntoldEngine/Renderer/UntoldEngine.swift +++ b/Sources/UntoldEngine/Renderer/UntoldEngine.swift @@ -434,6 +434,7 @@ public class UntoldRenderer: NSObject, MTKViewDelegate { // Integration/HZB monitors remain runtime-driven and are available in all build configs. SystemIntegrationMonitor.shared.tick() HZBDebugMonitor.shared.tick() + LightPortalSystem.shared.logDiagnosticsIfDue() #if ENGINE_STATS_ENABLED EngineStatsMonitor.shared.tick() #endif diff --git a/Sources/UntoldEngine/Systems/LightPortalSystem.swift b/Sources/UntoldEngine/Systems/LightPortalSystem.swift index ad541103..7829c245 100644 --- a/Sources/UntoldEngine/Systems/LightPortalSystem.swift +++ b/Sources/UntoldEngine/Systems/LightPortalSystem.swift @@ -67,6 +67,22 @@ public struct LightPortalResolutionDiagnostics: Equatable, Sendable { ) } +public struct LightPortalPerformanceDiagnostics: Equatable, Sendable { + public var lastDiscoveryDurationMs: Double? + public var lastResolutionDurationMs: Double? + public var lastScannedRenderableEntityCount: Int + public var lastDiscoveredCandidateCount: Int + public var lastResolvedProxyLightCount: Int + + public static let empty = LightPortalPerformanceDiagnostics( + lastDiscoveryDurationMs: nil, + lastResolutionDurationMs: nil, + lastScannedRenderableEntityCount: 0, + lastDiscoveredCandidateCount: 0, + lastResolvedProxyLightCount: 0 + ) +} + public final class LightPortalSystem: @unchecked Sendable { public static let shared = LightPortalSystem() @@ -75,12 +91,16 @@ public final class LightPortalSystem: @unchecked Sendable { private let lock = NSLock() private var lastDiagnostics: LightPortalDiscoveryDiagnostics = .empty private var lastResolutionDiagnostics: LightPortalResolutionDiagnostics = .empty + private var lastPerformanceDiagnostics: LightPortalPerformanceDiagnostics = .empty + private var lastDiagnosticsLogTime: Double = 0 private init() {} public func discoverCandidates() -> [LightPortalCandidate] { + let startTime = Date().timeIntervalSinceReferenceDate guard hasSceneChannelLightPortalsEnabled() else { setDiagnostics(.empty) + setPerformanceDiagnostics(.empty) return [] } @@ -143,6 +163,11 @@ public final class LightPortalSystem: @unchecked Sendable { diagnostics.candidateCount = candidates.count setDiagnostics(diagnostics) + updatePerformanceDiagnostics { performance in + performance.lastDiscoveryDurationMs = Self.elapsedMilliseconds(since: startTime) + performance.lastScannedRenderableEntityCount = diagnostics.scannedRenderableEntityCount + performance.lastDiscoveredCandidateCount = diagnostics.candidateCount + } return candidates } @@ -180,9 +205,56 @@ public final class LightPortalSystem: @unchecked Sendable { return diagnostics } + public func performanceDiagnostics() -> LightPortalPerformanceDiagnostics { + lock.lock() + let diagnostics = lastPerformanceDiagnostics + lock.unlock() + return diagnostics + } + func resetDiagnostics() { setDiagnostics(.empty) setResolutionDiagnostics(.empty) + setPerformanceDiagnostics(.empty) + lock.lock() + lastDiagnosticsLogTime = 0 + lock.unlock() + } + + /// Logs light portal diagnostics at most once per `interval` seconds. + /// + /// No-op when the LightPortal log category is disabled. Enable with + /// `setLogger(.category(.lightPortal, true))`. + public func logDiagnosticsIfDue(interval: Double = 1.0) { + guard Logger.isEnabled(category: .lightPortal) else { return } + let now = CFAbsoluteTimeGetCurrent() + lock.lock() + guard now - lastDiagnosticsLogTime >= interval else { + lock.unlock() + return + } + lastDiagnosticsLogTime = now + let discovery = lastDiagnostics + let resolution = lastResolutionDiagnostics + let performance = lastPerformanceDiagnostics + lock.unlock() + + emitDiagnostics(discovery: discovery, resolution: resolution, performance: performance) + } + + /// Emits light portal diagnostics immediately, bypassing the rate-limit timer. + /// + /// No-op when the LightPortal log category is disabled. + public func logDiagnosticsNow() { + guard Logger.isEnabled(category: .lightPortal) else { return } + lock.lock() + lastDiagnosticsLogTime = CFAbsoluteTimeGetCurrent() + let discovery = lastDiagnostics + let resolution = lastResolutionDiagnostics + let performance = lastPerformanceDiagnostics + lock.unlock() + + emitDiagnostics(discovery: discovery, resolution: resolution, performance: performance) } private func setDiagnostics(_ diagnostics: LightPortalDiscoveryDiagnostics) { @@ -197,13 +269,69 @@ public final class LightPortalSystem: @unchecked Sendable { lock.unlock() } + private func setPerformanceDiagnostics(_ diagnostics: LightPortalPerformanceDiagnostics) { + lock.lock() + lastPerformanceDiagnostics = diagnostics + lock.unlock() + } + + private func updatePerformanceDiagnostics(_ update: (inout LightPortalPerformanceDiagnostics) -> Void) { + lock.lock() + update(&lastPerformanceDiagnostics) + lock.unlock() + } + + private func emitDiagnostics( + discovery: LightPortalDiscoveryDiagnostics, + resolution: LightPortalResolutionDiagnostics, + performance: LightPortalPerformanceDiagnostics + ) { + let render = getLightPortalRenderDiagnostics() + Logger.log( + message: "[LightPortal] scanned=\(discovery.scannedRenderableEntityCount)" + + " candidates=\(discovery.candidateCount)" + + " active=\(resolution.activePortalCount)/\(resolution.maxActivePortals)" + + " portalLights=\(render.portalAreaLightCount)" + + " authoredAreaLights=\(render.authoredAreaLightCount)" + + " remainingAreaLightCapacity=\(render.remainingAreaLightCapacity)", + category: LogCategory.lightPortal.rawValue + ) + Logger.log( + message: "[LightPortal] discoveryMs=\(Self.formattedMilliseconds(performance.lastDiscoveryDurationMs))" + + " resolutionMs=\(Self.formattedMilliseconds(performance.lastResolutionDurationMs))" + + " skippedHidden=\(discovery.skippedHiddenCount)" + + " skippedInvisible=\(discovery.skippedInvisibleRenderComponentCount)" + + " skippedDisabled=\(discovery.skippedDisabledPortalCount)" + + " skippedInvalidGeometry=\(discovery.skippedInvalidGeometryCount)" + + " skippedByDistance=\(resolution.skippedByActivationDistanceCount)", + category: LogCategory.lightPortal.rawValue + ) + Logger.log( + message: "[LightPortal] envScale=\(String(format: "%.3f", render.environmentIntensityScale))" + + " contribution=\(String(format: "%.3f", render.realWorldLightingContribution))" + + " xrValid=\(render.xrLightingValid)" + + " intensityMax=\(Self.formattedFloat(render.maxEffectivePortalIntensity))" + + " fallback=\(render.fallbackReason ?? "none")", + category: LogCategory.lightPortal.rawValue + ) + } + private func resolveProxyLights( from candidates: [LightPortalCandidate], cameraPosition: simd_float3? ) -> (proxyLights: [LightPortalProxyLight], diagnostics: LightPortalResolutionDiagnostics) { + let startTime = Date().timeIntervalSinceReferenceDate var diagnostics = LightPortalResolutionDiagnostics.empty diagnostics.discoveredCandidateCount = candidates.count + defer { + updatePerformanceDiagnostics { performance in + performance.lastResolutionDurationMs = Self.elapsedMilliseconds(since: startTime) + performance.lastDiscoveredCandidateCount = diagnostics.discoveredCandidateCount + performance.lastResolvedProxyLightCount = diagnostics.activePortalCount + } + } + var maxActivePortals = 0 var activeChannelCapsByRawValue: [UInt64: Int] = [:] var resolvedProxyLights: [LightPortalProxyLight] = [] @@ -301,6 +429,20 @@ public final class LightPortalSystem: @unchecked Sendable { return (selectedProxyLights, diagnostics) } + private static func elapsedMilliseconds(since startTime: TimeInterval) -> Double { + (Date().timeIntervalSinceReferenceDate - startTime) * 1000.0 + } + + private static func formattedMilliseconds(_ value: Double?) -> String { + guard let value else { return "n/a" } + return String(format: "%.3f", value) + } + + private static func formattedFloat(_ value: Float?) -> String { + guard let value else { return "n/a" } + return String(format: "%.3f", value) + } + private func portalCenter(_ candidate: LightPortalCandidate) -> simd_float3 { let localCenter = (candidate.localBoundsMin + candidate.localBoundsMax) * 0.5 let worldCenter = simd_mul(candidate.worldTransform, simd_float4(localCenter, 1.0)) @@ -447,3 +589,7 @@ public func resolveSceneLightPortalProxyLightsForActiveCamera() -> [LightPortalP public func getLightPortalResolutionDiagnostics() -> LightPortalResolutionDiagnostics { LightPortalSystem.shared.resolutionDiagnostics() } + +public func getLightPortalPerformanceDiagnostics() -> LightPortalPerformanceDiagnostics { + LightPortalSystem.shared.performanceDiagnostics() +} diff --git a/Sources/UntoldEngine/Utils/Logger.swift b/Sources/UntoldEngine/Utils/Logger.swift index 87e1f369..08068056 100644 --- a/Sources/UntoldEngine/Utils/Logger.swift +++ b/Sources/UntoldEngine/Utils/Logger.swift @@ -34,6 +34,7 @@ public enum LogCategory: String, CaseIterable, Sendable { case integration = "Integration" case xrCamera = "XRCamera" case batching = "Batching" + case lightPortal = "LightPortal" } public struct LogEvent: Identifiable, Sendable { @@ -199,6 +200,7 @@ public enum Logger { LogCategory.textureLoading.rawValue, LogCategory.xrCamera.rawValue, LogCategory.batching.rawValue, + LogCategory.lightPortal.rawValue, ] private var categoryOverrides: [String: Bool] = [:] diff --git a/Tests/UntoldEngineTests/LightPortalSystemTests.swift b/Tests/UntoldEngineTests/LightPortalSystemTests.swift index 8dea979d..db06bec3 100644 --- a/Tests/UntoldEngineTests/LightPortalSystemTests.swift +++ b/Tests/UntoldEngineTests/LightPortalSystemTests.swift @@ -118,6 +118,36 @@ final class LightPortalSystemTests: XCTestCase { XCTAssertTrue(areaLights.isEmpty) XCTAssertEqual(getLightPortalDiscoveryDiagnostics(), .empty) XCTAssertEqual(getLightPortalResolutionDiagnostics(), .empty) + XCTAssertEqual(getLightPortalPerformanceDiagnostics(), .empty) + } + + func testPerformanceDiagnosticsRecordDiscoveryAndResolutionCost() { + let windowChannel = SceneChannel.userCustom(index: 23) + setSceneChannel(windowChannel, .lightPortal(.enabled(maxActivePortals: 2, activationDistance: 20.0))) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(1.0, 0.0, 0.0)) + _ = makePortalEntity(channels: windowChannel, position: simd_float3(3.0, 0.0, 0.0)) + + _ = resolveSceneLightPortalProxyLights(cameraPosition: .zero) + + let diagnostics = getLightPortalPerformanceDiagnostics() + XCTAssertNotNil(diagnostics.lastDiscoveryDurationMs) + XCTAssertNotNil(diagnostics.lastResolutionDurationMs) + XCTAssertGreaterThanOrEqual(diagnostics.lastDiscoveryDurationMs ?? -1.0, 0.0) + XCTAssertGreaterThanOrEqual(diagnostics.lastResolutionDurationMs ?? -1.0, 0.0) + XCTAssertEqual(diagnostics.lastScannedRenderableEntityCount, 2) + XCTAssertEqual(diagnostics.lastDiscoveredCandidateCount, 2) + XCTAssertEqual(diagnostics.lastResolvedProxyLightCount, 2) + } + + func testDiagnosticsLoggingRequiresLightPortalCategory() { + Logger.resetCategoryToggles() + XCTAssertFalse(Logger.isEnabled(category: .lightPortal)) + + LightPortalSystem.shared.logDiagnosticsNow() + + Logger.enable(category: .lightPortal) + XCTAssertTrue(Logger.isEnabled(category: .lightPortal)) + LightPortalSystem.shared.logDiagnosticsNow() } func testResolveProxyLightsDerivesShapeFromPortalTransform() { diff --git a/Tests/UntoldEngineTests/LoggerCategoryTests.swift b/Tests/UntoldEngineTests/LoggerCategoryTests.swift index 100c2a24..e87a7f61 100644 --- a/Tests/UntoldEngineTests/LoggerCategoryTests.swift +++ b/Tests/UntoldEngineTests/LoggerCategoryTests.swift @@ -34,6 +34,7 @@ final class LoggerCategoryTests: XCTestCase { XCTAssertFalse(Logger.isEnabled(category: .streamingHeartbeat)) XCTAssertFalse(Logger.isEnabled(category: .textureStreaming)) XCTAssertFalse(Logger.isEnabled(category: .textureLoading)) + XCTAssertFalse(Logger.isEnabled(category: .lightPortal)) } func testStreamingCategoriesCanBeEnabledIndividually() { @@ -45,6 +46,7 @@ final class LoggerCategoryTests: XCTestCase { XCTAssertFalse(Logger.isEnabled(category: .textureStreaming)) XCTAssertFalse(Logger.isEnabled(category: .textureLoading)) XCTAssertFalse(Logger.isEnabled(category: .streamingHeartbeat)) + XCTAssertFalse(Logger.isEnabled(category: .lightPortal)) } func testWarningsRespectCategoryToggles() { diff --git a/docs/API/UsingLightPortals.md b/docs/API/UsingLightPortals.md index fd19cc04..950ae5ba 100644 --- a/docs/API/UsingLightPortals.md +++ b/docs/API/UsingLightPortals.md @@ -87,9 +87,11 @@ Resolution diagnostics report which portals become active proxy lights: ```swift let proxies = resolveSceneLightPortalProxyLightsForActiveCamera() let resolution = getLightPortalResolutionDiagnostics() +let performance = getLightPortalPerformanceDiagnostics() let render = getLightPortalRenderDiagnostics() print(proxies) print(resolution) +print(performance) print(render) ``` @@ -107,6 +109,10 @@ Important fields: | `activePortalCount` | Portal proxy lights emitted after distance filtering and active-count capping. | | `skippedByActivationDistanceCount` | Candidates outside `activationDistance`. | | `maxActivePortals` | Active portal cap used for the current resolved list. | +| `lastDiscoveryDurationMs` | Time spent scanning renderable entities and building portal candidates during the latest discovery pass. | +| `lastResolutionDurationMs` | Time spent distance-filtering, sorting, and selecting active portal proxy lights during the latest resolution pass. | +| `lastScannedRenderableEntityCount` | Renderable entity count from the latest discovery pass, useful for spotting broad scans in large scenes. | +| `lastResolvedProxyLightCount` | Active proxy-light count from the latest resolution pass. | | `environmentIntensityScale` | Final XR/environment multiplier used for real-world-tinted portal proxy lights. | | `xrIntensityScale` | XR probe intensity scale before the user contribution multiplier. | | `environmentTintColor` | RGB tint applied to real-world-tinted portal proxy lights. | @@ -127,6 +133,36 @@ The feature is designed to be bounded: For large spatial twins, keep the portal channel narrow. Assign only actual window/opening surfaces to the portal channel, not full walls or entire room shells. +### Collecting Performance Data + +Light portal diagnostics follow the same category-log pattern described in [Profiler](UsingProfiler.md). Enable the `.lightPortal` category once, and the engine logs a throttled diagnostics summary automatically from the frame monitor path. No code is needed inside your app or game `update()` function. + +```swift +setLogger(.category(.lightPortal, true)) +// Reproduce the issue. The engine logs light portal diagnostics about once per second. +setLogger(.category(.lightPortal, false)) +``` + +The automatic log emits the latest discovery, resolution, performance, and render snapshots. The snapshots are updated by the normal portal discovery/resolution/render paths; the one-second interval only controls log emission. + +For a one-shot snapshot: + +```swift +setLogger(.category(.lightPortal, true)) +LightPortalSystem.shared.logDiagnosticsNow() +setLogger(.category(.lightPortal, false)) +``` + +For scale checks, focus on: + +| Field | Why it matters | +|---|---| +| `lastScannedRenderableEntityCount` | How broad the portal discovery scan is. | +| `lastDiscoveryDurationMs` | CPU time spent finding portal candidates. | +| `lastResolutionDurationMs` | CPU time spent selecting active proxy lights. | +| `activePortalCount` | Number of portal candidates selected after distance and cap filtering. | +| `portalAreaLightCount` | Number of portal proxy lights uploaded into the area-light path. | + Recommended starting values: ```swift diff --git a/docs/API/UsingProfiler.md b/docs/API/UsingProfiler.md index 3a69ab3e..c9506610 100644 --- a/docs/API/UsingProfiler.md +++ b/docs/API/UsingProfiler.md @@ -384,3 +384,4 @@ Profiler hooks are already integrated into: - `UntoldEngineXR.swift` (`executeXRSystemPass`) - `UntoldEngineAR.swift` (`draw`) - `BatchingSystem.swift` (`logMaterialDiagnosticsIfDue` — fires automatically every 30 s when the `.batching` category is enabled) +- `LightPortalSystem.swift` (`logDiagnosticsIfDue` — fires automatically every 1 s when the `.lightPortal` category is enabled) diff --git a/docs/API/UsingTheLogger.md b/docs/API/UsingTheLogger.md index 2a805766..a47885ed 100644 --- a/docs/API/UsingTheLogger.md +++ b/docs/API/UsingTheLogger.md @@ -79,6 +79,7 @@ Categories let you silence or focus specific subsystems without changing the glo | `.engineStats` | `"EngineStats"` | enabled | | `.integration` | `"Integration"` | enabled | | `.xrCamera` | `"XRCamera"` | disabled | +| `.lightPortal` | `"LightPortal"` | disabled | | `.oocTiming` | `"OOCTiming"` | disabled | | `.oocStatus` | `"OOCStatus"` | disabled | | `.assetLoader` | `"AssetLoader"` | disabled | From c2825081b3f53b0f4f569eb801a3b603abb2cf4c Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 09:08:53 -0700 Subject: [PATCH 13/15] [Patch] Harden recursive material updates and clarify drag constraints --- Sources/UntoldEngine/Utils/FuncUtils.swift | 5 ++- .../StaticBatchingTest.swift | 39 +++++++++++++++++++ docs/API/UsingEngineSettings.md | 1 + docs/API/UsingSpatialInput.md | 10 +++-- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/Sources/UntoldEngine/Utils/FuncUtils.swift b/Sources/UntoldEngine/Utils/FuncUtils.swift index d6117f43..5c4c9453 100644 --- a/Sources/UntoldEngine/Utils/FuncUtils.swift +++ b/Sources/UntoldEngine/Utils/FuncUtils.swift @@ -1082,6 +1082,7 @@ public func updateMaterialOpacity( private func entityAndDescendantIds(_ entityId: EntityID) -> [EntityID] { var entityIds: [EntityID] = [entityId] + var visited: Set = [entityId] var index = 0 while index < entityIds.count { @@ -1092,7 +1093,9 @@ private func entityAndDescendantIds(_ entityId: EntityID) -> [EntityID] { continue } - entityIds.append(contentsOf: scenegraphComponent.children) + for childId in scenegraphComponent.children where visited.insert(childId).inserted { + entityIds.append(childId) + } } return entityIds diff --git a/Tests/UntoldEngineRenderTests/StaticBatchingTest.swift b/Tests/UntoldEngineRenderTests/StaticBatchingTest.swift index f90010ee..e252c0e4 100644 --- a/Tests/UntoldEngineRenderTests/StaticBatchingTest.swift +++ b/Tests/UntoldEngineRenderTests/StaticBatchingTest.swift @@ -1820,6 +1820,45 @@ final class StaticBatchingTest: BaseRenderSetup { "❌ Alpha mode should revert to .opaque when opacity is restored to 1.0") } + func testRecursiveOpacityUpdatesRenderableDescendants() { + let root = createStaticCubeEntity(position: .zero, markStatic: false) + let child = createStaticCubeEntity(position: simd_float3(1.0, 0.0, 0.0), markStatic: false) + let grandchild = createStaticCubeEntity(position: simd_float3(2.0, 0.0, 0.0), markStatic: false) + let sibling = createStaticCubeEntity(position: simd_float3(3.0, 0.0, 0.0), markStatic: false) + setParent(childId: child, parentId: root) + setParent(childId: grandchild, parentId: child) + + updateMaterialOpacity(entityId: root, opacity: 0.35, recursive: true) + + XCTAssertEqual(getMaterialOpacity(entityId: root), 0.35, accuracy: 0.0001) + XCTAssertEqual(getMaterialOpacity(entityId: child), 0.35, accuracy: 0.0001) + XCTAssertEqual(getMaterialOpacity(entityId: grandchild), 0.35, accuracy: 0.0001) + XCTAssertEqual(getMaterialOpacity(entityId: sibling), 1.0, accuracy: 0.0001) + XCTAssertEqual(getMaterialAlphaMode(entityId: root), .blend) + XCTAssertEqual(getMaterialAlphaMode(entityId: child), .blend) + XCTAssertEqual(getMaterialAlphaMode(entityId: grandchild), .blend) + XCTAssertEqual(getMaterialAlphaMode(entityId: sibling), .opaque) + } + + func testRecursiveEmissiveUpdatesRenderableDescendantsOnce() { + let root = createStaticCubeEntity(position: .zero, markStatic: false) + let child = createStaticCubeEntity(position: simd_float3(1.0, 0.0, 0.0), markStatic: false) + let grandchild = createStaticCubeEntity(position: simd_float3(2.0, 0.0, 0.0), markStatic: false) + setParent(childId: child, parentId: root) + setParent(childId: grandchild, parentId: child) + + if let rootScenegraph = scene.get(component: ScenegraphComponent.self, for: root) { + rootScenegraph.children.append(child) + } + + let emissive = simd_float3(0.25, 0.5, 1.0) + updateMaterialEmmisive(entityId: root, emmissive: emissive, recursive: true) + + XCTAssertEqual(getMaterialEmmissive(entityId: root), emissive) + XCTAssertEqual(getMaterialEmmissive(entityId: child), emissive) + XCTAssertEqual(getMaterialEmmissive(entityId: grandchild), emissive) + } + func testLegacyEmbeddedPseudoURLsDoNotSplitBatching() throws { // Legacy embedded pseudo-URLs were mesh-scoped: // usdz-embedded:///embedded_Basecolor_map diff --git a/docs/API/UsingEngineSettings.md b/docs/API/UsingEngineSettings.md index d2f31027..d2750cc7 100644 --- a/docs/API/UsingEngineSettings.md +++ b/docs/API/UsingEngineSettings.md @@ -231,6 +231,7 @@ processPinchTransformLifecycle(from: state) applyPinchDragIfNeeded(from: state, entityId: myEntity, sensitivity: 1.0) // Anchored drag / rotate for individual entities +// dragPlane filters world-axis displacement; it is not ray-plane picking. processAnchoredPinchDragLifecycle(from: state, entityId: myEntity, dragPlane: .xz) processAnchoredPinchDragLifecycle( from: state, diff --git a/docs/API/UsingSpatialInput.md b/docs/API/UsingSpatialInput.md index 54b2627d..e7007c72 100644 --- a/docs/API/UsingSpatialInput.md +++ b/docs/API/UsingSpatialInput.md @@ -274,12 +274,14 @@ This helper: - Captures initial hand + entity world positions - Applies absolute displacement from gesture start -- Optionally constrains movement to `.xy`, `.xz`, or `.yz` +- Optionally constrains world-axis movement to `.xy`, `.xz`, or `.yz` - Optionally transforms the final world position before it is written - Cleans up session state on end/cancel Use this when moving large roots (buildings/scenes) where incremental delta jitter can become visible. -Use `.xz` for floor-plane dragging, `.xy` for wall-plane dragging, and `.unconstrained` for free 3D movement. +Use `.xz` to preserve height while dragging across the floor axes, `.xy` to preserve depth for wall-style movement, and `.unconstrained` for free 3D movement. + +`dragPlane` filters the hand displacement in world axes. It does not raycast the input ray against a mathematical plane. For ray-plane picking, use `pickGroundPosition` or `pickPlanePosition`. Use `positionTransform` for continuous snapping, clamping, or custom placement rules: @@ -299,7 +301,7 @@ processAnchoredPinchDragLifecycle( ) ``` -The closure receives and returns **world-space** position after sensitivity and `dragPlane` have been applied. If it returns a non-finite value, the engine skips that frame's position write. +The closure receives and returns **world-space** position after sensitivity and `dragPlane` have been applied. Its return value is the final position, so it can intentionally override the constrained axis. If it returns a non-finite value, the engine skips that frame's position write. ------------------------------------------------------------------------ @@ -766,7 +768,7 @@ Use these free functions for spatial manipulation. They all delegate to `Spatial Lower-level translation helper if you want full control. - `processAnchoredPinchDragLifecycle(from:entityId:sensitivity:dragPlane:positionTransform:)` - Anchored drag for a single entity. Applies absolute displacement from gesture start, optionally constrained to a world-axis plane. + Anchored drag for a single entity. Applies absolute displacement from gesture start, optionally constrained by world-axis displacement filtering. - `processAnchoredSceneDragLifecycle(from:sensitivity:)` Anchored drag for the entire scene root. Applies absolute displacement via `translateSceneTo`. From 243281f204a0d86b0197a92da4e3e2b9e0ee9cc2 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 10:41:34 -0700 Subject: [PATCH 14/15] [Patch] Fixed animations linkage with multiple meshes --- Sources/UntoldEngine/Mesh/Skeleton.swift | 47 +++++- .../Systems/AnimationSystem.swift | 137 +++++++++++++----- .../Systems/RegistrationSystem.swift | 44 +++--- .../AnimationTest.swift | 50 +++++++ .../NativeFormatRegistrationTests.swift | 58 ++++++++ 5 files changed, 278 insertions(+), 58 deletions(-) diff --git a/Sources/UntoldEngine/Mesh/Skeleton.swift b/Sources/UntoldEngine/Mesh/Skeleton.swift index 58ad836c..1b83839e 100644 --- a/Sources/UntoldEngine/Mesh/Skeleton.swift +++ b/Sources/UntoldEngine/Mesh/Skeleton.swift @@ -76,7 +76,11 @@ class Skeleton { /// Computes local joint transforms based on an animation clip private func computeLocalPose(at time: Float, with animationClip: AnimationClip) -> [simd_float4x4] { jointPaths.indices.map { index in - animationClip.getPose(at: time * animationClip.speed, jointPath: jointPaths[index]) + animationClip.getPose( + at: time * animationClip.speed, + jointPath: jointPaths[index], + fallback: restTransform[index] + ) ?? restTransform[index] } } @@ -300,10 +304,45 @@ class AnimationClip { /// Retrieves the interpolated pose for a joint at a specific time func getPose(at time: Float, jointPath: String) -> float4x4? { + getPose(at: time, jointPath: jointPath, fallback: .identity) + } + + /// Retrieves the interpolated pose while preserving rest-pose channels that are + /// not authored by the clip. Many skeletal clips animate rotation only for most + /// joints; those joints must keep their rest translation offsets. The runtime + /// format does not store scale animation, so keep the rest-pose local scale too. + func getPose(at time: Float, jointPath: String, fallback: float4x4) -> float4x4? { guard let animation = jointAnimation[jointPath] else { return nil } - let rotation = animation.getRotation(at: time) ?? simd_quatf(simd_float4x4.identity) - let translation = animation.getTranslation(at: time) ?? simd_float3(repeating: 0) - return float4x4(translation: translation) * float4x4(rotation) + let fallbackScale = Self.localScale(from: fallback) + let fallbackRotation = Self.localRotation(from: fallback, scale: fallbackScale) + let rotation = animation.getRotation(at: time) ?? fallbackRotation + let translation = animation.getTranslation(at: time) ?? simd_float3( + fallback.columns.3.x, + fallback.columns.3.y, + fallback.columns.3.z + ) + return float4x4(translation: translation) * float4x4(rotation) * float4x4(scale: fallbackScale) + } + + private static func localScale(from matrix: float4x4) -> SIMD3 { + SIMD3( + simd_length(SIMD3(matrix.columns.0.x, matrix.columns.0.y, matrix.columns.0.z)), + simd_length(SIMD3(matrix.columns.1.x, matrix.columns.1.y, matrix.columns.1.z)), + simd_length(SIMD3(matrix.columns.2.x, matrix.columns.2.y, matrix.columns.2.z)) + ) + } + + private static func localRotation(from matrix: float4x4, scale: SIMD3) -> simd_quatf { + let epsilon: Float = 0.000001 + let sx = max(scale.x, epsilon) + let sy = max(scale.y, epsilon) + let sz = max(scale.z, epsilon) + let rotationMatrix = matrix_float3x3(columns: ( + SIMD3(matrix.columns.0.x, matrix.columns.0.y, matrix.columns.0.z) / sx, + SIMD3(matrix.columns.1.x, matrix.columns.1.y, matrix.columns.1.z) / sy, + SIMD3(matrix.columns.2.x, matrix.columns.2.y, matrix.columns.2.z) / sz + )) + return simd_normalize(simd_quatf(rotationMatrix)) } // MARK: - Private Helpers diff --git a/Sources/UntoldEngine/Systems/AnimationSystem.swift b/Sources/UntoldEngine/Systems/AnimationSystem.swift index 42f5363e..249af93f 100644 --- a/Sources/UntoldEngine/Systems/AnimationSystem.swift +++ b/Sources/UntoldEngine/Systems/AnimationSystem.swift @@ -45,40 +45,97 @@ public final class AnimationSystem: @unchecked Sendable { /// instead of add an ifelse conditional jump. private func updateAnimationSystemDummy(deltaTime _: Float) {} -private func resolveDescendantEntity( +private func collectDescendantEntities( entityId: EntityID, - matches: (EntityID) -> Bool -) -> EntityID? { + matches: (EntityID) -> Bool, + visited: inout Set +) -> [EntityID] { + guard visited.insert(entityId).inserted else { + return [] + } + + var result: [EntityID] = [] if matches(entityId) { - return entityId + result.append(entityId) } guard let scenegraph = scene.get(component: ScenegraphComponent.self, for: entityId) else { - return nil + return result } for childId in scenegraph.children { - if let resolved = resolveDescendantEntity(entityId: childId, matches: matches) { - return resolved - } + result.append(contentsOf: collectDescendantEntities(entityId: childId, matches: matches, visited: &visited)) } - return nil + return result } -func resolveEntityWithAnimationComponent(entityId: EntityID) -> EntityID? { - resolveDescendantEntity(entityId: entityId) { +private func resolveDescendantEntities( + entityId: EntityID, + matches: (EntityID) -> Bool +) -> [EntityID] { + var visited: Set = [] + return collectDescendantEntities(entityId: entityId, matches: matches, visited: &visited) +} + +private func resolveDescendantEntity( + entityId: EntityID, + matches: (EntityID) -> Bool +) -> EntityID? { + resolveDescendantEntities(entityId: entityId, matches: matches).first +} + +func resolveEntitiesWithAnimationComponent(entityId: EntityID) -> [EntityID] { + resolveDescendantEntities(entityId: entityId) { scene.get(component: AnimationComponent.self, for: $0) != nil } } -func resolveEntityForAnimationBinding(entityId: EntityID) -> EntityID? { - resolveDescendantEntity(entityId: entityId) { +func resolveEntityWithAnimationComponent(entityId: EntityID) -> EntityID? { + resolveEntitiesWithAnimationComponent(entityId: entityId).first +} + +func resolveEntitiesForAnimationBinding(entityId: EntityID) -> [EntityID] { + resolveDescendantEntities(entityId: entityId) { scene.get(component: SkeletonComponent.self, for: $0) != nil && scene.get(component: RenderComponent.self, for: $0) != nil } } +func resolveEntityForAnimationBinding(entityId: EntityID) -> EntityID? { + resolveEntitiesForAnimationBinding(entityId: entityId).first +} + +private func animationComponentsForEntityOrDescendants(entityId: EntityID) -> [(EntityID, AnimationComponent)] { + let targetEntityIds = resolveEntitiesWithAnimationComponent(entityId: entityId) + return targetEntityIds.compactMap { targetEntityId in + guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + return nil + } + return (targetEntityId, animationComponent) + } +} + +private func animationComponentsContainingClip(entityId: EntityID, name: String) -> [(EntityID, AnimationComponent, AnimationClip)] { + animationComponentsForEntityOrDescendants(entityId: entityId).compactMap { targetEntityId, animationComponent in + guard let animationClip = animationComponent.animationClips[name] else { + return nil + } + return (targetEntityId, animationComponent, animationClip) + } +} + +func resolveAnimationBindingTargetEntities(entityId: EntityID) -> [EntityID] { + let targetEntityIds = resolveEntitiesForAnimationBinding(entityId: entityId) + return targetEntityIds.isEmpty ? [entityId] : targetEntityIds +} + +private func hasAnyAnimationComponent(entityId: EntityID) -> Bool { + resolveDescendantEntity(entityId: entityId) { + scene.get(component: AnimationComponent.self, for: $0) != nil + } != nil +} + private func updateAnimationSystem(deltaTime: Float) { currentGlobalTime += deltaTime @@ -123,49 +180,58 @@ private func updateAnimationSystem(deltaTime: Float) { } public func pauseAnimationComponent(entityId: EntityID, isPaused: Bool) { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + let animationComponents = animationComponentsForEntityOrDescendants(entityId: entityId) + guard animationComponents.isEmpty == false else { handleError(.noAnimationComponent, entityId) return } - animationComponent.pause = isPaused + for (_, animationComponent) in animationComponents { + animationComponent.pause = isPaused + } } public func isAnimationComponentPaused(entityId: EntityID) -> Bool { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + let animationComponents = animationComponentsForEntityOrDescendants(entityId: entityId) + guard animationComponents.isEmpty == false else { handleError(.noAnimationComponent, entityId) return true } - return animationComponent.pause + return animationComponents.allSatisfy { _, animationComponent in + animationComponent.pause + } } public func changeAnimation(entityId: EntityID, name: String, withPause: Bool = false) { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + guard hasAnyAnimationComponent(entityId: entityId) else { handleError(.noAnimationComponent, entityId) return } - guard let animationClip = animationComponent.animationClips[name] else { + let matchingComponents = animationComponentsContainingClip(entityId: entityId, name: name) + guard matchingComponents.isEmpty == false else { handleError(.noAnimationClip, name, entityId) return } - animationComponent.currentAnimation = animationClip - animationComponent.pause = withPause + for (_, animationComponent, animationClip) in matchingComponents { + animationComponent.currentAnimation = animationClip + animationComponent.pause = withPause + } } public func setAnimationPlaybackSpeed(entityId: EntityID, speed: Float) { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + let animationComponents = animationComponentsForEntityOrDescendants(entityId: entityId) + guard animationComponents.isEmpty == false else { handleError(.noAnimationComponent, entityId) return } - animationComponent.playbackSpeed = max(0.0, speed) + let clampedSpeed = max(0.0, speed) + for (_, animationComponent) in animationComponents { + animationComponent.playbackSpeed = clampedSpeed + } } public func getAnimationPlaybackSpeed(entityId: EntityID) -> Float { @@ -179,20 +245,19 @@ public func getAnimationPlaybackSpeed(entityId: EntityID) -> Float { } public func getAllAnimationClips(entityId: EntityID) -> [String] { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { - return [] - } - - return animationComponent.getAllAnimationClips() + let clipNames = animationComponentsForEntityOrDescendants(entityId: entityId) + .flatMap { _, animationComponent in animationComponent.getAllAnimationClips() } + return Array(Set(clipNames)).sorted() } public func removeAnimationClip(entityId: EntityID, animationClip: String) { - let targetEntityId = resolveEntityWithAnimationComponent(entityId: entityId) ?? entityId - guard let animationComponent = scene.get(component: AnimationComponent.self, for: targetEntityId) else { + let animationComponents = animationComponentsForEntityOrDescendants(entityId: entityId) + guard animationComponents.isEmpty == false else { handleError(.noAnimationComponent, entityId) return } - animationComponent.removeAnimationClip(animationClip: animationClip) + for (_, animationComponent) in animationComponents { + animationComponent.removeAnimationClip(animationClip: animationClip) + } } diff --git a/Sources/UntoldEngine/Systems/RegistrationSystem.swift b/Sources/UntoldEngine/Systems/RegistrationSystem.swift index 36d4b844..9a6a2f48 100644 --- a/Sources/UntoldEngine/Systems/RegistrationSystem.swift +++ b/Sources/UntoldEngine/Systems/RegistrationSystem.swift @@ -941,15 +941,17 @@ private func registerUntoldRuntimeAsset( } // Register animation clips embedded in the asset (e.g. redplayer.untold walk/run cycles). - // Resolve to the skinned descendant if the root is a container (skeleton hierarchy). + // Resolve to every skinned descendant so split characters animate all meshes. let animClips = runtimeAsset.animationClips if !animClips.isEmpty { - let animTarget = resolveEntityForAnimationBinding(entityId: entityId) ?? entityId - if let animComp = ensureAnimationComponent(entityId: animTarget, errorEntityId: entityId) { - let registeredNames = registerRuntimeAnimationClips(animClips, preferredName: animClips.first?.name ?? "", to: animComp) - appendAnimationSourceURLIfNeeded(url, to: animComp) - if animComp.currentAnimation == nil, let first = registeredNames.first { - animComp.currentAnimation = animComp.animationClips[first] + let animTargets = resolveAnimationBindingTargetEntities(entityId: entityId) + for animTarget in animTargets { + if let animComp = ensureAnimationComponent(entityId: animTarget, errorEntityId: entityId) { + let registeredNames = registerRuntimeAnimationClips(animClips, preferredName: animClips.first?.name ?? "", to: animComp) + appendAnimationSourceURLIfNeeded(url, to: animComp) + if animComp.currentAnimation == nil, let first = registeredNames.first { + animComp.currentAnimation = animComp.animationClips[first] + } } } } @@ -2471,8 +2473,8 @@ func removeEntityMesh(entityId: EntityID) { } public func setEntityAnimations(entityId: EntityID, filename: String, withExtension: String, name: String) { - let targetEntityId = resolveEntityForAnimationBinding(entityId: entityId) ?? entityId - guard scene.get(component: SkeletonComponent.self, for: targetEntityId) != nil else { + let targetEntityIds = resolveAnimationBindingTargetEntities(entityId: entityId) + guard targetEntityIds.contains(where: { scene.get(component: SkeletonComponent.self, for: $0) != nil }) else { handleError(.noSkeletonComponent, entityId) return } @@ -2495,17 +2497,23 @@ public func setEntityAnimations(entityId: EntityID, filename: String, withExtens } withWorldMutationGate { - guard let animationComponent = ensureAnimationComponent(entityId: targetEntityId, errorEntityId: entityId) else { - return - } + for targetEntityId in targetEntityIds { + guard scene.get(component: SkeletonComponent.self, for: targetEntityId) != nil else { + continue + } - let registeredNames = registerRuntimeAnimationClips(runtimeClips, preferredName: name, to: animationComponent) - appendAnimationSourceURLIfNeeded(url, to: animationComponent) + guard let animationComponent = ensureAnimationComponent(entityId: targetEntityId, errorEntityId: entityId) else { + continue + } - if animationComponent.currentAnimation == nil, - let selectedName = registeredNames.first(where: { $0 == name }) ?? registeredNames.first - { - animationComponent.currentAnimation = animationComponent.animationClips[selectedName] + let registeredNames = registerRuntimeAnimationClips(runtimeClips, preferredName: name, to: animationComponent) + appendAnimationSourceURLIfNeeded(url, to: animationComponent) + + if animationComponent.currentAnimation == nil, + let selectedName = registeredNames.first(where: { $0 == name }) ?? registeredNames.first + { + animationComponent.currentAnimation = animationComponent.animationClips[selectedName] + } } } return diff --git a/Tests/UntoldEngineRenderTests/AnimationTest.swift b/Tests/UntoldEngineRenderTests/AnimationTest.swift index a05d671e..ed033c0c 100644 --- a/Tests/UntoldEngineRenderTests/AnimationTest.swift +++ b/Tests/UntoldEngineRenderTests/AnimationTest.swift @@ -77,6 +77,56 @@ final class AnimationTests: BaseRenderSetup { XCTAssertEqual(animationComponent.currentTime, 0.5, accuracy: 0.0001) } + func test_rotationOnlyClipPreservesRestTranslation() throws { + let restTransform = matrix4x4Translation(0.25, 1.5, -0.75) + + let runtimeClip = RuntimeAnimationClip( + name: "rotationOnly", + duration: 1.0, + channels: [ + RuntimeAnimationChannel( + jointPath: "/Hips/Spine", + rotations: [ + RuntimeRotationKeyframe(time: 0.0, value: SIMD4(0.0, 0.0, 0.0, 1.0)), + ] + ), + ] + ) + let clip = AnimationClip(runtimeClip: runtimeClip) + let pose = try XCTUnwrap(clip.getPose(at: 0.0, jointPath: "/Hips/Spine", fallback: restTransform)) + + XCTAssertEqual(pose.columns.3.x, restTransform.columns.3.x, accuracy: 0.0001) + XCTAssertEqual(pose.columns.3.y, restTransform.columns.3.y, accuracy: 0.0001) + XCTAssertEqual(pose.columns.3.z, restTransform.columns.3.z, accuracy: 0.0001) + } + + func test_animationPosePreservesRestScale() throws { + let restScale = SIMD3(0.01, 0.02, 0.03) + let restTransform = matrix4x4Translation(0.25, 1.5, -0.75) * matrix4x4Scale(restScale.x, restScale.y, restScale.z) + let runtimeClip = RuntimeAnimationClip( + name: "rotationWithScaledRestPose", + duration: 1.0, + channels: [ + RuntimeAnimationChannel( + jointPath: "/Hips", + translations: [ + RuntimeTranslationKeyframe(time: 0.0, value: SIMD3(0.5, 1.0, 1.5)), + ], + rotations: [ + RuntimeRotationKeyframe(time: 0.0, value: SIMD4(0.0, 0.0, 0.0, 1.0)), + ] + ), + ] + ) + + let clip = AnimationClip(runtimeClip: runtimeClip) + let pose = try XCTUnwrap(clip.getPose(at: 0.0, jointPath: "/Hips", fallback: restTransform)) + + XCTAssertEqual(simd_length(SIMD3(pose.columns.0.x, pose.columns.0.y, pose.columns.0.z)), restScale.x, accuracy: 0.0001) + XCTAssertEqual(simd_length(SIMD3(pose.columns.1.x, pose.columns.1.y, pose.columns.1.z)), restScale.y, accuracy: 0.0001) + XCTAssertEqual(simd_length(SIMD3(pose.columns.2.x, pose.columns.2.y, pose.columns.2.z)), restScale.z, accuracy: 0.0001) + } + private func runSamples(save: (_ tex: MTLTexture, _ name: String) -> Void) throws { resetAnimationPlaybackState() diff --git a/Tests/UntoldEngineRenderTests/NativeFormatRegistrationTests.swift b/Tests/UntoldEngineRenderTests/NativeFormatRegistrationTests.swift index 9eab2126..64c2bfc3 100644 --- a/Tests/UntoldEngineRenderTests/NativeFormatRegistrationTests.swift +++ b/Tests/UntoldEngineRenderTests/NativeFormatRegistrationTests.swift @@ -247,9 +247,67 @@ final class NativeFormatRegistrationTests: BaseRenderSetup { XCTAssertNotNil(animationComponent.currentAnimation) } + func testSetEntityAnimationsRegistersEverySkinnedDescendant() { + guard let animationURL = Bundle.module.url(forResource: "running", withExtension: "untold") else { + XCTFail("Failed to locate running.untold") + return + } + + let originalResourceURLFn = LoadingSystem.shared.resourceURLFn + LoadingSystem.shared.resourceURLFn = { name, ext, subName in + if name == "running", ext == "untold" { + return animationURL + } + return getResourceURL(resourceName: name, ext: ext, subName: subName) + } + defer { LoadingSystem.shared.resourceURLFn = originalResourceURLFn } + + let rootEntity = createEntity() + registerTransformComponent(entityId: rootEntity) + registerSceneGraphComponent(entityId: rootEntity) + + let shirtEntity = makeSkinnedRenderChild(named: "CH38_Shirt", parent: rootEntity) + let bodyEntity = makeSkinnedRenderChild(named: "CH38_Body", parent: rootEntity) + + let bindingEntities = resolveEntitiesForAnimationBinding(entityId: rootEntity) + XCTAssertEqual(Set(bindingEntities), Set([shirtEntity, bodyEntity])) + + setEntityAnimations(entityId: rootEntity, filename: "running", withExtension: "untold", name: "running") + + for entityId in [shirtEntity, bodyEntity] { + guard let animationComponent = scene.get(component: AnimationComponent.self, for: entityId) else { + XCTFail("Expected AnimationComponent on skinned child \(entityId)") + continue + } + + XCTAssertNotNil(animationComponent.animationClips["running"]) + XCTAssertNotNil(animationComponent.currentAnimation) + } + + changeAnimation(entityId: rootEntity, name: "running", withPause: true) + XCTAssertTrue(isAnimationComponentPaused(entityId: rootEntity)) + + setAnimationPlaybackSpeed(entityId: rootEntity, speed: 0.5) + XCTAssertEqual(getAnimationPlaybackSpeed(entityId: rootEntity), 0.5, accuracy: 0.0001) + + removeAnimationClip(entityId: rootEntity, animationClip: "running") + XCTAssertFalse(getAllAnimationClips(entityId: rootEntity).contains("running")) + } + private func findEntity(named name: String) -> EntityID? { reverseEntityNameMap[name]?.first(where: { scene.exists($0) && getEntityName(entityId: $0) == name }) } + + private func makeSkinnedRenderChild(named name: String, parent: EntityID) -> EntityID { + let entityId = createEntity() + setEntityName(entityId: entityId, name: name) + registerTransformComponent(entityId: entityId) + registerSceneGraphComponent(entityId: entityId) + registerComponent(entityId: entityId, componentType: RenderComponent.self) + registerComponent(entityId: entityId, componentType: SkeletonComponent.self) + setParent(childId: entityId, parentId: parent) + return entityId + } } private struct SceneAuthoredUntoldFixture { From b1c59a89773c729f23f38450190cf544db47a861 Mon Sep 17 00:00:00 2001 From: Untold Engine Date: Wed, 24 Jun 2026 17:08:05 -0700 Subject: [PATCH 15/15] [Patch] Added support for additional input keys --- .../Scripting/USCInterpreter.swift | 15 +++ .../Systems/InputSystem+Keyboard.swift | 94 +++++++++++++++++++ .../InputSystemExtensionsTest.swift | 25 +++++ .../USCScriptingAPITest.swift | 40 ++++++++ 4 files changed, 174 insertions(+) diff --git a/Sources/UntoldEngine/Scripting/USCInterpreter.swift b/Sources/UntoldEngine/Scripting/USCInterpreter.swift index a4cc5322..3e8eeec4 100644 --- a/Sources/UntoldEngine/Scripting/USCInterpreter.swift +++ b/Sources/UntoldEngine/Scripting/USCInterpreter.swift @@ -1120,6 +1120,21 @@ public class USCInterpreter: @unchecked Sendable { case "D": return InputSystem.shared.keyState.dPressed case "Q": return InputSystem.shared.keyState.qPressed case "E": return InputSystem.shared.keyState.ePressed + case "H": return InputSystem.shared.keyState.hPressed + case "TAB": return InputSystem.shared.keyState.tabPressed + case "F": return InputSystem.shared.keyState.fPressed + case "F1": return InputSystem.shared.keyState.f1Pressed + case "F2": return InputSystem.shared.keyState.f2Pressed + case "F3": return InputSystem.shared.keyState.f3Pressed + case "F4": return InputSystem.shared.keyState.f4Pressed + case "F5": return InputSystem.shared.keyState.f5Pressed + case "F6": return InputSystem.shared.keyState.f6Pressed + case "F7": return InputSystem.shared.keyState.f7Pressed + case "F8": return InputSystem.shared.keyState.f8Pressed + case "F9": return InputSystem.shared.keyState.f9Pressed + case "F10": return InputSystem.shared.keyState.f10Pressed + case "F11": return InputSystem.shared.keyState.f11Pressed + case "F12": return InputSystem.shared.keyState.f12Pressed case "SPACE": return InputSystem.shared.keyState.spacePressed case "SHIFT": return InputSystem.shared.keyState.shiftPressed case "CTRL": return InputSystem.shared.keyState.ctrlPressed diff --git a/Sources/UntoldEngine/Systems/InputSystem+Keyboard.swift b/Sources/UntoldEngine/Systems/InputSystem+Keyboard.swift index f3857c81..57bbb993 100644 --- a/Sources/UntoldEngine/Systems/InputSystem+Keyboard.swift +++ b/Sources/UntoldEngine/Systems/InputSystem+Keyboard.swift @@ -14,6 +14,10 @@ public struct KeyState { public var wPressed = false, aPressed = false, sPressed = false, dPressed = false + public var hPressed = false, tabPressed = false, fPressed = false + public var f1Pressed = false, f2Pressed = false, f3Pressed = false, f4Pressed = false + public var f5Pressed = false, f6Pressed = false, f7Pressed = false, f8Pressed = false + public var f9Pressed = false, f10Pressed = false, f11Pressed = false, f12Pressed = false public var jPressed = false, kPressed = false, lPressed = false public var qPressed = false, ePressed = false public var spacePressed = false, shiftPressed = false, ctrlPressed = false @@ -126,6 +130,66 @@ public extension InputSystem { !isTextInputFocused } + private var hKeyCode: UInt16 { + 4 + } + + private var tabKeyCode: UInt16 { + 48 + } + + private var fKeyCode: UInt16 { + 3 + } + + private var f1KeyCode: UInt16 { + 122 + } + + private var f2KeyCode: UInt16 { + 120 + } + + private var f3KeyCode: UInt16 { + 99 + } + + private var f4KeyCode: UInt16 { + 118 + } + + private var f5KeyCode: UInt16 { + 96 + } + + private var f6KeyCode: UInt16 { + 97 + } + + private var f7KeyCode: UInt16 { + 98 + } + + private var f8KeyCode: UInt16 { + 100 + } + + private var f9KeyCode: UInt16 { + 101 + } + + private var f10KeyCode: UInt16 { + 109 + } + + private var f11KeyCode: UInt16 { + 103 + } + + private var f12KeyCode: UInt16 { + 111 + } + func keyPressed(_ keyCode: UInt16) { switch keyCode { case kVK_ANSI_A: keyState.aPressed = true @@ -134,6 +198,21 @@ public extension InputSystem { case kVK_ANSI_S: keyState.sPressed = true case kVK_ANSI_Q: keyState.qPressed = true case kVK_ANSI_E: keyState.ePressed = true + case hKeyCode: keyState.hPressed = true + case tabKeyCode: keyState.tabPressed = true + case fKeyCode: keyState.fPressed = true + case f1KeyCode: keyState.f1Pressed = true + case f2KeyCode: keyState.f2Pressed = true + case f3KeyCode: keyState.f3Pressed = true + case f4KeyCode: keyState.f4Pressed = true + case f5KeyCode: keyState.f5Pressed = true + case f6KeyCode: keyState.f6Pressed = true + case f7KeyCode: keyState.f7Pressed = true + case f8KeyCode: keyState.f8Pressed = true + case f9KeyCode: keyState.f9Pressed = true + case f10KeyCode: keyState.f10Pressed = true + case f11KeyCode: keyState.f11Pressed = true + case f12KeyCode: keyState.f12Pressed = true case kVK_ANSI_Space: keyState.spacePressed = true case kVK_ANSI_J: keyState.jPressed = true case kVK_ANSI_K: keyState.kPressed = true @@ -153,6 +232,21 @@ public extension InputSystem { case kVK_ANSI_S: keyState.sPressed = false case kVK_ANSI_Q: keyState.qPressed = false case kVK_ANSI_E: keyState.ePressed = false + case hKeyCode: keyState.hPressed = false + case tabKeyCode: keyState.tabPressed = false + case fKeyCode: keyState.fPressed = false + case f1KeyCode: keyState.f1Pressed = false + case f2KeyCode: keyState.f2Pressed = false + case f3KeyCode: keyState.f3Pressed = false + case f4KeyCode: keyState.f4Pressed = false + case f5KeyCode: keyState.f5Pressed = false + case f6KeyCode: keyState.f6Pressed = false + case f7KeyCode: keyState.f7Pressed = false + case f8KeyCode: keyState.f8Pressed = false + case f9KeyCode: keyState.f9Pressed = false + case f10KeyCode: keyState.f10Pressed = false + case f11KeyCode: keyState.f11Pressed = false + case f12KeyCode: keyState.f12Pressed = false case kVK_ANSI_J: keyState.jPressed = false case kVK_ANSI_K: keyState.kPressed = false case kVK_ANSI_L: keyState.lPressed = false diff --git a/Tests/UntoldEngineTests/InputSystemExtensionsTest.swift b/Tests/UntoldEngineTests/InputSystemExtensionsTest.swift index 897b8bbf..5ba3383d 100644 --- a/Tests/UntoldEngineTests/InputSystemExtensionsTest.swift +++ b/Tests/UntoldEngineTests/InputSystemExtensionsTest.swift @@ -60,6 +60,31 @@ final class InputSystemExtensionsTests: XCTestCase { // MARK: - Mouse Input Tests + func test_keyboardStates_includeHFAndTab() { + let input = InputSystem.shared + + XCTAssertFalse(input.keyState.hPressed) + XCTAssertFalse(input.keyState.tabPressed) + XCTAssertFalse(input.keyState.fPressed) + XCTAssertFalse(input.keyState.f1Pressed) + XCTAssertFalse(input.keyState.f6Pressed) + XCTAssertFalse(input.keyState.f12Pressed) + + input.keyState.hPressed = true + input.keyState.tabPressed = true + input.keyState.fPressed = true + input.keyState.f1Pressed = true + input.keyState.f6Pressed = true + input.keyState.f12Pressed = true + + XCTAssertTrue(input.keyState.hPressed) + XCTAssertTrue(input.keyState.tabPressed) + XCTAssertTrue(input.keyState.fPressed) + XCTAssertTrue(input.keyState.f1Pressed) + XCTAssertTrue(input.keyState.f6Pressed) + XCTAssertTrue(input.keyState.f12Pressed) + } + func test_mouseButtonStates_inKeyState() { let input = InputSystem.shared diff --git a/Tests/UntoldEngineTests/USCScriptingAPITest.swift b/Tests/UntoldEngineTests/USCScriptingAPITest.swift index c43de390..fedb0977 100644 --- a/Tests/UntoldEngineTests/USCScriptingAPITest.swift +++ b/Tests/UntoldEngineTests/USCScriptingAPITest.swift @@ -1483,6 +1483,12 @@ final class USCScriptingAPITest: XCTestCase { s.onUpdate() .getKeyState("w", as: "wPressed") .getKeyState("a", as: "aPressed") + .getKeyState("h", as: "hPressed") + .getKeyState("tab", as: "tabPressed") + .getKeyState("f", as: "fPressed") + .getKeyState("f1", as: "f1Pressed") + .getKeyState("f6", as: "f6Pressed") + .getKeyState("f12", as: "f12Pressed") } let entityId = createEntity() @@ -1492,6 +1498,12 @@ final class USCScriptingAPITest: XCTestCase { // Simulate W key pressed InputSystem.shared.keyState.wPressed = true InputSystem.shared.keyState.aPressed = false + InputSystem.shared.keyState.hPressed = true + InputSystem.shared.keyState.tabPressed = true + InputSystem.shared.keyState.fPressed = false + InputSystem.shared.keyState.f1Pressed = true + InputSystem.shared.keyState.f6Pressed = false + InputSystem.shared.keyState.f12Pressed = true interpreter.execute(script: script, context: context, forEvent: "OnUpdate") @@ -1501,12 +1513,40 @@ final class USCScriptingAPITest: XCTestCase { guard case let .bool(aPressed) = context.variables["aPressed"] else { return XCTFail("aPressed should be a bool") } + guard case let .bool(hPressed) = context.variables["hPressed"] else { + return XCTFail("hPressed should be a bool") + } + guard case let .bool(tabPressed) = context.variables["tabPressed"] else { + return XCTFail("tabPressed should be a bool") + } + guard case let .bool(fPressed) = context.variables["fPressed"] else { + return XCTFail("fPressed should be a bool") + } + guard case let .bool(f1Pressed) = context.variables["f1Pressed"] else { + return XCTFail("f1Pressed should be a bool") + } + guard case let .bool(f6Pressed) = context.variables["f6Pressed"] else { + return XCTFail("f6Pressed should be a bool") + } + guard case let .bool(f12Pressed) = context.variables["f12Pressed"] else { + return XCTFail("f12Pressed should be a bool") + } XCTAssertEqual(wPressed, true, "W key should be pressed") XCTAssertEqual(aPressed, false, "A key should not be pressed") + XCTAssertEqual(hPressed, true, "H key should be pressed") + XCTAssertEqual(tabPressed, true, "Tab key should be pressed") + XCTAssertEqual(fPressed, false, "F key should not be pressed") + XCTAssertEqual(f1Pressed, true, "F1 key should be pressed") + XCTAssertEqual(f6Pressed, false, "F6 key should not be pressed") + XCTAssertEqual(f12Pressed, true, "F12 key should be pressed") // Reset InputSystem.shared.keyState.wPressed = false + InputSystem.shared.keyState.hPressed = false + InputSystem.shared.keyState.tabPressed = false + InputSystem.shared.keyState.f1Pressed = false + InputSystem.shared.keyState.f12Pressed = false } func testOrBool_Scripted() {

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 diff --git a/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.metallib b/Sources/UntoldEngine/UntoldEngineKernels/UntoldEngineKernels-ios.metallib index c8fd5a41b342a0d7c17a25e904f85c3c2ec64411..b1cd9eb9852a4c91bba25d733153b1f243ad647b 100644 GIT binary patch delta 37185 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 delta 32744 zcmcG$3tW@s-}ry;aBpJ_ws9N`;U1uJ)EiLoz+qz`h^WJ;$kYaSK=S}nN zz=lRO6phMim?f3fHl~nK&9b8JV>UdL6&V;B73uGD-P@3;p6C1gU(bIp^xE~g4)^E! zT<7b4@A`IM_>Mm&_$??Z$f99%%nQSIgkm_hWBWe847xP4eer=wF?+6!1kd`(@4fFI zeo5cd{V#6iq|7&eDCDh4YJYCo%U3cp7G&SEgo6=_8vG}(j9I{Mfb^_N$)zaC)UHvZ-{MTvR zhWcoZQ7>ZoHuwgx8>DgU21#r-L-7vYpb<+NcE+w}m_Bwz7R3FFp}gqQ;AGqihH1$4 zJvV*@qr#ijAej`~@J0MmhFQd-(%zr2o-vThq8==W^EW>BA}gqYow%5R6}p5UMfw?= z?5x0sgCJCtyM(MMPcW4AuI~q@R56G{EUL^IQ&%ty?JoJLsTzjV=KB6Dm)lT6u4W84 zSPg>_u?<6H8H4!B6=s>_*Pu&U#xVbI*Uw7^|81AH`;(V42tPKZAt=)@A!RkgkU;r$ z&!+5nHiZWN=T>yUyWLzjQEBlmEo9rVbNjOX>F3*hAIt-(g=mu=nfm?Zhsu z|G6_9wTwAYq3vwQa73#_vmFkNHH;?e5fb?V**uiX*1gleV#PM=_a$E{Pa||zX|kU5 z>g05idWF|nfowkYB)_D+v3R6fGAZ&&zrq)IQ*@jrvQ8@9C6E=aBu2U;J!W@nNi!qZ1R876>O6Y~LyBvd{W3 zKth`?S=dm0|4Mikak?HbbOJpKRdD|ZbICCtJ*f{g(BAe{K&!(N0mrZp^Iva`i7kR zWd1~E*6Ph+{_~Fb(OXUkeOE4dnwYmfD#mLloTH$1lQwJtjTc#NBW#iwS7vK-kPR_iP>$ zLm#PvHm8*v7qnf(!C>IS)F%3)c`Hf$gE0~0acNDx5QL(`KMXU`Yl~ho`)yKVI`9dQ zh^C;) zcRzuN;uTNi;^U&-%%8@UQV#@G;S)%F2?9;@KD;Sur{?M@Z-G0kO*`jK#pOk1ShS3DZ$a#UZx8$*4Pr*a@UU6?8A?5 z{Y5j$)F6R!CghBiC6H#P=PD@8RAW@zRbQ@wc+#=)@OvENOTayLsBlaPPyy~;I{l6D z1$d9^wN$E>K%r3C)hOC$&pq-s##E0jrz&pw+fUFqNHO$WS5^J|`5#bF?%0AV_x=tA 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%0D?e*t6{&**G z*&AOM(@%Z!+VE#FZ+3oNtjap@ZOO>aSKcvxU7YpeTPJ^O?+^JDeYI76e|qhj7r!pH zz0md2$ezcaJA<-#^7TL7PiT7*GVa&5{qWs8?|cE$k3LHM{nx}1$k^7c9l3BbVdm!$ zL9dG)xjFTvuOYMFPyYDFJ8$zoh6o>Y#s1MA+jR6|vF+vO-yQi%6uW+RM4({pmaWxw zjm@pcPMos$oWF3Tb@-%Ykad(!&t{@q?{NQNXFc6$4PyoxU(qoH#<TLg)cv}HnS4YBibvATeT?1TKSMV(eT0qc<1heZ@M8OXrX$Q%9B$)$I zenN^MMvf1HG!Xm@f^#SnBuEFrFCgecnIJ(12!02_Aj$&?GC^<$1R6W!;Rk{|5JV+` zA|NP2f_WgA41yNB3Nk^Gd>4u*0P=1H+@!Y$Oq31mpA?~ZtANdG1{6;XY@QTdt@khp z%pfqaQ+Tt4*X+E`g`BjcPKUpIVGlXPM08Mk;jo=2UnBxV$l>3$2#M)H1*Pw+KF!l4 zcN+YalAsiU_ac?PrnpByrZ7L`X;S2a;FF%?$y7ZCea*B&MbQIa@Xjt&e%UH3e0^C; z^ejzf11sm=R9#k3Q|cN;(Y7ym+(k+yxke!>Dy{g?(1_1qHLz-AIjofERhs?QR#}PS zfR#6Ik#aS}DFQIht5~^)Tw@3=dYIHr4q77#Qf(sHYxV_|O4wTl{K3CT!Cu=QR9eD* z%z}b9soCp=L8U_0<0Rvepmh#bc^|8^-5*%BSweQqA$EB?yM#6<`;46uv!Rc@fe4y2 z$QHyDwUD|SLED|IIqm)`OoQ&ji>ZKMgTE{IFsbtkhTs(tjKXt(#@l3NtvCB`Fhdkp zg~9&`v;V)${)*V5qojPcKBrip6TmG2O)9xG27INVhy6M4Smo0s)SsuGgJ;dIE?DA{YP4ATG z5}Gfv3#~>z(KjXf2>76k;F}JRN&)9!Q^ z^x?-&L%L}GXK6izl_fqQEAG%d&<}K=Y~eLoalfosTB5jWOtk{mfFUSN5_C+!KWX(ZwQ_$~i;>sDPa#nv;4lU3bibfSW#T_b zev0CCu(MLU0Rub3&y@}SmCmRql;VF0f()5OcSuGk)!szKsJ#hU15|q}!TelLlI){O zM)*BS3o314MQMUv4}P3#4$(=BC=?EuW+gVMq$T)7q2JFWW4{=h$Xk7^)t)9&a)|vF zY9a?z*^l_8#FSE6$5{R6NP>F|Fe*3drBfkTtO57gU8SPtG~ThWg6`8Mn6(K8-PB?Flwtb24tC}M1O7HzR!buWF#do=49sOK5SBC#b4kkt z;4%gzRyUM6;+%2!p2P_zbX($N<6t)}II%VT!sT>l6kP0=aqV!%;*zr09^O1JDt_}} z@kDd|Qrjn2miC{$^35j~FU^BU!F$fbR03s# zF=;&>$oRK?0lFtqwG-xPf96BfPhzLQgw3RGjY7E4O5a0)1uX%2WeCVDV=5COIa*~x zmVjB3P%5g`)J-SpQpcZvFkUPdFw1f>eKn_H(!bw9UyMP&F`~GF4Y1Bc zKeJ_>JaroXiWY$=ASt>FDiz+-Y$Rov6W-IeGTQz?dB?T6PH@9-oN$8{Z%VFLtFEk>vEf$a+{lTn@zc@ z=GGm}Z9AIHyPA)||2vvb>}u}V)qHAKvt?JaeOGh$uI8Ry&5m8o=g&UVo8Nqa`;7B! zZQt@M+37QQzeG;%ZjxUn}Ni_md==VZPS!*7Eih2GQf@acRz_gbzCxh*J5r1?4}G>eBZ={XQCGNL@oSC zzR)3GxM^jlG>bKrNybeQzOHlfQmWbh`78K6~~ecwx(uYlXd;C2^Tf;~6Up0$d-MZw|TVR;1gOEI--Xn!dv&a;autm!RRK#%@~*Zt+Akk&e8)O%xfoW&2~ChGaMxZ`{}}& zH#XG%qyx%Lh?Qnf2%L4bJa8JOM z25E?6KF3Y<1NG0i^^F33z zRFWSU(md_Z_FQAlqGrZCy*&>m5q&qhL+%4IXuT~mKmpgI3{2{bzQ@s|UCiAbPnL1) z1wDQ<%Q&Z9&KZ}})eJ(0YNE~|sB0(kPx2lvoE(>Bg&Q#RcM@pl6Lk+d=k10&NT`c} zl;~ohC{{OR{nwmvvixIqk!{W}Xl9NA%>>IlnrV++$XR-=bHVxQ1*h!u&$~2J2Agg~ zQJN`&Kr_VwZ4tL2UQx!WRz1+;S6s%aaXGavXU7X5WK7g4gpEm(#V2{&HE|_bR@hb` z%|1_*mmlLE09^bvX0P;&veD4T23oqHhTGW9<)%-Gd zF!VM0dR~TZJ&h!-3yVf_wVvsEhaRqpgSgN-tBO zdr_~rC4DrYZ-aJL?M;q-l|iC}A5_5QqC(wDxYu-`=A_r~|10h69SW-%C2O`6y zPf&aeR&vL{m1W%)62?HV{d0R;)ipnFQ6MPQl_w>3@Ff&Hhu$f7avJ@jy+Nry(1eug zVb5I^1`U~RCi#2oqi480UJpw3XIu5%F5knr=QOQ2-RSg#dw21ZO^3sW;*&`S(B*S1 z(o>6(cwL9Y>v@|%y#7Y>B8MBQXlBM6&G&^je2UAA%k|~cBi5r=&Apm2eezk|muC&h zTG@ki>4MIzxDQHK-oP0cJKVHi%i~P54r-tm(ed^pZIq)>^dL*2{zYzA-ceQ!*T65p z7n%J548ZMeXY&-RLf60jWV_&0v~s^Tr$!k#s~pLNbHy_h#=7YP zy;q0lIyU8nKjYuX_H7m`d)BnIaxu9-C{;KpQ(_`P?fynCsGxS)s@V>g_==3I@D#hmmR(R5vXJz$<@N%#O{s)r<|+3zjrcRB@U_AQ)Qx2z=Xyic8^>q^}` z$3NzU=LQV1S!v=!J!?*UF+9()EpN_^K1a{^?DHN!?;dj!sOG1-xKA1Ee;~8ZKJT-@ zP1}xx!t-b9tNPN!+MfBkvXZ%}qDA4!!q7KE;;NJWT7PT$Yo=_M<1uTtUNr>2`Uze+ z%a8-a02WavB3)r}uH6kKRIR2d=vr(o~eA^%>-WHVlQqg@4+g%m_U_(BsXO&t-4$4K2lmW zQtEzBTXj$8e!p9BXUa(fq)Nf;E)rGB0?B>Fo3RMxO6DxvI1xYIYHvxyB7QPHzl%it zTtVzMPQ>4wN>Q#Bl53v|P5lHwpm8TC*XCq8**cx@SeSsITn(*o8y>l4blBhQhEc9s z*`rXd&1neb%JZ58 zz?WI?X|UQ;a1i!t-Q^oM3P_BYe zK)K%FP_Caou%KK87Lu#VjB@41|7X;dwkTI}i||XpC|4jJS)*L-Bv{0M;mE7J%0KIP zt3kw%?=holxrYBs|m?fg;1`}@kGSW?aY5_GL-A}qr10NNrUUc=4BM+dcVeJOFTunUU%4|mJpO{;dVpW^cP$)%2ihZC|4ziay64&rOqlO;!nv) zF^l*ajB;J8b4MswEkU`q!3lFH*8^Mz*wC*M@waAcG0OFvUr3vM6hXPRgAN>1qcBuE4V7xqJr4p zV`YETanX3XDtS~ZS%K-Q3va<5G@EeDkw3$!G zPqXmpaPypw-Ohc&gAZOmKiYeAM!m!f~ok zQe&5h>a!l=Z2)!8p{aPk=724r4(}Bz8UYDt#ng}0-upN}-9i2&fI4jz(uE#~?SNl0 z#eW&{hv-7NZo(o!UAh