Od czego zacząć przy tworzeniu edytora terenu 3D? [Zamknięte]

22

Chcę zbudować (na początek) proste narzędzie, które może podnosić, obniżać, wygładzać i teksturować teren.

Więc przez co muszę przejść, aby stworzyć edytor terenu?

A może dostępne są cenne zasoby na ten temat?

Tak, zapomniałem wspomnieć, że interesuje mnie edytor terenu 3D.

tryb joltmode
źródło

Odpowiedzi:

24

W przypadku „klasycznego” edytora terenu 3D można wykonać następujące kroki:

Wygeneruj siatkę (np. Siatkę kwadratów, każdy kwadrat złożony z dwóch trójkątów), wszystkie wierzchołki są wspólne dla trójkątów (tak, że na przecięcie jest tylko jedna normalna). wprowadź opis zdjęcia tutaj

To powinno być zrobione 3DMesh i renderowane w twoim programie.

Zrób narzędzie do podnoszenia i opuszczania (mniejszych i większych) części siatki (musisz obliczyć, gdzie na siatce znajduje się kursor myszy i modyfikować siatki wierzchołków, ale tylko w górę iw dół).

Utwórz dużą teksturę (na przykład 1024x1024x4 lub lepszą) i teksturuj ją za pomocą tak zwanej mapy splat: wprowadź opis zdjęcia tutaj

Umożliw mu malowanie (za pomocą R, G, B LUB Alpha, na przykład nie różowego) i wybieranie tekstur zastępujących te brzydkie kolory podstawowe (czerwony, niebieski, zielony, alfa), a ponadto mogą być przez nie reprezentowane:

Moduł cieniujący (który musisz utworzyć) powinien pomnożyć te ładne tekstury (np. Kamień, trawa, ...) przez intensywność na mapie splatmap (brzydka), a następnie wymieszać całość, aby na przykład wyglądała (z jak tylko 2 kolory), tak: wprowadź opis zdjęcia tutaj

Przepraszam za duże zdjęcia, połączyłem to w pracy ...

Valmond
źródło
Ach, to uczyniło to nieco jaśniejszym. Teoretycznie po siatce 3D jest to po prostu przesuwanie w pionie (góra / dół), a teksturowanie w tym przykładzie wykonałeś w sposób „splatmap”, po czym moduł cieniujący przypomina go w terenie „3D”?
joltmode,
1
Prawidłowe dla siatki 3D. Moduł cieniujący nie robi nic specjalnego z siatką (moduł cieniujący wierzchołek), duża praca polega na cieniowaniu fragmentów („moduł cieniujący piksele”), gdzie wyszukiwanie tekstów z mapy splat daje ilość trawy, kamienia itp. Ostatni piksel otrzyma (możesz oczywiście mieć również teksturę „podstawową”, na przykład kamień, który ma zawsze 100%, a inne tekstury zostaną na nią splatane).
Valmond,
6

Pierwszą rzeczą jest wyjaśnienie struktury danych terenu i tego, czego oczekujesz od edytora. Czy to jest siatka? Tablica wysokości? Jakiś system wokseli w stylu Minecraft? Czy musisz mieć możliwość dodawania elementów terenu, takich jak drzewa i budynki? Ręcznie, automatycznie czy jedno i drugie? Mógłbym kontynuować, ale masz pomysł.

Podstawowy edytor terenu nie jest trudny do napisania, ale szczegóły będą się bardzo różnić w zależności od tworzonej gry, a zatem od rodzaju terenu, który chcesz stworzyć.

SimonW
źródło
Cóż, mesh / array og heights / voxels itp. To tylko sposób na przechowywanie przyporządkowanych danych, byłem bardziej zainteresowany, jak napisać narzędzia do zapełniania tych danych. Właściwie nie mam pojęcia, jak edytor terenu wygląda „za kulisami”. Mogę to uszanować, ale tylko na swój własny sposób, założę się, że są pewne wytyczne, których powinienem przestrzegać ...
joltmode,
2
-1. To nie wygląda mi na odpowiedź. Zadajesz kilka pytań, które lepiej pasowałyby jako komentarz.
bummzack 18.11.11
5

Jest to głównie kontynuacja odpowiedzi Valmonda, ale nie wydaje się wystarczająco krótka, aby dodać jako komentarz.

Gdy zaczniesz tworzyć podstawowy edytor, możesz poeksperymentować, generując mapę wysokości w całości na GPU. Jest to całkowicie opcjonalne, ale jest to dobry sposób na odciążenie GPU w przypadku ciągle zmieniającego się terenu. Valmond wspomniał już o rozpryskiwaniu tekstury na module cieniującym piksele, ale można również użyć modułu cieniującego wierzchołki, używając wyszukiwania tekstury do podnoszenia i opuszczania wierzchołków siatki. Oto samouczek, jak to zrobić za pomocą modułu cieniującego wierzchołki. Elementy nie będące modułami cieniującymi są specyficzne dla języka C # i XNA, ale ważne są elementy kodu modułu cieniującego.

W takim przypadku kod po stronie procesora poradzi sobie ze zmodyfikowaniem tekstury w skali szarości zapisanej w pamięci. Siatka siatki pozostaje płaska, wierzchołki nie są aktualizowane przez procesor. Za każdym razem, gdy tekstura jest zmieniana, nowa tekstura może być przekazywana do GPU.

Należy pamiętać, że nie wszystkie modele modułów cieniujących obsługują próbkowanie tekstur na module cieniującym wierzchołków (na przykład w HLSL potrzebujesz co najmniej modelu cieniującego 3.0).

ChrisC
źródło
0

Możesz rzucić okiem na Ogre's ETM http://www.ogre3d.org/addonforums/viewforum.php?f=16 , powinien dać ci kilka pomysłów. Artifex Terra opiera się na nim, jeśli chcesz zobaczyć go w akcji.

Johann
źródło
2
Sugeruję scalenie odpowiedzi i usunięcie nieużywanych.
joltmode,
W przypadku utworzonego / zmanipulowanego terenu GPU sprawdź artykuły Scape Gilliam de Carpentiera, bardzo pouczające na ten temat. decarpentier.nl/scape-render
Johann
Jak już to zasugerował Tom, artykuły Scape mogły już służyć jako ciekawe źródło informacji na temat generowania i renderowania terenu. Ale od tej sugestii opublikowałem kolejny artykuł Scape, który jest jeszcze bardziej odpowiedni dla tego tematu, w pełni obejmując jego edytor oparty na pędzlu. Więc pomyślałem, że dam ci znać. www.decarpentier.nl/scape-brush-pipeline