WWDC 2017 の SceneKit サンプル Fox 2 を調べる その3
character フォルダ
操作するキャラクター レッサーパンダの Max に関するリソースが入っている。
メインのファイル
max.scn は Max_rootNode を起点に以下のような構成
- シーンの障害物判定に合わせるための Kinetic の PhysicsBody に設定されている collider
- キャラクターアニメーション用ボーンの Bip001
- Max のジオメトリ
- ジャンプ後着地際に表示するパーティクルの起点となる空のノード dustEmitter
- 攻撃する際に表示するパーティクルの起点となる空のノード particles_spin_circle
アニメーション用のファイル
iOS 11, tvOS 11, macOS 10.13 で使用できるようになった SCNAnimation と SCNAnimationPlayer 用のボーンアニメーションが各ファイルにある。
- max_spin.scn 攻撃時のアニメーション
- max_walk.scn 歩行時のアニメーション
- max_idle.scn 操作をしていない時のアニメーション
- max_jump.scn ジャンプボタン押下時のアニメーション
各シーンファイルの構成は以下の画像のようになっている。
max.scn と同じように Max_rootNode の下に Bip001 があり、アニメーションが設定されている。
このボーンアニメーションをプログラムから SCNAnimationPlayer で操作し max.scn に設定されているジオメトリにたいしてスキニングアニメーションをさせる。
そのため、Scene Editor で max_spin.scn などの Bip001 に設定されている Animations の歯車ボタンから.anim で書き出して、max.scn の Bip001 へ読み込むことで動きの確認ができる。
Max のテクスチャファイル
- max_AO.png
- max_diffuse.png
- max_roughness.png
- max_specular.png
基本的な構成はファイル名通りアンビエントオクルージョン、表面色、表面の荒さ、光沢を設定したテクスチャ。 max_specular.png は使用されていない。
- max_diffuseB.png
- max_diffuseC.png
- max_diffuseD.png
他の仲間の色として3色分用意されている。
Roughness と Ambient Occlusion テクスチャのおさらい
Roughness
Roughness は表面の荒さを表し、
テクスチャが黒に近くなる、もしくは値が 0 に近くなる程光沢は小さくシャープになり、
テクスチャが白に近くなる、もしくは値が 1 に近くなる程光沢はぼやけて広範囲になる。
以下の画像では、左のテクスチャをジオメトリに適応している。
色の黒い目や鼻は光沢がシャープで小さく、体などは光沢が荒く広くなっている。
Ambient Occlusion
Ambient Occlusion は物体が遮蔽される部分に影を生成する技術。
形状によっては現実的には存在しない陰ができるため擬似的なものだと考えて欲しい。
今回はテクスチャを使用しており処理的には黒い部分の色を乗算をしている。
以下の画像では左のテクスチャを適応している。本来はアンビエントライト1つしかないので、陰は落ちないがテクスチャが書き込んでいる。
パーティクルシステムファイル
- jump_dust.scn
- smoke.png
jump_dust.scn にパーティクルシステムが設定されておりジャンプ着地時に砂煙のようなパーティクルを出す。
smoke.png はこのパーティクル画像。
ちなみに smoke.png は particles フォルダ内にある Max が溶岩に落ちた際に尻尾につく煙のパーティクルでも使用されている。
その他
max.scn など一部シーンファイルは Scene Editor から Shader Modifiers 経由でシェーダーが設定されている。
こちらはいつかまとめて紹介しようと思う。
次回は enemy フォルダ の中身を見てゆく。