ゲームアプリの数学@GREE GameDevelopers' Meetup
-
Upload
greetech -
Category
Technology
-
view
3.792 -
download
0
Transcript of ゲームアプリの数学@GREE GameDevelopers' Meetup
「勉強会って勉強になるの?」というメタな問題提起は近年ありがち
個別具体的知識や「銀の弾丸」を得るというより、共感と刺激に遭遇する場所としての勉強会
同業他者/他社の動向
まだアセットダウンロードで消耗してるの?
専門の外へのエントリーポイント
今日お話すること
1. 『ゲームアプリの数学』テーマ
2. 『ゲームアプリの数学』番外編
3. 2020年のゲーム開発者
この3つが必ずしも分離しているわけではなく説明が前後するかも
本スライドは後ほどSlideShareへアップロードされます
http://www.slideshare.net/ryukbk
問題意識
ゲーム開発者という専門職業を差別化し成り立たせているものは何か
ゲーム開発者という職に就きたい人々の障害となりうるものは何か
ゲーム開発上の障害をソフトウェアで解決するミドルウェア/エンジン(Unity
他)は何を担っているか/いないか
書籍『ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで』
左: 大型本右: Kindle版SBクリエイティブ刊
第1章三角関数第2章座標系第3章ベクトル第4章行列第5章座標変換第6章クォータニオン第7章曲線第8章ゲームアプリの環境第9章シェーダー
『ゲームアプリの数学』概要
現代の2D/3Dゲーム開発に必要な数学要素を簡潔に解説
1-4章: 前半の山である5章-座標変換(3D
ジオメトリー処理)の構成要素
1-8章: 後半の山である9章-シェーダー(GPUでのジオメトリー/フラグメント並列処理)の構成要素
ベクトル、行列、クォータニオンの定義と演算(API)
1章: 紀元前から17世紀、2-6章: 19世紀、7-9章: 20世紀
第1章三角関数第2章座標系第3章ベクトル第4章行列第5章座標変換第6章クォータニオン第7章曲線第8章ゲームアプリの環境第9章シェーダー
『ゲームアプリの数学』概要
7章曲線: ジオメトリーの、アルゴリズムによる手続き生成
(procedural generation)
8章: リアルタイム3Dグラフィックストレンド、GPUアーキテクチャーの歴史、(モバイル)システムアーキテクチャー、グラフィックスパイプライン解説により、GPU上の並列プログラミングの文脈と前提知識を補充
第1章三角関数第2章座標系第3章ベクトル第4章行列第5章座標変換第6章クォータニオン第7章曲線第8章ゲームアプリの環境第9章シェーダー
『ゲームアプリの数学』概要 座標変換、クォータニオンによる3D回転、Bスプラインなど、あまり解説されない要所の数式は、実用性抜きで途中を省略せず、くどいほどに記載
数学レベルはほぼ高校数学の復習。3D座標変換は大学の線形代数の応用。物理演算や計算幾何学は現代のゲームエンジンでは物理/オクルージョンカリングミドルウェアのAABBツリー等で担保されており扱わない
数学の外側の、現代のゲーム開発哲学/デザインパターン/開発ツール/実行環境についても学べる
「テクスチャーは大きなデータブロブをシェーダープロセッサーで扱うための道具である」等の気付きや肌感を伝えたい
『ゲームアプリの数学』概要// vertex shader
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
// fragment shader
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
この最も単純なシェーダープログラムが何を意味しているかの解説に書籍の大部分は割かれている
なぜシェーダーなのか?
ゲームエンジンが公開する低レベル操作のための標準的エントリーポイント
ゲームで次のステージへ進むための装置としてのボスに(何故か)存在する弱点を攻めるように、シェーダーの攻略が作品の完成度を左右し、差別化ポイントになる(といいなあ)
アーティストとエンジニアをつなぐ、アートとテクノロジーの共通言語としてのシェーダー
GPU並列プログラミングへのいざない
『ゲームアプリの数学』テーマ
なんでもかんでも独自実装を重んじる意識高い原理主義の礼賛はしない
研究者ではない開発者にとって、結果につながらない無用の仕事を作ることは罪ですらある(自分は良くても人のことを考えよう)
オレオレフレームワークや難解なシェーダーを書いたチームメンバーが退職した、さあどうする?
トラブルシューティングに、数学や基本原理の知識は有用
備えあれば憂いなし、転ばぬ先の杖。自衛のためには、強くなるしかない
『ゲームアプリの数学』テーマ
ゲームエンジン(という名の他者のコードベースアセット)との共存
技術評価や、ゲームエンジンが期待しない動作をした場合の問題解決にも、動作原理や設計思想の知識は活きる
8割の作業は便利なゲームエンジンなどのツールに任せつつ、2割の重要な部分に開発リソースを集中できるように
『ゲームアプリの数学』テーマ
Wikipedia: 無限の猿定理(infinite monkey theorem)
制約なく十分長い時間をかければ猿でも作品を書ける
エンジニアのアイデンティティ
問題解決者
(アーティストにはアーティストの、言語化出来ない高次のロジック/ディシプリンが有るかもしれない)
エンジニアは、有限の時間の中で、明瞭な規則を表すアルゴリズムで問題を解く
『ゲームアプリの数学』テーマ
数学は普遍的な形式言語である
廃れない
どこの国の誰でもプログラムが書ける時代、できることは多い方がよい
汎用でつぶしがきく(VR、ロボット、etc.)
商業エンターテインメントの世界は厳しい
面白いものを作れないプランナーは存在意義ゼロ
一方で、技術は積み上げていける
『ゲームアプリの数学』テーマ
ざっくり言って
3D空間の3角形/ポリゴンを2Dに変換、ラスタライズ
2Dのフラグメント(ピクセル)に色を塗る
その間に三角関数やベクトルや行列を多用
主役はGPU
そんな感じです
『ゲームアプリの数学』番外編
3角形の処理が基本の、大原則はわかった
3D空間の3角形/ポリゴンを2Dに変換、ラスタライズ
2Dのフラグメント(ピクセル)に色を塗る
その間に三角関数やベクトルや行列を多用
主役はGPU
他のやりかたはないの?
『ゲームアプリの数学』番外編
他のやりかた… あるんです!
3D空間の3角形/ポリゴンを2Dに変換、ラスタライズ
2Dのフラグメント(ピクセル)に色を塗る
その間に三角関数やベクトルや行列を多用
主役はGPU
ポリゴンなき異世界の3D表現
『ゲームアプリの数学』番外編
レイトレーシング(ray tracing)拡散反射光による大域照明で写実的表現
レンダリング方程式を(近似的に)解き、光と物体の交差を判定
ラジオシティ
モンテカルロ・パストレーシング
フォトンマッピング
ゲームのようなリアルタイム処理には計算負荷が高すぎるCornell box by Henrik Wann Jensen
『ゲームアプリの数学』番外編
レイマーチング(ray marching)バーテックスシェーダーは使わずフラグメントシェーダーのみ使う
ポリゴンメッシュではなく、数式である距離関数(distance
function)を基礎部品(プリミティブ)として物体の形状(ジオメトリー)を定義。ストレージやメモリー空間を占有しない
視点から、光線の先端を、一定間隔ずつ繰り返し進める(march)
光線の座標をパラメーターとして与えた距離関数の値が十分に小さくなったら物体に衝突したとみなす
レンダリング方程式を解く(解析的交差判定)のにあまり頑張らなくてもOK!
『ゲームアプリの数学』番外編float sdSphere( vec3 p, float s )
{
return length(p) - s;
}
float sdBox( vec3 p, vec3 b )
{
vec3 d = abs(p) - b;
return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0));
}
float opS( float d1, float d2 )
{
return max(-d2,d1);
}
vec2 opU( vec2 d1, vec2 d2 )
{
return (d1.x<d2.x) ? d1 : d2;
}
距離関数(distance function)と、そのブーリアン演算で、ジオメトリーのプリミティブを表現
Raymarching – Primitives
by Íñgo Quílez
http://iquilezles.org/www/articles/distfunct
ions/distfunctions.htm
https://www.shadertoy.com/view/Xds3zN
『ゲームアプリの数学』番外編
CSG(Constructive Solid Geometry)
Wikipedia: Constructive Solid Geometryプリミティブとそのブーリアン演算でオブジェクトを作成ただし対応しているモデリングツールは多くない
『ゲームアプリの数学』番外編
符号付距離場(signed distance field, SDF)
全ての点について最も近い物体表面への距離を正の値(物体の外側)か負の値(内側)
で記録
3D空間なら3Dテクスチャーに保存できる
レイマーチングにSDFを併用すると、一定間隔ではなくSDFの値ずつ行進(=sphere
tracing)できるので、効率が良い
ただしSDF自体はストレージ領域やメモリー空間を占有するPer-Pixel Displacement Mapping with Distance Functions
By William Donnelly, GPU Gems 2, 2005
『ゲームアプリの数学』番外編
SDFはフォントレンダリングにも応用
Improved Alpha-Tested Magnification for Vector Textures
and Special Effects, Chris Green, Valve, SIGGRAPH 2007
SDFとGPUによる補間で高解像度の元フォント画像並の縁の滑らかさを再現
解像度毎に複数枚のフォントテクスチャーを用意する必要がなく、1枚のSDF
テクスチャーで済み、メモリーの節約
有名UnityアセットText Mesh ProもSDF対応
Google ChromeのレンダリングエンジンSkiaでもSDFによるフォントレンダリングに対応
https://github.com/google/skia/blob/master/gm/dftext.cpp
『ゲームアプリの数学』番外編
さらにその先へ – SDFをも手続き生成
レイマーチングの第一人者Iñigo
Quilezによる2008年の発表
数式とフラグメントシェーダープログラムを絵筆のように使い、手続き生成によって複雑な3D
シーンを4KBのデモに納める
古くに存在したヨーロッパのデモシーンでは細い回線でドヤるための手段として華やかなCGデモをいかに小さなプログラムで表現するかが競われた
Rendering Worlds with Two Triangles
with raytracing on the GPU in 4096 bytes
by Iñigo Quilez, NVSCENE 2008
『ゲームアプリの数学』番外編
ハイブリッドレンダリングデモシーン出身でSCEに在籍していた
Matt Swobodaによる手続き生成やSDFについての2012年の発表での、将来のレンダリングパイプライン予想
メインのキャラクター表示は依然としてポリゴンをラスタライズ
照明や反射といった効果はレイトレーシングなどの手法を限定的に低精度で採用へ
Advanced Procedural Rendering in DirectX 11
by Matt Swoboda, SCEE, GDC 2012
『ゲームアプリの数学』番外編
UE4のハイブリッドレンダリング
ディスタンスフィールドアンビエントオクルージョン
SDFを使い、環境光の届かない場所に陰を生成
レイトレースディスタンスフィールドソフトシャドウ
SDFを使い、動的なレイトレースされたソフトな影を生成
『ゲームアプリの数学』番外編
Advances in Real-Time Rendering in Games @ SIGGRAPH 2015
AAAゲームを開発する有名開発会社の最高峰をなす面々による、現代のゲームにおけるグラフィックスレンダリングに関する10のセッション
『ゲームアプリの数学』番外編
Advances in Real-Time Rendering in Games @ SIGGRAPH 2015
10のセッションのうち7つがレイマーチングまたはSDFについて言及
『ゲームアプリの数学』番外編 Learning from Failure: a Survey of Promising, Unconventional and Mostly Abandoned
Renderers for ‘Dreams PS4’, a Geometrically Dense, Painterly UGC Game’,
Alex Evans (MediaMolecule), SIGGRAPH 2015
VR空間でユーザーがキャラクターを彫刻して作るPS4タイトル”Dreams”に向けた3年間のR&Dにおける試行錯誤の軌跡
ポリゴンメッシュのラスタライズは無く、CSGのシーンからコンピュートシェーダーで生成したSDFを点の集合(point cloud/splat)
に変換した点描でオブジェクトを表現
ハイブリッドではない、真の次世代ゲームグラフィックスレンダリングを実現
『ゲームアプリの数学』番外編
真の次世代ゲームグラフィックスレンダリングって何?
ポリゴン\(^o^)/オワタ…なのか?
『ゲームアプリの数学』読んで一生懸命3Dとかポリゴンメッシュとか勉強したのにどうしてくれるんですか
1995-2020、4半世紀。思えば短い命だったラスタライザー
『ゲームアプリの数学』番外編
大丈夫だ、問題ない
コンソールでポリゴンが無くなるのは相当先
モバイルでポリゴンが無くなるのはさらに先
ラスタライザーが死んでも数学は死なない
ゲームエンジンが身代わりになってくれる
きっと未来は明るい – 2020年のトレンドは?
2020年のゲーム開発者
CPUとGPUの融合 - ソフトウェアレンダリングへの回帰
ハードウェア性能の向上ほどにはゲームの予算はスケールしないので生産性向上は重要な課題
生産性を上げるためには性能を犠牲にするべき
THE END OF THE GPU ROADMAP
Tim Sweeney, HPG 2009
2020年のゲーム開発者
生産性向上の鍵 – アルゴリズムによる手続き生成
PS4タイトル”No Man’s Sky”は、無数の惑星を全て自動生成
棲息する生物はSuperformulaと呼ばれる曲線の数式を元に生成する
No Man’s Sky
Hello Games, 2016
Wikipedia:
Superformula
2020年のゲーム開発者
大域照明や流体物理といった重い挙動を、限られたシーン内ながら機械学習でそれらしく真似られるようになる
特徴ベクトルを既存の方程式を使って最適にデザインしているのもそのうちディープラーニングで不要になるかも
Global Illumination with
Radiance Regression Functions, 2013
Data-driven Fluid Simulations using Regression Forests, 2015
アルゴリズムなんて造れない? なら機械にやらせればいいじゃない
2020年のゲーム開発者
そのころモバイルでは…
iPhone 1発売の翌年2008年に、AppleはiPhoneを挿して使うVR HMDを特許出願し、2015年に特許取得しているApple wins patent for a head-mounted
iPhone virtual reality display
2018年のiPhone 8ではVRに適したOLEDが採用されるらしい
2010年のiPhone 4から2015年のiPhone 6sは浮動小数点演算性能(FLOPS)では30倍の開きがあり、2015-2020年でもそれくらい伸びるかも
モバイルでもコンピュートシェーダー活用の機運が高まる!
結び
「それさえ頭に入れておけば知の世界を自由に渉猟できるような明快な地図が描きたかった」(浅田彰、2013)
海外の映画や音楽を楽しむために英語を学ぶように、あなた自身がゲームの世界を真に楽しむために数学の言葉を学んではいかがか
Thank You
2016年も何卒よろしくお願い申し上げます