PDA

Visualizza Versione Completa : Creare un punto in centro



Wotan3d
09-06-11, 00:09
Ciao,

AIUTO!
ho una sfilza di gruppi di oggetti di diverse forme, dimensioni e posizioni nello spazio.
Per ogniuno di essi devo creare un punto al proprio centro (per poi generare delle istanze partendo dal singolo oggetto centrato nello spazio).

Si può fare? Mi va bene anche farlo uno per uno, lo farei a mano, ma non riesco a capire come poter fare. Ho trovato il modo per generare un cubo della medesima dimensione dell'oggetto nella posizione dell'oggetto (praticamente un bounding box), ma non riesco a trovare un comando simile per generare un punto al centro dell'oggetto.

Grazie per qualsiasi info....
Ciao

davhub
09-06-11, 08:28
Ciao Wotan... solo per capire... la sfilza di oggetti è nel layout o sono oggetti posizionati con senso nel modeler?
se nel modeler.. unico layer?

che io sappia ogni oggetto in lw non può avere il suo punto perché, contrariamente a Max , maya, ecc. LW ha i livelli. e i livelli sono tenutari dell'informazione dell'origine delle coordinate locali.
io farei così:

se è un oggetto singolo:
allora nessun problema. F2 (mi pare) e l'oggetto veine centrato nell'origine degli assi secondo il suo baricentro.
salvi e poi sposti dove vuoi. Nel layout la terna degli assi di traslazione la trovi nel baricentro.

se è un oggetto multiplo:

una via è quella di scinderlo nei componenti base ed agire come il punto 1

l'altra via è quella di dividerlo in layer, geometria per geometria, e per ognuno, settare il pivot.
(la stessa cosa che si utilizza per animare in cinematica i corpi rigidi...


poi spero di aver capito il tuo problema.. :D

Davhub

Marchino
09-06-11, 09:10
Un'alternativa puo' essere, selezionando tutti i punti dell'oggetto, premere "Weld Average" nel menu detail (fallo su una copia dell'oggetto pero'..perche' la funzione lo distrugge".

Questa funzione ti salda tutti i punti in un punto "medio" fra tutti.

Attenzione pero', ho fatto una prova centrando con F2 un oggetto 2D creato random con Pen e poi facendo il Weld Average e il punto risultante non e' l'origine degli assi.

Wotan3d
09-06-11, 10:35
Forse non mi sono spiegato bene.

Dav, purtroppo non è quella la cosa che voglio.
Marchino, quasi, ma come tu dici il punto medio non è il centro dell'oggetto, e comunque la procedura sarebbe complicata e troppo lunga visto il numero di oggetti di cui devo creare il punto centrale (ho tovato tra l'altro uno script -cp_centerpoint- che fa proprio quello che dici tu creando un punto alla "media" dei punti, ma come hai visto tu stesso se da un lato ci sono molti punti il punto creato sarà spostato verso di loro).

Ho degli oggetti dislocati in posizioni diverse nel modeler (o se preferite chiamateli dei gruppi di poligoni), tutti sul medesimo layer, ma posso anche separarli uno ad uno se serve. Devo, per ogniuno (l'ideale sarebbe per ogni selezione di poligoni, così non devo separarli su layer diversi) creare un punto nel suo centro, esattamente come fosse un punto creato allo 0,0,0 dopo aver fatto l'F2. Non posso spostarli quindi è esclusa l'idea di fare un F2 per ogniuno e poi riposizionarli "a mano" nella posizione d'origine con il punto creato, anche perchè non beccherei più la posizione d'origine e ci impiegherei 5 mesi.
Dato che il modeler è in grado di centrare un oggetto significa che può capire quale è il suo centro.

Io un metodo l'ho trovato, ma è molto macchinoso e non posso farlo per tutti gli oggetti, troppo lunga (servirebbe uno script che gestisce questa sequenza di operazioni in automatico, ma non so programmare e non riesco nemmeno a modificare lo script di cui ho parlato sopra, anche se sembra semplicissimo):

- apro un altro layer vuoto e tengo il mio oggetto in layer di background
- creo un punto in una posizione qualsiasi
- modify/translate-more/alligner
- seleziono nel pannello Foreground->Background, C C C, OK

voilà il mio punto centrato, esattamente come fosse nel punto "0,0,0" se si fosse premuto F2, ma è dislocato dove sta effettivamente l'oggetto.
Capite che se devo, per ogni singolo gruppo di poligoni, fare questa cosa a mano è da spararsi, visto che i gruppi sono centinaia. Se si potessero creare le macro sarebbe fantastico... come si può fare?

Grazie
ciao

bug3d
09-06-11, 11:23
cp_centerpoint (http://www.lwplugindb.com/Plugin.aspx?id=44743783)
Questo penso possa aiutarti.
ciao

Wotan3d
09-06-11, 11:27
cp_centerpoint (http://www.lwplugindb.com/Plugin.aspx?id=44743783)
Questo penso possa aiutarti.
ciao

No, come ho scritto sopra, questo script crea il punto medio, non centrale.
Grazie lo stesso ;)

bug3d
09-06-11, 11:47
No, come ho scritto sopra, questo script crea il punto medio, non centrale.
Grazie lo stesso ;)

Ma uno screenshot per capire effettivamente cosa devi fare?
Forse puoi risolvere usando un particle emitter nel layout,i punti che crea si possono usare come istanze.Puoi fare una particella per oggetto poi ti carichi l'emitter nella scena dove vuoi testare le istanze.Ho fatto una cosa simile in passato,solo un'idea.
Ciao

Wotan3d
09-06-11, 12:16
Ma uno screenshot per capire effettivamente cosa devi fare?
Forse puoi risolvere usando un particle emitter nel layout,i punti che crea si possono usare come istanze.Puoi fare una particella per oggetto poi ti carichi l'emitter nella scena dove vuoi testare le istanze.Ho fatto una cosa simile in passato,solo un'idea.
Ciao

Ma...
eccoti uno screenshot.... ho fatto una sfera deformata, devo creare un punto al centro di quell'oggetto adesso, in modo rapido senza dover fare dieci passaggi. Immagina che di quelle sfere ne abbia 1500 sparse... per ogniuna devo avere il proprio punto centrale.

Il plug che tu mi hai segnalato non crea un punto in centro, ma fa una media della posizione dei punti dell'oggetto, pertanto tenderà sempre ad essere spostato verso la maggior quantità dei punti (e non capisco nemmeno a cosa possa mai servire una cosa del genere, perchè è stato scritto quello script?). Per vedere effettivamente che il punto che ti ha creato non è al centro basta poi fare un F2 e vedi che il centro è in un altro posto.

Il sistema delle particelle che mi hai segnalato non lo capisco, come lego la singola particella al centro dell'oggetto? e poi dovrei in ogni caso avere 1500 oggetti e creare 1500 emitters, o si può fare tutto con un unico emitter?

bug3d
09-06-11, 13:58
Eh si è decisamente complesso l'oggetto,lascia perdere l'emitter ho controlato e l'oggetto che avevo usato era più semplice e aveva una weightmap dedicata


l plug che tu mi hai segnalato non crea un punto in centro, ma fa una media della posizione dei punti dell'oggetto, pertanto tenderà sempre ad essere spostato verso la maggior quantità dei punti (e non capisco nemmeno a cosa possa mai servire una cosa del genere, perchè è stato scritto quello script?).Si è utile solo se crei prima il bounding box dell'oggetto,ad esempio con greatbox, ma nel tuo caso non è ideale.

A questo punto non saprei,con il senno del poi il modo migliore era farne uno subito con il suo punto in centro poi clonarlo.

Wotan3d
09-06-11, 14:20
A questo punto non saprei,con il senno del poi il modo migliore era farne uno subito con il suo punto in centro poi clonarlo.

Eh, non si poteva... sono una miriade di oggetti da cad che un cliente mi ha dato e compongono un macchinario complessissimo, devo renderizzarli tutti.... sono decine di milioni di poligoni, se non creo dei punti centrali per le istanze sono fregato (non ho i soldi per comprare un comp. nuovo a 64 bit con ram decente... :( :( :( ).

Mal che vada provo con il middle point, o average che dir si voglia, e posiziono l'oggetto da istanziare non perfettamente al centro ma "scentrato" in modo che il middlepoint corrisponda allo 0,0,0... a idea dovrebbe funzionare ma la rischio un po'.
Basterebbe saper scrivere lo script con la sequenza di comandi che ho elencato sopra, ma chi lo sa come si fa.

amb
10-06-11, 17:23
Altra possibilità (sempre un po' lunga e macchinosa... :cappio:):
- copi l'oggetto/gruppo di punti in un altro Layer
- col centro di azione in modalità Selection, Size a ridurre finchè tutti i punti combaciano (0%) nel centro geometrico dell'oggetto (quello di F2 ;))
- Weld e hai il punto che ti serve :cool:

Ciao

Wotan3d
10-06-11, 17:43
Altra possibilità (sempre un po' lunga e macchinosa... :cappio:):
- copi l'oggetto/gruppo di punti in un altro Layer
- col centro di azione in modalità Selection, Size a ridurre finchè tutti i punti combaciano (0%) nel centro geometrico dell'oggetto (quello di F2 ;))
- Weld e hai il punto che ti serve :cool:

Ciao

:D troppo lunga e poi non riuscirei a beccare a mano il punto centrale per fare il resize, considerando che gli oggetti si trovano sparsi nello spazio 3d.

Il metodo migliore per ora sono due comandi:
-Bounding box (e crea un parallelepipedo sul volume dei poligoni selezionati, cancellando anche i poligoni stessi)
- weld average (cancella il parallelepipedo e crea un punto perfettamente in centro).

So, da fiorum nt, che si potrebbe scrivere uno script che automaticamente seleziona un poligono, fa un sel connected (quindi seleziona tutta la parte che interessa), bounding box, weld average, ripete sui sucessivi poligoni.
E farebbe tutto automaticamente, anche se ci fossero millemila oggetti (sto sempre parlando di gruppi poligonali presenti nel medesimo layer)... mi sa che dovrei imparare a programmare gli script, farei prima che fare tutta questa cosa a mano :(

Ciao

amb
10-06-11, 17:53
:D troppo lunga e poi non riuscirei a beccare a mano il punto centrale per fare il resize, considerando che gli oggetti si trovano sparsi nello spazio 3d.
:confused:
Non devi cercare tu il punto... in modalità Selection il centro di azione è quello geometrico dell'oggetto (o gruppo di punti) a prescindere dalla posizione nello spazio.

Wotan3d
10-06-11, 18:31
:confused:
Non devi cercare tu il punto... in modalità Selection il centro di azione è quello geometrico dell'oggetto (o gruppo di punti) a prescindere dalla posizione nello spazio.

ok, allora non devo fare il resize cliccando con il mouse sullo schermo ma inserendo i valori di scala nel numeric. cmq credo sia più veloce fare i due comandi bounding box e weld average.

mikadit
10-06-11, 21:04
Ma non c'è uno script per questa funzione? ... credevo ci fosse.
Non vedo tanti problemi a sciverlo, se non lo trovo ci darò un'occhiata.

Wotan3d
11-06-11, 00:05
Ma non c'è uno script per questa funzione? ... credevo ci fosse.
Non vedo tanti problemi a sciverlo, se non lo trovo ci darò un'occhiata.

Mah, ti dirò che anche da forum NT non ho avuto risposte positive, e c'è un'enorme fatica per capire cosa sia il centro geometrico (o "volume center" o come lo si voglia chiamare).
Alla fine la soluzione emersa, ma che più che soluzione è un rimedio con le toppe, è applicare, sulla singola geometria (vengono selezionati i poligoni), il comando Bounding box, in modo che venga creato un parallelepipedo e poi applicare il Weld average sul parallelepipedo, ed essendo quello un oggetto simmetrico il punto "average" è identico al "volume centre point".
In genere gli utenti pensano che il punto medio (quello ottenuto con il weld average o con lo script cp_centerpoint o con lo script di pctrix Center AddP) sia il centro geometrico, probabilmente perchè testano solo su sfere o cubi, ma con oggetti più complessi i due punti non coincidono affatto, e nonostante abbia spiegato e mostrato immagini continuano a non capire... se leggi questo 3ad vedi che ormai ho terminato le parole per cercare di spiegare, in un inglese orribile, la situazione:

http://www.newtek.com/forums/showthread.php?t=119995

Non voglio che tu perda tempo per scrivermi uno script, usa il tuo tempo prezioso per le tue cose, io mi arrangerò selezionando una geometria alla volta ed applicando ogni volta bounding box e weld average manualmente.
Un utente in forum NT mi dice che potrebbe pure esser fatto in automatico su tutti gli oggetti (presenti nel medesimo layer), non uno per uno a mano, in sostanza vengono riconosciute le singole geometrie (non so come, forse perchè sono connessi i poligoni di ogni singola geometria?), creato il punto centrale e cancellate, mah, per me è fantascienza.... ma d'altra parte possono anche essere riconosciuti i singoli mattoni di un muretto che viene usato nelle dinamiche anche se sono tutti nel medesimo layer, quindi è possibile. Boh, magie di lw.
Certo è che avere a disposizione ben 3 comandi fra script e comando interno a lw per creare il punto medio (average) e non aver niente per creare il punto centrale al volume è assurdo (ma a che può mai servire il punto average? cerco di immaginare quando usarlo ma davvero non trovo alcun motivo della sua esistenza, invece il punto centrale al volume è molto utile, per le istanze per esempio che hanno come riferimento il volume dell'oggetto, non la dislocazione della "maggior parte" dei suoi punti).

In ogni caso ti ringrazio per l'interessamento :)
Ciao

mikadit
11-06-11, 00:51
Guarda caso stavo facendo delle prove proprio ora ... se ho capito bene si tratta del centro bounding box di ciascun gruppo di poligoni tra loro collegati.
Se è questo, ti passo lo script che stò scrivendo per il questo caso. ... tra qualche minuto.

Wotan3d
11-06-11, 01:39
Guarda caso stavo facendo delle prove proprio ora ... se ho capito bene si tratta del centro bounding box di ciascun gruppo di poligoni tra loro collegati.
Se è questo, ti passo lo script che stò scrivendo per il questo caso. ... tra qualche minuto.

!!!
si, hai capito benissimo... e stai già facendo lo script?
non so che dire...

Wotan3d
11-06-11, 02:04
Mika... ti ho scritto un pm.

mikadit
11-06-11, 02:06
Letto e ti ho inviato lo script di prova .... se lo posso migliorare lo posto. ;_)

Wotan3d
11-06-11, 02:11
Ne avevo scritto anche un altro di pm...

Il tuo script sembra funzionare all'inizio, cioè... crea un punto al centro del primo gruppo, ma poi continua a crearne altri... Una volta fatto il primo dovrebbe solo cancellare la selezione e procedere con la sucessiva, invece continua a generare punti.

Comunque non procedere, come ti ho spiegato nel pm....

Ti ringrazio tantissimo!!!

mikadit
11-06-11, 02:44
Figuati, ho fatto un po' di esercizio e mi sono pure divertito.
Lo script come l'ho scritto al momento genera il punto per ciascun gruppo di poligoni collegati, solo che lo fa tante volte quanti sono i poligoni selezionati (se non sono selezionati lo fa per tutti i punti). Alla fine si dovrebbe fare un merge. La causa è il loop che produce l'automatismo, che si basa sul numero di poligoni, non sul numero di gruppi di poligoni connessi.

Ho visto e provato lo script che ha postato evenflcw sul forum NT ... Mi sembra perfetto! Ed ho imparato un paio di cosette in più. ;)