Vai al contenuto

70MadMax

Members
  • Portfolio

    Portfolio
  • Numero messaggi

    528
  • Registrato

  • Ultima Visita

  • Days Won

    4

Attività reputazione

  1. Like
    70MadMax ha ricevuto reputazione da Michele71 in Script di copia UV   
    Ciao...lieto che ancora qualcosa di mio sia di interesse  oltretutto neanche ricordavo più di averlo scritto, tanto che tempo fa avevo trovato questa più che valida alternativa:
     
    https://gabnation.wordpress.com/2010/02/09/how-to-transfer-uvs-after-rigging/
     
    comunque, visto che il sito è down, copio lo script qui, ti basta fare un copia e incolla:
    global string $gMainProgressBar;  // This is defined on maya startup string $saObject[] = `ls -sl`; max_CopyUV($gMainProgressBar, $saObject[0], $saObject[1]); proc max_CopyUV(string $gMainProgressBar, string $sMainObject, string $sSecondObject) {     int $iEdges = getMeshEdges($sSecondObject);     polyMapCut ($sSecondObject + ".e[0:" + $iEdges + "]");     int $iFaces = getMeshFaces($sMainObject);     progressBar -edit         -beginProgress         -isInterruptable false         -status "Copying UVs ..."         -maxValue $iFaces         $gMainProgressBar;     int $iCounter = 0;     int $i;     for($i = 0; $i < $iFaces; $i++) {         copyUV_proc($sMainObject, $sSecondObject, $i);         $iCounter++;         if($iCounter < 10) continue;         $iCounter = 0;         progressBar -edit             -step 10 $gMainProgressBar;     }     progressBar -edit         -endProgress         $gMainProgressBar;          progressBar -edit         -beginProgress         -isInterruptable false         -status "Sewing Edges..."         -maxValue $iFaces         $gMainProgressBar;          $iCounter = 0;     for($i = 0; $i < $iFaces; $i++) {         copyUV_mainFace_proc($sMainObject, $sSecondObject, $i);         $iCounter++;         if($iCounter < 10) continue;         $iCounter = 0;         progressBar -edit             -step 10 $gMainProgressBar;     }     progressBar -edit         -endProgress         $gMainProgressBar;      } proc copyUV_proc(string $sMainObject, string $sSecondObject, int $iFace) {     int $iaVertices[] = getVerticesFromFace(($sMainObject + ".f[" + $iFace + "]"));     int $iVertices = size($iaVertices);     int $i;     for($i = 0; $i < $iVertices; $i++) {         int $iUV = getUVFromVertexFace($sMainObject, $iFace, $iaVertices[$i]);         float $faUVPos[] = getUVPosFromUV(($sMainObject + ".map[" + $iUV + "]"), 4);         $iUV = getUVFromVertexFace($sSecondObject, $iFace, $iaVertices[$i]);         polyEditUV -r false -u $faUVPos[0] -v $faUVPos[1] ($sSecondObject + ".map[" + $iUV + "]");     } } proc copyUV_mainFace_proc(string $sMainObject, string $sSecondObject, int $iFace) {     int $iaFaceEdges[] = getEdgesFromFace(($sMainObject + ".f[" + $iFace + "]"));     int $iFaceEdges = size($iaFaceEdges);          int $i;     for($i = 0; $i < $iFaceEdges; $i++) {         copyUV_mainFaceEdge_proc($sMainObject, $sSecondObject, $iaFaceEdges[$i]);     }      } proc copyUV_mainFaceEdge_proc(string $sMainObject, string $sSecondObject, int $iaFaceEdges) {     int $iaFaces[] = getFacesFromEdge(($sMainObject + ".e[" + $iaFaceEdges + "]"));     if(1 == size($iaFaces)) return;     int $iaVertices[] = getVerticesFromEdge(($sMainObject + ".e[" + $iaFaceEdges + "]"));          int $iUV0 = getUVFromVertexFace($sMainObject, $iaFaces[0], $iaVertices[0]);     int $iUV1 = getUVFromVertexFace($sMainObject, $iaFaces[0], $iaVertices[1]);     int $iUV2 = getUVFromVertexFace($sMainObject, $iaFaces[1], $iaVertices[0]);     int $iUV3 = getUVFromVertexFace($sMainObject, $iaFaces[1], $iaVertices[1]);          if(($iUV0 != $iUV2) || ($iUV1 != $iUV3)) return;          polyMapSew ($sSecondObject + ".e[" + $iaFaceEdges + "]"); } // ******************************************************************************** // ************************************ //DATO UN UV, RITORNA LA SUA POSIZIONE* // ************************************ proc float[] getUVPosFromUV(string $sUV,int $iPrecision) {     float $faUVPos[] = `polyEditUV -q $sUV`;     $faUVPos[0] = RoundOff($faUVPos[0],$iPrecision);     $faUVPos[1] = RoundOff($faUVPos[1],$iPrecision);     return $faUVPos; } // **************************************************** //DATA UNA FACCIA E UN VERTICE, RITORNA L'UV ASSOCIATO* // **************************************************** proc int getUVFromVertexFace(string $sObject, int $iFace, int $iVertex){     string $saUV[] = `polyListComponentConversion -fvf -tuv ($sObject + ".vtxFace[" + $iVertex + "][" + $iFace + "]")`;     int $iaUVs[] = componentRange($saUV[0]);     return $iaUVs[0]; } // ********************************** // DATA UNA FACCIA RITORNA I VERTICI* // ********************************** proc int[] getVerticesFromFace(string $sFace) {     string $saVertices[] = `polyListComponentConversion -ff -tv $sFace`;     int $iaVertices[] = componentRangeExpanded($saVertices);     return $iaVertices; } // ***************************************** //DATA UNA MESH, RITORNA IL NUMERO DI EDGES* // ***************************************** proc int getMeshEdges(string $sObject) {     int $iaEdges[] = `polyEvaluate -e $sObject`;     return $iaEdges[0]; } // ***************************************** //DATA UNA MESH, RITORNA IL NUMERO DI FACCE* // ***************************************** proc int getMeshFaces(string $sObject) {     int $iafcs[] = `polyEvaluate -f $sObject`;     return $iafcs[0]; } // ********************************** // DATA UNA FACCIA RITORNA GLI EDGES* // ********************************** proc int[] getEdgesFromFace(string $sFace) {     string $sEdges[] = `polyListComponentConversion -ff -te $sFace`;     int $iaEdges[] = componentRangeExpanded($sEdges);     return $iaEdges; } // ****************************** //DATO UN EDGE RITORNA I VERTICI* // ****************************** proc int[] getVerticesFromEdge(string $sEdge) {     string $saVertices[] = `polyListComponentConversion -fe -tv $sEdge`;     int $iaVertices[] = componentRangeExpanded($saVertices);     return $iaVertices; } // **************************************** // DATO UN EDGE RITORNA LE FACCE ASSOCIATE* // **************************************** proc int[] getFacesFromEdge(string $sEdge) {     string $saFaces[] = `polyListComponentConversion -fe -tf $sEdge`;     int $iaFaces[] = componentRangeExpanded($saFaces);     return $iaFaces; } // ********************************************************************** // *************************** //ARROTONDA UN NUMERO 'FLOAT'* // *************************** proc float RoundOff(float $Number, int $Precision) {     if($Precision > 0) {         float $roundscale = pow(10,$Precision);         if($Number > 0)             return (((float)(int)($Number*$roundscale + 0.5)) /$roundscale);         else             return (((float)(int)($Number*$roundscale - 0.5)) /$roundscale);     } else {         float $roundscale = pow(10,-$Precision);         if($Number > 0)             return (((float)(int)($Number/$roundscale + 0.5)) *$roundscale);         else             return (((float)(int)($Number/$roundscale - 0.5)) *$roundscale);     } } // ************************************************** //dato ad esempio pSphere1.vtx[0:25] ritorna { 0, 25}* //dato ad esempio pSphere1.vtx[0] ritorna { 0, 0}    * // ************************************************** proc int[] componentRange(string $select) {     string $buffer[];     int $i, $tokens;     int $elements[2] = { 0, 0 };     $tokens = `tokenize $select "[:]" $buffer`;     $elements[0] = $elements[1] = int($buffer[1]);     if($tokens > 2) $elements[1] = int($buffer[2]);          return $elements; } // ************************************************************************** //dato ad esempio pSphere1.vtx[0:5] ritorna { 0, 1, 2, 3, 4, 5}                * //dato ad esempio pSphere1.vtx[0] ritorna { 0 }                                * //dato ad esempio pSphere1.vtx[0] E pSphere1.vtx[3:5] ritorna { 0, 3, 4, 5}    * // ************************************************************************** proc int[] componentRangeExpanded(string $saSelection[]) {     int $iSelection = size($saSelection);     int $iaRes[];     clear $iaRes;     int $iCounter = 0;     int $i;          for($i = 0; $i < $iSelection; $i++) {         int $iaTemp[] = componentRange($saSelection[$i]);         if($iaTemp[0] == $iaTemp[1]) {             $iaRes[$iCounter] = $iaTemp[0];             $iCounter++;             continue;         }                  int $i2;         for($i2 = $iaTemp[0]; $i2 < $iaTemp[1]; $i2++) {             $iaRes[$iCounter] = $i2;             $iCounter++;         }         $iaRes[$iCounter] = $i2;         $iCounter++;              }     return $iaRes;      }  
     
  2. Like
    70MadMax ha ricevuto reputazione da Michele71 in Piccolo script di retopology in Maya   
    Ciao a tutti, ogni tanto...
    volevo condividere con voi la "gioia" di un mini algoritmo per il retopology in Maya, mi è sempre piaciuto uno dei metodi di 3dCoat e ZBrush dove con delle "strokes" poi si potevano generare poligoni, non l'ho mai trovato applicato in Maya e, se non c'è...tocca farlo a me (forse ho cercato male, comunque una piccola soddisfazione c'è).
    Lo script non è completo e, se mi basta quello che fa, mai lo sarà, ma nel suo piccolo...funziona.
    Ciao a tutti.

    [media=]
  3. Like
    70MadMax ha ricevuto reputazione da LacioDrom83 in Qualche script per Maya   
    Ciao a tutti,
    ho fatto un paio di script per Maya, ma siccome il mio software è un po' datato (2011 su un xp a 32bit) mi chiedevo se qualcuno interessato mi poteva dire se giravano bene anche su versioni più recenti.
    Poi se vi piacciono, e magari avete qualche miglioria da proporre...mi ci divertirò sopra un po'...
    Vi allego i link per scaricare il funzionamento degli script, poi, se volete, vi mando lo script vero e proprio (solo mel script, nessun codice "oscuro").
     
    1) una versione rivisitata e migliorata di un mio vecchio script, che consente di "disegnare" curve su di una mesh in Maya (nurbs, bezier, le classiche curve di Maya) per poi riportarle automaticamente su Photoshop o Illustrator per crearci una texture:
    https://mega.nz/#!Q1ZyAKYC!V4t8rtXwGiBarz2ccUhT4iGj5ePlWx3aXbqKxdZRF_Q
    2) Uno "stupidissimo" script che prende una mesh già "unwrappata" e la restituisce con un doppio smooth e con le uv sistemate in modo da poter applicare una texture senza distorsione
    https://mega.nz/#!NsIyQYRC!Ngyzsw0VlKetzJBuZ2WY7xu8FP1fK09WddR-6aTx0Gc
    3) Uno script un po' meno stupido per la creazione di capelli, guidati da una NurbsSurface modificabile interattivamente vedendo il risultato, con inoltre la possibilità di convertire i capelli in proxy ecc...ecc....
    qui la documentazione
    https://mega.nz/#!Vt5m1SJT!o1ZLrl89LelPW4uPoGQw4o1-GFBKEFx88BhcMx6tS44
     
    qui un esempio di utilizzo
     
    https://mega.nz/#!o0YRFQQZ!sQCbdFlyaijAyNhqGn_4bjwdoa08RveNA2qHqJIGUwg
     
    se vi va...
    grazie ragazzi.
    Max
  4. Like
    70MadMax ha ricevuto reputazione da Michele71 in Piccolo script di retopology in Maya   
    ti ringrazio,
    lo script non è completo, ma se riesco in questi giorni gli do' una "bottarella" e lo posto, felice che ti sia piaciuto.
  5. Like
    70MadMax ha ricevuto reputazione da Michele71 in Piccolo script di retopology in Maya   
    Ciao a tutti, ogni tanto...
    volevo condividere con voi la "gioia" di un mini algoritmo per il retopology in Maya, mi è sempre piaciuto uno dei metodi di 3dCoat e ZBrush dove con delle "strokes" poi si potevano generare poligoni, non l'ho mai trovato applicato in Maya e, se non c'è...tocca farlo a me (forse ho cercato male, comunque una piccola soddisfazione c'è).
    Lo script non è completo e, se mi basta quello che fa, mai lo sarà, ma nel suo piccolo...funziona.
    Ciao a tutti.

    [media=]
  6. Like
    70MadMax ha ricevuto reputazione da LacioDrom83 in Creatore di UI per Maya : maxUIBuilder   
    Ciao a tutti,
    vi presento il mio ultimo lavoro, un creatore di UI per Maya, interamente fatto in Maya...
    Uno script che con pochi click rende automatico un lavoro a volte lungo e noioso(senza parlare degli errori).
    Fatemi sapere se vi può piacere.

    qui trovate l'help per farvi un'idea di come funziona (il primo link...New : maxUIBuilder on-line help) e subito sotto (sempre nella mia home page perennemente in costruzione) il link per scaricarlo.

    Avevo provato ad inserire l'help anche nel download, ma dopo 10 minuti che caricava mi sono stancato, ora potete scaricare solo il programma, ma non è difficile da usare.

    Lo cercavo inutilmente da tempo e avevo trovato solo cose o incomplete o che non erano esattamente come le volevo, con questo script potete vedere in tempo reale cosa state 'combinando' e passare più tempo a codificare (potete farlo anche dal programma) e meno a scrvellarvi tra i layouts.


    http://70madmax.vndv.com/

    grazie a tutti per l'attenzione e alla prossima, ho già pronto un floorGenerator per Maya che è diventato un generatore di pavimenti, muri, piastrelle e non so cos'altro...a risentirci
  7. Like
    70MadMax ha ricevuto reputazione da LacioDrom83 in Creatore di UI per Maya : maxUIBuilder   
    Ciao a tutti,
    vi presento il mio ultimo lavoro, un creatore di UI per Maya, interamente fatto in Maya...
    Uno script che con pochi click rende automatico un lavoro a volte lungo e noioso(senza parlare degli errori).
    Fatemi sapere se vi può piacere.

    qui trovate l'help per farvi un'idea di come funziona (il primo link...New : maxUIBuilder on-line help) e subito sotto (sempre nella mia home page perennemente in costruzione) il link per scaricarlo.

    Avevo provato ad inserire l'help anche nel download, ma dopo 10 minuti che caricava mi sono stancato, ora potete scaricare solo il programma, ma non è difficile da usare.

    Lo cercavo inutilmente da tempo e avevo trovato solo cose o incomplete o che non erano esattamente come le volevo, con questo script potete vedere in tempo reale cosa state 'combinando' e passare più tempo a codificare (potete farlo anche dal programma) e meno a scrvellarvi tra i layouts.


    http://70madmax.vndv.com/

    grazie a tutti per l'attenzione e alla prossima, ho già pronto un floorGenerator per Maya che è diventato un generatore di pavimenti, muri, piastrelle e non so cos'altro...a risentirci
  8. Like
    70MadMax ha ricevuto reputazione da Robot21 in Esportare In Obj   
    Che sarebbe:
    Window->Setting/Preferences->Plug-in Manager
    objExport.mll
    spunta su loaded (e auto load se ti serve sempre)
  9. Like
    70MadMax ha ricevuto reputazione da Michele71 in Script per uv di modelli semplici   
    Sta migliorando direi...


  10. Like
    70MadMax ha ricevuto reputazione da nicoparre in Orme Fangose Con Maya   
    prego...ti facilito le cose...sono in un momento in cui non mi va di fare niente, quindi faccio questo:

    Nuova scena;
    crea un NurbsPlane, scale 24,24,24 e patchesU e V 50;
    Soft/Rigid Bodies->Create Soft Body->options;
    Edit->Reset poi Create;
    Crea una sfera poligonale e alzala un po' in Y;
    Particles->Make collide->Options;
    Edit->Reset poi Create;
    Window->Relationship Editor->Dynamic Relationships;
    a sx selezioni nurbsPlane1Particle, a dx sotto Collisions pSphereShape1 e chiudi;
    selezioni la sfera e vai al frame a 1 sulla timeline, premi s;
    vai a frame 12 e abbassi la sfera in modo che attraversi il piano un po' e premi s;
    vai a frame 24 e riporta su la sfera, premi s;
    Window->Settings/Preferences->Preferences;
    Tabella Time Slider zona Playback metti la playback speed a Play every Frame(nelle simulazioni dinamiche sempre così);
    Seleziona le particles e metti il campo Conserve a 0.5;
    Play.
  11. Like
    70MadMax ha ricevuto reputazione da yogurt in Problema Matematico   
    Ciao,
    se le variazioni tra i due valori possono essere stabilite da una formula matematica tipo B = 10 - A o simili è abbastanza semplice, crei un PlusMinusAverage node e il gioco è fatto, oppure in altri casi magari un MultiplyDivide node...
  12. Like
    70MadMax ha ricevuto reputazione da nevermind1711 in Maya - Animare Una Bobina Cinematografica   
    Guarda, dimmi se ti piace,
    crei prima una spirale di ossa, + ce ne sono meglio è:



    Poi crei una curva, un cv ogni osso e poi la continui per tutto il percorso(metti i cv molto vicini)



    crei l'ikspline, noterai il parametro offset



    giocandoci un po' vedrai che le ossa seguiranno la spline fino alla fine, svolgendo la bobina



    qui ho semplicemente estruso una faccia di un cubo(metti mooooooolte divisioni, più delle mie)



    qui l'ho semplicemente "smoothata" ed eseguito il binding alle ossa



    Ora, giocando con l'offset dell'ikspline, la pellicola andrà...



    naturalmente la mia modellazione è di 5 minuti nell'intervallo del pranzo già miseramente finito, questaè l'idea, ora vai tu e facci sapere...
  13. Like
    70MadMax ha ricevuto reputazione da Robot21 in Importare Un Video Come Texture   
    allora...ripeto perchè non si faccia confusione:

    METODO 1:

    hai un file avi (es. miofile.avi)
    crei un plane
    gli assegni un nuovo lambert
    al colore del lambert assegni una texture di tipo MOVIE
    carichi nel nodo MOVIE miofile.avi
    selezioni la casella use image sequence
    (Non ricordo se la velocità di riproduzione deve essere play every frame, cmq così funziona sicuro)
    premi play o ti sposti sulla timeline


    METODO 2:

    hai una serie di immagini che però devono essere nominate in una maniera particolare:
    immagine.1
    immagine.2
    immagine.3
    ecc......

    NON immagine.0001, immagine.0002....ecc....
    NON immagine.1.jpg

    praticamente quello che di solito indica l'estensione del file deve invece essere il suo numero, senza padding...quindi 1,2,3,4,5,6,7,8,9,10,.......(spiego dopo)

    crei un plane
    gli assegni un nuovo lambert
    al colore del lambert assegni una texture di tipo FILE
    carichi nel nodo FILE immagine.1
    selezioni la casella use image sequence
    (Non ricordo se la velocità di riproduzione deve essere play every frame, cmq così funziona sicuro)
    premi play o ti sposti sulla timeline


    Vedrai che viene generata una expression che dice una cosa del tipo : file1.extension = frame;
    Il che vuol dire che ad ogni frame lui prende il numero e lo mette come se fosse l'estensione del file,
    quindi al frame 1 carica immagine.1, al frame 146 carica il file immagine.146
  14. Like
    70MadMax ha ricevuto reputazione da Robot21 in Texture As Projection   
    o il layered texture




    1) suppergiù come funziona photoshop
    2) non vedo perchè no, puoi anche assegnare uv sets differenti ad ogni texture
    3) prova a selezionarlo e poi a muoverlo, ruotarlo scalarlo e via così...vedrai l'effetto




    Ancora non ho mai avuto bisogno di usarlo in tal senso ma,il file di photoshop l'hai creato tu da 0?
    rispondo così a senso...appena ho tempo lo provo ma, ad esempio, quando crei un file psd come texture, lui non crea solo livelli, ma anche gruppi tipo :diffuse, Bump ecc.... questo per sapere dove andare poi a mettere ogni singolo livello...può essere quello...prova a fare l'inverso, cioè creati un file psd Texturing->Create PSD Network[] (opzioni)
    fanne uno semplice, poi, in una nuova scena prova a convertire quello in layered texture, se funziona, il mio senso ha ragione, se no dimmi e vedremo
  15. Like
    70MadMax ha ricevuto reputazione da Robot21 in Le Istanze In Maya   
    Dunque...
    un oggetto è composto da un nodo che ne definisce la forma e uno che ne definisce le trasformazioni, due oggetti uno istanza dell'altro condividono il nodo 'forma', quindi ogni cambiamento che la modifica (sposti un vertice, ruoti un edge ecc... ) viene effettuato su tutti e due gli oggetti, mentre il nodo di trasformazione (muovi, ruota scala...riferito all'intero oggetto non al singolo componente come vertici, facce, edges) è indipendente uno dall'altro.
    Se non cancelli la storia puoi ancora cambiare la base di creazione dei due oggetti come ad esempio le divisioni o il raggio di una sfera...naturalmente il cambiamento avverrà per tutti e due.

    C'è una voce di menu Modify->Convert->Instance To Object che non fa altro che 'staccare' questa connessione...se ne esamini il codice vedi che non fa altro che segnarsi il nome dell'oggetto, cancellarlo e riduplicare l'oggetto 'padre' rinominando la copia come quella cancellata senza però farne una istanza.

    A parte come ha detto doubleL93, non esiste uno shortcut, ma te lo puoi creare tranquillamente come ogni altra(o quasi)cosa in Maya.
    Se copi una primitiva in maniera 'normale' la copi senza storia, se vuoi copiarla con la storia devi andare su:
    Edit->Duplicate Special[] (opzioni), resettare e mettere la spunta su:Duplicate input graph.
    Così facendo copierai anche la storia (copiata, non istanziata) e avrai due oggetti 'uguali' che però potrai modificare singolarmente anche nelle opzioni di creazione senza che si influenzino a vicenda.
  16. Like
    70MadMax ha ricevuto reputazione da Robot21 in Esportare In Obj   
    Che sarebbe:
    Window->Setting/Preferences->Plug-in Manager
    objExport.mll
    spunta su loaded (e auto load se ti serve sempre)
×