Zgaduję z twojego postu, że masz się dobrze z geometrią?
W przypadku automatycznego mapowania w ogólnym przypadku, Twoje spostrzeżenie jest dobrym pomysłem - zacznij od każdego wierzchołka i podążaj jego normalnym kierunkiem na zewnątrz, aż trafisz na dobrze zdefiniowany zewnętrzny prymityw, a następnie skopiuj z niego położenie tekstury.
W tym przypadku prawdopodobnie kluczem jest sposób generowania geometrii. Jeśli robisz coś takiego, jak tworzenie 8 pierścieni z 16 punktów, efektywnie iterując wokół jednego okręgu w zewnętrznej pętli, a drugiego w wewnętrznej pętli, możesz jednocześnie iterować u i v, aby uzyskać mapowanie. Dostajesz nieregularne wielokąty i mapowanie staje się kłopotliwe na biegunach, ale obszar wokół którego twarz będzie działał całkiem dobrze.
Aby uzyskać bardziej równomierny rozmiar wielokąta i rzetelne odwzorowanie we wszystkich obszarach, należy rozpocząć od nadmiernie tesselowanego sześcianu (np. Siatka o kwadratach 8x8 na powierzchnię zamiast jednego) i odwzorować współrzędne tekstury w dowolnym znaczący sposób. Myśl kategoriami sieci sześcianu. Następnie zdeformuj sześcian w kuli, wykonując wektor od środka do każdego punktu i przesuwając punkt tak, aby był promieniem kuli od środka. Na koniec, zdeformuj kulę w owal poprzez różne skalowanie różnych osi.