萌えハッカーニュースリーダー

2025/07/06 17:06 Remaking Celeste's Lighting (2017)

出典: https://noelberry.ca/posts/celeste_lighting/
hakase
博士

ロボ子、今日のニュースはゲーム「Celeste」の照明に関する最適化の話じゃ。

roboko
ロボ子

Celeste、私もプレイしました!あの雰囲気のある照明はどのように作られているんでしょう?

hakase
博士

初期の実装では、ライトごとにメッシュを構築して描画していたらしいのじゃ。ライトの範囲内の壁面リストを作って、レイキャストで三角形を生成していたみたいじゃな。

roboko
ロボ子

メッシュですか。なんだか複雑そうですね。それだと、どんな問題があったんですか?

hakase
博士

エッジケース、バグ、それに浮動小数点精度の問題が山ほどあったらしいぞ。1年以上も使われていたのがすごい。

roboko
ロボ子

それは大変でしたね。それで、どのように改善したんですか?

hakase
博士

新しい方法では、まずライトの「スポットライト」をテクスチャに描き、影の投影を「上」に描画して、スポットライトを切り取るようにしたらしい。

roboko
ロボ子

テクスチャを使うことで、処理が軽くなるんですね。

hakase
博士

そういうことじゃ。でも、この方法だと、ライトごとにテクスチャが必要になるという問題があったのじゃ。

roboko
ロボ子

なるほど、ドローコールの回数が増えてしまうんですね。

hakase
博士

そこで、最適化として、ライトのマスクがテクスチャのすべてのチャネルを使う必要はないことに気づいたのじゃ。各ライトが単一のチャネルだけを使えば、テクスチャごとに4つのライトを描画できる。

roboko
ロボ子

それは賢い!RGBAの各チャンネルを別々のライトに使うんですね。

hakase
博士

さらに、画面解像度が小さいことに着目して、すべてのライトをゲーム内のグリッドに配置し、単一のテクスチャに配置することにしたらしい。

roboko
ロボ子

大きなテクスチャを分割して、複数のライトを配置するんですね。テクスチャアトラスみたいな感じでしょうか。

hakase
博士

その通り!2048x2048のテクスチャを使って、各ライトの最大サイズを256x256にすると、64個のグリッドスペースが使える。各ライトは1つのチャネルしか占有しないから、単一の大きなテクスチャに合計256個のライトを配置できるのじゃ。

roboko
ロボ子

すごい!テクスチャの切り替え回数を大幅に減らせますね。

hakase
博士

じゃろ?この方法だと、CPUでの作業が少なく、GPUへの影響も少ないから、メッシュ実装よりもはるかに高速になるのじゃ。ライトはゲーム内で最も高速なコードの一部になったらしいぞ。

roboko
ロボ子

最適化って本当に奥が深いですね。私も見習いたいです。

hakase
博士

ロボ子も頑張るのじゃ!そういえば、Celesteって、主人公が壁を登る時に髪がなびく表現もすごいじゃろ?あれもきっと、すごい最適化がされているに違いないぞ!

roboko
ロボ子

そうですね!今度、調べてみます。…ところで博士、今日のニュースと関係ないですけど、博士の部屋の照明、たまに点滅してますよね?

hakase
博士

…気のせいじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search