もうちょっと真面目な光線追跡 - その2 [光線追跡エンジンを作る]
去年始めたものの、Bezier近似に割り込まれたので忘れていたSwiftによる光線追跡エンジンの続き。Objective-CではなくSwiftで実装するにあたって気になることがあって、設計から離れて考えてみたいことがある。Objective-CからSwiftに移ってきた人はみんな悩むんじゃないか、と思う、あるオブジェクトをclassにするかstructにするか、ということ。Webにはわかりやすく説明してくれているサイトがいっぱいあって、値型/参照型、継承可/不可などの違いがあることがわかる。僕はMulti-threadに対しての有利不利について考えてみる....
もうちょっと真面目な光線追跡 [光線追跡エンジンを作る]
こないだ書いたようにある有名な光学設計ソフトが使えなくなった。僕は多群ズームなんか設計しないので、ほとんど使わないんだけど、仕事をする上で光線追跡して設計を評価することは必要になる。しかしその光学設計ソフトが使えていたこれまででもお客さんから「読めるデータを寄越せ」と言われたときに使っただけで、自分用にはずっと前Mathematicaで書いたのを必要になるたびごとに手を入れながら使うほうが多かった。
それはなぜかというと、汎用ソフトは僕にとって余計な機能ばっかりで痒いところに手が届きにくいのと、とくに評価結果をグラフにするときに、決まった形式でしか描けなくて一番的確な表現にならないのがもどかしいから。見慣れた人は複数枚のグラフから言いたいことを読み取れるんだろうけど、一枚に描いた方がわかりやすいのにそうならない、なんてことがある。そのプロットもビットマップしか出力できなくて見苦しい、というのもある。ようするにもともと気に入らなかった、ということなんだろうな、結局。
ところが、最近たくさん光線を飛ばさないといけない仕事ができた。Mathematicaに書いたのはマルチカーネルを意識せずに書いたので、非常に遅い。今からマルチに書き換えたとしてもせいぜいコア数倍になるだけで、1桁2桁速くするのは難しい。またどこでも実行できるわけではない。
ずっと前計画していたObjective-C版は作っただけでほったらかしになっていた。なぜかというと、Mathematicaには表示のためのグラフィクス描画機能や、数値計算のための関数が揃っていて、書き足すものは少なくてすむけど、Ojbective-Cで書いた光線追跡エンジンだけでは、その他にたくさんのものを書かないと使えないからである。
どのみち僕が使えればいいだけなので、勉強を兼ねてSwiftでやろうという気になってきた。また例によって収束するかどうかわからない「車輪の再発明」を始めようと考えはじめた...
それはなぜかというと、汎用ソフトは僕にとって余計な機能ばっかりで痒いところに手が届きにくいのと、とくに評価結果をグラフにするときに、決まった形式でしか描けなくて一番的確な表現にならないのがもどかしいから。見慣れた人は複数枚のグラフから言いたいことを読み取れるんだろうけど、一枚に描いた方がわかりやすいのにそうならない、なんてことがある。そのプロットもビットマップしか出力できなくて見苦しい、というのもある。ようするにもともと気に入らなかった、ということなんだろうな、結局。
ところが、最近たくさん光線を飛ばさないといけない仕事ができた。Mathematicaに書いたのはマルチカーネルを意識せずに書いたので、非常に遅い。今からマルチに書き換えたとしてもせいぜいコア数倍になるだけで、1桁2桁速くするのは難しい。またどこでも実行できるわけではない。
ずっと前計画していたObjective-C版は作っただけでほったらかしになっていた。なぜかというと、Mathematicaには表示のためのグラフィクス描画機能や、数値計算のための関数が揃っていて、書き足すものは少なくてすむけど、Ojbective-Cで書いた光線追跡エンジンだけでは、その他にたくさんのものを書かないと使えないからである。
どのみち僕が使えればいいだけなので、勉強を兼ねてSwiftでやろうという気になってきた。また例によって収束するかどうかわからない「車輪の再発明」を始めようと考えはじめた...
厳密な光線追跡 - その23 [光線追跡エンジンを作る]
前回まででMathemaitcaパッケージの形に光線追跡の基本的な部分はとりあえずはできたんだけど、イマイチ気に入らない。いちおうオブジェクト指向風、というかMac OS XのCore Foundation風に書くことはできて、比較的シンプルなコードにはなった。
どこが気に入らないかと言うと、
どこが気に入らないかと言うと、
- まだシンプルさが足りなくて、ごちゃごちゃしているところがある
- 実行効率が悪い
厳密な光線追跡 - その22 [光線追跡エンジンを作る]
なんだかいつものように、ちんたらしたペースになってる光線追跡エンジンをMathematicaに実装する話の続き。
前回まででMathematicaパッケージのメカニズムをしてきた。今日はそのまとめとして、なるべく簡単にパッケージを作る、という話と、それで実際にどうなるのか、という話。
次回はこのシリーズの最終回としてオブジェクト指向風にMathematicaで実装した光線追跡エンジンのパッケージをここで披露したい。忘れなければ。
前回まででMathematicaパッケージのメカニズムをしてきた。今日はそのまとめとして、なるべく簡単にパッケージを作る、という話と、それで実際にどうなるのか、という話。
次回はこのシリーズの最終回としてオブジェクト指向風にMathematicaで実装した光線追跡エンジンのパッケージをここで披露したい。忘れなければ。
厳密な光線追跡 - その20 [光線追跡エンジンを作る]
Mathematicaに光線追跡エンジンを書くという話の続き。Mathematicaでオブジェクト指向の基礎を実装する話をしたので、それをフレームワークのようにまとめるためのMathematicaパッケージのメカニズムと具体的な実装方法の話。前回Mathematicaコンテクストのメカニズムを簡単に整理した。今日からMathematicaパッケージを作る方法について。
厳密な光線追跡 - その18 [光線追跡エンジンを作る]
なかなか進まないMathematicaによる光線追跡エンジンの実装。前回、使い回しするつもりのMathematicaコードはパッケージとしてまとめておいたほうがいい、ということになった。Mathematicaのパッケージの作り方をまとめる前に、Mathematicaのコンテクストについて整理しないといけない。