2012年03月29日

G-bufferと等高線の描画

Hardware-Accelerated Global Illumination by Image Space Photon Mappingというものがありましたので、少し試してみようかなと考えています。

http://www.youtube.com/watch?v=GckOkpeJ3BY

論文を読んでいるとG-bufferというものがでてきました。遅延シェーディングに使うバッファのことみたいですね。

[1] "Comprehensible rendering of 3-d shapes"
[2] http://d.hatena.ne.jp/hanecci/20100102
[3] http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20101208

[1]の論文の中に、等高線の表示があったので脱線して試してみました。
3.4のハッチングも試してみたかったのですが、良くわかりませんでした。

実行結果

G-bufferとして鏡面反射色、テクスチャ色、深度値、UV値、法線ベクトルをFBOに出力しました。背景が白なのでその部分は気にしないでください。

contour_specular.png contour_texture.png contour_depth.png contour_uv.png contour_normal.png

深度値のSobelエッジ×UV値の等高線×(鏡面反射色+テクスチャ色)の結果が次のようになります。

contour_001.png

U値で縦の等高線、V値で横の等高線が出てきます。
式は[1]の(7)〜(14)まで使用しました。

引続き脱線して、次も遅延レンダリングで何か試してみたいと思います。
web拍手 by FC2
posted by シンドラー at 22:44 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2012年03月14日

バンプマッピングのテスト

バンプマッピングを試してみることにしました。
テクスチャと接線、従法線の関係がいまいちよく分かりません。

手順
1. モデルを読込む
2. 適当に法線ベクトルから接線ベクトルを生成する
3. モデルのテクスチャ画像をグレースケールに変換する
4. グレースケールに変換したものを高さマップと考えて3x3のSobelフィルタでdu, dv, nを計算[1]
5. 接線情報をGPUに渡してバンプマッピング[2][3]
6. おまけでブルーム効果

実行結果

下記動画のモデルを使用させていただきました。



テクスチャにSobelフィルタを掛けて法線ベクトルを計算して0.0~1.0の間に変換して保存したものが下記のものです。
GIMPでノーマルマップ生成でSobel3x3を選んだ時と大体同じ感じになると思います。

bumptex.png

強めにしているのでノイズが入っていますね。まぁそれも模様ということで。

実行結果

左が通常のレンダリング、右が上の手順でレンダリングしたものです。サイズが小さいと全然違いがわかりませんね。

 

接線の計算が怪しいのでもう少し調べた方が良さそうです。

参考サイト
[1] http://www.t-pot.com/program/71_wave/index.html
[2] http://www.arakin.dyndns.org/glsl_bump.php
[3] http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20051014
[4] http://marupeke296.com/DXPS_No12_CalcTangentVectorSpace.html
web拍手 by FC2
posted by シンドラー at 20:27 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2012年03月06日

HDR画像のトーンマッピングについて その3

HDRレンダリングについて下記サイトの041〜051まで読みました。
http://news.mynavi.jp/column/graphics/041/index.html

ブルーム効果というものを試してみました。
http://news.mynavi.jp/column/graphics/050/index.html
MMEでいうところのAuto Luminousのような感じでしょうか。

本来はシェーダ側で全部やる気がしますが、手抜きでOpenCVを使用しています。
そんなわけで今回のはリアルタイムでは動いていません。

手順
1. HDRテクスチャを使ってFBOにレンダリング
2. 閾値より明るい画素の画像を生成
4. OpenCVのcvResizeとcvSmoothを使用してブルーム画像を作成
5. 結果を加算してからトーンマッピング

注意点?として、FBOにレンダリングしてその結果を取得した場合はfloat型でデータを取得できますが、glReadPixelsを使用した場合は、型にGL_FLOATを指定しても0.0〜1.0の間に切り詰められてしまうようです。

実行結果

ブルーム画像(左)と実行結果(右)

blumeImage.png hdr_blume_001.png

1/2, 1/4, 1/8, 1/16, 1/32の5枚の縮小画像を作成し、cvSmoothでぼかしてcvResizeで元の大きさに戻してcvAddで加算したものが左の画像です。
もっと広範囲にぼかした方がよさそうですね。



本来は閾値ではなく平均輝度などからブルームに使用する画素を決定するようですので、その辺りの影響かトーンマッピングの影響かはわかりませんが、角度によって明るさが変わってしまっています。

web拍手 by FC2
posted by シンドラー at 23:42 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2012年03月05日

HDR画像のトーンマッピングについて その2

PMDファイルのテクスチャにHDR画像を使用してみました。
.sph, .spaのファイルがある場合に、HDR画像に置き換えただけです。

HDR画像は下記サイトものを使用させていただきました。

http://unparent.com/photos_probes.html

スフィアマップHDR画像

probe_orig.png probe_tone.png

HDR画像(左)とトーンマッピング画像(右)です。サイズは縮小してあります。

実行結果

   通常の画像     HDR画像     トーンマッピング

non_hdr_001.png hdr_001.png hdr_tone_001.png



トーンマッピング後は通常のLDR画像ですが、HDR画像を使った場合とあまり変わらない気がしますね。

web拍手 by FC2
posted by シンドラー at 00:20 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2012年03月04日

HDR画像のトーンマッピングについて

最近はHigh Dynamic Range(HDR)画像を使ったImage based lightingなどが使われているようですので、ちょっと試してみることにしました。
HDR画像というのは基本float型でRGB値を持っており、普通は0〜1の範囲ですが明るい部分は1.0を軽く超えるような画像です。

HDR画像の読込みには[1]のソースコードを、サンプル画像は[2]のサイトのものを使用させていただいております。
何か問題がありましたらお知らせください。

今回は、HDR画像を見やすくするためのトーンマッピングを試してみました[3]。
参考サイトの通りにやったわけではないからかどうかわかりませんが、[2]のページの結果とは異なっているようです(赤色が強い?)。

[4]では輝度Lの計算がL=0.27R+0.67G+0.06Bで一般的なYCrCb変換式の係数と異なっているのでその辺りの影響かもしれません。

実行結果

0〜255で255を超えたものは255にした画像(左)とトーンマッピングを用いたもの(右)

cathedral_orig.png cathedral_tone.png

フォトンマッピングで計算した結果などもこういった処理をした方がいいんでしょうかね。

参考サイト
[1] http://www.graphics.cornell.edu/~bjw/rgbe.html
[2] http://www.anyhere.com/gward/hdrenc/pages/originals.html
[3] http://www.t-pot.com/program/123_ToneMapping/index.html
[4] http://msdn.microsoft.com/ja-jp/library/bb173486%28v=VS.85%29.aspx
web拍手 by FC2
posted by シンドラー at 02:47 | Comment(0) | TrackBack(0) | Image Processing | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。