前回は思いつきでやってみて、途中で放り出した感じでしたが、再度、何が問題なのか切り分けながら検証してみました。
まずはCameraが変な方向向いちゃう件ですが、これは変換すれば大丈夫だろうと思ったものの、アニメーションさせると予期しない状態になってしまったり、どうもBlender自体のFBXエクポートを怪しい感じです。FBXエクスポートのソースなどは見てないのですが、検索してみるとどうやらFBXの出力は色々問題があるみたいです。リライティングだけならとりあえずポジションでればいいからこれは放置。
そして驚きの事実。Blenderのピクセルは負の値を持てない...っぽい。ひょっとすると何か方法があるのかもしれませんが、普通にやると駄目でした。以下に簡単に検証手順を載せておきますので、何かご存知あるいはお気づきの方いらしたら教えてください。
次Blenderからワールド座標を取得する方法ですが、単純にグローバル座標を変換してRGBにしています。ただし前回の記事にも書いた通り、Blenderの座標系がZ = heightなのでその変換を行っています。同じことをMayaでも同時進行で行っています。出力はどちらもOpenEXRで32bit float。それらをNukeに読み込んで検証しています。
まずこれがBlenderでのシェーダーの設定。GeometoryのGlobalを接続しています。座標系の変換のみ行ってます。
こちらがMayaのHyperShade。スクリーンショットだけじゃ全然わかんないですけど、PointWorldをOutColorに接続しているだけです。
レンダリング結果。ちょっとカメラアングルがずれてるのはご容赦を。誤差はあるものの画面出力はほぼ同じ結果のように見えます。
で、これらをNukeに読み込んでピクセル値をPointCloudで3D表示してみると...Blenderでは負の値がすべて「0」になってしまっているので、このような切断状態に。
当たり前ですがMayaから出力したものはちゃんと負の値も持ってますので、きちんと表示されます。
というわけでBlenderはピクセルに負の値を格納できない仕様(みたい)という結論になりましたが...じゃあ、BlenderはHDRとしてのOpenEXR出力も怪しいってことになりますね。
もう1回くらい続く...かも。
[関連記事]