環境設定
パラメータの類が随分増えてきたためいい加減ハードコーディングが辛くなってきた。
ということで外部からの入力をできるよう思案。
テキストファイルでも作ればそれで終わりだけど味気ない。
業務では MSExcel なので VBA でちゃちゃっと書けるんだけど生憎私用では OpenOffice なので
若干苦戦。
まぁシンプルでいいんじゃなかろうか。
3DS ファイルの読み込み
C:Load3DS
The Graphics File Format Page
この辺が参考になった。
かなり深い部分まで解析(特にマテリアルチャンク)している。
座標の単位が良く分からなかったが多分 cm 単位なんだろう。
早速実装してみた。
デザインセンスはないのでフリー素材を物色。
基本的にテクスチャがないモデルというのは少なくマテリアル設定は
色分け程度なものが多かったので探すのが大変だった。
法線の平滑化は時間がなかったのでとりあえず面法線を、、、
真面目にやると結構時間が掛かる部分。
3DS の場合はスムーシンググループである程度制御するようだが
スムーシングアングルとかのパラメータは見つからなかった。
この辺、面倒な時は足して正規化などが常套手段なんだけど
やっぱり同じ向きは除外するなどしないといけないだろうなぁ。
また考えておこう。
-
- -
重複法線の除外は置いておいて、スムージングアングルとグループは
割と簡単に実装できるので済ませておいた。
なんだかんだで色々やっちゃってキリがないなぁ。
テクスチャ読み込みは今はやめておこう。
さすがに環境光と拡散光、自己発光だけでは少々飽きてきたので
コア部分に戻るとするかな。
空間分割その3
kd-tree を実装してみたのでお楽しみの速度比較。
最大深度: 3
サンプリング回数:500
通常
レンダリング時間:71129ms
Kd-tree
レンダリング時間:50245ms
およそ 20秒近くの高速化。
3割りくらいかな。
サンプリング数と二次レイが増加する程もっと顕著な差が出てくるはず。
予想外だったのはシーンによっては分断面を共有するプリミティブが多く
kd-tree の分割が全くされないケースや共有されるが故に余分なメモリ消費が発生。
コーネルボックスぽいのではまったく分割されないため、状況によっては kd-tree の方が
遅い結果になってしまった。
とりあえず落ち着いたので色々なシーンで試してみたいところ。
いい加減ハードコーディングしたシーンも面倒なので外部から読み込めるようにしておくべきか。
3DS ファイルあたりにでも対応してみることにしよう。
空間分割その2
前回 Octree で実装しようと考えていたがやはり無駄が多い気がした。
一方 BSP では分割が発生することと何よりも三角形以外(たとえば球)が
扱えないことが不便と気づく。
kdtree は形状を上手く扱えるかで若干悩んでいたが良いアプローチを
見つけたので kdtree で実装することにした。
Heuristic Ray Shooting Algorithms
構築とトラバース部分の実装を終えたところで力尽きる、、、
残りは三角形と AABB との交差判定を実装すれば動作するはずだが
この交差判定も中々厄介な部分で停滞中。