izhoudiniTweetどうも篠島です。エンジンについて説明したいと思います。比べて非常に単純で、カメラからプライマリレイを放ち、オブジェクトに当たったところでシェーダーの計算をし、次にどこにセカンダリレイを飛ばすかを決定します。セカンダリレイが他のオブジェクトに当たると、そこでそのオブジェクトのシェーダーを呼び出して色を計算します。この様に各セカンダリレイの結果を集め、全てのサンプルの結果をブレンドして最終的なピクセルの色にします。使って屈折の表現も容易に行うことができます。設定によりこれらのレイが何回シーン内をバウンス(反射)できるかを設定することもできます。一つのピクセルに対して9本放ちます。設定により複数のセカンダリレイを若干異なる方向へ飛ばします。値になるまでレイを飛ばします。デフォルトの設定での比較です。見て分かる通りサンプル数が少ないとノイズだらけになってしまいます。チューニングしてレンダリング速度アップさせたい場合は、飛ばすレイの数と許容できるノイズレベルの調整になってくるのですが、実際モーションブラーだったりエリアライトを使うとその分サンプルも増えてレンダリングが遅くなってしまいます。シーン内のシェーダーを確認して、反射の設定が0.01とか、微妙に映り込むけど殆ど視認出来ないような場合は、いっその事反射を無しにして飛ばすレイの数を減らせばレンダリング時間を短縮できます。レイがジオメトリに当たった場所でシェーダーの計算が行われますが、その時ジオメトリに割り当てられたシェーダーによって挙動が大きく異なります。シェーダーを使ってしまうと嫌でも物理的に正しい計算が行われます(レイを飛ばす方向をコントロールできない)。BSDFについては過去の記事を参照してください。使わないシェーダーを使うとします。あり、各ライトに対してどの様な処理を行うかを自分でカスタマイズする事ができます。VOPで自分の好きな方向にレイを飛ばして、レイが当たった先のオブジェクトのシェーダーを評価してその色を取ってくる等、自由にセカンダリレイの振る舞いをカスタマイズできるわけです。あれば、反射、屈折などの表現はできません。しても反射ができてしまいます。ジオメトリに割り当てられたシェーダーがレイをどこに飛ばすかを定義しているためです。エンジンを使ったとしても、シェーダーでレイトレースするように設定がされている為に反射や屈折の表現ができます。レイトレースを使わないという事ではなく、デフォルトでマイクロポリゴンとレイトレースのハイブリッドの様になっています。前回の記事でタイル内に含まれるジオメトリだけを読み込む為にメモリが節約できると書きましたが、実は反射や屈折を表現するために、シェーダーの中でレイトレースするような設定がされている場合、レイを飛ばした時にジオメトリに当たることができるように、シーン内のジオメトリをカメラ内に入っているかどうかに関わらずメモリ内にロードしなくてはなりません。最近のシェーダーだと反射とか普通にあるので、結局ジオメトリをメモリにロードしなければならず、タイル内だけのジオメトリを読み込んでメモリ節約とはならないケースが多いです。カメラ内にオブジェクトが有り、カメラ外に数千万ポリゴンの高解像度のジオメトリがあるとします(あまりにもポリゴン数が多いためバウンディングボックス表示にしています)。してレンダリングした結果です。反射があると周りのジオメトリがメモリに読み込まれるために、レンダリング時に使用されるメモリが増加するのが分かるかと思います。これは反射だけではなく全てのレイに言えることで、例えばライトがカメラの外側にあり、何かしらのジオメトリがライトを遮っている場合、影を落とすためにそのジオメトリもメモリにロードされます。サンプリングには下のような違いがあります。マイクロポリゴンの頂点だけにシェーダーの計算がされますが、RayTracingではレイがヒットした場所でシェーダーが計算されます。処理には時間がかかる事になります。実際のシーンだとジオメトリの数が大量にあったりしてマイクロポリゴン数が多くなり、無駄なシェーディング計算も増えてしまうので、そこまで神経質になる必要はありません。求める絵の質感、速度が得られる方のレンダリングエンジンを使うといいと思います。Inc.の商標または登録商標です。他のすべてのブランド名、製品名、および商標はそれぞれの所有者に帰属します。当サイトは株式会社インディゾーンが運営しています。