基本的に、ソフトウェアコンポーネント、特に3Dモデリングカーネルを使用する場合、2つの優先事項があります。
- 自分がやりたいこと、必要なことをやってくれるか?
- 実用的に十分な速度が出ているか?
3D ACIS Modelerの開発者として、私はどうすれば3D ACIS Modelerをより速く、同時により正確にすることができるかを考えることに多くの時間を費やしています。従来の常識では、速さのために正確さを妥協しようとする人は、しばしば笑われます。数学的に正しい答えがあれば、それは常にあなたが得るべきものです。
一方で、演算が遅すぎると使い物にならないという点もあります。たとえば、球をファセットするのに2時間かかったファセットアルゴリズムは、ほとんど役に立たないでしょう。インタラクティブなアプリケーションは、この考えをさらに推し進めます。エンドユーザーが画面上でマウスをドラッグするたびにAPIを呼び出す場合は、APIの速度によってフレームレートが制限されます。10fpsを実現するには、APIにかかる時間を0.1秒以下にする必要があります。 現在のコンピュータの能力をもってすれば、CADアプリケーションは驚くようなことができます。(例:SpaceClaim Corporation社のプル操作)ACISはお客様に支えられています。このブログは、R25でMatthiasと私が行っている、エンティティ-エンティティ間の距離をインタラクティブにするプロジェクトがきっかけとなっています。
では、3Dをもっとインタラクティブにするにはどうしたらいいのでしょうか? 私はいくつかのアイデアを持っていますが、あなたのアイデアも是非お聞かせください。
- 基本的なアルゴリズムは最適でなければなりません。
- それを避けることが不可能でない限り、O(n-squared)以下はありません。
- 繰り返し行われているコストのかかる作業はありませんか?
- 適切な質問を行う。
- 1回のマウス操作での作業量が少なくて済むのであれば、そうする。
- 可能であれば、事前計算/記憶する。
- 遅くなるものは何でもマルチスレッドにする。
- 可能な限り、スタティック変数やグローバル変数を避ける。
- スレッドセーフなACISを利用する。
- 貪欲に最適化する
- ボトルネックが何であるかを見つけ、そこに注意を向けるためのプロファイル
- 怠惰なプログラム
- 運用コストが高ければ高いほど、常に行うのではなく、日和見的に行うことでより多くの利益を得ることができる。