「2Dでのグレア処理」の編集履歴(バックアップ)一覧はこちら

2Dでのグレア処理」(2006/09/26 (火) 15:36:35) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*2Dでのグレア処理 **参考 -[[元ネタ>http://d.hatena.ne.jp/o_mega/20060922/1158951079]] -[[DirectXゲームグラフィックスプログラミング>http://www.amazon.co.jp/DirectX0b20fc0e00b00e90d50a30c30af0b90d70ed0b00e90df0f30b0-Ver-2-0-N2Factory/dp/4797329807]] **グレア処理とは? グレアとは「ぎらぎらする光」で、 リアルタイムに物体の明るい部分を取り出して、それを、ぴかー、と強調する処理のことです。 もともと3Dの技術ですが、それを擬似的に2Dで実装してしまおう、 というのがこのページの狙いです。 **グレア処理の手順 手順としてはこんな感じ。 +明るい部分(輝度)を抽出 +抽出した輝度を、ぼかしとか十字型のグレアにそれっぽく変形 +物体にグレアをレンダリング **2Dでのグレア処理の手順 ***輝度の抽出 3Dだとスペキュラー(強い光)をMAXにして抽出するらしいのですが、 2Dだとそんなことはできないので、白塗り画像を減算合成して取り出します。 例えば、こんな物体があったとして、 &ref(ball.png) この白塗り画像を減算合成してやると、 &ref(filter.png) こんな感じで抽出できます。 &ref(bright01.png) ***グレアに変形 今回は簡単なぼかしで。 先ほど抽出した輝度を、ランダムな座標に加算合成してやります。 &ref(bright02.png) ***レンダリング もとのボール画像と、グレアを加算合成してやれば、 ほら!ぴかー、という感じに! &ref(bright03.png) 左が元の画像、右がグレア処理したもの。 (、、まあ、元画像がいまいちなので、あんまりかっこよくないですが(´Д`; **HSPでのソース #const BALL_SIZE 64 // ボール画像のサイズ // ボール画像バッファ buffer 2 picload "ball.bmp" // 輝度フィルタ用バッファ(HSPはデフォルトで白塗り) buffer 3, BALL_SIZE, BALL_SIZE // 輝度フィルタ書き出し用バッファ buffer 4, BALL_SIZE, BALL_SIZE gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE gmode 6, BALL_SIZE, BALL_SIZE, 238 // 白塗り画像を減算合成して、 gcopy 3, 0, 0, BALL_SIZE, BALL_SIZE // 輝度抽出 gmode 5, BALL_SIZE, BALL_SIZE, 64 // ぼかし repeat 20 x = rnd(10)-5 y = rnd(10)-5 pos x, y gcopy 4, 0, 0, BALL_SIZE, BALL_SIZE loop gsel 0 i = 0 repeat redraw 0 color 0, 0, 0 boxf 0, 0, 640, 480 // 元画像(比較のために) pos 32, 128 gmode 2 gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE // グレアする画像 pos 128, 128 gmode 2 gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE i += 2 if i > 255 { i -= 255 } gmode 5, BALL_SIZE, BALL_SIZE, abs(-128+i) // グレア加算合成 gcopy 4, 0, 0, BALL_SIZE, BALL_SIZE redraw 1 wait 1 loop **課題 -元画像がいまいちだときれいなグレアになってくれない -グレア変形で、何度もイメージ転送するのが重い **感想 -2Dでも、加算・減算合成ができれば、グレア処理ができるぞ。シュゴー
*2Dでのグレア処理 **参考 -[[元ネタ>http://d.hatena.ne.jp/o_mega/20060922/1158951079]] -[[DirectXゲームグラフィックスプログラミング>http://www.amazon.co.jp/DirectX0b20fc0e00b00e90d50a30c30af0b90d70ed0b00e90df0f30b0-Ver-2-0-N2Factory/dp/4797329807]] **グレア処理とは? グレアとは「ぎらぎらする光」で、 リアルタイムに物体の明るい部分を取り出して、それを、ぴかー、と強調する処理のことです。 もともと3Dの技術ですが、それを擬似的に2Dで実装してしまおう、 というのがこのページの狙いです。 **グレア処理の手順 手順としてはこんな感じ。 +明るい部分(輝度)を抽出 +抽出した輝度を、ぼかしとか十字型のグレアにそれっぽく変形 +物体にグレアをレンダリング **2Dでのグレア処理の手順 ***輝度の抽出 3Dだとスペキュラー(強い光)をMAXにして抽出するらしいのですが、 2Dだとそんなことはできないので、白塗り画像を減算合成して取り出します。 例えば、こんな物体があったとして、 &ref(ball.png) この白塗り画像を減算合成してやると、 &ref(filter.png) こんな感じで抽出できます。 &ref(bright01.png) ***グレアに変形 今回は簡単なぼかしで。 先ほど抽出した輝度を、ランダムな座標に加算合成してやります。 &ref(bright02.png) ***レンダリング もとのボール画像と、グレアを加算合成してやれば、 ほら!ぴかー、という感じに! &ref(bright03.png) 左が元の画像、右がグレア処理したもの。 (、、まあ、元画像がいまいちなので、あんまりかっこよくないですが(´Д`; **HSPでのソース #const BALL_SIZE 64 // ボール画像のサイズ // ボール画像バッファ buffer 2 picload "ball.bmp" // 輝度フィルタ用バッファ(HSPはデフォルトで白塗り) buffer 3, BALL_SIZE, BALL_SIZE // 輝度フィルタ書き出し用バッファ buffer 4, BALL_SIZE, BALL_SIZE gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE gmode 6, BALL_SIZE, BALL_SIZE, 238 // 白塗り画像を減算合成して、 gcopy 3, 0, 0, BALL_SIZE, BALL_SIZE // 輝度抽出 gmode 5, BALL_SIZE, BALL_SIZE, 64 // ぼかし repeat 20 x = rnd(10)-5 y = rnd(10)-5 pos x, y gcopy 4, 0, 0, BALL_SIZE, BALL_SIZE loop gsel 0 i = 0 repeat redraw 0 color 0, 0, 0 boxf 0, 0, 640, 480 // 元画像(比較のために) pos 32, 128 gmode 2 gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE // グレアする画像 pos 128, 128 gmode 2 gcopy 2, 0, 0, BALL_SIZE, BALL_SIZE i += 2 if i > 255 { i -= 255 } gmode 5, BALL_SIZE, BALL_SIZE, abs(-128+i) // グレア加算合成 gcopy 4, 0, 0, BALL_SIZE, BALL_SIZE redraw 1 wait 1 loop **課題 -元画像がいまいちだときれいなグレアになってくれない -グレア変形で、何度もイメージ転送するのが重い **感想 -2Dでも、加算・減算合成ができれば、グレア処理ができるぞ。シュゴー -輝度を抽出するには、「黒塗りの画像←加算合成」しても同じことだということに気がつきました。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー