Skocz do zawartości

pchela1313

Members
  • Liczba zawartości

    127
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    5

Zawartość dodana przez pchela1313

  1. Nie ma sprawy:) Pozdrawiam
  2. Nie, nie ma. Niestety elementy UI w maxie bez DotNetu są generalnie bardzo ograniczone, jeśli chodzi o wygląd. Pozdrawiam
  3. Zatem przejdźmy teraz do odczytywania plików xml. Wczytywanie może się wydawać o tyle dziwne, ponieważ aby to zrobić najpierw musimy stworzyć nowy plik xml, który będzie zawierał to co ten zapisany. --ladujemy obsluge xml za pomoca DotNet dotNet.loadAssembly "system.xml" --tworzymy plik xml plikXml=dotNetObject "system.xml.xmlDocument" Teraz musimy pokazać maxowi gdzie znajduje się ten zapisyny plik, oraz kazać mu go załadować do naszego dopiero co stworzonego pliku --ladujemy sciezke pliku do zmiennej sciezkaXml=((getDir #scripts)+"\\test.xml") --wczytujemy zawartosc zapisanego pliku plikXml.load sciezkaXml Teraz trochę objaśnienia. Xml ma to do siebie, że możemy w nim tworzyć grupy, podgrupy itd. Coś podobnego jak katalogi w windowsie. I dokładnie w taki sam sposób max może odczytywać te grupy. Zatem jesli chcemy oddzielić jakieś partie od siebie to robimy nową grupę. Aby to jeszcze jaśniej pokazać, posłużę się plikiem xml z nowej wersji Pchela_Transform_Holder 2.5 (kurczę wygadałem się, więcej info wkrótce;) ) Oto przykładowy kod: (wartości niektórych rzeczy pousuwałem, aby nie zaciemniać przykładu) Teraz możemy przeanalizować to dziwadło. Na samej górze mamy root'a. Niżej w hierarchii jest "Group", dla mnie są to grupy z zapisanimi pozami (ramie, dłoń, noga, cała postać itd). Czyli jest to odrębna całość i nie ma potrzeby skupiać się na innych elementach w tym poziomie. Dalej mam rzeczy takie jak: Numery,Ustawienia itd. Są to rzeczy stałe dla danej grupy. Dopiero na samym dole są faktyczne zapisane pozy "PoseName". Czyli całość opisowa wygląda tak: Root Grupy póz pierdy zbiór faktycznych póz pozy Patrząc na ten schemat, łątwo mozna zauwazyć, że aby odczytac pozy, muszę najpier przejść przez te elementy które są wyrzej w hierarchii. Teraz przejdźmy do tego co otrzymaliśmy u Ciebie: Zatem aby zacząć odczytywać elementy postępujemy nastepująco: --wczytujemy zawartosc zapisanego pliku plikXml.load sciezkaXml --utalamy zmienna jako Root rootEle=plikXml.documentElement --dla pewnosci mozemy sprawdzic czy nazwa naszej zmiennej nazywa sie "Root" if rootEle!=undefined and rootEle.name=="Root" then ( clearListener() format "Nazwa Roota: %\n\n" rootEle.name --teraz mozemy odczytac wszystkie childreny roota --nalezy pamietac ze zbiory w DotNet zaczynaja sie od zera a nie od 1. -- Z kolei jesli zapytamy sie o ilosc elementow z biorze podaje juz normalnie -- dlatego funckja for zaczyna sie od 0 a konczy na ilosci elementow w zbiorze -1 for i = 0 to rootEle.ChildNodes.count-1 do ( format format " Nazwa podgrupy: %\n\n" rootEle.ChildNodes.itemOf[i].name ) )else() A oto co otrzymamy w listenerze: Nazwa Roota: Root Nazwa podgrupy: drzewo Czyli nazwe odczytujemy korzystajac z polecenia "name". Teraz jeśli chcemy odczytać wartości lub atrybuty wpisujemy: for i = 0 to rootEle.ChildNodes.count-1 do ( format " Nazwa podgrupy: %\n\n" rootEle.ChildNodes.itemOf[i].name --sprawdzemy ile jest attrybutow w gurpue for x=0 to rootEle.ChildNodes.itemOf[i].attributes.count-1 do ( --aby odczytac atrybuty format " atrybuty: %\n" rootEle.ChildNodes.itemOf[i].attributes.itemOf[x].name --aby odczytac wartosci format " wartosci: %\n\n" rootEle.ChildNodes.itemOf[i].attributes.itemOf[x].value ) --Mozemy tez od razy znalezc wartosc danego atrybuty znajac jego nazwe format " wartosc atrubutu \"cos1\": %\n\n" (rootEle.ChildNodes.itemOf[0].GetAttributeNode "cos1").value format " wartosc atrubutu \"cos1\": %\n\n" (rootEle.ChildNodes.itemOf[0].GetAttributeNode "cos1").value ) A oto co pokaże listener: Nazwa Roota: Root Nazwa podgrupy: drzewo atrybuty: cos1 wartosci: 32 atrybuty: cos2 wartosci: 23 wartosc atrubutu "cos1": 32 wartosc atrubutu "cos1": 32 Teraz, możemy odczytać dowolną rzecz z pliku xml :) Zdaję sobie sprawę, że może się to wydawać skomplikowane, ale starałem się to ująć najprościej jak potrafię. Więcej tutoriali, skryptów o zagadnieniu riggowania i skryptowania w maxiem, zarówno w formie pisanej jak i video, już niedługo na mojej stronie. Musze jeszcze tylko napisać i narać te wszytkie rzeczy. Również po skończeniu strony pokaże się PTH 2.5 Pozdrawiam i rzyczę powodzenia w odszyfrowaniu tego co napisałem ;) Na koniec cały kod, który odczytuje twój plik xml: --ladujemy obsluge xml za pomoca DotNet dotNet.loadAssembly "system.xml" --tworzymy plik xml plikXml=dotNetObject "system.xml.xmlDocument" --ladujemy sciezke pliku do zmiennej sciezkaXml=((getDir #scripts)+"\\test.xml") --sprawdzamy czy plik istnieje if doesFileExist sciezkaXml then ( --wczytujemy zawartosc zapisanego pliku plikXml.load sciezkaXml --utalamy zmienna jako Root rootEle=plikXml.documentElement --dla pewnosci mozemy sprawdzic czy nazwa naszej zmiennej nazywa sie "Root" if rootEle!=undefined and rootEle.name=="Root" then ( clearListener() format "Nazwa Roota: %\n\n" rootEle.name --teraz mozemy odczytac wszystkie childreny roota --nalezy pamietac ze zbiory w DotNet zaczynaja sie od zera a nie od 1. -- Z kolei jesli zapytamy sie o ilosc elementow z biorze podaje juz normalnie -- dlatego funckja for zaczyna sie od 0 a konczy na ilosci elementow w zbiorze -1 for i = 0 to rootEle.ChildNodes.count-1 do ( format " Nazwa podgrupy: %\n\n" rootEle.ChildNodes.itemOf[i].name --sprawdzemy ile jest attrybutow w gurpue for x=0 to rootEle.ChildNodes.itemOf[i].attributes.count-1 do ( --aby odczytac atrybuty format " atrybuty: %\n" rootEle.ChildNodes.itemOf[i].attributes.itemOf[x].name --aby odczytac wartosci format " wartosci: %\n\n" rootEle.ChildNodes.itemOf[i].attributes.itemOf[x].value ) --Mozemy tez od razy znalezc wartosc danego atrybuty znajac jego nazwe format " wartosc atrubutu \"cos1\": %\n" (rootEle.ChildNodes.itemOf[0].GetAttributeNode "cos1").value format " wartosc atrubutu \"cos1\": %\n" (rootEle.ChildNodes.itemOf[0].GetAttributeNode "cos1").value ) )else() )else() Koniec... Uff ;)
  4. Hej twoje pytanie rozbije na 2 posty, pierwszy będzie o zapisywaniu pliku xml a drugi o jego odczytywaniu. Zatem, na początku musimy załadować xml przy użyciu DotNet. Użyjemy do tego formuły: dotNet.loadAssembly "system.xml" Teraz tworzymy zmienna która będzie naszym dokumentem: plikXml=dotNetObject "system.xml.xmlDocument" Skoro mamy już stowrzony dokument xml, możemy zaczynać w nim pisanie. Na początek musimy strorzyć root'a (nazwa może być obojętnie jaka, ważne żeby był tylko jeden root w pliku). Teraz uwaga taka: do każdego elementu możemy przypisawać dowolne atrybuty: w Twoim przypadku atrybutami są:rootowy, cos1, cos2 itd. Do roota też można dodawać atrtybuty. Zatem całość wygląda następująco: --tworzymy element root root=plikXml.createElement "Root" --dodajemy atrybuty do root'a, pierwszy to atrybut drugi to jego wartosc root.setAttribute "rootowy" "12" plikXml.appendChild root teraz skoro mamy już roota, możemy dodawać do niego podgrupy. Robimy to w taki sam sposób jak wyżej: --tworzymy element drzewo drzewoElement=plikXml.createElement "drzewo" --dodajemy atrybuty drzewoElement.setAttribute "cos1" "32" drzewoElement.setAttribute "cos2" "23" root.appendChild drzewoElement Analogicznie dodajemy liście: --tworzymy element liscie liscieElement=plikXml.createElement "liscie" --dodajemy atrybuty liscieElement.setAttribute "xxx1" "23" liscieElement.setAttribute "xxx2" "32" liscieElement.setAttribute "kolor" "zielone" drzewoElement.appendChild liscieElement Na koniec zapisujemy plik na dysku: --plik zapisze sie w katalogu: 3ds Max 2009\Scripts\ plikXml.save ((getDir #scripts)+"\\test.xml") I możemy wpisac poniższą formułę, aby zobaczyć co nam wyszło: edit ((getDir #scripts)+"\\test.xml") Opis jak odczytywać taki plik xml za około godzinke Pozdrawiam
  5. Przed użyciem skina, Musisz najpierw zrobić "reset xform" na modelu, dopiero po tym możesz zacząć skinować. Dzieje się tak ponieważ po tym jak skończysz modelować, to model nie ma swojej transformacji ustawionej jako macież jednostkowa a właśnie Reset Xform to naprawia. Pozdrawiam
  6. Generalnie jest tak jak napisał SUPER_OKO, w riggowaniu jest bardzo dużo elementów, do których trzeba samemu dochodzić, często zajmuje to bardzo dużo czasu. Mimo dużej pomocy jaką można dostać na forach to zawsze jest to tylko wskazanie drogi, a nie pokazanie krok po kroku jak to zrobić. Nie można się tez ograniczać tylko do jednego softu. Nie chodzi mi tutaj, ze trzeba być obcykanym w każdym z nich, bardziej chodzi o pomysł na zrobienie czegoś, a później zostaje próbowanie jak to zrobić tylko, że na innym sofcie. Jak zdobyć wiedzę? Generalnie chyba metodą prób i błędów oraz oczywiście maaasa tutoriali i dużo samozaparcia. Jednak satysfakcja jaką później Masz po męczeniu się z czymś bardzo długo jest nie do opisania:) Edit: Reanimator- ogólnie tak mowię, nie odnoszę się do niczyjej wypowiedzi. W żaden sposób nie chcialem cię uraźić. Poprostu często widzę filmiki w stylu "300 morphow mojej głowy". Chyba się odnosiłem do nich:P
  7. Zgadzam się z SUPER_OKO. Nie sztuką jest zrobić szkielet twarzy stosując kości czy morphy, najważniejsze jest to żeby wszystko dało się łatwo później animować. Każdy potrafi nawalić pełno morphów czy użyć setek kości, ale nie w tym sens. Dodatkowo należy pamiętać o szybkości działania szkieletu, która przez wielu jest pomijana. Jeżeli chodzi natomiast o sam szkielet twarzy to bardzo dużo zależy też od tego jaką mimikę chcemy osiągnąć. Jeśli ma to być zwykłe poruszanie ustami np, wilka który nie będzie robił jakiś dziubków itd to kości spełnia swoją rolę. Natomiast to synchronizacji ust do mowy, albo pozy ala Alex z madagakaru do morphy lepiej sobie z tym poradzą. Dają one większą kontrolę nad siatką modelu przy bardzo ekstremalnych pozach. Ja osobiście preferuję hybrydę tych systemów: Kość żuchwy która łączę z morphami, do brwi i nosa używam kości. Na koniec stosuję tzw sticky points aby wrazie czego jakby morphy nie dawały rady to bym mógł osiągnąć daną pozę.
  8. Zapomniałeś dodać nawiasów na początku i końcu makra. Powinno być tak macroScript cornerknot category:"greg" ( b=selection as array for s in b do ( for o = 1 to (numSplines s) do ( for i = 1 to (numKnots s o) do ( setKnotType s o i #corner ) ) updateshape s ) )
  9. Witam, maxScript nie musi mieć zaznaczonych obiektów żeby wykonywać na nich operacje. Wystarczy mu, że wie co ma z czym zrobić. Najpierw, pokaże Tobie gdzie jest błąd w Twoim skrypcie: s = splineShape () - tutaj tworzysz linię, która nie ma żadnego wierchołka actionMan.executeAction 0 "40021" -- Selection: Select All - tutaj karzesz maxowi zaznaczyć wszystkie wierzchołki na lini setKnotType s 1 1 #corner - a tutaj z kolei, ma on zamienić pierwszy wierzchołek (którego nie ma) na corner I właśnie to samo on stara się ci powiedzieć - "shape spline index out of range: 1". Czyli- "W lini jaką mi pokazałeś nie ma wierzchołka o numerze 1" Jeśli przyjrzeć się dokładniej jak wygląda funkcja, z której korzystasz: getKnotType (#smooth | #corner | #bezier | #bezierCorner ) = spline = numer splinu w spline:P (jak masz spline to mozesz tam mieć kilka lini, np jak użyjesz przycisku attach = numer wierzchołku (#smooth | #corner | #bezier | #bezierCorner ) = typ na jaki chcesz zamienić wierzchołek Zatem żeby zrobić skrypt, który będzie zamieniał wierzchołki trzeba przejść przez takie kroki: 1. Stworzyć zbiór wybranych przez Ciebie linii (w maxscript nazywa się to array) 2. Dla każdej linii w tym zbiorze sprawdzić czy ile jest tam linii 3. Dla Każdej wewnętrznej linii, okreslić ile ona ma wierzchołków 4. Dla każdego wierzchołka w każdej wewnętrznej linii zmienić tym z #smooth na #corner Czyli zakładając, że wybierasz na raz tylko linie a nie np Geometrie, kości, helpery itd, skrypt powinien wyglądac tak: b=selection as array for s in b do ( for o = 1 to (numSplines s) do ( for i = 1 to (numKnots s o) do ( setKnotType s o i #corner ) ) updateshape s ) Pozdrawiam, i Życzę miłej zabawy ze skryptowaniem w maxie.
  10. Jest to tutorial zrobiony dla użytkownika Sfix1, pokazuje on jak zrobić suwaki do sterowania dłonia oraz jak przypisać jeden kontroler do kilku suwaków. Zamieszczam go tutaj, ponieważ może komuś też się przyda. Tutorial podzielony jest na 2 części. W pierwszej pokazuje jak zrobić zginające się palce drogą tradycyjną. W drugiej części pokazuje jak zrobić to samo za pomocą prostego skryptu, który pokazuje jak zrobić. Tutorial Part 1: Hand UI_1 Tutorial Part 2: Hand UI_2 Pozdrawiam
  11. Ponieważ obraz mówi więcej niż słowo pisane, zrobiłem ci Video Tutorial. Przedstawia on proces przypisywania szkieletu do suwaków oraz proces tworzenia tych suwaków. Tutorial podzielony jest na 2 części. W pierwszej pokazuje jak zrobić zginające się palce drogą tradycyjną. W drugiej części pokazuje jak zrobić to samo za pomocą prostego skryptu, gdzie pokazuje jak go napisać. Tutorial Part 1: Hand UI_1 Tutorial Part 2: Hand UI_2 Pozdrawiam
  12. Jedyne co musisz zrobić to dodanie kolejnego kontrolera do rotacji. - wybierasz kość palca - Graph Editor->New track View - Przechodzisz do konkretnej osi w rotatcji - klikasz prawym myszy na tą oś i wybierasz assign controller - z listy wybierasz float list - otwierasz "+" przy wybranej przez ciebie osi i zaznaczasz zaznaczasz available. Prawy myszy na to, assign controller i wybierasz bazier float - teraz masz 2 możliwości przypisania wartości, czyli twoje suwaki. Pozdrawiam
  13. W maxie 2009 Animation->Parameter Editor Attributes holder to jest modyfikator taki sam jak skin czy edit poly. Pozdrawiam
  14. ""ukrywasz ciało w modelu"-Hide selected? o to ci chodziło?" - tak dokładnie o to:) Jeżeli chodzi o żuchwę, to możesz dla niej zrobic kość oraz morphy, które poprawią błędy przy jej poruszaniu (np zęby będą przenikać przez ciało). Polecam 4 płytę Paula Neale, która w całości jest poświęcona szkielotowi twarzy (zarówno z wykorzystaniem mięśni jak i morphow) Jeżeli masz zrobioną taką kość to poprostu linkujesz język do tej kości i będzie się poruszał tak samo jak żuchwa. Co do kolejnego pytania- rozumiem, że palce chcesz zginać przy pomocy HI solver? Jeżeli tak, to szczerze mówiąć poleciłbym inną opcję, która da ci więcej kontroli nad palcami oraz będziesz mógł użyć suwaków do ich sterowania. Mianowicie musisz tylko zrobić wire parameters osi kości odpowiedzialnej za (np zginanie się palca) do suwaka. Suwaki możesz zrobić bez pomocy skryptów. Musisz dodać do obiektu empty attributer, następnie włączasz Parameter Editor (alt + 1) i tam wybierasz co chcesz dodać (slider, spinner itd) wpisujesz nazwę ustawiasz wygląd oraz wybierasz zakres suwaka i typ wartości jakie ma przyjmować (w twoim przypatku będzie to "float" czyli liczby typu 1,2; 0,5; 9,2 itd) Następnie wciskasz Add i już masz swój własny suwak, przycisk itd.
  15. Najpierw wypowiem się na temat kości twarzy. Jeżeli wiesz jak je zrobić to śmiało możesz wybrać tą opcję. Odpowiednio zrobione kości twarzy są bardzo szybkie, oraz dają nieograniczone możliwości. Tylko musisz zadać sobie pytanie, czego oczekujesz od szkieletu twarzy. Jezeli chcesz prostą mimikę, albo nie potrzebujesz jakiś bardzo przerysowanych póz to morphy są świetne. Co do tego, że masz już zeskinowana głowę do jednej kości. Nie stanowi to żadnego problemu, jedyne co musisz zrobić to po zrobieniu kości twarzy wejść w skin, zaznaczasz vertexy głowy i dajesz na "unbake verts" czy jakoś tak:P Po tym możesz juz normalnie ten obszar ciała ponownie skinować przy pomocy envelopów. Naturalnie jak skończysz skinować przy ich pomocy to znowu musisz zaznaczyć te vertexy i dać na Bake verts. Teraz co do morphow. Zacznę od szybkości jego działąnia: Jedną z opcji jest to co mówisz czyli detach głowy zrobienie morphow dla samej głowy i następnie atatch ja do ciała. Szczerze mówiąć jest to najwolniejszy sposób, ponieważ modyfikatory w maxie nie działają jakoś szczególnie szybko. Zatem Zobacz co max musi zrobić żeby przełączać się między pozami. 1. Zejść do pierwszego poziomu modelu (Edit Poly) 2. Połączyć głowę z ciałem przy każdym przesunięciu ciała czy głowy. 3. Następnie musi te obliczenia przełożyć na skinowanie. Co tak naprawdę powoduję, że wykonuje bardzo dużo pętli żeby wykonać deformacje. Teraz ta szybsze motoda polega na tym, że bierzesz cały model, kopiujesz go i wtedy sobie ukrywasz ciało w modelu, zostawiając widoczną samą głowę. Wtedy możesz sobie robić morphy. Tak zrobiony system jest bardzo szybki, oczywiście jak na morphy;) Dobra, rozpisałem się to kończe:P Pozdrawiam
  16. Co do ostatniego posta- Oczywiście nie wolno jednocześnie ustawiać envelopów oraz ręcznie edytować wag dla vertexów. Ogólna zasada jest prosta: na początku ustawaisz envelopy, następnie zaznaczasz vertexy oraz dajesz na bake vertex. I dopiero wtedy możesz ręcznie edytować wagi. Teraz co do twojego błedu szyi- bierze się on ponieważ nie masz kości dla szyi. Mimo tego że głowa twojej postaci jest złączona z tułowiem, to kość dla szyi być tam powinna. Pomoże ci uzyskać gładszą deformację głowy oraz pozbędziesz się zmiejszenia w tym miejscu siatki, co wystepuje przy skręcaniu kości. Oczywiście kość szyi nie powinna się obracać tak samo jak głowa, najlepiej daj orientation constraint na szyje i daj 50 procent na głowę i 50 na tułów. Zauważyłem również, że nie masz kości obojczyków. Bez nich postać nie będzie w stanie podnieść rąk wyżej niż na wysokość ramion. Przy próbie przekroczenia tego poziomu będziesz miał bardzo dziwne deformacje ramion. Pozdrawiam
  17. pchela1313

    Schody ruchome

    Hehe, proszę bardzo. Nie, ja żadnych tutków nie robiłem. Cieszę się, że podobają ci się moje rzeczy:) Jeżeli chcesz zacząć bawić się skryptowaniem to oczywiście polecam tutoriale z cgacademy. Jeżeli nie robisz szkieletów i nie chcesz sobie zaprzątać głowy macierzami to spokojnie starczą te z poziomu intermediate. Generalnie bardzo dużo rzeczy idzie się dowiedzieć z F1. Od maxa chyba 6 zajmuję się nim Bronisław "Bobo" Petrov, który bardzo dobrze go napisał. Pozdrawiam
  18. pchela1313

    Schody ruchome

    Jeżeli chcesz łatwo animować schody to teraz też masz taką możliwość: - w grupie "Animate Percent" wpisujesz o ile mają się przesunąć - wciskasz auto key i następnie "Move Along Path" nowy kod try (destroyDialog pathConstraint) catch () rollout pathConstraint "Path Constraint Setup" ( group "Spine Select" ( pickbutton pickSplineB "Pick Spline" edittext curSpline "Current Spline:" readOnly:true ) Group "Path Vonsraint" ( button addPathCons "Add Path Constraint" ) group "Path Value" ( button setPercVal "Set Along Path val" spinner addPathPerc "Set Steps" ) Group "Animate Percent" ( button animPerc "Move Along Path" spinner AnimPercVal "Set Steps" ) local SplineB,s on pickSplineB picked elem do ( curSpline.text=elem.name SplineB=elem ) on addPathCons pressed do ( try( s=selection as array for o in s do ( o.position.controller=position_list() num=o.position.controller.count+1 o.position.controller[num].controller=path_constraint() o.position.controller.active=num o.position.controller[#Path_Constraint].path=SplineB ) )catch() ) on setPercVal pressed do ( try( s=selection as array for i = 1 to s.count do ( o=(i-1)*addPathPerc.value s[i].position.controller[#Path_Constraint].percent=o ) )catch() ) on animPerc pressed do ( try( s=selection as array for i = 1 to s.count do ( o=AnimPercVal.value s[i].position.controller[#Path_Constraint].percent +=o ) )catch() ) ) createDialog pathConstraint
  19. pchela1313

    Schody ruchome

    Zrobiłem Ci narzędzie, którego szukasz. Skopiuj ten kod i wklej do "max script editor" i daj na "evaluate all" lub "ctrl + e" Ten skrypt dodaje path constraint jak i umożliwia zmianę procentową. - wybierasz spline - zaznaczasz stopnie czy inne elementy - jeżeli nie masz jeszcze dodanych path constraint to wciskasz "Add path constraint" - następnie suwakiem ustawiasz co ile mają być odstępy schodów na splinie i wciskasz "set along path val". Czyli jak masz np 5 stopni i ustawisz suwak na 25 to pierwszy stopien bedzie na 0 kolejny na 25 itd - jeżeli później chcesz zmienić wartość na splinie to tylko zmieniasz wartość suwakiem i jeszcze raz wciskasz "set along path val" try (destroyDialog pathConstraint) catch () rollout pathConstraint "Path Constraint Setup" ( group "Spine Select" ( pickbutton pickSplineB "Pick Spline" edittext curSpline "Current Spline:" readOnly:true ) Group "Path Vonsraint" ( button addPathCons "Add Path Constraint" ) group "Path Value" ( button setPercVal "Set Along Path val" spinner addPathPerc "Set Steps" ) local SplineB,s on pickSplineB picked elem do ( curSpline.text=elem.name SplineB=elem ) on addPathCons pressed do ( try( s=selection as array for o in s do ( o.position.controller=position_list() num=o.position.controller.count+1 o.position.controller[num].controller=path_constraint() o.position.controller.active=num o.position.controller[#Path_Constraint].path=SplineB ) )catch() ) on setPercVal pressed do ( try( s=selection as array for i = 1 to s.count do ( o=(i-1)*addPathPerc.value s[i].position.controller[#Path_Constraint].percent=o ) )catch() ) ) createDialog pathConstraint
  20. Moją ocenę co do animacji już znasz:P Co do twojego drugiego pytania to ja używałem root'a postaci do np animacji skoku na biczu Indiego. Przesuwałem sobie całą postać i szybko mogłem sobie ustawić ładną krzywą lotu (masz tylko jeden element do opanowania, a nie ręce, nogi biodra itd), następnie tylko animowałem kończyny.
  21. Miałem ten sam problem przy pisaniu mojego transform holder. Mi udało się z tym problemem uporać, ale widać że w bipedzie on występuje. Wczytywanie póz działa względem tego małego elementu co jest w bipedzie, przez co ten mały element nie jest tak naprawdę brany pod uwagę przy zapisywaniu póz. Niestety chyba nie uda ci się wczytywać póz tak jak chcesz, chociaż mogę się mylić ponieważ jakimś specem od bipeda to nie jestem. Jedyne rozwiązanie jakie mi przychodzi do głowy to po wczytaniu pozy, musisz jeszcze raz ustawić ten mały element w bipedzie, tak żeby pasował. Pozdrawiam
  22. pchela1313

    wire parametrs

    Taaak, filmy Paula Neale'a bardzo dobrze znam. Skrypt którego on tam używa nazywa się "M group" i właśnie robi dokładnie to samo co ci napisałem z tym linkowaniem. Dlatego za każdym razem kiedy on tworzy kości twarzy to właśnie używa tego skryptu własnie żeby pozbyć się początkowych transformacji. Skoro przerabiasz te filmy to bardzo polecam ten skrypt, ułatwi ci bardzo pracę. Tutaj masz link do tego skryptu: http://www.paulneale.com/scripts/PEN_mGroup.zip Instalacja: plik mGroupMacros.mcr skopiuj do 3DSMax/UI/Macroscripts plik mGroup.ms skopiuj do 3DSMax/Scripts/Startup Jeżeli będziesz miał jeszcze jakieś problemy to pisz. EDIT: Tu masz kolejny skrypt jakiego On używa "PEN Tools" http://www.paulneale.com/scripts.htm#PENTools
  23. pchela1313

    wire parametrs

    Jeżeli dobrze zrozumiałem twój problem to zakładam, że element który ma się przemieszczać tak samo jak ten drugi, jest zlinkowany do jeszcze jednego elementu? Jeżeli tak jest to błąd się bierze stąd, że wireparameters nie działa tak naprawdę w układzie lokalnym tylko w Parent. Dlatego jak przesuwasz jeden element to drugi się przesuwa inaczej. Aby to naprawić musisz zrobić tak: 1. Stwórz helpera i zlinkój go do tego samego obiektu co ten, który ma się przemieszczać. 2. Wciśnij "Align" i wybierasz ten obiekt, który ma się przemieszczać.Nastepnie zaznaczasz osie x y z dla "Align Position" oraz "Align orientation" oraz Pivot Point po lewej i prawej stronie. 3. Teraz zlinkój ten obiekt co ma się przemieszcać do tego helpera. 4. Następnie zrób wireparameters. Powinno pomóc, jeśli dalej będzie nie działać to daj znać. Pozdrawiam
  24. Najlepsze efekty da ci zrobienie stretchy bones. Ja niestety w tej chwili nie mam jak ci napisac jak to zrobic, poniewaz do pon nie ma mnie w domu. Ale jak poszukasz to chyba nawet na forum znajdziesz:) jak do pon nie znajdziesz rozwiązania to napisze jak takie cos zrobic:) Pozdrawiam
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności