gcc 4.0 での lucille コンパイル不都合解決

by syoyo

gcc 4.0 での lucille コンパイル不都合ですが、
解決したようです。

問題のあったのは、前回と同じく強制的に型キャストを行っているコードでした。

/* fast float to integer conversion.
 * see:
 * http://www.stereopsis.com/FPU.html
 */
#define DOUBLE2FIXMAGIC 68719476736.0 * 1.5 // 2^36 * 1.5
#define SHITAMT 16                         // 16.16 fixed point representaion.

inline int fast_ftoi(float val)
{
       double dval = (double)val + DOUBLE2FIXMAGIC;

#ifdef WORDS_BIGENDIAN
       return ((int *)&dval)[1] >> SHITAMT;
#else
       return ((int *)&dval)[0] >> SHITAMT;
#endif
}

このコードは、pbrt にも載っている高速に float から int へ変換する手法なのですが、
まあ実際のところ PentiumIII 世代の CPU でなければ効果が出ないようですので、
もうあまり意味のないコードになってしまいました。

このコードを使わないようにしたら、ちゃんとレンダリング結果がでるようになりました。

ついでながら、いまさらですが修正フォン BRDF によるグロス反射を実装しました。
チャイナ•ホーのオートマータらしさが出ているかな。

maxwell のレンダリング画像などを見ていると、やはりレンダリング画像にはいくらかグロス成分
(加えてノイズっぽい光沢さ)があったほうが現実世界のものらしく見える感じがします。

インポータンスサンプリングをしているので、シェーダではなくハードコードによるものです。

ことしの SIGGRAPH 2005 採択論文である、wavelet importance sampling では、
シェーダによる自動インポータンスサンプリング手法の可能性をさらに実現する
ようなものになるのではないかと期待しています。論文公開がたのしみです。

Advertisements