Differentiable Renderer (Mitsuba2)

ここ数年、(主観ではあるが)微分可能レンダリング(Differentiable Rendering)の研究が流行っているように思う。有名どころだと、以下のものがあるかと思う。(専門家ではないので色々と取りこぼしがあると思う)

また、Neural 3D Mesh Rendererの著者がDifferentiable Renderingに関するサーベイ論文をarXivにアップしている。
さらに、Modular Primitives for High-Performance Differentiable Rendering (nvdiffrast)の論文では、いくつかのアルゴリズムの特徴を分かりやすい表でまとめてあるのでとても参考になる。
Modular Primitives for High-Performance Differentiable Renderingより引用


Differentiable Renderingを用いることで、パラメータで表現されるシーンから2Dの画像を生成し、生成された画像と目標とする画像との差分を取り、誤差を逆伝搬させることでパラメータを更新する、といったことが可能となる。ただ、画像からレンダリングのパラメータを求める問題はインバースレンダリングとして、古くから取り組まれている。Differentiable Renderingの研究は、レンダリングプロセス全体を微分可能にし、勾配計算による最適化を可能にしたことが主なポイントになっている(たぶん。。。)。

今回は、色々と提案されているDifferentiable Renderingのアルゴリズムの中でも、発表前から注目度の高かったMitsuba2を少し触ってみたので、そのメモのための記事を書いてみる。Mitsuba2に関しては、pytorchとの連携もしやすくなっており、Deep Learningとの相性もよさそう。
Mitsuba2の環境構築については、基本的に以下の記事に書いてある手順に従うだけで簡単に構築できた。
以下は、examplesにある10_inverse_renderingをベースにモデルのuvテクスチャとenvironment mapを最適化した結果。Rendering結果に関してはTargetの画像に近づいておりうまくいっているように見えるが、1枚の画像から光源と顔のマテリアルを分離するのは難しいようで、推定される顔のテクスチャはあまりクオリティが高くない。実際に利用する際には、何らかの制約を導入してやってうまく分離する必要があるんだろうなぁ。


コメント

このブログの人気の投稿

COLMAPでキャリブレーション済みのデータを使う

5点アルゴリズムによるカメラ位置・姿勢の推定

2D-3D対応からのカメラ位置・姿勢の推定