lucy
lucyをレンダリングしてみた。
・・・・
・・・・
どっから撮ってるんだよ!って聞こえてきそうだけど、lucyは高さがZ軸なのね。
ほんとは回転させて再度レンダリングするべきなのだろうが、正直勘弁してくれと思った。
lucyはstanfordのアーカイブの中でも桁違いにでかいんだが、僕のメモリ1.5Gのマシンではスワップしまくりでかなりの時間を費やした。
以下はログ出力
octree_mesh allocating start ... octree_mesh allocating end 10 s octree_mesh loading start ... octree_mesh loading end 1055 s octree_mesh transform start ... octree_mesh transform end 30 s octree_mesh getting min-max start ... octree_mesh getting min-max end 0 s octree_mesh construction start ... octree_mesh construction end 309 s construct total time 1411 s rendering time 278 s image save time 0 s
レンダリングは本来もっと速いはずだが、スワップしまくりの状況なので遅い。
レンダラを自作してる方々のページを見てると、lucyをGIで何気なくレンダリングした画像がおいてあったりするが、驚愕でしかない。・・・それともサイズの小さいバージョンがあるんだろうか?
今回はかなりズルもした。以下のように。
- 浮動小数点数をdoubleからfloatに変えた。
- ポリゴンの1面ごとに3つある法線ベクトルを浮動少数点数ではなくchar型で確保するようにした。
- ポリゴンの1面ごとに3つあるUV座標値を削った。
typedef double float_t; struct vector2{ float_t elements[2]; }; struct vector3{ float_t elements[3]; }; struct face{ const vector3* p_vetices[3];//頂点へのポインタ vector3 normals[3]; vector2 uvs[3]; };
を今回に限り、以下に変更。
typedef float float_t; struct vector3{ float_t elements[3]; }; struct compressed_normal{ char elements[3]; }; struct face{ const vector3* p_vetices[3];//頂点へのポインタ compressed_normal normals[3]; };
まあ、lucyのレンダリングなんかあんまり意味ないというか。レンダラ屋のオナニーでしかないわけだが。