ue4の新機能のご紹介、ライブコーディングもやるよ!c++だけど何か?
TRANSCRIPT
April 18, 2015
Unreal Fes 2015 Osaka
UE4の新機能のご紹介 ライブコーディングもやるよ!
C++だけど何か?
シモダジュンヤ Jun Shimoda
Developer Support Manager, Epic Games Japan
April 18, 2015
Unreal Fes 2015 Osaka
自己紹介
シモダジュンヤ(@junyash) • アンリアル・エンジンの利用経験をきっかけとして2010年2月からエピック・ゲームズ・ジャパンでサポート・マネージャーとしてアンリアル・エンジンの普及・サポート活動を行っています。
• PC-1251とMZ-2000でBASICを覚えて、Z80, 8086, 6502, 65c816くらいまではアセンブラ、MIPS, ARM, PowerPC世代は主にC++。
• DirectXとOpenGLは素で書いていたけど、最近UEがあるから書いてない。
• C#はにわか… Terrariumの頃から嗜む程度
April 18, 2015
Unreal Fes 2015 Osaka
本日のメニュー!
• UE4の最新ニュースと機能のご紹介
– GDC 2015より
• IF YOU LOVE SOMETHING, SET IT FREE
• 「Open World Demo Collection」等解説
• ライブコーディング
– C++のコードコーディング
April 18, 2015
Unreal Fes 2015 Osaka
April 18, 2015
Unreal Fes 2015 Osaka IF YOU LOVE SOMETHING,
•SET IT FREE – UE4は無料で利用できるようになりました!
– 4半期で3,000ドルを越える売上に対して5%のロイヤリティで開発を支援を。ぜひビッグヒットを!!
• 映像作品やアーケードゲーム等はロイヤリティはかかりません
April 18, 2015
Unreal Fes 2015 Osaka
Tim Sweeney Epic Games, Founder 創業者 & CEO
振り返ってみると 僕らがプログラミングを始めた頃は 雑誌に沢山のサンプルプログラムが載っていて それを打ち込んで動作を理解できたんだよ
ここ20年ほどゲーム業界の暗黒時代というか 沢山のゲームがリリースはされてきたけども ソースの公開は限定的で、そこから勉強するということができなくなっていたんだよね
この現状を打開するためには UE4のソースコードを公開して勉強できるようにするしかないと思ったんだ
GitHub OctoTales / Epic Games https://www.youtube.com/watch?v=L8d0G7Duz9A
April 18, 2015
Unreal Fes 2015 Osaka
KITEデモで使われている新機能
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:目標
• Kiteデモの目標
–広大な自然表現
–キャラクター表現
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• こんな感じの生物群系(Biome) スコットランド スカイ島、岩と植生のコントラスト
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• フォトリアリスティックを目指しリアルキャプチャを選択
– 実地で実物から
– 取り込む!
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• ロケ地探し – Google Earth
– Panoramio
– 500 Pixels
– Flickr
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• アセットを細分化
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 要素を分類
地面
地面のカバー
大きな岩
地形から剥きだした岩
小さな岩
植生
小道
崖面
中くらいの岩
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 撮影地決定 – ニュージーランド2名
• 日中の12時間
• 開花した植物系
• 晴れ
– イギリス2名
• 天候は良くなかった
• でも実際のUK素材を取り込めた
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 取り込むカテゴリ
参照画像
Plants, Bushes, Flowers, Water, Distant Objects, Landscapes
実物取り込み
3D mesh 2D ground tile Tree bark
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 参照画像 – クロマキー用背景
– カラーチェッカー
– 円偏光フィルター
– 三脚
– 深い被写界深度
– ブラケット撮影!
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 実物取り込み
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 機材 – キャノン 5D MKIII x 3
– シグマ 8mm f/3.5
– キャノン 24-70mm f/2.8L
– カラーチェッカー
– Roundshot VR Drive
– 一脚
– 伸縮ポール
– リモートライブビュー
– グレーと金属球リグ
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 撮影プロセス
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 撮影プロセス
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 撮影プロセス
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:広大な自然表現
• 撮影プロセス
April 18, 2015
Unreal Fes 2015 Osaka
April 18, 2015
Unreal Fes 2015 Osaka
Final Results
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• 完全に動的なライティング – 広大なアウトドア
– 日中の時間変化
– 即座に変更可能(ビルド時間なし)
– 広い視野範囲
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• 3つのライティング要素
太陽からの間接光 (グローバルイルミネーション)
太陽からの直接光
スカイライト
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• 太陽からの直接光
– カメラ付近のカスケーデッドシャドウマップ(CSM)
• フォーリッジのアニメーションに対応
• トライアングルからの大きなコスト
CSM
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• 太陽からの直接光
– レイトレースディスタンスフィールドシャドウ(RTDF)
• 広い視野範囲には3倍効果的
• 全ての距離でディテイルを保てる
RTDF Shadows
CSM
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• 太陽からの間接光
スカイライトのみ ハイトフィールドGI
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• スカイライト
– HDR Cubemapから事前計算で異なるラフネスレベルに対応(GIやイメージベースドライティングができる)
ラフネス 0.0 1.0
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• スカイライト
– シャドウイング
• Screen Space Ambient Occlusion (SSAO) を凸凹や近距離に
• Distance Field Ambient Occlusion (DFAO) を中距離に
SSAOのみ SSAO+DFAO
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:ライティング
• スカイライト
– Distance Field Ambient Occlusion
• メッシュディスタンスフィールドからコーントレースして空の可視判定を行う
• ワールドスペースの遮蔽計算(スクリーンスペース問題なし)
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:シェーディングとポスト
• 両面シェーディングモデル
– 薄い面の透過光モデル
– 葉っぱと凧の素材で利用
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:シェーディングとポスト
• サブサーフェーススキャッタリング – スクリーンスペース
– ディフュージョンプロファイルで制御(肌専用のものではない)
SSSなし SSS
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ:シェーディングとポスト
• モーションブラー
– スキャッターアズギャザー技法
– フル解像度
– モーション幅の制限なし
– スムースなエッジ
– 未だ実装中で公開はまだ先の予定
April 18, 2015
Unreal Fes 2015 Osaka
被写界深度(DOF)
• スキャッターアズギャザー技法
– 近景と遠景の統合
– 円形のボケ
• フォーカスのインアウトのスムーズな変化
– フルと半解像度のサンプリング
– ソフトフォーカスのアーチファクトなし
• 現実のカメラパラメータで制御
– レンズ口径(Aperture)
– 焦点距離(Focal length)
– 集束距離(Focal distance)
April 18, 2015
Unreal Fes 2015 Osaka
ランドスケープとフォーリッジ
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: ランドスケープ
1m解像度で10x10マイル(16x16キロメートル)
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: ランドスケープ
ストリーミングで連続的なLODシステム
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: ランドスケープ
ウェイトマップによるテクスチャ参照
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: ランドスケープ
結果:ライティングされたテクスチャ付きマテリアル
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: フォーリッジ
• 樹木
• 樹木、岩・・・
• コリジョンあり
• 手動 / プロシージャル配置
• 草
• 草、花、小石・・・
• コリジョンなし
• マテリアルに応じた配置
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: フォーリッジ
• 階層的にインスタンシングされたスタティックメッシュ
– 100万超インスタンスの描画
– メッシュをBSPライクなツリーで管理 (Binary Space Partitioning)
– ピクセル単位でLOD変化
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: フォーリッジ
LOD polys: 115,000 13,000 2,500 32
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: フォーリッジ
• LODでピクセル深度オフセットを利用し、シャドウ品質向上
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: フォーリッジ樹木
April 18, 2015
Unreal Fes 2015 Osaka
地形とマテリアルによる草配置
April 18, 2015
Unreal Fes 2015 Osaka
動物
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: 動物
• とても素晴らしい表現ができた、でも動きに乏しい・・・
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: 動物群
• 我々のダイナミックシステムが広大な世界にどのくらい適合できるかテストしてみた
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• 群れの中心がドローンから離れるためのパスを探索
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• 群衆シミュレーションで樹木と別の鹿を避ける
• 4足歩行での挑戦
– 点上での転回
– 加速までの時間
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• ナビゲーションメッシュ
– 樹木と崖を避ける
– 新たな効果的な移動
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• ナビゲーションメッシュ
– 事前計算するには大きな世界
• 5GBもメモリを使う!
– タイルを動的に必要に応じて生成
• 複数のコアに作業を分配
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• ナビゲーションメッシュ
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• アニメーション
– 合成されたルートモーション
• AIがゴールを設定
• ステートマシンが ベストなアニメーションを探す
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• アニメーション
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• アニメーション
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: AI
• スポーン
– ワールドをセルに分割
– ベストな場所をルールにしたがって策定
April 18, 2015
Unreal Fes 2015 Osaka
シネマチックなキャラクター
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: キャラクター
• 序章
– ストーリーの中で技術を紹介
– キャラクターの旅
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: キャラクター
• イメージボード
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: キャラクター
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: キャラクター
April 18, 2015
Unreal Fes 2015 Osaka
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: キャラクター
• キャラクター向け技術
– 映画指向のフェイシャルリグ
• フェイスリグと 500以上のブレンドシェイプ
– 制御可能なボディシェイプ
• ポーズに適したメッシュの見栄えを アーティスティックに制御できる
– スキンシェーダーの向上
• カスタムSSSディフューズプロファイル
April 18, 2015
Unreal Fes 2015 Osaka
Kiteデモ: ストーリーテーリング
Unreal Engine 4を使った
あなたのストーリーをぜひ見せてください
(映像利用はロイヤリティーがかかりません)
April 18, 2015
Unreal Fes 2015 Osaka
GDC報告は以上
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• はじめましょう!
– C++版Flyingゲームテンプレート
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• UFOの挙動を変えてみよう! – ワールドアウトライナから「TP_FlyingPawn」を見つけて「開く ゲーム名
Pawn.h」をクリックでVisualStudioが起動します
– ゲーム名Pawn.cppに UFOの挙動が実装されています
– FlyingのUFOの場合は Aゲーム名Pawn::Tick(float DeltaSeconds) があるので主にそこを変えればOK
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• UFOの挙動を変えてみよう! – 例えば前進速度を10倍にしてみる
void Aゲーム名Pawn::Tick(float DeltaSeconds)
{
const FVector LocalMove = FVector(CurrentForwardSpeed * 10.f * DeltaSeconds, 0.f, 0.f);
:
– 変更して保存したらエディタから 「コンパイル」してみよう (VisualStudio側でビルドでもOK)
– コンパイルができたら「プレイ」
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• 独自のブループリントのノードを作ってみよう! – ゲーム名Pawn.h
UFUNCTION(BlueprintCallable, Category = Flying)
void Drunk(float HowMuch);
– ゲーム名Pawn.cpp
void Aゲーム名Pawn::Drunk(float HowMuch)
{
CurrentYawSpeed = HowMuch;
}
– コンパイル!
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• 独自のブループリントのノードを使ってみよう! – コンパイルが終わればすぐにエディタ上で使えるようになります
– レベルブループリントから使ってみよう!
• Get Player Pawn
• ゲーム名Pawnへキャスト
• Drunk呼び出し
• あとはイベントBegin PlayやTick等を繋げるだけ!
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• 敵を作ってみよう!
– 「ファイル」メニューから「プロジェクトにコードを追加」
– 親クラスを「Pawn」にして「MyEnemy」等の名前でクラスを作成
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• ソリューションに自動的に登録されコンパイルされます
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• コンパイルが終わればコンテンツブラウザのC++クラス内のゲーム名フォルダにMyEnemyが現れるのでレベル上にドラッグ&ドロップできます
– でもメッシュがないので 詳細タブの コンポーネントを追加 から球を
April 18, 2015
Unreal Fes 2015 Osaka
C++ライブコーディング
• 敵もTickがあるので – MyEnemun.cpp
void AMyEnemy::Tick( float DeltaTime )
{
const FVector LocalMove = FVector(500.f * DeltaTime, 0.f, 0.f);
AddActorLocalOffset(LocalMove, true);
Super::Tick(DeltaTime);
}
– あとはファイルを保存して「コンパイル」して「プレイ」!
– ゲームをプレイしながら「Shift+F1」や「F8」で抜け、コードを書き換え
て「コンパイル」でリアルタイムの反映も可能! (500.fを2000.fとか変更して試してみよう!)
April 18, 2015
Unreal Fes 2015 Osaka
他にもいろいろ
• 50分に詰め込むには・・・ちょっと時間不足ですみません
– もっと内容とライブコーディング凝りたかったんですが…
• ホワイエにドスパラさん(サードウェーブデジノスさん)の 最新マシン上で「Showdown」デモをOculusで体験できます
– それと、VR関係のお話もしたかったんですが…
• 4/24(金) OGCに出展します、夜はとげとげさんの「UE4の歩き方」出版パーティーもあります
• 4/25(土),26(日) 東京オッキューランド@ニコニコ超会議!
• 4/27(月) おきゅっていいとも!(桜花一門さんのニコ生配信)
でVR関連のネタをお見せできると思います。
April 18, 2015
Unreal Fes 2015 Osaka
Q&A
ありがとうございました ご質問がある方?
ぜひアンケートにもご協力ください、次回の励みになります