개체 (예 : 비행기)를 구형 표면에 투영하는 데 문제가 있습니다.구면 매핑
셰이더는 꼭지점 로컬 위치 (P0)를 가져 와서 좌표를 월드 좌표 (P1)로 변환 한 다음 주어진 중심 (C)에서 P1 (P1 - C)까지 벡터를 찾아야합니다. 그래서이 벡터를 정규화하고 주어진 계수로 곱하고 마지막으로 다시 로컬 좌표로 변환하십시오.
나는 표면 쉐이더와 유니티에서 일하고 있어요
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
}
}
이제 문제는 내가이 쉐이더와 비행기들을 현장에서, 그들은 분할 및 훨씬 더 작은 볼 것을 그들이 생각하는 그 무엇 되려고. 어떤 아이디어? 여기
편집 스크린 샷이다 :
는 유니티에서 입력 및 출력 객체 스냅을 게시 할 수 있어야한다? –