CEDEC 2024 -Day2-

おはようございます。
Pocolです。
技術的な内容はCEDILを見ればいいと思うので,面白かった点や良かった点だけを軽く述べることにします。

昨日は以下の講演を聴講しました。

  • モバイルにも使える軽量な構造を持つ仮想化ジオメトリシステムの設計と実装について
  • Unityにおける大量オブジェクトのレンダリング高速化事例~GPU駆動レンダリング&Hi-Zカリングの統合~
  • Mesh Shaderを活用したスキニングメッシュに対するサブディビジョンサーフェイス
  • 圧倒的キャラクター数×カスタマイズ数をゲームエンジンで実現~『鉄拳8』キャラクターグラフィックス事例
  • 『ゼルダの伝説 ティアーズオブザキングダム』の世界をつなぐ技術~空、地上、地底、そして制作もシームレスに~

モバイルにも使える軽量な構造を持つ仮想化ジオメトリシステムの設計と実装について

雑に言うとNaniteみたいなシステムですが,結構モバイルで対応しようとするとV-Buffer使いづらいとか,Wave組み込み命令が遅くなる場合もあるとか,モバイル特有のクセみたいなのがあって大変だなーと思いました。
デモを実際にやっていたのですが,どのスマホの機種なのかまでは明示されていなかったので、どのぐらいのスペックで動かしているかまではわかりませんでした。

Unityにおける大量オブジェクトのレンダリング高速化事例~GPU駆動レンダリング&Hi-Zカリングの統合~

2-Phaseのオクルージョンカリングでした,以前にこのBlogでも紹介したような1-Phaseの手法はとっていないみたいでした。
GPU駆動レンダリングとかまったくわからない方は一度見ておくと勉強になるかもしれません。
データは種類ごとに配列にしていました(SoA)。やっぱりそっちのほうがやっぱりいいのかなと思いました。自分が実装したときはAoSだったのでアクセス効率が悪いなどの問題があり,ちょっとシェーダ上で問題ある箇所もありました。次に実装するときはSoAにようと思います。

Mesh Shaderを活用したスキニングメッシュに対するサブディビジョンサーフェイス

非常に参考になった。
以前にCEDECでDX11でテッセレーションの発表でも言っていましたが,シルエットはそもそもいい感じ作ってあるので,テッセレーションしてもあんまり変化がわからないなーという印象を受けました。技術的には面白いと思いますが,まぁただゲームに使いますか?っていわれると個人的には「うーん…」という感じです。

圧倒的キャラクター数×カスタマイズ数をゲームエンジンで実現~『鉄拳8』キャラクターグラフィックス事例

カスタマイズ性のあるゲームを作成する際は非常に参考になると思います。
講演の中でしわの表現をポリゴンの面積に応じて法線ブレンド率を変えて実現するというのが個人的にはめっちゃ使える技術だと思いました。

『ゼルダの伝説 ティアーズオブザキングダム』の世界をつなぐ技術~空、地上、地底、そして制作もシームレスに~

洞窟システムの話をしていました。
Edge Collapseみたいな感じで,段々と頂点をマージしていきポリゴンを減らすという手法をとっていて,頂点がうねうね動いていました。ハイトマップのTerrainのみだとやっぱり洞窟みたいなのは結構作りづらいので,オープンワールドゲーム作っている人には非常に参考になる内容だったのではないでしょうか。あとはテクスチャの適切な解像度の判定方法や,カリングするために撮影点をCIで回して記録しておくとか,みんなどうやって解決しているんだろうっていう部分の一部が垣間見えて良かったです。
こちらの講演は会場でほぼ満員でした。非常にためになるので,テレイン周りとか作っている方は見たほうが良いかと思います。

CEDEC 2024 -Day1-

こんばんわ。Pocolです。
CEDEC1日目が終了しました。
今日は以下の講演を聴講しました。

  • 鉄拳シリーズを通してみた格闘ゲームの変遷とその未来
  • “Game Survey”で開発・デバッグ効率が向上した取り組み AtoR from FINAL FANTASY XVII
  • PlayStation5上で人間のプレイヤーと同条件でのゲームプレイ自動化を実現するAI技術
  • プロシージャルゲームコンテント制作ブートキャンプ
  • リアルタイム光学エフェクトの深淵~究極表現への道と位置~
  • 『FINAL FANTASY VII REBIRTH』における会話イベントの量産とアニメーションワークフロー
    • 鉄拳シリーズを通してみた格闘ゲームの変遷とその未来

      とある諸事情で基調講演が事前収録に。
      鉄拳シリーズ30周年で,PlayStationで一番最初にミリオンを達成したのが鉄拳2とか,色々と多くのギネス記録を保持していて,1232件ぐらい検索するとヒットするらしい。他のゲームは普通数十件程度らしい。
      また,ネタとしてハリウッド映画の中で最低点を叩き出したことについても触れられていました。寝たい方はおススメとも力説されておられました(笑)。
      講演の中で鉄拳のストーリー紹介するのに「いらすとやさん」に平八などの絵を買いえてもらったとかで,ショートでまとめていたのが面白かったです。
      あとは,実売の情報もばばーんと出ていたのが,何気にすごかったです。
      他の会社とかだと伏せるところが多いですが。
      販売の割合を円グラフで紹介していたのですが,ヨーロッパなどで51%1で,北南米で33%の売り上げで日本は3%程度しかないそうです。
      鉄拳はコミュニティを大切にして,育ててきたっていう話が結構印象深かったです。やっぱり昨今見ていると,勝手に育たんよなと,いくつかの失敗事例とかも見て感じますし,やっぱりやってくれるファンを大切にしないといけないよなって共感しました。
      あと,意外と背景作り込んでいて,開発費が高騰するという問題に触れられていました。これは別に鉄拳に限ったことではなく,すべてのゲームがその傾向があると思います。この問題は本当に死活問題なのですが,うまい解決案が個人的にも出せておらず,業界全体の課題ではないかと思います。一筋の光となるのはやはりAIを利用した開発支援かなとは思っているのですが,まだ各社模索中ではないかと思っています。逆にもう打開したよ!っていう事例があれば,CEDECなり公の場で是非発表していただきたいです。事例ができると一気に物事が進む可能性はあるじゃないかなと思っています。
      アーケードゲーム開発経験はさっぱりなので,ゲーセンで電圧下がって,CPUクロックが下がり,浮動小数点誤差が発生するとかの話は,やっぱりプログラマーなんですかね,興味深かったです。あとは,ヒット判定が円柱というのもほぇぇと思いました。押し出しは球でやっているらしい。
      開発に役立つかどうかは全く分からないのですが,話としては面白かったです。

      “GameSurvey”で開発・デバッグ効率が向上した取り込みAtoR from FINAL FANTASY XVII

      今日聞いた公演の中で最も実用的な内容でした。
      CEDEC 2017のゼルダのデバッグの紹介が本公演のきっかけだそうです。
      バグチケット対応とかやっていると,「それどうやってやるねん?」とか「カメラのどの向きで,該当オブジェクトどれやねん?」みたいな文章から再現しても全然わからんわ。…みたいな状況が開発しているとよく発生するので,いちいち確認するのにSlackでメンション飛ばしたり,それの応答待つために何回かやりとりしないといけないとか,結構無駄なやりとりが発生しがちなんですが,カメラ座標の他にカメラ方向などのいくつかの情報を即時に反映させられて,無駄なやり取り少なくなって開発効率向上したよって話です。断片的な情報で聞くと,プログラム的にはあんまり大した内容ではないのですが,こういう地味なのが一番開発には効くと思います。自分的にはかなり良い公演でした。
       雑にいうとURIでジャンプして該当箇所の位置・方向を合わせて看板表示もできるようにしたよっていう感じです。講演資料が後ほどあっぷされたらぜひ見てみると良いと思います。おススメです。

      プロシージャルゲームコンテンツ制作ブートキャンプ

      Houdiniを用いて,水などのシミュレーションをしましたって話でした。
      Blender等に比べるとやっぱりお高いだけあってパフォーマンスが良いなどのメリットがあるそうです。
      TAさんとかが好きな内容かもしれませんが,UEとか使っている環境だと簡単にインポートできるとかでいいのかもしれません。正直に絵的にもしょぼいし,あんまりテクニックを教えてくれるという感じの講演でもなかったので,スポンサーセッションだなという感じでした。

      リアルタイム光学エフェクトの深淵へ~究極表現への道と位置~

      幾何光学ベースから波動光学ベースに手法をアップデートして,ボケ表現をグレードアップしたという内容でした。1時間に収まらないため,ボケの話に急遽絞られたようです。
      事前知識は必須ですが,これまで川瀬さんの講演を追ってこられた方は,非常にわかる内容だったのではないかと思います。ペンシルマップ作成が、リアルタイムになっていたのが意外と驚きでした。オーサリングしやすそうでいいなぁと思いました。
      あんまり,詳しく解説できる技量がないので,興味ある方はCEDILのスライドを参照していただくのが良いと思います。

      『FINAL FANTASY VII REBIRTH』における会話イベントの量産とアニメーションワークフロー

      自分はUEを仕事で使っていない勢なのですが,製品に使われている内容だけあって,非常に参考になるものがありました。
      4秒・6秒とか結構細かい単位でモーションを区切っていて,会話の尺から近いものを採用するとか,一言目は裏読みするため,二言目からカメラが変わるとか,…そういうことだったのか。みたいな知見も得られて,良かったです。でも講演で結局,手動調整9:自動調整1の割合で,あんまりやっぱり自動化できないのかーと,それでもゼロから作るよりは格段にマシだと思いますが,なかなか全自動にするのはやっぱりできないんだろうなと痛感しました。


明日からCEDEC!

こんばんみん。Pocolです。

いよいよ明日からCEDECですね。
今年は前日入りしています。
所属会社も変わったこともあり,レポート提出しないといけないので,レポート提出用に明日からこちらにメモを残していこうかなと思います。

ちなみ、みなさんご存じかと思いますが…
CEDECの受講パスですが,バーコードに不備があり交換の必要があるそうです。
詳しくは下記の公式ページをご参照ください。
パス交換のお願いとお詫びのご連絡

新しい名刺が欲しい方は会場でお声がけください!
明日からの3日間楽しみです!
それでは、また。


レイトレ合宿の季節ですね!

こんばんわ、Pocolです。
レイトレ合宿の季節になりましたね。

そういえば,去年のレイトレ合宿については何も書いていないような気がしたので,書いておきます。
昨年の結果は下記ページから確認できます。
https://sites.google.com/view/rtcamp9

私の去年のテーマは「GGXで描画する!」というものでした。
完全な鏡面反射では面白みがないので,すこしグロッシーな反射を描画したい。…と思いレンダラーを書いてみました。

ソースコードは下記にあります。
ponzu


実装としては,DirectX RayTracingを用いています。
デノイザーはクロスバイラテラルフィルタを使う単純なものです。
アセットはKenny Blaster Kitを拝借しています。

プログラム作成はかなりトライアルアンドエラーを繰り返すので,昨年からシェーダリロードに対応するようにしました。
今年はもうひとつ進めてblinkを用いたC++側のホットリロード対応しようかなって思います。

PNG出力はやっぱりfpngが圧倒的に速いので,昨年も用いました。恐らく今年も用いると思います。
https://github.com/richgel999/fpng

シーンデータはFlatBuffersを利用しており,デシリアライズの時間が短くなるようにしています。
https://github.com/google/flatbuffers

さて,今年開催されるレイトレ合宿10ですが,ルールや実行環境は下記の通りだそうです。
https://github.com/shocker-0x15/rtcamp10_setup/blob/main/exec_env_spec.md
今年は,256秒で描画しないといけないそうです。出来るだけ無駄なくプログラムを組まないといけないですね。
今年の参加エントリーはもう締め切られているため,レイトレ合宿への参加に興味がある人は,日頃からレイトレのプログラム画像をX(旧Twitter)などにあげると良いかもしれません。

Wave組み込み命令を使ったテクニック

今週の,Graphics Programming Weekly Issue 347 – July 7th, 2024で,Wave組み込み命令を使ったテクニックの記事が記載されていました。
非常に参考になるので,目を通しておいた方が良いかと思います。
Compute shader wave intrinsics tricks

ライティングに関係するものはSIGGRAPH 2017 Advances in Real-time Rendering Courseの”Improved Culling for Tiled and Clustered Rendering”に記載されています。
ゲーム開発者であれば,とあるプラットフォームSDKのサンプルプログラムにも記述があるので見てみると良いかと思います。

コースティクスシェーダ

ShaderToyにいい実装があったので,自分なりにパラメータ調整したやつ。

// Based on: https://www.shadertoy.com/view/3d3yRj
// See also: KdotJPG's https://www.shadertoy.com/view/wlc3zr

float water_caustics(vec3 pos, float thickness) {
    vec4 n = snoise( pos );

    pos -= thickness*n.xyz;
    n = snoise( pos );

    pos -= thickness*n.xyz;
    n = snoise( pos );

    pos -= thickness*n.xyz;
    n = snoise( pos );
    return n.w;
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 p = (-iResolution.xy + 2.0*fragCoord) / iResolution.y;

    // camera matrix
    vec3 ww = normalize(-vec3(0., 1., 0.8));
    vec3 uu = normalize(cross(ww, vec3(0., 1., 0.)));
    vec3 vv = normalize(cross(uu,ww));

    vec3 rd = p.x*uu + p.y*vv + 1.5*ww;	// view ray
    vec3 pos = -ww + rd*(ww.y/rd.y);	// raytrace plane
    
    pos.y = iTime*0.25;	// animate noise slice
    pos *= 3.;		// tiling frequency

    float w = mix(water_caustics(pos, 0.085), water_caustics(pos + 1.0, 0.085), 0.5);

    // noise [-1..+1] -> color
    float intensity = exp(w*2.5 - 1.);
    fragColor = vec4(vec3(intensity), 1.);
}

ちなみに元にしたコードは,https://www.shadertoy.com/view/ssfBDfにあります。

バジェット&パフォーマンス メモ

開発の為に各社のパフォーマンスバジェット数などのメモを残しておきます。
基本はPS5世代のオープンワールド関連で,メモは随時更新します。
また、ここに載っていないものでご存じのものがあれば、ぜひコメント等にて紹介して頂けると幸いです。

Cyberpunk 2077

・GDC 2023, “Building Night City: The Technology of Cyberpunk 2077”.
エンティティは15 millionなので,15 * 100万 = 1500万エンティティ。
ワールドセクターは256m単位。



Spider-Man 2

GDC 2024, “Applied Mesh Analysis: Automating Distant City LODs in Marvel’s Spider-Man 2”.

Hogwarts Legacy

GDC 2024, “Open World Rendering Techniques in ‘Hogwarts Legacy'”.
TODO : 後で追記。

Alan Wake2

GDC 2024, “Large Scale GPU-Based Skinning for Vegetation in Alan Wake”.





Call of Duty:MW2



God of War Ragnarok

GDC 2023, “Rendering “God of War: Ragnarok””.



Horizon Forbidden West

GDC 2023, “Space-Efficient Packaging For Horizon Forbidden West”.

GDC 2022, “Adventures with Deferred Texturing in Horizon Forbidden West”.

Ghost of Tsushima

GDC 2021, “Zen of Streaming: Building and Loading Ghost of Tsushima”.


Final Fantasy 16

CEDEC 2023, “Final Fantasy XVI:大規模ゲーム開発に向けて開発環境の取り組み”.

Skull and Bones

CEDEC 2023, “Skull and Bones カメラ依存のテクスチャストリーミング実例紹介”.


Tom Clancy’s The Division

GDC 2016, “Global Illumination in Tom Clancy’s The Division”.


眼球のコースティクスのリファレンス

忘れないようにメモ。
眼球のコースティクスのリファレンス動画がX(旧Twitter)に上がっていました(5年前)。

高解像度バージョンの動画などはスレッドにリンクがあり,https://t.co/bc9HF4uWO5からダウンロードできるようです。

接線空間データの圧縮について

知識というのは更新しないダメですね。
法線データのOctahedral Encodingをよく用いています。

※図は[Cigolle 2014]より引用。

ここで,Octahedron を45度回転させて,符号をビットを別に持てば,表現する面積領域が増えるから精度が倍に上がるのと,OctWrap()の演算も無くなるので,デコードも高速できるそうです。

これが,John White 3Dというブログの,”Signed Octahedron Normal Encoding”という記事にのっていました。これをみて「ほぇぇ~」と感心しました。頭いい!
ただ、符号ビットを別に持つの何かやだなーと思っていたのですが,R10G10B10A2なら10bit分が残っているので,この32bitでNormal, Tangent, Bitangentを表現しちゃいたいところです。

以前に書いたかもしれませんが,SIGGRAPH 2020のDOOMで使っている,接線空間表現を使おうかなと思っていました。

※図は[Geffroy 2020]より引用。

しかし、今日もっといいやつを見つけました。
Jeremy Ongさんの”Tangent Spaces and Diamond Encoding”というブログ記事。この中でも上記のDOOMの方式が紹介されていますが,もっといいのがダイヤモンドエンコーディングというやつ。

※図は[Ong 2023]より引用

ここでも,Octahedronの考えを利用しています。ちなみにサンプルコードは下記の様です。

※コードは[Ong 2023]より引用

ダイヤモンドエンコードで得られた接線を表すデータを残りの10bit部分に入れてしまえば,うまくR10G10B10A2に収めることができます。

ちなみに,Octahedron Encodingですが,Z+の半球が約束されているのであれば符号ビットもいらないので,下記のHemi-Octで実現できるそうです。

※コードは[Cigolle 2014]より引用

…ということで接線空間データの圧縮についてでした。

参考文献

  • [Cigolle 2014] Zina H. Cigolle, Sam Donow, Daniel Envangelakos, Michael Mara, Morgan McGuire, Quirin Meyer, “A Survey of Efficient Representations for Independent Unit Vectors”, Journal of Computer Graphics Techniques Vol.3, No.2, 2014.
  • [JohnWhite3D 2017] John White 3D, “Signed Octahedron Normal Encoding”, https://johnwhite3d.blogspot.com/2017/10/signed-octahedron-normal-encoding.html, 2017.
  • [Geffroy 2020] Jean Geffroy, Axel Gneiting, Yixin Wang, “Rendering The Hellscape of DOOM Eternal”, SIGGRAPH 2020 Advances in Real-Time Rendering course.
  • [Ong 2023] Jeremy Ong, “Tangent Spaces and Diamond Encoding”, https://www.jeremyong.com/graphics/2023/01/09/tangent-spaces-and-diamond-encoding/, 2023.