SceneKit の変更点 (Xcode 11 Beta 1)
今回も SceneKit のセッションがなく、ドキュメントの説明もないのでメソッドやプロパティ名から予想。
間違っていたらすみません。
ちなみに、Scene Editor の変更がそれなりにありそうなのだが NDA 的に紹介できないのでそのうち。
長いので最初にまとめ
以下、主な更新内容
- エリアライトの追加
- リフレクションプローブの追加
- シーン全体のスクリーンスペースリフレクションの追加
- カメラエフェクトの追加と調整
- マテリアルでクリアコートのプロパティが追加
SCNScene
シーン全体での Screen Space Reflection が追加。
wantsScreenSpaceReflection で有効 / 無効、
MaximumDistance は有効距離、SampleCount はサンプリング回数、
Stride は多分レイトレーシングのステップ数で反射回数。
var wantsScreenSpaceReflection: Bool { get set } var screenSpaceReflectionMaximumDistance: CGFloat { get set } var screenSpaceReflectionSampleCount: Int { get set } var screenSpaceReflectionStride: CGFloat { get set }
SCNView
以下のものが廃止され、macOS 10.15 から OpenGL での描画が使用できなくなる。
var openGLContext: NSOpenGLContext? var pixelFormat: NSOpenGLPixelFormat?
macOS 10.15 で追加。
ウインドウがリサイズされた時に描画の変更を非同期で行うか否か。
現状でも非同期になっていると思われるのでデフォルトは true。
var drawableResizesAsynchronously: Bool { get set }
SCNNode
SCNHitTestOption で ignoreLightArea が追加された。
LightType で追加されたエリアライトで表示されるジオメトリをヒットテストの対象から外すものだと思われる。
static let ignoreLightArea: SCNHitTestOption
SCNSceneRenderer
以下、3つが追加。ドキュメント上は必須の設定 (Required)
多分でデフォルト値が設定されているため、開発者側ですることはないと思われる。
var currentViewport: CGRect { get } var isTemporalAntialiasingEnabled: Bool { get set } var usesReverseZ: Bool { get set }
currentViewport は現状のビューポートを取得するものだと想定される。 isTemporalAntialiasingEnabled リアルタイムでアンチエイリアス状態の変更を有効化するか設定するものだろうと思われる。(詳細不明)
また、delegate が weak だったのが unowned(unsafe) に変更された。
SCNHitTestResult
SCNHitTestResult で取得できる座標で SCNVector3 や SCNMatrix4 で設定されていたものが simd に変更されたものだと思われる。
var simdLocalCoordinates: simd_float3 { get } var simdLocalNormal: simd_float3 { get } var simdModelTransform: simd_float4x4 { get } var simdWorldCoordinates: simd_float3 { get } var simdWorldNormal: simd_float3 { get }
SCNLight
エリアライト
エリアライトが追加された。
LightType で area が選択可能になり、
areaExtents は有効範囲。
areaType で線と矩形と多分自前で設定できる平面の多角形を選択。
areaPolygonVertices は自前でエリアライトの平面を設定。
doubleSided はエリアライトの平面を両面表示にし、
drawsArea はエリアライトの線と矩形、ポリゴンを描画するか否か。
static let area: SCNLight.LightType { get set } var areaExtents: simd_float3 { get set } var areaType: SCNLightAreaType { get set } var areaPolygonVertices: [NSValue]? { get set } var doubleSided: Bool { get set } var drawsArea: Bool { get set }
SCNLightAreaType
エリアライトでの形状設定。
線と矩形と多分自前で設定できる平面の多角形。
case line case polygon case rectangle
リフレクションプローブ
リフレクションプローブが追加された。
ライトプローブは周囲の光を画像に書き込み周りに反映するが、リフレクションプローブは周囲の鏡面反射のような状態を画像に書き込む。
ゲームエンジンなどでは光の反射は現実のようには処理できないため、背景などは反射対象になるが、隣接するジオメトリは反射の対象にはならない。
そのため、リアルタイムレイトレーシングを行う必要があるが、リフレクションプローブを使うことで擬似的に反射させることができる。
probeType でライトプローブかリフレクションプローブを選択し、
probeEnvironment でライトのパラメーター、
probeExtents、probeOffset は有効範囲とオフセット、
probeUpdateType はラディアンスマップを作成するかリアルタイムにするかで、
parallax はラディアンスマップでつくったキューブマップの視差ををどうするか設定するものだと思われる。
var probeType: SCNLightProbeType var probeEnvironment: SCNMaterialProperty? var probeExtents: simd_float3 var probeOffset: simd_float3 var probeUpdateType: SCNLightProbeUpdateType var parallaxCenterOffset: simd_float3 var parallaxCorrectionEnabled: Bool var parallaxExtentsFactor: simd_float3
SCNLightProbeType
ライトプローブでの設定追加。
どちらかが、既存のライトプローブでもう片方がリフレクションプローブ。
多分 radiance がリフレクション。
case irradiance case radiance
SCNLightProbeUpdateType
以前はラディアンスマップを画像として事前に作成させていたが、今回からリアルタイムで計算し直すオプションが増えた模様。
case never case realtime
SCNCamera
HDR でブルーム効果のパラメーターが追加され、多分、ブルーム効果が綺麗になると思われ。
IterationCount 減衰を繰り返す数で、
bloomIterationSpread 減衰繰り返しの際の強さ。
var bloomIterationCount: Int { get set } var bloomIterationSpread: CGFloat { get set }
ポストエフェクトが追加された。
grain は画面の荒さ、
whiteBalance はカラーグレーディングでホワイトバランスの調整。
var grainIntensity: CGFloat { get set } var grainIsColored: Bool { get set } var grainScale: CGFloat { get set } var whiteBalanceTemperature: CGFloat { get set } var whiteBalanceTint: CGFloat { get set }
こちら詳細不明。
ビューポートサイズから投影している画面の座標を取得するのではと思われる。
func projectionTransform(withViewportSize viewportSize: CGSize) -> SCNMatrix4
SCNMaterial
車のボディのようなクリアコートのプロパティが追加された。
現状の表現では Meralness や Roughness の数値を上げると表面が完全に反射したり、完全にぼやけてしまう。
多分、表面に透明な塗装をすることで車のボディなどで見る色のついた上から鏡面反射が付加された現実に近い表示がされる。
var clearCoat: SCNMaterialProperty { get } var clearCoatNormal: SCNMaterialProperty { get } var clearCoatRoughness: SCNMaterialProperty { get }
SCNParticlePropertyController
inputOrigin が weak から unowned(unsafe) に変更。
SCNBufferStream
以下に UnsafeRawPointer 変更
func writeBytes(_ bytes: UnsafeRawPointer, count length: Int)
func writeBytes(_ bytes: UnsafeMutableRawPointer, count length: Int)
SCNTechnique
MTLLibrary の読み書きが追加された。
var library: MTLLibrary? { get set }
SceneKit Constants
多分、使用できる OpenGL のバージョンか何かを調べることができる。
var SCN_ENABLE_OPENGL: Int32 { get }
SCNLayer
macOS にあった SCNLayer クラスが 10.15 廃止された。
以上、見た目の変更に関するものがほとんどとなった。