シェイダーを使用して2次元の「偽の惑星」エフェクトを作成しようとしていましたが、その結果はうまくいかないものです。Unity 2D Planet/Curved World Shader
void vert(inout appdata_full v)
{
//Get vertex world coordinates
float4 worldV = mul(unity_ObjectToWorld, v.vertex);
//Get target coordinates relative to vertex world
worldV.xyz -= _TargetPos.xyz;
//Transform vertex based on x distance from target
worldV = float4(0.0f, (worldV.x * worldV.x) * -_Curvature, 0.0f, 0.0f);
//Add this offset to vertex
v.vertex += mul(unity_WorldToObject, worldV);
}
上記のコードは、私はこの効果を生成するために使用していた頂点の関数であるが、それは唯一のプレーヤーのXに基づいて、Y上の頂点を相殺するので、画面の端の近くに歪みを生じさせます。すべての垂直線が完全に垂直にとどまるので、それは外に見えます。
私はそれがやりたいことは、それはより多くの惑星のように見せることです。
しかし、私はこのことについて行くだろうかどうかはわかりません。
EDIT:私はこれを理解するために時間しようとしている、と私はそれを考え出したと思った:
。
しかし、これは機能しませんでした。レベルはちょうど曲がりくねっていて、無作為な場所に浸かっているようでした
あなたの答えをありがとうが、あなたが私の質問を完全に読んだかどうかはわかりません。あなたが私に示したコードは、基本的に私が既に試したものとして投稿したものです。ちょうど余分なz軸とオフセットがあります。 私が達成しようとしていることがほとんど不可能と思えるほど十分に機能するので、それは重要ではないと思います。 – Jack
申し訳ありませんが、私のせいです。フラットな世界から湾曲した世界への変化する法線の依存関係を理解してから、 を "地球の中心" – Krajca