cedec2014: アンリアル・エンジン4を技術者が活用するための最新ノウハウ
DESCRIPTION
CEDEC 2014の2日目9/3(水)13:30から「アンリアル・エンジン4を技術者が活用するための最新ノウハウ」として発表させていただいた際のスライドです。描画周りやその最適化、さらにOculus対応やSave/Load周り等のご紹介です。TRANSCRIPT
September 3
CEDEC 2014
アンリアル・エンジン4を 技術者が活用するための
最新ノウハウ
シモダジュンヤ Jun Shimoda
Support Manager, Epic Games Japan
September 3
CEDEC 2014
自己紹介
シモダジュンヤ(@junyash)
• アンリアル・エンジンの利用経験をきっかけとして2010年2月からエピック・ゲームズ・ジャパンでサポート・マネージャーとしてアンリアル・エンジンの普及・サポート活動を行っています。
September 3
CEDEC 2014
本日持ち帰っていただきたいモノ!
• UE4で高品質なコンテンツを効率よく制作するノウハウ
• それを高パフォーマンスで実現する方法
• さらに内容を豊かに拡げるためのイロイロ
• UE4の1ヶ月無料プロモーションコード! – 最後に入り口で受け取ってください
– コードは1回しか使えないのでTweetして使われちゃうと その後は使えなくなるので注意!(^_^;)
– もちろんコード以外でしたら 今日の内容は撮影やtweetしていただいて大丈夫です!
– ハッシュタグは #UE4Study #CEDEC2014
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい! フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
リアルなレンダリングがしたい!
• ですよね~。UE4なら得意分野です!
• 物理ベースのレンダリングシステムが実装されています。
– 物理ベースのライティング
– 物理ベースのマテリアル(シェーダー)
September 3
CEDEC 2014
リアル:物理ベースのライティング
September 3
CEDEC 2014
リアル:物理ベースのライティング
• 物理的に正確なアルゴリズムと単位の適用
– ポイントライトとスポットライトの明るさはルーメン単位
– 距離の2乗に反比例して減衰
• IESプロファイルを使用する事も可能
– 照明メーカー等から様々な照明のデータが公開されている
– UE4では2Dデータを1Dデータにして保存
– GIベイクツールLightmassとも統合済み
September 3
CEDEC 2014
リアル:物理ベースマテリアル
September 3
CEDEC 2014
リアル:物理ベースのマテリアル
• 目標:複雑さを排除しつつも柔軟性を維持 • シンプルで直感的なパラメータ (0.0 – 1.0)
– Base Color • マテリアルの色
– Roughness (0.0 – 1.0) • マテリアルの粗さ
– Metalic (0.0 – 1.0) • 金属
– Specular • 金属質ではないマテリアルのスペキュラ
• 扱いやすい物理ベースのマテリアル
• 不自然な見栄えが起こる事故を防げます
• エネルギー保存法則に従った、より自然なレンダリング • 詳しくはこちらのドキュメントをどうぞ
https://docs.unrealengine.com/latest/JPN/Engine/Rendering/Materials/PhysicallyBased/index.html
September 3
CEDEC 2014
リアル:Image Based Lighting
• スカイライトを配置
– CubemapプロパティにIBLテクスチャを設定するだけ!
September 3
CEDEC 2014
リアル:Image Based Lighting
• IBLやってみましょう
September 3
CEDEC 2014
リアル:Image Based Lighting
• アーキテクチャ系動画
September 3
CEDEC 2014
リアル:モバイルでも
• Zen Gardenデモ(iOSデバイス+Metal API)
September 3
CEDEC 2014
リアルなレンダリングの裏側で…
これらの物理ベースのライティングや 物理ベースのマテリアル・シェーディングを支えている
• ディファードシェーディング – これらのリッチなライトをシーン全体に沢山配置してリアルな表現が可能
– 半透明はフォワード系のパスを使うので シーンへのライティングが完全には反映できない (改善してきているが、さらなる改善策を模索中)
– 特殊なライティングが苦手だったが Version 4.3 で拡張機能を実装
September 3
CEDEC 2014
リアルなレンダリングがしたい?
• 特殊なライティング?
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング! パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
ノンフォトリアル
• ノンフォトリアルと言ってもいろいろありますよね
• 日本で良く使われるのはトゥーンシェーダー(セルルックシェーダー)
• 輪郭を描画する処理
– 裏面ポリゴンを法線方向に膨らませる系(コンポーネントを複製)
– Sobel Edge Detection等ポストプロセスで深度等を参照する系 http://udn.epicgames.com/Three/DevelopmentKitGemsSobelEdgeDetectionJP.html
September 3
CEDEC 2014
ノンフォトリアル
• セルルックなシェーディング
– UE3世代では、マテリアル中でライトと法線の内積値をキーにした トゥーンマッピング用のテクスチャ参照が多い
– ディファードシェーディングではライトがシーンに対して適用されるため、個別のマテリアルを扱っているタイミングではライトの情報が来ていない
• Stylizedサンプルの雲ではマテリアルパラメータコレクションから Light VectorとLight ColorとAmbient Lighting Colorを渡して利用
• でも、シャドウ部分のセル塗りができない
September 3
CEDEC 2014
Stylizedデモ
September 3
CEDEC 2014
ノンフォトリアル
• さらなるノンフォトリアル表現のために
– ディファードシェーディングの欠点を克服
– UE4のVersion 4.3でLighting Model(Shading Model)を拡張
• これにより、特殊なライティングを行うマテリアルを実装可能に!
• Version 4.4のClear Coat Shading Modelはこの機能を利用して実装
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス ブループリントのちょっといい話
データの保存
ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
パフォーマンス
• 見栄えが良くても、ゲーム業界的にはパフォーマンスも重視ですよね?
– まずはボトルネックを見つける
• 「stat unit」コマンドや各種statコマンド
– Gameがゲームスレッド、Drawがレンダースレッド、GPUがGPU
September 3
CEDEC 2014
パフォーマンス
• 「stat unit」の結果
– ゲームスレッドがボトルネックな場合
• Session FrontendのProfiler
– レンダースレッドがボトルネックな場合
• 統計情報のPrimitive Stats
September 3
CEDEC 2014
パフォーマンス
• GPUがボトルネックになっている場合が大半
– 「profileGPU」コマンドもしくは「Shift+Ctrl+カンマ」でチェック
September 3
CEDEC 2014
パフォーマンス
• GPUのボトルネックを解消するには?
– 動的ライトを減らすこと
• ムーバブル(重)>ステーショナリー(中)>スタティック(軽)
– 動的シャドウを減らすこと
• 「Show Shadow Frustums」で動的なシャドウバッファの生成範囲を確認
– 本当にシャドウを落とす必要があるか?
– シャドウを落とす必要がある場合は アクターのを親子付してシャドウをまとめる事ができないか考える
» 「Light Attachments as Group」にチェックするとライト・シャドウを共有
– ライトの影響範囲を狭くする事も効果がある場合アリ
September 3
CEDEC 2014
パフォーマンス
• GPUのボトルネックを解消するには?
– 奥の手(見た目のクオリティを犠牲に…)
• 各種ポストプロセスのOFF
• 描画解像度を落とす(所謂アップスケーリング)
– r.ScreenPercentage 数字
– Oculusの場合は HMD SP 数字(デフォルト135なので100くらいならアリかも)
– Epicブースでプレイ可能な Vehicle GameのOculus DK2版は これらの機能で
75fps化を実現
September 3
CEDEC 2014
パフォーマンス
• 最適化や問題解決の為の機能も様々なものが実装済
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話 データの保存
ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
ブループリントのちょっといい話
• UE3世代のKismetというビジュアルスクリプト
– Kismetはレベルに紐付いていたので… 複雑なレベルはグラフが大変なことになりがち
• ブループリント!
– アセットを内包してライブラリ化できる
– オブジェクト指向
• 既存のブループリントを継承して、部分的に拡張する事が可能!
September 3
CEDEC 2014
Vehicle Gameをドライバー視点に!
• VH_Buggyを右クリックして「Create Blueprint based on this」 (Game/Vehicles/VH_Buggy/Blueprint内にあります)
– VH_Buggy_DriversEyeという名前に
– VH_Gamemodeを右クリックして「Create Blueprint based on this」 してVH_Gamemode_DriversEyeとしてGame Mode中のDefault Pawn ClassをVH_Buggy_DriversEyeという名前に
– ワールド設定の「GameMode Override」をVH_Gamemode_DriversEyeに
September 3
CEDEC 2014
Vehicle Gameをドライバー視点に!
• VH_Buggy_DriversEyeのコンポーネントに「コンポーネントを追加」
– SpringArmとCameraを追加して、DriversSpringArmという名前で[ルート]Meshの子供にして(必須ではないですが、カテゴリをCameraに)
– DriversCameraという名前にしてDirversSpringArmの子供にして 元のCameraのAuto ActivateをOFFに(カテゴリをCameraに)
– DriversCameraの位置調整 (X:50, Y:-40, Z:210としてみた)
September 3
CEDEC 2014
Vehicle Gameをドライバー視点に!
• DriversCameraのパラメータ調整
– DriversCameraのUse Controller View RotationをOFFに
– DriversSpringArmのEnable Camera LagとEnable Camera Rotation LagをONにして、Camera Lag Speedを100、Camera Rotation Lag Speedを50に。(ここはお好みで設定)
September 3
CEDEC 2014
Vehicle Gameをドライバー視点に!
• カメラの切り替え機能も入れてみましょう
– グラフでInputのKey EventsからYキー(なんでもよいです)
– 左の毎ブループリントの下部の「継承して変数を表示」すると継承元の変数も参照できるので、継承元のVH_Buggyが持っていたCameraを取得して、Toggle Active
– さらにDriversCameraを取得してToggle Activeを繋ぐだけ!
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存 ネットワーク対応
ビジュアライズ
Q&A
September 3
CEDEC 2014
データの保存
• レベルを跨ぎたいデータ – GameInstanceオブジェクト
• GameInstanceを継承してプロジェクト設定で設定
• Set
• Get
• ゲーム終了後も保持したいデータ – SaveGameオブジェクト
• SaveGameを継承して
• Save Game to Slot
• Load Game to Slot
• その他 – URL(レベルを切り替える際のレベル名等文字列)にパラメータを含める
– 特定のUObjectをRootにAdd
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応 ビジュアライズ
Q&A
September 3
CEDEC 2014
ネットワーク対応
• ネットワーク対応は既に入っています
– CouchKnights, ShooterGame, VehicleGameは実は対戦できます。
• サーバ側:インストールフォルダ\UE4Editor.exe “ドキュメントフォルダ\CouchKights.uproject” Room?listen –game
• クライアント側:インストールフォルダ\UE4Editor.exe “ドキュメントフォルダ\CouchKights.uproject” サーバIP –game
– Project IDが同じでないと通信できないので注意
実は対戦できます!
September 3
CEDEC 2014
ネットワーク対応プレイ!
• Vehicle Game
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
ビジュアライズ Q&A
September 3
CEDEC 2014
ビジュアライズ
• 「ウインドウ」メニューの「Plugins」から「Audio」を選択!
– Sound Visualizations Plugin
September 3
CEDEC 2014
ビジュアライズ
• http://www.youtube.com/watch?v=OVLzGq7WaAs
September 3
CEDEC 2014
ビジュアライズ
• Koolaさん https://forums.unrealengine.com/showthread.php?28163-ArchViz-Lighting
September 3
CEDEC 2014
ビジュアライズ
September 3
CEDEC 2014
ビジュアライズ
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
緊急告知! Q&A
September 3
CEDEC 2014
緊急告知!
• 既にご存知の方もいらっしゃるかと思いますが
– 第2回UE4ぷちコン! • 10/5が締め切りです。
• テーマは「光る」
– 優勝賞品:UE4が動くノートPC
– アイディア賞/ユニーク賞: iPad mini Retina (WiFi, 16GB) or Nexus 7 (WiFi, 32GB)
– 参加賞(検討中)
– アンリアル フェス 2014 • 10/13(月・祝日)
• 場所はここ、パシフィコ横浜
• 1,000名!無料!!
September 3
CEDEC 2014
本日のメニュー
リアルなレンダリングがしたい!
フォトリアルでないレンダリング
パフォーマンス
ブループリントのちょっといい話
データの保存
ネットワーク対応
緊急告知!
Q&A
September 3
CEDEC 2014
Q&A
ありがとうございました ご質問がある方?
入り口で忘れずにプレゼントを受け取ってください!