Posts under Spatial Computing topic

Post

Replies

Boosts

Views

Activity

Immersive space closes if immersive environment was fully open
If the immersive environment is fully open, then an immersive space is closed right after attempting to open it. The issue specifically impacts a mixed immersive space which replaces the immersive environment while the immersive environment is at 100%. This issue does not occur if immersive environment is any less than 100%, or if the immersionStyle is .full, or if immersiveEnvirionmentBehavior is .coexist. This can be reproduced in the template for an immersive visionOS app by removing the line .immersionStyle(selection: .constant(.full), in: .full) Then run the app and open the immersive space, and the space then closes after attempting to open it. I’m using visionOS 27.0 beta 5 and Xcode 27.0 beta 5. I've submitted feedback as FB24353599 Video of the behavior: https://youtu.be/wafDXRZVyog
1
0
1.1k
Aug ’26
AR Quick Look renders USDZ rectangle as oval on newer iPhones
I’m using AR Quick Look via (I dont know what this means) for a web-based art catalogue. (I generate usdz in a script on github and display The same USDZ behaves differently: iPhone 6 — iOS 12.5.8: renders correctly as a rectangular painting. iPhone 12 — current iOS: renders as an oval, with no visible thickness. The USDZ renders correctly as a rectangle with thickness in other web/USD viewers. Geometry is explicitly rectangular with two triangular faces, UVs, normals and physical dimensions. Is there a known AR Quick Look / RealityKit compatibility issue with simple textured rectangular USDZ meshes on newer iOS versions? // I have no background in coding but this seems to be a bug on the latest quicklook software?? github here if it helps: https://github.com/mrkritor-ui/KRITOR
1
0
852
Aug ’26
Xicap new spatial accessory under development
Hi Everyone, we've started working on the Xicap tag, a new general purpose active spatial accessory puck for the Vision Pro here at Xikaku. It can be attached to any type of rigid object or will work as a wearable device. We're adding customizable buttons and IO ports for switches etc. to make it versatile for all kinds of tracking applications. I created an intro on our blog with some more info: https://xikaku.com/blog/xicap-vision-pro-spatial-accessory Happy to receive any kind of feedback or comments so we can kepp that in mind while finalizing the device. Klaus
0
0
407
Aug ’26
A ClothGrabComponent movement problem
I'm building a Wacom tablet-driven cloth editing rig in visionOS: a persistent grab sphere (one Entity with ClothGrabComponent, volume mode) parented to the simulation root, toggled with isGrabbing on each pen-down. A single grab behaves correctly — the cloth follows the sphere, nothing else moves. On the second grab at a different position (same cloth, no rebuild), the component keeps dragging the particles from the FIRST grab to the new sphere position — its internal grab coordinates are not updated by the new activation. The vertex that was just bound is pushed away from the sphere at the same time. Instrumented demo is (0.5 × 0.5 m grid, 289 vertices, four corners pinned, gravity = 0, sphere radius 0.06, falloff = .disabled), grab A at vertex #294 (−0.118, +0.118), release, then grab B at vertex #105 (+0.118, −0.118) — 0.335 m apart: t = 345.9 GRAB_B starts: previous #294 disp = 0.000 dist-to-ball = 0.335 current #105 disp = 0.000 dist-to-ball = 0.000 t = 346.4 (+0.5 s): previous #294 disp = 0.335 dist-to-ball = 0.000 ← dragged to the NEW ball current #105 disp = 0.191 dist-to-ball = 0.191 ← pushed AWAY from the ball t = 347.0 … 349.6 previous #294 pinned at ball (dist 0.000), #105 held away at 0.16–0.19 t = 351.9 after release: #294 back to rest (0.012), cloth flat again The 0.335 m displacement of #294 happens within half a second and equals exactly the distance from #294's rest position to the new sphere — the previous grab's particle set is being pulled toward the new sphere location, as if the component re-applied the old grab selection with the new transform. this can repeat with identical numbers. The docs for isGrabbing only say "Indicates whether particles are currently being grabbed" — they don't describe what happens on a false→true transition after the entity has moved, which is the case the official sample never demonstrates. The setup is the one shown in the official sample — a persistent entity carrying the grab component, isGrabbing toggled per interaction: // makeCloth — once let dragBall = makeBall(radius: 0.015, parent: simRoot) var grab = ClothGrabComponent(mode: .volume(shape: .sphere(ClothSphereShape(radius: 0.06)))) grab.falloff = .disabled dragBall.components.set(grab) // grab: move ball to new vertex, activate dragBall.position = body.convert(position: vertexPos, to: simRoot) var g = dragBall.components[ClothGrabComponent.self]! g.isGrabbing = true dragBall.components.set(g) // release: deactivate only var g = dragBall.components[ClothGrabComponent.self]! g.isGrabbing = false dragBall.components.set(g) some tries: Remove and re-add ClothGrabComponent on each grab — the simulator crashes within 1–2 frames with Assertion failed Rebuild the whole ClothBodyComponent between grabs Environment: Xcode 27 beta (build 24M5316i), xrOS 27.0 SDK, simulator runtime com.apple.CoreSimulator.SimRuntime.xrOS-27-0 (avp1). All Cloth* APIs are Beta on visionOS 27
1
0
1.1k
Aug ’26
RealityKit portal crossing leaves a hard PBR lighting seam despite environmentLightingWeight being 0
I’m seeing a device-only lighting discontinuity on PBR entities that intersect a RealityKit portal plane in visionOS 27. A sharp brightness boundary appears exactly where the portal plane cuts through the entity. The portion outside the portal receives a different physical environment-probe contribution from the portion inside. The behavior is reproducible with two independent cases: A completely static blue sphere positioned across the portal plane. An orange sphere moved through the portal using ManipulationComponent and the standard visionOS pinch gesture. Both spheres use: var material = PhysicallyBasedMaterial() material.baseColor = .init(tint: .orange) material.metallic = 0 material.roughness = 1 Each sphere has the crossing and lighting components attached directly: sphere.components.set(PortalCrossingComponent()) sphere.components.set( ImageBasedLightReceiverComponent( imageBasedLight: portalImageBasedLight ) ) var lightingConfiguration = EnvironmentLightingConfigurationComponent() lightingConfiguration.environmentLightingWeight = 0 sphere.components.set(lightingConfiguration) The portal is created using the visionOS 27 factory API: let portal = PortalComponent.makePortal( surfaceStyle: .init(width: 1.2, height: 0.8), boundaryStyle: .infinitePlane(), boundaryMode: .clippingAndCrossing ) if var component = portal.portalEntity.components[PortalComponent.self] { component.lightingBlendDistance = 0.2 portal.portalEntity.components.set(component) } For the moving sphere, environmentLightingWeight stays at 0 for the entire interval in which any part of the sphere intersects the portal. The realtime environment-probe contribution only begins fading from 0 to 1 after the complete sphere has cleared the plane. However, a spatially sharp edge remains: In a bright physical environment, the outside portion is brighter. In a dark physical environment, the outside portion is darker. With UnlitMaterial, the edge disappears completely. With PBR—even metallic 0 and roughness 1—the edge returns. The static sphere reproduces the issue, so it does not appear to be caused by gesture or lighting-update timing. Changing lightingBlendDistance does not soften this remaining edge. The issue is visible on Apple Vision Pro but not in visionOS Simulator. I watched the portal-lighting section of WWDC24 session 10103 and implemented the recommended EnvironmentLightingConfigurationComponent solution. I have also reviewed the documentation for PortalComponent, PortalCrossingComponent, PortalComponent.makePortal, ImageBasedLightReceiverComponent, and environmentLightingWeight. Is there another component or entity-hierarchy requirement needed to fully suppress the physical environment probe on the host-side fragments of a crossing PBR entity? Or is this a RealityKit rendering issue on physical hardware? Environment: Apple Vision Pro (M5) visionOS 27.0 (24M5326g) Xcode 27.0 (27A5228h) visionOS SDK 27.0 (24M5326e) Here is a minimal standalone Xcode reproduction containing both the static and pinch-draggable spheres: https://drive.google.com/file/d/13qqOlDJVCCtlFcMaHCBpDkVJgRzmNjBK/view?usp=sharing
3
0
2.0k
Aug ’26
AIVU 180 video suddenly got too laggy
Why do I play an AIVU 180 degree video, which has always been able to play smoothly, and then suddenly played too laggy recently? The video is embedded locally, without network factors, and the video parameters and program code have not changed at all. I also tested playing videos around 400m in size, and the CPU displayed 400-500%, but it was very smooth. When playing a video of 1G or so, the clip is 20-30%, but it is too laggy. Except for the different video duration, other parameters are the same. May I ask what caused the lag.
1
0
990
Aug ’26
Apple Cinema Environment
I’d be very interested in having Apple Cinema Environment deployed across all third party apps (I.e Disney+, HBO Max, etc). These already have their immersive environments as well as the option to use Apple’s immersive environments (i.e the Moon). However the Apple Cinema / Theater is the best implementation I’ve seen thus far however its currently limited to the AppleTV content. Are there any plans to deploy this across other apps?
1
0
1.1k
Aug ’26
GeometricPins not updating on entities loaded from reality files
I'm attempting to create GeometricPins on an entity so I can attach objects to game characters. If I load a character from the USD file I can query the joint names on the ModelEntity and create GeometricPins as attachment points. These pins will track the location of the associated joint and I can position my objects at the pin locations as expected. However, the pins do not update on characters loaded from a Reality File. In the below image, the Skeleton Mage character in the middle is loaded as a USDC file and I attach the hat with a GeometricPin so that it tracks the movement of the head as it animates. The animating Skeleton to the left is the same character (same .usdc file) but exported from RCP3 as a Reality File. Notice how the hat does not move with the character's head. The position and orientation of the GeometricPins attached to this character always return nil. I've also noticed that the jointNames array is empty for this entity as well. Should I be able to access the jointNames and create Geometric pins on entities loaded from Reality files? I'm adding the pin to the model entity with the following helper function. The helper function is called in the exact same way for the usd and reality entities. func pinToJoint(_ entity: Entity, to target: Entity, at jointName: String, offset: SIMD3<Float> = .zero, orientation: simd_quatf = .init(angle: 0, axis: [0,1,0])) { let pinName = "pin_at_\(jointName)" if let rig:ModelEntity = target.findModelEntity() { for jointName in rig.jointNames { log.info("\(target.name): \(jointName)") } rig.pins.set(named: pinName, skeletalJointName: jointName, position: offset, orientation: simd_quatf(angle: -.pi/2.0, axis: .init(1,0,0))) entity.components.set( PinnedEntityComponent( pinnedto: rig, pinName: pinName, ) ) } } The PinnedEntitySystem just assigns the location of the pin to the entity with the following guard let pinPosition = pin.position(relativeTo: nil) else { continue } guard let pinOrientation = pin.orientation(relativeTo: nil) else { continue } entity.setPosition( pinPosition , relativeTo: nil) entity.setOrientation( pinOrientation , relativeTo: nil)
4
1
1.2k
Aug ’26
VisionOS 27 Custom Spatial Accessories ASA Host Version remains 0.0
I am implementing a custom generic spatial accessory according to Section 20 of the Accessory Design Guidelines dated 2026-06-08. Apple Vision Pro discovers the accessory, completes BLE pairing and encryption, reads the Apple Spatial Accessory Version and Uniform Type Identifiers characteristics, and recognizes the device in the accessory tracking debug view. However, visionOS writes ASA protocol version 00.00 to the Apple Spatial Accessory Host Version characteristic instead of selecting version 01.01. Here is the log message when I connected my spatial accessory with apple vision pro with os27 beta 3. The error is the ASA part. BLE advertising: ZemScannerASA15; BLE ATT MTU tx=23,rx=23; BLE conn timing connected: interval=30000; us,latency=0,timeout=72; TimeSync anchor report enabled: h=0x011f; BLE connected TimeSync anchor #1 ce=0,int=30000,delay=0 TimeSync anchor #2 ce=3,int=30000,delay=0 TimeSync anchor #3 ce=4,int=30000,delay=0 BLE ATT MTU tx=293,rx=65 BLE security level 2 BLE pairing complete, bonded ASA version read #1 off=0 req=64 hex=02 01 01 01 01 ASA UTI read #2 off=0 req=64 total=49 ASA host wr #3 o=0 l=4 f=00 hex=00 00 01 31 ASA host raw: off=0,write=4,total=4,hex=00 00 01 31 ASA host version: >len=4,ver=0.0,features_len=1,features=0x31 ASA host selected no common protocol HID direct input report sent HID notif #4 report=3 enabled HID IMU stream started HID notif #5 report=2 enabled HID IMU report sent BLE conn params updated: interval=7500 us,latency=4,timeout=100
5
0
1.3k
Aug ’26
RoomPlan/LiDAR best practices for scanning ~3,000 sq ft: Single scan, segmented scans, or based on scanned area?
I have a few questions about the recommended approach: Should a large area like this be scanned in a single RoomCaptureSession, or is it recommended to split it into multiple sessions? If multiple sessions are preferred, should the decision be based on the device's available RAM/memory or the size of the scanned area (square footage)? Is there a recommended maximum square footage, number of rooms, or session duration for a single RoomCaptureSession? Are there any documented limitations or best practices for handling large-area scans with RoomPlan? I'm looking for the recommended approach from the RoomPlan/ARKit developer for managing large scans efficiently.
1
0
826
Aug ’26
VisionOS RCP The model fades in and incorrectly displays the model outline on the UI
There is a UI panel with Attachment added in my scene. There are other models in the scene, and when the model fades in using OpacityComponent, the UI panel incorrectly displays the outline of the model, as shown in the red box in the picture. The model fade in code is like this: public func FadeInEntity( entity:Entity, duration: TimeInterval = 1.0, completion: (() -> Void)? = nil ) { entity.stopAllAnimations() if entity.components[OpacityComponent.self] == nil { entity.components.set(OpacityComponent(opacity: 0)) } else{ entity.components[OpacityComponent.self]?.opacity = 0 } EnableEntity(entity: entity) let action = FromToByAction<Float>( from: 0, to: 1, timing: .easeInOut ) do { let anim = try AnimationResource.makeActionAnimation( for: action, duration: duration, bindTarget: .opacity ) entity.playAnimation(anim) DispatchQueue.main.asyncAfter(deadline: .now() + duration) { completion?() } } catch { completion?() } }
2
0
441
Aug ’26
VisionPro Enterprise.license file
I have read in the apple documentation and on forums that in order to access the camera and capture images on VisionPro, both an Entitlement and an Enterprise.license are required. I already have the Entitlement, but I don’t yet have the Enterprise.license. I would like to ask: is the Enterprise.license strictly required to gain camera access for capturing images? How can I obtain this file, and does it require an Enterprise account? Currently, my developer account is a regular Developer 99$, not an Enterprise account.
4
0
948
Aug ’26
How do I create Enterprise.license file?
Hello, I did get an email that I now have access to the Enterprise APIs and I should create the license file. However, I can't figure out a way to create the license file. I did go check out that button, it did have the buttons to "renew" the licenses I got a while ago (via email). but no way to create new ones. and I am enrolled in the "Apple Developer Program as an organization " Where can I create Enterprise.license file?
4
0
1.6k
Aug ’26
Null Truth error after deleting animation import
FB24108671 I have multiple animation files and characters that all share the same skeleton definition. This is required in order for the animations to be visible in the animation library. However, you can accidentally delete the import that contains the skeleton definition, this will break every animation that depends on that shared skeleton. This is silent until you attempt to play or inspect one of the remaining animations. To my knowledge, there is no indication as to which Import contains a skeleton definition nor is there a way to lock the file so that I cannot delete it. Repro Steps: Create a new RCP3 project and save the project. Import a USD file that contains a skeletal animation. Import one or more additional USD files that contains also contain skeletal animations. Note: The skeletons must match exactly between the imported USD files or they will not be available in RCP3. Verify that all imported animations have a valid target Skeleton. This is visible by clicking on an Import and expanding the Animation Settings section in the inspector. Select the skeletal animation and view the Target Skeleton field. Optional: Import a USD file that contains a character with a matching and valid skeleton. Create a new entity and reference the imported character. Add a new Animation Library and confirm that the skeletal animations appear in the list of available animations. Select one of the animations to auto play and hit the play button to simulate the animation. The animation should play. Open terminal and navigate to your saved RCP3 project. In the root of the project run the find command to locate the skeletal definition NullTruthDeletedAnimation.realitycomposerpro % find . -name '*.tm_skeleton_definition' ./animations/Running_B.import/skeletons/root_skeldef.tm_skeleton_definition Back in RCP3 delete the Import that contains the skeleton definition. In the above case, this would mean deleting RunningB.import. Save the RCP3 project. All animations that were assigned to the same Target Skeleton will now have an empty entry in the Animation Settings section of the inspector. If you created an entity earlier that referenced the animations then none of the animations that referenced the delete skeleton will play. In the console you will see an error reporting a missing timeline. ❌ GEN RESOURCE: tm_timeline_skeletal_clip object id: 00002dab0000024c - Resource generation failed. Error: Animation Timeline is missing a target skeleton If you assigned the deleted animation to this entity then it will still have an entry in the animation library but its value will be empty. After saving the project, close and reopen the RCP project. If you created an entity earlier, then open the created entity and simulate the scene. You may see the following errors. ❌ GEN RESOURCE: tm_timeline_skeletal_clip object id: 00002dab0000024c - Resource generation failed. Error: Animation Timeline is missing a target skeleton (2) ❌ error: Trying to lookup property of NULL truth object ❌ GEN RESOURCE: tm_timeline object id: 000023a700000248 - Resource generation failed. Error: Sampled USD anim - missing TM_TT_TYPE__ANIMATION dependency The GEN RESOURCE: tm_timeline_skeletal_clip object id error appears to be due to the broken animation library entry for the deleted animation. The error: Trying to lookup property of NULL truth object error appears to be the animation referencing the deleted skeleton. If you did not create an entity then you can see the errors by doing the following: Select one of the imported animations that referenced the now deleted skeleton. In the Inspector, expand the Animation Settings section. Select the skeletal animation, you will now see the following error repeating in the console. ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 59 times) ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 53 times) ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 59 times) You can fix this by importing a new animation with a valid and matching skeleton or reimporting the deleted animation. However, you MUST manually assign the Target Skeleton on each broken skeletal animation. You will also need to manually remove any animation library entries for deleted animations.
0
0
613
Aug ’26
Adding a ManipulationComponent detaches the whole RealityView content hierarchy on visionOS 27
On visionOS 27 (27.0 Seed 4, 24M5326g), adding a ManipulationComponent to a single entity makes RealityKit remove the RealityView's ENTIRE content hierarchy from the scene and re-add it about 30ms later. Not just the manipulated entity — everything. Same app binary on visionOS 26: never happens. FB24092291. Bisected on the same build and device: two entities, neither with manipulation -> no detach add one entity with a ManipulationComponent -> detach, every time same entity, manipulation swapped for my own drag/rotate/ scale gesture handling -> no detach Everything else is identical between the last two cases — same entity, same collision shape, same InputTargetComponent, same ViewAttachmentComponent, same scene, same view hierarchy. The only variable is whether the component is installed. Setup: an immersive space containing a SwiftUI RealityView. One root entity added to the RealityViewContent in the make closure; all app content built as its descendants. The detach is brief but not harmless: every entity in the hierarchy gets SceneEvents.WillRemoveEntity and then DidAddEntity, so anything keyed to those events runs a full teardown and re-add for content that was never meant to go anywhere. In my app that cascade is what makes the scene visibly empty and rebuild. Nothing in my code removes it. Stack captured from a WillRemoveEntity subscription on the root — frame 0 is my callback, everything above it is framework: SwiftUI (AttributeGraph StatefulRule.withObservation ...) -> RealityFoundation -> CoreRE -> entity removal Ruled out before landing on the component: make runs exactly once, the root re-enters a scene with the same ObjectIdentifier (not a re-host), the hosting controller is never deallocated, there is exactly one RealityViewContent.add(_:) in the whole app, and with Self._printChanges() in the view's body the detach happens in an update pass where the body is not re-evaluated at all. Also ruled out: transient overlay UI (suppressed entirely, still detached) and entity count. Workaround if this is biting you: skip ManipulationComponent on 27 and handle drag/rotate/scale yourself. That is what I am doing for now. If you are debugging something similar: SceneEvents.WillRemoveEntity also fires when an entity merely leaves a scene, so a teardown-looking log is not proof anything was destroyed. Check whether make ran twice and whether the scene identity changed before suspecting your own code.
1
2
1.5k
Aug ’26
Reality Composer Pro Assistant does not list GPT-5.6 models
First of all, great work on the new Reality Composer Pro! I'm really enjoying it. Reality Composer Pro 3.0 (build 80.0.1.500.1/beta 4) currently shows GPT-5.5 as the newest OpenAI model in the Assistant model selector. The bundled configuration appears to contain a static model catalogue and does not include: gpt-5.6-sol gpt-5.6-terra gpt-5.6-luna Could Apple update Reality Composer Pro to support the current GPT-5.6 model family, or document whether users can add supported OpenAI model identifiers through the Custom Model Provider interface? It would also be helpful to clarify whether the Assistant supports GPT-5.6's tool-calling and reasoning behavior through its current Chat Completions integration. Thanks!
2
0
978
Jul ’26
Unable to share animations across compatible skeletons in RCP3.
I’m working with an asset pack that contains multiple characters with a common skeletal hierarchy. This asset pack also contains animations for these characters as separate files. i.e.: run pick up idle throw In RCP2, I was able to add these animations to an Animation Library component without issue. However, in RCP3, I cannot add the skeletal animations to compatible characters. The only animations available are the transform animations, which do not animate the character. So in the animation library, I will see i.e.: run_transform idle_transform throw_transform But not run idle throw Is there something that I need to do to make the skeletal animations visible? I’ve tried adding the animation library at various levels across the hierarchy and it doesn’t seem to make a difference. Only the _transform animation is visible. I can verify that the animations themselves are compatible by manually editing the tm_entity for a character and adding the animation clip. I have to do this while RCP3 is closed but it works. I did notice that each animation is referencing a skeleton uuid. Is the UI only exposing skeletal animations with a matching skeleton uuid? Lastly, I can import both the character and the animation files as USD in a RealityKit app and successfully assign animations.
2
0
1.2k
Jul ’26
Immersive space closes if immersive environment was fully open
If the immersive environment is fully open, then an immersive space is closed right after attempting to open it. The issue specifically impacts a mixed immersive space which replaces the immersive environment while the immersive environment is at 100%. This issue does not occur if immersive environment is any less than 100%, or if the immersionStyle is .full, or if immersiveEnvirionmentBehavior is .coexist. This can be reproduced in the template for an immersive visionOS app by removing the line .immersionStyle(selection: .constant(.full), in: .full) Then run the app and open the immersive space, and the space then closes after attempting to open it. I’m using visionOS 27.0 beta 5 and Xcode 27.0 beta 5. I've submitted feedback as FB24353599 Video of the behavior: https://youtu.be/wafDXRZVyog
Replies
1
Boosts
0
Views
1.1k
Activity
Aug ’26
AR Quick Look renders USDZ rectangle as oval on newer iPhones
I’m using AR Quick Look via (I dont know what this means) for a web-based art catalogue. (I generate usdz in a script on github and display The same USDZ behaves differently: iPhone 6 — iOS 12.5.8: renders correctly as a rectangular painting. iPhone 12 — current iOS: renders as an oval, with no visible thickness. The USDZ renders correctly as a rectangle with thickness in other web/USD viewers. Geometry is explicitly rectangular with two triangular faces, UVs, normals and physical dimensions. Is there a known AR Quick Look / RealityKit compatibility issue with simple textured rectangular USDZ meshes on newer iOS versions? // I have no background in coding but this seems to be a bug on the latest quicklook software?? github here if it helps: https://github.com/mrkritor-ui/KRITOR
Replies
1
Boosts
0
Views
852
Activity
Aug ’26
Xicap new spatial accessory under development
Hi Everyone, we've started working on the Xicap tag, a new general purpose active spatial accessory puck for the Vision Pro here at Xikaku. It can be attached to any type of rigid object or will work as a wearable device. We're adding customizable buttons and IO ports for switches etc. to make it versatile for all kinds of tracking applications. I created an intro on our blog with some more info: https://xikaku.com/blog/xicap-vision-pro-spatial-accessory Happy to receive any kind of feedback or comments so we can kepp that in mind while finalizing the device. Klaus
Replies
0
Boosts
0
Views
407
Activity
Aug ’26
A ClothGrabComponent movement problem
I'm building a Wacom tablet-driven cloth editing rig in visionOS: a persistent grab sphere (one Entity with ClothGrabComponent, volume mode) parented to the simulation root, toggled with isGrabbing on each pen-down. A single grab behaves correctly — the cloth follows the sphere, nothing else moves. On the second grab at a different position (same cloth, no rebuild), the component keeps dragging the particles from the FIRST grab to the new sphere position — its internal grab coordinates are not updated by the new activation. The vertex that was just bound is pushed away from the sphere at the same time. Instrumented demo is (0.5 × 0.5 m grid, 289 vertices, four corners pinned, gravity = 0, sphere radius 0.06, falloff = .disabled), grab A at vertex #294 (−0.118, +0.118), release, then grab B at vertex #105 (+0.118, −0.118) — 0.335 m apart: t = 345.9 GRAB_B starts: previous #294 disp = 0.000 dist-to-ball = 0.335 current #105 disp = 0.000 dist-to-ball = 0.000 t = 346.4 (+0.5 s): previous #294 disp = 0.335 dist-to-ball = 0.000 ← dragged to the NEW ball current #105 disp = 0.191 dist-to-ball = 0.191 ← pushed AWAY from the ball t = 347.0 … 349.6 previous #294 pinned at ball (dist 0.000), #105 held away at 0.16–0.19 t = 351.9 after release: #294 back to rest (0.012), cloth flat again The 0.335 m displacement of #294 happens within half a second and equals exactly the distance from #294's rest position to the new sphere — the previous grab's particle set is being pulled toward the new sphere location, as if the component re-applied the old grab selection with the new transform. this can repeat with identical numbers. The docs for isGrabbing only say "Indicates whether particles are currently being grabbed" — they don't describe what happens on a false→true transition after the entity has moved, which is the case the official sample never demonstrates. The setup is the one shown in the official sample — a persistent entity carrying the grab component, isGrabbing toggled per interaction: // makeCloth — once let dragBall = makeBall(radius: 0.015, parent: simRoot) var grab = ClothGrabComponent(mode: .volume(shape: .sphere(ClothSphereShape(radius: 0.06)))) grab.falloff = .disabled dragBall.components.set(grab) // grab: move ball to new vertex, activate dragBall.position = body.convert(position: vertexPos, to: simRoot) var g = dragBall.components[ClothGrabComponent.self]! g.isGrabbing = true dragBall.components.set(g) // release: deactivate only var g = dragBall.components[ClothGrabComponent.self]! g.isGrabbing = false dragBall.components.set(g) some tries: Remove and re-add ClothGrabComponent on each grab — the simulator crashes within 1–2 frames with Assertion failed Rebuild the whole ClothBodyComponent between grabs Environment: Xcode 27 beta (build 24M5316i), xrOS 27.0 SDK, simulator runtime com.apple.CoreSimulator.SimRuntime.xrOS-27-0 (avp1). All Cloth* APIs are Beta on visionOS 27
Replies
1
Boosts
0
Views
1.1k
Activity
Aug ’26
RealityKit portal crossing leaves a hard PBR lighting seam despite environmentLightingWeight being 0
I’m seeing a device-only lighting discontinuity on PBR entities that intersect a RealityKit portal plane in visionOS 27. A sharp brightness boundary appears exactly where the portal plane cuts through the entity. The portion outside the portal receives a different physical environment-probe contribution from the portion inside. The behavior is reproducible with two independent cases: A completely static blue sphere positioned across the portal plane. An orange sphere moved through the portal using ManipulationComponent and the standard visionOS pinch gesture. Both spheres use: var material = PhysicallyBasedMaterial() material.baseColor = .init(tint: .orange) material.metallic = 0 material.roughness = 1 Each sphere has the crossing and lighting components attached directly: sphere.components.set(PortalCrossingComponent()) sphere.components.set( ImageBasedLightReceiverComponent( imageBasedLight: portalImageBasedLight ) ) var lightingConfiguration = EnvironmentLightingConfigurationComponent() lightingConfiguration.environmentLightingWeight = 0 sphere.components.set(lightingConfiguration) The portal is created using the visionOS 27 factory API: let portal = PortalComponent.makePortal( surfaceStyle: .init(width: 1.2, height: 0.8), boundaryStyle: .infinitePlane(), boundaryMode: .clippingAndCrossing ) if var component = portal.portalEntity.components[PortalComponent.self] { component.lightingBlendDistance = 0.2 portal.portalEntity.components.set(component) } For the moving sphere, environmentLightingWeight stays at 0 for the entire interval in which any part of the sphere intersects the portal. The realtime environment-probe contribution only begins fading from 0 to 1 after the complete sphere has cleared the plane. However, a spatially sharp edge remains: In a bright physical environment, the outside portion is brighter. In a dark physical environment, the outside portion is darker. With UnlitMaterial, the edge disappears completely. With PBR—even metallic 0 and roughness 1—the edge returns. The static sphere reproduces the issue, so it does not appear to be caused by gesture or lighting-update timing. Changing lightingBlendDistance does not soften this remaining edge. The issue is visible on Apple Vision Pro but not in visionOS Simulator. I watched the portal-lighting section of WWDC24 session 10103 and implemented the recommended EnvironmentLightingConfigurationComponent solution. I have also reviewed the documentation for PortalComponent, PortalCrossingComponent, PortalComponent.makePortal, ImageBasedLightReceiverComponent, and environmentLightingWeight. Is there another component or entity-hierarchy requirement needed to fully suppress the physical environment probe on the host-side fragments of a crossing PBR entity? Or is this a RealityKit rendering issue on physical hardware? Environment: Apple Vision Pro (M5) visionOS 27.0 (24M5326g) Xcode 27.0 (27A5228h) visionOS SDK 27.0 (24M5326e) Here is a minimal standalone Xcode reproduction containing both the static and pinch-draggable spheres: https://drive.google.com/file/d/13qqOlDJVCCtlFcMaHCBpDkVJgRzmNjBK/view?usp=sharing
Replies
3
Boosts
0
Views
2.0k
Activity
Aug ’26
AIVU 180 video suddenly got too laggy
Why do I play an AIVU 180 degree video, which has always been able to play smoothly, and then suddenly played too laggy recently? The video is embedded locally, without network factors, and the video parameters and program code have not changed at all. I also tested playing videos around 400m in size, and the CPU displayed 400-500%, but it was very smooth. When playing a video of 1G or so, the clip is 20-30%, but it is too laggy. Except for the different video duration, other parameters are the same. May I ask what caused the lag.
Replies
1
Boosts
0
Views
990
Activity
Aug ’26
Apple Cinema Environment
I’d be very interested in having Apple Cinema Environment deployed across all third party apps (I.e Disney+, HBO Max, etc). These already have their immersive environments as well as the option to use Apple’s immersive environments (i.e the Moon). However the Apple Cinema / Theater is the best implementation I’ve seen thus far however its currently limited to the AppleTV content. Are there any plans to deploy this across other apps?
Replies
1
Boosts
0
Views
1.1k
Activity
Aug ’26
GeometricPins not updating on entities loaded from reality files
I'm attempting to create GeometricPins on an entity so I can attach objects to game characters. If I load a character from the USD file I can query the joint names on the ModelEntity and create GeometricPins as attachment points. These pins will track the location of the associated joint and I can position my objects at the pin locations as expected. However, the pins do not update on characters loaded from a Reality File. In the below image, the Skeleton Mage character in the middle is loaded as a USDC file and I attach the hat with a GeometricPin so that it tracks the movement of the head as it animates. The animating Skeleton to the left is the same character (same .usdc file) but exported from RCP3 as a Reality File. Notice how the hat does not move with the character's head. The position and orientation of the GeometricPins attached to this character always return nil. I've also noticed that the jointNames array is empty for this entity as well. Should I be able to access the jointNames and create Geometric pins on entities loaded from Reality files? I'm adding the pin to the model entity with the following helper function. The helper function is called in the exact same way for the usd and reality entities. func pinToJoint(_ entity: Entity, to target: Entity, at jointName: String, offset: SIMD3<Float> = .zero, orientation: simd_quatf = .init(angle: 0, axis: [0,1,0])) { let pinName = "pin_at_\(jointName)" if let rig:ModelEntity = target.findModelEntity() { for jointName in rig.jointNames { log.info("\(target.name): \(jointName)") } rig.pins.set(named: pinName, skeletalJointName: jointName, position: offset, orientation: simd_quatf(angle: -.pi/2.0, axis: .init(1,0,0))) entity.components.set( PinnedEntityComponent( pinnedto: rig, pinName: pinName, ) ) } } The PinnedEntitySystem just assigns the location of the pin to the entity with the following guard let pinPosition = pin.position(relativeTo: nil) else { continue } guard let pinOrientation = pin.orientation(relativeTo: nil) else { continue } entity.setPosition( pinPosition , relativeTo: nil) entity.setOrientation( pinOrientation , relativeTo: nil)
Replies
4
Boosts
1
Views
1.2k
Activity
Aug ’26
VisionOS 27 Custom Spatial Accessories ASA Host Version remains 0.0
I am implementing a custom generic spatial accessory according to Section 20 of the Accessory Design Guidelines dated 2026-06-08. Apple Vision Pro discovers the accessory, completes BLE pairing and encryption, reads the Apple Spatial Accessory Version and Uniform Type Identifiers characteristics, and recognizes the device in the accessory tracking debug view. However, visionOS writes ASA protocol version 00.00 to the Apple Spatial Accessory Host Version characteristic instead of selecting version 01.01. Here is the log message when I connected my spatial accessory with apple vision pro with os27 beta 3. The error is the ASA part. BLE advertising: ZemScannerASA15; BLE ATT MTU tx=23,rx=23; BLE conn timing connected: interval=30000; us,latency=0,timeout=72; TimeSync anchor report enabled: h=0x011f; BLE connected TimeSync anchor #1 ce=0,int=30000,delay=0 TimeSync anchor #2 ce=3,int=30000,delay=0 TimeSync anchor #3 ce=4,int=30000,delay=0 BLE ATT MTU tx=293,rx=65 BLE security level 2 BLE pairing complete, bonded ASA version read #1 off=0 req=64 hex=02 01 01 01 01 ASA UTI read #2 off=0 req=64 total=49 ASA host wr #3 o=0 l=4 f=00 hex=00 00 01 31 ASA host raw: off=0,write=4,total=4,hex=00 00 01 31 ASA host version: >len=4,ver=0.0,features_len=1,features=0x31 ASA host selected no common protocol HID direct input report sent HID notif #4 report=3 enabled HID IMU stream started HID notif #5 report=2 enabled HID IMU report sent BLE conn params updated: interval=7500 us,latency=4,timeout=100
Replies
5
Boosts
0
Views
1.3k
Activity
Aug ’26
RoomPlan/LiDAR best practices for scanning ~3,000 sq ft: Single scan, segmented scans, or based on scanned area?
I have a few questions about the recommended approach: Should a large area like this be scanned in a single RoomCaptureSession, or is it recommended to split it into multiple sessions? If multiple sessions are preferred, should the decision be based on the device's available RAM/memory or the size of the scanned area (square footage)? Is there a recommended maximum square footage, number of rooms, or session duration for a single RoomCaptureSession? Are there any documented limitations or best practices for handling large-area scans with RoomPlan? I'm looking for the recommended approach from the RoomPlan/ARKit developer for managing large scans efficiently.
Replies
1
Boosts
0
Views
826
Activity
Aug ’26
VisionOS RCP The model fades in and incorrectly displays the model outline on the UI
There is a UI panel with Attachment added in my scene. There are other models in the scene, and when the model fades in using OpacityComponent, the UI panel incorrectly displays the outline of the model, as shown in the red box in the picture. The model fade in code is like this: public func FadeInEntity( entity:Entity, duration: TimeInterval = 1.0, completion: (() -> Void)? = nil ) { entity.stopAllAnimations() if entity.components[OpacityComponent.self] == nil { entity.components.set(OpacityComponent(opacity: 0)) } else{ entity.components[OpacityComponent.self]?.opacity = 0 } EnableEntity(entity: entity) let action = FromToByAction<Float>( from: 0, to: 1, timing: .easeInOut ) do { let anim = try AnimationResource.makeActionAnimation( for: action, duration: duration, bindTarget: .opacity ) entity.playAnimation(anim) DispatchQueue.main.asyncAfter(deadline: .now() + duration) { completion?() } } catch { completion?() } }
Replies
2
Boosts
0
Views
441
Activity
Aug ’26
VisionPro Enterprise.license file
I have read in the apple documentation and on forums that in order to access the camera and capture images on VisionPro, both an Entitlement and an Enterprise.license are required. I already have the Entitlement, but I don’t yet have the Enterprise.license. I would like to ask: is the Enterprise.license strictly required to gain camera access for capturing images? How can I obtain this file, and does it require an Enterprise account? Currently, my developer account is a regular Developer 99$, not an Enterprise account.
Replies
4
Boosts
0
Views
948
Activity
Aug ’26
How do I create Enterprise.license file?
Hello, I did get an email that I now have access to the Enterprise APIs and I should create the license file. However, I can't figure out a way to create the license file. I did go check out that button, it did have the buttons to "renew" the licenses I got a while ago (via email). but no way to create new ones. and I am enrolled in the "Apple Developer Program as an organization " Where can I create Enterprise.license file?
Replies
4
Boosts
0
Views
1.6k
Activity
Aug ’26
Null Truth error after deleting animation import
FB24108671 I have multiple animation files and characters that all share the same skeleton definition. This is required in order for the animations to be visible in the animation library. However, you can accidentally delete the import that contains the skeleton definition, this will break every animation that depends on that shared skeleton. This is silent until you attempt to play or inspect one of the remaining animations. To my knowledge, there is no indication as to which Import contains a skeleton definition nor is there a way to lock the file so that I cannot delete it. Repro Steps: Create a new RCP3 project and save the project. Import a USD file that contains a skeletal animation. Import one or more additional USD files that contains also contain skeletal animations. Note: The skeletons must match exactly between the imported USD files or they will not be available in RCP3. Verify that all imported animations have a valid target Skeleton. This is visible by clicking on an Import and expanding the Animation Settings section in the inspector. Select the skeletal animation and view the Target Skeleton field. Optional: Import a USD file that contains a character with a matching and valid skeleton. Create a new entity and reference the imported character. Add a new Animation Library and confirm that the skeletal animations appear in the list of available animations. Select one of the animations to auto play and hit the play button to simulate the animation. The animation should play. Open terminal and navigate to your saved RCP3 project. In the root of the project run the find command to locate the skeletal definition NullTruthDeletedAnimation.realitycomposerpro % find . -name '*.tm_skeleton_definition' ./animations/Running_B.import/skeletons/root_skeldef.tm_skeleton_definition Back in RCP3 delete the Import that contains the skeleton definition. In the above case, this would mean deleting RunningB.import. Save the RCP3 project. All animations that were assigned to the same Target Skeleton will now have an empty entry in the Animation Settings section of the inspector. If you created an entity earlier that referenced the animations then none of the animations that referenced the delete skeleton will play. In the console you will see an error reporting a missing timeline. ❌ GEN RESOURCE: tm_timeline_skeletal_clip object id: 00002dab0000024c - Resource generation failed. Error: Animation Timeline is missing a target skeleton If you assigned the deleted animation to this entity then it will still have an entry in the animation library but its value will be empty. After saving the project, close and reopen the RCP project. If you created an entity earlier, then open the created entity and simulate the scene. You may see the following errors. ❌ GEN RESOURCE: tm_timeline_skeletal_clip object id: 00002dab0000024c - Resource generation failed. Error: Animation Timeline is missing a target skeleton (2) ❌ error: Trying to lookup property of NULL truth object ❌ GEN RESOURCE: tm_timeline object id: 000023a700000248 - Resource generation failed. Error: Sampled USD anim - missing TM_TT_TYPE__ANIMATION dependency The GEN RESOURCE: tm_timeline_skeletal_clip object id error appears to be due to the broken animation library entry for the deleted animation. The error: Trying to lookup property of NULL truth object error appears to be the animation referencing the deleted skeleton. If you did not create an entity then you can see the errors by doing the following: Select one of the imported animations that referenced the now deleted skeleton. In the Inspector, expand the Animation Settings section. Select the skeletal animation, you will now see the following error repeating in the console. ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 59 times) ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 53 times) ❌ error: Trying to lookup property of NULL truth object ❌ (previous error repeated 59 times) You can fix this by importing a new animation with a valid and matching skeleton or reimporting the deleted animation. However, you MUST manually assign the Target Skeleton on each broken skeletal animation. You will also need to manually remove any animation library entries for deleted animations.
Replies
0
Boosts
0
Views
613
Activity
Aug ’26
Adding a ManipulationComponent detaches the whole RealityView content hierarchy on visionOS 27
On visionOS 27 (27.0 Seed 4, 24M5326g), adding a ManipulationComponent to a single entity makes RealityKit remove the RealityView's ENTIRE content hierarchy from the scene and re-add it about 30ms later. Not just the manipulated entity — everything. Same app binary on visionOS 26: never happens. FB24092291. Bisected on the same build and device: two entities, neither with manipulation -> no detach add one entity with a ManipulationComponent -> detach, every time same entity, manipulation swapped for my own drag/rotate/ scale gesture handling -> no detach Everything else is identical between the last two cases — same entity, same collision shape, same InputTargetComponent, same ViewAttachmentComponent, same scene, same view hierarchy. The only variable is whether the component is installed. Setup: an immersive space containing a SwiftUI RealityView. One root entity added to the RealityViewContent in the make closure; all app content built as its descendants. The detach is brief but not harmless: every entity in the hierarchy gets SceneEvents.WillRemoveEntity and then DidAddEntity, so anything keyed to those events runs a full teardown and re-add for content that was never meant to go anywhere. In my app that cascade is what makes the scene visibly empty and rebuild. Nothing in my code removes it. Stack captured from a WillRemoveEntity subscription on the root — frame 0 is my callback, everything above it is framework: SwiftUI (AttributeGraph StatefulRule.withObservation ...) -> RealityFoundation -> CoreRE -> entity removal Ruled out before landing on the component: make runs exactly once, the root re-enters a scene with the same ObjectIdentifier (not a re-host), the hosting controller is never deallocated, there is exactly one RealityViewContent.add(_:) in the whole app, and with Self._printChanges() in the view's body the detach happens in an update pass where the body is not re-evaluated at all. Also ruled out: transient overlay UI (suppressed entirely, still detached) and entity count. Workaround if this is biting you: skip ManipulationComponent on 27 and handle drag/rotate/scale yourself. That is what I am doing for now. If you are debugging something similar: SceneEvents.WillRemoveEntity also fires when an entity merely leaves a scene, so a teardown-looking log is not proof anything was destroyed. Check whether make ran twice and whether the scene identity changed before suspecting your own code.
Replies
1
Boosts
2
Views
1.5k
Activity
Aug ’26
Reality Composer Pro Assistant does not list GPT-5.6 models
First of all, great work on the new Reality Composer Pro! I'm really enjoying it. Reality Composer Pro 3.0 (build 80.0.1.500.1/beta 4) currently shows GPT-5.5 as the newest OpenAI model in the Assistant model selector. The bundled configuration appears to contain a static model catalogue and does not include: gpt-5.6-sol gpt-5.6-terra gpt-5.6-luna Could Apple update Reality Composer Pro to support the current GPT-5.6 model family, or document whether users can add supported OpenAI model identifiers through the Custom Model Provider interface? It would also be helpful to clarify whether the Assistant supports GPT-5.6's tool-calling and reasoning behavior through its current Chat Completions integration. Thanks!
Replies
2
Boosts
0
Views
978
Activity
Jul ’26
Unable to share animations across compatible skeletons in RCP3.
I’m working with an asset pack that contains multiple characters with a common skeletal hierarchy. This asset pack also contains animations for these characters as separate files. i.e.: run pick up idle throw In RCP2, I was able to add these animations to an Animation Library component without issue. However, in RCP3, I cannot add the skeletal animations to compatible characters. The only animations available are the transform animations, which do not animate the character. So in the animation library, I will see i.e.: run_transform idle_transform throw_transform But not run idle throw Is there something that I need to do to make the skeletal animations visible? I’ve tried adding the animation library at various levels across the hierarchy and it doesn’t seem to make a difference. Only the _transform animation is visible. I can verify that the animations themselves are compatible by manually editing the tm_entity for a character and adding the animation clip. I have to do this while RCP3 is closed but it works. I did notice that each animation is referencing a skeleton uuid. Is the UI only exposing skeletal animations with a matching skeleton uuid? Lastly, I can import both the character and the animation files as USD in a RealityKit app and successfully assign animations.
Replies
2
Boosts
0
Views
1.2k
Activity
Jul ’26