Slide 1

Slide 1 text

ゲームアプリの数学 @GREE GameDevelopers' Meetup 2015-12-16 久富⽊木 隆⼀一 (Ryuichi KUBUKI)

Slide 2

Slide 2 text

Who Am I? u 久富⽊木 隆⼀一 (Ryuichi KUBUKI @ryukbk ) u 『ゲームアプリの数学』著者 u グリーでゲームアプリ開発の仕事をして います

Slide 3

Slide 3 text

u 師⾛走のお忙しい中お 越しいただき誠にあり がとうございます

Slide 4

Slide 4 text

u 「勉強会って勉強になるの?」というメタな問 題提起は近年年ありがち u 個別具体的知識識や「銀の弾丸」を得るというよ り、共感と刺刺激に遭遇する場所としての勉強会 u 同業他者/他社の動向 u まだアセットダウンロードで消耗してるの? u 専⾨門の外へのエントリーポイント

Slide 5

Slide 5 text

今⽇日お話すること 1.  『ゲームアプリの数学』テーマ 2.  『ゲームアプリの数学』番外編 3.  2020年年のゲーム開発者 u  この3つが必ずしも分離離しているわけではなく説明が前後するかも u  本スライドは後ほどSlideShareへアップロードされます http://www.slideshare.net/ryukbk

Slide 6

Slide 6 text

問題意識識 u ゲーム開発者という専⾨門職業を差別化 し成り⽴立立たせているものは何か u ゲーム開発者という職に就きたい⼈人々 の障害となりうるものは何か u ゲーム開発上の障害をソフトウェアで 解決するミドルウェア/エンジン(Unity 他)は何を担っているか/いないか

Slide 7

Slide 7 text

書籍『ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで』 左: ⼤大型本 右: Kindle版 SBクリエイティブ 刊 第1章 三⾓角関数 第2章 座標系 第3章 ベクトル 第4章 ⾏行行列列 第5章 座標変換 第6章 クォータニオン 第7章 曲線 第8章 ゲームアプリの環境 第9章 シェーダー

Slide 8

Slide 8 text

『ゲームアプリの数学』概要 u  現代の2D/3Dゲーム開発に必要な数学要 素を簡潔に解説 u  1-4章: 前半の⼭山である5章-座標変換(3D ジオメトリー処理理)の構成要素 u  1-8章: 後半の⼭山である9章-シェーダー (GPUでのジオメトリー/フラグメント並 列列処理理)の構成要素 u  ベクトル、⾏行行列列、クォータニオンの定義 と演算(API) u  1章: 紀元前から17世紀、2-6章: 19世紀、 7-9章: 20世紀 第1章 三⾓角関数 第2章 座標系 第3章 ベクトル 第4章 ⾏行行列列 第5章 座標変換 第6章 クォータニオン 第7章 曲線 第8章 ゲームアプリの環境 第9章 シェーダー

Slide 9

Slide 9 text

『ゲームアプリの数学』概要 u 7章 曲線: ジオメトリーの、アルゴ リズムによる⼿手続き⽣生成 (procedural generation) u 8章: リアルタイム3Dグラフィック ストレンド、GPUアーキテク チャーの歴史、(モバイル)システム アーキテクチャー、グラフィック スパイプライン解説により、GPU 上の並列列プログラミングの⽂文脈と 前提知識識を補充 第1章 三⾓角関数 第2章 座標系 第3章 ベクトル 第4章 ⾏行行列列 第5章 座標変換 第6章 クォータニオン 第7章 曲線 第8章 ゲームアプリの環境 第9章 シェーダー

Slide 10

Slide 10 text

『ゲームアプリの数学』概要 u  座標変換、クォータニオンによる3D回転、Bスプラ インなど、あまり解説されない要所の数式は、実⽤用 性抜きで途中を省省略略せず、くどいほどに記載 u  数学レベルはほぼ⾼高校数学の復復習。3D座標変換は ⼤大学の線形代数の応⽤用。物理理演算や計算幾何学は現 代のゲームエンジンでは物理理/オクルージョンカリ ングミドルウェアのAABBツリー等で担保されてお り扱わない u  数学の外側の、現代のゲーム開発哲学/デザインパ ターン/開発ツール/実⾏行行環境についても学べる u  「テクスチャーは⼤大きなデータブロブをシェーダー プロセッサーで扱うための道具である」等の気付き や肌感を伝えたい

Slide 11

Slide 11 text

『ゲームアプリの数学』概要 // 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); } この最も単純なシェーダープログラムが何を意味してい るかの解説に書籍の⼤大部分は割かれている

Slide 12

Slide 12 text

なぜシェーダーなのか? u ゲームエンジンが公開する低レベル操作のための標準 的エントリーポイント u ゲームで次のステージへ進むための装置としてのボス に(何故か)存在する弱点を攻めるように、シェーダーの 攻略略が作品の完成度度を左右し、差別化ポイントになる (といいなあ) u アーティストとエンジニアをつなぐ、アートとテクノ ロジーの共通⾔言語としてのシェーダー u GPU並列列プログラミングへのいざない

Slide 13

Slide 13 text

u 「でも、お好きなん でしょう? シェーダー とか低レベルとか」

Slide 14

Slide 14 text

u 「でも、お好きなんでしょ う? シェーダーとか低レベ ルとか」 u 「んなこたーない」

Slide 15

Slide 15 text

『ゲームアプリの数学』テーマ u なんでもかんでも独⾃自実装を重んじる意識識⾼高い原理理主義の 礼賛はしない u 研究者ではない開発者にとって、結果につながらない無⽤用 の仕事を作ることは罪ですらある(⾃自分は良良くても⼈人のこと を考えよう) u オレオレフレームワークや難解なシェーダーを書いたチー ムメンバーが退職した、さあどうする? u トラブルシューティングに、数学や基本原理理の知識識は有⽤用 u 備えあれば憂いなし、転ばぬ先の杖。⾃自衛のためには、強 くなるしかない

Slide 16

Slide 16 text

『ゲームアプリの数学』テーマ u ゲームエンジン(という名の他者のコードベースア セット)との共存 u 技術評価や、ゲームエンジンが期待しない動作を した場合の問題解決にも、動作原理理や設計思想の 知識識は活きる u 8割の作業は便便利利なゲームエンジンなどのツールに 任せつつ、2割の重要な部分に開発リソースを集中 できるように

Slide 17

Slide 17 text

『ゲームアプリの数学』テーマ Wikipedia: 無限の猿定理理(infinite monkey theorem) 制約なく⼗十分⻑⾧長い時間をかければ猿でも作品を書ける u エンジニアのアイデンティティ u 問題解決者 u (アーティストにはアーティ ストの、⾔言語化出来ない⾼高次 のロジック/ディシプリンが 有るかもしれない) u エンジニアは、有限の時間の 中で、明瞭な規則を表すアル ゴリズムで問題を解く

Slide 18

Slide 18 text

『ゲームアプリの数学』テーマ u 数学は普遍的な形式⾔言語である u 廃れない u どこの国の誰でもプログラムが書ける時代、できる ことは多い⽅方がよい u 汎⽤用でつぶしがきく(VR、ロボット、etc.) u 商業エンターテインメントの世界は厳しい u ⾯面⽩白いものを作れないプランナーは存在意義ゼロ u ⼀一⽅方で、技術は積み上げていける

Slide 19

Slide 19 text

『ゲームアプリの数学』テーマ u ざっくり⾔言って u 3D空間の3⾓角形/ポリゴンを2Dに変換、ラ スタライズ u 2Dのフラグメント(ピクセル)に⾊色を塗る u その間に三⾓角関数やベクトルや⾏行行列列を多⽤用 u 主役はGPU u そんな感じです

Slide 20

Slide 20 text

u 以上が書籍のテーマ u 閑話休題 u ここからは番外編

Slide 21

Slide 21 text

『ゲームアプリの数学』番外編 u 3⾓角形の処理理が基本の、⼤大原則はわかった u 3D空間の3⾓角形/ポリゴンを2Dに変換、ラ スタライズ u 2Dのフラグメント(ピクセル)に⾊色を塗る u その間に三⾓角関数やベクトルや⾏行行列列を多⽤用 u 主役はGPU u 他のやりかたはないの?

Slide 22

Slide 22 text

『ゲームアプリの数学』番外編 u 他のやりかた… あるんです! u 3D空間の3⾓角形/ポリゴンを2Dに変換、ラ スタライズ u 2Dのフラグメント(ピクセル)に⾊色を塗る u その間に三⾓角関数やベクトルや⾏行行列列を多⽤用 u 主役はGPU u ポリゴンなき異異世界の3D表現

Slide 23

Slide 23 text

『ゲームアプリの数学』番外編 u レイトレーシング(ray tracing) u  拡散反射光による⼤大域照明で写実的表現 u  レンダリング⽅方程式を(近似的に)解き、光 と物体の交差を判定 u ラジオシティ u モンテカルロ・パストレーシング u フォトンマッピング u  ゲームのようなリアルタイム処理理には計 算負荷が⾼高すぎる Cornell box by Henrik Wann Jensen

Slide 24

Slide 24 text

u もっと楽なのな いの? u …あるんです!

Slide 25

Slide 25 text

『ゲームアプリの数学』番外編 u レイマーチング(ray marching) u バーテックスシェーダーは使わずフラグメントシェーダーのみ使う u ポリゴンメッシュではなく、数式である距離離関数(distance function)を基礎部品(プリミティブ)として物体の形状(ジオメト リー)を定義。ストレージやメモリー空間を占有しない u 視点から、光線の先端を、⼀一定間隔ずつ繰り返し進める(march) u 光線の座標をパラメーターとして与えた距離離関数の値が⼗十分に⼩小さ くなったら物体に衝突したとみなす u レンダリング⽅方程式を解く(解析的交差判定)のにあまり頑張らなく てもOK!

Slide 26

Slide 26 text

『ゲームアプリの数学』番外編 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

Slide 27

Slide 27 text

『ゲームアプリの数学』番外編 u CSG(Constructive Solid Geometry) Wikipedia: Constructive Solid Geometry プリミティブとそのブーリアン演算でオブジェクトを作成 ただし対応しているモデリングツールは多くない

Slide 28

Slide 28 text

u レイマーチング、⼀一定間隔 ずつ⾏行行進って、当てずっぽ うかよ! u もう少しなんかないの? u …あるんです!

Slide 29

Slide 29 text

『ゲームアプリの数学』番外編 u 符号付距離離場(signed distance field, SDF) u  全ての点について最も近い物体表⾯面への 距離離を正の値(物体の外側)か負の値(内側) で記録 u  3D空間なら3Dテクスチャーに保存できる u  レイマーチングにSDFを併⽤用すると、⼀一定 間隔ではなくSDFの値ずつ⾏行行進(=sphere tracing)できるので、効率率率が良良い u  ただしSDF⾃自体はストレージ領領域やメモ リー空間を占有する Per-Pixel Displacement Mapping with Distance Functions By William Donnelly, GPU Gems 2, 2005

Slide 30

Slide 30 text

『ゲームアプリの数学』番外編 u SDFはフォントレンダリングにも応⽤用 Improved Alpha-Tested Magnification for Vector Textures and Special Effects, Chris Green, Valve, SIGGRAPH 2007 u  SDFとGPUによる補間で⾼高解像度度の元 フォント画像並の縁の滑滑らかさを再現 u  解像度度毎に複数枚のフォントテクス チャーを⽤用意する必要がなく、1枚のSDF テクスチャーで済み、メモリーの節約 u  有名UnityアセットText Mesh ProもSDF対応 u  Google ChromeのレンダリングエンジンSkiaでもSDFによるフォン トレンダリングに対応 https://github.com/google/skia/blob/master/gm/dftext.cpp

Slide 31

Slide 31 text

『ゲームアプリの数学』番外編 u さらにその先へ – SDFをも⼿手続き⽣生成 u  レイマーチングの第⼀一⼈人者Iñigo Quilezによる2008年年の発表 u  数式とフラグメントシェーダープ ログラムを絵筆のように使い、⼿手 続き⽣生成によって複雑な3Dシー ンを4KBのデモに納める u  古くに存在したヨーロッパのデモ シーンでは細い回線でドヤるため の⼿手段として華やかなCGデモを いかに⼩小さなプログラムで表現す るかが競われた Rendering Worlds with Two Triangles with raytracing on the GPU in 4096 bytes by Iñigo Quilez, NVSCENE 2008

Slide 32

Slide 32 text

u なんかゲームに 関係あるの? u …あるんです!

Slide 33

Slide 33 text

『ゲームアプリの数学』番外編 u ハイブリッドレンダリング u  デモシーン出⾝身でSCEに在籍していた Matt Swobodaによる⼿手続き⽣生成や SDFについての2012年年の発表での、将 来のレンダリングパイプライン予想 u  メインのキャラクター表⽰示は依然とし てポリゴンをラスタライズ u  照明や反射といった効果はレイトレー シングなどの⼿手法を限定的に低精度度で 採⽤用へ Advanced Procedural Rendering in DirectX 11 by Matt Swoboda, SCEE, GDC 2012

Slide 34

Slide 34 text

『ゲームアプリの数学』番外編 u UE4のハイブリッドレンダリング u  ディスタンスフィールドアンビエント オクルージョン u SDFを使い、環境光の届かない場所に陰 を⽣生成 u  レイトレースディスタンスフィールド ソフトシャドウ u SDFを使い、動的なレイトレースされた ソフトな影を⽣生成

Slide 35

Slide 35 text

『ゲームアプリの数学』番外編 u  Advances in Real-Time Rendering in Games @ SIGGRAPH 2015 AAAゲームを開発する有名開発会社 の最⾼高峰をなす⾯面々による、現代の ゲームにおけるグラフィックスレン ダリングに関する10のセッション

Slide 36

Slide 36 text

『ゲームアプリの数学』番外編 u  Advances in Real-Time Rendering in Games @ SIGGRAPH 2015 10のセッションのうち7つが レイマーチングまたはSDFに ついて⾔言及

Slide 37

Slide 37 text

『ゲームアプリの数学』番外編 u  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 u  VR空間でユーザーがキャラクターを彫刻して 作るPS4タイトル”Dreams”に向けた3年年間の R&Dにおける試⾏行行錯誤の軌跡 u  ポリゴンメッシュのラスタライズは無く、 CSGのシーンからコンピュートシェーダーで ⽣生成したSDFを点の集合(point cloud/splat) に変換した点描でオブジェクトを表現 u  ハイブリッドではない、真の次世代ゲームグ ラフィックスレンダリングを実現

Slide 38

Slide 38 text

『ゲームアプリの数学』番外編 u 真の次世代ゲームグラフィックスレンダリングっ て何? u ポリゴン\(^o^)/オワタ…なのか? u 『ゲームアプリの数学』読んで⼀一⽣生懸命3Dとか ポリゴンメッシュとか勉強したのにどうしてくれ るんですか u 1995-2020、4半世紀。思えば短い命だったラス タライザー

Slide 39

Slide 39 text

『ゲームアプリの数学』番外編 u ⼤大丈夫だ、問題ない u コンソールでポリゴンが無くなるのは相当先 u モバイルでポリゴンが無くなるのはさらに先 u ラスタライザーが死んでも数学は死なない u ゲームエンジンが⾝身代わりになってくれる u きっと未来は明るい – 2020年年のトレンドは?

Slide 40

Slide 40 text

2020年年のゲーム開発者 u CPUとGPUの融合 - ソフト ウェアレンダリングへの回帰 u ハードウェア性能の向上ほどに はゲームの予算はスケールしな いので⽣生産性向上は重要な課題 u ⽣生産性を上げるためには性能を 犠牲にするべき THE END OF THE GPU ROADMAP Tim Sweeney, HPG 2009

Slide 41

Slide 41 text

2020年年のゲーム開発者 u ⽣生産性向上の鍵 – アルゴリズ ムによる⼿手続き⽣生成 u PS4タイトル”No Man’s Sky”は、無数の惑星を全て⾃自 動⽣生成 u 棲息する⽣生物はSuperformula と呼ばれる曲線の数式を元に ⽣生成する No Man’s Sky Hello Games, 2016 Wikipedia: Superformula

Slide 42

Slide 42 text

2020年年のゲーム開発者 u  ⼤大域照明や流流体物理理といった重 い挙動を、限られたシーン内な がら機械学習でそれらしく真似 られるようになる u  特徴ベクトルを既存の⽅方程式を 使って最適にデザインしている のもそのうちディープラーニン グで不不要になるかも Global Illumination with Radiance Regression Functions, 2013 Data-driven Fluid Simulations using Regression Forests, 2015 u アルゴリズムなんて造れない? なら 機械にやらせればいいじゃない

Slide 43

Slide 43 text

2020年年のゲーム開発者 u そのころモバイルでは… u iPhone 1発売の翌年年2008年年に、Appleは iPhoneを挿して使うVR HMDを特許出願 し、2015年年に特許取得している Apple wins patent for a head-mounted iPhone virtual reality display u 2018年年のiPhone 8ではVRに適したOLEDが採⽤用されるらしい u 2010年年のiPhone 4から2015年年のiPhone 6sは浮動⼩小数点演算 性能(FLOPS)では30倍の開きがあり、2015-2020年年でもそれく らい伸びるかも u モバイルでもコンピュートシェーダー活⽤用の機運が⾼高まる!

Slide 44

Slide 44 text

結び u 「それさえ頭に⼊入れておけば知の世界を⾃自由 に渉猟できるような明快な地図が描きたかっ た」(浅⽥田彰、2013) u 海外の映画や⾳音楽を楽しむために英語を学ぶ ように、あなた⾃自⾝身がゲームの世界を真に楽 しむために数学の⾔言葉葉を学んではいかがか

Slide 45

Slide 45 text

Thank You 2016年年も何卒よろしくお願い申し上げます