ERPT 実装 : 点を画像面へ射影する。

経路の変異を実装しているのであるが、はたと気づいたことがある。 コースティクス摂動では、光源からの方向を摂動させる。 これがたとえば LDE の経路だったばあい、 摂動した方向に光源からレイを飛ばして交点を求め、その交点から 視点を繋ぎ、またその交点 – 視点間のレイが画像面のどのピクセル位置 に対応するのか求めなければならない。 まあふつーに幾何を解いていけばよいのでしょうが、 なんだか計算するの面倒ですなー、と思っていたら、 David Cline の A practical 〜 には親切御丁寧にも このための変換行列が付録に書かれていました。 こいつはグレートだぜ、、、 Cline 先生、、、すばらしすぎです、、、 という訳で、ワールド座標での点(視点から最初にヒットする点)を 画像面に射影する行列の実装は以下のようになるでしょうか。 // Create the matrix which transforms a point in world space onto // its pixel coordinate. void matrxi_project_point_onto_the_image_plane(double M[16]) { double C[16], V[16], T[16], TC[16]; vector_t eye; vcpy(&eye, &render->eyepos); memcpy(T,Continue reading “ERPT 実装 : 点を画像面へ射影する。”

ERPT 実装: エネルギー再分布ステップの枠組みと摂動ルーチン

さて、そろそろ ERPT のコアとなる部分を実装していくことにしよう。 エネルギー再分布 パストレにより、まずはデポジットする e_d が求まったはずであるので、 あとはこれをおのおのの変異した経路の対応するピクセルに加算していけばよいはずだ。 e_d はパストレの結果画像バッファから引っこ抜いてきた値を e_ave として、 変異させる回数で割れば求まる。 e_d の計算のコードはこんな感じになるだろうか。 for (j = 0; j height; j++) { for (i = 0; i width; i++) { vector_t e_ave; vector_t e_d; // get average energy of this pixel from // pass1’s path tracing result. e_ave.x = render->e_ave[3 * (i + jContinue reading “ERPT 実装: エネルギー再分布ステップの枠組みと摂動ルーチン”

ERPT 実装その1

ERPTを実装中。 とりあえずはいろいろコードを流用して saku saku っとパストレ部分を完成。 まずはディフューズ面のみ。 絵は 36 samples/pixel(=6×6 stratified sampling)。 まだまだノイズは多いですね。 ピクセルフィルタとか最適化とかまったく行っていないからこんなものでしょうか。 あとは mutation 処理と path density の計算をやれば ERPT の完成。 このまま問題なく行ければ結構簡単やも。 経路のデータ構造はこんな感じで作っておくとよいだろうか。 (ほとんど Graphics Programming Methods の MLT コードと同じだけど) /* path vertex information */ typedef struct _path_vertex_t { vector_t p; // position; vector_t indir; // Incident direction vector_t outidr; // Outgoing direction int type;Continue reading “ERPT 実装その1”

Energy Redistribution Path Tracing

David Cline, Justin Talbot and Parris K. Egbert Energy Redistribution Path Tracing ACM Transactions on Graphics (SIGGRAPH 2005 proceedings) http://rivit.cs.byu.edu/a3dg/publications.php メトロポリス光輸送(MLT)のような考え方を、 パストレーシングのコンテキストに導入した手法。 略して ERPT。 メトロポリス光輸送も経路のサンプリングのために パストレーシングなどを用いますが、 こちらはメトロポリス法の考えをパストレーシングの 中に取り込んでいます。 (論文では両者を組み合わせたハイブリッドな手法と言っています) それにより、パストレーシングの持つ利点を生かせ、 逆にメトロポリス光輸送の持つ欠点を克服することが できるようになっています。 本手法の利点は、 スタートアップバイアスがない ピクセル単位で層別化しやすい (メトロポリス光輸送は画像面で大域的に動くので、 ピクセル単位でコントロールしずらい) パストレ自体がエルゴード性を満たすので(ちょっとこれは実際のシーンでは疑問だけど…)、 MLT のように複雑な経路の変異(mutation)を行わなくてもよい。 です。 基本がパストレなので、MLT よりも実装は容易となっています。 今回じっくり論文を読み、大体しくみがわかりました。 これなら実装できそうですし、実際に正しく動くのか検証もしてみたいので、 SBR 2005 に ERPT を引っさげて本格出走します。 (まだ公開はされていない wavelet importance sampling も実装してみたいですが) Continue reading “Energy Redistribution Path Tracing”

ATI XENOS

XBOX 360 の GPU ですが、ブロック図がちょっと公開されています。 また、48 シェーダ演算器というのは、16 ピクセルパイプ相当ではなく、 真に 4 要素ベクトル演算器 が 48 本(48 ピクセルパイプ相当)が正しいとのこと。 http://fcj.s18.xrea.com:8080/modules/news/article.php?storyid=1451 http://www.firingsquad.com/features/xbox_360_interview/ ひょえー、す、すごいなぁ、、、 現在の GPU が 16 ピクセルパイプ + 6 頂点パイプぐらいですから、 優に 2 倍ですか…. ということで、48 G shader op/sec の shader op は 4 fp 演算 が正しそうです。となるとやはりシェーダ内部は 1 GHz クロックの 倍速で動いているのかな? 48 * 4 * 2(fmadd) = 384 Gflops ??? さらに、うまくプログラムすれば 1Continue reading “ATI XENOS”

PS3

PS3 もでましたね。 こ、こんどは 2Tflops ですか、、、 GPU である RSX に関しては、シェーダパイプ数は明らかに まだされていないようですが、1.8T flops の性能があるとのこと。 ひょえ~、、、ってありえねーよ。 XBOX 360 の 1 T flops もそうだけど、 やっぱり ROP での比較・ブレンドやテクスチャのフィルタリングに加えて、 ラスタライザでの頂点パラメータの補間とかも flops に入れての数字の ようです。 RSX は Geforce 6800 Ultra の二倍程度の性能だそうです。 GPGPU 関連だったかで nvidia が fmadd のシェーダで 40 – 50 Gflops の実測値を得たという スライドを見た気がします(実際 gpubench の結果もそれくらいでした)。 なので、RSX の実効値は 80 – 100 Gflops 程度と見るのが妥当でしょうか。 FF7 の技術デモ(たぶんリアルタイムだよね?)も発表で流れていたようです。Continue reading “PS3”

Digital baby

先月くらいの CG world でも紹介されていましたが、 映画「レモニースケットの世にも不幸せな物語」では、 いくつかのショットで実写とみまちがうほどの 赤ちゃん(サニー)の CG レンダリングが行われています。 http://www.panoscan.com/PanoPress/2005Press/Lemony/LemonySnicket.html サニーのレンダリングには、CG world に書いてあるように、 大域照明+サブサーフェススキャタリング+HDRI が使われています。 (放射照度キャッシュも使われたみたい) 特に、サニーの顔は、サブサーフェスの計算を行うために、 ポイントでレンダリングしたそうです。 ちなみにレンダラは PRMan のようです。 映画館で見てきましたが、マジでぜんぶ本物だと思いました。 …ってかぜんぜん CG だってわかんねーよ! これも大域照明とサブサーフェススキャタリングのなせる業ということでしょうか。 ついでに、パペットモデルも使われたようです。 http://dvdtimes.co.uk/content.php?contentid=56902

XBOX 360

XBOX 360 が公表されました。 http://www.itmedia.co.jp/games/articles/0505/13/news012.html おどろいたのは、システム全体で 1T flops という性能。 うーん、すごいなぁ、けど、そんな数字ってありえるのかな? というわけで少し考えてみました。 まず、CPU は、9 G 内積演算で 115.2 Gflops です。 3 component(3 fmadd) の内積専用命令があると考えれば、 3.2(GHz) * 3(プロセッサ) * 4(SIMD) * 3(fmadd)  = 115.2 G flops と計算どおりです。 んで、 GPU は、48 way のシェーダパイプとありますが、 これは今の GPU で用いられているピクセルパイプで言えば 12 本相当 という意味でしょう(12 * 4 = 48)。 統一シェーダ化により、4 要素固定のピクセルパイプではなく、 より柔軟な 3 要素のベクトル演算とか、2 要素の ベクトル演算を動的に構成していくアプローチを取っていそうです。 そのため、48 way という表記をContinue reading “XBOX 360”

EUROGRAPHICS 2005 Papers

EUROGRAPHICS 2005 の論文リストが Tim Rowley 大先生のところで公開されています。 http://myweb.hinet.net/home7/hks/Papers2005/eg2005Papers.htm Kinuwaki 先生の放射照度キャッシュの論文が採択されています。 ここ最近は、放射照度キャッシュやらファイナルギャザーやらアンビエントオクルージョンなどの、 半球上からの寄与率の計算を効率的に行う手法の提案が活発に行われている感じが します。

○○○○はファーストしか認めん!?

、、、いやあ、壮絶なるラストの座の争奪戦になってもおかしくないところでした、、、 Graphics Hardware 2005 に出した論文の採択通知が来ました。 三人の共著ですが、もちろん私は第一著者ではなく、ラストオーサーとなる予定です。 (それに、実際元になったアイデアは私の発案でないので) 仕事としての論文ですので、pdf をすぐに公開できそうにないのが 残念ですが、いずれなんらかの形でここのページなどで解説できればと思います。 どのようなものかというと、 2 のべき乗、これは美学 世界でもっとも美しい並びのパターンを作った それが本論文の寄与(contribution)だ という感じです。 すでに完成されたハードウェアネタは内部ではいっぱいあるのですが、 利権などもあり、なかなか外に出す機会がないんですよね。 もったいないので、これからもコンスタントに 出していけたらいいなぁと思います。 グランドスラム達成に一歩近づいたかな? グランドスラムとは? SIGGRAPH, EUROGRAPHICS, EGSR, GH, PACIFIC GRAPHICS, とあとなんか 2 学会くらい、 と世界最高峰の 7 大グラフィックス学会すべてに論文を通すことを言う。。。 過去、日本人でグランドスラムを達成したのは、、、、いるのかな? Nishita 先生と Dobashi 大教授くらい? ○○○○はファーストしか認めない!? ちなみに、○○○○はファーストしか認めない、という風潮がありますね。 ○ン○○とか、○ン○○とか、、、、 でも、わたしはラストが大好きです。