MonoGameで遅延レンダリングをする
ナビゲーションに移動
検索に移動
2020年4月時点のMonoGameではマルチプルレンダーターゲットが正常に動かない。
このためXNA時代に書かれたマルチプルレンダーターゲットを使った遅延レンダリングのサンプルプログラムをそのまま動かそうとすると残念なことになる。
概要
XNAの教科書に載っている遅延レンダリングの実装例ではマルチプルレンダーターゲットを利用して2回のドローコールで前半部分を済ませているのが一般的である。
// この2つ clear(color, normal, depth); draw(color, normal, depth); // 以降は同じ light = lighting(color, normal, depth); final = combine(light, color);
一方、MonoGameではこの部分を6回ものドローコールに分割する必要がある。
clear(color); draw(color); clear(normal); draw(normal); clear(depth); draw(depth); // 以降は同じ light = lighting(color, normal, depth); final = combine(light, color);
それでもポイントライトなどが数十から数百も存在するという状況では圧倒的にドローコールを削減できる。
実装例
後ほどgithubにアップする。