Houdini Engine i Unity – pierwszy asset

Najwyższa pora na stworzenie pierwszego assetu do wykorzystania w Unity.

Celem jest stworzenie mechanizmu, który pozwoli na narysowanie w Unity krzywej z której zostanie utworzona powierzchnia,

na której losowo rozmieścimy dowolna ilość spośród np. trzech wybranych obiektów. Do czego to można wykorzystać ?

Np do rozmieszczenia na danym terenie różnych kamyczków, drzew, czy dowolnych przeszkód.

Zaczynamy oczywiście w Houdinim. Dodajemy nowy obiekt Tab -> Geometry, wchodzimy do środka i usuwamy domyślnego noda file1.

Po pierwsze potrzebujemy krzywą, by testować czy wszystko działa, wiec dodajemy Tab -> Curve i w Scene View rysujemy jakąś krzywą.

Ponieważ w Unity możemy wybrać jaki typ krzywej tworzymy (Polygon, NURBS, Bezier), dodajemy Tab -> Convert i zostawiamy domyśnle From Type: All Types Convert To: Polygon.  Następnie dodajemy Tab -> PolyExtrude i otrzymujemy powierzchnię, na której będziemy rozmieszczać nasze obiekty.

 

Teraz dodajemy testowy obiekt którego kopie będziemy umieszczać na powierzchni Tab -> Box i od razu przyłączmamy do niego Transform, który przyda się za chwilę.

Czas na kopiowanie ! Dodajemy Tab -> Copy i łączymy nody jak należy. To powoduje proste skopiowanie naszego box’a na każdy punkt utworzonej powierzchni.

Chcemy więcej kontroli ! Pomiędzy PolyExtrude Copy dodajemy Tab -> Scatter. Zmniejszamy domyślną wartość Force Total Count z 1000 na jakieś sensowne 30 🙂

Jeśli wszystko zrobiliśmy jak należy 🙂 mamy oto box’y skopiowane na powierzchnię 🙂

I wszystko ładnie, tylko wszystkie stoją tak samo (ta sama rotacja). Jak to zmienić ? Chcemy by rotacja w osi Y kolejnych kopii obiektu była różna (losowa).

Po pierwsze przechodzimy do copy1 do zakładki stamp. Zaznaczamy Stamp Inputs i w polu Variable 1 podajemy nazwe zmiennej, którą tworzymy – np, rotacja.

W polu Value 1 wpisujemy wyrażenie: rand($PT*5)*50 które na podstawie numerów punktów ze scatter1 (pomnożonych przez 5) da nam losową wartość z zakresu 0,1. Tą wartość mnożymy jeszcze przez 50 by rotacja obiektów mogła mieć większe wartości.

Ok, teraz naszą zmienną rotacja wykorzystamy do zróżnicowania obiektów na powierzchni.

Wracamy do utworzonego wcześniej transform1. W polu odpowiedzalnym za obrót w osi Y wpisujemy wyrażenie: stamp(„../copy1″,”rotacja”,0) – czyli nazwa noda z którego pobieramy zmienną (copy1), nazwa zmiennej (rotacja) i domyślna wartość (0). Powinniśmy zobaczyć boxy skopiowane na powierzchnie z losową rotacją.

Idziemy dalej. Chcemy by nie tylko obrót był losowy, ale również to jaki (z trzech możliwych) obiekt będzie skopiowany na powierzchnię.

Dodajemy Tab -> Switch i wstawiamy pomiędzy transform1 naszego boxa, a copy1. Switch pozwala na wybranie jednego spośród podłączonych do niego wejść.

Ponieważ chcemy aby ta wartość była losowa, ponownie korzystamy z funkcji stamp.

Wracamy do copy1 w znaną już zakładkę Stamp i tworzymy drugą zmienną o nazwie np. wybor. Jako wartość podajemy np. rand($PT*4)*3.

Przechodzimy do switch1 i w polu Select input podajemy: stamp(„../copy1″,wybor”,0). Dodajemy dwa nowe obiekty  Tab -> torus i Tab -> sphere.

Tak jak przy box’ie dodajemy do każdego z nich Transform by mieć możliwość losowej rotacji. Oba obiekty dołączamy do switch1 i już mamy losowe obiekty skopiowane 🙂

I tak oto powoli zbliżamy się do finału. Jeśli wszystko nam działa w Houdinim, pozostało tylko przygotować to do działania w Unity.

Kasujemy naszą testową krzywą i obiekty (zostawiamy transform !) i w ich miejsce wstawiamy ObjectMerge i nazywamy je odpowiednio. U mnie: user_path, obiekt1, obiekt2 i obiekt3.

Czas stworzyć Digital Asset ! Wychodzimy do poziomu sceny, klikamy prawym na naszym obiekcie i wybieramy Create Digital Asset. nazwę i miejsce gdzie chcemy zapisać.

W katalogu Assets naszego projektu Unity tworzymy katalog OTLs i tam nagrywamy nasz copy_asset.otl

Dostaniemy ładny komunikat, w którym po prostu klikamy Destroy All Spare Parameters.

Po chwili dostajemy okienko Edit Operator Type Properties i przechodzimy do zakładki Parameters.

W tym oknie tworzymy interfejs, który będzie dostępny w Unity do kontrolowania assetu.  Po pierwsze zaznaczamy wszystko ponizej root i w prawym panelu pod Interface Options zaznaczamy Invisible

Klikamy ApplyAccept. Po tej operacji okienko parametrów naszego assetu będzie puste.

Wracamy do edycji parametrów klikając prawym w nasz asset i wybierając Type Properties..

Dodajemy pierwszy parametr:

Do otwartego okienka z parametrami przeciągamy pole Object 1 z user_path i nadajemy mu nazwę np. Krzywa Sterujaca

Tak samo postępujemy z polami Object 1 modeli. Po całej operacji interfejs powinien wygladać np. tak

Dla większej kontroli przenosimy w ten sam sposób pozostałe pola:

  • ze scatter – Force Total Count  i nazywamy np. Ilosc
  • ——| |——- Global Seed i nazywamy Seed   🙂
  • ——| |——- Scale Radii By i nazwywamy Promien
  • polyextrude1Distance i nazywamy np. Szerokosc

Zaznaczając Range  możemy podać domyślny zakres parametru. Dodatkowo ikonkami kłódki możemy ograniczyć wartość parametru.

Przydatne szczególnie przy parametrze Ilosc.

Pora na Unity !

Oczywiście zakładam stworzony projekt i zainstalowany Houdini Engine. (Jeśli nie – zapraszam do Houdini Engine dla Unity – instalacja).

Przeciągamy nasz copy_asset.otl do okna Hierarchy i w Inspector widzimy dostępny nasz interfejs.

Z górnego menu Houdini Engine wybieramy Create Curve i tworzymy krzywą. Dodajemy trzy dowolne obiekty i przeciągamy w odpowiednie pola assetu.

Jeśli wszystko poszło dobrze, mamy taki np. obrazek:

…jeśli nie…. sprawdzamy, próbujemy, zmieniamy, bawimy się 🙂

SZYBKI EDIT: Pamiętamy by w Houdinim NIE USTAWIAĆ template flag na ostatnim (ani żadnym innym) nodzie. Powodzenia !

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *