iOS 14 change in performance cost of SCNNode creation

Code that has been working for many months including on iOS 14 beta builds became unusable with the release of iOS 14. In the past the performance cost of creating a SCNNode was small enough that I could use its many transform properties as a convenience tool for converting between quaternions and Euler angles, among other things, at runtime. After the release of iOS 14, the cost grew dramatically, slowing my app frame rate to <20 fps down from 60-120 fps. I have found mathematical solutions to replace my usage of SCNNodes but it seems like there are plenty of circumstances that could not be solved so readily.

Replies

This might be caused by the shader compiler performance bug in SceneKit in iOS 14. Shader compilation when adding nodes to a scene can be 100x slower in iOS 14 than in iOS 13. See https://developer.apple.com/forums/thread/659856 for more about this.

You can use the Xcode Instruments tool with the SceneKit profiling template to profile your app to take a look at the shader compile times. After you start then stop an Instruments SceneKit recording session, tap SceneKit Application > Frames above the lower window pane and change it to Events. Then type "compile" in the Input Filter control to limit the list to shader compile events. Normal (i.e., iOS 13) compile times for our app are around 1-2 ms but in iOS 14, compile times may be more like 100-200 ms.

Even if shader compiling is not your problem, Instruments may give you some insight into what else may be going on.
I ended up removing my SCNNodes instantiations finding another way to handle my situation, but I have also found that I have problems modifying a node's transform while a UIKit animation is running. It seems to cause a one-second delay in my fps every second or so, even when the node in question is not visible. I tried out the SceneKit profiling as you suggested, but at least with my current setup I am not seeing any compile events, and no clear other culprits in the event durations.