CG

ヘアーレンダリング4

marschner hairモデルを実装しシェーディングしてみた。 パラメータの調整がうまくできなくてとりあえず黒髪だけど、以下のようになる。 以下はdiffuse項をkajiya-kayを用い、specular項を今回のmarschnerモデルで置き換えた画像。

ヘアーレンダリング3

髪の毛のレンダリングにおいて前回までの円柱+球ではなく、カーブとしてレンダリングしてみた。 カーブのレンダリングの手法はRAY TRACING FOR CURVES PRIMITIVEを実装することで解決した。 また、髪の毛の一本一本をカーブとみなすために、点列間をcatmull…

ヘアーレンダリング2

前回のシーンの影を半透明にしてレンダリングしてみた。 あと今後できることは以下のようなことが考えられる。 もっと複雑なシェーディングモデルの採用 半透明シャドウの高速化 ヘアーセグメントのスプライン曲線による補間・細分化 GIへの対応

ヘアーレンダリング

自作レンダラにおいて髪の毛のレンダリングに取り掛かっている。 具体的にどうするべきか、実験中であるが、とりあえずここ(HAIR Model Files - Cem Yuksel)からhairモデルを取得して単純なレイトレースにてレンダリングしてみた。 物体形状としては髪の毛…

QBVHを実装した

空間構造の一種であるQBVH(Quad-tree Bounding Volume Hierarchy)を実装した。 元の論文はhttp://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.100/institut/Papers/QBVH.pdf QBVHはレイトレーサの交差判定を高速化する。 以前syoyoさんがイイヨとお…

ヒルベルト曲線順

ヒルベルト曲線は空間充填曲線のひとつだ。このヒルベルト曲線でより高次の空間をたどるとキャッシュ効率がよくなるらしい。 さっそく3次元のモデルの面をヒルベルト曲線順で並び替えてみる。 以下はstanford bunnyのそれぞれの面の順番をHSVのH(色相)に…

AOBenchをF#で実装した。

http://lucille.atso-net.jp/aobench/ で開催されているAOBenchをF#にて実装しました。 実装としてはC#版からの多くを拝借して移植。 あんまり関数型言語っぽくしてない。画像処理のような大きな配列を書き換える(リストから別のリストを作るのはやりやすい…

画像の無限平面化

テクスチャなどに使う画像は有限の大きさを持つが、これを無限平面として扱えるようになると便利だ。 たとえば画像の任意のピクセルを参照するときX,Yでその位置を指定するが、X,Yの範囲値はそれぞれ 0 になる。 この範囲を超えてアクセスした場合、エラーと…

三角形のラスタライズ

三角形のラスタライズを行うには以下の手順を踏む 1.三角形の上下分割 2.Yスキャン 3.Xスキャン ・三角形の上下分割 三角形を上下2つに分けることでスキャン変換がしやすくなる 1.3つの頂点を縦方向にソートする 2.真ん中の頂点の高さと最上点か…

C#でパストレ

非常に眠いのだが、明日のOoOに何も用意してないので、これはまずいと思い、 前回C#で書いたレイトレを改造してパストレを書いてみた。 パストレ自体は難しくないんだが、球だけではちょっとわかりにくいので 平面を加え、シェーダーを物体から分離したりし…

縮小サンプリング

mipmapおよびripmap画像作成処理を書いた。 mipmap、ripmapはテクスチャマッピングにおける、縮小サンプリング時の処理だ。 つまり、出力画像のほうがテクスチャ画像より小さい(したがって出力画像の1ピクセルにテクスチャ画像の複数のピクセルが存在する…

オブジェクトレベルでの空間構造

CG

レイトレーサにおいて、扱う対象が三角形の集合(メッシュ)だけならいいのだが、それ以外にも球や曲面を扱うとすると、シーン全体でひとつの空間分割構造に押しこめてしまうのは無理が出てくる。 ここでは、メッシュや球・曲面などのひとかたまりをオブジェ…

BIH実装

大分前から各所で話題になっていたBIHですが遅ればせながら、実装して試しました。 BIHって用は分割位置が二つあるkdtreeなんですが、ようは内部の三角形を2つの空間に分けるとき適当にどっちかに入れるか決めてしまってその境目は適当にやってしまおうとい…

円柱と光線の交差判定

レイトレーシングにおける円柱との交差判定を考える。 ウェブや本などでいくつかの記述例があるが、それは大抵、複雑であるか、軸がY軸もしくはZ軸に固定であるかのどちらかだろう。 以下ではすっきりと記述でき、if文だらけにならず、なおかつ軸を固定しな…

フォトン・シャドウマップ

フォトン・シャドウマップ的なものを実装した。シャドウ・フォトンマップではない。 参考用にレイトレースシャドウ レンダリング時間は点光源×3で 上:5秒 下:7秒 と少し速い。ライトが多くなればもっと差がつくだろう。んが、前処理がかかりやがる。上…

フォトンマップ

フォトンを何も考えず最近隣だけ取ってレンダリングするとボロノイ分割の模様が現れるんだな。 無理やりフィルタの図。ほんとはこんなことをしてはいけない。 もっとだめなフィルタリング。フォトンマップ構造は意外と簡単に出来る。 けど、今のところGIにす…

lucy

lucyをレンダリングしてみた。 ・・・・ ・・・・ どっから撮ってるんだよ!って聞こえてきそうだけど、lucyは高さがZ軸なのね。 ほんとは回転させて再度レンダリングするべきなのだろうが、正直勘弁してくれと思った。 lucyはstanfordのアーカイブの中でも…

カメラシステム

やっとカメラをつけた。上から透視投影、平行投影、球体投影、円筒投影、魚眼投影。 こういう風にいくつものカメラに対応するなら一度、縦横を-1〜1の系に変換してから、それを入力にしてやれば、統一的なインターフェースが定義できる。 class camera{ publ…

AABBの交差判定

AABBの交差判定にplucker座標系のを用いるものを使うように変更した。 すこし速くなったようだ。リリース版だとあまり分からないが、デバッグ版だとだいぶ違う。ただし、シーンにおけるAABB交差判定の割合はあまり多くないので、気休めかもしれない。多分、…

インスタンスシステム2

昨日の続き。微妙に修正。

インスタンスシステム

アルマジロを並べる。インスタンスシステムの実験。うむ。いい感じ。

classic fastest method --> Tomas Moller's method

以前にもポリゴンとレイとの交差について考えた*1。いろいろ試してみたけど、最近ではいわゆる[classic fastest method]と呼ばれている手法を使っている。classicというから、歴史は古いのだろう。この方法は数学的にとてもすっきり導出できる。インデックス…

ファイルマッピングによるレンダリング

メモリを増設して合計1.5Gになったのでxyzrgb_dragon(asian dragon)をレンダリングした。 環境:CPU pentium4 2.4GHz RAM 1536MB モデル:7219045頂点 3609600三角形 レンダリング:1200*1200 一時レイのみ 1点光源 レイトレーシングシャドウ レンダリン…

自作レンダラ

ここしばらくはここを更新するのを意識的にやめていた。 なんでか。今作ってる自作レンダラが、せめて少しでも見られる画像を作られるようになるまではと思って。去年度までに作っていたレンダラが、フォトンマップ(最後フォトンを集めるとこにパストレして…