iOS 12 SDK Bata 5 の ARKit、SceneKit 変更内容
ARKit の更新はないようで、SceneKit では Beta 4 で追加された2つのインスタンスプロパティの名称が変更された。
SCNPhysicsBody
物理ボディのインスタンスプロパティの名称が Sleeping から Resting に変更された。
Beta 4
var linearSleepingThreshold: CGFloat { get set }
var angularSleepingThreshold: CGFloat { get set }
Beta 5
var linearRestingThreshold: CGFloat { get set }
var angularRestingThreshold: CGFloat { get set }
linearRestingThreshold、angularRestingThreshold の機能の詳細は過去記事参照
SCNView での変更はあるが、
Relationships > Conforms To でプロトコルが変更というものとなっている。
過去の差分がないため、どこが変更されたのか不明。
Scene Editor
自分の環境だけかもしれないが、Scene Editor で Physics を設定すると Xcode がクラッシュするバグが直っている。
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
eGPU、外部拡張 GPU のはじまりとこれから
Razor Core など Windows で使用されていた外付けの GPU である eGPU が、Apple の High Sierra に際に正式対応した。
多分、Apple 製品でインプットデバイスやオーディオ機器以外で Mac を拡張する機能やデバイスを追加するのは久しぶりな感じ。
基本的には単体製品での使いやすさを求める Apple において eGPU の拡張機能という選択肢を取ったのは理由があると思われる。
現行の Mac は基本 GPU の変更ができないため、eGPU で拡張させる選択肢を提供するのもわかる。
また、筐体の小型化や軽量化をする際、GPU による発熱の排熱や消費電力を考えると、eGPU を使い外部にグラフィックボートを分けて、電源を別で供給するのは理にかなっている。
以下、eGPU を使用して機能が向上する例
- 3DCG で AMD ProRender などの GPU レンダリング
- 2DCG アプリのプレビュー
- 編集や動画のエンコード
- Unity や Unreal Engine などのゲームエンジンのエディター
- ゲームの高画質化などの体験向上
- Metal を使用した機械学習
eGPU の利用ケースとして、ラップトップに対して持ち運びしていない状態では GPU を強化するというケースがもっと適しているだろう。
それ以外でも、複数の GPU を繋ぎさらに加速させる利用ケースがある。
一般的な利用方法ではないので 2018 の MacBook Pro の Web ページでは紹介されていないが、WWDC 2018 では iMac Pro に eGPU を3台繋ぎ使用したデモを行なっていたり、動画編集アプリの Davinci Resolve の有料版では複数使用できるようになっている。
(一応、アプリ開発者向けだが Mojave の Metal 2 ではさらに複数の GPU を使用時の動作に対して施策を行なっている)
利点しかないようだが、問題がないわけではなく、Thunderbolt 3 で接続するため最大40 Gbpsのデータ転送しかできない。
現状でロジックボード (マザーボード) へ直接 GPU を繋ぐ PCI Express 3.0 x16 では 128 Gbps なので 1/3 しかでない。
Metal での演算性能の差はそこまで劇的ではないが、ゲームなどは PCI Express で接続した GPU の方が速さは顕著になる。
また、USB-C のケーブルも注意。使える種類もあるし、転送の問題点で長いケーブルが使えない。
あと、一応アプリ側の対応も必要。
現状、Adobe 系のアプリは Metal 2 には完全に最適化されていないので eGPU の効果を受けられない可能性がある。
(Adobe さんは iOS の Photoshop をつくる前に Metal をちゃんと対応して欲しい)
これからの eGPU
Thunderbolt 3 で繋いでいるため、転送スピードが問題になる。
もしかすると今後 Apple が新しい規格のコネクタをつくるかもしれない。
グラフィックボード側の改善を行う可能性もある。Radeon Pro SSG のようにストレージを持ち、前処理やリソースをあらかじめそこに置き処理を向上させる可能性もある。
8K ディスプレイは内部処理の問題でファンが付いている。ディスプレイ自体をコントロールする構造を考えると、今後、ディスプレイ自体に GPU を積んだり、グラフィックボードを装填できるようになるかもしれない。
ディスプレイへ繋ぐだけになり、ケーブルの取り回しが楽になるので、こういうプロダクトを Apple が出しそうではある。
また、ソフトウェア面から考えると、GPU は CPU からの命令を受けて処理をしており、そのため CPU や GPU で処理待ちが起こってしまうと全体の処理が遅くなってしまう。
Apple は Metal 2 で最適化しており、本来は全体の処理スピードを速めるために使用しているものだが、eGPU にも良い影響はあるだろう。
実現できるかわわからないが、いつか eGPU は無線で接続できるようになるのではないかと思っている。
ただ、次期 Wi-Fi の規格 IEEE 802.11ax でも最大転送速度が 9.6 Gbps なのでまだまだだけど。
(ちなみに docomo は 8K 映像配信をセルラー回線で実験成功しているので論理値ではThunderbolt 3 を大幅に超える)
自分が無線で eGPU を使用できるようにしてほしい理由は iOS や tvOS での使用できるようにして欲しいから。
もうそろそろスマートフォンなどの SoC のプロセッサをファンレスで動かし高めの処理をする場合、発熱が厳しくなると思われるので。
2018 版 MacBook Pro はどれを買うべきか?
8/2 追記修正: i5 スレッド数を修正
Geekbentch でのベンチマークも出てきたのでまとめてみようと思う。
前回のおさらい
こんな感じ。
- 2018 の 15 inch は現行の iMac のフルスペックのモデルより CPU が速い
- 2018 の 13 inch は 2017 の 15 inch フルスペックより CPU が速い
マルチコアでの集計
シングルスレッドは圧勝なのでマルチコアでの集計。
以前の記事で書き忘れていたが、CPU では新しい 15 inch は 2012 の Mac Pro を凌駕し、 13 inch は現行の iMac 21 inch のフルスペックに近い。
13 inch は現行の iMac 21 に抜いたり抜かれたりを繰り返しているので同等と考えてよい。
GPU に関してはデスクトップに勝つにはやや厳しさがあるので割愛。
端末 | CPU | コア数 | Multi Core |
---|---|---|---|
iMac Pro Late 2017) |
Xeon W-2191B @ 2.3 GHz | 18 | 46655 |
iMac Pro (Late 2017) |
Xeon W-2170B @ 2.5 GHz | 14 | 40167 |
iMac Pro (Late 2017) |
Xeon W-2150B @ 3.0 GHz | 10 | 35219 |
iMac Pro (Late 2017) |
Xeon W-2140B @ 3.2 GHz | 8 | 30548 |
Mac Pro (Late 2013) |
Xeon E5-2697 v2 @ 2.7 GHz | 12 | 26486 |
MacBook Pro (15-inch Mid 2018) |
Core i9-8950HK @ 2.9 GHz | 6 | 22535 |
MacBook Pro (15-inch Mid 2018) |
Core i7-8850H @ 2.6 GHz | 6 | 22264 |
MacBook Pro 15-inch Mid 2018) |
Core i7-8750H @ 2.2 GHz | 6 | 21099 |
Mac Pro (Mid 2012) |
Xeon X5675 @ 3.1 GHz | 12 | 20008 |
iMac (27-inch Mid 2017) |
Core i7-7700K @ 4.2 GHz | 4 | 19325 |
iMac (21.5-inch Mid 2017) |
Core i7-7700 @ 3.6 GHz | 4 | 17720 |
MacBook Pro (13-inch Mid 2018) |
Core i7-8559U @ 2.7 GHz | 4 | 17678 |
MacBook Pro (13-inch Mid 2018) |
Core i5-8259U @ 2.3 GHz | 4 | 16401 |
Mac Benchmarks - Geekbench Browser
サーマルスロットリングについて
7月25日の「macOS High Sierra 10.13.6 追加アップデート」で MacBook Pro 2018 に対して修正が加えられ高負荷時でも正しいCPU性能を出すようになった。
以下の問題は改善されている模様。
スペック表に Turbo Boost と書かれているが、消費電力や低発熱など一定条件で負荷がかかった際に CPU が持つ規定の周波数から高い値に変更する Intel チップが持つ機能を指す。
例えば、MacBook Pro 13-inch 2018 の Core i5 は 2.3GHz だが Turbo Boost 使用時には 3.8GHz で稼働する。
逆に CPU に負荷がかかりまくり、発熱しまくると、CPU の周波数を下げチップを保護する。
これをサーマルスロットリングと呼ぶ。
現状、15 inch の i9 でサーマルスロットリングが起き期待したパフォーマンスを発揮できない事例が報告されている。
そこで起きている問題は、Adobe Premire で 5K の動画を 4K H.264 にエンコードした際 i9 より 2017 モデルの i7 の方が速いとされている。
冷蔵庫に i9 の MacBook Pro 入れながら動作させると i7 より速いとのこと。
Adobe のソフトウェアは Metal 2 に最適化されていないので 9to5 Mac が Final Cut Pro X で試しているがパフォーマンスの低下が見られるとのこと。 9to5mac.com
Geekbench でアプリのビルドの際、CPU のみを使用して実施しているが、CPU を動作させてサーマルスロットリングが起きる率は少ないとされている。 www.geekbench.com
現状、わかる範囲では GPU と共に高負荷の処理をさせた際に現れている模様で今後解消されるかは不明。
個人的にはラップトップに負荷を与えまくって動作させまくるのは良いと思えないので、
eGPU で回避できるのならそちらの運用を考えた方が良いのだろう。
サーマルスロットリングの問題が解消されていても Core i9 を購入対象に入れるか
個人的にはあまりに必要ないかなとは思っている。
マルチスレッドのベンチマーク上では 15 inch 標準構成 Core i7 の 2.2 GHz と比べて約 1.1 倍なので。
また、Core i9 の Thermal Velocity Boost という機能があり、電力に余力があり、ある一定の温度以下(確か 50 度以下)の場合、クロックを 200MHz 引き上げる。
それが、通常の環境でちゃんと動作するか不明なため。
ただ、レンダリングやエンコードなど CPU を長時間動作させるものに対しては 1.06 倍の差は大きく出ると思われる。
Apple が想定しているように上級者のクリエイティブ向けオプションであり、その対価を払えるかどうかというところ。
どれを買うべきか
前回も書いたのだが、スペックを見る分では、
正直、標準構成でも割と良いと思っている。
以下、標準構成 (以降価格は税別)
端末 | CPU | コア/スレッド | GPU | メモリ | ストレージ | 価格 |
---|---|---|---|---|---|---|
13 inch | i5 2.3GHz | 4/8 | Iris Plus 655 | 8G | 256G | 198,800 |
13 inch | i5 2.3GHz | 4/8 | Iris Plus 655 | 8G | 512G | 220,800 |
15 inch | i7 2.2GHz | 6/12 | Radeon Pro 555 | 16G | 256G | 258,800 |
15 inch | i7 2.6GHz | 6/12 | Radeon Pro 560 | 16G | 512G | 302,800 |
13 inch と 15 inch の違い
画面サイズが 13 inch と 15 inch と異なる点以外を見ていく。
基本的にはスペックや画面などの作業領域をとるか、軽くて小さい方をとるかという感じ。
13 inch | 15 inch | |
---|---|---|
重さ | 1.37kg | 1.83kg |
大きさ | A4 ぐらい | B4 ぐらい |
CPUコア | 4コア/最大8スレッド | 6コア/12スレッド |
GPU | 13 inch より 倍以上速い |
|
メモリ | LPDDR3 | DDR4 |
トラックパッド | 13inchより大きい (広い) |
|
電源 | 61W 約192g iPhone X より重い |
87W 約296g iPhone 8 2台分ぐらい |
多分、購入で重さが一番の判断基準になりそう。
13 と 15 の差は 460g あり、450ml のペットボトルを余分に持っているのと同じとなる。
電源を持ち運ぶとなると、さらに iPhone 1つ分増える。
15 inch は電源合わせて約 2.1 kg を持ち運んでも苦にならない、 もしくは、あまり持ち運ばなくて B4 サイズぐらいのスペースが許容できる人向け。
できるだけ早く欲しい
標準構成の場合は家電量販店でも購入できるので在庫があれば即買えると思う。
また、量販店の場合はだいたい5%のポイントがつくので約1万円ぐらいポイントが付く。
Apple のリテールストア(実店舗)が住まいに近ければ、量販店より在庫が多く、英語や一部ヨーロッパの国のキー配列のものを即持ち帰られる場合がある。
それなりのスペックで軽く小さい方がいい
MacBook Pro 13-inch i7 2.7GHz で、SSD 512GB、メモリ 16GB を薦める。
¥275,800 也。
想定している使用年数にもよるが、1年とかで速いスパンで乗り換えない場合は、メモリは後で変更や拡張できないため 22,000 円をケチらず 16GB にした方が良いと思われる。
SSD に関しては USB-C や NAS 等で拡張できるので、もし失敗しても後でリカバーが効く。
もし、何年か使うことを想定していて、現状 256GB のラップトップを使用し半分以上容量を使用しているなら、今後のため 512GB にした方が良いと思われる。 1T や 2T は映像などクリエイティブ向け通常ここまで使用はしないと思われる。
以下、13-inch i7、メモリ 16GB で SSD を変更した際の価格。
SSD | 価格 |
---|---|
256GB | 253,800 |
512GB | 275,800 |
1TB | 319,800 |
2TB | 407,800 |
そこそこハイスペックを求める場合
MacBook Pro 15-inch i7 2.2GHz で、SSD 512GB、メモリ 16GB を薦める。
¥280,800 也。
CPU i7 2.6GHz (GPU 560X) を選ばないのはスペックの伸び率が費用と比べた際に微妙なので。
Adobe 系や動画や RAW 画像の編集などクリエイティブ関連のアプリを使用しない通常使用の場合でメモリー 32GB 必要かというと不明だが、後々の伸び代をもたせたい場合は、44,000 円を払って 32GB に変更しても良いかもしれない。
メモリーは後で変更できないため。
Core i9 を選ばないのはコストパフォーマンスの問題で 44,000 円をメモリーやストレージを増やす足しにした方が幸せになりそうだから。
GPU を 560X に変更するのは価格に納得できるか。
VRAM が同様なので、ほぼ GPU のコア数も違いしかなく微妙。
プラス 11,000 円で端末オプションの中では1番安いバージョンアップ価格なのでお財布に余裕があれば。
一応、本体の大きさがそれなりにあるので、もし時間があれば実物を見た方が良い。
eGPU を使用する
eGPU における効果としてはグラフィックを扱う環境が向上するため、家や会社など固定された空間では使用するべきだとは思う。
プラス 6 万〜 10 万近くなり、用途によってはディスプレイが必要になるが、
eGPU を使用する場合は端末の GPU より速くなる。
以下、使用体験が向上すると思われる例
- 3DCG で AMD ProRender などの GPU レンダリング
- 2DCG アプリのプレビュー
- 編集や動画のエンコード
- Unity や Unreal Engine などのゲームエンジンのエディター
- ゲームの高画質化などの体験向上
- Metal を使用した機械学習
BlackMagic 社から出ているものは、Apple と共同開発しているらしく、負荷をあげても静音性に優れているとのこと。
また、GPU の機能を強化したい場合で USB-C の MacBook Pro を所持しているのであれば、無理して 2018 年モデルを買わなくても、eGPU の購入だけでも良いと思う。
2018 の MacBook Pro を買わずにやりきる
税込にすると20万超えるので他の構成も考えてみる。
ネットや動画再生、Microsoft Offce や Pages、Numbers、Keynote などテキストベースで行う作業なら、正直 Mac を使わず iPad や他のタブレットの運用で良いと思われる。
約半値で構成できるし、物にもよるがタブレットなら LTE のセルラー回線を使うことができ、モバイル WiFi のようなものを持ち運ばなくて済む。
iPad やタブレットでどうしても作業できない場合かつスペックが欲しい場合に MacBook Pro が必要かと。
テキストベースの作業でスペックがいらない場合は MacBook や MacBook Air の方が安いので。
Mac を持ち運ぶケースが少ないのなら、個人的には iMac / iMac Pro と iPad やタブレットという選択肢が1番良いかと。
また、iPad ほどの画面がいらないのなら、iPhone の Plus サイズで代用すれば、スマートフォンとタブレットを共に持たなくても良くなる。
PC ラップトップと比べた場合
Surface シリーズは割高な上に CPU の世代が古く、Let's Note はいわずものがなという感じ。
本当にストイックな動作をさせたいなら、ラップトップのゲーミング PC が同価格で買える可能性がある。
ただ、重さがかなりあるので注意。
個人的にはラップトップのゲーミング PC のコスパが悪いと思っているので、デスクトップ PC を購入した方が良いと思われる。
Mac 整備済製品で2017年版を買う
2017 の 13 inch は遅し、
2017 の 15 inch は 2018 の 13 inch より高いのであまりお勧めできない。
強いていうなら、15inch 以下から 15inch への画面のサイズアップと GPU とメモリの容量を増やしたい人向け。
まとめ
購入対象になるそうなものまとめてみた。
13 inch
CPU | コア/スレッド | GPU | メモリ | ストレージ | 価格 |
---|---|---|---|---|---|
i5 2.3GHz | 4/8 | Iris Plus 655 | 8G | 256G | 198,800 |
i5 2.3GHz | 4/8 | Iris Plus 655 | 8G | 512G | 220,800 |
i7 2.7GHz | 4/8 | Iris Plus 655 | 16G | 512G | 275,800 |
15 inch
CPU | コア/スレッド | GPU | メモリ | ストレージ | 価格 |
---|---|---|---|---|---|
i7 2.2GHz | 6/12 | Radeon Pro 555 | 16G | 256G | 258,800 |
i7 2.2GHz | 6/12 | Radeon Pro 555 | 16G | 512G | 280,800 |
i7 2.2GHz | 6/12 | Radeon Pro 555 | 32G | 512G | 324,800 |
13 / 15 inch + eGPU
Blackmagic eGPU ¥89,800
https://www.apple.com/jp/shop/product/HM8Y2J/A/blackmagic-egpu
CPU | メモリ | ストレージ | eGPU 合計価格 | |
---|---|---|---|---|
13 inch | i5 2.3GHz | 8G | 256G | 288,600 |
13 inch | i5 2.3GHz | 8G | 512G | 310,600 |
13 inch | i7 2.7GHz | 16G | 512G | 365,600 |
15 inch | i7 2.2GHz | 16G | 256G | 348,600 |
15 inch | i7 2.2GHz | 16G | 512G | 370,600 |
15 inch | i7 2.2GHz | 32G | 512G | 414,600 |
使用している 2016/2017 版の 13 / 15 inch + eGPU
Blackmagic eGPU ¥89,800 のみ。
というところ。
番外編: iPhone のように1〜2年で乗り換える
ここ最近、MacBook Pro は1年おきに出ているため、標準構成のものを1、2年でかえるのもありかも。
Apple 製品の場合はそれなりの売値がつくため、使用している端末を売ると、オプションから選択しグレードアップして2年以上もたせるより、最新スペックのものが使えるため、お得になるかもしれない。
iOS 12 SDK Bata 4 の ARKit 2 変更内容
Beta 版から記事を起こしているため今後変更される可能性あり。
ARKit 1.0 や 1.5 は Beta 中は、ほぼほぼ変更はなかったが
今回はテストしながら必要な機能を少しずつ増やしている模様。
Beta 4 は以下のような更新。
変更数 | |
---|---|
追加 (Added) | 1 |
変更 (Modified) | 2 |
追加
ARAnchorCopying プロトコル
ARAnchor やそのサブクラスのインスタンスはワールド座標で位置、方向が設定され、任意で名前などの追加情報や平面認識、物体認識、画像認識の関連付けを行うことできる。
ARKit は、カメラ映像やシーンのアニメーション再生など ARFrame が生成される度にセッションに関連付けられているアンカーを更新されるが、
アンカーオブジェクトは不変であるため、ARFrame から次の ARFrame に変更を加えるには、アンカーをコピーする必要がある。
独自の ARAnchor サブクラスを作成する場合は ARAnchorCopying のイニシャライズで対象のアンカーをコピーし設定する。
生成したサブクラスは ARAnchor の情報しか持たないので、カスタムで何らかの情報付随させフレーム間で維持したい場合は、生成したサブクラスに情報を設定する必要があるので注意。
ARAnchorCopying で設定できるのは init のみ。
init(anchor: ARAnchor)
別のアンカーからカスタム情報をコピーし、新しいアンカーへ初期化する。
Required なので init の記述は必須。
anchor
コピー元のアンカーを引数として設定する。
振る舞い
ARKit で新しい ARFrame オブジェクトを生成するたびに、この init を呼び出し、前のフレームに関連付けられている各アンカーをコピーする。
また、ARAnchor をサブクラス化しプロパティを追加する場合、init の実装は追加するプロパティの値をコピーし、スーパークラスの init にチェーンする必要がある。
ドキュメントからそのまま持ってきたが、
以下のコードでは BoardAnchor を判別してスケールを自身に設定、そしてスーパークラスに渡している。
required init(anchor: ARAnchor) { let other = anchor as! BoardAnchor self.size = other.size super.init(anchor: other) }
Apple 先生曰く、他のアンカーオブジェクトへの参照を格納する場合は、パフォーマンスとアプリケーションのデータモデルを慎重に検討すべしとのこと。
処理の状況によってはコピーした方がパフォーマンスが良くなるかも。
変更
ARSCNView > ARSCNDebugOptions
struct で設定されていたが、SCNDebugOptions の typealias に変更された。
ARAnchor
ARAnchorCopying プロトコルが追加され変更された。
まとめ
ARAnchorCopying でコピーすることで、ARKit の delegate でアンカー探して一部だけ処理を変えるということしなくて良くなる感はある。
でも、やりすぎ注意といった感じ。
過去の変更内容
新しい MacBook Pro 13、15 inch について考える
8/2 追記修正: i5 スレッド数と該当箇所修正
噂されていた新しい MacBook Pro 13、15 inch が発表され発売された。
基本的には CPU と GPU のアップデートと Bluetooth 5.0、True Tone 対応、T2 チップによる「Hey! Siri」による音声コマンドというところが大きな変更。
13 inch のメモリは LPDDR3 だが、15 inch は 32GByte を載せるためか DDR4 になっている。
実機を触っているわけではないのでわからないが、チャネルが同じなら 15 inch の方がメモリへ高速にアクセスできる形となる。
あと、互いにキーボードの改善が行われており、キー打鍵時の騒音が緩和されているとのこと。
仕様
13 inch
標準構成
- 第8世代の 2.3GHz クアッドコア Intel Core i5(Turbo Boost 3.8GHz)
- Intel Iris Plus Graphics 655
- 8GB 2,133MHz LPDDR3 メモリ
- 256GB SSD
オプション
- CPU Core i7(2.7GHz / Turbo Boost 4.5 GHz)
- メモリ 16GB
- SSD 512GB、1TB、2TB
過去のものと異なり GPU の変更はできず 655 のみ。
15 inch
標準構成
- 第8世代の 2.2GHz 6コアIntel Core i7プロセッサ(Turbo Boost 4.1GHz)
- Radeon Pro 555X(4GB GDDR5 メモリ)
- 16GB 2,400MHz DDR4 メモリ
- 256GB SSD
オプション
- CPU Core i7(2.6 GHz / Turbo Boost 4.3 GHz)
- CPU Core i9(2.9 GHz / Turbo Boost 4.8 GHz)
- メモリ 32GB
- Radeon Pro 560X(4GB GDDR5 メモリ)
- SSD 512GB、1TB、2TB、4TB
Geekbench でのベンチマーク
リークされたもので見てゆく。
モデル | Single Core | Multi Core |
---|---|---|
iMac Pro (8 Core) | 5008 | 30535 |
Macbook Pro 15-inch i7 2018 (8750H / 2.2GHz) |
4902 | 22316 |
iMac 27-inch (i7-7700K) |
5676 | 19329 |
Macbook Pro 13-inch i7 2018 | 4448 | 16607 |
Macbook Pro 15-inch 2017 (i7-7920HQ) |
4624 | 15551 |
iPhone X | 4206 | 10128 |
Macbook Pro 13-inch 2017 (i7-7567U) |
4606 | 9553 |
iPad Pro 10.5 inch | 3909 | 9308 |
2018 の Core i7 の 13 inch は 2017 の 15 inch のコア数と同じであるため同様な値。
Core i5 は Hyper Threading がない点を考えると 2017 の 13inch の 2コア4スレッド度と同等と考えてよいと思われる。
Core i5 も Hyper Threading が使用できる模様。
2018 の Core i7 の 15 inch は iMac のフルスペックを超えており、iMac Pro 8 コアと比べて約 73 %ぐらいの速さ。
2018 の 15 inch は多分 Intel Core i9-8950HK だと思われるため、シングルコア で 5500 を超え、マルチコアで 24000 は越えると思われる。
こちらは iMac Pro 8 コアと比べて約 79 %ぐらいの速さ。
ざっくりベンチをまとめる
メモリをマックスまで積んだ際のベンチだが以下のような感じ
- 2018 版 13 inch i5 = 2017 版 13 inch i7
- 2018 版 13 inch i7 = 2017 版 15 inch i7
- 2018 版 15 inch i7、i9 は iMac 27 inch のフルスペックに勝つ
- 2018 版 15 inch i7 は iMac Pro 8 コアの約 73 %の速さ
- 2018 版 15 inch i9 は iMac Pro 8 コアの約 79 %の速さ
価格(以下税別価格)
13 inch
標準スペック ¥198,800
オプション
- CPU Core i7 +33,000
- メモリ 16GB +22,000
SSD はいずれかを選択
- SSD 512GB +22,000
- SSD 1TB +66,000
- SSD 2TB +154,000
15 inch
標準スペック i7 (2.2GHz) 256 SSD ¥258,800
標準スペック i7 (2.6GHz) 512 SSD ¥302,800
オプション
- CPU Core i9 +44,000
- メモリ 32GB +44,000
- Radeon Pro 560X +11,000
SSD はいずれかを選択
- SSD 512GB +22,000
- SSD 1TB +66,000
- SSD 2TB +154,000
- SSD 4TB +374,000
購入プランを考える
今まではコスパの面で 15 inch 一択だったが、今回は 13、15 inch 共に Pro という名にふさわしい CPU の構成になっている。
また、MacBook Pro に関しては Mac 作業しなければいけない状況である場合、出先で使ったりラップトップでの使用が必要である場合、CPU のスペックがそれなりに必要な場合などの用途を考えた末で購入した方が良いと思われる。
MacBook や iMac、iPad で作業が代用できるのなら頑張って買う必要はない。
大きさは小さく、軽い方がいい
13 inch を選ぶことになる。
ただ標準構成の i5 は良くなったとはいえ、Hyper Threading のない4コアなので、4コア8スレッドの i7 にアップグレードした方が良いかと。
数字上倍になるし。
Core i5 も Hyper Threading できるため、i7 との主な違いはクロックとキャッシュ。
基本的な操作では i5 も i7 も誤差だとは思われるが、3DCGや動画編集など CPU を継続的に使用する負荷の高い処理ではクロック分の違いは出ると思われる。
GPU をそれなりに使う場合、内臓 GPU に関しては良くなってきているものの申し訳程度なので、財力があれば eGPU を導入したいところ。
Apple の MacBook Pro のサイトで書かれているように、Radeon Pro 580 搭載 eGPU を使えば3〜8倍まで速くできる。
雑に言うと、15inch の GPU と iMac Pro の中間ぐらいにはできるはず。
15inch と比べて、値段の安さ、大きさ、重さ以外に関して劣っているので、スペックが欲しい場合はこちらを選択すると後悔することになる。
(体験談)
ハイスペックマシンをモバイルで
15 inch を選ぶこととなる。
13 inch i7 のハイスペックは8スレッドだが、15inch は6コア12スレッドでメモリも DDR4 となっている。
GPU の 555X, 560X に関しては、多分 Radeon Pro 555, 560 の省電力版だろうと予想。
正直、同じビデオメモリ(VRAM)の 555 と 560 の差は微妙なのでお金に余裕がある人向け。
+11,000 なのでめっちゃ高いわけではないけど。
一応、Core i9 にも触れるが、こちらもスペックの伸び率はそれなり。
この筐体で Turbo Boost がどこまで動くか謎だし、頑張らせた時 i7 より熱くなるのは避けられない。
また、デスクトップの i9 と異なり Xeon からのおこぼれの拡張機能がない。
メモリを上げるか否か
メモリのスペックを上げるのは使用するアプリ次第。
あとで変えられないので迷ったら上げるべし。
SSD ストレージについて
ストレージに関してモバイルとして、データを保持する必要がどこまであるかで決まるだろう。
あまり持ち運ばないのであれば、USB-C でつなぐものでも良いし、もし ディスプレイや eGPU を使用するのであれば、大概 USB のコネクタが付いているので拡張のストレージをそこにつければ良いだろう。
お金はかかるが、iCloud や Apple Music があればストレージが多くなくても運用もできる。
256GB でも持つケースはあると思うが、Adobe 系や 3DCG DCC ツールや Unity や Unreal などゲームエンジンや Xcode などアプリだけではなくそれに付随するファイルで圧迫されることがある。
個人的には 512 GB にした方が良いとは思う。
逆に、2TB, 4TB などは 4K 動画などの編集する人向け。カジュアルにギガ単位でファイルができあがるため。
MacBook Pro 15 inch を iMac Pro 並みにできるか?
MacBook Pro 15 inch の Core i9 にメモリー 32GB、GPU 560X、ストレージ 1TB にすると 423,800 円。
5K ディスプレイ、eGPU Box、Vega 56 / 64 を足すと値段が iMac Pro 8 Core より高くなるし、CPU とメモリに機能差がある。
MacBook Pro でなければならない理由
ログインや Apple Pay に使用する Touch ID がある。
セキュアエレメントと呼ばれるもので動き、多分 ARM チップの TRUST ZONE を使用したものだと思わる。
セキュリティの問題で本体から外せないため、今後もワイアレスキーボードに Touch ID はつかないと思う。
Touch Bar はお察し。
動画再生時や Final Cut Pro X など再生位置をスクラブさせるのは便利。
(物理 ESC キーだけは返してほしい)
今後の懸念
次の iMac で次世代の CPU や i9 が載るとしたら、いつも通り iMac のコスパが良くなる。
Mac Pro は多分 Xeon 複数搭載すると思うので対象外。
買うべき構成を絞り込む
他の記事に続く
Surface Go と iPad 9.7、iPad Pro 10.5 について
OS が Windows と iOS なので比較対象にならないのだけど、日本では同価格帯になってしまったのでまとめてみる。
CPU
Intel の第7世代、所謂 Kaby-Lake 世代の Pentium Gold 4415Y。
1.60 GHz で2コアの4スレッドなのだが、
残念ながら Kaby-Lake 世代の m3 よりも遅い。
そのため、iPad 9.7、iPad Pro 10.5 よりもスペック的には劣る形となっている。
あまり比較にはならないが Geekbentch
CPU | Single Core | Multi Core |
---|---|---|
A10X (iPad 10.5) |
3904 | 9291 |
A10 (iPad 9.7) |
3462 | 5886 |
Pentium Gold 4415Y (32Bit Android) |
2047 | 3977 |
Pentium Gold 4415Y (64Bit Windows) |
2050 | 3946 |
US と日本での価格差(以下、全て税別価格)
64GB モデルが $399 となっており日本の価格が 64,800 円。
$1 あたり約 162 円で、Office Home & Business 入りなので高くなっている。
上のグレードのメモリー 8G、ストレージ 128GB 版は 82,800 円。
ちなみに Apple は現在 $1 あたり約 115 円。
Surface Go のストレージとメモリ
多分これがネックになるのだろうと思うが、64GB モデルの Surface Go のストレージは NVMe の SSD ではなく、eMMC だ。
そのため、状況によっては HDD より遅くなる可能性があるし、
メモリーも 4GB なので選択肢的には上のグレードの方が快適だろう。
Surface Go と iPad の違い
同価格帯である iPad Pro 10.5 inch と比べてみる。
OS 以外なら iPad Pro は価格が 5,000 円高く、Apple Pencil 筆圧感度が負けており、スペック上それ以外は勝っている。
Surface Go には Windows Hello による顔認証、165度まで開くキックスタンド、microSD カードスロットがなどある。
(Apple Pencil 筆圧感度は非公表だが 2048 だったはず)
iPad の 9.7 と 10.5 インチの差は過去記事参照。
価格
同じぐらいの iPad と比較してみる。
端末名 | 価格 |
---|---|
iPad 9.7 32GB Wi-Fi | ¥37,800 |
iPad 9.7 32GB Wi-Fi + Cellular | ¥52,800 |
iPad 9.7 128GB Wi-Fi | ¥48,800 |
iPad 9.7 128GB Wi-Fi + Cellular | ¥63,800 |
Surface Go 64GB Wi-Fi | ¥64,800 |
iPad Pro 10.5 64GB Wi-Fi | ¥69,800 |
Surface Go 128GB Wi-Fi | ¥82,800 |
iPad Pro 10.5 256GB Wi-Fi | ¥86,800 |
iPad Pro 10.5 64GB Wi-Fi + Cellular | ¥84,800 |
iPad Pro 10.5 256GB Wi-Fi + Cellular | ¥101,800 |
キーボードに関しては Type Cover ¥11,800 に対して、iPad の Smart Keyboard の 10.5インチが ¥17,800、9.7 が ¥15,800。
10.5 で +6,000、9.7 で +4,000 だし、約 244g と約 230g と Surface Go と比べた際重くなるかもしれない。
Surface Pen は ¥11,800 で、Apple Pencil は ¥10,800 と若干だけ安い。
Surface Go の OS
OS は Microsoft Store アプリのみが動く Sモードなので、通常のデスクトップアプリ(Win32 的なやつ)を実行する場合は通常の Windows 10 Home に変更する必要がある。(無料でアプデート可能)
まとめ
日本では Surface Go が高くなってしまったが、 US 価格で考えると個人的には Chromebook と iPad の間にあるプロダクトだと思っている。
CPU も GPU もあまりパワーはないので、Photoshop や 3DCG、Unity などのゲームエンジン等、負荷の高い操作には向いていない点だけは考慮する必要があり、そのニーズを満たすのであれば良い商品だと思われる。
だが、その用途で行う操作は iPad や Chromebook で事足りる感はあるので厳しさはある。
まぁ、みんな思っているだろうけど Office いらないよね。
Office 365 使ってて、サブマシンにするなら必要ないだろうし。