カメラ相対レンダリング
カメラ相対レンダリングでは、HD レンダーパイプライン (HDRP) で、ビルトインレンダーパイプラインに比べて、遠くのゲームオブジェクトをより安定した数値的に信頼できる方法でレンダリングできます。
浮動小数点の絶対的精度は、数値が大きくなるにつれて低下します。つまり、ゲームオブジェクトの座標は、ゲームオブジェクトがシーンの原点から離れるにしたがって、徐々に正確性を失うという意味です。互いに近接するゲームオブジェクトのメッシュフェイスは、同じ場所に表示され、Z ファイティングするアーティファクトが生じる場合があります。この問題を解決するために、カメラ相対レンダリングがワールド起源をカメラ位置に置き換えます。
カメラ相対レンダリングの使用
カメラ相対レンダリングは、ShaderConfig.cs ファイル (プロジェクトウィンドウから Packages > High Definition RP Config > Runtime > ShaderLibrary* に移動し、ShaderConfig.cs** をクリック) で、デフォルトで有効です。この機能を無効にするには、CameraRelativeRendering
を 0
に設定してから Shader include を生成し、ShaderConfig.cs.hlsl ファイルを更新します (メニュー: Edit > Render Pipeline に移動し、Generate Shader Includes をクリック)。
カメラ相対レンダリングの仕組み
カメラ相対レンダリングプロセスは、他のジオメトリの変換が影響を与える前に、ゲームオブジェクトと光を否定されたワールド空間のカメラ位置によって、解読します。その後、ワールド空間のカメラ位置を0に設定し、関連するすべての指標値を適切に修正します。
プレビルド HDRP シェーダーのソースファイルを表示する場合、ビューおよびビュープロジェクションの指標値は、光および表面位置とともにカメラ相対です。HDRP シェーダーのほとんどのワールド空間もまた、カメラ相対です。
例外: _WorldSpaceCameraPos
は HDRP が座標スペース変換に使用するため、カメラ相対レンダリングにはなりません。
例
カメラ相対レンダリングが有効な場合
GetAbsolutePositionWS(PositionInputs.positionWS)
は非カメラ相対ワールド空間の位置を返します。GetAbsolutePositionWS(float3(0, 0, 0))
は_WorldSpaceCameraPos
と同等のワールド空間の位置を返します。GetCameraRelativePositionWS(_WorldSpaceCameraPos)
はfloat3(0, 0, 0)
を返します。
カメラ相対レンダリングが無効な場合
GetAbsolutePositionWS()
およびGetCameraRelativePositionWS()
は修正なしで入る位置を返します。