W moim projekcie tworzę system do deformowania bardzo szczegółowej siatki (odzieży), aby „pasowała” do wypukłej siatki. Aby to zrobić, używam map głębokości przedmiotu i „kadłuba”, aby określić, w którym punkcie przestrzeni świata występuje odchylenie i zasięg.
Po prostu przekształcenie wszystkich zasłoniętych wierzchołków na głębokości określone przez „kadłub” jest dość skuteczne i ma dobrą wydajność, ale cierpi z powodu problemu nie zachowania cech siatki i wymaga obszernego wyrównywania, aby uniknąć fałszywych trafień.
Zamiast tego chciałbym wygenerować z mapy odchyleń głębokości zestaw prostych „odkształcaczy”, które „wypchną” * wszystkie wierzchołki zdeformowanej siatki na zewnątrz (w przestrzeni świata). W ten sposób wszystkie cechy siatki zostają zachowane i nie ma potrzeby posiadania złożonej heurystyki, aby wyrównać niewłaściwe wierzchołki.
Nie jestem jednak pewien, jak przejść do generowania tego zestawu deformatorów. Wyobrażam sobie coś w rodzaju algorytmu, który próbuje dopasować sferyczną powierzchnię do każdej łaty przylegających odchyleń w określonym zakresie, ale nie wiem od czego zacząć.
Czy ktoś może zasugerować odpowiedni filtr lub algorytm do generowania deformatorów? Lub inaczej mówiąc „kompresowanie” mapy głębokości?
(* Wciśnij, ponieważ dopasowuje się do wypukłego, „grubego” humanoida, więc transformacje prawdopodobnie będą „kuliste” z POV powierzchni.)
Edycja: Oto słusznie zasugerowany obraz / schemat, który ilustruje to, co próbuję osiągnąć.
Powinienem też powiedzieć, że odkąd to pytanie zostało opublikowane, pracowałem o wiele więcej nad tym problemem i chociaż nigdy nie rozwiązałem problemu z uzyskaniem deformatorów, ostatecznie zdecydowałem, że mapy głębokości do tego celu są nieodpowiednie:
- Jeśli zdeformowane oczek nie jest kompletna, to jest możliwe, aby uzyskać teksele w mapie, które oznaczało, aby być po drugiej stronie wypukłej mesh (ponieważ nie są one zasłonięte przez te bliżej kamery na właściwej stronie).
- Wydajność nie była tak wysoka, jak się spodziewałem, ponieważ na odkształcenie potrzebnych było 6 map.
Nie dlatego, że były one nierozwiązywalne, ale inne rozwiązanie, które obejmowało testowanie kolizji w jądrach działających na GPU, skutkowało wyższą jakością wyników i było znacznie prostsze, chociaż może nie być tak szybkie.
Nadal uważam, że ten problem pytań jest interesujący i byłbym zainteresowany wszelkimi odpowiedziami, ponieważ jestem pewien, że są sytuacje, w których byłby preferowany.