もうちょっと真面目な光線追跡 [光線追跡エンジンを作る]
こないだ書いたようにある有名な光学設計ソフトが使えなくなった。僕は多群ズームなんか設計しないので、ほとんど使わないんだけど、仕事をする上で光線追跡して設計を評価することは必要になる。しかしその光学設計ソフトが使えていたこれまででもお客さんから「読めるデータを寄越せ」と言われたときに使っただけで、自分用にはずっと前Mathematicaで書いたのを必要になるたびごとに手を入れながら使うほうが多かった。
それはなぜかというと、汎用ソフトは僕にとって余計な機能ばっかりで痒いところに手が届きにくいのと、とくに評価結果をグラフにするときに、決まった形式でしか描けなくて一番的確な表現にならないのがもどかしいから。見慣れた人は複数枚のグラフから言いたいことを読み取れるんだろうけど、一枚に描いた方がわかりやすいのにそうならない、なんてことがある。そのプロットもビットマップしか出力できなくて見苦しい、というのもある。ようするにもともと気に入らなかった、ということなんだろうな、結局。
ところが、最近たくさん光線を飛ばさないといけない仕事ができた。Mathematicaに書いたのはマルチカーネルを意識せずに書いたので、非常に遅い。今からマルチに書き換えたとしてもせいぜいコア数倍になるだけで、1桁2桁速くするのは難しい。またどこでも実行できるわけではない。
ずっと前計画していたObjective-C版は作っただけでほったらかしになっていた。なぜかというと、Mathematicaには表示のためのグラフィクス描画機能や、数値計算のための関数が揃っていて、書き足すものは少なくてすむけど、Ojbective-Cで書いた光線追跡エンジンだけでは、その他にたくさんのものを書かないと使えないからである。
どのみち僕が使えればいいだけなので、勉強を兼ねてSwiftでやろうという気になってきた。また例によって収束するかどうかわからない「車輪の再発明」を始めようと考えはじめた...
それはなぜかというと、汎用ソフトは僕にとって余計な機能ばっかりで痒いところに手が届きにくいのと、とくに評価結果をグラフにするときに、決まった形式でしか描けなくて一番的確な表現にならないのがもどかしいから。見慣れた人は複数枚のグラフから言いたいことを読み取れるんだろうけど、一枚に描いた方がわかりやすいのにそうならない、なんてことがある。そのプロットもビットマップしか出力できなくて見苦しい、というのもある。ようするにもともと気に入らなかった、ということなんだろうな、結局。
ところが、最近たくさん光線を飛ばさないといけない仕事ができた。Mathematicaに書いたのはマルチカーネルを意識せずに書いたので、非常に遅い。今からマルチに書き換えたとしてもせいぜいコア数倍になるだけで、1桁2桁速くするのは難しい。またどこでも実行できるわけではない。
ずっと前計画していたObjective-C版は作っただけでほったらかしになっていた。なぜかというと、Mathematicaには表示のためのグラフィクス描画機能や、数値計算のための関数が揃っていて、書き足すものは少なくてすむけど、Ojbective-Cで書いた光線追跡エンジンだけでは、その他にたくさんのものを書かないと使えないからである。
どのみち僕が使えればいいだけなので、勉強を兼ねてSwiftでやろうという気になってきた。また例によって収束するかどうかわからない「車輪の再発明」を始めようと考えはじめた...