Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS 12 SDK Bata 4 の SceneKit 変更内容

Beta 版から記事を起こしているため今後変更される可能性あり。

Apple のデベロッパーページのドキュメントの最初で SceneKit の仕様変更がなかったので気づかなかったが中身は変更されている模様。

Bata 4 の変更内容としてはいるが、自分の見落としで以前から変わっていたものかもしれない。

 

変更の概要

主には tvOS でジオメトリテッセレーションが使用できるようになったり、物理シミュレーションの物理ボディの設定変更など。
物理ボディの設定変更は多分 ARKit 2 の Sling Shot のサンプル制作の際に問題になったものだと思われる。

ちなみにジオメトリテッセレーションは A9 以降のチップ機能を使用するため、現状 の Apple TV では 4K のものでしか動作させることはできない。

 

追加

SCNGeometry

tessellator

tvOS 12 で使用可能になった。

 

class SCNGeometryTessellator

tvOS 12 で使用可能になった。
以下、このクラスのプロパティの SDKs の表記が変更されたもの。
全て変更だが一応列挙しておく。

  • var smoothingMode: SCNTessellationSmoothingMode
  • enum SCNTessellationSmoothingMode
  • var edgeTessellationFactor: CGFloat
  • var insideTessellationFactor: CGFloat
  • var isAdaptive: Bool
  • var isScreenSpace: Bool
  • var maximumEdgeLength: CGFloat
  • var tessellationFactorScale: CGFloat
  • var tessellationPartitionMode: MTLTessellationPartitionMode

 

SCNPhysicsBody

var centerOfMassOffset: SCNVector3

ローカル座標の原点を基準とした、ボディの重心の位置。
長いハンドルと重い頭を持つハンマーのような質量の不均一なボディをシミュレートするために使用する模様。

 

var continuousCollisionDetectionThreshold: CGFloat

物理ボディとの接触を正確に検出するための最小移動間隔を設定する。

SceneKit が行う通常の物理シミュレーションではボディの速度に基づいて各物理ボディの位置を更新し、次のフレームで新しい位置のボディが他のボディと交差するかどうかを調べる。
continuousCollisionDetectionThreshold を 0 以上にすると連続的に衝突の検出が行われ、各フレームでボディから走査される領域を計算し、他のボディと衝突するかどうかを調べる。

例えば、何かを物体に投げるゲームでは、1回の処理でターゲットの厚さよりも遠くに球が移動するとターゲットから通過してしまうことがある。 continuousCollisionDetectionThreshold を弾と同じサイズにすると正確に衝突を検知できる。

通常の物理処理よりも重いらしいので多用は禁物。

 

func setResting(Bool)

物理ボディを Resting の状態を設定、または解除する。

物理シミュレーション時に物理ボディが他からの力の影響を受けていない場合、必要のない物理演算を省くため isResting が true となりの静止状態になる。
もし物理演算中に動作を強制的に変えたい場合、このパラメータを true にして変更する。

 

var linearSleepingThreshold: CGFloat

物理ボディが動くための必要な最小移動速度。

物理ボディの速度がこの値よりも低い場合、SceneKit は Resting の状態として扱う。 デフォルト値は1秒あたり 0.1 単位。

値が大きいと速く止まり、値が小さいとゆっくり止まる。

 

var angularSleepingThreshold: CGFloat

物理ボディが動くための必要な最小角速度。

物理ボディの角速度がこの値よりも低い場合、SceneKit は Resting の状態として扱う。 デフォルト値は1秒あたり 0.1 ラジアン。

値が大きいと速く止まり、値が小さいとゆっくり止まる。

 

変更

SCNNode

simdLook(at:)

引数を vector_float3 から simd_float3 に変更。

func simdLook(at worldTarget: vector_float3)
func simdLook(at worldTarget: simd_float3)

 

simdLook(at:up:localFront:)

引数を vector_float3 から simd_float3 に変更。

func simdLook(at worldTarget: vector_float3, up worldUp: vector_float3, localFront: simd_float3)
func simdLook(at worldTarget: simd_float3, up worldUp: simd_float3, localFront: simd_float3)

 

SDKs 表記変更 (iOS 8.0+, watchOS 3.0+)

  • SCNScene > SCNScene.Attribute > init(rawValue:)
  • SCNView > SCNView.Option > init(rawValue:)
  • SCNNode > SCNBoundingVolume > boundingBox
  • SCNNode > SCNBoundingVolume > boundingSphere
  • SCNSceneRenderer > SCNDebugOptions > init(rawValue:)
  • SCNSceneRenderer > SCNHitTestOption > init(rawValue:)
  • SCNLight > SCNLight.LightType > init(rawValue:)
  • SCNMaterial > SCNMaterial.LightingModel > init(rawValue:)
  • SCNMaterial > SCNColorMask > init(rawValue:)
  • SCNGeometrySource > init(vertices: [SCNVector3])
  • SCNGeometrySource > init(normals: [SCNVector3])
  • SCNGeometrySource > init(textureCoordinates: [CGPoint])
  • SCNGeometryElement > init(indices:primitiveType:)
  • SCNBillboardConstraint > SCNBillboardAxis > init(rawValue: UInt)
  • SCNPhysicsCollisionCategory > init(rawValue: UInt)
  • SCNPhysicsShape > SCNPhysicsShape.Option > init(rawValue: String)
  • SCNPhysicsShape > SCNPhysicsShape.Option > SCNPhysicsShape.ShapeType > init(rawValue:)
  • SCNPhysicsWorld > SCNPhysicsWorld.TestOption > init(rawValue: String)
  • SCNPhysicsWorld > SCNPhysicsWorld.TestOption > SCNPhysicsWorld.TestSearchMode > init(rawValue: String)
  • SCNParticleSystem > SCNParticleSystem.ParticleProperty > init(rawValue: String)
  • SCNShadable > SCNShaderModifierEntryPoint > init(rawValue:)
  • SCNSceneSource > entryWithIdentifier(_:withClass:)
  • SCNSceneSource > SCNSceneSource.LoadingOption > SCNSceneSource.AnimationImportPolicy > init(rawValue: String)
  • SCNSceneSource > SCNSceneSource.LoadingOption > init(rawValue: String)

 

変更不明

  • SCNView > SCNAntialiasingMode > none
  • SCNView > SCNAntialiasingMode > multisampling2X
  • SCNView > SCNAntialiasingMode > multisampling4X
  • SCNView > SCNAntialiasingMode > multisampling8X
  • SCNView > SCNAntialiasingMode > multisampling16X
  • SCNView > SCNCameraController > SCNInteractionMode > fly
  • SCNView > SCNCameraController > SCNInteractionMode > orbitAngleMapping
  • SCNView > SCNCameraController > SCNInteractionMode > orbitArcball
  • SCNView > SCNCameraController > SCNInteractionMode > orbitCenteredArcball
  • SCNView > SCNCameraController > SCNInteractionMode > orbitTurntable
  • SCNView > SCNCameraController > SCNInteractionMode > pan
  • SCNView > SCNCameraController > SCNInteractionMode > truck
  • SCNNode > SCNMovabilityHint > fixed
  • SCNNode > SCNMovabilityHint > movable
  • SCNNode > SCNNodeFocusBehavior > none
  • SCNNode > SCNNodeFocusBehavior > occluding
  • SCNNode > SCNNodeFocusBehavior > focusable
  • SCNReferenceNode > SCNReferenceLoadingPolicy > immediate
  • SCNReferenceNode > SCNReferenceLoadingPolicy > onDemand
  • SCNSceneRenderer > SCNRenderingAPI > metal
  • SCNSceneRenderer > SCNRenderingAPI > openGLES2
  • SCNSceneRenderer > SCNRenderingAPI > openGLLegacy
  • SCNSceneRenderer > SCNRenderingAPI > openGLCore32
  • SCNSceneRenderer > SCNRenderingAPI > openGLCore41
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > call
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > cny
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > closest
  • SCNLight > SCNShadowMode > forward
  • SCNLight > SCNShadowMode > deferred
  • SCNLight > SCNShadowMode > modulated
  • SCNCamera > SCNCameraProjectionDirection > hvertical
  • SCNCamera > SCNCameraProjectionDirection > horizontal
  • SCNMaterial > SCNTransparencyMode > aOne
  • SCNMaterial > SCNTransparencyMode > rgbZero
  • SCNMaterial > SCNTransparencyMode > dualLayer
  • SCNMaterial > SCNTransparencyMode > singleLayer
  • SCNMaterial > SCNBlendMode > alpha
  • SCNMaterial > SCNBlendMode > add
  • SCNMaterial > SCNBlendMode > subtract
  • SCNMaterial > SCNBlendMode > multiply
  • SCNMaterial > SCNBlendMode > screen
  • SCNMaterial > SCNBlendMode > replace
  • SCNMaterial > SCNBlendMode > max
  • SCNMaterial > SCNCullMode > back
  • SCNMaterial > SCNCullMode > front
  • SCNMaterial > SCNFillMode > fill
  • SCNMaterial > SCNFillMode > lines
  • SCNMaterialProperty > SCNWrapMode > clamp
  • SCNMaterialProperty > SCNWrapMode > `repeat`
  • SCNMaterialProperty > SCNWrapMode > clampToBorder
  • SCNMaterialProperty > SCNWrapMode > mirror
  • SCNMaterialProperty > SCNFilterMode > none
  • SCNMaterialProperty > SCNFilterMode > nearest
  • SCNMaterialProperty > SCNFilterMode > linear
  • SCNGeometrySource > SCNGeometrySource.Semantic > init(String)
  • SCNGeometrySource > SCNGeometrySource.Semantic > init(rawValue: String)
  • SCNGeometryElement > SCNGeometryPrimitiveType > triangles
  • SCNGeometryElement > SCNGeometryPrimitiveType > triangleStrip
  • SCNGeometryElement > SCNGeometryPrimitiveType > line
  • SCNGeometryElement > SCNGeometryPrimitiveType > point
  • SCNGeometryElement > SCNGeometryPrimitiveType > polygon
  • SCNShape > SCNChamferMode > both
  • SCNShape > SCNChamferMode > front
  • SCNShape > SCNChamferMode > back
  • SCNAction > SCNActionTimingMode > linear
  • SCNAction > SCNActionTimingMode > easeIn
  • SCNAction > SCNActionTimingMode > easeOut
  • SCNAction > SCNActionTimingMode > easeInEaseOut
  • SCNMorpher > SCNMorpherCalculationMode > normalized
  • SCNMorpher > SCNMorpherCalculationMode > additive
  • SCNPhysicsBodyType > `static`
  • SCNPhysicsBodyType > dynamic
  • SCNPhysicsBodyType > kinematic
  • SCNPhysicsField > SCNPhysicsFieldScope > insideExtent
  • SCNPhysicsField > SCNPhysicsFieldScope > outsideExtent
  • SCNParticleSystem > SCNParticleBirthLocation > surface
  • SCNParticleSystem > SCNParticleBirthLocation > volume
  • SCNParticleSystem > SCNParticleBirthLocation > vertex
  • SCNParticleSystem > SCNParticleBirthDirection > constant
  • SCNParticleSystem > SCNParticleBirthDirection > surfaceNormal
  • SCNParticleSystem > SCNParticleBirthDirection > random
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > `repeat`
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > clamp
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > autoReverse
  • SCNParticleSystem > SCNParticleBlendMode > additive
  • SCNParticleSystem > SCNParticleBlendMode > subtract
  • SCNParticleSystem > SCNParticleBlendMode > multiply
  • SCNParticleSystem > SCNParticleBlendMode > screen
  • SCNParticleSystem > SCNParticleBlendMode > alpha
  • SCNParticleSystem > SCNParticleBlendMode > replace
  • SCNParticleSystem > SCNParticleOrientationMode > billboardScreenAligned
  • SCNParticleSystem > SCNParticleOrientationMode > billboardViewAligned
  • SCNParticleSystem > SCNParticleOrientationMode > free
  • SCNParticleSystem > SCNParticleOrientationMode > billboardYAligned
  • SCNParticleSystem > SCNParticleSortingMode > none
  • SCNParticleSystem > SCNParticleSortingMode > projectedDepth
  • SCNParticleSystem > SCNParticleSortingMode > distance
  • SCNParticleSystem > SCNParticleSortingMode > oldestFirst
  • SCNParticleSystem > SCNParticleSortingMode > youngestFirst
  • SCNParticleSystem > SCNParticleEvent > birth
  • SCNParticleSystem > SCNParticleEvent > death
  • SCNParticleSystem > SCNParticleEvent > collision
  • SCNParticleSystem > SCNParticleModifierStage > preDynamics
  • SCNParticleSystem > SCNParticleModifierStage > postDynamics
  • SCNParticleSystem > SCNParticleModifierStage > preCollision
  • SCNParticleSystem > SCNParticleModifierStage > postCollision
  • SCNParticlePropertyController > SCNParticleInputMode > overLife
  • SCNParticlePropertyController > SCNParticleInputMode > overDistance
  • SCNParticlePropertyController > SCNParticleInputMode > overOtherProperty
  • SCNProgram > SCNBufferFrequency > perFrame
  • SCNProgram > SCNBufferFrequency > perNode
  • SCNProgram > SCNBufferFrequency > perShadable
  • SCNSceneSource > SCNSceneSourceStatus > error
  • SCNSceneSource > SCNSceneSourceStatus > parsing
  • SCNSceneSource > SCNSceneSourceStatus > validating
  • SCNSceneSource > SCNSceneSourceStatus > processing
  • SCNSceneSource > SCNSceneSourceStatus > complete
    • SCNView > SCNAntialiasingMode > none
  • SCNView > SCNAntialiasingMode > multisampling2X
  • SCNView > SCNAntialiasingMode > multisampling4X
  • SCNView > SCNAntialiasingMode > multisampling8X
  • SCNView > SCNAntialiasingMode > multisampling16X
  • SCNView > SCNCameraController > SCNInteractionMode > fly
  • SCNView > SCNCameraController > SCNInteractionMode > orbitAngleMapping
  • SCNView > SCNCameraController > SCNInteractionMode > orbitArcball
  • SCNView > SCNCameraController > SCNInteractionMode > orbitCenteredArcball
  • SCNView > SCNCameraController > SCNInteractionMode > orbitTurntable
  • SCNView > SCNCameraController > SCNInteractionMode > pan
  • SCNView > SCNCameraController > SCNInteractionMode > truck
  • SCNNode > SCNMovabilityHint > fixed
  • SCNNode > SCNMovabilityHint > movable
  • SCNNode > SCNNodeFocusBehavior > none
  • SCNNode > SCNNodeFocusBehavior > occluding
  • SCNNode > SCNNodeFocusBehavior > focusable
  • SCNReferenceNode > SCNReferenceLoadingPolicy > immediate
  • SCNReferenceNode > SCNReferenceLoadingPolicy > onDemand
  • SCNSceneRenderer > SCNRenderingAPI > metal
  • SCNSceneRenderer > SCNRenderingAPI > openGLES2
  • SCNSceneRenderer > SCNRenderingAPI > openGLLegacy
  • SCNSceneRenderer > SCNRenderingAPI > openGLCore32
  • SCNSceneRenderer > SCNRenderingAPI > openGLCore41
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > call
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > cny
  • SCNSceneRenderer > SCNHitTestOption > SCNHitTestSearchMode > closest
  • SCNLight > SCNShadowMode > forward
  • SCNLight > SCNShadowMode > deferred
  • SCNLight > SCNShadowMode > modulated
  • SCNCamera > SCNCameraProjectionDirection > hvertical
  • SCNCamera > SCNCameraProjectionDirection > horizontal
  • SCNMaterial > SCNTransparencyMode > aOne
  • SCNMaterial > SCNTransparencyMode > rgbZero
  • SCNMaterial > SCNTransparencyMode > dualLayer
  • SCNMaterial > SCNTransparencyMode > singleLayer
  • SCNMaterial > SCNBlendMode > alpha
  • SCNMaterial > SCNBlendMode > add
  • SCNMaterial > SCNBlendMode > subtract
  • SCNMaterial > SCNBlendMode > multiply
  • SCNMaterial > SCNBlendMode > screen
  • SCNMaterial > SCNBlendMode > replace
  • SCNMaterial > SCNBlendMode > max
  • SCNMaterial > SCNCullMode > back
  • SCNMaterial > SCNCullMode > front
  • SCNMaterial > SCNFillMode > fill
  • SCNMaterial > SCNFillMode > lines
  • SCNMaterialProperty > SCNWrapMode > clamp
  • SCNMaterialProperty > SCNWrapMode > `repeat`
  • SCNMaterialProperty > SCNWrapMode > clampToBorder
  • SCNMaterialProperty > SCNWrapMode > mirror
  • SCNMaterialProperty > SCNFilterMode > none
  • SCNMaterialProperty > SCNFilterMode > nearest
  • SCNMaterialProperty > SCNFilterMode > linear
  • SCNGeometrySource > SCNGeometrySource.Semantic > init(String)
  • SCNGeometrySource > SCNGeometrySource.Semantic > init(rawValue: String)
  • SCNGeometryElement > SCNGeometryPrimitiveType > triangles
  • SCNGeometryElement > SCNGeometryPrimitiveType > triangleStrip
  • SCNGeometryElement > SCNGeometryPrimitiveType > line
  • SCNGeometryElement > SCNGeometryPrimitiveType > point
  • SCNGeometryElement > SCNGeometryPrimitiveType > polygon
  • SCNShape > SCNChamferMode > both
  • SCNShape > SCNChamferMode > front
  • SCNShape > SCNChamferMode > back
  • SCNAction > SCNActionTimingMode > linear
  • SCNAction > SCNActionTimingMode > easeIn
  • SCNAction > SCNActionTimingMode > easeOut
  • SCNAction > SCNActionTimingMode > easeInEaseOut
  • SCNMorpher > SCNMorpherCalculationMode > normalized
  • SCNMorpher > SCNMorpherCalculationMode > additive
  • SCNPhysicsBodyType > `static`
  • SCNPhysicsBodyType > dynamic
  • SCNPhysicsBodyType > kinematic
  • SCNPhysicsField > SCNPhysicsFieldScope > insideExtent
  • SCNPhysicsField > SCNPhysicsFieldScope > outsideExtent
  • SCNParticleSystem > SCNParticleBirthLocation > surface
  • SCNParticleSystem > SCNParticleBirthLocation > volume
  • SCNParticleSystem > SCNParticleBirthLocation > vertex
  • SCNParticleSystem > SCNParticleBirthDirection > constant
  • SCNParticleSystem > SCNParticleBirthDirection > surfaceNormal
  • SCNParticleSystem > SCNParticleBirthDirection > random
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > `repeat`
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > clamp
  • SCNParticleSystem > SCNParticleImageSequenceAnimationMode > autoReverse
  • SCNParticleSystem > SCNParticleBlendMode > additive
  • SCNParticleSystem > SCNParticleBlendMode > subtract
  • SCNParticleSystem > SCNParticleBlendMode > multiply
  • SCNParticleSystem > SCNParticleBlendMode > screen
  • SCNParticleSystem > SCNParticleBlendMode > alpha
  • SCNParticleSystem > SCNParticleBlendMode > replace
  • SCNParticleSystem > SCNParticleOrientationMode > billboardScreenAligned
  • SCNParticleSystem > SCNParticleOrientationMode > billboardViewAligned
  • SCNParticleSystem > SCNParticleOrientationMode > free
  • SCNParticleSystem > SCNParticleOrientationMode > billboardYAligned
  • SCNParticleSystem > SCNParticleSortingMode > none
  • SCNParticleSystem > SCNParticleSortingMode > projectedDepth
  • SCNParticleSystem > SCNParticleSortingMode > distance
  • SCNParticleSystem > SCNParticleSortingMode > oldestFirst
  • SCNParticleSystem > SCNParticleSortingMode > youngestFirst
  • SCNParticleSystem > SCNParticleEvent > birth
  • SCNParticleSystem > SCNParticleEvent > death
  • SCNParticleSystem > SCNParticleEvent > collision
  • SCNParticleSystem > SCNParticleModifierStage > preDynamics
  • SCNParticleSystem > SCNParticleModifierStage > postDynamics
  • SCNParticleSystem > SCNParticleModifierStage > preCollision
  • SCNParticleSystem > SCNParticleModifierStage > postCollision
  • SCNParticlePropertyController > SCNParticleInputMode > overLife
  • SCNParticlePropertyController > SCNParticleInputMode > overDistance
  • SCNParticlePropertyController > SCNParticleInputMode > overOtherProperty
  • SCNProgram > SCNBufferFrequency > perFrame
  • SCNProgram > SCNBufferFrequency > perNode
  • SCNProgram > SCNBufferFrequency > perShadable
  • SCNSceneSource > SCNSceneSourceStatus > error
  • SCNSceneSource > SCNSceneSourceStatus > parsing
  • SCNSceneSource > SCNSceneSourceStatus > validating
  • SCNSceneSource > SCNSceneSourceStatus > processing
  • SCNSceneSource > SCNSceneSourceStatus > complete