Jump to content
legomir

Teczka: Proceduralna pajęczyna i inne zabawki

Recommended Posts

Właściwie miała być to praca na mały contest ze znajomymi jednak z niego nic nie wyszło, więc draże temat nadal, ale już sam. Celem jest stworzenie proceduralnej pajęczyny generującej się w uzależnieniu od otaczającej jej geometrii dającej jak największą kontrole użytkownikowi, a później zagadnienie symulacji i być może renderingu. Do końca co prawda jeszcze bardzo daleko i czekają mnie setki problemów do rozwiązania, a nie mam dziś siły na walkę z assetem to prezentuje stan na dzień dzisiejszy, a ponieważ wiem, że raczej nie wiele osób się tym interesuje wie jak to działa to będzie to w postaci pokazującej kolejne kroki.

Efekt:

 

2013-10-13_152215.png

 

Napoczątek, tak wygląda dotychczas wykres nodów, które dotychczas użyłem:

2013-10-13_142824.png

 

 

Kolejne kroki:

 

2013-10-13_143047.png

 

 

Ten „net box” odpowiada zaprzykładową geometrie, której używam do sceny, w przyszłości tasekcja będzie wyglądać nieco inaczej i użytkownik będzie tampodłączał swoją geometrię.

 

2013-10-13_143329.png

 

 

Kolejny jest odpowiedzialny za„pointer” punkt wyznaczający środek pajęczyny i od, któregopotem mierze odległość.

 

2013-10-13_143715.png

 

 

To co tu się dzieje to dość ciekawasprawa, rozwiązanie jakie ściągnąłem z tutoriala Alberta„tmdaga” Szostkiewicza(http://tmdag.com/vopraytracer-pt2/) służące u niego w raytracerze. Do czego posłużyło u mniewytłumaczę za chwilę. Krótko o co w tym chodzi. Node „In” togeometria sceny w postaci nie zmienionej. „Line 1” tworzy linię,a ekspresja(prawy górny róg, Points”) liczy ilość face w nodzie„In” powodując, że linia ma tyle samo punktów co scenageometri. Node „Add” jest tam właściwie nie potrzebny, aledodałem go z powodu własnej wygody i przyzwyczajenia, usuwa on wtym wypadku wszystkie połączenia między punktami i zostawiajedynie punkty.

 

2013-10-13_144748.png

 

 

Ponieważ mam dość słaby komputer, apajęczyna rozkłada się niemal po płaszczyźnie plenarnej musiałemmusiałem wykluczyć część ścian na, których nie powinno byćpunktów. Dzieje się to w ten sposób, że Transfer_Pos zmieniapozycje poszczególnych punktów z „Line” na pozycje w środkuposzczególnych face(cały czas to sposób z tutoriala tmdaga).Następnie mierze dystans pomiędzy kolejnymi punktami a pointerem wosiach X, Y i Z. Jeżeli odległość jest mniejsza niż podana przezużytkownika to koloruje na czerwono. Wygląda to tak:

 

2013-10-13_145606.png

 

 

 

2013-10-13_145848.png

 

Sphere to node, który dodałem wtrakcie testów umożliwia on użytkownikowi zoorientować się wobszarze w, którym szuka punktów. Kolejno kolor punktów sprzedchwili jest transeferowany na kolor face geometrii sceny i kasowanyjeżeli nie jest czerwony.

 

 

Teraz część, która sprawiła miduże problemy i udało mi się rozwiązać problem dzięki wskazówceUncle, za co zresztą mu dziękuje ;) Jak widać na obrazkuwysccaterowane punkty mają losowe ID, co uniemożliwia zrobieniepotem obręczy w pajęczynie musiałem je, więc posegregowaćzgodnie z ruchem wskazówek zegara. Musiałem, więc zmienić pozycjewektorowe [x,y,z] na pozycje polarne a następnie je pomnożyć przezsiebie. Przed:

 

2013-10-13_150401.png

 

I po:

 

2013-10-13_154309.png

 

 

Następnym krokiem było stworzeniepionowych linii. Co było już stosunkowo proste, bo wystarczyłopołączyć punkty ze scattera z pointerem. Ponieważ poszczególneobręcze są w podobnej odległości to za pomocą krótkiej ekspresiuzależniłem ich ilość w stosunku do długości krzywej. Ostatniedwa nody są pomocne przy robieniu obręczy. Sort numerujeposzczególne punkty od początku lini(pozycja pointer) do końca.ennumerate przypisuje kolejne indexy obręczy. Ktoś możezastanawiać się po co liczę to dwa razy. Punkty w Houdinim sąnumerowane globalnie tzn. program liczy po kolei wszystkie punktyjakie obecnie „widzi”. Potrzebuje, więc policzyć to lokalniedla każdej nitki.

 

2013-10-13_150911.png

 

2013-10-13_154617.png

 

 

Kolejnym zadaniem jest stworzenieobręczy. Dziwne może się wydawać użycie „Delete”, tymczasemkopiuje primitive(trudno mi to przetłumaczyć będzie to coś wrodzaju obiektu) z numerem 0 z nitek tak aby były one połączone wokrąg. Pierwszy Add usuwa wysztkie połączenia między punktami.Delete za pomocą tej ekspresji:

 

2013-10-13_152056.png

 

 

Kasuje punkty z indeksami, których niechce łączyć w obręcze.

 

2013-10-13_152215.png

 

 

Na końcu łącze to wszystko w całość.Dużo rzeczy jest jeszcze do poprawienia/zmiany/naprawienia.Właściwie gdybym nie był tak zadowolony z przezwyciężenia kilku problemów nie pokazywałbym na forum. Kolejnym krokiem będzie dodanie bardziej „artystycznego” sposobu kontroli na tym gdzie występują obręcze i losowości ich łączenia. O ile ktoś dotarł do końca i opublikowałem już jakiś wip to wielkie dzięki dla benego i Ca MEL z forum za to iż mimo że od długiego już czasu za daje im mądrzejsze i głupsze pytanie cierpliwie odpowiadają i doradzają różne rzeczy.

 

 

Cholera końcówka wygląda niemal jaktestament, zauważyliście? :P

 

PS

 

Pointerem można ruszać, zmieniając w realtime pajęczynę czego nie pokazałem ponieważ w tej chwili do testów jest na dość twardo jego położenie określone.

Edited by legomir

Share this post


Link to post
Share on other sites

Zawsze imponowało mi bycie proceduralnym (to jest już chyba styl bycia;) ). Wciąż jednak takie zabawy mają IMO wątpliwą użyteczność. Obserwuję wątek z uwagą.

Share this post


Link to post
Share on other sites

Legomir - dzięks za step by step. Jak sam mówisz, droga jeszcze dośc daleka.

Najbardziej brakuje mi:

- wpływu grawitacji; to nadaje rzeczom naturalnym naturalnego wyglądu:)

- nitek, które nie dochodza do obiektu zaczepienia; mam na myśli, że nie wszystkie rozchodzące się z środka nitki, powinny być łączone z geometrią, którą pajęczyna oblepia. Właściwie takich jest w pajęczynie zazwyczaj dośc mało, zdarza się, że tylko trzy.

Spider-Net-Water-Drops-Computer-Wallpaper.jpg

 

 

 

Lucek. Wątpliwą użyteczność? Dla mnie np: możliwośc rozsiania trawy, gdzie każdy liść jest nieco inny, powoduje że 3d wskakuje na kolejny poziom.

Share this post


Link to post
Share on other sites

@deshu do grawitacji to jest okropnie daleko, bo to zrobi z automatu przy symulacji solver, to drugie o czym mówisz zauważyłem ale dotyczy części, której nie chce za bardzo w tej chwili zmieniać i muszę się zastanowić jak to zrobić(są dwie możliwości, jedna polega na tworzeniu a druga na kasowaniu choć może coś nowego mi do głowy wpadnie). W najbliższej przyszłości wezmę się za temat sterowania obręczami do poziomu jaki bym chciał osiągnąć tak, żeby ten etap odhaczyć, a potem małymi nitkami na łączeniach w punktach przecięcia.

 

Spider%20web%20with%20morning%20dew.JPG

 

@Lucek moja zabawa akurat specjalnie sensu nie ma i duża część rzeczy jakie zrobię będzie moją fanaberią, bo tak na serio da się załatwić to kilka(może kilkanaście) razy wolniejszych sposobem używając do generowania voronoia. Sam proceduralism ma za to olbrzymi sens jak dla mnie od pewnego stopnia skomplikowania jest wręcz obowiązkowo potrzebny żeby w ogóle ogarnąć temat(nawet w naturze ;) )

 

Zresztą sam temat pajęczyn jest momentami dla mnie trudny, bo mam arachnofobie, a musiałem nieco pochodzić i poprzyglądać się pajęczyną z bliska.

 

Będę w najbliższym czasie robił też drugi projekt, wiec potem wrzucę parę rzeczy, bo właściwie samo prowadzenie wątka jest bardzo motywujące.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy