Skocz do zawartości

guzikk

Members
  • Liczba zawartości

    17
  • Rejestracja

  • Ostatnia wizyta

Odpowiedzi dodane przez guzikk

  1. Hmm...możesz też stworzyć curve [np okrąg] i podpiąć do niego kamerke poprzez attach to motion path i jest git. Do tego możesz albo ustawić kąt kamery na sztywno [i wtedy camera będzie na przykład zawsze poruszać się prostopadle do linii prawym bokiem do przodu] albo stworzyć locator, podpiąć camerkę aim constraintem pod ten locator i wtedy camerka zawsze bedzie na niego patrzyła niezależnie od tego jaka będzie jej trasa [bo przecież można trochę zmodyfikować owy okrąg].

    Mam nadzieję że pomogłem, pozdrawiam.

  2. Wybaczcie że się wtrącam ale mam pytanie do Krisa - a gdybym chciał uzyskać podobną funkcjonalność skrzydła tyle że pod Mayą to co byś polecał użyć do tego by było to zarówno efektowne jak i efektywne?

    Od razu powiem że nigdy wcześniej nie robiłem rigu skrzydła i pierwsze co mi przyszło do głowy do jakiś skrypt napisać a w szczególnych przypadkach wykorzystać blendshape'y.

  3. "Chyba Viste wywale i przejde na 7." = Chyba wywalę martwą rybę i kupię sobie żywą.

    Jasne że się przerzucaj.

     

    Btw - też jestem z wawy. Zupełnie nie ciągnie mnie do modelowania, za to od pewnego czasu rigguje i poszukuję modeli do rigu. Zarówno postaci jak i maszyn. Może chciałbyś mi podesłać pare swoich modeli? :)

    Ponadto bardzo chętnie wymienię się doświadczeniami z riggowania. Jakbyś był chętny to wal:

    [email protected]

  4. Z góry przepraszam, że tyle pytań zadaje, ale nie wszystko jest do znalezienia w sieci : P.

     

    Otóż chciałem się dowiedzieć na czym polega mechanizm działania node'a. Dlaczego jest on szybszy od expression skoro, i to, i to, jak mi się zdaje, wykonuje działania w każdym framesie? Innymi słowy na czym polega ta cudowna różnica między tymi dwoma elementami?

    W jakich przypadkach lepiej użyć Node'a, a w jakich Expression [to chyba poniekąd wyniknie samo z odpowiedzi na pierwsze pytanie :)]?

     

     

    Pozdrawiam

  5. Czy są jakieś sposoby na on/off expression?

    Narazie poradziłem sobie z problemem robiąc atrybut typu boolean i wsadziłem całe expression do warunku if [if zależny od owego atrybutu].

    Ale mam dziwne przeczucie że istnieje przynajmniej jeszcze jedna metoda stworzenia takiego switcha.

  6. z tego co wiem nic się nie zmieniło. Jakiś czas temu podjąłem się próby pisania w pythonie pod mayą i zrezygnowałem po tym jak się okazało że i tak i tak sprowadza się to do operowania na MELu. A - tak jak mówisz - przydałoby się móc pisać w innym języku niż MEL. Wręcz możnaby się pokusić o aplikację typu Eclipse albo NetBeans dla Mayi. To by dopiero było. Wygodniejsze skryptowanie i tworzenie GUI. Ehh...

  7. Oto działający kod:

     

    if(`window -exists "addFKControl"`)
    deleteUI "addFKControl";
    
    if(`windowPref -exists "addFKControl"`)
    windowPref -r "addFKControl";
    
    
    
    window -rtf true -title "Add FK Controller" addFKControl;
    columnLayout -rowSpacing 5 addFKControlColumn1;
    	intSliderGrp -label "Number of sides" -field true -minValue 3 -maxValue 32 -value 4 FKnumber;
    	intSliderGrp -label "Height divisions" -field true -minValue 1 -maxValue 32 -value 1 FKheight;
    	floatSliderGrp -label "Radius" -field true -minValue .0001 -maxValue 2 -value 1 FKradius;
    	text -label "Controller Orientation";
    	separator -ann "Controller Orientation" -w 250;
    	radioCollection addFKRadioGrp1;
    	rowLayout -numberOfColumns 3 addFKControlRow1;
    			radioButton -label "+X" posX;
    			radioButton -label "+Y" posY;
    			radioButton -label "+Z" posZ;
    	setParent ..;
    	rowLayout -numberOfColumns 3 addFKControlRow2;
    			radioButton -label "-X" negX;
    			radioButton -label "-Y" negY;
    			radioButton -label "-Z" negZ;
    	setParent ..;
    	separator -w 250;
    	button -c "addFKControlPrep" -label "Create";
    setParent ..;
    showWindow addFKControl;
    
    radioCollection -e -sl posX addFKRadioGrp1;
    
    // Preparation phase
    
    global proc addFKControlPrep(){
    $sel = `ls -sl`;
    string $a;
    float $length;
    
    // See if we have anything selected
    
    if (size($sel) == 0){
    	error "Select a target";
    }
    
    // Recurence trough selection
    
    for($a in $sel){
    
    		$child = `listRelatives -c $a`;
    
    		if (size($child) > 0 && nodeType($child[0]) == "joint"){	// If the target is a joint calculate the length
    			float $componentX = `getAttr ($child[0] + ".tx")`;
    			float $componentY = `getAttr ($child[0] + ".ty")`;
    			float $componentZ = `getAttr ($child[0] + ".tz")`;
    			$length = `mag (>)`; 
    		} else {													// If not - set length to 1
    			$length = 1;
    		}
    	int $nGon = `intSliderGrp -q -value "FKnumber"`;				// Read values
    	int $height = `intSliderGrp -q -value "FKheight"`;
    	float $rad = `floatSliderGrp -q -value "FKradius"`;
    	string $orient = `radioCollection -q -sl addFKRadioGrp1`;
    	addFKControl( $nGon, $height, $length, $rad, $a, $orient);		// Make the main function
    }
    }
    
    global proc string addFKControl ( int $nGon, int $height, float $len , float $radius, string $targetName, string $orient) {
    
    string $name = $targetName + "_FK_control";
    
    float $vertCoords[] = {};
    string $command = "curve -d 1 ";
    float $step = 360/$nGon;
    float $angle = 0 - ($step/2);
    string $endcommand = " ";
    	for ($a = 0; $a 			$angle +=$step;
    		float $resultX = (`cos (deg_to_rad($angle))`) * $radius;
    		float $resultY = (`sin (deg_to_rad($angle))`) * $radius;
    		$vertCoords[($a*2)] = $resultX;
    		$vertCoords[($a*2) + 1] = $resultY;
    	}
    
    $vertCoords[$nGon*2] = $vertCoords[0];	
    $vertCoords[($nGon*2)+1] = $vertCoords[1];	
    for ($n = 0; $n 		float $div = 1.0;
    	float $flHeight = ($height/$len) * 1.0;
    	int $count = 0;
    	for ($a = 0; $a 			float $div = `floor($n/$nGon)`;
    		$command += "-p " + $vertCoords[($a*2)] + " " + ($n/$flHeight) + " " + $vertCoords[($a*2) + 1] + " ";
    		$command += "-p " + $vertCoords[(($a+1)*2)] + " " + ($n/$flHeight) + " " + $vertCoords[(($a+1)*2) + 1] + " ";
    		$command += "-p " + $vertCoords[(($a+1)*2)] + " " + (($n+1)/$flHeight) + " " + $vertCoords[(($a+1)*2) + 1] + " ";
    		$command += "-p " + $vertCoords[($a*2)] + " " + (($n+1)/$flHeight) + " " + $vertCoords[($a*2) + 1] + " ";
    		$command += "-p " + $vertCoords[($a*2)] + " " + ($n/$flHeight) + " " + $vertCoords[($a*2) + 1] + " ";
    		$count = $a;
    	}
    	$command += "-p " + $vertCoords[($count*2)] + " " + (($n + 1)/$flHeight) + " " + $vertCoords[($count*2) + 1] + " ";
    
    }
    $command += $endcommand;
    $command += " -n ";
    $command += $name;
    $curveNode = `eval ($command)`;
    
    $curveNodeShape = `listRelatives -c $curveNode`;
    rename $curveNodeShape ($curveNode + "Shape");
    
    if ($orient == "posX"){
    	setAttr ($curveNode + ".rotateZ") -90;
    	makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $curveNode;
    }
    if ($orient == "negX"){
    	setAttr ($curveNode + ".rotateZ") 90;
    	makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $curveNode;
    }
    if ($orient == "negY"){
    	setAttr ($curveNode + ".rotateZ") 180;
    	makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $curveNode;
    }
    
    if ($orient == "posZ"){
    	setAttr ($curveNode + ".rotateX") 90;
    	makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $curveNode;
    }
    if ($orient == "negZ"){
    	setAttr ($curveNode + ".rotateZ") -90;
    	makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $curveNode;
    }
    
    $controlOrient = `group -em -n ($targetName + "_FK_control_orient")`;
    	setAttr ($controlOrient + ".scalePivotX") ($radius / 10);
    	setAttr ($controlOrient + ".scalePivotY") ($radius / 10);
    	setAttr ($controlOrient + ".scalePivotZ") ($radius / 10);
    parent $curveNode $controlOrient;
    copyMatrixAddFK ($targetName, $controlOrient, 1);
    
    // Set proper rotation order.
    
    setAttr ($curveNode + ".rotateOrder") (`getAttr ($targetName + ".rotateOrder")`);
    
    return $curveNode;
    }
    
    global proc copyMatrixAddFK( string $sourceObj, string $targetObj, int $worldSpace){
    string $command;
    float $sourceMatrix[];
    if($worldSpace == 1){
    	$sourceMatrix = `xform -q -ws -m $sourceObj`;
    	$command = "xform -ws -m ";
    } else {
    	$sourceMatrix = `xform -q -os -m $sourceObj`;
    	$command = "xform -os -m ";
    }
    
    string $matrix;
    string $a;
    for($a in $sourceMatrix){
    	$matrix += $a;
    	$matrix += " ";
    }
    
    $command += $matrix;
    $command += $targetObj;
    
    eval($command);
    };

     

    Wszystko pięknie bangla. Istny miodek. Big Thx Kroopson za skrypt.

  8. dobra, znalazłem błąd.

     

    w 4 linii kodu

    if(`windowPref -exists "addFKControl")

     

    brakowało gravisa przed nawiasem zamykającym

    if(`windowPref -exists "addFKControl"`)

     

     

    EDIT

    oho, widzę tu więcej błędów. Prawdopodobnie przez to że zmieniły się flagi metod. Postaram się to poprawić i przesłać wersję działającą na aktualnym oprogramowaniu.

  9. Co do skryptu:

    wyrzuca mi syntax error. Mój ulubiony error z czasów pisania w C ;P. I szukaj tu teraz błędu składni. To ja już wolę Jave ;]

     

    Przejżę ten kod i jak znajdę przyczynę erroru to dam znać.

     

     

    Serdeczne dzięki za wyjaśnienie problemu - zdecydowanie przyda mi się ta wiedza. Poświęcę jej niebawem więcej uwagi by dokładnie przeanalizować i zrozumieć zagadnienie interakcji constrainta na obiekt constraintowany na tyle dobrze by umieć wytłumaczyć komuś innemu.

  10. Tu jednak chodzi chyba faktycznie o to na co wskazuje Kroopson. Zrobiłem parę doświadczeń i faktycznie wyszło że to nie zależy od mirrora tylko od fragmentu przestrzeni na której działam.

    a zatem Kroopson móglbyś konkretniej wyjaśnić co masz na myśli?

  11. Przy orient constrain circle i bone, bone obraca się o -180, 180, -180. O co chodzi? Nie mam pojęcia skąd się to bierze tym bardziej że przy prawym odpowiedniku owej kości tego problemu nie było. Może to kwestia złego mirrora?

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności