0014-09-02

CEDEC一日目 自分用メモ CEDEC一日目 自分用メモ - Nao_uの日記 を含むブックマーク はてなブックマーク - CEDEC一日目 自分用メモ - Nao_uの日記 CEDEC一日目 自分用メモ - Nao_uの日記 のブックマークコメント

物語は混沌とした経験を秩序化していく

テーブルトークに最も重要なのは、サイコロ。自分固有の経験。

自分がその子参加している実感を与えたのは、サイコロだ。

経験というのはカオス、全て偶然。ありとあらゆる物事を突き詰めていくと、偶然起こった。

人間は皆、未知の出来事が起き続ける、次にどうなるかわからないと思っている。

人間は偶然を、最も大事にする、興味を持つ。

偶然に起こっている事を解明しようと言う欲求がある。

自分というサイコロを降り続けるのが人間の生活様式であり、生きる実感を与えている

※サイコロ降り続けないとダメだよね

偶然起こった出来事から、人間は秩序だった必然を見出していく。その行為自体が人生の実感を与える

ゲームをプレイしているという実感を与える

あるプレイでクリアできなかったのが、違うプレイでクリアできた、というのがゲームをプレイしているという実感を与える

※物語を自動生成するゲーム作れないかな?一回まじめに考えてみたい。

※小説家がどんなことをかんがえているのか?

 物語のあり方、だれが、何の為に、どういう人を対象に、どんな事を書いているのか、を幅広く。

 広いバックグラウンドと深い知識をベースに小説が書かれる。

ドラえもんは何の物語か?

主人公やテーマを決めない物語が一番バリエーションを作りやすい

すべて偶然の出来事で起こっているにもかかわらず、それがストーリーとして意味をなしている、そんなものを作れるのか?

「あなたは偉い」「あなたは悪い」と提示する形の二人称的なストーリーテリングは、ゲームでしか発展していない

※個人のホームページが主流だった時代に2chがはじめて出た時に感じた、「自分に興味のあるものを見るだけでも、自分が読める速度より早い勢いで情報が増えていく」という感覚。

ビジュアルから要素をはぎ取って本質を残すのでなく、

そこに在るものに全て意味を持たせて、その意味を統合していく、文字を作っているのと同じ

ティーブンキングや隆慶一郎を模写した。10回くらい模写したて、言葉を自分にしみ込ませた。

技術力をつけるため。

●Live Cording in C++

質疑応答:

プロセスの全スレッドを止めて、更新して、再実行

関数自体の先頭5バイトを破壊的に書き換えて実装、ホットパッチには頼っていない

64bitの時は専用の14バイトくらいの命令に置き換えている、先頭5バイトを書き換えて、14バイトのジャンプ関数に飛んでいる

スレッドの再生には非対応

DLLインジェクションは32bitと64bitで別個に対応、注入する側も32bitと64bitを用意している

ゲリラゲームズ、社員数200名

テックチームサイズ:10名

4.5GB ラージメモりモード、750MBのデバッグ領域

ヒープ、アロケーションサイズ最大512KB、メールを送って用途に合わない使い方を指摘

ヒープサイズは430MB(出荷時、出荷前はラージメモリモードでもっと大きく、デバッグデータを入れてた)

メモリプールは断片化する、デバッグツールなどでビジュアライズしている

コールスタックの32bitハッシュを使ってる

1MBを32*32グリッドにしていて、各ピクセル1倍とでビジュアライズ。全体としてどこにフラグメンテーションがあるのかを見られる

レンダーターゲット 380MB

レンダーターゲットを手作業で共有してる、その方がいい結果が得られるから

前のフレームのバッファを残しているので容量が大きい

レンダーターゲとtでバッグツール、登録されているターゲットをクリックで見れる、ピクセル情報やズームもできる。

→リアルタイム簡易Pix

※メモリビューと簡易PixはUIが素敵っぽかった。これはいい。

クラッチバッファ16MB、フラグメンテーション槍0区が起こらない

アセットメモりプール

3.6GB

CPUデータとGPUデータに分かれて、デフラグメンテーションを連続的に行ってる

130GB/sec(理論値192GB)、簡単なコンピュートシェーダーでメモりコピー、

1frm12MBずつ動かしている

基本はバブルアップ、全く同じサイズがあれば、そこにはめ込む。(同一サイズのテクスチャなど)

スタティックデータは前検索、ダイナミックデータは後ろ検索

すべてのアロケーションはバックグラウンドスレッドで。GPUの移動もある(実際には1から2frm)

テクスチャストリーミング

ほとんどのテクスチャは2K、

一つのレベルッセクションでは6GB

最接近した時のみ一番解像度の高いテクスチャが読まれる

GPUの描画結果から、期待ミップレベルと描画ピクセル数を取得してる?

全てのレベルセクションに関して、6方向にレンダリングして全てのミップスタッとを事前計算

バウンディングボックス単位で記録しておく

全てのステージを見ると30時間かかった

圧縮すると200KB/レベルセクション

パーティクルシステムでパーリンの伊豆を追加

ライトがレンダリングされる前に、1/8の16スライスのパーティクルをバッファに書いておく

ボリューメトリックの品質を上げる為に、りプロジェクションを使用する

偶数、奇数フレームでずらす、オーバーラップしない時にはステップを増やす。

(4ステップでリプオエジェクショ)

GPU Pro5で詳しい情報

ローカライズ度キューブマップのエリア

キューブマップは2パスでレンダリングされる。反射なしと、反射有り。

レンダリングにはセクションごとに30分かかってる

質疑:

シーグラフ2011で、Mayaを改造してカスタムシェーダーでPS3相当の絵が出るようにしていたけど、

4ではどうしてた?

→Mayaを改修したわけではない

 Mayaの2013になると、ディファードレンダリングの2.0ができる

DirectXのビューポート2.0が使える、レンダリングエンジンをそこに乗せている

デバッグツールのメモリマップ、リアルタイムかキャプチャーベースか?

 →メモリリークを生んでいるのを見たかった。(たぶんリアルタイムだと思う)

全てのデバッグツールはCPUとのリンクも張っている、コールスタックも見つけられる

●ディープダウン

シェーディングを3D-CoatとMayaで再現して、リアルタイムで確認しながら作業できるように。

アーティストメイドシェーダー、パフォーマンスアップで実用的に使える

敵の質感のノードツリーがすごい事になってる。

ディティールレイヤー、RGBAのチャンネルごとにそれぞれの場所ごとに質感を帰る

RGBAに3Dテクスチャの核チャンネルの相互とに格納したものをRGBAのチャンネルに割り当てている、

チャンネルに3Dテクスチャのパックを割り当ててやる事で、意匠替えなどが柔軟にできる

エディターで頂点シェーダーの補正もできるようになっている。

 →アーティストだけでその辺も作業できる。

デプスで切って背景を徐々に出すような重いシェーダーも、常時出てるのでなければ実用負荷で動いてる

アーティスト自身が見た目を確認しながら作成できる

ノードが複雑で、パフォーマンスが考慮されないのは問題。

  • ライティング

タイルベースディファード+フォワード

アルベドY 、アルベドCをピクセルの偶数奇数ごとにYCbCrで圧縮

 →高輝度にさらされると紫色が発生、問題があった。

タイルベースディファード

16x16単位に分割して、ライトリストを生成、視線方向に32個に分割

大きさを持った光源として処理、ポイント、スポット、ディレクショナル、

影と投影テクスチャに対応

直接照明のシェーダー:

 画像を16x16単位でCSで処理

 ループをライト単位に展開

間接照明:ピクセルシェーダーで一度の処理

 放射輝度ボリューム

 SSリフレクション

 視差補正環境マップ

放射焦土ボリューム:

 間接照明の拡散反射

 ロード中にボクセルコーンとレーシングで生成

 モデル単位でボクセル情報をリストに出力

  証明済みのカラー情報とオクルージョン情報

 リストをボクセルに入力(256x256x256)

 ボクセルのミップマップを作成

シーン全体をおおう128x128x128のプローブに焼き込み、全九面を12方向に分割してコーンとレーシング、

4基底の色として加算、SHとくらべてメモリと品質のバランスが酔い

128x128x128の3枚の3Dテクスチャに収める

視差補正環境マップ、拡散反射と居面反射の両方に仕様、金属の質感に必須

テクスチャキューブアレイ構造で1シーン中に96個置ける、鏡面の荒さで環境マップのミップレベルが変化。

128x128で、ミップマップで2x2まで、RGBEで保存

ロード中に撮影してフィルタリング

 4面体で撮影してフィルタリング、CSで一度に全てのミップレベルオw作制

 スタックレスツリーで視差補正環境マップを探査、

 AABBのみのBVHで

  ほぼ同じ方向に分岐するので高速

 ポイント、スポット、カスケードに対応

 全て一枚のテクスチャに出力

 ディファードで影を使う都合上、一つのテクスチャに全ての深度値を書き込んでいる

(最大20個くらい影が出る事があった、ダイナミックに動くものが少ない)

 大半の光源は移動や回転が不変、動かないものは一次バッファに書き出し

 静的物体、動的物体の数に寄ってキャッシュをフラッシュする

 SSAOは、ループを4単位でまとめて処理、並列度と実効速度が向上

BC7とBC6Hを使った

モデルロード時に生やす点を計算して、ドメインシェーダーで生成

ライティングもピクセル単位でなく度面シェーダーで。

揺れは、前フレームの位置との差分を速度と見なして、ほとんど負荷をかけずに実装できた

質疑:

スキンシェーダーでカバチャーは曲率として使ってる?

 →かバチャーのテクスチャは使っているが、明確に曲率としてでなく、意味をアーティストにお任せしている

体毛は、フォワードかディファードか?

 →フォワード

エイリアシングは気にならなかった?

 →FXAAを使っている

法線をBC7にしてたのは?BC5でなくコンバート時間の長いBC7にしてる理由は?

 →最初に対応したのがBC7だった、BC5の方がエンコード時間は短い

BC7だとアルファチャンネルが使えるので、ラフネスなどを入れられる

パララックスコレクトがなぜRGBAにしてる? 

 →リアルタイムで生成している為、圧縮テクスチャにできてない

アーティストがシェーダーをつくるとバッチが増えたりシェーダーが増えて困るが、どういう管理になってた?

 →作れる人はごくわずか、高木さんと一部のエフェクトアーティストしか作っていない

  ディティールレイヤーはテクスチャをPhotoshopで変える感じで触れるので便利だけど、本来は焼き込むべき

 スタティックなノードとリアルタイムで変えるノードを分けた法がいいかも、と。

PS4 GPGPU 剛体シミュレーション

CPUからアクセスしやすいメモリとGPUからアクセスしやすいメモリがある

 →全ての処理をGPUで完結させる必要がある、GPU用メモリはCPUで読むと遅い

  →連携は、CPU->GPUの一方通行で行う

10000剛体で8〜9ms

三角形と球の荒天、ボロノイ領域を使ってもtメル

signed distance field(符号付き距離場)

BroadPhaseとは

 →大まかな形状を使って衝突チェックを行う、絶対に当たらない組み合わせは排除される

  とはいえ、n^2になるので計算量が爆発する

  →BVH(AABBをリーフに持つ2分木)を仕様

同じwavefrontが同じプログラムカウンタを共有するので、分岐は苦手。

 →BVHの構造を固定、完全にバランスされた2分木として、ツリーの深さは固定。

  探索は幅優先

  →ツリーの探索が簡単になる

固定数のGPUディスパッチで実現

悪いBVHが作られやすい問題について

 →逐次フレームで暫時改善していく

  →AABBの体積が最も小さくなる組み合わせを選択(体積が小さいといいBVHになる)

   (4つのノードの組み合わせチェックなので、固定処理)

   →それを上のレイヤーに再帰的に改善

局所解に陥りそうであれば、ランダムに入れ替える要素を追加すると

※2分木の均一化と、逐次改善は覚えておくとどこかで使えそう。

GPUのために簡単なアルゴリズムにする必要があるので、わかりやすくていい!

依存ツリーを作る時には、親に遡って繋ぐ必要がある

※union-findの応用範囲の広さ!

GPGPU関係無しに、純粋にアルゴリズムの話としても面白かった。

質疑:

ランダム入れ変えの時の係数、何が0.3?

 →AABBのサイズ比較時に、倍率にかけるランダム値の係数(+-0.3倍?)

シリコンスタジオのデモ

技術とアートを一定レベル以上にする必要があった。

物理ベースシェーディングでは、エイリアスはむしろ増える

fogは、シャドウマップをレイマーチング、キューブマップを一つ反省

マテリアルの合成は、Gバッファで行っている

今までの素材集をベースにチャートを渡して加工してもらう事で、リニアワークフロー+PBRでこのくらいのクオリティにはなった

Localized Cubemap ボックスまたはスフィアの影響範囲を指定、

全体で90個ほど配置、各面256x256、BC6Hで50MB

ディファードレンダリング時に影響範囲のキューブマップを重み付けして、影響範囲内のキューブマップを重ねて描画

キューブマップが重なった場所は重み付け平均で。

 →分子と分母を独立してアルファとRGBに加算ブレンド、最後にアルファで割れば正規化できる。

  (RGBA16BitFloatだと精度問題が出るので、もう少し工夫が必要?)

 →重ならないように配置すれば、パフォーマンスへの影響は少ない。

  画面内の45個のキューブマップが写ってるが、面積はスクリーンの1.5倍程度

GF660で3〜4ms、グロッシーなところは3〜4本レイを飛ばすことも

テンポラルスーパーサンプリング無しでは見られたものではないー>カメラ自分で動かすときついところもあるかも?

エイリアシング地獄!

スペキュラエイリアスが酷い!

 →AAに時間を咲かざるを得ない

法線ミップマップ生成時に正規化せずに足して、短いところはぼかす。

テンポラルGバッファフィルタリング!

 法線が違ってたら押さえる

 費用対効果は高そう。

物理ベース時代のエイリアス

 空間周波数が際限なく高くなる。輝度も際限なく高くなる。

 頂点数も増大するので、エッジが物理的に増加する

 1ピクセル内にエッジが10個くらい重なって、ピクセルごとの法線がランダムに

MSAAやFXAAはほぼ効果無し

トクスビグで多少改善するが、エッジ部分はまだまだ厳しい

 →サンプル数を増やさないとどうにもなならない

  が、スーパーサンプリングではコストパフォーマンスが悪い割に改善しない

描画量を増やさずにサンプル数を増やす

 →時間方向への積分でサンプルを増やす

  →デメリット:高周波の高輝度成分がほぼスポイルされる

エイリアシングフリーな絵は魅力的!