2017-05-12 27 views
0

私はレンダラでIntel Embreeを使用することを考えており、現在Embreeのチュートリアルで遊んでいます。API経由で、またはプロジェクトのソースコード経由で、Intel Embreeを使用する必要がありますか?

したがって、問題は、APIを使用して効率的にインテルのエンブレを使用することができるということですか?

つまり、<embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.cの機能は、RTCRayのような内部データ構造を使用しています。 明らかに、私はすべての演算子をオーバーロードすることができないので、私は常にデータ構造をEmbreeデータ構造にキャストしなければならず、その逆もあります。 これは単なる型キャストではなく、新しいオブジェクトの構築です。

たとえば、rtcIntersect(RTCScene scene, RTCRay ray);を呼び出す前に、RayクラスオブジェクトからRTCRay rayを作成し、関数がデータを返すときに、いくつかの値をコピーします。

Intel Embreeを使用するのは良い方法のようには見えません。

+0

あなたのクラスにRTCRayが含まれているか、継承していないのはなぜですか? –

答えて

1

RTCRayを構築し、rtcIntersectを使用してデータをコピーして戻します。レイ・トラバースおよびプリミティブ交差と比較して、オーバーヘッドは無視できる(< 0.5%)。

コロナレンダリングはRTCRayを内部的に使用しているので、0.5%のオーバーヘッドが節約されると思います。

私は、V-RayがRTCRayを正確に構築し、rtcIntersectを使用してデータを元に戻すことを知っています。

一般的なアドバイス:早すぎる最適化は避けてください。作業コードを実装し、プロファイラを使用して最適化をガイドします。

1

私は、あらかじめ構築されたバイナリからAPIを直接使用しました。欠点は、機能するベクトルや行列の機能がないことです。しかし、それはあなたが望む他のライブラリを使うことができるということを意味しています。私はオープンソースの単一ヘッダファイルlinalg.hを使い、物事を単純にしました。

私のEmbreeTestプロジェクトには、Main.cppというファイルが1つあります。ちょうどEmbree installerを使用すれば、それだけで十分です。

効率性に関しては、このプロジェクトを開始する場合、パフォーマンスのボトルネックがあるかどうかを確認することができます。ほとんどの場合、Embreeを呼び出すだけです。レイキャストメソッドは、私が計算したレイorgとdirをスタック上のRTCRay構造体にコピーするだけです。私はこれがオーバーヘッドの大部分とは思わない。一度に複数の光線をキャストする再構成は、コピーよりもパフォーマンスに大きな違いをもたらします。

関連する問題