Jump to content
legomir

Przynajmniej kilkadziesiąt pytań na temat problemów z Houdinim

Recommended Posts

Jak zasugerował SYmek utworzyłem temat na forum i zadaje kilka pierwszych pytań.

 

Nr.1: Utworzenie osobnej grupy dla każdego primitiv albo kilku z nich za pomocą jakiegoś wzoru.

Share this post


Link to post
Share on other sites

a5a3031bf89f8d34med.jpg

 

PartitionSOP tworzy grupy zgodnie z wyrażeniem w polu "Rule". Wyrażenie

group_`$PR`

zwraca nazwę grupy stworzoną ze zmiennej $PR, czyli numeru prymitywu. Łatwiej się nie da...

 

Oczywiście wyrażenie może być dowolne. Będzie wykonane dla każdego elementu (punktu lub prymitywu). W menu po prawej jest taki na przykład preset:

 

 color_`rint($CR*255)`_`rint($CG*255)`_`rint($CB*255)`

 

który, jak widać, tworzy grupę według koloru elementu.

Edited by SYmek

Share this post


Link to post
Share on other sites

Nr. 2. Mam kilka boxów o różnej długości i teraz skopiować w jednej linii aby losowo wybierało ich długość jak coś takiego można osiągnąć?

Share this post


Link to post
Share on other sites
Nr. 2. Mam kilka boxów o różnej długości i teraz skopiować w jednej linii aby losowo wybierało ich długość jak coś takiego można osiągnąć?

 

Słowa klucze: CopySOP/stamping, SwitchSOP, instancje.

 

Wszystko o kopiach oraz instancjach:

http://www.sidefx.com/docs/houdini12.1/copy/

 

Wszystko o technice copy/stamping:

http://www.sidefx.com/docs/houdini12.1/copy/tutorial_stamping

 

Poręczne video:

http://www.sidefx.com/index.php?option=com_content&task=view&id=1868&Itemid=132

 

... i w końcu link z Helpa z *dokładnym* przykładem tej techniki:

http://localhost:48626/examples/nodes/sop/copy/StampRandom

Share this post


Link to post
Share on other sites

No, dobra, ponieważ Legomir nalegał wczoraj, żeby grupy per prymityw zrobić tak jak w Mai, bo w Mai to jest proste, teraz wersja a'la Maya:

 

def createGroup(group_name, pattern, inNode):
  """ Tworzy GroupSOP per prymityw.
  """
   group_name = group_name + str(pattern)
   parent = inNode.parent()
   groupNode = parent.createNode("group")
   groupNode.parm("crname").set(group_name)
   groupNode.parm("pattern").set(str(pattern))
   groupNode.setFirstInput(inNode)
   groupNode.moveToGoodPosition()
   return groupNode

# Wybrany node:
selected = hou.selectedNodes()[0]

#  Interesują nas tylko Sopy:
if selected.type().category() == hou.sopNodeTypeCategory():
   #Lista wszystkich prymitywów:
   prims   = selected.geometry().prims()
   inNode = selected
   groupNodes = []
   name = "group_"
   for prim in prims:
       outNode = createGroup(name, prim.number(), inNode)
       inNode  = outNode
       groupNodes.append(inNode)
   # Na koniec spakujemy tę kupę bezsensownych nodów w subnet:
   subnet = selected.parent().collapseIntoSubnet(groupNodes)
   subnet.moveToGoodPosition()
   subnet.setDisplayFlag(1)
   subnet.setRenderFlag(1)

 

Chyba nie ma głupszego powodu użycia skryptu, ale w ramach wprowadzenia może się przyda. Możemy to wkleić w shell Pythona, a potem zaznaczyć i przeciągnąć na shelf, aby utworzyć nowy tool. Potem trzeba mu niestety ręcznie zmienić język z hscript na Python i gotowe.

Share this post


Link to post
Share on other sites

Wcale nie nalegał tylko naginanie jego wyobraźni w jeden dzień ma pewne granice poza tym ciągle się uczy jak to cholerstwo działa po całości, a działa (nie)stety całkiem inaczej niż wszystko. Tak czy inaczej dzięki.

Share this post


Link to post
Share on other sites

NR.3

 

Walki i pytań ciąg dalszy, bo jednocześnie Stamping to jest to czego chce i nie jest to czego chce. Chodziło mi o stworzenie czegoś w rodzaju generatora podłóg dla ćwiczenia, ale parametr $PT działa dla każdego punktu tempelate, a ja chce żeby działało dla każdego nowo wykreowanego prima albo punktu z użyciem $CY albo $NCY nie działało.

 

W poszukiwaniu innych rozwiązań doszedłem do tego, że albo można zrobić prosty L-System dla tego aczkolwiek nie wiem czy to sensowne, albo można napisać kod w Pythonie, którego jak na razie bym wolał unikać.

 

Jaka opcja jest najlepsza albo ja powinno się to robić no i gdzie popełniam błąd w myśleniu?

Share this post


Link to post
Share on other sites

Nie wiem o jakie podłogi Ci chodzi, ale podejrzewam, że wszystko, co potrzebujesz widzieć jest opisane w linkach powyżej. Zostaw LSystemy i Pythona, bo to armata na komara. Załączam prosty przykład. Można to zrobić dużo, dużo lepiej i pewnie prościej, ale dałem sobie 10 minut, a poza tym nie znoszę tych wszystkich proceduralnych generatorów, nudzą mnie :(. Celowo nie opisuję nodów, żebyś miał z tego jakąś zabawę :P

 

bbad8cede63728abmed.jpg

podGen.otl.zip

Share this post


Link to post
Share on other sites

Nr. 4. mam chmurę punktów ze scattera, animuje na niej scaleX i Z rotacjeY, potem lekkie tubulance za pomocą vop sopi teraz chcę na to dać lekką rotacje per point z ograniczonym kątem jak coś takiego uzyskać?

Share this post


Link to post
Share on other sites

Z matematycznego punktu widzenia punkty nie mają orientacji, więc nie mogą się obracać. To co się obraca to układ współrzędnych przyczepiony to punktu. W najprostszym przypadku układem współrzędnych może być wektor, choć to bardzo niedoskonały układ. Solidnym układem jest macierz (3 x wektor). Układ w przeciwieństwie do punktu ma swoją orientację (względem innego układu, czyli obiektu).

 

Macierz rotujesz w Vopach jednym nodem który przyjmuje kąt w radianach oraz oś obrotu. Gotową rotację najprościej obserwować przenosząc dowolny wektor do układu współrzędnych punktu. Czyli macierz -> rotacja -> aplikacja na wektor. A reszta jest w Helpie :)

Share this post


Link to post
Share on other sites

Cały problem w tym, że średnio mi idzie chyba szukanie czegokolwiek w helpie. Zwykle jak coś robię to tworzę większość w parę minut i zonk na cały dzień. Hmm... nie ma jakiejś książki, która opisuje wszystko?

Share this post


Link to post
Share on other sites
Zwykle jak coś robię to tworzę większość w parę minut i zonk na cały dzień.

No to jak w parę minut rotujesz punkty w Mai?

 

Hmm... nie ma jakiejś książki, która opisuje wszystko?

 

Ponoć Britannica jest niezła, tylko droga. Za to Wikipedia jest na wyciągnięcie ręki :) Podałem Ci słowa klucze: macierz, rotacja. Mam wrażenie, że Ci się po prostu nie chce szukać. Jakbyś wklepał "rotate" w Helpie wiedziałbyś, że dwa z trzech przykładów do RotateVOP wyjaśniają wszystko.

Share this post


Link to post
Share on other sites

Dziś nawet chciałem użyć tego noda ;) Więc w takim razie to chyba moja tendencja to pomijania plików z examples, obiecuje się poprawić :P

 

Użyłbym pewnie particli do tego, co zupełnie nie byłoby potrzebne z tego co widzę ;)

 

 

 

Poza tym żeby przestać być ignorantom chyba najpierw trzeba nim być :P

Share this post


Link to post
Share on other sites

Wszyscy jesteśmy ignorantami, inaczej się dziś nie da. Chodzi o to, żeby walczyć samemu a pytać o konkrety, kiedy czegoś nie możesz znaleźć.

 

 

ps cząsteczkami też mógłbyś to zrobić w H. btw.

Share this post


Link to post
Share on other sites
Hmm... nie ma jakiejś książki, która opisuje wszystko?

 

Jakis czas (dawno) temu Symek pokazal mi to: https://www.khanacademy.org/ , sam czesto zagladam, jak nie zrozumiesz na Wiki to tu najprawdopodobniej znajdziesz video, przyklady.

Share this post


Link to post
Share on other sites

 

Jakieś wskazówki jak uzyskać taki efekt przy fracturingu? Kombinuję z tym dziś, ale nie mam pomysłów.

(1:17)

Share this post


Link to post
Share on other sites

Przecież chłopak opowiada w video, jak to osiągnął. Zacznij robić, sposoby się znajdą.

Share this post


Link to post
Share on other sites

Używam PointWrangle i robię coś takiego att=max(P.Y) uzyskuje wynik dla każdego punktu(co jak już wiem jest całkiem logiczne z uwagi na to działa), więc jak rozumiem muszę stworzyć listę/tablicę i z niej wyznaczyć max z tym, że według tego co widzę wranglery nie mogą tworzyć tablic, więc w takim razie czy się mylę i da się jakoś to zrobić czy muszę wyznaczyć max dla att primitive i promoteAtt zmienić do dla punktów?

 

Szczerze mówiąc upierałbym się bym przy wykorzystaniu wraglera/vopSOP żeby mieć całość w jednym nodzie.

Share this post


Link to post
Share on other sites
Używam PointWrangle i robię coś takiego att=max(P.Y) uzyskuje wynik dla każdego punktu(co jak już wiem jest całkiem logiczne z uwagi na to działa), więc jak rozumiem muszę stworzyć listę/tablicę i z niej wyznaczyć max z tym, że według tego co widzę wranglery nie mogą tworzyć tablic, więc w takim razie czy się mylę i da się jakoś to zrobić czy muszę wyznaczyć max dla att primitive i promoteAtt zmienić do dla punktów?

 

Szczerze mówiąc upierałbym się bym przy wykorzystaniu wraglera/vopSOP żeby mieć całość w jednym nodzie.

 

Nie bawilem sie jeszcze pointWrangle ale podejrzewam ze dziala podobnie jak reszta Vexa wiec bedziesz musial zrobic to w dwoch nodach. Podobna sprawe mialem tu (jest tam tez link do topica z hip'em). Mierzylem dystans kazdego punktu ale zeby znalezc ten ktory jest najbardziej podobny do mojego wzorowego dystansu musialem wywalic to porownanie do PythonSOP.

Ewentualnie jak chcesz mozna zrobic to w jednym nodzie za pomoca inlineCPP lub HDK. Prosta sprawa.

Share this post


Link to post
Share on other sites

W takim razie pozostawię na 2. nie chce zaczynać nowych rzeczy i odwracać uwagi od tego co teraz robię, bo przeważnie kończy się porzuceniem jakiegoś projektu. Dzięki za odpowiedź :)

 

Edit

 

Poradziłem już sobie inaczej przepisując funkcje z użyciem absolute

Edited by legomir

Share this post


Link to post
Share on other sites

Jeszcze jedno pytanie robię jakiś głupi błąd, ale za cholere nie wiem gdzie. Mam ten atrybut z wczoraj i teraz w filter expression wpisuje

$TY == @att

 

dostaje błąd w postaci expression stack error

 

EDIT poradziłem sobie point expression, ale kolejny problem w details viem widzę, że jakieś 20 punktów ma TY równe mojemu max_y z tym, że expressia znajduje 3 punkty na tej wysokości domyślam się, że problem jest zaokrąglenie jak mogę je zmienić?

Edited by legomir

Share this post


Link to post
Share on other sites

W Vexie masz tylko rint ale to ci da integer. Mozesz pomnozyc przez 1000 lub inna sume aby przesunac przecinek i zrobic poronanie integer. Porownywanie floatow ma wiele minusow i nie ma sensu z tym walczyc czasami.

 

Co ty chesz zrobic, bo moze za bardzo kombinujesz?

Nie moglys zapodac Hipa jak kazdy normalny uzytkownik Houdego? ;)

Share this post


Link to post
Share on other sites

Ogólnie to chce zrobić asset robiący wiązki kabli mam pattern kabli(circle lub znormalizowany shape, tworzy mi za pomocą prostego równania n shapów tworzących wiązkę kabli układającą sie w koło). Tutaj już wszystko ogarnięte.

 

Teraz mi potrzebny wave deformer(żeby kable zwisały powiedzmy z sufitu ;) ) ponieważ to raczej dla nauki pobawiłem się http://www.fundza.com/expressions/expressionsqr.html i utworzyłem prostą deformacje, teraz chce dodać do tego trochę kontroli, a ponieważ nie do końca jestem fanem suwaczków wymyśliłem sobie żeby można było to trochę ręcznie modyfikować za pomocą czegoś w rodzaju handle z circle i modyfikowania krzywej za pomocą att transfer, ponieważ nie mam pomysłu na inną metode, a minimalne i maksymalne wartości są według details viem dla sporej ilości obiektów takie same i zgadzają się mniej więcej z ilością rowków chciałem utworzyć grupę punktów do, której będę kopiował circle. Z grubsza o to chodzi chociaż w planach jest sporo więcej ^^ Tego hipa dołączę jak ogarnę trochę to co tam się dzieje, bo z reguły mam dużo własnych przyzwyczajeń i jestem chaotyczny.

Share this post


Link to post
Share on other sites

Problem, którego nie potrafię sam rozwiązać jak na razie:

 

problemowe.png

 

Niebieskie moja krzywa a właściwie jej odcinek, białe to przykładowe punkty strzałka w bok pokazuje jak rozchodzi się att od funkcji jaką mam(w drugą strone to lustrzane odbicie), czerwony kwadrat to nazwijmy to hanle, które zamierzam wykorzystać do modyfikatora.

 

W czym problem: chce aby handle można było modyfikować to jak "głęboki" jest konkretny cykl ponieważ modyfikuje krzywą od sinusa to dostaje piękne liczby ułatwiające wszystko, ale nie potrafię wymyślić metody transportu atrybutów tak, aby P.y konkretnego handle(primitiv) działało tylko na punkty w jednym cyklu. Jeśli coś jest niejasne postaram się jeszcze doprecyzować.

Edited by legomir

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