Differentiable Renderer (Mitsuba2)
ここ数年、(主観ではあるが)微分可能レンダリング(Differentiable Rendering)の研究が流行っているように思う。有名どころだと、以下のものがあるかと思う。(専門家ではないので色々と取りこぼしがあると思う)
- Neural 3D Mesh Renderer (CVPR2018)
- Differentiable Monte Carlo Ray Tracing through Edge Sampling (ACM ToG2018)
- Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning (ICCV2019)
- Mitsuba 2: A Retargetable Forward and Inverse Renderer (ACM ToG2019)
- SDFDiff: Differentiable Rendering of Signed Distance Fields for 3D Shape Optimization (CVPR2020)
- Modular Primitives for High-Performance Differentiable Rendering (ACM ToG2020)
また、Neural 3D Mesh Rendererの著者がDifferentiable Renderingに関するサーベイ論文をarXivにアップしている。
さらに、Modular Primitives for High-Performance Differentiable Rendering (nvdiffrast)の論文では、いくつかのアルゴリズムの特徴を分かりやすい表でまとめてあるのでとても参考になる。
Differentiable Renderingを用いることで、パラメータで表現されるシーンから2Dの画像を生成し、生成された画像と目標とする画像との差分を取り、誤差を逆伝搬させることでパラメータを更新する、といったことが可能となる。ただ、画像からレンダリングのパラメータを求める問題はインバースレンダリングとして、古くから取り組まれている。Differentiable Renderingの研究は、レンダリングプロセス全体を微分可能にし、勾配計算による最適化を可能にしたことが主なポイントになっている(たぶん。。。)。
今回は、色々と提案されているDifferentiable Renderingのアルゴリズムの中でも、発表前から注目度の高かったMitsuba2を少し触ってみたので、そのメモのための記事を書いてみる。Mitsuba2に関しては、pytorchとの連携もしやすくなっており、Deep Learningとの相性もよさそう。
Mitsuba2の環境構築については、基本的に以下の記事に書いてある手順に従うだけで簡単に構築できた。
以下は、examplesにある10_inverse_renderingをベースにモデルのuvテクスチャとenvironment mapを最適化した結果。Rendering結果に関してはTargetの画像に近づいておりうまくいっているように見えるが、1枚の画像から光源と顔のマテリアルを分離するのは難しいようで、推定される顔のテクスチャはあまりクオリティが高くない。実際に利用する際には、何らかの制約を導入してやってうまく分離する必要があるんだろうなぁ。
コメント
コメントを投稿