Forward RenderingとDeferred Renderingの特徴
シェーダー・グラフィックス周りを調べているとたまに目にするForward RenderingやDeferred Renderingって何?という方向けに、それぞれの技術の中身と特徴をざっくりと書いていこうと思います。
前置き
『Forward < Deferred』 と思われることがありますが、描画するシーン情報であったり、ライトの処理の仕方等によってどっちが適しているかは変わるのでそれぞれの手法のメリット・デメリットを理解して実装するのがベストです。
Forward・Deferredの他にも、TileBased RenderingやClustered Rendering等さまざまなレンダリング手法がありますが今回は取り扱いません。(GDCやCEDEC等で、さまざまなレンダリング手法に関する講演のpdfが公開されていますので詳しく知りたい方はそちらを見てみてください)
GDC - https://www.gdcvault.com
CEDEC - https://cedil.cesa.or.jp
Forward Rendering
描画するオブジェクトごとにライティング・シェーディング等の計算をして描画する手法です。特にこれといった工夫をせずに描画する手法がForward Renderingです。
描画するオブジェクトの数or光源の数が一定数以下の時にDeferredよりも最適な手法です。
Deferred Rendering
G-Buffer(GeometryBuffer)と呼ばれるオブジェクトのシーン情報を格納したBufferを作成し、後からそのG-Bufferに対してライティング・シェーディング等の計算をして描画する手法です。半透明オブジェクトを扱うのが難しくなったりします。
G-Buffer : 左から色(Color)・法線(Normal)・座標(Position)
G-Bufferを作成するPixelShader
このようにマルチレンダーターゲット等を使ってG-Bufferを作成し、ライティング等の処理を遅延させることからDeferred(遅延) Renderingと呼ばれます。
今回はG-Bufferの座標情報をxyz全て格納してますが、z軸の情報のみを格納し2パス目の情報を復元する際にビュープロジェクションの逆行列をかけてやることでxy軸の情報を復元するといったG-Bufferの圧縮に関する手法もいくつかありますので、もしメモリを節約したいという方がいましたら「G-Bufferの圧縮」でググってみてください。
ポイントライトを3つ置いてみました。
美しいですね!
最後までお読みいただきありがとうございました。
次のレンダリング周りの記事を書く時はTile-Based Renderingについて書くつもりですので是非読んでみてください!
大乱闘スマッシュブラザーズSPECIALをひたすらに褒める
今回は大乱闘スマッシュブラザーズ SPECIALを無限に褒めまくる記事になります。
前置きはあっさりでさっそく褒めていきましょう!
キャラクター数が半端ない!& 豪華すぎる!
スマブラシリーズ史上最多で、その数なんと圧巻の『80体』である。(デフォルト 74体 + DLC 6体)
日本の格闘ゲームを担っているストリートファイターⅤでさえ40体、鉄拳7でさえ49体なので約2倍もキャラの選択肢があるのです!もはやこれだけ多いと全てのキャラを操作したことのあるプレイヤーがどのくらいいるのか気になりますね。
これだけ多ければそりゃバグだって少しはあるよね!
そしてキャラクターの数が多いだけじゃなく、顔ぶれも豪華すぎます!昔からいる懐かしのキャラから最新のナンバリングタイトルの主人公までキャラの幅の広さたるや恐ろしいですね...
スマブラというゲームを知らない人が↑の画像を見たらコラ画像かと疑ってもおかしくないですよね(笑)
キャラクターのバランス調整が神がかっている...
格闘ゲームシステムの性質上、キャラクターごとのバランス調整はとてもシビアなものです。さらに言えば、キャラの数が多くなればなるほど必然的にバランス調整はより難しくなります。なので確率的には80体もいれば強キャラが1、2体は生まれることは仕方ないですよね。
と思ったら、なにこの神調整...
公式大会などを見ても、上位に入賞するキャラクターの顔ぶれは被ることなく分散しているのでどういう基準で調整すればここまで上手く調整することができるのか知りたいものです。『スマブラSPにおけるバランス調整の鉄則』なんてタイトルで本を出したら一儲けできそうですよね(笑)
グラフィックスが美しすぎる
今までのスマブラシリーズでも十分に美しいグラフィックの作品はありましたが、今作はPBR(物理ベースレンダリング)等を積極的に採用しており、グラフィックのレベルがさらに上がっていることが伺えます。
ゲーム画面が美しすぎてブログが映えてしまいますね。
CEDEC2019の講演にてスマブラのグラフィック開発について超詳しく細かく説明してくださっているので、ゲームを作っている方々はぜひ目を通してみてほしいです。
個人的には、80体のキャラ、100以上のステージ、スピリッツやアイテムその他もろもろを開発していることを想像するだけで頭が痛くなります...
はぐれメタルがかわいいですね。
ついでにジョーカーの後ろ姿もかわいいですね。
日本ゲーム大賞を独占!
1年間を通して大きな実績・業績を残したゲームが表彰される、日本ゲーム大賞2019でなんと大賞を含む、『5冠』を獲得しているのである!これはゲーム業界の歴史上に残ること間違いなしの偉業なのです。
累計売上本数は1571万本にも達する、世界を代表する神ゲーなのです。
ちなみに中の人は、スマブラSPが大賞を獲得したときの桜井政博さんのコメントをリアルタイムで聞いてて号泣してました(笑)
ボリュームがとてつもなく大きい...
スマブラSECIALには灯火の星というボリューム満点のストーリーモードがあったり、自分だけのオリジナルステージを作ることができたり、1000以上ものスピリッツがあったり、800以上の楽曲が収録されてたり、と挙げればきりのないくらいにはボリュームが大きいゲームとなっている。
全ての要素を遊びきるには一体どれだけ時間がかかるんでしょうか。
これいる?みたいな要素もある気がしm
もし、まだスマブラSP買ってないよって方がいましたら今すぐゲームショップへ向かいましょう!Amazonやメルカリでも大丈夫です!
最後までお読みいただきありがとうございました。
どの要素を遊んでも楽しいゲームですのでぜひ遊んでみてください。
Shaderの種類と役割
シェーダーを触りたいけど何から勉強すればいいのか分からない・シェーダーを少し触ったことがあるけどまだ理解が曖昧という方向けに、VertexShader・PixelShader等それぞれのシェーダーの特徴とできることをなるべく簡潔に説明していこうと思います。
シェーダーの種類
VertexShader・TessellationShader・GeometryShader・PixelShader・ComputeShaderの5つのシェーダーを今回は紹介します。レンダリングパイプライン(Shaderの通る流れ)の解説は別の記事でしようと思います。
MeshShader等、上記以外にもいろんなシェーダーがあると思いますが今回は割愛させてもらいます...!
それぞれのシェーダーの役割
・VertexShader
頂点単位で加工するシェーダーです。
入力頂点データを座標変換することが基本的な役割になります。
光源や陰影の処理をすることもできます。(←PixelShaderが担当することが多いです)
・TessellationShader
ほぼテッセレーション専用のシェーダーです。
テッセレーションはポリゴンを動的に分割する技術です。
今回はHullShader・Tessellator・DomainShaderの3つを総称してTessellationShaderと紹介させてもらいます。(ややこしいシェーダーなのでまた今度詳しく説明します)
・GeometryShader
複数の頂点ごとに加工するシェーダーです。
基本的には3頂点ごとの三角形のポリゴン(プリミティブ)を加工します。
頂点数の増減・プリミティブの種類を変更・ポイントスプライトの生成等、プリミティブに対するさまざまなアプローチができます。
・PixelShader
ピクセル単位で加工するシェーダーです。
光源や陰影の処理・ポストエフェクト(後処理)・テクスチャを参照しバンプマッピング等、ピクセルに対するさまざまなアプローチができます。
フラグメントシェーダーと呼ばれることもあります。
・ComputeShader
計算・演算を得意とするシェーダーです。
シェーダーという名がついていますが、他のシェーダーと違ってレンダリングパイプラインとは別に独立しており、超高速にさまざまな汎用計算をすることが可能です。
かなり特殊な奴で仲間外れにされがちです。
シェーダーのおすすめ勉強順
はじめにPixelShaderで光源や陰影の処理をして遊ぶのがいいかと思います。
PixelShaderの流れを理解できれば、おのずとVertexShader・GeometryShaderの流れや扱い方も理解できると思います。
TessellationShader・ComputeShaderはややこしい部類なので後回しで大丈夫です。
結局のところ楽しみながら勉強をするのが一番効率が良いので、実装してみたい技術等を見つけたら上記の内容は無視していただいて大丈夫です。
やりたいことをやりましょう!
最後までお読みいただきありがとうございました。
初投稿なので書き方の練習ついでに自己紹介
中の人のプロフィールに興味のある人はあまりいないと思うのでかなりざっくり紹介させてもらいます。
自己紹介
年齢 : 20代
性別 : 男
職種 : ゲームプログラマー (シェーダー・グラフィックス系)
好きなゲーム : アクションゲーム・音楽ゲーム
好きな芸能人 : 橋本環奈・日向坂46
というかんじのまだまだ未熟なゲームプログラマーです。なので技術系の記事を投稿した際に、間違っている知識・情報を記載してしまうことがあるかもしれませんが、優しく指摘していただけると嬉しいです。(なるべく誤報の無いように気を付けます...!)
記事の方針・方向性
とりあえずしばらくは書きたいことを書いていくつもりです。
ゲーム開発の技術解説・既存ゲームをクリエイター目線で解説・おすすめの技術書籍紹介・最新のゲームをただただ遊んでレビュー等、いろいろ書いていくつもりです。
なるべく見てくださる方々の興味のある記事を書きたいので、○○に今興味があります・○○について書いてほしい等のコメントをしていただけると中の人が幸せになります。
最後に
3日に1回ぐらいのペースで記事を書こうと思っています。
Twitterもやっています。記事を書いたらツイートするのでフォローしていただけるとありがたいです。
https://twitter.com/heibon_memo
最後までお読みいただきありがとうございました。
まだまだブログ初心者ですが、これから頑張りますのでよろしくお願いします!