Help us understand the problem. What is going on with this article?

Embree3 でレンダラを書くときの tips

最大レイ距離

Embree3 では, 扱える floating point(32bit)の最大が

FLT_LARGE = 1.844E18f;

に設定されています. これは std::numeric_limits<float>::max() よりも小さいので, std::numeric_limits<float>::max() をレイの最大距離に設定していると, まったく交差しないという結果になりますので注意ください.

アルファテクスチャでの透過対応

rtcIntersect したあとにレンダラ側でシェーダとテクスチャを評価してアルファを取得し, アルファがあれば透過マテリアルとしてレイの throughput を減衰してレイの追跡を継続するというのが標準的なやりかたですが, これだといくらか効率が悪いので, intersection filter(交差判定時にカスタムコールバックを仕掛けることができる)で対応することができます.

Embree tutorials の intersection_filter を参考ください.

shadow ray

どこかに当たるか当たらないかだけがわかるのでよければ rtcOccluded を使います. shadow ray の追跡で透過やアルファを含んだ形状を考慮する場合は, 上記 intersection filter で対応するのがよいでしょう.

node visibility

rtcEnableGeometry/rtcDisableGeometry があります. 変更後は rtcCommtiScene が必要になります.

Embree の API は multi thread safe でないようなので, rtcIntesect で追跡するスレッドとは別で rtcEnableGeometryrtcCommitScene を呼ぶとクラッシュします.

インタラクティブレンダリングなどで, レンダリングスレッド(rtcIntersect を呼んでいるスレッド)とシーン編集/描画のスレッドをわけている場合, シーンの変更は一度別途キューにいれておき, アトミックに同期をとってから更新系 API を呼ぶことになります.

ray visibility

ray による visibility(visible from eye ray, visible from specular ray, etc) を対応したい場合は IntersectionFilter を使って実現します.

Multi-hit

subsurface で multi-hit が欲しい場合, rtcOccluded に filter を入れて, filter で N 個までの交差リストを作る感じで対応できる... はず?

参考文献

  • OSPRay
  • Cycles(Embree 対応版)
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away