CAPCOM Open Conference RE:2019

特に SNS 投稿等が禁止となっていなかったのでここに書いていますが、もし何か問題があった場合は速やかに削除します。

ゲームエンジン開発技術解説

ラピッドイテレーションを実現するRE ENGINEの設計
https://www.slideshare.net/capcom_rd/re-engine-72302524

RE Engine は、ゲーム側は一切の C++ コードを廃止して C# で記述しているらしい。本当に、全てを C# で記述しているとしたら相当凄い。ゲーム側プログラマからの反発は無かったのかな。

基本は AOT コンパイルベース。JIT コンパイルは行わない。独自の仮装マシン REVM を開発。Debug 時のみ、REVM 上で IL を実行している?リリース時のみ IL2CPP 使っていてC++ にしている?

RE Engine で採用したフォント
DIN Next Regular
https://fontplus.jp/font-list/dinnextltpro-regular

プロシージャルモデリング技術解説

Houdini Engine のエンジンへの組み込み
https://www.sidefx.com/ja/products/houdini-engine/

大規模開発では、プロシージャルモデリングの仕組みは必須。

Houdini から、マスクテクスチャを出力する際に 4k だとデカかったため、出力する段階で、テクスチャを Quad Tree Texutre 化して、重要度が高い部分を、高密度で配置するようにした。

Light Probe 配置の参考
https://research.activision.com/publications/archives/precomputed-lighting-in-call-of-dutyinfinite-warfare
http://advances.realtimerendering.com/s2017/Precomputed%20Lighting%20in%20CoD%20IW_20_PPS.pdf

リアルタイムグラフィックス技術解説

破壊系はリアルタイム物理 (Rigidgbody) とベイクの両方を使用している

ベイクは、Maya で物理シミュレーションしたものを、ベイクして、ジョイントでアニメーションしている。従来は VFX で表現したものを、物理シミュレーションを使って、モデルで表現力を上げている。

ベイクしたものから、途中から物理シミュレーションに切り替えたりと言ったこともしている。

揺れものは、ジョイントをセットアップして、そのジョイントに対して駆動範囲をエンジン上で設定して、シミュレーションを行なっている。

CEDEC 2019 講演メモ

フラスタムカリング入門、良いフラスタムの作り方
http://cedec.cesa.or.jp/2019/session/detail/s5c9c74958b4fa

レイ・トレーシングのデータ構造を極める!
http://cedec.cesa.or.jp/2019/session/detail/s5c63bce679db2

Unity C# × gRPC × サーバーサイドKotlinによる次世代のサーバー/クライアント通信
http://cedec.cesa.or.jp/2019/session/detail/s5c9dede391631

LAMPで構成されたモバイルゲームのバックエンドのKubernetesへの移行事例

http://cedec.cesa.or.jp/2019/session/detail/s5c9d8a72633ab

従来、LAMP で構築していた環境から、最新のタイトルから GCP の Kubernetes への移行。

開発環境から、Docker への移行
Apache+PHP
Memcached
MariaDB
Redis

ログやユーザーデータなどの永続データは、Kubernetes POD 以外に配置。マネージドサービスで利用。GCP の CloudSQL と Cloud Memorystore を使用

Kubernetes から上記サービスへの接続方法なども書かれている。あとは、ロードバランサ。Kubernetes の Ingress  という仕組み

The graphic of “プロ野球スピリッツ2019”
http://cedec.cesa.or.jp/2019/session/detail/s5c9c2e29b4f46

ルミナス・エンジンへのリアルタイムレイトレーシング実装事例の紹介

全てのライトに対してシャドウレイを飛ばすと重い。
ライト17灯あるが、ライトの影響度を見て、モンテカルロ法で1灯のみに飛ばしている。IORのパラメータを別に持っている。

使用レジスター数・スタック退避を避ける
TraceRayの前後ではスタック退避が発生する。レジスター数削減や精度の最適化を行う。

デノイザー
Spatiotemporal Luminance-Guided Filter (SLGF)
特定パスに特化してデノイザーもあるが、今回はスクリーン全体のデノイザー

既存の Spatiotemporal Variance-Guided Filter (SVGF)
Temporal Accumulation と A-Trous Filter を使用。
輝度の分散が大きいところは、Spatial Filter でフィルタリング
分散が小さいところでは、輝度差の大きいピクセルとのブレンドを抑制

改良版の A-SVGF は、Gradient Pixel を用いて、輝度の時間的変化率を計算
輝度変化を検出すると、Temporal Accumulation の更新料を調整して、過去のピクセルをキャンセル

レンダラーからは、複数バッファを出力
Direct Diffse (Primary SurfaceのAlbedoの値を乗算前の、直接光のDiffuse成分)。光源の色
Direct Specular/Indirect Specular -> 直接光、間接光のSpecular成分、屈折反射レイの成分
Indirect Diffse -> Secondary 以降の間接光の Diffuse 成分。格納方法は RGB ではなく、YCoCgに変換後に、輝度成分のみ、SH にして1次(4要素)
で格納。

その他、G-Buffer に相当するものを出力
Albedo, Depth, Depth Gradient, Geometry Normal, Shading Normal, Motion Vector

パストレースは、輝度のレンジが広く、Importance Sampling などを活用すると、真の値から大きく外れた輝度のサンプリングが発生する
確率的な選択を行うと、その確率のPDFの逆数をかける?

Long Tail TAの持つ問題点への対処

  • Luminance Guide の導入。現在のフレームのレンダリング結果から、ピク説ごとの輝度の推定を行う。
      過去のフレームの情報は使わずに、現在のフレームの情報を用いる。
        推定された輝度を基準に、基準から大きく異なる輝度の場合は、TA結果の輝度を補正

輝度の推定は、Depth と Normal を使った Bilateral Filter で輝度を算出

Disocclusionの対応
Luminance Estimation Filter の結果を再利用する。
輝度を推定するのではなく、RGB を推定する。
不十分な箇所には、Disocclusion判定マスクを作って、Bilateral FilterでBlurして適用。

Indirect Diffuse の処理

  • 高輝度ピクセルが極めて疎に分布する構造になっているため、平均輝度の推定は困難
    EMAFが1/10のTemporal Accumulation を適用。4pass の Bilateral Filter を適用。
    評価する時に、Depth や Normal を見て、値を拾う

Indirect Diffuse は値は RGB で格納していない。YCoCgに変換して、輝度値を Secondary Ray のベクトルとともに SH に変換している。フィルターを通した後でも、その Indirect Ray がどこから来たのか、何となく復元。

半年でリリースできる柔軟な動画配信アプリサーバ開発事例
http://cedec.cesa.or.jp/2019/session/detail/s5c9f86770e398

ディープラーニングによる画像処理を実機側で高速に動かし、活用する技術

エッジ AI と クラウド AI。自分の端末 (組み込み機器) 上で、推論を行うか、クラウドサーバー上で推論を行うか。

ディープラーニングを活用して TecoGAN などで超解像度技術が出てきていたり、GifAnim から動画に復元するなど。
https://arxiv.org/abs/1901.02840
http://www.wave.one/face-compression

Halide
C++ のライブラリ。OpenCV のバックエンドでも使われている。

Tensorflow Lite
C++11 で使われている。

SIGGRAPH 2019 Vulkan Session Slide 参照

TVM
Open Deep Learning Compiler Stack
ONNX から SPIR-V に変換可能?

Convolution 処理の高速化
・Regular Convolution
(w*h*Co) * (Ci*3*3)

・1×1 Convolution (Point Convolution)
(w*h*Co) * Ci
畳み込みのカーネルをチャンネル方向のみに限定。空間方向の相関関係が読み込めない

・Depthwise (Separable) Convolution
(w*h*Co) * (3*3)
畳み込みのカーネルを空間方向のみに限定。チャンネルを犠牲。

MobileNet v1
Point Convolution と Depthwise Convolution を併用することで、Regular Convolution と近い内容になる。
(w*h*Ci)(3*3+Co)
掛け算だった箇所が足し算になる。

DirectX Raytracingを用いたライトベイカーの実装について

ライトマップのベイクと、ライトプローブのベイクに対応
時間変化に対応。

物理的に正しいライティングを目指しており、ライティング計算を物理単位できちんと行なっている。
シェーダーには輝度を入力。輝度1000をGPU内の1として扱う。と書いていたが、どういう事?
そう、定義付けているだけ?

テクセルからパストレースすると、ライトマップ
頂点マップからパストレースすると、頂点ベイク
空間上からパストレースすると、Light Probe

SHライトマップベイク
処理負荷軽減のため、SHはL1まで使用。出力テクスチャはBC6Hx4枚になっている
SH L0, SHL1 -1, SHL1 0, SHL1 1 の 4枚

UVAtlas でUV展開
レイのランダム方向にはXORWOWを使用している
Terragen によって、特定時刻ごとの待機画像を生成して、Miss Shader から参照

モデルが追加されたり、動いた場合は AS の再構築が必要

SINoALICE -シノアリス- それは必死の「サーバー削減」

初期流入に耐えられるように、費用度外視でサーバーを確保

EC2 650台
app,myshl,memcached マルチ通信システムで利用。RDB と比べると費用は安いが、台数が多い

RDB 200台
広げすぎたaurora

現在、EC2は平均150台前後。深夜帯は20台前後。
RDBは50台に

簡単なものは、定常メンテで作業。時間を要さないもの。深夜メンテはdbの最適化や統合をやってる。スキーマの変更なども。

ゲームを止めずにsharding 化を行う仕組み。

最適化
new relic を利用して、効率の悪いAPIを抽出
24時間で細かく、オートスケーリンググループを設定

ポケラボ!おー!

Tales of ARISE』におけるレンダリング技術と高速化
http://cedec.cesa.or.jp/2019/session/detail/s5c9c5bc2d3123

家庭用ゲーム開発におけるゲームエディタの基礎設計と、安定かつ高速なアセット管理について
http://cedec.cesa.or.jp/2019/session/detail/s5c6542b7f0d86

コロプラの開発中タイトル事例 〜Unity最新技術でコンソール級のモバイルゲームを実現〜

http://cedec.cesa.or.jp/2019/session/detail/s5ceb8b998ed1e
SRP (Scriptable Render Pipeline) を活用して、描画フローをカスタマイズ。
LWRP(LightWeight RenderPipeline)  -> Universal RP  に名前変更
HDRP (HD RenderPipeline) 

https://github.com/Unity-Technologies/ScriptableRenderPipeline/

ディファードレンダリング上で表現するアニメルックの追求とその手法
http://cedec.cesa.or.jp/2019/session/detail/s5ca0ca2f6762f

深層学習がもたらす映像創作支援のための研究イノベーション
http://cedec.cesa.or.jp/2019/session/detail/s5cd20c58862b6

5Gでゲームはどう変わる?~そろそろ気にしておきたい5G最前線~
http://cedec.cesa.or.jp/2019/session/detail/s5cbe7e6470aea

大乱闘スマッシュブラザーズ SPECIAL』~3Dグラフィックスの絵作り
http://cedec.cesa.or.jp/2019/session/detail/s5c9a0584cb33d

ゲームと機械学習の最前線 〜現状と未来を正しく捉えるために〜
http://cedec.cesa.or.jp/2019/session/detail/s5c9b199a29c68

フォトグラメトリーとプロシージャルを用いた最新ハイエンドゲーム3DCG背景制作手法
http://cedec.cesa.or.jp/2019/session/detail/s5c90bc97ca347

スマホゲームリリース時に絶対サーバを落とさないための負荷試験
http://cedec.cesa.or.jp/2019/session/detail/s5c942b8e1ee5c

Unityではじめるオープンワールド入門 アーティスト編
http://cedec.cesa.or.jp/2019/session/detail/s5ceb8ae4b5635

Unityではじめるオープンワールド入門 エンジニア編
http://cedec.cesa.or.jp/2019/session/detail/s5ceb8b3b98c9d

コンピュータハードウェア技術トレンド

ムーアの法則
2年ごとに同じコストでチップに2倍のトランジスタを搭載できる

デナードスケーリング則
チップの性能は2年ごとに2倍になるが電力は同じ

チップに乗せられるトランジスタは倍増しているが、デナードスケーリングが止まって電圧が下がらない状態になってきた。

チップレット
チップを各機能ごとにチップを分けて製造
チップをチップレット化した場合、インターコネクトが問題にになる
余計な電力消費とレイテンシが発生するため

ドメインスペシフィックチップ
汎用チップよりも、AI Core のような特定の演算に特化したチップの流れになる

GPU最適化:シェーダ実行の高速化手法

「真っ先にやらないといけないことはプロファイリング」

レイテンシを隠しきれない
・実行可能なシェーダーが少なく、メモリアクセスレイテンシで待っている状態が長い場合が多い
・シェーダーの起動・終了のロスが長い

同時実行可能なシェーダーを増やし、シェーダーのライフタイムを減らす。
リソースの消費量によって、演算器に乗る Wave の数が決まってくるため、レジスターの消費量や shared memory の消費量を減らすことで、Wave の数が増える

シェーダーのライフタイムを減らす
・メモリアクセスや演算命令を減らす
・一つのシェーダーでやる仕事を増やす

1 Thread で 1px やっていたのを 2px やれば、ロードストア時間の節約になる。しかし、起動できる wave の数が減る可能性もあるため、やってみないと分からない。

最適化の方法は、大別すると2つ
・最終結果に影響しない不要な処理を削る
・未活用のリソースを活用して、ボトルネック部分の負荷を軽減する

内製レンダリングエンジンにおける採用技術と最適化手法

CEDIL を見ておく
https://cedil.cesa.or.jp/cedil_sessions/view/2078

macOS の keychain 追加

.cer や .p12 をダブルクリックで追加した時に現れる window で、keychain の追加方法で、login や System を選ぶことができる。

System はシステム全体 (複数ユーザー) でアクセスできる Keychain。システムでアクセスされる keychain はここにおく。login はログインユーザーのみがアクセス可能な Keychain。個々のユーザーごとに制限できる。

自分の macOS を自分一人だけしか使わないのであれば、どちらでも構わないと思う。

Compute Vision の国際学会

Computer Vision に関する代表的な国際学会は以下の通り。

ICCV
International Conference on Computer Vision
2019年10月27日-11月2日

CVPR
Computer Vision and Pattern Recognition
2019年6月16日-6月20日

ECCV
European Conference on Computer Vision
2018年9月8日-9月14日 (隔年、次回 2020年)

Super Resolution

Review: RED-Net — Residual Encoder-Decoder Network (Denoising / Super Resolution)
https://medium.com/datadriveninvestor/review-red-net-residual-encoder-decoder-network-denoising-super-resolution-cb6364ae161e

ディープラーニングによる画像の拡大技術
https://www.nttpc.co.jp/gpu/article/technical02.html

トップ学会採択論文にみる、超解像ディープラーニング技術のまとめ
https://qiita.com/jiny2001/items/e2175b52013bf655d617

【Intern CV Report】CVPR2019における超解像
https://buildersbox.corp-sansan.com/entry/2019/07/12/110000

【Intern CV Report】超解像の歴史探訪 -2016年編-
https://buildersbox.corp-sansan.com/entry/2019/03/20/110000