Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゲームグラフィックスなんもわからんから脱却しよう
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kutani Mio
February 15, 2020
Programming
6.9k
11
Share
ゲームグラフィックスなんもわからんから脱却しよう
Event for Diverse Game Engineers #5 で登壇した内容となります。
3Dゲームグラフィックスを学ぶのに足掛かり
Kutani Mio
February 15, 2020
More Decks by Kutani Mio
See All by Kutani Mio
Unity6で登場!Multiplayer Centerで捗る、オンラインゲーム開発
rossam
0
490
Understanding vtable And Unity’s Memory Layout
rossam
0
380
Unity+C#で学ぶ! メモリレイアウトとvtableのすゝめ 〜動的ポリモーフィズムを実現する仕組み〜
rossam
1
1.1k
GameAIとは.pdf
rossam
0
470
Jenkins自動化入門〜事例を添えて〜
rossam
1
870
基礎から学ぶ!UE4でC++を交えたAI開発、興味ないですか?
rossam
4
2.1k
C#8.0という未来を垣間見る話
rossam
0
1.6k
視て、わかる!C#7.1までの言語機能
rossam
5
5.2k
レポート「2017 Breakthroughs In Spatial Audio Technologies 」
rossam
0
540
Other Decks in Programming
See All in Programming
RTSPクライアントを自作してみた話
simotin13
0
220
Modding RubyKaigi for Myself
yui_knk
0
480
TSKaigi 2026 TypeScriptバックエンドのオブザーバビリティ戦略 — Datadog × NestJSの実践
taiseiyamamotoan
1
200
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
610
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
2.8k
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
2.2k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
320
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
390
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
310
iOS26時代の新規アプリ開発
yuukiw00w
0
200
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
9
2.6k
Featured
See All Featured
Crafting Experiences
bethany
1
160
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
240
Navigating Weather and Climate Data
rabernat
0
200
HDC tutorial
michielstock
2
680
Building an army of robots
kneath
306
46k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
940
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
190
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
340
Agile that works and the tools we love
rasmusluckow
331
21k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
230
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
から脱却しよう 2020/2/15 Event for Diverse Game Engineers #5 九谷 美生(ろっさむ) なんもわからん…
はじめに
今回のセッションの目標 今までグラフィックス周り ほぼ触ったことがなく 用語も知識も としたことしか知らない 素人エンジニアが この本→ を読みたくなる最低限の知識を 得るのが本日のゴールです。 ;Θͬ
自己紹介 ろっさむ と申します。 Twitter:@4_mio_11 2018.3 -〜MSMVP(VSDT)系最弱イーブイ ギターとかUE4とかC#とかゲームAIが好きです
本日のお品書き マテリアル と テクスチャ ラフネス、メタリック、エミッシブカラー、 ノーマル、PBR、ハイトマップ、視差マップ 基本のき 直交座標系、sRGB、 リニア空間、ガンマ空間 レンダリング
パイプライン 頂点シェーダ、テッセレーションシェーダ、 ジオメトリシェーダ、 ラスタライザ、ピクセルシェーダ 昔話 DirectX、プログラマブルシェーダ
レンダリング パイプライン なんもわからん…
昔々 「DirectX」という サウンド、グラフィックス、ネットワーク、 ゲームコントローラーなどの マルチメディア処理用APIの集合体が生まれました。 時代と共にGPUが進化し、 それに伴って新しい機能もたくさん生まれ、 DirectX側もそのためのAPIをたくさん用意しました。 DirectX 7まではハードウェア側で
この予め用意されていた固定機能を使って 描画する方法がとられていました。
レンダリングパイプラインとは 描画用の 固定機能 実際にデータを描画するまでの過程部分を レンダリングパイプラインと言います。 (別名:グラフィックスパイプライン) 3Dオブジェクト
レンダリングパイプラインのざっくり中身(1) 中身的にはこんな感じです。 CPU側で モデル構築と配置 頂点シェーダ ・頂点単位の座標変換処理を シェーダプログラムに従って行う ・頂点単位のライティング処理 ・テクスチャを どこに貼り付けるかの座標計算
頂点色や ピクセル色を 変化させるもの という意味
レンダリングパイプラインのざっくり中身(2) 中身的にはこんな感じです。 ワールド座標から カメラ座標へ変換 視界から外れた モデルのポリゴンを破棄 クリッピング処理 陰面処理
レンダリングパイプラインのざっくり中身(3) 中身的にはこんな感じです。 頂点シェーダで 出た計算結果を ピクセル単位に設定 そのポリゴンがどの ピクセルを埋めるか判断 ラスタライズ処理 Unity道場2019 2月
https://www.youtube.com/watch?v=wUx_Y9BgC7k
レンダリングパイプラインのざっくり中身(4) 中身的にはこんな感じです。 ・ピクセル単位での陰影処理を シェーダプログラムに従って行う ・テクスチャの適用 ・ベクトルテクスチャを用いて 材質表現を実現したり… ピクセルシェーダ UE4 Starter
Contents M_CobbleStone_Pebble
レンダリングパイプラインのざっくり中身(5) 書き込んで良いピクセルかを検証 ・「アルファテスト」で ピクセル色が完全に透明かどうか確認 →透明ならピクセル描画破棄 ・「ステンシルテスト」で 設定した条件にパスできないピクセルを破棄 (画面の一部くり抜きなどに応用される) ・「深度テスト」で
視点からきちんと見えるピクセルかどうか確認
レンダリングパイプラインのざっくり中身(6) 出力!
RE:昔々 「DirectX」という サウンド、グラフィックス、ネットワーク、 ゲームコントローラーなどの マルチメディア処理用APIの集合体が生まれました。 時代と共にGPUが進化し、 それに伴って新しい機能もたくさん生まれ、 DirectX側もそのためのAPIをたくさん用意しました。 DirectX 7まではハードウェア側で
この予め用意されていた固定機能を使って 描画する方法がとられていました。
APIの肥大化 描画用の 固定機能 3Dオブジェクト しかしせっかく用意したAPIが使われずに化石化したり GPUの進化にDirectXが 追いつけなくなっていきました。
プログラマブルシェーダとは 描画処理(シェーダ)をユーザー側で カスタマイズできるように したらいいのでは? シェーダをプログラムできるという概念 「プログラマブルシェーダ」が誕生 これはDirectX 8からサポートされるように
プログラマブルシェーダ登場 頂点シェーダ ピクセルシェーダ と に対して オリジナルのシェーダプログラムを 実装できるようになった! また、DirectX 11では新たに以下が追加 ハルシェーダ
、テッセレータ、 ドメインシェーダ、ジオメトリシェーダ 今回は 解説せず
ジオメトリシェーダ 頂点シェーダとカメラ座標変換の間に 処理が増えました ジオメトリシェーダ シェーダプログラムに従って 頂点の増減を行う。 (地面に草はやしたり キャラクターに毛をはやしたり) 頂点 シェーダ
カメラ座標 へ 変換
マテリアルと テクスチャ なんもわからん…
直行座標系 座標系(Coordinate System)は原点と 軸(x,y,z)を持った、 位置や方向を表すための仕組み。 直行座標系は 軸同士が直角に交わっている座標系。 ゲームではこの直交座標系がよく用いられています。 直交座標系には右手系と左手系があります。 さらにY
アップ、Zアップも…。 (これは皆さんご存知のとおりかと…)
マテリアルとは ゲームエンジンでよく見かけるマテリアル その正体とは… メッシュに対して凹凸があるような質感をつけたり 光のつき方などで材質が異なるように見せる ハイテク機能!(水溜りとか雪とかも作れる!)
マテリアルを構成する要素 今回はUE4のマテリアルノードで確認しますが 基本は変わらない!はず!
ベースカラー マテリアル(適用するオブジェクト)自体の 光が入ってない状態の色や テクスチャを決める項目。 入力値はRGBの3チャンネル。
メタリック 金属っぽさを設定する項目 金属っぽさが高いと 反射率が高く、 映り込みにそのオブジェクトの色がつくことが あるという特徴がある。
ラフネス 表面の粗さを設定する項目。 ツルツルだとよく反射する。 スペキュラも反射の調整項目 だけど 基本ラフネスを使用。 ラフネスの値をコントロールすると、使用感を出せたりする。
エミッシブカラー 自己発色する色を設定する項目。 1より大きい値にすることで発光させることができる。 ライティングの影響を受けなくなる。
テクスチャにも種類があるんだよ ベースカラー、メタリック、ラフネス が主に使用する項目です。 でもこの項目だけじゃ リアリティのある岩とか水とか作れないですよね? 次は使用するテクスチャは どういったものになるのか見ていきます。
ベースカラーに繋げるのと同様、 マテリアル自体の見た目を決めるのは ベースカラーマップ。末尾に”_b”がついてる(UE4) ラフネスやメタリックの情報(数値)を テクスチャのRGBのチャンネルに入れているマスクマップ。 Rチャンネルにラフネスマップ、Bチャンネルにメタリックマップ、 Gチャンネルは基本使用しません。 こういったテクスチャの使い方は メモリの節約になるためゲーム開発でよく使われます。 末尾に”_m”がついてる(UE4)
ベースカラーマップとマスクマップ
ノーマルマップ(別名:法線マップ) ハイポリゴンモデルが持つ凹凸の情報を画像に保存したもの。 このマップを使用すると表面に詳細な凹凸があるように 疑似的に見せれます。バンプマッピングの一種。 RGB色がそれぞれXYZ方向に対応しています (基本的にRとGで凹凸表現をしてます)。 末尾に”_n”がついてる(UE4)
マテリアルの質感計算手法 ベースカラー ラフネス メタリック ベースカラーマップ マスクマップ ノーマルマップ PBR! これらを組み合わせて
PBRとは? 物理ベースレンダリング(Physically Based Rendering) と呼ばれる 現実世界の物理的に正しい値を使って、リッチな質感を作る 手法のことです。 ハイエンドゲームとかでよく使われています。 現実世界の一般的な物体の質感は ラフネス(粗さ)とメタリック(金属っぽさ)の
2つの要素で数値化が可能という基礎理論があります。 (ただし全て再現できるとは言っていない)
ここで注意が必要 PBRの計算は線形空間(リニアスペース)レンダリングで 行われています。 そのため、使用するテクスチャをリニア空間のデータとして 読み込む必要があります。 … リニア空間ってなんでしょう?
リニア空間、ガンマ空間 ベースカラーやエミッシブカラーに接続するカラーのテクスチャデータは sRGB(国際標準規格:モニタなどの殆どの機器が対応している)の カラー空間(RGB、CMYKなど)データであると設定します。 モニタにはデータを人間が見やすいようにする機能があり、 それがガンマ補正といわれています。 このガンマ補正が行われているテクスチャデータは 「ガンマ空間」のデータとなります。 PCのための計算用のデータは「リニア空間」で、 黒-白のグラデーションをさせると一定数増加していますが
人間の目からは見づらいです。
データの設定にはご注意を 人間の目からは見やすくても PCの計算で扱うにはガンマ空間のデータだと 正しいライティング結果を得ることができません。 本来の値より暗くなるなど、 思ったようなレンダリング結果が得られなくなります。 ご注意を!
データの設定にはご注意を これでリアルな質感を持ったマテリアルが作れる! いやいや、もう一歩だけ進んでみましょう。 実はノーマルマップだけだと近づいた時や 逆光に弱いという弱点があります。 こうして見るとなんだかのっぺりしています。 「マテリアル入門」 より https:// www.amazon.co.jp/dp/
B075R42XX2/ ref=cm_sw_r_tw_dp_U_x_ 0U4rEbADHT7VA
視差マッピング(PARALLAX MAPPING) ここで視差マッピングです。 これは疑似的に奥行き感を見せるテクニックで、 高さ情報をもとにマッピングされたテクスチャの座標をずらして 奥行きがあるように見せるものです。 ただし壁や床で使用する場合には見せ方に工夫が必要となります。 「マテリアル入門」 より https://
www.amazon.co.jp/dp/ B075R42XX2/ ref=cm_sw_r_tw_dp_U_x_ 0U4rEbADHT7VA
ハイトマップ ハイトマップとは高さマップともいわれ、 高さの情報をテクスチャデータに保存したもの。 「マテリアル入門」 より https:// www.amazon.co.jp/dp/ B075R42XX2/ ref=cm_sw_r_tw_dp_U_x_ 0U4rEbADHT7VA
最後に
最後に 3Dグラフィックス周りに関しては 計算式も絡んで難しそうに思えるかもしれませんが 興味があるならとりあえず学んでみましょう! 概念的なところを最初に掴むだけでも 世界の見え方が変わります。
ご清聴 有難うございました