Vai al contenuto

coren

Members
  • Portfolio

    Portfolio
  • Numero messaggi

    1505
  • Registrato

  • Ultima Visita

  • Days Won

    7

Attività reputazione

  1. Like
    coren ha ricevuto reputazione da bear75 in Nvidia Quadro vs Geforce in Max 2012 con Nitrous...la situazione si ribalta(?)   
    A parte che con la viewport di max non conta solo la gpu, ma più parti del computer(tipo cpu e ram ed anche i driver installati)
    io con un i7 920 overcloccato a 3.2 ghz, una 470 e 12gb di ram con gli ultimi driver nvidia installati il test 'city' dell'evermotion lo eseguo con questi tempi:
    max 2010: 60 secondi circa
    max 2012: 22 nitrous in shaded mode
    max 2012: 28 nitrous in realistic mode
  2. Like
    coren ha ricevuto reputazione da silver7 in icone a colori in 3d max   
    devi impostare le opzioni dei colori relativi alle icone:
    customize->customize user interface->tab "colors"-> nella lista in basso a sinistra seleziona la voce "Icons:enabled"
    Imposta i valori "saturation" "value" e "Transparency" rispettivamente a: 80 100 100

    controlla che "invert" NON sia spuntato e che "contrast" e "gradient map" siano entrambi a 0

    una volta fatte le modifiche clicca su "apply colors now"


    ciao
  3. Like
    coren ha ricevuto reputazione da Kyashan 78 in 3ds Max 2008 » Smussare Un Poligono: Chamfer ...ecc   
    eccomi qua, ho avuto un pò di tempo per fare delle prove ed ho trovato una strada per replicarlo, ci sono ancora molti problemi da risolvere ma almeno qualcosa si è mosso.

    ho replicato la tua immagine con i vari chamfer:


    Nella prima colonna c'è la versione originale.
    Nella seconda ho usato il chamfer di max, difatti ho notato che senza edge aggiuntivi si comporta esattamente come il bevel di maya.
    Nella terza in pratica ho selezionato tutti i poligoni nuovi creati dal chamfer e gli ho applicato un tessellate.
    Nella quarta ho selezionato gli edge più interni generati dal tessellate(solo quelli dei loop) e gli ho applicato un chamfer.

    Il risultato per quanto riguarda la topologia mi sembra molto vicino a quello che vogliamo ottenere, l'unico problema sono quegli edge aggiuntivi che o vanno tolti o bisogna trovare un'altra strada per creare la topologia.


    Per il momento ho creato uno script che mi esegue solo il primo chamfer e che seleziona le facce e gli edge interessati.
    Il problema è trovare il modo giusto per generare la topologia, per il momento il mio problema è trovare un modo per togliere quegli edge in +(il problema è trovare l'algoritmo che li riconosca)

    suggerimenti?
  4. Like
    coren ha ricevuto reputazione da algosarK in rayfire   
    per questi problemi mi sa che è meglio rivolgersi all'autore.
    Inoltre avendolo pagato è un tuo diritto avere il supporto.

    ciao
  5. Like
    coren ha ricevuto reputazione da Kyashan 78 in 3ds Max 2008 » Smussare Un Poligono: Chamfer ...ecc   
    eccomi qua, ho avuto un pò di tempo per fare delle prove ed ho trovato una strada per replicarlo, ci sono ancora molti problemi da risolvere ma almeno qualcosa si è mosso.

    ho replicato la tua immagine con i vari chamfer:


    Nella prima colonna c'è la versione originale.
    Nella seconda ho usato il chamfer di max, difatti ho notato che senza edge aggiuntivi si comporta esattamente come il bevel di maya.
    Nella terza in pratica ho selezionato tutti i poligoni nuovi creati dal chamfer e gli ho applicato un tessellate.
    Nella quarta ho selezionato gli edge più interni generati dal tessellate(solo quelli dei loop) e gli ho applicato un chamfer.

    Il risultato per quanto riguarda la topologia mi sembra molto vicino a quello che vogliamo ottenere, l'unico problema sono quegli edge aggiuntivi che o vanno tolti o bisogna trovare un'altra strada per creare la topologia.


    Per il momento ho creato uno script che mi esegue solo il primo chamfer e che seleziona le facce e gli edge interessati.
    Il problema è trovare il modo giusto per generare la topologia, per il momento il mio problema è trovare un modo per togliere quegli edge in +(il problema è trovare l'algoritmo che li riconosca)

    suggerimenti?
  6. Like
    coren ha dato la reputazione a Michele71 in Script Assegna Materiale   
    Coren, ti meriti tanti "+" per ogni tua risposta...sei un grande! io ti metto un punto reputazione e spero lo faccia anche Frenk per il grande aiuto che gli hai dato!
    @Frenk: una volta che hai completato il lavoro, perchè non inserisci il tuo script nella sezione download? Sarebbe fantastico!


  7. Like
    coren ha ricevuto reputazione da Michele71 in Script Assegna Materiale   
    si, si può:

    selection.material = myLibrary["qui metti il nome esatto del materiale che ti interessa"]

    Piccolo suggerimento per migliorare lo script: crea un'interfaccia in modo da non dover cambiare il codice dello script ogni volta che lo usi, anche un'interfaccia molto semplice può migliorare di parecchio l'utilizzabilità dello script.

    ciao
  8. Like
    coren ha ricevuto reputazione da johnwhile in Script Assegna Materiale   
    per il discorso della libreria devi usare la collezione riservata del maxscript: materialLibrary
    Puoi anche salvarla su file e viceversa caricarla da file.
    se nella guida del mascript ricerchi la parola 'materialLibrary' il primo risultato è quello che cerchi.

    un consiglio:
    Non usare variabili globali che si chiamano 'a' o 'aa', potrebbero creare problemi ti interazione con altri script\plugin.
    Non usare il selectmore in quel modo, ti rallenta tantissimo l'esecuzione dello script; c'è un topic proprio a riguardo nella sezione "how to make it faster" nella guida, cito:


    difatti se nell'help cerchi 'selectmore' il primo risultato è proprio quel topic, al suo posto prova ad usare:

    --in questo modo selezioni solo il contenuto di questo vettore select entdaselez --in questo modo fai la stessa cosa che facevi col selectMore, ma molto più veloce join entdaselez (selection as array) select entdaselez

    quello che fai col join è aggiungere al primo vettore(in questo caso entdaselez che contiene tutti gli oggetti del layer) gli elementi del secondo(la selezione corrente convertita in un array di oggetti)


    per domande son qua


    ciao


    edit: mi è venuto in mente uno script che fa già questa cosa, è theOnion un layer manager veramente comodo che permette di gestire i materiali da layer e inoltre permette di averli impostati come materiali alternativi, ovvero che una volta che non li si vuole più si possono disabilitare e ritornano i materiali originari degli oggetti, lo puoi scaricare da scriptspot
  9. Like
    coren ha ricevuto reputazione da Michele71 in Script Assegna Materiale   
    si, si può:

    selection.material = myLibrary["qui metti il nome esatto del materiale che ti interessa"]

    Piccolo suggerimento per migliorare lo script: crea un'interfaccia in modo da non dover cambiare il codice dello script ogni volta che lo usi, anche un'interfaccia molto semplice può migliorare di parecchio l'utilizzabilità dello script.

    ciao
  10. Like
    coren ha dato la reputazione a statib in Pioggia Con Pflow   
    Ciao a tutti.
    Questo tutorial ci permette di realizzare un effetto pioggia utilizzando il Pflow di max.
    Prima di partire ricordo che lavorare in scala corretta evita di commettere errori e che, parlando qui sempre di valori piccoli, lavorero in cm.

    Partiamo.





    Impostiamo subito, i cm da unit setup.

    Andiamo nel Time Configuration e settiamo il tempo utile dell’animazione a 500 frame.



    Fase di modellazione degli oggetti.


    Creiamo ora gli oggetti base che serviranno alla nostra animazione.
    Gli oggetti sono quattro: gocce, pozzangherine, gocce di rimbalzo, pozzangherine di rimbalzo.
    Cominciamo subito costruendo le pozzangherine.






    Per costruire le pozzangherine useremo le spline, facciamo le forme in modo da renderle diverse, cosi da simulere successivamente varie e differenti cadute.
    Diciamo che qui ne uso 7 diverse ma potete usarne molte di più.






    Convertiamole una in Edit Poly e cominciamo ad editarla, entriamo in sub-oggetto Poligons e selezioniamo il poligono che costituisce l'oggetto,
    facciamo Insert e Collapse, a questo punto avremo una figura come nell’immagine.






    Entriamo ora un Sub-object Edge, selezioniamo uno degli edge generati e selezioniamo gli altri con il comando Ring, usiamo ora il comando Connect per generare loop di edge come in figura.






    Entriamo in Sub-object Vertex, selezzioniamo il vertice piu centrale e con Softselection attivato alziamo la parte centrale sull'asse Z, in modo da dare un po di ingombro alla nostra pozzangherina.






    Controlliamo che non sia troppo sporgente.






    Ripetiamo le operazioni per le altre pozzangherine.






    Selezioniamone una e creiamo l'animazione, cominciamo con porre un modificatore Noise, ed inseriamo i valori di partenza.

    parameters
    seed=0
    scale=1

    strenght
    X=1 cm
    Y=1 cm
    Z=0 cm






    Spostiamoci ora sulla Timeline e settiamoci al fotogramma 15, useremo 15 fotogrammi per definire la piccola animazione di una pozzangherina che si amplia.
    Attiviamo Autokey e facciamo una scalatura di sei volte maggiore. e andiamo ad editare il Noise, cambiamo il valore seed=20.






    Eseguiamo questa animazione su tutte le pozzangherine.
    Alla fine selezioniamole e gruppiamole nominando il gruppo in pozzangherina.






    Costruiremo ora le gocce, partendo da una sfera e usando un Edit Poly per modificarla, selezioniamo il vertice allo zenitale e tiriamolo sull'asse Z, usando il Soft Selection.






    Anche qui anumeremo le gocce utilizzando il metodo usato per le pozzangherine.

    Valori:

    parameters
    seed=0
    scale=1

    strenght
    X=0,1 cm
    Y=0,1 cm
    Z=0,1 cm






    Possiamo ora personalizzarle un pochino, cambiandone la forma, o i seed, magari inpostandone alcuni a 15 altri a 7(mi riferisco al fotogramma 15).
    Qui ovviamente le gocce non necessitano di scalatura animata, cosa che invece le pozzangherine necessitavano, perche una volta impattate queste verranno eliminate.

    Gruppiamole e rinominiamole, facciamoci anche una copia, che servira per le gocce di rimbalzo e le pozzangherine di rimbalzo.






    Le gocce di rimbalzo non necessitano di coda per cui eliminiamo dalla gerarchia oggetto il Edit Poly, tornando cosi a una gerarchia composta da Sfere e Noise.
    basta renderle oblunghe con il comando Scale, gruppiamole con il nome di gocce di rimbalzo.






    Per le pozzangherine di rimbalzo usate sempre un copia delle gocce, eliminate sempre il Modoficatore Edit Poly, e spuntare l'opzione Hemisphere a 0,5.





    Scaliamole con il comando Scale nell'asse Z, gruppiamole e rinominiamole in pozzangherine di rimbalzo.

    Bene ora gli oggetti che ci servono sono pronti, abbiamo 4 gruppi, gocce, pozzangherine, gocce di rimbalzo, pozzangherine di rimbalzo.






    Creiamo un piano che simulerà il terreno (asfalto in questo caso).






    Inseriamo il nostro Pflow, e allineameaolo in modo che sia centrale e sopra al piano di impatto.




    Andiamo a costruire la nostra gerarchia all’interno del Pflow, vediamo in particolare i le azzioni e i comportamenti che la compongoni, i valori riportati non sono fissi ma vanno personalizzati adattandoli alle nostre esigenze.



    Ora lo schema che seguiremo, per costruire il Pflow, sara questo:

    1) PFsurce 001.
    2) Event 001, genera le gocce e fa impattare le stesse al suolo, e le manda al Event 002
    3) Event 002, genera le pozzangherine, e le manda al Event 003

    4) Event 003, genera le gocce di rimbalzo, e le manda al Event 003
    5) Event 004, genera le pozzangherine di rimbalzo.






    Partiamo.

    L’PFsurce 001 è gia presente, serve per renderizzare il tutto, va lasciato inalterato.

    All’interno dell’Event 001 selezioniamo Bird e per ora impostiamolo a 200
    (poche particelle in fase di progetto, poi alla fine impostatelo tra le 5000 e le 10000).
    Modifichiamo solo l’Emit Stop a 500, per coprire tutta l’animazione.






    (Event 001) Speed 001, serve per dare la velocità della caduta, impostiamolo per ora a 1 cm. e variation a 0,3 cm.






    (Event 001) Rotation 001, cambiamo il parametro Orentation Matrix su Speed space follow e il parametro Y= -90 ( questo valore serve a dire a max che la goccia ruota solo nell’asse Y di 90 gradi.






    (Event 001) Shape Instance, serve a dire al Pflow di prendere il gruppo Gocce in caduta e rendere le particelle utilizzando le gocce, qui molto importante il parametro Group Member, e Animate Shape, spuntati (il GM serve per dire a max che deve prendere ogni oggetto contenuto nel gruppo, altrimenti ad ogni particella va ad associare l’intero gruppo, AS avvisa il Pflow che le gocce sono animate).







    (Event 001) Inseriamo ora un Collision, servirà a dire che quando le gocce impattano sul piano devono mandarci all'Event 002, creiamo dunque un deflettore piano e alineamolo al piano (asfalto), e inseriamolo nella lista dei deflettori di Collision 001.







    Creiamo ora un Event 002, impostiamo lo Speed 002.

    Valori:
    speed= -45 cm
    variation= 25 cm (seve a dare una variazione di velocita tra le particelle)
    divergence= 20 (seve ad ampliare il cono di rimbalzo)






    (Event 002) Rotation, Orientation Mode settato su, Work Space.






    (Event 002) Shape Instance, vale lo stesso discorso fatto sopra selezzioniamo pero il gruppo Pozzangherina.
    Il parametro Group Member, e Animate Shape, spuntati, qui invece cambiamo il parametro Sysnc By, in Event Duration.






    (Event 002) Mettiamo ora uno Spown, servira a generare tante goccioline per ogni goccia che impatta, cambiare i valori:

    Offspring=24
    Variation=50
    Inherited=75
    Variation=20
    Divergence=20






    (Event 003) Mettiamo ora un nuovo evento e andiamo ad editare lo Speed

    Speed=-45
    Variation=25
    Divergence=20
    Poniamo anche un rotation, settato a default.






    (Event 003) Mettiamo in scena un 'altro oggetto Force, un Gravity.
    Colleghiamo il Gravity al Force del Pflow.






    (Event 003) Poniamo nel terzo gruppo un nuovo Shape Instance 003, vale lo stesso discorso fatto sopra selezzioniamo pero il gruppo Gocce di rinbalzo.
    Il parametro Group Member, e Animate Shape, spuntati.







    (Event 003) Mettiamo ora un Collision, serve per richiamare l’Event 003, quando le particelle ci impattano.






    Mettiamo ora l'ultimo Event 004, settiamolo cosi lo Speed:

    speed= 0 cm
    variation= 0 cm
    divergence= 0






    (Event 004) Shape Instance, vale lo stesso discorso fatto sopra selezzioniamo pero il gruppo Pozzangherine di rimbalzo.
    Il parametro Group Member, e Animate Shape, spuntati, qui invece cambiamo il parametro Sysnc By, in Particle Age.






    (Event 003) Mettiamo sempre il nostro Rotate, con Orientation Matrix, Speed Space e i valori a 0.






    Ecco la gerrarchia finale è questa.
    Ora modifichiamo altre piccole cose.






    Mettiamo un Material Istance e facciamo una istanza del materiale acqua.

    Ora siamo pronti per renderizzare, poniamo in scena camere, luci e materiali, e possiamo renderizzare.






    Proviamo l’animazione.




    Faccio una postilla importante, cosi per capire meglio i parametri:

    1)se volete aumentare la velocità della pioggia dovete cambiare i valori Speed che trovate negli eventi, maggiore il valore maggiore è la velocità.
    4)se volete aumentare divergence esso influenza il cono di direzione, per cui aumentandolo aumenta la confusione.
    3)teniamo presente che la gravita influenza la velocity
    4)valori negativi vengono letti come contrari.
    5)Possiamo sbizzarrirci a provare varie combinazioni di valori, magari Variation o Scale ma sempre tenendo basse il numero di Bird iniziali, pena tempi lunghi e molti grattacapi.

    Buon divertimento e alla prossima.


    http://www.youtube.com/watch?v=bnfFZUklxbE

  11. Downvote
    coren ha dato la reputazione a Fabioz in Come Posso Creare Un Oggetto Che Scorre All'interno Di Un'altro E Quando Termina Non Esce Di Fuori Con 3Ds Max?   
    Mi sono iscritto a questo forum proprio per queste piccole cose che ancora non so fare perciò se non sai come procedere per Creare Un Oggetto Che Scorre All'interno Di Un'altro E Quando Termina Non Esce Di Fuori, non rispondere
  12. Like
    coren ha dato la reputazione a statib in Bubble Explosion   
    ciao a tutti
    il tutorial che ho scritto serve per realizzare una piccola sequenza animata di una bolla che viene colpita da una freccetta, un slowmotion dell'esplosione. Usero un prucchetto in diproboolean e il pflow.

    spero di essere abbastanza chiaro e di non saltare passaggi.

    cominciamo



    Setiamo le unita su millimetri, e diamo Ok.

    fig.01



    Costruiamo una freccetta , un oggetto che servira per innescare l'esplosione della bolla, è facilissimo da modellare per cui non mi soffermo sulla modellazione.



    Creiamo inoltre una sfera di raggio 60 cm e 60 segmenti.
    La sfera creata simulera la bolla che verra esplosa.



    Inseriamo un oggetto cubo, che chiamero "utensile". Questo cubo ha dimensini di 150mm, e seggmenti sul lato X e Y di 30.
    Quest'oggetto servira per simulare l'esplosione vera e propria.





    Creiamo l'animazione della freccettain modo da farla partire a velocita media, rallentare prima dell'impatto , farla procedere lentamente e riprendere velocità uscita dalla bolla.
    Settimo cosi 4 chiavi di animazione:
    time=0 freccia al punto di partenza
    time=50 impatto
    time=450 fine impatto
    time=500 fine animazione.



    Andiamo a creare ora l'esplosione della bolla.
    selezioniamo la "bolla" e includiamola in un Proboolean, e sottraiamo l'"utensile" cubo.
    Ricordiamoci di spuntare Cookie, in modo da lasciare aperto il punto di taglio, questo evitera di avere una bolla irreale che ricorda un'arancia tagliata, mentre una bolla deve essere un'oggetto vuoto.
    Per il momento non vedrete nessuna modifica, infatti il cubo "utensile" non interseca la sfera "bolla" per qui quest'ultima rimane invariata.



    Procediamo animando il taglio.
    entriamo nel suboggetto del proboolean e selezioniamo il cubo "utensile", andiamo al fotogramma 50 (primo fotogramma di incisione) entriamo in Auto Key e creiamo la chiave di partenza, poi spostiamoci avanti verso il fotogramma 450 e creiamo una chiave spostando il cubo "utensile" alla fine della sfera "bolla", vedremo che la sfera scomparira.



    Facciamo una piccoa modifica, la bolla che esplode, ha una velocita elevatissima, tanto da rendere impossibile , a ochhio nudo, vedere la sua esplosione, cio significa che per tanto che la freccetta sia veloce, la bolla esplodera piu velocemente.Per questo motivo, facciamo in mode che quando la freccetta si trova a 2/3 della bolla, quest'ultima sia ga esplosa totalmente:
    Spostiamo quindi la chiave posta al frame 450 al frame 380.



    Il risultato finale è questo, la freccetta rimane indietro rispetto all taglio della bolla.



    Nascondiamo per ora la freccetta e selezioniamo la "bolla" proboolean, estraiamo una copia della sfera originale, ci servira per creare un oggetto distributore per il pflow.



    Inseriamo nel canvas un pflow, lo useremo per generare delle piccole goccioline che andranno a completare l'effetto esplosione.



    Da vista right creiamo un deflettore e allineamolo in modo da contenere perfettamente la "bolla".
    Dimensioni 130mm per lato.



    Andiamo al fotogramma 50, e creiamo la prima delle due chiavi di animazione che animeranno il deflettore, il deflettore deve essere allineato alla freccetta.



    Creiamo la seconda chiave, avanzando il deflettore verso la fine della bola e al fotogramma 380.
    l'idea è che il deflettore debba seguire l'avanzamento della linea di taglio.



    Vediamo l'animazione e notiamo subito che il deflettore ha un andamento strano.
    Andiamolo a correggere con il Curve Editor.



    Nel curve Editor selezioniamo il deflettore e il parametro Position.Notiamo subito che le curve non sono bezier lineari ma smoot, per cui editiamo le chiavi utilizzando in e out lineari.
    selezioniamo la chiave tasto destro del mouse si apre il pannellino position con i tastini in out.



    Faciamo lo stesso per lasfera "bolla".



    Se necessario avanziamo di uno o duo fotogrammi le chiavi, in modo da avere un allineamento perfetto.



    Ora prepariamo il tutto per costruire il nostro pflow.
    Inseriamolo in scena e ruotiamolo in modo da seguire una direzzione contraria della feccetta.



    Metto anche un force Motor, servira per sporcare l'andamento delle particelle. allinemolo alla sfera sulla traiettoria della freccetta.
    Impostiamo un Basic Torque su 5.



    Questo è lo schema del Pflow che ho creato.
    Vediamo come funziona e i valori posti.



    Event 003 Birth
    l'emissione inizzia al fotogramma 49 e finisce sempre al 49, in pratica genera tutte le particelle in un solo frame, la scelta del fotogramma 49 è ovvia se lo mettessi settato a 0 calcoleremo 49 fotogrammi inutilmente.



    Event 003 Position Object
    selezioniamo l'oggetto che deve generare le particelle, appunto la "bolla generatrice".
    lasciamo il valore location settato su Surface.



    Event 003 Speed
    Settiamo il valore speed a 0, in modo che le particelle siano immobili.



    Event 003 Rotation
    Orientation settato su random.



    Event 003 Collision Spawn
    Questo serve per dire al pflow che quando le particelle incontrano un deflettore debbono dividersi, e passare al''evento collegato in questo caso Even 005.Qui ho dato i seguenti valori di divisione:
    offsring 10 (particelle nuove per ogni particella deflessa)
    variation 20%
    invece sotto i parametri speed:
    variation 51%
    devergence 114% (divergenza tra le particelle).



    Event 005 Speed
    Qui diciamo al pflow che dopo essere state generate dal deflettore, le nuove particelle debbono muoversi, per cui diamo i seguenti valori:
    speed=100mm
    variation=5%
    divergence=50.



    Event 005 Shape
    Forse non l'avete notato prima ma nel'evento 003 non vi è questo parametro, infatti li non serve, perche altrimenti vedremmo sulla bolla delle piccole goccioline.
    qui invece serve per rendere geometriche le particelle, per cui settiamo il valore 3d su spere 20 side e size su 0.8 mm.



    Event 005 Force
    Per dar un po di disturbo al tutto poniamo questo parametro e colleghiamoloa l motor
    influenza 1000%.



    Event 005 Delete
    questo parametro dice al pflow quanto devono durare (in trmini di tempo)le particelle che passano per l'Evento 005 settiamo i valori:
    life=3
    variation=1.



    Event 005 Material
    Serve il materiale per vedere le particelle e deve essere lo stesso dell'oggetto "bolla", trasciniamo percio nello slot una istanza del materiale usato.



    finale preview

  13. Like
    coren ha dato la reputazione a papafoxtrot in Architettura Ed Efficienza Delle Pipelines - Funzionamento Dell'hyper Threading   
    Come lavora l'Hyper Threading

    In pratica abbiamo visto che all'interno di una sequenza di istruzioni può accadere una situazione nella quale l'elaborazione non può procedere finché un certo dato inserito nella pipeline non è stato completamente elaborato, e dunque finché il dato non esce dalla pipeline. Questa condizione è chiamata stallo della pipeline.

    Allora cosa possiamo fare per rimediare a questo problema? Posso far svolgere alla pipeline delle istruzioni indipendenti, su degli altri dati.
    Carico la pipeline con altri dati ed altre istruzioni e finché non sono riuscito ad approntare dati e istruzioni per il primo thread lavoro sul secondo. Quando anche il secondo per qualche motivo va in stallo riprendo a lavorare sul primo, che intanto potrà procedere.

    Insomma l'HT permette di mantenere un maggior impiego della pipeline.

    Nuovo parallelo:
    Allo stabilimento della FIAT hanno finito le marmitte per le punto, e senza marmitta non possono andare avanti a montare niente. Così finché non gli arrivano le marmitte tutta la catena di montaggio della punto è ferma.
    Senza HT l'intero stabilimento della FIAT dovrebbe rimanersene li ad aspettare le marmitte con gli operai cassintegrati.
    Con l'HT la catena di montaggio, finché aspetta le marmitte delle punto, si metterà a montare delle Panda.
    Quando anche alla panda mancheranno... boh, i semiassi, metteranno da una parte le panda, e riprenderanno con le punto... nel frattempo sono arrivate le marmitte.

    Questo esempio non è del tutto corretto, perché le marmitte sono forniture indipendenti. L'esempio sarebbe più calzante se le marmitte fossero montate dalla stessa catena di montaggio, che più avanti delle punto in costruzione, sta costruendo marmitte. Finché non hanno finito di costruire le marmitte la catena resterebbe vuota.
    Non mi viene in mente un esempio così adeguato ed allo stesso tempo così semplice, purtroppo.

    Però l'esempio ci fa vedere alcune cose:
    1) Se voglio abilitare l'HT mi serve spazio... Finché lavoro sulle panda tutte le Punto mezze costruite le devo mettere da qualche parte. Serve quindi il raddoppio dei registri di cui ho parlato. Si parla di un +5% di spazio occupato, dunque di una CPU un 5% più grande.
    2) Come visto precedentemente posso cercare di aggirare lo stallo della pipeline. Se in anticipo riesco a capire che devo fare prima le marmitte, e poi le punto, non devo poi fermarmi ad aspettare le marmitte. Per eseguire un codice in maniera ottimizzata devo quindi riordinare le istruzioni in modo da limitare al massimo gli stalli della pipeline. Questo riordino non può essere fatto completamente a livello di compilatore, perché non so, ad esempio, quanti stadi è lunga la pipeline, e dunque con quanti cicli di clock di anticipo devo iniziare ad approntare i dati (alias, quanto tempo prima devo iniziare a costruire le marmitte).
    Se riesco a svolgere questo lavoro ottimamente l'HT nonserve più a nulla.
    3) Più è lunga la catena di montaggio, più soffrirà in caso di stallo. Se la catena è di 5 stadi, in caso di stallo resterà ferma per soli 4 cicli di clock, se la catena è di 50 stadi, ci vorranno 50 cicli prima che il dato necessario esca dalla catena e si possa ripartire (alias, se la catena è lunga ci vogliono più cicli prima che riesco a terminare le marmitte e intanto tutti gli operai dei 50 stadi prima rimangono a girarsi i pollici).
    4) Se la pipeline è più lunga può operare a frequenza maggiore, come per una catena di montaggio, più riesco a dividere il lavoro in fasi elementari, più queste fasi saranno brevi e la caena procede in fretta.

    Questo è il grosso motivo per cui il P4 è diventato lo stereotipo del fallimento in ambito CPU. Era stata scelta una pipeline lunghissima, che offriva velocità di clock maggiori, ma d'altra parte soffriva troppo degli stalli.

    Terminato il paragone con lo stabilimento della FIAT possiamo dire che:
    L'HT richiede il raddoppio dei registri di ogni stadio della pipeline, in modo che se un processo va in stallo posso arrestarlo e lasciarlo in sospeso, e nel frattempo liberare la pipeline perché possa elaborare altre istruzioni, relative ad un altro thread.
    Le esecuzioni dei due thread vengono portate avanti simultaneamente, ma alternativamente. Prima l'uno, poi quando il primo va in stallo si passerà all'altro, e quando questo dovrà fermarsi si tornerà al primo.

    E' chiaro che l'HT non consente di raggiungere le prestazioni di due pipeline parallele. Ed è altrettanto chiaro, ora, come non sia corretto parlare di core logico e fisico. Il core è uno, il sistema ne vede due perché può allocare due threads per ogni core del processore, e il processore lavorerà per un certo tempo all'uno e per un certo tempo all'altro threads.
    Questo modo di procedere potrà apparire disordinato, ma consente di impiegare ottimamente le risorse.
    D'altro canto a volte il multi threading è svantaggioso. Se il processo che è in esecuzione non è multi threaded, non è dunque suddivisibile in thread indipendenti e distinti, il sistema non potrà inviare al core due thread dello stesso processo.
    E' il caso dei videogiochi. Se un videogioco impiega al massimo quattro core (tipicamente due alla fisica, uno alla grafica, uno all'audio), il sistema non potrà inviare al processore 8 thread relativi al videogioco. E allora accade che invia su di un core un thread relativo al videogioco... ed uno relativo... boh, all'antivirus che è in background.
    A quel punto si verifica il fatto negativo. Se il thread del videogioco stalla all'interno della pipeline questa si metterà a lavorare all'altro thread, e finché questo non andrà anch'esso in stallo il core non lavorerà più al primo thread. Il software single threaded dunque subisce un rallentamento delle prestazioni quando eseguito su una CPU multi threaded, perché la pipeline non opera sul thread di interesse non solo per i cicli necessari a risolvere lo stallo, ma anche per tutti i cicli che intercorrono fino al successivo stallo del thread concorrente.

    L'esecuzione di processi concorrenti si riperquote in modo interessante sui consumi. Se si ativa l'HT le CPU scaldano di più. Ciò è ovvio se si pensa che con Hyper threading attivato diminuiscono i cicli durante i quali gli stadi della pipeline rimangono inoperosi (in idle). Più migliorano le prestazioni, più la differenza di calore dissipato è grande.
    O meglio, più un thread è affetto da stalli e dunque causa inoperatività della pipeline, meno la CPU consumerà.
  14. Like
    coren ha dato la reputazione a MatEvil in Pdf | 3D Studio Max 2011 Recensione Personale   
    Salve a tutti,

    in questi giorni ho concluso un pdf di recensione su 3D Studio Max 2011. Alcune parti non le ho volute approfondire per concentrarmi di più sul settore dell'Irradiance Particles. Al momento è disponibile sono in versione italiana non scaricabile, ma appena avrò tempo cercherò di divulgarlo anche per il download e in altre lingue.

    link al pdf on-line

    Ecco i contenuti

    Introduzione
    Interfaccia
    Slate Material Editor, Edit poly, Snap, Cat, Sketch-up plug-in
    Viewport Canvans
    Object Paint
    Quicksilver Hardware Rendering
    Mental Ray 3.8
    Shader nascosti
    Irradiance Particles
    Irradiance Particles Scripts
    Irradiance Particles Ctrl.Ghost Shader
    Tips&Trick
    Approccio filosofico
    Riferimenti esterni

    Spero vi piaccia e sia utile a qualcuno.

    Matteo Migliorini


  15. Like
    coren ha dato la reputazione a Michele71 in Creare Uno Slot Materiale Personalizzato In 3Dsmax   
    Creare un oggetto personalizzato da utilizzare nello Slot del Material Editor




    Ultimamente, scorrendo le pagine dell'Help di 3dsMax, ho trovato una sorpresa (almeno per me).
    E' possibile utilizzare un oggetto personalizzato, da utilizzare come geometria base nel Material Editor.
    Ci siamo stancati di visualizzare il nostro materiale sotto forma di sfera, cilindro o cubo? Si? Allora sostituiamo questi oggetti con uno tutto nostro!




    Nel mio esempio, ho utilizzato il modello/ Logo di Treddi.com chiamato "Gnak" liberamente scaricabile da:







    http://www.treddi.co...ione-di-shader/








    Prima di cominciare bisogna fare alcune considerazioni importati:



    • La scena da creare dove contenere un singolo oggetto che si inserisce in un cubo immaginario pari a 100 unità su ogni lato.
    • L'oggetto deve essere al livello principale della scena e non può essere collegato ad altri oggetti.
    • Se è presente più di un oggetto nella scena, solo il primo oggetto che compare nella gerarchia in "Track View" verrà utilizzato come oggetto di esempio.
    • Se l'oggetto non ha la casella di spunta per generare Coordinate di Mappatura, applicare ad esso un modificatore UVW Map.
    • Si deve salvare la scena in formato .MAX
    • Utilizzare la voce "Custom Sample Object" in "Material Editor Options dialog" del Material Editor per specificare il file da caricare.
    • Dopo aver caricato il file, viene visualizzato un nuovo pulsante con un punto interrogativo nella finestra a comparsa per la scelta del tipo Campione da utilizzare. Premendo questo pulsante, viene visualizzato il nostro oggetto personalizzato.
    • Se la scena salvata contiene solamente l'oggetto, lo slot campione verrà mostrato con illuminazione di default.
    • Se la scena contiene una telecamera e delle luci, è possibile utilizzare la telecamera per specificare la visuale e le luci per illuminare l'oggetto. Si può accedere spuntando la voce "Camera and/or Lights" nel gruppo "Sample Custom Object".




    Flusso di Lavoro



    Creare o carica una scena con un oggetto personalizzato.

    Creare un Box di riferimento di 100 unità su ogni lato.

    Con il tool "Align" centra il tuo oggetto con il Box di riferimento. Cancellare il Box.
    Se il tuo oggetto non ha riferimenti di mappatura, assegnare un modificatore UVW Map ad esso.

    Salva la scena come un file .MAX.

    Apri il Material Editor, scegli uno slot vuoto e click con il pulsante destro sopra di esso per aprire la finestra "Option".

    Nella finestra di dialogo, premi il "File Name" sotto il gruppo "Custom Sample Object" e apri il file salvato che contiene il tuo oggetto. Premi "Ok".

    Dallo slot scelto in precedenza, premi il pulsante "Sample Type" e scegli il pulsante che contiene il punto interrogativo.
    L'oggetto di esempio (sfera, cilindro o cubo) viene sostituito con il tuo oggetto personalizzato.

    Se le dimensioni del tuo oggetto non sono giuste per lo slot campione, regolarne le dimensioni e salvare nuovamente la scena. Per aggiornare lo slot campione in modo da utilizzare il file appena salvato, aprite la finestra "Option" nel Material Editor Options e premere "OK".




    Utilizzare una telecamera e luci personalizzate



    Crea una telecamera nella scena che contiene il tuo oggetto.

    Regola la grandezza del fotogramma della telecamera a 100x100. Cerca di racchiudere il tuo oggetto all'interno del frame aiutandoti con "Safe Frame".

    Se crei più di una telecamera nella scena, il Material Editor utilizzerà la prima telecamera presente in "Track View".

    Tip: Le finestre di visualizzazione hanno un differente aspect ratio rispetto allo slot campione, cosi se si utilizza "Zoom Extents" sul nostro oggetto nella finestra di lavoro, esso verrà mostrato molto più piccolo nello Slot Campione. Esegui uno Zoom sull'oggetto, e prima di salvare il file, aumenta un po' lo zoom stesso in modo tale che l'oggetto riempia completamente la finestra di lavoro. La proiezione nello Slot Campione si basa sulla larghezza della geometria dell'oggetto personalizzato e non sull'immagine nella finestra di lavoro.

    Se vuoi utilizzare una luce personalizzata piuttosto che l'illuminazione di default, prepara la tua scena con tutte le luci che vuoi e salva il proggetto.

    Nella finestra di dialogo "Option" nell'Editor dei Materiali, apri il file salvato e spunta la voce "Load Camera and/or Lights".

    Adesso il tuo oggetto personalizzato verrà mostrato nello slot campione attraverso la vista della telecamera e con le luci che tu hai impostato (invece delle luci di default).




    Video








    Spero che questo piccolo tutorial, possa essere di aiuto a tutti coloro che cercano qualcosa in più in Max.


    Ciao da Michele





    >>>>Download<<<<




  16. Like
    coren ha ricevuto reputazione da francesco orsini in Particelle Che Problema...   
    ad occhio e croce direi che il tuo problema è il valore di upper limit del tuo pfSource.
    E la differenza tra viewport e render è data dal quantity multiplier che se non l'hai toccato in viewport è settato a 50% mentre in rendering è settato a 100%.
    Quindi in fase di viewport col numero di particelle non arrivi all'upper limit, mentre in rendering ci arrivi prima della fine dell'animazione.

    fammi sapere


    ciao!
  17. Like
    coren ha ricevuto reputazione da francesco orsini in Particelle Che Problema...   
    ad occhio e croce direi che il tuo problema è il valore di upper limit del tuo pfSource.
    E la differenza tra viewport e render è data dal quantity multiplier che se non l'hai toccato in viewport è settato a 50% mentre in rendering è settato a 100%.
    Quindi in fase di viewport col numero di particelle non arrivi all'upper limit, mentre in rendering ci arrivi prima della fine dell'animazione.

    fammi sapere


    ciao!
  18. Like
    coren ha ricevuto reputazione da Michele71 in Rotate, Scale E Move In Maxscript   
    la rotazione non ti torna perchè ogni volta che tu modifichi il valore del tuo spinner tu ruoti l'oggetto, ma la rotazione si somma a quella eseguita nelle tue precedenti modifiche allo spinner.

    Esempio:
    1°volta: assegni 1 allo spinner -> l'oggetto in totale ha ruotato di 1
    2°volta: assegni 2 allo spinner -> l'oggetto in totale ha ruotato di 3(cioè prima 1 e poi 2)
    3°volta: assegni 3 allo spinner -> l'oggetto in totale ha ruotato di 6(cioè prima 1, poi 2 ed infine 3)

    se guardi questo esempio noterai che la rotazione è corretta:

    precRot=0.0 rollout test "Test Rotation" ( Spinner sp "X" range: [-180,180,0] on test close do ( currentRot = (eulerangles (-precRot) 0 0) as quat for obj in selection do rotate obj currentRot ) on sp changed val do ( currentRot = (eulerangles (val-precRot) 0 0) as quat for obj in selection do rotate obj currentRot precRot=val ) ) CreateDialog test

    perchè ogni volta sottraggo il valore della rotazione precedente a val, che è il valore della nuova rotazione.


    Poi ho aggiunto un evento che fa si che la rotazione dell'oggetto una volta che chiudi il rollout venga rimessa a posto.
    Te l'ho messa solo per farti capire il concetto.

    E' uno script di esempio, per trasformarlo in uno script finale andrebbe sistemato un pò(ad esempio precRot è una variabile globale e bisognerebbe dargli un nome un pò più complicato...)


    ciao
  19. Like
    coren ha ricevuto reputazione da Michele71 in Funzioni Parametri Locali Globali Importare Da File   
    Ma devi creare una utility o devi creare uno script che una volta eseguito ti crea la dialog con le varie opzioni?
    Se è la seconda allora al posto di 'utility' devi scrivere 'rollout'.

    La serie di errori che ti dà succedono perchè tu richiami una funzione quando ancora non l'hai definita.

    Tieni presente che in maxscript non è necessario dichiarare in precedenza alcuna variabile.
    Se tu provi ad eseguire questo codice:

    fn provaVariabili val=( a+=val print a ) provaVariabili 10 a=2 La prima volta che lo esegui nel listener ti comparirà: provaVariabili() -- Error occurred in provaVariabili(); filename: C:\Documents and Settings\Michele\Desktop\WCI\; position: 33; line: 2 -- Frame: -- a: undefined -- val: 10 -- No ""+"" function for undefined 2 tutte le parti con -- davanti sono un messaggio di errore che ti avvisa che stai provando a fare a+=10 senza però aver dato un valore ad a in precedenza Poi dopo hai un '2', questo è il risultato dell'operazione 'a=2'; vedendo questo comando maxscript crea una variabile globale che si chiama 'a' di valore 2. se ora esegui lo stesso codice vedrai che non ti darà più errore, il risultato sarà: provaVariabili() 12 12 2 E d'ora in avanti sarà sempre così a meno che non riavvi max. La stessa cosa ti succede quando per la prima volta esegui il tuo script e premi il pulsante open: il codice che hai scritto nella callback del bottone open è 'OpenWorldCollision()', ma questa funzione è definita più sotto e quindi maxscript quando arriva a leggere in quel punto del codice ancora non sa cosa sia e quindi dà errore. In ogni modo però dopo l'errore continua a leggere e quindi crea la funzione globale 'OpenWorldCollision' e quindi la seconda volta che esegui lo script non ti dà più quell'errore. Per risolvere le possibilità son due: 1- definisci la funzione prima del codice dell'interfaccia 2- all'inizio del tuo codice aggiungi una riga dove definisci il nome della funzione che definirai successivamente, in questo modo: OpenWorldCollision=undefined Così quando maxscript fa il controllo della sintassi del tuo codice non darà errore e il tutto verrà eseguito senza problemi(e devi farlo per tutte le funzioni che richiami ma che sono definite successivamente). Un modo per non avere questi problemi è quello di racchiudere tutto il tuo script tra due parentesi'()'in questo modo tutto quello che definirai sarà local e non avrai differenze tra una esecuzione e quella successiva.(tutto quello che definisci all'interno di parentesi tonde rimane all'interno delle tonde, l'attributo 'local' è implicito ma si può tranquillamente usare per più chiarezza. All'interno delle tonde è comunque possibile usare l'attributo 'global') Riguardo alla questione 'dataTable1 ' io all'interno del codice l'ho cercata come parola ma ne ho trovata una sola occorrenza, qui: on btn3 pressed do ( data = CreateBoundingBox datatable1 datatable2 print data )
    non ho trovato dove è definita ed è normale che lo script ti dia errore quando poi in 'CreateBoundingBox ' scrivi: 'return T1.ntable'
    In quanto T1 è undefined e quindi non ha una proprietà che si chiama 'ntable'.
    forse devi sostituire 'datatable1' con 'table1data' ma non ho esaminato lo script al punto da poterlo dire con certezza(se ho ragione idem per datatable2 ).
    occhio anche alla riga 'print data', anche qui ti riferisci ad una variabile che non è definita.

    Mi sono dilungato un pò troppo... Non so se mi son spiegato benissimo, comunque se hai bisogno di altri chiarimenti son qua!!!

    ciao
  20. Like
    coren ha dato la reputazione a c0rrad0 in Arion V1.0 È Stato Rilasciato   
    Tutto dipende se gli scambi di informazioni che ci sono tra gpu e cpu sono sincroni, quello che dici tu e' piu' un discorso lineare che non parallelo, un po' come succede con i timing della ram, se hai tutta la ram con timing di 5ms e metti una ram di 10ms tutti devono aspettare quella piu' lenta.
    La scheda grafica non deve aspettare sempre il processore per ogni scambio di dati, il processore video ha il suo tipo di dati e macina quelli, quando trova quelli cui e' stato istruito di non processarli li salta e li passa alla cpu (o viceversa), altrimenti il reparto video in se non avrebbe molto senso e nessun videogioco sarebbe mai esistito. Il collo di bottiglia avviene quando il processore non riesce a terminare i dati necessari alla gpu e di spedirglieli, in un videogioco di macchine ad esempio e' l'intelligenza artificiale, se il processore non spedisce alla scheda video la nuova posizione della macchina in quel frame, la scheda video non sa che calcoli fare, perche' potrebbe essere partita in aria o e' schiantata, dunque gli ritorna impossibile e aspetta istruzioni dal processore. Similmente a quanto hai detto tu pero', i calcoli della intelligenza artificiale sono inferiori a quelli grafici, dunque se il processore ci mette 1ms per calcolare 1 dato di intelligenza artificiale, la scheda video ci mette 1ms per calcolare 100 dati grafici, dunque il rapporto dei 100x potrebbe avere senso in forma di esempio (slegando tutte le differenze tra un tipo di istruzione e l'altra). In questo caso pero' parliamo entrambi del reparto grafico e abbiamo lo stesso peso e misura, ma prima bisogna specificare che puo' risultare strano che il processore ha una funzione utile, in quanto nell'immaginario collettivo scheda video=grafica, purtroppo la scheda video non e' capace a fare grafica a 360gradi altrimenti si sarebbero usati da sempre negli offline rendering, oltre al fatto che esistevano solo lo scripting e non era possibile programmarli, da qui la necessita' del cuda, ecc.

    Cerco di fare una spiegazione per tutti.

    la gpu e' capace a fare una piccolissima parte di operazioni, ma velocemente
    la cpu e' capace di fare tutte le operazioni lentamente, eccetto alcune sequenze di operandi fisse, che si chiamano estensioni mmx, sse1, sse2, ecc. che le fa piu' velocemente.

    Prima del cuda, riuscire a convertire delle istruzioni in una piccolissima parte di operazioni, era difficile e portava via tantissimo tempo via scripting, mentre per altri tipi di istruzioni erano anche impossibile scriptarli.
    Con il cuda e' diventato molto piu' semplice convertire le istruzioni in modo che il processore grafico le capisca, si usa infatti un linguaggio, non piu' uno sistema di scripting, tanto per rendere un'idea, con il maxscript o il mel non puoi creare un programma audio per dj, sei limitato alle azioni che ti offre lo script, invece col c++ puoi farlo. Ma anche se e' piu' facile farsi capire con la scheda video, non significa che diventa capace a fare tutte le operazioni come la cpu rimanendo veloce, anzi si aggiunge cosi' il problema di cosa fare a chi, perche' potresti matematicamente convertire un tipo di dati in un altro capibile dalla gpu, ma una volta convertito potrebbero diventare dei dati lunghissimi da calcolare nonostante l'estrema velocita' della gpu, a questo punto tanto vale farglielo fare direttamente alla cpu, dunque si scambiano i dati e come qualsiasi scambio di consegne c'e' una perdita di tempo. Ecco perche' esistono soluzioni gpu e gpu+cpu, dipende dall'abilita' dei programmatori, nel saper convertire i dati per la gpu oppure riuscire a combinare il meglio dell'uno e dell'altro senza farli scambiare troppe informazioni da rallentarli (calcolo parallelo).

    Dunque analogamente in riferimento all'esempio dell'intelligenza artificiale, ci sono dei dati grafici che se li fa la gpu e' 100x migliore del processore, ma cio' non toglie che ci sono dei tipi di dati che il processore sia piu' veloce della gpu. Non e' vero che uno deve per forza aspettare l'altro, in quanto se il processore ha 1 dato da fare al ms (che la gpu invece ci avrebbe messo di piu' di un ms) e la scheda grafica ha 100 dati da fare al ms (che invece se lasciati fare al processore ci avrebbe messo di piu' di un ms), a fine ms sono in parita' e nessuno dei due rallenta l'altro, anzi sono perfettamente paralleli. Ovviamente nella realta' non e' cosi' perfetto, come dicevo all'inizio il rallentamento dipende da questo fattore, quello di scambiarsi le informazioni senza essere asincroni e dunque aspettare l'altro, ma un ottimo guadagno di prestazioni ci puo' essere se programmato bene. Tutto dipende da come si specializzano i programmatori e dalla loro intelligenza, piu' e' ottimizzato il programma e sara' migliore di un altro sia esso solo gpu o cpu+gpu, ma questo punto mi pare lapalissiano per tutti.

    In supporto alla mia teoria ti indico il programma seti@home che differenzia i tipi di dati da processare tra cpux86, cell e gpu.

    Per tutto il resto che hai detto nei post seguenti sono d'accordo con te.
  21. Like
    coren ha ricevuto reputazione da nicoparre in Oggetti Bloccati Al Centro   
    di nulla!
    ciao!
  22. Like
    coren ha ricevuto reputazione da jxfala in camera bloccata su coordinate 0,0,0   
    prova a guardare qui

    ciao
×