Ich habe Probleme, Objekte (z. B. eine Ebene) auf eine sphärische Oberfläche zu projizieren.Spherical Mapping
Der Shader muss nur die lokale Scheitelposition (P0) übernehmen, in Weltkoordinaten (P1) umrechnen und dann den Vektor von einem gegebenen Zentrum (C) zu P1 (P1 - C) finden. Normalisieren Sie diesen Vektor und multiplizieren Sie ihn mit einem gegebenen Koeffizienten und konvertieren Sie ihn zurück in lokale Koordinaten.
Ich arbeite in der Einheit mit der Oberfläche Shadern
Shader "Custom/testShader" {
Properties {
_MainTex("texture", 2D) = "white" {}
_Center("the given center", Vector) = (0,0,0)
_Height("the given coefficient", Range(1, 1000) = 10
}
Subshader {
CGPROGRAM
#pragma surface surf Standard vertex:vert
sampler2D _MainTex;
float3 _Center;
float _Height;
struct Input { float2 uv_MainTex; }
// IMPORTANT STUFF
void vert (inout appdata_full v) {
float3 world_vertex = mul(unity_ObjectToWorld, v.vertex) - _Center;
world_vertex = normalize(world_vertex) * _Height;
v.vertex = mul(unity_WorldToObject, world_vertex);
}
// END OF IMPORTANT STUFF
void surf (Input IN, inout SurfaceOutputStandard o) {
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
}
ENDCG
}
}
Das Problem ist jetzt in der Szene, dass, wo ich einige Flugzeuge mit diesem Shader haben, sehen sie aus Split und vieles mehr wenig das, was sie eigentlich sein. Irgendwelche Ideen?
EDIT
Hier sind einige Screenshots:
sein Können Sie Schnappschüsse Ihrer Eingabe und Ausgabe von Objekten aus Unity schreiben? –