SlideShare a Scribd company logo
© KLab Inc.
プロシージャルゲームコンテンツ制作ブートキャンプ Part2
モバイルゲーム 実践
「How we got started」
Real-Time Rendering Research Group (RRR) - KLab株式会社
クレメンス・ベルガー
(Clemens Berger)
Senior Character Artist
忽 帥
(Hu Shuai)
Senior Technical Artist
© KLab Inc.
自己紹介
○ クレメンス・ベルガー(Clemens Berger)
○ 2017年3DCGクリエイターとしてKLab株式会社に入社
○ 様々なタイトルで主に3Dキャラモデルを担当
○ 2018年、新たに設立された組織「RRRグループ」に
立ち上げメンバーとして所属
○ 現在は新規プロジェクトにて
3Dキャラクター・リードアーティストとして活動
○ 並行してRRRグループで研究開発
2
© KLab Inc.
自己紹介
○ 忽 帥 (Hu Shuai)
○ 2016年に新卒で都内のアニメ制作会社へ入社
○ 2019年よりKLab株式会社へ転職し、ゲーム業界へ転身
○ 2020年2月よりRRRグループに加わり、リギング、アニメーショ
ン関連の研究開発
コツ スイ
3
© KLab Inc.
自己紹介
○ リアルタイム・レンダリング・リサーチグループ(RRR)
○ KLabの3Dビジュアル研究開発グループ
○ 横断活動グループとしてプロジェクトサポート
○ 2018年に結成
○ 現在は5人
○ 全員がそれぞれ違う得意分野を持っている人
○ 全員が「楽するための苦労をしたい」人
4
© KLab Inc.
このセッションについて
○ 見せたいこと
○ 弊社でのプロシージャル・ユースケース
(研究開発もプロダクションも)
○ 大体時系列にそって
○ ほとんど自動化について
○ 伝えたいこと
○ プロシージャルなワークフローを取り入れることで
既存パイプラインをリプレースする必要がなくて、
エンハンスすることだけで価値がある
○ 頑張りたいこと
○ ある程度自分で再現できるよう、事例をこのプレゼンテーション
でブレイクダウンしていく
5
© KLab Inc.
目次
1. ゲーム用アセット自動生成:Static Mesh
2. ゲーム用アセット自動生成:Skinned Mesh
2.1. Hair Reduction
2.2. Character Reduction
2.2.1. LOD A
2.2.2. Reduction
3. まとめ・おさらい
6
© KLab Inc.
ゲーム用アセット自動生成
Static Mesh
© KLab Inc.
ゲーム用アセット生成|社内テックデモ
8
© KLab Inc.
ゲーム用アセット生成|社内テックデモ
● 少人数・短期間で社内用テックデモを制作。目標は
○ カスタムPBRシェーディング検証
○ プロシージャル背景アセットスキャッター
○ 端末スペックに合わせたLODチェーン作成
● コンセプトアートで新規作成必要なアセットを15個確認
9
© KLab Inc.
ゲーム用アセット生成|課題
● 1週間、アーティスト一人 → 40時間 / 新規PBR背景アセット15個
= アセット毎2.5h(ほぼ0からゲームエンジンに実装するまで)
● ハイメッシュ → リトポ → UV → ベイク → テクスチャ → LOD
○ 様々のハイメッシュ・ソース
○ 例: zBrush、Maya、等
○ インプット状態もそれぞれ
○ 例:ローポリ(foliage等)、スカルプト(岩等)
○ アウトプットもそれぞれ
○ 高スペック向けLODも、低スペック向けLODも
○ ポリゴン数はものによって1000ポリ以下まで削減
10
© KLab Inc.
こりゃ厳しい。
11
© KLab Inc.
ゲーム用アセット生成|分析
1. ほとんどのビジュアルクオリティはスカルプトとテクスチャによる。
(3Dアーティストとして認めたくない部分もあるが、ユーザーには 
完全4角ポリ・リトポの美しさが伝わらない・・・ 😢)
2. しかし、リトポ・UV・LODはアセット生成時間の50%以上収まる
ケースもよくある*
3. アセット品質は許容できるレベルで場合によって充分
○ トポロジーのせいでシェーディングが壊れない限りは大丈夫
- 背景アセットはスタティックなので、変形もしない
○ テクスチャ制作でTri-Planar Projection等を利用
すればUVレイアウトは人間として理解出来くても大丈夫
- 少なくともこの場合では
*特に、LODチェーンを手動的に作成する場合 12
© KLab Inc.
条件が明確。
簡単にルール化できそう。
13
© KLab Inc.
ゲーム用アセット生成|アプローチ
→それだったらプロシージャルで行ってみよう!
1. ゲーム用アセット (LOD0) をハイメッシュからPolyReduceで作成
(Retentionをカスタムアトリビュートで調整可能)
2. 自動UV unwrap
3. LODチェーンをLOD0からさらなるPolyReduceで作成
14
© KLab Inc.
Game Model Creation|Pipeline Overview
Poly Reduction
UV Unwrap
Poly Reduction
Poly Reduction
INPUT GEO OUTPUT GEO
HOUDINI-DA
High Res Sculpt
LOD0
LOD1
LOD2
Texturing
GAME
ENGINE
DCC
15
© KLab Inc.
Game Model Creation|Pipeline Overview
Poly Reduction
UV Unwrap
Poly Reduction
Poly Reduction
INPUT GEO OUTPUT GEO
HOUDINI-DA
LOD0
LOD1
LOD2
Texturing
GAME
ENGINE
DCC
Mesh from Cloth
Simulation
Poly Reduction
16
© KLab Inc.
Game Model Creation|Pipeline Overview
Poly Reduction
UV Unwrap
Poly Reduction
Poly Reduction
INPUT GEO OUTPUT GEO
HOUDINI-DA
LOD0
LOD1
LOD2
Texturing
GAME
ENGINE
DCC
Game Ready
Mesh
17
© KLab Inc.
18
ゲーム用アセット生成|デモ
zBrushでハイメッシュをスカルプト
© KLab Inc.
19
ゲーム用アセット生成|デモ
Houdiniでプロシージャル魔法
© KLab Inc.
20
ゲーム用アセット生成|デモ
Substance Painterでテクスチャ制作
© KLab Inc.
21
ゲーム用アセット生成|完成品(一部)
© KLab Inc.
ゲーム用アセット生成|結果
● 5人日で、無事にPBRゲーム用アセットを15個完成
○ (残業せずに!)
● 特にOrganicモデルでは期待以上のクオリティ
● 制作過程ではトポロジー・UV・LODsは全く気にしなくていい
● そのため、一回ゲームアセットとして実装済みの作品でも、まるで
スカルプト(又はハイメッシュ制作)段階のように自由に調整できる
○ イテレーション性が非常にいい
● 経験値と知識ベース0でも、プロシージャルワークフローを
既存ワークフローのヘルパーとして利用すれば価値がある
22
© KLab Inc.
ゲーム用アセット自動生成
Skinned Mesh
Hair Reduction
© KLab Inc.
Hair Reduction|背景
○ キャプテン翼〜たたかえドリームチーム〜 大型アップデート
○ 目標は低スペック端末でのパフォーマンスを上げること
○ スキニング負荷とジオメトリメモリーを減らすことで実現
©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames
24
© KLab Inc.
Hair Reduction|課題
○ 150個の既存Hairメッシュを最適化
○ 上記全数に対して
○ ポリゴン数を削減
○ インフルエンス数を4→2に削減
○ 手動で約2人月で実装見込み
○ 時間がない
25
© KLab Inc.
さぁ、どうする!
26
© KLab Inc.
Hair Reduction|データ分析
○ あらゆる髪型
○ スポーツ刈り、ロング、ドレッドヘアー、等・・・
○ 共通(common)スケルトン
©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames
27
© KLab Inc.
○ トポロジーに共通点が多い
○ 円錐でできた髪束
→ Strand
○ 球体でできたパーマヘアー
→ Non-Strand
○ 円錐でできたその他のヘアー
→ Non-Strand
Hair Reduction|データ分析
Strand
Non-Strand
©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames
28
© KLab Inc.
Hair Reduction|アプローチ
→プロシージャル生成を活かした、シンプルな半カスタムソリュー
ションをHoudiniで実装
→全自動一発成功に拘らず、品質の担保+時間削減が出来れば成功
1. 「Strand」と「Non-strand」を分別
○ 「Strand」をプロシージャルに再現、ポリ数を調整
○ 「Non-strand」をPolyReduceでポリ数削減
2. アトリビュートを新しいトポロジー (ボーンキャプチャ含め)に
トランスファ
3. FBXとして書き出す
4. 1~3をHDA化、PDGでバッチ処理を可能に
29
© KLab Inc.
Hair Reduction|分別
● 円錐だけどStrand扱いしたくないトポロジー(特例)
○ Mayaで手作業による頂点カラーでマスキング
○ 物量的にさほどではなかった
● マスキングされていない、つながっているトポロジー(Connected Piece)
○ 近隣頂点数で毛先を割り出す
■ 毛先が複数見つかった場合、Non-Strandに分類
○ 毛先から頂点ループを辿ってみる
■ シンプルなVEXで近隣頂点を再帰的に辿っていく
■ 再帰の途中終了=毛先頂点以外ループに属さない頂点が存
在、Non-Strand扱い
○ 上記のチェックを通った場合のみ、Strand扱い
30
© KLab Inc.
Hair Reduction|Strandsの処理
○ 各ループの中心にポイントを生成
○ ポイントのスケール(pscale)はループから計算
○ ポイントからカーブを生成して、リサンプル
(Resample)
○ Sweep SOP
©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames
31
© KLab Inc.
Hair Reduction|スキンインフルエンス数の削減
○ アトリビュートの転送はAttribute Transferで
○ インフルエンス数の削減方法
○ Capture Attribute Unpackで元スキン・ウェイトを取得
○ インフルエンスを4から2に削減
○ Attribute Transferで
生成したジオメトリーへ転送
○ Strandの場合は
カーブに転送
○ Capture Attribute Packと
スケルトン・ルートの修正で
boneCaptureの再構築が完成
32
© KLab Inc.
Hair Reduction|HDAとFBXインポート
○ Fileノードでスケルトンをインポートができない
○ メニューのImport > Filmbox FBX からはできる
○ HDAの場合は?
33
© KLab Inc.
Hair Reduction|PDGとFBX出力
(当時使ったHoudini 17.5限定の問題かもしれないが)…
○ ROPネットワークからスケルトン付きFBXの出力はHDA化されても
上手くできたが
PDGでバッチ処理を行うときはスケルトンの書き出しが失敗
○ 原因がわからず、最終的にMayaでPythonスクリプトによるSkinning
の再構築行うことに
○ PDGからシームレスに再構築のスクリプトを実行した
←○
?→
34
© KLab Inc.
Hair Reduction|PDGとMaya
○ PDGにはMaya Serverノードは存在しているが
○ 単純にPython Script TOP でmayapy.exeを実行
35
© KLab Inc.
Hair Reduction|最終SOPネットワーク
36
© KLab Inc.
Hair Reduction|最終HDA
37
© KLab Inc.
Hair Reduction|最終TOPネットワーク
38
© KLab Inc.
Hair Reduction|結果
○ 8人日かけてHairメッシュを150個最適化に成功
○ インフルエンス数の削減後の値に対する手直しが発生
○ 共通スケルトンのデメリット
○ 品質を担保し、ポリゴン数はモデルによって30%-60%の削減に成功
○ 手動で2ヶ月以上もかかる作業をほぼ1週間で完成
○ カスタムツールをHDAにまとめれば、Houdini知識のない
スタッフにまかせても大丈夫!
○ +αで、コスト削減しながら新ソフトのトレーニングにもなった
39
© KLab Inc.
ゲーム用アセット自動生成
Skinned Mesh
Character Reduction
© KLab Inc.
Character Reduction | 課題
○ この時点までの実績
○ Static Mesh でLOD生成が出来た
○ Hair Reductionでは特殊な状態なら、
Skinned Meshでも自動的なReductionに成功した
○ ならば次のステップとして
○ Character 全体に対するLOD生成も出来るのでは?
41
© KLab Inc.
やってみようではないか。
42
© KLab Inc.
Character Reduction | 課題
○ 課題① SkinnedメッシュはStaticメッシュと違って、
変形しているとき用の補助トポロジーが存在する
○ そのトポロジーは基本的にシルエットに影響ないので
自動リダクションで真っ先に削られてしまう
○ 課題② そもそもトポロジーがある程度整っていないと
アニメーションされているときに予測不可能な形になってしまう
○ しかし髪の毛と違ってプロシージャルにメッシュを
再現することが不可能(少なくとも今の私達にとって・・・)
43
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
44
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
45
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
46
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
削除したい 削除したくない
47
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
削除したい 削除したくない
ウェイトが1
に近い
ウェイトが1
から遠い(最大0.5)
48
© KLab Inc.
Character Reduction | 分析
○ 課題① 「必要とされている補助トポロジが削られてしまう」
○ ルールを見つけだす
削除したい 削除したくない
ウェイトが1
に近い
ウェイトが1
から遠い(最大0.5)
Retentionに切り替えれば問題解決!
49
© KLab Inc.
Character Reduction | 分析
○ 課題② 「自動トポロジーされたトポロジーが汚い」
○ ベースが汚いから結果も汚い
○ 手動で四角形トポロジーを作成すれば、
QuadReductionも使える
○ Enhance, not Replace
○ 手動的な作業を0にしなくても大丈夫、
作業時間を少しでも短縮できたらそれだけでメリットがある
50
© KLab Inc.
Character Reduction | 課題②アプローチ
○ LOD Aワークフローを導入
○ LOD Aとは?
○ LODチェーンのベースとなるLOD0のベースである
○ 求められる品質よりもディティール度の高いゲーム用モデル
- リトポ済み、UV済み、スキンウェイト済み
LOD A
ハイメッシュ 高スペックLOD0 低スペックLOD0
51
© KLab Inc.
Character Reduction | LOD A
LODチェーン
ゲーム用モデル
○ 通常LODワークフロー
LOD A
ハイメッシュ 高スペックLOD0
低スペックLOD0
中スペックLOD0
高スペックLOD1
中スペックLOD1
低スペックLOD1
○ LOD Aワークフロー
ハイメッシュ 高スペックLOD0 高スペックLOD1
52
© KLab Inc.
Character Reduction | LOD A
○ LOD Aワークフローのメリットは?
○ 最終的なスペックに関してフレキシビリティが高まる
○ スケールダウンはできるが、スケールアップが基本無理
○ 最適化を意識せず、リトポができる
○ 不要なトポロジーはあとで自動的に削られるので
ポリ数よりも、流れとデフォルメしやすさに集中できる
○ LOD A制作で意識しないといけないことは?
○ 自動的にリダクションは癖がある
○ 何がどう削られるのかが若干予想不可能
○ UVが変わらないのでできるだけNormalマップに頼るのがGood!
53
© KLab Inc.
Character Reduction | 制作事例
禍つヴァールハイトPV主人公キャラ「覚醒者」RRRバージョン
© KLabGames 54
© KLab Inc.
Character Reduction | 制作事例:LOD A
(モデリング講座ではないので詳細はスキップ)
○ Headは通常のモデリング&リトポフロー
zBrushでスカルプト(ハイメッシュ) リトポ(LOD A)
55
© KLabGames
© KLab Inc.
Character Reduction | 制作事例:LOD A
○ Bodyはよくある「アイテム毎リトポ」と違って「まとめてリトポ」
ハイメッシュ LOD A LOD A(ベイク済み)
56
© KLabGames
© KLab Inc.
Character Reduction
○ Hair Reductionとの違い
○ 0からの制作
○ LOD生成を考慮したデザイン
○ LOD生成に適したモデリングアプローチ
○ より汎用的な内部処理
○ strand、non-strandなどの特殊対応はしない
○ 生成されるモデルのDeformation品質を考慮したポリゴン数削減
57
© KLab Inc.
Character Reduction | リギング
○ リギングはmGearの使用
○ 他検証目的で導入
○ Skin WeightをJSON化する機能
○ Skinned Mesh FBXをインポートせず
ジオメトリーとスキンウェイト情報
別々でHoudiniへ渡す
58
© KLabGames
© KLab Inc.
Maya/mGear HOUDINI Maya/mGear
Character Reduction | アプローチ
○ 処理の流れ
LOD A
Geometry
(FBX)
Poly Reduction
Skin Influence
Reduction
(VEX)
LOD A
Skin Weight
(JSON generated by mGear)
Attribute
Copy
Reduced
Skin Weight
(JSON in mGear
format)
Reduced
Geometry
Data Converter
(JSON to
BoneCapture)
Data Converter
(BoneCapture to
JSON)
GAME
ENGINE
Reduced
Skinned
Mesh
59
© KLab Inc.
Character Reduction | アプローチ
○ ポリゴン数の削減
○ 基本はHoudini PolyReduce SOPを使用
○ カスタムアトリビュートの追加
■ Retention アトリビュート
● 補助トポロジーの保持
● LOD Aのスキンウェイトから算出
● PolyReduceの削減計算に参加
可視化されたRetentionアトリビュート 60
© KLabGames
© KLab Inc.
Character Reduction | アプローチ
○ スキンインフルエンス数の削減
○ Attribute Wrangle SOPでVEXによ
る処理
○ Capture Correct SOP は使えない?
○ アトリビュートの再現は困難
○ VEXで完全一致な結果を得られた
61
© KLabGames
© KLab Inc.
Character Reduction | 結果
62
© KLabGames
© KLab Inc.
Character Reduction | 結果
© KLabGames
63
© KLab Inc.
おさらい
© KLab Inc.
おさらい | プロシージャルなワークフロー
○ プロシージャルツールをヘルパーツールとして採用
○ 既存ワークフローをリプレースするより改善することに成功
○ 運用プロジェクトで実装したことで
○ 繰り返し作業の自動化に成功
○ スタッフ育成の機会ができた
○ トライアルと育成コストをプロジェクトタスクの
コストダウンによって同時に取り返した
○ そしてなによりも、アーティストを
実際のアートにより集中させることができた。
65
© KLab Inc.
ありがとうございました!

More Related Content

What's hot

What's hot (20)

そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-
 
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
 
Fortniteを支える技術
Fortniteを支える技術Fortniteを支える技術
Fortniteを支える技術
 
Substanceテクスチャワークフロー XXX編
Substanceテクスチャワークフロー XXX編Substanceテクスチャワークフロー XXX編
Substanceテクスチャワークフロー XXX編
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい
 
UE4 Volumetric Fogで 空間を演出する!
UE4 Volumetric Fogで 空間を演出する!UE4 Volumetric Fogで 空間を演出する!
UE4 Volumetric Fogで 空間を演出する!
 
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
 
UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例  UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例
 
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
Robo Recallで使われている最新のVR開発テクニックをご紹介!Robo Recallで使われている最新のVR開発テクニックをご紹介!
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
 

Similar to CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 2 モバイルゲーム 実践

Similar to CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 2 モバイルゲーム 実践 (20)

自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
 
CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 1 モバイルゲーム はじめに
CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 1 モバイルゲーム はじめにCEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 1 モバイルゲーム はじめに
CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 1 モバイルゲーム はじめに
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
Houdiniで作るNPRエフェクト&After Effectsでのコンポジット実践解説オンラインセミナー登壇資料
Houdiniで作るNPRエフェクト&After Effectsでのコンポジット実践解説オンラインセミナー登壇資料Houdiniで作るNPRエフェクト&After Effectsでのコンポジット実践解説オンラインセミナー登壇資料
Houdiniで作るNPRエフェクト&After Effectsでのコンポジット実践解説オンラインセミナー登壇資料
 
悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除
 
カンバンと朝会とわたくし
カンバンと朝会とわたくしカンバンと朝会とわたくし
カンバンと朝会とわたくし
 
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
 
スクラム再入門(仮) Developer Summit 関西 2013
スクラム再入門(仮) Developer Summit 関西 2013スクラム再入門(仮) Developer Summit 関西 2013
スクラム再入門(仮) Developer Summit 関西 2013
 
Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]
 
ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話
 
「らしく」ハタラコウ。 ChatWork x クラウドソーシング
「らしく」ハタラコウ。 ChatWork x クラウドソーシング「らしく」ハタラコウ。 ChatWork x クラウドソーシング
「らしく」ハタラコウ。 ChatWork x クラウドソーシング
 
アジャイルジャパン2015 講演資料
アジャイルジャパン2015 講演資料アジャイルジャパン2015 講演資料
アジャイルジャパン2015 講演資料
 
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたかリクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
 
CGWORLD 2021 クリエイティブカンファレンス
CGWORLD 2021 クリエイティブカンファレンス CGWORLD 2021 クリエイティブカンファレンス
CGWORLD 2021 クリエイティブカンファレンス
 
熊本 HoloLens Meetup vol.0 「HoloLensアプリ開発コンテストビジネス部門で特別賞もらってきた」
熊本 HoloLens Meetup vol.0 「HoloLensアプリ開発コンテストビジネス部門で特別賞もらってきた」熊本 HoloLens Meetup vol.0 「HoloLensアプリ開発コンテストビジネス部門で特別賞もらってきた」
熊本 HoloLens Meetup vol.0 「HoloLensアプリ開発コンテストビジネス部門で特別賞もらってきた」
 
TPS/リーンを使って強化するアジャイル/スクラム
TPS/リーンを使って強化するアジャイル/スクラムTPS/リーンを使って強化するアジャイル/スクラム
TPS/リーンを使って強化するアジャイル/スクラム
 
デザイナーがMELスクリプトを書いて工数削減した話
デザイナーがMELスクリプトを書いて工数削減した話デザイナーがMELスクリプトを書いて工数削減した話
デザイナーがMELスクリプトを書いて工数削減した話
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
Fearless Change RSG Japan English.pdf
Fearless Change RSG Japan English.pdfFearless Change RSG Japan English.pdf
Fearless Change RSG Japan English.pdf
 

CEDEC2020 プロシージャルゲームコンテンツ制作ブートキャンプ 2020 Part 2 モバイルゲーム 実践

  • 1. © KLab Inc. プロシージャルゲームコンテンツ制作ブートキャンプ Part2 モバイルゲーム 実践 「How we got started」 Real-Time Rendering Research Group (RRR) - KLab株式会社 クレメンス・ベルガー (Clemens Berger) Senior Character Artist 忽 帥 (Hu Shuai) Senior Technical Artist
  • 2. © KLab Inc. 自己紹介 ○ クレメンス・ベルガー(Clemens Berger) ○ 2017年3DCGクリエイターとしてKLab株式会社に入社 ○ 様々なタイトルで主に3Dキャラモデルを担当 ○ 2018年、新たに設立された組織「RRRグループ」に 立ち上げメンバーとして所属 ○ 現在は新規プロジェクトにて 3Dキャラクター・リードアーティストとして活動 ○ 並行してRRRグループで研究開発 2
  • 3. © KLab Inc. 自己紹介 ○ 忽 帥 (Hu Shuai) ○ 2016年に新卒で都内のアニメ制作会社へ入社 ○ 2019年よりKLab株式会社へ転職し、ゲーム業界へ転身 ○ 2020年2月よりRRRグループに加わり、リギング、アニメーショ ン関連の研究開発 コツ スイ 3
  • 4. © KLab Inc. 自己紹介 ○ リアルタイム・レンダリング・リサーチグループ(RRR) ○ KLabの3Dビジュアル研究開発グループ ○ 横断活動グループとしてプロジェクトサポート ○ 2018年に結成 ○ 現在は5人 ○ 全員がそれぞれ違う得意分野を持っている人 ○ 全員が「楽するための苦労をしたい」人 4
  • 5. © KLab Inc. このセッションについて ○ 見せたいこと ○ 弊社でのプロシージャル・ユースケース (研究開発もプロダクションも) ○ 大体時系列にそって ○ ほとんど自動化について ○ 伝えたいこと ○ プロシージャルなワークフローを取り入れることで 既存パイプラインをリプレースする必要がなくて、 エンハンスすることだけで価値がある ○ 頑張りたいこと ○ ある程度自分で再現できるよう、事例をこのプレゼンテーション でブレイクダウンしていく 5
  • 6. © KLab Inc. 目次 1. ゲーム用アセット自動生成:Static Mesh 2. ゲーム用アセット自動生成:Skinned Mesh 2.1. Hair Reduction 2.2. Character Reduction 2.2.1. LOD A 2.2.2. Reduction 3. まとめ・おさらい 6
  • 9. © KLab Inc. ゲーム用アセット生成|社内テックデモ ● 少人数・短期間で社内用テックデモを制作。目標は ○ カスタムPBRシェーディング検証 ○ プロシージャル背景アセットスキャッター ○ 端末スペックに合わせたLODチェーン作成 ● コンセプトアートで新規作成必要なアセットを15個確認 9
  • 10. © KLab Inc. ゲーム用アセット生成|課題 ● 1週間、アーティスト一人 → 40時間 / 新規PBR背景アセット15個 = アセット毎2.5h(ほぼ0からゲームエンジンに実装するまで) ● ハイメッシュ → リトポ → UV → ベイク → テクスチャ → LOD ○ 様々のハイメッシュ・ソース ○ 例: zBrush、Maya、等 ○ インプット状態もそれぞれ ○ 例:ローポリ(foliage等)、スカルプト(岩等) ○ アウトプットもそれぞれ ○ 高スペック向けLODも、低スペック向けLODも ○ ポリゴン数はものによって1000ポリ以下まで削減 10
  • 12. © KLab Inc. ゲーム用アセット生成|分析 1. ほとんどのビジュアルクオリティはスカルプトとテクスチャによる。 (3Dアーティストとして認めたくない部分もあるが、ユーザーには  完全4角ポリ・リトポの美しさが伝わらない・・・ 😢) 2. しかし、リトポ・UV・LODはアセット生成時間の50%以上収まる ケースもよくある* 3. アセット品質は許容できるレベルで場合によって充分 ○ トポロジーのせいでシェーディングが壊れない限りは大丈夫 - 背景アセットはスタティックなので、変形もしない ○ テクスチャ制作でTri-Planar Projection等を利用 すればUVレイアウトは人間として理解出来くても大丈夫 - 少なくともこの場合では *特に、LODチェーンを手動的に作成する場合 12
  • 14. © KLab Inc. ゲーム用アセット生成|アプローチ →それだったらプロシージャルで行ってみよう! 1. ゲーム用アセット (LOD0) をハイメッシュからPolyReduceで作成 (Retentionをカスタムアトリビュートで調整可能) 2. 自動UV unwrap 3. LODチェーンをLOD0からさらなるPolyReduceで作成 14
  • 15. © KLab Inc. Game Model Creation|Pipeline Overview Poly Reduction UV Unwrap Poly Reduction Poly Reduction INPUT GEO OUTPUT GEO HOUDINI-DA High Res Sculpt LOD0 LOD1 LOD2 Texturing GAME ENGINE DCC 15
  • 16. © KLab Inc. Game Model Creation|Pipeline Overview Poly Reduction UV Unwrap Poly Reduction Poly Reduction INPUT GEO OUTPUT GEO HOUDINI-DA LOD0 LOD1 LOD2 Texturing GAME ENGINE DCC Mesh from Cloth Simulation Poly Reduction 16
  • 17. © KLab Inc. Game Model Creation|Pipeline Overview Poly Reduction UV Unwrap Poly Reduction Poly Reduction INPUT GEO OUTPUT GEO HOUDINI-DA LOD0 LOD1 LOD2 Texturing GAME ENGINE DCC Game Ready Mesh 17
  • 22. © KLab Inc. ゲーム用アセット生成|結果 ● 5人日で、無事にPBRゲーム用アセットを15個完成 ○ (残業せずに!) ● 特にOrganicモデルでは期待以上のクオリティ ● 制作過程ではトポロジー・UV・LODsは全く気にしなくていい ● そのため、一回ゲームアセットとして実装済みの作品でも、まるで スカルプト(又はハイメッシュ制作)段階のように自由に調整できる ○ イテレーション性が非常にいい ● 経験値と知識ベース0でも、プロシージャルワークフローを 既存ワークフローのヘルパーとして利用すれば価値がある 22
  • 24. © KLab Inc. Hair Reduction|背景 ○ キャプテン翼〜たたかえドリームチーム〜 大型アップデート ○ 目標は低スペック端末でのパフォーマンスを上げること ○ スキニング負荷とジオメトリメモリーを減らすことで実現 ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames 24
  • 25. © KLab Inc. Hair Reduction|課題 ○ 150個の既存Hairメッシュを最適化 ○ 上記全数に対して ○ ポリゴン数を削減 ○ インフルエンス数を4→2に削減 ○ 手動で約2人月で実装見込み ○ 時間がない 25
  • 27. © KLab Inc. Hair Reduction|データ分析 ○ あらゆる髪型 ○ スポーツ刈り、ロング、ドレッドヘアー、等・・・ ○ 共通(common)スケルトン ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames 27
  • 28. © KLab Inc. ○ トポロジーに共通点が多い ○ 円錐でできた髪束 → Strand ○ 球体でできたパーマヘアー → Non-Strand ○ 円錐でできたその他のヘアー → Non-Strand Hair Reduction|データ分析 Strand Non-Strand ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames 28
  • 29. © KLab Inc. Hair Reduction|アプローチ →プロシージャル生成を活かした、シンプルな半カスタムソリュー ションをHoudiniで実装 →全自動一発成功に拘らず、品質の担保+時間削減が出来れば成功 1. 「Strand」と「Non-strand」を分別 ○ 「Strand」をプロシージャルに再現、ポリ数を調整 ○ 「Non-strand」をPolyReduceでポリ数削減 2. アトリビュートを新しいトポロジー (ボーンキャプチャ含め)に トランスファ 3. FBXとして書き出す 4. 1~3をHDA化、PDGでバッチ処理を可能に 29
  • 30. © KLab Inc. Hair Reduction|分別 ● 円錐だけどStrand扱いしたくないトポロジー(特例) ○ Mayaで手作業による頂点カラーでマスキング ○ 物量的にさほどではなかった ● マスキングされていない、つながっているトポロジー(Connected Piece) ○ 近隣頂点数で毛先を割り出す ■ 毛先が複数見つかった場合、Non-Strandに分類 ○ 毛先から頂点ループを辿ってみる ■ シンプルなVEXで近隣頂点を再帰的に辿っていく ■ 再帰の途中終了=毛先頂点以外ループに属さない頂点が存 在、Non-Strand扱い ○ 上記のチェックを通った場合のみ、Strand扱い 30
  • 31. © KLab Inc. Hair Reduction|Strandsの処理 ○ 各ループの中心にポイントを生成 ○ ポイントのスケール(pscale)はループから計算 ○ ポイントからカーブを生成して、リサンプル (Resample) ○ Sweep SOP ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム  原作「キャプテン翼」高橋陽一(集英社文庫コミック版) © KLabGames 31
  • 32. © KLab Inc. Hair Reduction|スキンインフルエンス数の削減 ○ アトリビュートの転送はAttribute Transferで ○ インフルエンス数の削減方法 ○ Capture Attribute Unpackで元スキン・ウェイトを取得 ○ インフルエンスを4から2に削減 ○ Attribute Transferで 生成したジオメトリーへ転送 ○ Strandの場合は カーブに転送 ○ Capture Attribute Packと スケルトン・ルートの修正で boneCaptureの再構築が完成 32
  • 33. © KLab Inc. Hair Reduction|HDAとFBXインポート ○ Fileノードでスケルトンをインポートができない ○ メニューのImport > Filmbox FBX からはできる ○ HDAの場合は? 33
  • 34. © KLab Inc. Hair Reduction|PDGとFBX出力 (当時使ったHoudini 17.5限定の問題かもしれないが)… ○ ROPネットワークからスケルトン付きFBXの出力はHDA化されても 上手くできたが PDGでバッチ処理を行うときはスケルトンの書き出しが失敗 ○ 原因がわからず、最終的にMayaでPythonスクリプトによるSkinning の再構築行うことに ○ PDGからシームレスに再構築のスクリプトを実行した ←○ ?→ 34
  • 35. © KLab Inc. Hair Reduction|PDGとMaya ○ PDGにはMaya Serverノードは存在しているが ○ 単純にPython Script TOP でmayapy.exeを実行 35
  • 36. © KLab Inc. Hair Reduction|最終SOPネットワーク 36
  • 37. © KLab Inc. Hair Reduction|最終HDA 37
  • 38. © KLab Inc. Hair Reduction|最終TOPネットワーク 38
  • 39. © KLab Inc. Hair Reduction|結果 ○ 8人日かけてHairメッシュを150個最適化に成功 ○ インフルエンス数の削減後の値に対する手直しが発生 ○ 共通スケルトンのデメリット ○ 品質を担保し、ポリゴン数はモデルによって30%-60%の削減に成功 ○ 手動で2ヶ月以上もかかる作業をほぼ1週間で完成 ○ カスタムツールをHDAにまとめれば、Houdini知識のない スタッフにまかせても大丈夫! ○ +αで、コスト削減しながら新ソフトのトレーニングにもなった 39
  • 41. © KLab Inc. Character Reduction | 課題 ○ この時点までの実績 ○ Static Mesh でLOD生成が出来た ○ Hair Reductionでは特殊な状態なら、 Skinned Meshでも自動的なReductionに成功した ○ ならば次のステップとして ○ Character 全体に対するLOD生成も出来るのでは? 41
  • 43. © KLab Inc. Character Reduction | 課題 ○ 課題① SkinnedメッシュはStaticメッシュと違って、 変形しているとき用の補助トポロジーが存在する ○ そのトポロジーは基本的にシルエットに影響ないので 自動リダクションで真っ先に削られてしまう ○ 課題② そもそもトポロジーがある程度整っていないと アニメーションされているときに予測不可能な形になってしまう ○ しかし髪の毛と違ってプロシージャルにメッシュを 再現することが不可能(少なくとも今の私達にとって・・・) 43
  • 44. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 44
  • 45. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 45
  • 46. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 46
  • 47. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 削除したい 削除したくない 47
  • 48. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 削除したい 削除したくない ウェイトが1 に近い ウェイトが1 から遠い(最大0.5) 48
  • 49. © KLab Inc. Character Reduction | 分析 ○ 課題① 「必要とされている補助トポロジが削られてしまう」 ○ ルールを見つけだす 削除したい 削除したくない ウェイトが1 に近い ウェイトが1 から遠い(最大0.5) Retentionに切り替えれば問題解決! 49
  • 50. © KLab Inc. Character Reduction | 分析 ○ 課題② 「自動トポロジーされたトポロジーが汚い」 ○ ベースが汚いから結果も汚い ○ 手動で四角形トポロジーを作成すれば、 QuadReductionも使える ○ Enhance, not Replace ○ 手動的な作業を0にしなくても大丈夫、 作業時間を少しでも短縮できたらそれだけでメリットがある 50
  • 51. © KLab Inc. Character Reduction | 課題②アプローチ ○ LOD Aワークフローを導入 ○ LOD Aとは? ○ LODチェーンのベースとなるLOD0のベースである ○ 求められる品質よりもディティール度の高いゲーム用モデル - リトポ済み、UV済み、スキンウェイト済み LOD A ハイメッシュ 高スペックLOD0 低スペックLOD0 51
  • 52. © KLab Inc. Character Reduction | LOD A LODチェーン ゲーム用モデル ○ 通常LODワークフロー LOD A ハイメッシュ 高スペックLOD0 低スペックLOD0 中スペックLOD0 高スペックLOD1 中スペックLOD1 低スペックLOD1 ○ LOD Aワークフロー ハイメッシュ 高スペックLOD0 高スペックLOD1 52
  • 53. © KLab Inc. Character Reduction | LOD A ○ LOD Aワークフローのメリットは? ○ 最終的なスペックに関してフレキシビリティが高まる ○ スケールダウンはできるが、スケールアップが基本無理 ○ 最適化を意識せず、リトポができる ○ 不要なトポロジーはあとで自動的に削られるので ポリ数よりも、流れとデフォルメしやすさに集中できる ○ LOD A制作で意識しないといけないことは? ○ 自動的にリダクションは癖がある ○ 何がどう削られるのかが若干予想不可能 ○ UVが変わらないのでできるだけNormalマップに頼るのがGood! 53
  • 54. © KLab Inc. Character Reduction | 制作事例 禍つヴァールハイトPV主人公キャラ「覚醒者」RRRバージョン © KLabGames 54
  • 55. © KLab Inc. Character Reduction | 制作事例:LOD A (モデリング講座ではないので詳細はスキップ) ○ Headは通常のモデリング&リトポフロー zBrushでスカルプト(ハイメッシュ) リトポ(LOD A) 55 © KLabGames
  • 56. © KLab Inc. Character Reduction | 制作事例:LOD A ○ Bodyはよくある「アイテム毎リトポ」と違って「まとめてリトポ」 ハイメッシュ LOD A LOD A(ベイク済み) 56 © KLabGames
  • 57. © KLab Inc. Character Reduction ○ Hair Reductionとの違い ○ 0からの制作 ○ LOD生成を考慮したデザイン ○ LOD生成に適したモデリングアプローチ ○ より汎用的な内部処理 ○ strand、non-strandなどの特殊対応はしない ○ 生成されるモデルのDeformation品質を考慮したポリゴン数削減 57
  • 58. © KLab Inc. Character Reduction | リギング ○ リギングはmGearの使用 ○ 他検証目的で導入 ○ Skin WeightをJSON化する機能 ○ Skinned Mesh FBXをインポートせず ジオメトリーとスキンウェイト情報 別々でHoudiniへ渡す 58 © KLabGames
  • 59. © KLab Inc. Maya/mGear HOUDINI Maya/mGear Character Reduction | アプローチ ○ 処理の流れ LOD A Geometry (FBX) Poly Reduction Skin Influence Reduction (VEX) LOD A Skin Weight (JSON generated by mGear) Attribute Copy Reduced Skin Weight (JSON in mGear format) Reduced Geometry Data Converter (JSON to BoneCapture) Data Converter (BoneCapture to JSON) GAME ENGINE Reduced Skinned Mesh 59
  • 60. © KLab Inc. Character Reduction | アプローチ ○ ポリゴン数の削減 ○ 基本はHoudini PolyReduce SOPを使用 ○ カスタムアトリビュートの追加 ■ Retention アトリビュート ● 補助トポロジーの保持 ● LOD Aのスキンウェイトから算出 ● PolyReduceの削減計算に参加 可視化されたRetentionアトリビュート 60 © KLabGames
  • 61. © KLab Inc. Character Reduction | アプローチ ○ スキンインフルエンス数の削減 ○ Attribute Wrangle SOPでVEXによ る処理 ○ Capture Correct SOP は使えない? ○ アトリビュートの再現は困難 ○ VEXで完全一致な結果を得られた 61 © KLabGames
  • 62. © KLab Inc. Character Reduction | 結果 62 © KLabGames
  • 63. © KLab Inc. Character Reduction | 結果 © KLabGames 63
  • 65. © KLab Inc. おさらい | プロシージャルなワークフロー ○ プロシージャルツールをヘルパーツールとして採用 ○ 既存ワークフローをリプレースするより改善することに成功 ○ 運用プロジェクトで実装したことで ○ 繰り返し作業の自動化に成功 ○ スタッフ育成の機会ができた ○ トライアルと育成コストをプロジェクトタスクの コストダウンによって同時に取り返した ○ そしてなによりも、アーティストを 実際のアートにより集中させることができた。 65