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のレンダリングなんかあんまり意味ないというか。レンダラ屋のオナニーでしかないわけだが。