Bloom効果


マインスイーパーのボタンを点滅させたい。これは、マインスイーパーの開発を進めるのに必要と考えていました。どうやって点滅させるのか?処理の方法が判りません。コンピュータディスプレイ上でボタンを発光させる方法を探しました。その手法はBloomというそうです。

後処理のためのダブルバッファ

Bloom処理の記事をいくつか読みました。一つのイメージを生成するのにいくつかのレンダリングバッファを持たなければならないようです。

  1. 通常の要素(ボタンとボード)をレンダリング
  2. 発光する要素をレンダリング
  3. 上記を合成して、一つのゲームシーンを表示

手始めにバックバッファにシーンをレンダリングして、フロントバッファにそれをコピーすることをしてみました。この変更による不具合が出ないように注意しながらの作業です。マインスイーパーはこの変更した処理に2ヶ月前にこっそりと変えています。

Bloom効果とガウス曲線

bloom効果はローパスフィルターでのレンダリングです。発光させたい要素をまっさらなレンダリングバッファにレンダリングします。全てのが画素は、近傍の画素と混ぜることでぼかされます。一つの画素は近傍の距離に応じて重みづけされた色によって影響されます。どのような重みを選ぶのがよいか?多くの記事では、ガウス曲線を選んでいまます。ガウス曲線は、正規分布と呼ばれています。 私もガウス曲線が重みを選ぶのに合理的であると思いました。

Bloom処理をボタンに適用する

Bloom処理されたオブジェクトを合成して最終的なシーンをレンダリングしてみました。その結果は満足できるものではありませんでした。ボタンが発光しているように見えないのです。何度もいくつかのパラメータを調整してみました。でもうまくいかないのです。Blur(ぼかし)の処理について1日ほど考えました。発光するボタンをわずかに大きくレンダリングすることを思いつきました。この方法がしっくりきました。

以前よりも暗いレンダリング

満足いくBloom処理ができましたが、Bloom処理にとっては現行のマインスイーパーの光の設定は少々明るいようでした。ボタンの点滅が判りにくいのです。妻に見せたところ、”少し色を変えたんでしょ?”と言われました。うーん、がっかりです。以前のゲームの設定より、光と色を暗くしました。

初期のゲーム設定の変更

初期のゲーム設定を変更しました。ゲームオーバにならない一つ目のボタンを点滅させたいと思っていました。ゲームの最初の処理が変更になりました。

  • いきなりゲームオーバーとならないボタンを選んで開くことができる。新しいゲームロジックです。
  • 最初に開くボタンでは、ゲームオーバーにならない。どのボタンを開いてもゲームオーバーになりません。NGになるボタンは最初のボタンが開かれた後に決定される。以前のゲームロジックです。

Bloom処理のゲームをリリースする前に

新しいバージョンをリリースする前にマインスイーパーのサイトの処理を確認してみました。英語から日本語に変換できない場合があることに気づきました。これを修正するため、更なるタスクをこなす必要がありました。

  1. 翻訳処理の動作が期待したとおりにする
  2. 翻訳処理のための拡張ツールをつくる

Bloom処理のあるマインスイーパーをリリース

Bloom処理が有効になった マインスイーパーです。