安装
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-scenekit-ref
- SceneKit API Reference & Migration Mapping
- Complete API reference for SceneKit with RealityKit equivalents for every major concept.
- When to Use This Reference
- Use this reference when:
- Looking up SceneKit → RealityKit API equivalents during migration
- Checking specific SceneKit class properties or methods
- Planning which SceneKit features have direct RealityKit counterparts
- Understanding architectural differences between scene graph and ECS
- Part 1: SceneKit → RealityKit Concept Mapping
- Core Architecture
- SceneKit
- RealityKit
- Notes
- SCNScene
- RealityViewContent
- /
- Entity
- (root)
- RealityKit scenes are entity hierarchies
- SCNNode
- Entity
- Lightweight container in both
- SCNView
- RealityView
- (SwiftUI)
- ARView
- for UIKit on iOS
- SceneView
- (SwiftUI)
- RealityView
- SceneView deprecated iOS 26
- SCNRenderer
- RealityRenderer
- Low-level Metal rendering
- Node properties
- Components
- ECS separates data from hierarchy
- SCNSceneRendererDelegate
- System
- /
- SceneEvents.Update
- Frame-level updates
- .scn
- files
- .usdz
- /
- .usda
- files
- Convert with
- xcrun scntool
- Geometry & Rendering
- SceneKit
- RealityKit
- Notes
- SCNGeometry
- MeshResource
- RealityKit generates from code or loads USD
- SCNBox
- ,
- SCNSphere
- , etc.
- MeshResource.generateBox()
- ,
- .generateSphere()
- Similar built-in shapes
- SCNMaterial
- SimpleMaterial
- ,
- PhysicallyBasedMaterial
- PBR-first in RealityKit
- SCNMaterial.lightingModel = .physicallyBased
- PhysicallyBasedMaterial
- Default in RealityKit
- SCNMaterial.diffuse
- PhysicallyBasedMaterial.baseColor
- Different property name
- SCNMaterial.metalness
- PhysicallyBasedMaterial.metallic
- Different property name
- SCNMaterial.roughness
- PhysicallyBasedMaterial.roughness
- Same concept
- SCNMaterial.normal
- PhysicallyBasedMaterial.normal
- Same concept
- Shader modifiers
- ShaderGraphMaterial
- /
- CustomMaterial
- No direct port — must rewrite
- SCNProgram
- (custom shaders)
- CustomMaterial
- with Metal functions
- Different API surface
- SCNGeometrySource
- MeshResource.Contents
- Low-level mesh data
- Transforms & Hierarchy
- SceneKit
- RealityKit
- Notes
- node.position
- entity.position
- Both SCNVector3 / SIMD3
- node.eulerAngles
- entity.orientation
- (quaternion)
- RealityKit prefers quaternions
- node.scale
- entity.scale
- Both SIMD3
- node.transform
- entity.transform
- 4×4 matrix
- node.worldTransform
- entity.transform(relativeTo: nil)
- World-space transform
- node.addChildNode(_:)
- entity.addChild(_:)
- Same hierarchy concept
- node.removeFromParentNode()
- entity.removeFromParent()
- Same concept
- node.childNodes
- entity.children
- Children collection
- node.parent
- entity.parent
- Parent reference
- node.childNode(withName:recursively:)
- entity.findEntity(named:)
- Named lookup
- Lighting
- SceneKit
- RealityKit
- Notes
- SCNLight
- (
- .omni
- )
- PointLightComponent
- Point light
- SCNLight
- (
- .directional
- )
- DirectionalLightComponent
- Sun/directional light
- SCNLight
- (
- .spot
- )
- SpotLightComponent
- Cone light
- SCNLight
- (
- .area
- )
- No direct equivalent
- Use multiple point lights
- SCNLight
- (
- .ambient
- )
- EnvironmentResource
- (IBL)
- Image-based lighting preferred
- SCNLight
- (
- .probe
- )
- EnvironmentResource
- Environment probes
- SCNLight
- (
- .IES
- )
- No direct equivalent
- Use light intensity profiles
- Camera
- SceneKit
- RealityKit
- Notes
- SCNCamera
- PerspectiveCamera
- entity
- Entity with camera component
- camera.fieldOfView
- PerspectiveCameraComponent.fieldOfViewInDegrees
- Same concept
- camera.zNear
- /
- camera.zFar
- PerspectiveCameraComponent.near
- /
- .far
- Clipping planes
- camera.wantsDepthOfField
- Post-processing effects
- Different mechanism
- camera.motionBlurIntensity
- Post-processing effects
- Different mechanism
- allowsCameraControl
- Custom gesture handling
- No built-in orbit camera
- Physics
- SceneKit
- RealityKit
- Notes
- SCNPhysicsBody
- PhysicsBodyComponent
- Component-based
- .dynamic
- .dynamic
- Same mode
- .static
- .static
- Same mode
- .kinematic
- .kinematic
- Same mode
- SCNPhysicsShape
- CollisionComponent
- /
- ShapeResource
- Separate from body in RealityKit
- categoryBitMask
- CollisionGroup
- Named groups vs raw bitmasks
- collisionBitMask
- CollisionFilter
- Filter-based
- contactTestBitMask
- CollisionEvents.Began
- subscription
- Event-based contacts
- SCNPhysicsContactDelegate
- scene.subscribe(to: CollisionEvents.Began.self)
- Combine-style events
- SCNPhysicsField
- PhysicsBodyComponent
- forces
- Apply forces directly
- SCNPhysicsJoint
- PhysicsJoint
- Similar joint types
- Animation
- SceneKit
- RealityKit
- Notes
- SCNAction
- entity.move(to:relativeTo:duration:)
- Transform animation
- SCNAction.sequence
- Animation chaining
- Less declarative in RealityKit
- SCNAction.group
- Parallel animations
- Apply to different entities
- SCNAction.repeatForever
- AnimationPlaybackController
- repeat
- Different API
- SCNTransaction
- (implicit)
- No direct equivalent
- Explicit animations only
- CAAnimation
- bridge
- entity.playAnimation()
- Load from USD
- SCNAnimationPlayer
- AnimationPlaybackController
- Playback control
- Morph targets
- Blend shapes in USD
- Load via USD files
- Interaction
- SceneKit
- RealityKit
- Notes
- hitTest(_:options:)
- RealityViewContent.entities(at:)
- Different API
- Gesture recognizers on SCNView
- ManipulationComponent
- Built-in drag/rotate/scale
- allowsCameraControl
- Custom implementation
- No built-in orbit
- AR Integration
- SceneKit
- RealityKit
- Notes
- ARSCNView
- RealityView
- +
- AnchorEntity
- Legacy → modern
- ARSCNViewDelegate
- AnchorEntity
- auto-tracking
- Event-driven
- renderer(_:didAdd:for:)
- AnchorEntity(.plane)
- Declarative anchoring
- ARWorldTrackingConfiguration
- SpatialTrackingSession
- iOS 18+
- Part 2: Scene Graph API
- SCNScene
- // Loading
- let
- scene
- =
- SCNScene
- (
- named
- :
- "scene.usdz"
- )
- !
- let
- scene
- =
- try
- SCNScene
- (
- url
- :
- url
- ,
- options
- :
- [
- .
- checkConsistency
- :
- true
- ,
- .
- convertToYUp
- :
- true
- ]
- )
- // Properties
- scene
- .
- rootNode
- // Root of node hierarchy
- scene
- .
- background
- .
- contents
- // Skybox (UIImage, UIColor, MDLSkyCubeTexture)
- scene
- .
- lightingEnvironment
- .
- contents
- // IBL environment map
- scene
- .
- fogStartDistance
- // Fog near
- scene
- .
- fogEndDistance
- // Fog far
- scene
- .
- fogColor
- // Fog color
- scene
- .
- isPaused
- // Pause simulation
- SCNNode
- // Creation
- let
- node
- =
- SCNNode
- (
- )
- let
- node
- =
- SCNNode
- (
- geometry
- :
- SCNBox
- (
- width
- :
- 1
- ,
- height
- :
- 1
- ,
- length
- :
- 1
- ,
- chamferRadius
- :
- 0
- )
- )
- // Transform
- node
- .
- position
- =
- SCNVector3
- (
- x
- ,
- y
- ,
- z
- )
- node
- .
- eulerAngles
- =
- SCNVector3
- (
- pitch
- ,
- yaw
- ,
- roll
- )
- node
- .
- scale
- =
- SCNVector3
- (
- 1
- ,
- 1
- ,
- 1
- )
- node
- .
- simdPosition
- =
- SIMD3
- <
- Float
- >
- (
- x
- ,
- y
- ,
- z
- )
- // SIMD variants available
- node
- .
- pivot
- =
- SCNMatrix4MakeTranslation
- (
- 0
- ,
- -
- 0.5
- ,
- 0
- )
- // Offset pivot point
- // Visibility
- node
- .
- isHidden
- =
- false
- node
- .
- opacity
- =
- 1.0
- node
- .
- castsShadow
- =
- true
- node
- .
- renderingOrder
- =
- 0
- // Lower = rendered first
- // Hierarchy
- node
- .
- addChildNode
- (
- child
- )
- node
- .
- removeFromParentNode
- (
- )
- node
- .
- childNodes
- node
- .
- childNode
- (
- withName
- :
- "name"
- ,
- recursively
- :
- true
- )
- node
- .
- enumerateChildNodes
- {
- child
- ,
- stop
- in
- }
- Part 3: Materials
- Lighting Models
- Model
- Description
- Use Case
- .physicallyBased
- PBR metallic-roughness
- Realistic rendering (recommended)
- .blinn
- Blinn-Phong specular
- Simple shiny surfaces
- .phong
- Phong specular
- Classic specular highlight
- .lambert
- Diffuse only, no specular
- Matte surfaces
- .constant
- Unlit, flat color
- UI elements, debug visualization
- .shadowOnly
- Invisible, receives shadows
- AR ground plane
- Material Properties
- let
- mat
- =
- SCNMaterial
- (
- )
- mat
- .
- lightingModel
- =
- .
- physicallyBased
- // Textures or scalar values
- mat
- .
- diffuse
- .
- contents
- =
- UIImage
- (
- named
- :
- "albedo"
- )
- // Base color
- mat
- .
- metalness
- .
- contents
- =
- 0.0
- // 0 = dielectric, 1 = metal
- mat
- .
- roughness
- .
- contents
- =
- 0.5
- // 0 = mirror, 1 = rough
- mat
- .
- normal
- .
- contents
- =
- UIImage
- (
- named
- :
- "normal"
- )
- // Normal map
- mat
- .
- ambientOcclusion
- .
- contents
- =
- UIImage
- (
- named
- :
- "ao"
- )
- // AO map
- mat
- .
- emission
- .
- contents
- =
- UIColor
- .
- blue
- // Glow
- mat
- .
- displacement
- .
- contents
- =
- UIImage
- (
- named
- :
- "height"
- )
- // Height map
- // Options
- mat
- .
- isDoubleSided
- =
- false
- // Render both sides
- mat
- .
- writesToDepthBuffer
- =
- true
- mat
- .
- readsFromDepthBuffer
- =
- true
- mat
- .
- blendMode
- =
- .
- alpha
- // .add, .subtract, .multiply, .screen
- mat
- .
- transparencyMode
- =
- .
- aOne
- // .rgbZero for pre-multiplied alpha
- Part 4: Physics
- Body Types and Properties
- // Dynamic body with custom shape
- let
- shape
- =
- SCNPhysicsShape
- (
- geometry
- :
- SCNSphere
- (
- radius
- :
- 0.5
- )
- ,
- options
- :
- nil
- )
- let
- body
- =
- SCNPhysicsBody
- (
- type
- :
- .
- dynamic
- ,
- shape
- :
- shape
- )
- body
- .
- mass
- =
- 1.0
- body
- .
- friction
- =
- 0.5
- body
- .
- restitution
- =
- 0.3
- // Bounciness
- body
- .
- damping
- =
- 0.1
- // Linear damping
- body
- .
- angularDamping
- =
- 0.1
- // Angular damping
- body
- .
- isAffectedByGravity
- =
- true
- body
- .
- allowsResting
- =
- true
- // Sleep optimization
- node
- .
- physicsBody
- =
- body
- // Compound shapes
- let
- compound
- =
- SCNPhysicsShape
- (
- shapes
- :
- [
- shape1
- ,
- shape2
- ]
- ,
- transforms
- :
- [
- transform1
- ,
- transform2
- ]
- )
- // Concave (static only)
- let
- concave
- =
- SCNPhysicsShape
- (
- geometry
- :
- mesh
- ,
- options
- :
- [
- .
- type
- :
- SCNPhysicsShape
- .
- ShapeType
- .
- concavePolyhedron
- ]
- )
- Joint Types
- Joint
- Description
- SCNPhysicsHingeJoint
- Single-axis rotation (door)
- SCNPhysicsBallSocketJoint
- Free rotation around point (pendulum)
- SCNPhysicsSliderJoint
- Linear movement along axis (drawer)
- SCNPhysicsConeTwistJoint
- Limited rotation (ragdoll limb)
- Part 5: Animation API
- SCNAction Catalog
- Category
- Actions
- Movement
- move(by:duration:)
- ,
- move(to:duration:)
- Rotation
- rotate(by:around:duration:)
- ,
- rotateTo(x:y:z:duration:)
- Scale
- scale(by:duration:)
- ,
- scale(to:duration:)
- Fade
- fadeIn(duration:)
- ,
- fadeOut(duration:)
- ,
- fadeOpacity(to:duration:)
- Visibility
- hide()
- ,
- unhide()
- Audio
- playAudio(source:waitForCompletion:)
- Custom
- run
- ,
- customAction(duration:action:)
- Composition
- sequence([])
- ,
- group([])
- ,
- repeat(_:count:)
- ,
- repeatForever(_:)
- Control
- wait(duration:)
- ,
- removeFromParentNode()
- Timing Functions
- action
- .
- timingMode
- =
- .
- linear
- // Default
- action
- .
- timingMode
- =
- .
- easeIn
- // Slow start
- action
- .
- timingMode
- =
- .
- easeOut
- // Slow end
- action
- .
- timingMode
- =
- .
- easeInEaseOut
- // Slow start and end
- action
- .
- timingFunction
- =
- {
- t
- in
- // Custom curve
- return
- t
- *
- t
- // Quadratic ease-in
- }
- Part 6: Constraints
- Constraint
- Purpose
- SCNLookAtConstraint
- Node always faces target
- SCNBillboardConstraint
- Node always faces camera
- SCNDistanceConstraint
- Maintains min/max distance
- SCNReplicatorConstraint
- Copies transform of target
- SCNAccelerationConstraint
- Smooths transform changes
- SCNSliderConstraint
- Locks to axis
- SCNIKConstraint
- Inverse kinematics chain
- let
- lookAt
- =
- SCNLookAtConstraint
- (
- target
- :
- targetNode
- )
- lookAt
- .
- isGimbalLockEnabled
- =
- true
- // Prevent roll
- lookAt
- .
- influenceFactor
- =
- 0.8
- // Partial constraint
- node
- .
- constraints
- =
- [
- lookAt
- ]
- In RealityKit
-
- No direct constraint system. Implement with
- System
- update logic or
- entity.look(at:from:relativeTo:)
- .
- Part 7: Scene Configuration
- SCNView Configuration
- Property
- Default
- Description
- antialiasingMode
- .multisampling4X
- MSAA level
- preferredFramesPerSecond
- 60
- Target frame rate
- allowsCameraControl
- false
- Built-in orbit/pan/zoom
- autoenablesDefaultLighting
- false
- Add default light if none
- showsStatistics
- false
- FPS/node/draw count overlay
- isTemporalAntialiasingEnabled
- false
- TAA smoothing
- isJitteringEnabled
- false
- Temporal jitter for TAA
- debugOptions
- []
- .showPhysicsShapes
- ,
- .showBoundingBoxes
- ,
- .renderAsWireframe
- Resources
- WWDC
-
- 2014-609, 2014-610, 2017-604, 2019-612
- Docs
-
- /scenekit, /scenekit/scnscene, /scenekit/scnnode, /scenekit/scnmaterial, /scenekit/scnphysicsbody, /scenekit/scnaction
- Skills
- axiom-scenekit, axiom-realitykit, axiom-realitykit-ref
← 返回排行榜