2004-04-30

モーションブラー モーションブラー - Nao_uの日記 を含むブックマーク はてなブックマーク - モーションブラー - Nao_uの日記 モーションブラー - Nao_uの日記 のブックマークコメント

http://www.daionet.gr.jp/~masa/cgi-bin/MiniBBS/minibbs.cgi

4月30日(金)より

まぁ実際には、モーションブラーはマルチサンプルではなく

速度ベクトルを利用したポストプロセスにする方が

現実的でしょうが…。

確かにそっちの方がいいのかも。どうやって実装しよう?

αに符号付4ビットで入れておく、とか?

Dr.森川の人間風車 #750 997円 Dr.森川の人間風車 #750 997円 - Nao_uの日記 を含むブックマーク はてなブックマーク - Dr.森川の人間風車 #750 997円 - Nao_uの日記 Dr.森川の人間風車 #750 997円 - Nao_uの日記 のブックマークコメント

http://www.muumuu.com/members/morikawa/0750.htm

「俺のことをどう思ってもかまわない。

だまって今言ったことをやってくれ。」

相手の返事を聞く前に電話をがちゃん!

ロード・オブ・ザ・リング1』だったかのメイキングで、

監督のピーター・ジャクソンスタッフ

「依頼」したときのシーンだ。

プログラマーは、最初にメモリー設計をきちんとする。

ゲーム機は演算速度もROM容量も大きいのに、

もっとも肝心なメモリー容量が極端に小さい、いびつなマシンだ。

だから、一時材料保管所であるRAMに、

何をいつどのくらい置いておくかの

設計をきちんとしなくてはならない。

なので、最初にあるいは最初っからその作業に入る。

一方、アイデアっていうのは、

(作る前の)机上の計算ではどうしても限界がある。

いじってみてはじめて、

おもったようにおもしろくならない、

予想外におもしろい、

そうしたことの連続である上に、

やってみてはじめて生まれるアイデアも多い。

おまけにたいがい、こうした後発のアイデアのほうが良質だ。

このプログラム作業の手順とアイデアの生まれるタイミングが、

すこぶる相性が悪い。

出てくるアイデアを全て組み込んでいけば、

まずゲームは完成しない。

時間とお金がかかる上に、バグの温床になる。

おまけに人間関係も悪くなる(笑)

逆に、後発のアイデアを全て捨ててしまうと、

机上のデザイン以上のモノはできない。

いつもいつも悩むところだ。

そしてピーター・ジャクソンのことを思い出し、

ときに実行してしまう。

(電話をする勇気はないので、みんなが寝静まった頃を見計らって、

メーリングリストにメールを出し、メーラーを落とす!)

現在落書き帳には、

誰にも見せていないアイデアが3つばかし描かれている。

すでにメモリー設計は完了している。

でも、どのアイデアも好きだ(当たり前か)。

なんで今まで出てきてくれなかったのかを呪う。

でも、絶対いれるべし!ってほど重要なアイデアでもない。

どうしようか。

ゲーム理論的解決をもとめようか。


NVIDIA社、法線マップのミップマップ問題の対処案を示した資料を公開 NVIDIA社、法線マップのミップマップ問題の対処案を示した資料を公開 - Nao_uの日記 を含むブックマーク はてなブックマーク - NVIDIA社、法線マップのミップマップ問題の対処案を示した資料を公開 - Nao_uの日記 NVIDIA社、法線マップのミップマップ問題の対処案を示した資料を公開 - Nao_uの日記 のブックマークコメント

http://spin.s2c.ne.jp/

 NVIDIA社の開発者向けサイトのこちらで、同社のMichael Toksvig氏による文書「Mipmapping Normal Maps」が公開されました。これは、Blinn-Phongモデルの式を使ったピクセルシェーダでの鏡面反射光の計算における、法線マップに対するアンチエイリアス処理の問題について一つの対処案を示したものです。実際の効果は大きくないかもしれませんが、興味深いアイディアが盛り込まれています。

 法線マップのテクスチャフェッチにおいてアンチエイリアシングのためにミップマップフィルタを適用する場合、ミップマップレベルが大きい(解像度が粗い)部分では、細かい法線ベクトルの変化の情報が反映されない問題があります。この細かい法線ベクトルの変化の情報を鏡面反射光の計算において補おう、というのがこの文書の意図と考えられます。大雑把に言って、「法線ベクトルの変化の幅が大きい部分では、スペキュラパワーを小さくし(ハイライトを鈍くする)、鏡面反射率を低くする」といった対処になります。法線ベクトルの変化の幅(ばらつき、分散)の情報は、法線マップ内の「法線ベクトルの大きさ」に持たせます。(圧縮表現と言えるかもしれません) この情報を考慮した鏡面反射光の計算は、あらかじめ用意したテーブルテクスチャを使います。法線ベクトルの大きさの2乗(ノルム)と、法線ベクトルと2等分ベクトルの内積をテクスチャ座標として、このテーブルテクスチャにアクセスし、鏡面反射光の強さを得ます。実行時の処理は内積と2Dテクスチャアクセス程度なので、処理コストは比較的小さい方法と言えます。この文書のポイントは、このテーブルテクスチャの内容を表わす式の導出です。法線ベクトルの分布を正規分布、Blinn-Phongの余弦のべき乗の式も正規分布の式として大まかに近似し、正規分布の式を正規分布の式で畳み込んだ式も正規分布の式になるといった知識と、エネルギー保存の法則から、簡単な数式を見つけています。

 処理の概要は次のようになるものと見られます。

【準備1】 法線マップのミップマップを用意する。各ミップマップレベルは、単純な矩形の平均フィルタによって生成する。ただし、正規化はしない。(平均後の法線ベクトルの大きさの情報が、法線マップに残ることになる。平均法線ベクトルが短いほど、平均を取った範囲内での法線ベクトルのばらつき(分散)が大きいと考える)

【準備2】 鏡面反射光計算テーブルとなる2Dテクスチャを用意する。テクスチャの内容は次の式のTexel(u,v)とする。sは、スペキュラパワーとする。

float f = sqrt(v) / ( sqrt(v) + s*(1-sqrt(v)) );

Texel(u,v) = ( (1+f*s)/(1+s) ) * pow( u/sqrt(v), f*s );

【実行時のピクセルシェーダの処理】 法線マップから法線ベクトルNをミップマップフィルタを有効にしてサンプリングし、光源の方向ベクトルと視線ベクトルの2等分ベクトルHを計算。さらに、2Dテクスチャ座標( dot(N,H), dot(N,N) )で、テーブルテクスチャをサンプリングし、鏡面反射光の強さとする。

(Date: 2004-4-28)