環境
Unity2021.3.4f1
概要
フルスクリーンでRayMarchingをやってみました。
この10個のメタボールからなる形状とその影はRayMarchingで描画しています。黄色の床はUnityのPlaneのGameObjectです。
「3D Objects > Quad」でQuadを作成して、カメラの階層に置き、このシェーダのマテリアルを設定すれば動作すると思います。
Clusterのワールドクラフトで実装してみました。
Clusterでは自作スクリプトを動作させることができないのでシェーダで全部やっています。
デスクトップ版でしか試してないのでVRだとまともに見えないかも知れません。
ここに全コード記載しています。
頂点シェーダでは以下で視錐台(ニアクリップ面)のコーナーのワールド座標を求めています。
float4 posWS = mul(inverse(UNITY_MATRIX_VP), o_pos);
影の描画パスのためにカメラ位置も同じような感じで求めています。_WorldSpaceCameraPosは使用していません。
inline float3 GetCameraPos()
{
//_WorldSpaceCameraPosを使用しない
//影描画の時はカメラ位置はライト位置になってほしい為
float3 cpos = mul(inverse(UNITY_MATRIX_V), float4(0, 0, 0, 1)).xyz;
return cpos;
}
参考