Photon Mapping向け kD-tree implementation

PBR本での実装が謎すぎる。
Coldな(参照回数の低い)Photon詳細データをKd-tree構造から分離するって言うのはいいアイデアだから拝借するとして、メンバ変数hasLeftChildとrightChildの必要性がわからん。
ちょっとでもメモリを詰めて(いわゆる配列化二分木の子供はid*2とid*2+1の仮定をあきらめて)メモリコヒーレンシをあげようという戦略か?
一応再帰的にconstruct_and_balance_treeを呼び出すときに引数が少なくなることでアドバンテージがあるといっても微量だろうし。
とりあえずColdデータ分けた改良Jensen先生実装でいきますか。

追記:
もうひとつ理由らしきものを発見。スペースの有効活用。

Kd-treeのノード構造体実装だが、軸位置情報で絶対に4バイトは使う。
さらに、どの軸かという情報で最低2bit使う。しかし、2bitの確保はalignment的に効率が悪い。
最もいいのは4byteに余裕を持たせて入れてやることになる。しかしそれだと残り30byteが無駄になる。そこでノード数と子の数を持たせてやることで、スペースの有効活用をする。

他レンダラ調べた結果、lucille, renderBitch両方ともJensen先生本実装ほぼそのままぽい。