♦ 第091223版 (x64jp x64en x86jp x86en)
Beam Radiance Estimateのバグを修正。
fix: volume rendering.
![]() version 091221 |
![]() version 091223 |
透過率の計算をメディアのバウンディングボックスとレイとの交差点を基準に行っているのに
フォトンの取得はレイの始点から行っていたのが原因でした。
♦ 第091221版 (x64jp x64en x86jp x86en)
ボリュームレンダリングのスカイライトの直接照明が正しくサンプルされないバグを修正。
fix: volume rendering.
![]() version 0911128 259054 photons 6.3 + 11.5 secs(Core i7 860) |
![]() version 091221 114145 photons 3.4 + 12.5 secs(Core i7 860) |
♦ 第091220版 (x64jp x86jp)
ポリゴンとマテリアルが1つも存在しないシーンでGUI上から背景を選択できないバグを修正。
ボリュームレンダリングのスカイライトの直接照明をフォトンを使わずにシャドウレイを使って計算するようにした。
fix: gui.
improvement: volume rendering.
![]() version 0911128 259054 photons 6.3 + 11.5 secs(Core i7 860) |
![]() version 091221 114145 photons 3.4 + 11.8 secs(Core i7 860) |
スカイライトの直接照明にボリュームフォトンを使っても効率が悪いだけなので
シャドウレイを使って計算するようにしました。
あと余談ですが、Beam Radiance Estimateは媒質の濃さ(消滅係数)が
急激に濃くなる面に斜めにレイが入射すると綺麗にレンダリングできません。(画像だと首元あたり)
逆に垂直入射には強いんですが、結構目立つので何とかしたい所です。
♦ 第091128版 (x64jp x64en x86jp x86en)
0 divideが発生する可能性を修正。
fix: 0 divide.
♦ 第091126版 (x64jp x64en x86jp x86en)
面光源で0 divideが発生する可能性を修正。
パーティシペイティングメディア内のサンプリングで不正な値が生じる可能性を修正。
fix: area light.
fix: participating media.
♦ 第091122版 (x64jp x64en x86jp x86en)
Beam Radiance Estimateを10%程高速化。
improvement: beam radiance estimate.
Beam Radiance Estimateはプライオリティキューが必要ないんですが、
vidroでは設計の都合上、一旦プライオリティキューにフォトンを収集してから推定を行っていました。
今回設計を変えて論文に即す形で実装したので、10%程高速化されました。
♦ 第091121版 (x64jp x86jp)
コード最適化。
improvement: code optimization.
x86向けに作ったソースをx64向けにコンパイルすると、アドレス計算に32bit型と64bit型が混在してパフォーマンスが落ちてしまいます。
そこで、アドレス計算で使われている一部のunsigned int型変数をsize_t型に変更しました。
これでx64版とx86版とで大体どっこい位の速度になりました。まだx86の方が速いみたいです。
チューニングが進めばレジスタ本数の多いx64の方が速くなると思います。どうもキャッシュ効率が悪いみたいです。
その他、細かいチューニングも入れたのでx86版も僅かにパフォーマンスが向上してます。
♦ 第091120版 (x64jp x86jp)
リファクタリング。
高周波のHDRIがスカイライトに入力された場合に、スカイライトの分散を求める処理で演算精度が足りずに分散が負になる問題を修正。
表裏の屈折率が同じで、ボリュームが異なるマテリアルが存在するとき、コースティクスを正しく計算できないバグを修正。
change: refactoring.
fix: sky light.
fix: caustics.
♦ 第091119版 (x64jp x86jp)
リファクタリング。
不正なメモリアクセスが発生する可能性のあるバグを修正。
change: refactoring.
fix: memory access.
♦ 第091118版 (x64jp x86jp)
リファクタリング。64bit用にソースを修正。
change: refactoring.
♦ 第091115版 (x64jp x64en x86jp x86en)
パーティシペイティング中の点光源の直接照明の計算にMultiple Importance Samplingを適用。
レンダリングの画質パラメータ"Point Light"(点光源)の初期値を256から512に上げた。
improvement: participating media.
change: default parameter.
♦ 第091114版 (x64jp x64en x86jp x86en)
libtiffを3.9.2にアップデート。
64bit用にソースを修正。
64bit版ビルドを公開。
improvement: libtiff.
new: x64 build.
64bit版を使用する場合は、Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x64)をインストールして下さい。
♦ 第091113版 (x86jp)
レンダリングの画質パラメータ"Area Light"(面光源)の初期値を256から512に上げた。
change: default parameter.
♦ 第091106版 (x86jp x86en)
MQOのマテリアルのshaderがConstantならcolの値をDiffuseとして読み込むように変更。
DXFファイルの色をガンマ値2.2で補正して読み込むようにした。
change: mqo loader.
change: dxf loader.
ガンマの扱いについてまとめておきます。
MQO,LWO,DXFで扱っている色は信号強度の値が記録されているようなので、vidroではガンマ値2.2で補正して読み込みます。
3DSはガンマが記録できるので、ガンマ補正された値あればその値を優先して読み込み、無ければガンマ値2.2で補正して読み込みます。
OBJ,FBX,COLLADAは、ガンマ補正はせずにそのまま読み込みます。OBJ,FBX,COLLADAを扱う場合はモデラのガンマ値を2.2に設定して下さい。
♦ 第091105版
スムージングが掛かっていない面でも頂点法線を生成するようにした。
DXFファイルをFBX SDKで読み込むように変更。
change: vertex normal.
change: dxf laoder.
シェーディング時に頂点法線が存在するかどうか判定するのはシンプルではないので、全ての頂点に法線を持たせることにしました。
スムージングのかかっていないオブジェクトが入力されると、面の方向毎に頂点法線を生成するのでメモリ使用量が増えますが、実用上そんなに問題ないと思います。
それとDXFの読み込みを自前のローダーを使うのを止めて、FBX SDKの機能を使うようにしました。
POLYLINEが読めなくなりましたが、Diffuseカラーが読み込まれるようになっています。
入力周りを結構弄ったので、バグが出ているかもしれません。不具合を見つけた方はメールして頂けると助かります。
♦ 第091031版
ファイルダイアログにDXFファイルが表示されないバグを修正。
fix: file dialog.
♦ 第091030版
ボリュームレンダリングを少しだけ高速化。
improvement: volume rendering.
♦ 第091029版
ボリュームレンダリングを少しだけ高速化。
improvement: volume rendering.
♦ 第091022版
パーティシペイティングメディア内の点光源のサンプル数を調整。
change: sampling.
♦ 第091021版
フォトントレーシングで0 divideが発生するバグを修正。
fix: 0 divide.
♦ 第091020版
LSDDEパスが正しく計算されないバグを修正。
fix: path tracing.
♦ 第091016版
LWO読み込み時に鏡面反射のExponent値が負なら0にクリッピングするうようにした。
fix: lwo loader.
♦ 第091014版
レンダリングの画質パラメータ Parallel Light(平行光源)をGlobal Illumination(大域照明)に統合。
change: rendering paramter.
♦ 第091013版
0 divideが発生するバグを修正。
fix: 0 divide.
![]() version 091012 |
![]() version 091013 |
左図は黒い点が発生しています。
浮動小数点の演算精度が足りずゼロ除算が起こった時などに、演算結果が非数となってこのような黒点が画像に出ます。
もしこの手のバグを発見された場合、シーンファイル一式とレンダリングに使用したパラメータを
メールで送って頂けるととても助かります。
バグを直すには、バグの出るシーンファイルが必要なんです。
♦ 第091012版
0 divideが発生するバグを修正。
fix: 0 divide.
♦ 第091011版
反射(or屈折)されるレイとポリゴンの交差判定で、レイの始点が0に極めて近い場合、同じ面に交差することがある問題を修正。
シャドウレイとポリゴンの交差判定で、レイの終点と同じ面に交差することがある問題を修正。
fix: ray-triangle intersection.
これで交差判定の精度がシーンのスケールに左右されることはなくなった筈です。
♦ 第091010版
反射(or屈折)されるレイとポリゴンの交差判定で、レイの始点と同じ面に衝突することがある問題を修正。
fix: ray-triangle intersection.
計算の誤差によって同じ面と衝突するのを防ぐために、レイの始点から極めて近いポリゴンは無視する必要があるんですが、
この無視する距離を今迄固定値で指定していました。
しかし、浮動小数点の誤差は値の大きさによって変わるので、固定値だとシーンのサイズが大きい場合に誤差を許容できません。
そこで、この無視する距離を始点の位置を元に求めるようにしました。
具体的には、始点のXYZ値の中で最も大きい絶対値を220で割った値を使っています。
入力されるシーンに依存しなくなったので、小さなシーンでは反射レイが壁を突き抜けにくくなり、
大きなシーンでは始点と同じ面に交差することがなくなったので、遠くにだけ発生するような妙なノイズがなくなると思います。
これで少し様子を見たいと思いますが、問題を発見された方はメール等で連絡していただけると助かります。
♦ 第091008版
FBXファイルとMQOファイルの平行光源オブジェクトの位置を読み込むようにした。
MQOファイルの点光源オブジェクトの方向を読み込むようにした。
implovement: fbx loader.
implovement: mqo loader.
光源にテクスチャを張りたい人には少し便利かもしれません。
♦ 第090924版
Beam Radiance Estimate を5%高速化。
implovement: beam radiance estimate.
♦ 第090923版
局所的に明るい領域のボリュームフォトンの探索半径を小さくした。
implovement: volume photons.
♦ 第090922版
ボリュームフォトンのメモリ使用量を減らした。
implovement: volume photons.
♦ 第090919版
コースティクスフォトンに探索半径を記録しないようにした。
implovement: photon density estimation.
フォトンに記録しているirradianceから探索半径を推定できるのでそれを使うことにしました。
♦ 第090918版
レイのウェイトに応じてサーフェス上の近傍フォトンの最大探索半径を変えるようにした。
implovement: photon density estimation.
すべての点で同じ半径を使うと、弱いレイで近傍フォトン探索の効率が悪いので
サーフェス上の最大探索半径の2乗をウェイトに比例させるようにしました。
♦ 第090917版
フォトン毎に探索半径を記録するようにした。
最近傍の1フォトンを探索する場合、現在位置がフォトンの持つ探索半径内に含まれない場合は対象外にした。
最近傍の1フォトンを使った輝度推定でフィルタリングを行わないようにした。
implovement: photon density estimation.
最近傍フォトンの探索は、物理的に一番近いフォトンを探すよりも
本当はフォトン毎にカーネルのウェイトを求めて一番大きな値を持つフォトンを探し出すのが良いんだと思います。
でもそうするとBVHを構築しなければならず、少し面倒なのでこの辺りで妥協します。
♦ 第090914版
近傍フォトンの最大探索半径を少し小さくした。
change: internal parameter.
第090911版は大きすぎたみたいです。
♦ 第090911版
近傍フォトンの最大探索半径を広げた。
change: internal parameter.
♦ 第090910版
OBJファイルの読込みにおいてusemtlで指定されたマテリアルが存在しない場合、新しくマテリアルを作成するようにした。
improvement: obj loader.
♦ 第090908版
点光源と平行光源にテクスチャが指定してある場合に、フォトンの放出の効率を上げた。
improvement: photon emission.
♦ 第090907版
点光源からフォトンが正しく放出されないバグを修正。
fix: photon emission.
♦ 第090906版
点光源からフォトンが正しく放出されないバグを修正。
点光源がパーティシペイティングメディア内に存在する場合にフォトンの放出の効率を上げた。
fix: photon emission.
improvement: photon emission.
♦ 第090905版
第090904版のテクニックをボリュームフォトンの放出にも適用。
improvement: photon emission.
♦ 第090904版
放出対象から遠い位置にある点光源のコースティクスフォトンの放出において、浮動小数点の演算精度の問題を解消。
improvement: photon emission.
![]() version 090901 |
![]() version 090903 |
![]() version 090904 |
Caustics of Distant Point Light
(Sphere Radius : Distance of Light Source = 1 : 400)
図はガラス球から遠い位置に点光源が存在するシーンで、1000000回フォトンを放出したものです。
第090901版は全方向をサンプリングしているので、光源が遠いと、フォトンが放出対象のガラス球に衝突する確率はとても低くなります。
図ではフォトンはひとつも衝突しませんでした。
第090902版以降は放出対象のガラス球に向かってフォトンが放出されるので効率が良いのですが、
平行光源に見えるほど点光源が遠すぎると、浮動小数点の演算精度が足りなくなり、
フォトンの分布が縞模様になってしまいます。
この問題を解消するために、フォトンを光源の位置から放出せず、
放出対象の近くでフォトンが通過する点を求め、そこから放出するようにしました。
具体的には、放出対象のバウンディングスフィアの中心Oと光源の位置Pとを結ぶ直線OPに、
点Oからの距離lの直線OP上の点Qで直線OPと垂直に交差する平面上の点Rを求めます。
点Rと点Qとの距離sは、以下の式で求まります。
s = (1 - l/d)sqrt(ξ2r2 + ξ(1 - ξ)2d2α)/(1 - ξα)
α = 1 - sqrt(1 - (r/d)2)
ξ:一様乱数。(0 ≤ ξ < 1)
r:放出対象のバウンディングスフィアの半径。
d:光源Pと放出対象のバウンディングスフィアの中心Oとの距離。(r < d)
l:放出対象のバウンディングスフィアの中心Oから平面までの距離。(l ≤ d)
距離lは点Oを中心とするシーン全体のバウンディングスフィアの半径を使ってます。
♦ 第090903版
天球光源から正しくフォトンが放出されないバグを修正。
fix: photon emission.
♦ 第090902版
点光源からのフォトン放出の効率を上げた。
improvement: photon emission.
点光源が放出対象のバウンディングスフィア外にあり、
かつ、放出強度の分布に従ったインポータンスサンプリングをする場合よりもパワーが小さくなるなら、
バウンディングスフィアに向けてフォトンを放出するようにしました。
遠くに強い点光源があるシーンでは効率がかなり上がります。
♦ 第090901版
マテリアルのEmissionに環境マップが指定してある場合にフォトントレーシングの効率を上げた。
コマンドラインオプションout_contour="filename"で輪郭線画像を保存できるようにした。
improvement: photon emission.
addition: command line option.
面光源からフォトンを放出する際、放射分布マップに従ったインポータンスサンプリングをするか、
環境マップに従ったインポータンスサンプリングをするかで、パワーが小さくなる方でサンプリングするようにしました。
♦ 第090831版
マテリアルのEmissionに環境マップが指定してある場合に正しくフォトンが放出されないバグを修正。
fix: photon emission.
♦ 第090829版
弱い面光源が存在する場合にメモリ使用量を低減した。
表裏の異なるボリュームを持つ面光源が存在する場合、フォトンの放出の効率を上げた。
マテリアルダイアログにおいて、Emissonが有効でもVolumeが変更できないバグを修正。
improvement: area light.
improvement: photon emission.
fix: material dialog.
♦ 第090827版
マテリアルの発光放射輝度の分布マップに色がある場合に、正しくフォトンが放出されないバグを修正。
fix: photon emission.
♦ 第090825版
天球光源全体からフォトンを放出するようにした。
improvement: photon emission.
♦ 第090820版
ボリュームのContourColorが正しく保存されないバグを修正。
VDRフォーマットにマテリアル境界線を保存する"Boundary"追加。
VDRフォーマットにクリース線を保存する"Crease"追加。
fix: save.
addition: vdr format.
♦ 第090819版
天球光源のサンプリングを改良。
improvement: sky light.
![]() version 090818 |
![]() version 090819 |
今まで天球光源の明るい所のみシャドウレイをサンプリングしていましたが、
全体をサンプリングするように変更しました。
Multiple Importance Samplingを使う場合はその方が効率が良いみたいです。
ただ、均一な明るさの天球光源の場合に、シャドウレイをサンプリングするのは無駄なので
サンプル数は以下の式に比例して与えるようにしました。
σ2/(σ2 + E2)
σ2は天球光源の発光放射輝度の分散、Eは天球光源の発光放射輝度の平均です。
♦ 第090818版
FBX SDKのバージョンを2010.2にアップ。
improvement: fbx sdk.
♦ 第090817版
フォトンマップのバグを修正。
fix: photon map.
♦ 第090810版
天球光源が正しくサンプリングされないバグを修正。
fix: sky light.
♦ 第090807版
パーティシペイティングメディアが存在しているとNPRで落ちるバグを修正。
fix: npr.
♦ 第090806版
輪郭線の色を輪郭線ダイアログから入力できるようにした。
輪郭線の色が異なるマテリアル境界の輪郭線をきれいにした。
addition: contour dialog.
improvement: contour color.
[アートスタイル]->[ノンフォトリアル]で輪郭線の色が反映されます。
[アートスタイル]->[輪郭線]では輪郭線に色は付きません。
♦ 第090805版
輪郭線関連のダイアログをひとつに集約。
change: gui.
♦ 第090804版
アートスタイル"マテリアルカラー"と"ライティング"で完全鏡面反射屈折が表示されないバグを修正。
fix: art style.
♦ 第090803版
VDRフォーマットに"ContourColor"追加。
addition: contour color.

ContourColor 0.5 0.1 0.1
"ContourColor"で輪郭線に色を付けられるようにしました。
VDRフォーマットでMaterialチャンクとVolumeチャンク内に以下のように記述します。
ContourColor <実数> <実数> <実数> "<画像ファイル名>"
最初の3つの値がRGB値、次がテクスチャです。
Volumeチャンクの"ContourColor"は天球光源の輪郭線の色になります。
GUIはまだ作ってません。
♦ 第090730版
背景合成用の照明計算で0 divideが発生するバグを修正。
fix: 0 divide.
天球光源にHDRIを使ってない場合、背景に照明が合成されない問題を修正しました。
♦ 第090728版
鏡面反射のサンプル数を調整。
change: sampling.
♦ 第090726版
0 divideが発生するバグを修正。
fix: 0 divide.
♦ 第090725版
シーンの明るさに応じてサンプル数を増やすのをやめた。
レンダリングパラメータ"Global Illumination"の初期値を512に増やした。
change: sampling.
change: parameter.
♦ 第090723版
マテリアルのEmissionに環境マップを指定してポータルのようなものを作れるようにした。
存在しないEXRファイルを読み込もうとすると落ちるバグを修正。
0 divideが発生するバグを修正。
addition: fake portal.
fix: exr loader.
fix: 0 divide.

Fake Portal
マテリアルに外光の環境マップ貼り付けてポータルのようなものを作れるようにしました。
図ではティーポットの奥の壁がポータルになっています。
この図のように天球光源と異なる環境マップを使用することも出来ます。
また、Reflectionと組み合わせればガラス窓のようなものを作ることも出来ると思います。
サンプリングの最適化は全くしてないのでHDRIを使うとノイズが酷いですが、
その辺りはゆっくりやってこうと思います。
♦ 第090718版
鈍い鏡面反射の最大値の見積もりを修正。
improvement: specular.
入射角θ, 垂直入射時の鏡面反射率がRsのとき、鏡面反射の最大値Smaxは以下の式で見積もってました。
Smax = Rs + (1 - Rs)(1 - cosθ/sqrt(2))5
これだと少し無駄があるので、以下の式に修正しました。
Smax = Rs + (1 - Rs)(1 - sqrt((1 - sinθ)/2))5
サンプリングがほんの少しだけ改善される筈ですが、体感できない程度です。
♦ 第090717版
古いコマンドラインオプション"/indirectlight", "/skylight", "/volume"をサポートしないようにした。
change: command line options.
♦ 第090713版
サンプル数の見積もりで0 divideが発生するバグを修正。
fix: 0 divide.
♦ 第090712版
VDRフォーマットから"HardLight"を削除。
change: vdr format.
面光源のシャドウレイやコースティクスフォトンをサンプリングするか否かはvidro内部で自動的に判断するようにしました。
この判断は露出が1であることを仮定して計算します。
不都合のある方は連絡下さい。
♦ 第090711版
GUIでHardLightの入力をできないようにした。
change: gui.
"HardLight"はVDRフォーマットから無くす予定です。
♦ 第090710版
Emissionの値に応じてマテリアルを自動的にHardLightにするようにした。
change: area light.
マテリアル毎にHardLightにするかどうかいちいち考えるのも面倒なので、vidro内部である程度自動的に判断するようにしたいと思います。
♦ 第090708版
コマンドラインオプションの/outの動作を/out_prと同じにした。
新しいシーンを読み込んだときに露出を初期化するようにした。
change: command line option.
change: exposure.
♦ 第090707版
コマンドライン実行時に相対パスが絶対パスに変換されないバグを修正。
fix: path.
♦ 第090706版
フォトン密度推定を改良。
improvement: photon density estimation.

362211 photons

3622 photons

38 photons
Caustics on Glossy Surfaces
Left: version 090702. Right: version 090706.
♦ 第090705版
近傍フォトンの収集で不正な処理が発生するバグを修正。
fix: nearest photns.
♦ 第090704版
メモリリークするバグを修正。
Multiple Importance Samplingをフォトン密度推定に適用。
fix: memory leaks.
improvement: photon density estimation.
♦ 第090702版
サンプル数の見積もりを少し調整。
change: sampling.
♦ 第090701版
OBJファイルの行末が空白の場合に正しく読み込まれないバグを修正。
Hard Light指定してある面光源にMultiple Importance Samplingを行うようにした。
fix: obj loader.
improvement: area light.
![]() version 090630 |
![]() version 090701 |
♦ 第090630版
不正な処理で落ちるバグを修正。
fix: error.
♦ 第090629版
透過がMultiple Imporance Samplingの計算に反映されてないバグを修正。
fix: multiple imporatance sampling.
♦ 第090628版
Multiple Impotance Samplingの計算が正しく行われないバグを修正。
拡散反射にもMultiple Importance Samplingを行うようにした。
fix: multiple imporatance sampling.
![]() version 090625 80secs |
![]() version 090628 45secs |
拡散反射でノイズが増える原因はバグでした。 しかし適用しなかった場合と結果はほとんど変わりません。
♦ 第090627版
天球光源と鈍い鏡面反射とでMultiple Importance Samplingを行うようにした。
improvement: glossy specular & sky light.
Multiple Importance Samplingに使ったヒューリスティクスはpower heuristics(β=2)です。
試しに拡散反射に対してもやってみましたが、ノイズが増えたので鏡面反射のみにしました。
チューニングすればもうちょっと良くなると思います。
♦ 第090625版
フォトントレーシングにおいて、鈍い鏡面反射方向のエラーチェックが甘いバグを修正。
fix: photon tracing.
♦ 第090623版
サンプリング数の見積もりを調整。
change: sampling.
♦ 第090622版
FBX SDKのバージョンを2010.0から2010.0.2にアップ。
fix: fbx sdk.
♦ 第090618版
サンプリング数の見積もりを少し調整。
change: sampling.
♦ 第090615版
レンダリングダイアログで入力するパラメータBounce(バウンス)をGlobal Illumination(大域照明)に名称変更。
コマンドラインオプションのbounceをgiに名称変更。
change: rendering dialog.
change: command-line option.
♦ 第090614版
天球光源のサンプリングが正しく行われないバグを修正。
fix: sampling.
リファクタリングの影響でバグが出てました。画面にブツブツが出る原因はこれです。
♦ 第090613版
マルチスレッド処理でプライベート化すべき変数が共有化されていたバグを修正。
fix: multi-thread.
♦ 第090612版
Photon Tracingをマルチスレッド化。
improvement: multi-thread photon tracing.
♦ 第090610版
VDRファイルで"Position"を指定してMQOを読み込んだ場合、MQOの視点がずれるバグを修正。
fix: mqo loader.
♦ 第090607版
LWOの読込を高速化。
シーンを読み込む前に[メニュー]->[レンダリング(R)]をクリックすると落ちるバグを修正。
improvement: lwo loader.
fix: gui.
♦ 第090606版
サンプル数の見積もりを修正。
change: sampling.
♦ 第090605版
JPEG保存時のクォリティを100に設定。
change: jpeg.
JPEGは画質が悪くなるので推奨してません。
♦ 第090604版
レンダリングダイアログのPoint LightとParallel Lightの画質パラメータを、光源が存在するボリューム内のAlbedoが0なら無効にするようにした。
improvement: rendering dialog.
♦ 第090602版
レンダリング画質のパラメータSky LightをBounceに統合。
change: parameters.
♦ 第090531版
Material数の上限を取り払った。
improvement: materials.
♦ 第090530版
Space数、Volume数の上限を取り払った。
VDRフォーマットの"Environment"を"SkyLight"に名称変更。
change: vdr format.
コードを結構書き換えたのでバグが出ている可能性があります。
不具合を見つけたらメールかBlogに報告していただけると助かります。
♦ 第090519版
FBXのカメラがずれるバグを修正。
FBXのカメラターゲットに対応。
fix: fbx loader.
FBXには、Position, InterestPosition, UpVectorという値があるんですが、どうもこれらは信用してはいけないようなので
ノードのアフィン行列とFocusDistanceからカメラを作るようにしました。
3ds Max 2010とSoftimage Mod Tool 7.5とblender 2.48aで動作を確認してます。
♦ 第090517版
VDRファイルの"Volume"を"Space"の子にした。
change: vdr format.
♦ 第090516版
VDRファイルの"Geometry"を"Space"に名称変更。
change: vdr format.
"Volume"は"Space"の子にする予定です。
♦ 第090515版
ボリュームに名前を付ける様にした。
VDRファイルで表裏のボリュームの指定にボリューム名を用いるようにした。
change: vdr format.
♦ 第090514版
サンプリングのコスト計算を改良。
change: sampling.
♦ 第090510版
3DSのUV座標が正しく読み込まれないバグを修正。
fix: 3ds loader.
♦ 第090509版
LWOファイルのPTCHの法線が正しく計算されないバグを修正。
fix: lwo loader.
♦ 第090508版
3DSファイルのspecularの値をWeightとして読み込んでいたのを止め、Reflectanceに乗算するようにした。
change: 3ds loader.
♦ 第090507版
マテリアルダイアログで、完全鏡面反射が1かつ屈折率が0ならEmissionを無効にするようにした。
improvement: material dialog.
♦ 第090506版
MQOファイルの法線が正しく計算されないバグを修正。
fix: mqo loader.
♦ 第090505版
FBXファイルの点光源・平行光源に対応。
MQOファイルの平行光源の方向が真上(0,1,0)のとき、正しく読み込まれないバグを修正。
improvement: fbx loader.
fix: mqo loader.
点光源は二乗減衰モデルのみ対応してます。
また、VDRファイルを経由した場合、FBX,MQO内の光源は読み込まれません。
テストはまだ不十分ですが、これでFBXは大体対応できました。
Autodesk製品のモデラにはガンマ補正して表示する機能があるのでガンマの扱いも問題ないようです。
♦ 第090504版
FBXファイルのカメラの注視点がずれるバグを修正。
fix: fbx loader.

Same angle as Softimage Mod Tool 7.5
Softimage Mod Tool 7.5に合わせました。
blender 2.48aで出力したFBXだとカメラが変な方向に向きますが、
FBXはAutodeskのフォーマットなのでAutodesk製品に合わせる事とします。
♦ 第090503版
FBXファイルのカメラのDOFに対応。
FBXファイルのNurb, Patchに対応。
FBXファイルの読み込みにおいて、Visibilityが0ならMesh, Nurb, Patchを読み込まないようにした。
FBXファイルのカメラが透視投影でも平行投影になるバグを修正。
improvement: fbx loader.
fix: fbx loader.
♦ 第090502版
FBXファイルのカメラに対応。
FBXファイルの座標変換に対応。
FBXファイルの読み込みで、マテリアルが割り当てられてないメッシュがあると落ちるバグを修正。
improvement: fbx loader.
fix: fbx loader.
♦ 第090501版
FBXファイルの読み込みにおいて、Colorのテクスチャが無かったらFactorのテクスチャを読み込むようにした。
improvement: fbx loader.
♦ 第090431版
FBXファイルのUV座標とテクスチャに対応。
improvement: fbx loader.
上手く読み込めないテクスチャがあったら連絡下さい。
♦ 第090430版
FBXファイルの読込でメモリリークが発生するバグを修正。
improvement: fbx loader.
ここに載ってました。
KFbxSdkManagerクラスを開放する前にIOSREF.FreeIOSettings()を呼び出さないといけないみたいです。
♦ 第090429版
FBXの法線に対応。
improvement: fbx loader.
FBXフォーマットに一通り対応してから、FBX SDKでCOLLADAに何処まで対応できるか検証したいと思います。
♦ 第090427版
DXFファイルはZ軸を上方向、Y軸を前方向にして読み込むように変更。
FBXとCOLLADAのマテリアルに対応。
change: dxf loader.
improvement: fbx loader.
マテリアルに対応しましたがテクスチャには対応してません。
♦ 第090426版
Distortionの値が負でDOF有効時にクリップ距離が正しく計算されないバグを修正。
FBXフォーマットとCOLLADAフォーマットへの対応を開始。
fix: clip.
addition: fbx loader.
FBX SDK 2010.0を導入してみましたが、まだMeshしか読み込めませんしメモリリークが発生します。
このSDK自体もバグがありそうです。
FBXやCOLLADAファイルはテスト目的以外で入力しないで下さい。
♦ 第090424版
OBJ+MTLローダのエラーチェックを強化。
improvement: obj loader.
♦ 第090421版
フォトン密度推定を改良。
improvement: photon density estimation.
![]() version 090419 |
![]() version 090421 |
xproj = xp + ω(n⋅(x - xp)/(n⋅ω))
ここでxpは元のフォトンの位置、xprojは移動後のフォトンの位置、
ωはフォトンの入射方向、xは推定位置、nは法線です。
ωの角度によってはxprojが探索半径外になることもあるので
vidroではxpとxprojの両方が探索半径に入っているフォトンを密度推定に使うようにしました。
この方法は割と手軽に壁際や凹凸のフォトン滲みを防げます。
♦ 第090419版
DOF有効時に負のDistortionパラメータに対応。
addition: fish eye projection.
これで魚眼レンズの射影方式(Stereographic Projection, Equidistant Projection, Equal Area Projection, Orthographic Projection)を網羅できるようになりました。
♦ 第090418版
DOFが有効かつ透視投影のDistortionが1以外の場合に、0 divideが発生するバグを修正。
fix: dof.
♦ 第090417版
クリップ距離が0以外でDOFが有効な場合、焦点面が移動するバグを修正。
fix: dof.
♦ 第090416版
DOFの焦点面が正しく計算されないバグを修正。
クリップ面が正しく計算されないバグを修正。
fix: dof.
fix: clip.
♦ 第090415版
歪曲(Distortion)の値が負の場合、正弦を使って投影を行うようにした。
addition: fisheye projection.

Distortion 1.0
(Perspective Projection)

Distortion 0.5
(Stereographic Projection)

Distortion 0.0
(Equidistant Projection)

Distortion -0.5
(Equal Area Projection)

Distortion -1.0
(Orthographic Projection)
(Film Size: 0.024, Focal Length: 0.005)
Distortionの値が負の時は、以下の式で投影を行うようにしました。
r = f sin(dθ)/d
ここでfは焦点距離、θは光軸に対する角度、rは投影面上の位置、
そしてdは歪曲を表すパラメータです。
d = -0.5で、等立体角射影(Equal Area Projection)、
d = -1.0で、正射影(Orthographic Projection)になります。
DOFにはまだ対応してません。
♦ 第090328版
不均質な媒質のデータを取得するレイマーチング処理を、DDAから一定区間毎のサンプリングに変更。
パノラマ投影を拡張。
change: ray marching.
improvement: panorama projection.

Panorama
(Focal Length:0.020, Film Size: 0.024)
パノラマ投影を全方位の投影から、横方向をEquidistant Projection、縦方向を歪曲(Distortion)の値に従った投影を行うようにしました。
焦点距離が短いほど効果が大きくなります。
これで表現できる幅が少し広がりました。
従来の全方位パノラマ投影を行いたい場合は、歪曲の値を0にし、
焦点距離fとフィルムサイズsを
s = fπ
となるように調整してください。
デフォルトの場合、フィルムサイズは0.024なのでfは次の値になります。
f = 0.0076394372684109761169064206418807そして解像度の縦横比をwidh:height=2:1に指定すれば
♦ 第090323版
VDRフォーマットの"Eye"ブロックで"Volume"が指定されて無い場合、直前に記述されたボリュームを指定するようにした。
change: vdr format.
♦ 第090322版
平行光源のフォトンのサンプリングを改良。
平行光源にHDRIを貼り付けたときにサンプル数が無駄に増大しないようにした。
improvement: parallel lights.

Textured Parallel Light
vidroでは発光放射輝度の分布をテクスチャで与えた場合、
光源から放出されるコースティクスフォトンのインポータンスサンプリングを、
以下の二通りの方法から選ぶようにしてます。
♦ 第090321版
平行光源から放出されるフォトンのサンプリングの効率を上げた。
パーティシペイティングメディアが存在するシーンにおいて、天球光源から放出されるフォトンのサンプリングの効率を上げた。
平行光源のサイズが0ならテクスチャを無効にした。
improvement: photon sampling.
vidroは並行光源にサイズを指定してテクスチャを貼れるようにしてあるんですが、
そのせいでフォトンのサンプリングの効率が悪くなる場合がありました。
そこで平行光源のサイズが指定されてない場合は、サイズもテクスチャもない単純な平行光源用の処理をするようにしました。
フォトン密度が上がったので、デフォルトのフォトン数は少し減らしたほうが良いかもしれません。
♦ 第090320版
MQOの点光源を試験的に読み込むようにした。
addition: point lights of mqo.

Point Light
2乗減衰モデルの点光源のみ対応します。
MQOを直に読み込んだ場合に有効になります。
点光源の放射強度IはMQOのパラメータから以下の式で求めています。
I = (colorγ)*(light_value * 0.5 * light_attenuation2)
γ値は2.2です。
また、点光源ひとつに対して天球光源の発光放射輝度を0.25減らすようにしました。
暫くこれで様子を見たいと思います。
♦ 第090319版
天球光源のサンプル数のパラメータが不要なシーンでは、レンダリングダイアログでパラメータを無効にした。
improvement: gui.
♦ 第090318版
MQOの平行光源を試験的に読み込むようにした。
addition: parallel lights of mqo.

Parallel Light
MQOを直に読み込んだ場合に平行光源があれば読み込むようにしました。
平行光源の明るさに応じてデフォルトの天球光源が弱くなるようにしています。
ただし、メタセコイアの光源オブジェクトはβ版の機能なので、これはあくまで試験的な実装です。
♦ 第090314版
視点と注視点が同じ場合にメニューからEyeの編集ができなくなるバグを修正。
fix: gui.
♦ 第090313版
内部パラメータ調整。
change: internal parameter.
♦ 第090312版
内部パラメータ調整。
change: internal parameter.
♦ 第090306版
LWOファイルとEXRファイルの入出力でロケールのセッティングに失敗して落ちるバグを修正。
fix: locale setting.
♦ 第090305版
OBJ+MTLファイルの鏡面反射のウェイトが正しく読み込まれないバグを修正。
MQO, OBJ+MTL, 3DS, LWOの鏡面反射の読込みを改良。
fix: obj loader.
change: specular refelctance.
![]() version 090304 |
![]() version 090305 |
メタセコイアも3ds MaxもLightWaveも、鏡面反射のパラメータは反射率ではなく、
係数のようなので以下の式で反射率を求めるようにしました。
R = S*2/(n + 2)
ここでRはvidroの鏡面反射の反射率、nはPhongの指数、
Sは各ファイルの鏡面反射のパラメータ(MQO:spc, 3DS:shininessstrength, OBJ+MTL:Ks, LWO:spec)、
これでオブジェクトのマテリアルを直に読み込んでもテカテカしなくなりました。
逆にメタリックなマテリアルを作りたい場合は鏡面反射の反射率を大きくして下さい。
♦ 第090304版
VDRフォーマットの"FrontTilt"を"LensTilt"に名称変更。
VDRフォーマットの"BackTilt"を"FilmTilt"に名称変更。
VDRフォーマットの天球光源における"HardLight"を削除。
change: vdr format.
♦ 第090302版
Eye Dialogを少し改良。
improvement: gui.
♦ 第090301版
ボケ画像のパスが指定されてないとき、丸絞りのボケにするようにした。
ボケ画像の色が反映されないバグを修正。
GUI上でボケ画像のパスが消せないバグを修正。
change: bokeh.
fix: bokeh.
fix: gui.
![]() Rectangular Aperture |
![]() Circular Aperture |
ボケ画像のパスを指定すると、その画像の色・形でボケます。
今までは、ボケ画像のパスが指定されていないと四角絞りのボケになっていたんですが
感覚的ではないので丸絞りにしました。
♦ 第090224版
投影周りの計算をチューニング。
improvement: projection.
♦ 第090222版
VDRフォーマットに"Distortion"を追加。
デフォルトの輪郭線の濃さを0.5から1.0に変更。
addition: vdr format.
change: default contour paramter.
輪郭線の濃さは[メニュー]->[アートスタイル]->[マテリアル境界線] or [クリース線]で変更できるので好みに応じて変えて下さい。
レンダリング後でも変更可能ですし、このダイアログで輪郭線にテクスチャも張れます。
♦ 第090221版
魚眼レンズを透視投影に統合。眼のパラメータに歪曲(Distortion)を追加。
addition: distortion parameter.

Distortion 0.0
(Equidistant Projection)

Distortion 0.5
(Stereographic Projection)

Distortion 1.0
(Perspective Projection)

Distortion 1.5

Distortion 2.0
眼の投影モデルには以下の式を置きました。
r = f tan(dθ)/d
ここでfは焦点距離、θは光軸に対する角度、rは投影面上の位置、
そしてdは歪曲を表すパラメータであり、1より大きいと糸巻型に歪曲し、1より小さいと樽型に歪曲します。
d=1.0で通常の透視投影(Perspective Projection)、
d=0.5で立体射影(Stereographic Projection)、
d=0.0で等距離射影(Equidistant Projection)となり、
dが0に近づくほど魚眼の効果が大きくなります。
他のソフトがレンズをどのようにモデル化しているか分ってないのですが、vidroでは上記のようにしてみました。
焦点距離等は実際のカメラの魚眼レンズを参考にすると良いと思います。
♦ 第090218版
魚眼レンズがDOFに対応。
improvement: fish eye projection.
♦ 第090214版
魚眼レンズがティルトに対応。
魚眼レンズで0 divideが発生するバグを修正。
improvement: fish eye projection.
fix: fish eye projection.
![]() Front Tilt 10° 10° |
![]() No Tilt |
![]() Back Tilt 10° 10° |
Fish Eye
(Film Size:0.024, Focal Length:0.010)
レンズ側のティルト(Front Tilt)はPerspective Projectionの場合だと被写界深度にのみ影響を与えていましたが、
魚眼レンズでは煽りも入るようになります。
♦ 第090213版
投影法に魚眼レンズを追加。パノラマ(angular)廃止。
addition: fish eye projection.
魚眼レンズに使っている等距離射影(Equidistant Projection)の式は以下になります。
r = fθ
fは焦点距離、θは光軸に対する角度、rは投影面上の位置です。
実際のカメラと同じように焦点距離を小さくすると効果が分り易いと思います。
現状、TiltやDOFには対応してません。
パノラマ(angular)は廃止しましたが、同じ投影を行いたい場合は、
s = 2fπ
となるように焦点距離fとフィルムサイズsを調整してください。
デフォルトのフィルムサイズの場合だと0.024なので
f = 0.0038197186342054880584532103209403
となります。
vidroでは実際のカメラと違って360°以上の視野角も扱えます。
♦ 第090211版
3DSファイルのガンマ補正に対応。
improvement: 3ds loader.
ガンマ補正済みの色が有ればそちらを優先して読込み、
無ければガンマ値2.2で補正して読み込むようにしました。
♦ 第090208版
GUI上で天球光源に"HardLight"の入力をできないようにした。
change: gui.
天球光源のHardLightは意味のないパラメータになって来ているので入力部を削除しました。
現在、天球光源の輝度の起伏が激しいか否かはvidro内部で自動的に判定するようになってます。
"HardLight"を0にして(ユーザが明示的に指定して)サンプリングが有利に働くことはほとんど無いと思います。
♦ 第090207版
天球光源が"HardLight"でないとき、サンプル数が増えすぎないようにした。
change: sampling parameter.
♦ 第090202版
全てのマテリアルで背景合成用の照明を計算するようにした。
change: background.
マテリアルダイアログでいちいち"合成用の照明を計算"にチェックを入れるのも面倒なので、全部計算するようにしました。
現在の実装だと速度はほとんど変わりません。
♦ 第090131版
LWOのMetaNURBSの法線が正しく計算されないバグを修正。
fix: lwo loader.
♦ 第090129版
LWOのMetaNURBSを読み込むようにした。
improvement: lwo loader.
一応読み込めるようにしましたが、MQOの曲面と同じでvidro側でポリゴンの再分割とかはしません。
MetaNURBSは綺麗にレンダリングできないので、vidroに読み込ませる前になるべくポリゴン化して下さい。
♦ 第090127版
LWOのポリゴンの表裏が反転するバグを修正。
fix: lwo loader.
♦ 第090126版
LWOのテクスチャに対応。
improvement: lwo loader.
DiffuseとEmissionのテクスチャはColorのテクスチャを、Specular, Reflection, Transparencyはそれぞれ対応すチャンネルのテクスチャを読み込みます。
Colorのテクスチャが無効の場合は、それぞれ対応するチャンネルのテクスチャを読み込みます。
Transparency以外は、テクスチャが反転していると無効になります。
テクスチャのレイヤーは1枚しか扱えません。
♦ 第090125版
VDRファイル経由でLWOファイルを読み込んだとき、VDRの"Position"のパラメータが反映されないバグを修正。
fix: lwo loader.
♦ 第090124版
LWOフォーマットに対応。
addition: support lwo format.
テクスチャはまだ読み込めません。
不具合があるかも知れないので、テスト目的以外でLWOを使うことはまだお勧めしません。
♦ 第090123版
OBJファイルの読み込みで、ポリゴンが"fo"で記述されてても読み込むようにした。
improvement: obj loader.
♦ 第090122版
マテリアルとジオメトリが存在しないシーンを読み込むと落ちるバグを修正。
OBJファイルの読み込みで、MTLファイルの"Ni"の読み込みを抑止していたのを解除。
fix: scene loader.
change: obj loader.
"Ni"はポリゴンの裏側の空間の絶対屈折率として読み込みます。
"Tf"は抑止したままです。
♦ 第090121版
3DSファイルの読み込みで、鈍い鏡面反射のPhong指数をpow(2, shininess*10)からpow(2, shininess*10 + 1)に修正。
fix: 3ds loader.
♦ 第090120版
OBJファイルのfの行の末尾に'\'がある場合に正しく読み込まれないバグを修正。
fix: obj loader.
![]() version 090118 |
![]() version 090120 |
♦ 第090119版
fの値が負のOBJファイルを正しく読み込めないバグを修正。
fix: obj loader.
♦ 第090118版
OBJファイルの読み込みで、MTLファイルの"map_Ks"(鏡面反射マップ)を読み込むようにした。
3DSファイルの"specular"の値を鈍い鏡面反射の重みとして読み込むように変更。
3DSファイルの"specularmap"読み込むようにした。
3DSファイルの"shininess"の値を読み込み、pow(2, shininess*10)で鈍い鏡面反射のPhong指数を決定するようにした。
3DSファイルの"shininesstrength"を鏡面反射の反射率として読み込むようにした。
3DSファイルの"transparency"を読み込むようにした。
3DSファイルの"opacitymap"を読み込むようにした。
improvement: obj loader.
improvement: 3ds loader.
上手く読み込めないものがあったらメールかブログに連絡下さい。
♦ 第090117版
VDRファイルの読み込みで、"Background"があると落ちるバグを修正。
fix: vdr loader.
♦ 第090116版
TIFF画像を読み込むときに落ちるバグを修正。
3DSファイルのカメラの読込でbank(roll)及びnear_rangeに対応。
fix: tiff loader.
improvement: 3ds loader.
♦ 第090115版
3DSファイル読込でカメラの情報を読み込むようにした。
improvement: 3ds loader.
3DSファイルのカメラのパラメータのうち、position, target, lens(fov)に対応しました。
bank(roll)には対応してません。
lensの値は横幅の視野角のようなので、横幅36mmのフィルムを仮定して焦点距離を求めるようにしました。
♦ 第090114版
保存時のファイルダイアログで表示されるデフォルトファイル名を、現在のシーンファイル名と同じにした。
演算精度が足りないせいで三角形が欠けるバグを修正。
improvement: file dialog.
fix: ray-triangle intersection.
♦ 第090113版
3DSファイルの読込で、3DSの鏡面反射の値を元に完全鏡面反射の屈折率を求めるようにした。
improvement: 3ds loader.
♦ 第090112版
3DSファイルの読込で、拡散反射のテクスチャを読み込むようにした。
3DSファイルの読込で、鈍い鏡面反射の反射率を読み込むようにした。
improvement: 3ds loader.
♦ 第090107版
背景画像に照明を合成できるようにした。
addition: background.
|
|
|
| Original Image | Using Background |
Using Background (with Composite Illumination) |
VDRファイルの"Material"の中で"Background 2"を指定するか、
[メニュー]->[シーン(S)]->[マテリアル...]でマテリアルダイアログを開き、[合成用の照明を計算]にチェックを入れることで背景画像に照明を合成できます。
このとき背景は同一ボリューム内の天球光源・平行光源・点光源によって照らされていると仮定して合成用の照明を計算します。
パースを合わせれば写真なんかと合成できるんで面白くなると思います。
♦ 第090105版
NPRで背景画像に完全鏡面反射・屈折による映り込みを合成する場合、正しく出力されないバグを修正。
fix: background.
♦ 第090104版
背景画像に完全鏡面反射・屈折による映り込みを合成できるようにした。
addition: background.
[メニュー]->[アートスタイル(A)]->[背景...]で開いたダイアログにおいて、[映り込みを合成]にチェックを入れると、
チェックを入れたマテリアルに映り込んだ完全鏡面反射・屈折の像を背景画像に合成します。
映り込みの合成は、背景に指定された完全鏡面反射・屈折するマテリアルでのみ有効です。
どうせフォトリアリスティックなレンダリングをするなら実写との合成もできるようにしたいので
そのうち、影や間接照明の合成に対応したいと思います。
♦ 第090103版
背景に指定したマテリアルの輪郭線が描かれるバグを修正。
fix: contour.
♦ 第090102版
発光から完全鏡面反射面のウェイトを除いた。
面光源のデフォルトサンプル数を256に上げた。
change: emission.
change: default parameter.

Perfect Specular Reflection and Emission
発光は完全鏡面反射面の下で起こるようにしました。
♦ 第090101版
透過面が重なっている場合に輪郭線が濃くならないようにした。
サンプル数が足りない場合に輪郭線が濃くならないようにした。
improvement: contour.