Sunday, November 13, 2022

クソ凡ミス テキストのエンコード

 本当にクソみたいなミスで一日中コードを読み直したり、リファレンスを読んだりしたので、メモ。

何かと話題になるinverse renderingですが、実装をゼロからするのは面倒なのでだいたいは既存のツールに乗っかります。そのツールでちまたで話題なのが、Mitsuba3です。これはレンダラーで、使い方は難しくないし、チュートリアルもあるので、少しの苦労で、目的のことが達成できます。

私も、皆様と同じで楽して実験するために、チュートリアルを進めていましたが、下のリンクのチュートリアルであるRadiance Field Reconstruction (NeRF-like)で、なんか見たことのないエラーがでてきました。

https://mitsuba.readthedocs.io/en/stable/src/inverse_rendering/radiance_field_reconstruction.html

チュートリアルの読み方は、文章読んで、pyファイルにコードをコピペすれば、記された通りの挙動になるはずですが、私の環境では[6]のdef sampleの引数にあるδLでエラーが出ました。

ここに「SyntaxError: Non-UTF-8 code starting with '\x83' 」とあり、読んだ通りエンコードのエラーらしく、ん?という感じでしたが、よくわからんのでググるとUTF-8でファイルを保存すると通るらしいです。簡単なことのはずですが、Visual studioではどこで操作するのかわかりにくいです。

メニューから file -> save asで表示されるウィンドウで、Saveというボタンを押さずに、その横にある逆三角形をクリックします。すると下のような選択肢がちょろっと出てきます。そこで、Save with Encodingをクリックすると、文字コードが選べるようになります。

こんなことは、やったことないと知らないので、いたるところで文字コードの設定ができていいかなと思ったりします。文字コードの選択は下のウィンドウ内でします。ここではUTF-8と書いてあるものを選びます。

デフォルト状態では、Shift-JISだったようで、その下にあるUnicode UTF-8というのを選択するだけでした。あとは保存するだけで、目的の文字コードの選択が完了です。

実行すると、このように、Radiance Field Reconstructionができました。

これから、この辺を少し触っていこうと思います。

余談ですが、エラーが出ていた[6]のdef sampleという関数を調べてみると、下のリファレンスでは、δLではなく、δが付いていないLが引数になっていて、少しだけ混乱しました。文字コードのエラーが出たあとに、試しにLで関数のオーバーロードとかしてみました。結果、全然見当違いだったので、sampleにLなんぞ無いというエラーが出て死にました。

https://mitsuba.readthedocs.io/en/stable/src/api_reference.html#mitsuba.ad.common.ADIntegrator.sample

ま、今回で、文字コードのたぐいのエラーのでかたがわかったので、同じようにハマっている人がいたら、教えることができるようになりました。

No comments: