Vai al contenuto

johnwhile

Members
  • Portfolio

    Portfolio
  • Numero messaggi

    216
  • Registrato

  • Ultima Visita

  • Days Won

    1

johnwhile last won the day on May 15 2010

johnwhile had the most liked content!

Info su johnwhile

  • Rango
    Treddista
  • Compleanno 01/01/1985

Informazioni personali

  • Sesso
    M
  1. File Bloccati

    ad esempio con la funzione "openFile mode:"w" ecc... ovvio no.
  2. File Bloccati

    La domanda è semplice: Con 3dstudio max i file che creo tramite script non si sbloccano dal programma, se provo a eliminarli o modificarli mi dice che il file è in uso da max, premetto che i file vengono chiusi correttamente dallo script tramite le funzioni fclose() & close(). Inoltre anche la verifica della chiusura del file tramite script mi dà risultato positivo ma niente, devo usare unlocker...
  3. Allora io ho un problema a riguardo di come posso gestire una mappa, ho estratto via maxscript i dati di un modello 3d di un gioco solo che il gioco utilizza un modo strano di comporre le texture: Ogni unità è formata da due texture che io ho chiamato Figure e Attachment di dimensioni con rapporto 1:1 (nel mio caso sono di 1024x1024 pixel). per utilizzarle il gioco crea una nuova texture formata dall'unione delle due per formarne una di rapporto 1:2. Di conseguenza le coordinate UVW dell'unità vengono dimezzate lungo l'asse U affinche tutta la texture ci stia. Il mio problema è che nel convertitore, per dare la possibilità all'utente di visualizzare una mappatura di dimensioni corrette con l'unwrapUVW, importo il modello raddoppiando le coordinate u. L'effetto finale è che il modello è racchiuso in un rettangono (per capirci) di coordinate : u,v [0,0] [0,1] [2,1] [2,0] Normalmente nella grafica 3d non si dovrebbe uscire dal quadrato u,v [0,0] [0,1] [1,1] [1,0], infatti qualsiasi rapporto di immagine di texture (esempio 1024x2048) viene riscalata per farcela stare. Io volevo fare tramite script (ma mi serve il metodo) la creazione di un materiale simile al check, con un "reference" della mappa1 sul canale nero e un "reference" della mappa2 sul canale bianco, solo che per questo problema non riesco a farci stare le mappa blu nel quadrato affianco. PS: ho già provato a fare tutte le regolazioni possibili al material standard --> canale diffuse "map check" ma ovviamente vengono fatte sempre e solo all'interno del quadrato 1,1
  4. Modificatore Skin

    Allora ho ridotto all'osso lo script nel senso che adesso chiunque capisce subito quello che ho fatto: A parte i due script chimati class che servono ad altro, la semplice funzione di "skinOps.addbone" non mi fà errore ma se clicco su un oggetto a cui è applicato max crasha ! Sapreste aiutarmi a trovare l'errore... io ho provato di tutto ma nada. MeshEditor - essential.zip
  5. 3D studio max random

    è facile fare un funzione che seleziona a random, supponi di aver selezionato una serie di oggetti, fai partire questo codice: select selection[random 1 selection.count] e lui ti restituisce una selezione a caso tra gli oggetti scelti: oggetti = selection oggetti è l'array dei nodi selezionati num = oggetti.count è la quantità di oggetti presenti indice = random 1 num indice è un numero scelto a caso trà uno e la quantità di oggetti select oggetti[indice] seleziona l'"indic-esimo" oggetto poi ci puoi fare quello che vuoi ma il concetto è semplice
  6. Modificatore Skin

    la cosa sembra banale ma mi sono accorto che il problema era dovuto alla progress bar, non quella del rollout ma quella che appare in basso a destra, si attiva con progressStart "", progressEnd(), progressUpdate(). Ho dovuto toglierle perchè mi fanno casino, ad esempio se per errore non esegue progressEnd(), l'interfaccia di max và in letargo... Praticamente nel mio script ho messo due progressStart "" solo per cambiare il testo visualizzato ma questo mi incasinava il max-modify-mode che a sua volta non mi permetteva la selezione del modificatore aggiunto, solo con resumeEditing() sbloccavo tutto. Comunque l'aggiunta del modificatore ha un forte dispendio di tempo, circa 200ms, mentre tutte le altre operazioni come l'assegnazione del peso per ogni vertici o l'aggiunta dei bone si aggirano attorno ai 20ms. Fatto per una ventina di oggetti (quell'unità mesh) ci impiega 17 secondi solo a fare tutte le aggiunte del modificatore, mentre la semplice costruzione dell'oggetto (6000 vertici in totale da analizzare) con lettura dati, arrangiamento ecc... ci impiega solo mezzo secondo... Mi sembra strano che max ci impieghi così tanto. PS: avevo letto anchio quella discussione ma comunque non riuscivo lo stesso... ancora un pò e mi sarei fatto io un modificatore personale.. che comuque era quasi completo, mancava di capire come fare in modo che i vertici si muovessero durante l'animazione, cosa che non sono riuscito a trovare in nessun esempio.
  7. Modificatore Skin

    per risolvere ho dovuto forzare un secondo tentativo di selezione da perte dello script del pannello modificatore: select obj resumeEditing() addModifier obj theskin max modify mode modPanel.setCurrentObject theskin --format "ENABLE IN VIEW = %\nENABLED = %\n" theskin.enabledInViews theskin.enabled checkmod = modPanel.getCurrentObject() format "CURRENT: %\t" checkmod if checkmod==undefined do ( format "\tERROR, TRY TO RESUME\t" resumeEditing() select obj max modify mode modPanel.setCurrentObject theskin checkmod = modPanel.getCurrentObject() format "CURRENT: %\t" checkmod if checkmod==undefined do return undefined ) format "\n" skinops.buttonInclude theskin Listener: come si vede dal listener al secondo tentativo riesce a selezionare il modificatore skin... Ho scoperto che max durante l'aggiunta fà un suspend editing e tocca riavviarlo con resumeEditing(), questo è la causa del blocco di tutto il pannello... ma non capisco come mai max non riesce a gestire bene questi modificatori
  8. Modificatore Skin

    FOR LOOP ... theskin = Skin() theskin.rigid_vertices = false select obj addModifier obj theskin max modify mode checkmod = modPanel.getCurrentObject() format "CURRENT: %\n" checkmod if checkmod==undefined then error.e skinops.buttonInclude theskin ... Listener: CURRENT: Skin:Skin --loop1 CURRENT: undefined --loop2 il problema stà proprio quà, al secondo loop il pannello dei modificatore và in crash e non mi inserisce più niente... modPanel.getCurrentObject() mi restituisce undefined ma non è possibile...
  9. Modificatore Skin

    miracolo, ho sostituito i Bone con i Point e non dà errore, quindi adesso mi sà che i bone come li ho creati io serviranno a poco...
  10. Modificatore Skin

    ok, mi sembrano molto validi come script, forse riesco ad estarre quanche preziosa informazione perchè alla fine è sempre un copia-incolla :-) Questo è quello che ho fatto oggi, sto imparando come funziona il modifier plugin, credo proprio che alla fine sia in termini di semplicità che di velocità di elaborazione sarà meglio di quello originale. plugin modifier myMod name:"0 SkinMod" classID:#(685326,452281) replaceUI:true version:1 ( --- Parametri del modificatore parameters main rollout:params ( BoneList type:#nodeTab tabSize:1 tabSizeVariable:true ) -- variabili locali e funzioni fn setBoneList theList= BoneList = for item in theList where (isKindOf item BoneGeometry or isKindOf item Bone) collect item /*-------------------------------------------------------------------------------------*/ rollout params "Tool" ( fn Bone_filter theBone = isKindOf theBone BoneGeometry or isKindOf theBone Bone fn UpdateList =params._mlbone.items = for obj in BoneList collect obj.name MultiListBox _mlbone "Bones" items:#() height:4 Button _addbone "Add" width:40 across:2 Button _delbone "Del" width:40 /* __INIT__ FUNCTION */ on params open do ( clearListener() _mlbone.items = for obj in BoneList collect obj.name --format "Modifier: %\n" this.name --dep = (refs.dependentNodes this) --print dep ) /* ADD BONE IN LIST */ on _addbone pressed do ( theBones = selectByName title:"Select Bone" buttonText:"OK" filter:Bone_filter if theBones!=undefined then ( fn isInList nome = ( for item in _mlbone.items do if item==nome do return true ; false) _mlbone.items+= for obj in theBones where not isInList obj.name collect obj.name ) BoneList = for item in _mlbone.items collect (getNodeByName item) ) /* DELETE BONE FROM LIST */ on _delbone pressed do ( fn isInList i = ( for j in (_mlbone.selection as array) do if i==j do return true ; false) BoneList = for i=1 to BoneList.count where not isInList i collect BoneList[i] UpdateList() ) ) rollout assignRollout "Assign Weight" ( dropdownlist firstBone "principal bone" items:#("-none-") dropdownlist secondBone "secondary bone" items:#("-none-") slider grad "" type:#integer ticks:0 range:[0,255,125] orient:#horizontal label gradValue1 "principal: 0" across:2 label gradValue2 "secondary: 0" Button assign "Assign to vertex" on grad changed arg do ( gradValue1.text = "principal: " + arg as string gradValue2.text = "secondary: " + (255-arg) as string ) ) rollout logo "Info" ( local bm = bitmap 100 33 color:[128,128,128] imgTag logoTag "logo" bitmap:bm align:#center label logoLab "johnwhilemail@gmail.com" on logo open do ( logoTag.bitmap = openBitMap "C:\Users\Paganin\Desktop\MeshEditor\logo.bmp" ) ) )
  11. Modificatore Skin

    a questo punto mi sono rotto... se non và non và, preferisco farmi un nuovo modificatore plugin modifier "mySkin" e me lo gestisco io...
  12. Modificatore Skin

    ah ecco... io stupidamente avevo messo "Global Struct (....". Infatti adesso non dovrebbe aver problemi. Il casino è dovuto al fatto che l'unica funzione che mi restituisce la path dello script è "ScriptDir =sysInfo.currentdir", mi tocca fare così perchè non sempre corrisponde, ad esempio se apro un file di un'altra cartella allora windows cambia il sysInfo.currentdir, quindi se non fai "run script" ma fai "evaluate" può provocare una lista vuota o un errore in FileIn. Comunque io provo e riprovo ma niente... adesso mi importa tutte le ossa nel modificatore (verifico il numero di ossa), lo script termina senza errore ma se ci clicco sopra un oggetto Max va in crash. Sto Skin() è una funzione insulsa, ho messo pari pari MacroRecord ma mi dice che devo selezionare il modificatore, lo faccio ma và in crash. Non ho capito se è un bug di max o proprio i produttori hanno voluto incasinare così l'utilizzo di un modificatore. Se ce ne fosse un'altro ma per quello che devo fare è l'unico. MeshToMax.zip
  13. Modificatore Skin

    for igroup = 1 to numgroups do ( themesh = mesh_array[igroup] numverts = themesh.numverts -- qua di seguito è solo l'indice del bone1 bone2 e rispettive percentuali pIdarr = grpprimId_array[igroup] sIdarr = grpsecoId_array[igroup] pwtarr = grpprimwt_array[igroup] swtarr = grpsecowt_array[igroup] update themesh geometry:true normals:true -- quà inizia il bello. da come ho capito seleziona praticamente tutto theskin = skin() theskin.rigid_vertices = false select themesh max modify mode addModifier themesh theskin skinops.buttonInclude theskin for j = 1 to nbones do ( skinOps.addbone theskin (getNodeByName pnodes[j].name) 1 ) nb = skinops.getNumberBones theskin -- Vital bit here, have to prod the skin to update its vertices. selbitall = #{1..themesh.numverts} themesh.selectedVerts = selbitall skinOps.resetSelectedVerts theskin nv = skinops.getNumberVertices theskin print( "NumOfBones in skin = " + nb as string + ", numOfVerts in skin = " + nv as string ) for i = 1 to themesh.numverts do ( tmpbonearray = #() append tmpbonearray pIdarr[i] append tmpbonearray sIdarr[i] -- We will lose the bone assignments if we don't do the following. pwt = pwtarr[i] swt = swtarr[i] . . . append tmpwtarray pwt append tmpwtarray swt skinOps.ReplaceVertexWeights theskin i tmpbonearray tmpwtarray ) update themesh geometry:true normals:true mesh_array[igroup] = themesh ) -- End of loop over igroup. ms3dImportExport_ver1_3.zip
  14. Modificatore Skin

    ok, capito, grazie. L'utilizzo del bitArray anche se non preinizializzato per l'utilizzo che serve e cioè evitare di fare append di un array, togliere i dopioni con deleteItem e poi usare findItem per trovare "l'indice dell'indice", sembra non comporti niente in termini di spesa di calcoli. Per il problema delle variabili globali è strano, io ho messo proprio all'inizio come globale, prima di importare con FileIn(), non capisco perchè non riesce a trovare la struct al primo avvio... mi sembra illogico che anche la struct sia globale.... Per il problema della drop list è un problema che non considero perchè alla fine è solo una questione di come organizzare i nomi dei file, dopo sostituisco proprio la lista con un percorso completo del file... Quello che invece mi stà dando problemi è proprio il modificatore skin(), non vuole saperne di andare, ho anche provato a usare Macro Record ma nada. Sembrava funzionare quando ho fatto in modo che lo script selezionasse priprio sia l'oggetto sia il modificatore, poi ho aggiunto quanche condizione if e non funziona più. Invece ad un'altro utende ha fatto tutto questo bordello:
  15. Modificatore Skin

    NIENTE DA FARE... ad una prima versione dove importava tutti i bone funzionava, adesso l'ho modificata facendo in modo che aggiunga solo i bone necessari e continua con questo undefined error... $%£&@#* !!!! PS: guarda che figata l'utilizzo di un BitArray come "cercatore di indici" ! un'amara consolazione... fn AssignWeight wdata obj= ( SetCommandPanelTaskMode mode:#modify skinMod = skin() select obj addModifier obj skinMod ModPanel.SetCurrentObject obj.skin filter_Index = #{} -- di usare il findItem() ... for i=1 to obj.numverts do ( print wdata[i] ib1 = wdata[i][1]+1 ib2 = wdata[i][2]+1 f = wdata[i][3] append filter_Index ib1 if not filter_Index[ib1] or i==1 do ( print ib1 theBone = SkeletonData[ib1].Bone select theBone skinOps.addBone skinMod theBone 1 print theBone.name ) if ib2!=0 do ( append filter_Index ib2 if not filter_Index[ib2] or i==1 do ( print ib2 theBone = SkeletonData[ib2].Bone select theBone skinOps.addBone skinMod theBone 1 print theBone.name ) ) --print filter_index ) ), A questo punto non sò proprio come fare... anche perchè se và in errore mi tocca riavviare max altrimenti l'errore lo fà senza motivo, addiruttura non capisco perchè lo skin importa manualmente tutte le ossa tranne il bone_pelvis... chè? non gli piae il nome ?
×