Pagina 1 di 1

* Come ottimizzare gli HUD *

MessaggioInviato: mer mar 31, 2010 4:23 pm
di Keith Reinard
Fra un po', dopo il roll totale delle regioni al server 1.38, partirà il periodo di prova per capire quanto dovrà essere lo script limit per ogni avatar. Se un attach avrà troppi script che occupano più ram di quanta ne è stata riservata, l'attach non funzionerà.

"Il brutto" degli hud è che ogni bottone funzionante ha un suo script all'interno.

esempio: hud con 10 tasti che fanno cambiare il colore di un oggetto dopo aver verificato che chi li usa sia l'owner o un avatar in lista di notecard..

nel migliore dei casi, ogni tasto ha solo un messaggio linkato per il root in modo da fargli capire che tasto è stato cliccato, dopodichè lo script root farà quel che deve fare (script main che fa tutti i controlli del caso, e che pesa diversi kb, diciamo 200kb, script "satellite" con solo un touch_start e quindi occupano poca memoria, diciamo 10kb, quindi 200+10*10 = 300kb)

nel peggiore dei casi, il tasto dell'hud fa direttamente quello che deve fare, dopo averne programmato uno, lo scripter lo clona 10 volte, cambia 10 colori e linka tutto (200*10 = 2000kb)


si può risparmiare ANCORA: tasti dell'hud SENZA SCRIPT con una descrizione ad hoc

Se un oggetto linkato ha nel root uno script con evento touch, quell'evento parte se viene toccato il prim root, o ogni altro child (a meno che il child non abbia dentro uno script con evento touch, nel caso parte quello)

Quindi, se faccio un hud con 3 tasti e linko tutto, il mio oggetto avrà 4 prim (il root + altri tre). Se ora metto uno script nel root con un evento touch, qualsiasi prim tocco mi aziona lo stesso evento touch.

Adesso diamo alla descrizione dei 3 tasti un valore univoco: "B1", "B2", "B3"

in root mettiamo questo script

Codice: Seleziona tutto
string button(){
    integer n = llDetectedLinkNumber(0);
    key uuid = llGetLinkKey(n);
    list params = llGetObjectDetails(uuid, [OBJECT_DESC]);
    return llList2String(params, 0);
}

default
{
    touch_start(integer total_number)
    {
        llOwnerSay(button());
    }
}


se tocchiamo i 3 tasti, lo script ci dirà "B1", "B2" o "B3" a seconda del tasto che abbiamo cliccato, cioè lo script capisce cosa abbiamo cliccato anche senza script nei tasti!

in base al nome che gli arriva basta fargli fare quello che vogliamo.


La procedura è la seguente:

Ci serve il numero di link del prim che abbiamo toccato
:arrow: integer n = llDetectedLinkNumber(0);
Ora ci serve l'UUID di quel prim, e lo possiamo rilevare tramite il suo numero di link
:arrow: key uuid = llGetLinkKey(n);
Adesso prendiamo la descrizione del prim corrispondente a quell'uuid
:arrow: list params = llGetObjectDetails(uuid, [OBJECT_DESC]);
è una lista, quindi estraiamo il valore al listindex 0
:arrow: llList2String(params, 0);

è vero che processare le liste occupa un po di memoria ed è una procedura relativamente lenta, ma se un hud ha 30 tasti per cambiare il vettore di rotazione di un oggetto (che ne so, la butto lì), basta scrivere il vettore nella descrizione dei tasti e si risparmiano 30 script.

Per scrupoli e controlli aggiuntivi, si può usare una descrizione "VETT_ROTAZ=<23, 45, 67>" e scomporla in ricezione, ed applicare il vettore solo se il parametro iniziale è "VETT_ROTAZ"

su come farlo in modo veloce senza usare parsing di liste, clic qui per approfondire
:arrow: viewtopic.php?f=10&t=26624

Re: * Come ottimizzare gli HUD *

MessaggioInviato: mer mar 31, 2010 5:27 pm
di robslave
inanzitutto grazie della dritta molto interessante. La domanda sorge spontanea x una
novizia come me. Ma attualmente qual'e' il limite per avatar?
Cioe' io avevo capito che ogni script ha a disposizione 64k per tenere i suoi dati in menoria
e x l'elaborazione di questi.
Ma non sapevo ci fosse un limite x avatar che fosse la somma dell'occupazione di tutti gli
script contenuti nei vari attachment.
Saresti cosi gentile da spiegarmi esattamente come funziona e cosa si sa di come funzionera'
col nuovo server?
Grazie in anticipo :)

Re: * Come ottimizzare gli HUD *

MessaggioInviato: mer mar 31, 2010 9:22 pm
di Keith Reinard
entro l'anno verrà fissato, mi pare di ricordare che il secono quadrimestre del 2010 verrà sfruttato per capire a quanto fissarlo..

non ne hanno ancora idea, perciò basta stare più bassi possibile per non dover rifare tutto se poi supera il limite.

gli script in mono è vero che hanno 4 volte più memoria di queli in LSL e sono più veloci, ma la gestiscono in modo diverso. Ho un hud che compilato in mono è circa 2400kb e in lsl sta sui 1900kb.

sui server 1.38.x gireranno le nuove funzioni LSL
:arrow: viewtopic.php?p=249617#p249617

Re: * Come ottimizzare gli HUD *

MessaggioInviato: mer mar 31, 2010 11:02 pm
di robslave
be cercando un po ho trovato questi 2 post in cui si capisce meglio il problema

https://blogs.secondlife.com/message/55446#55446

https://blogs.secondlife.com/message/158405#158405

https://blogs.secondlife.com/message/141319#141319

A mio parere il vero problema adesso e' ke non si capisce quali saranno questi limiti
e quindi non e' possibile esere sicuri che quello che e' stato sviluppato fino a oggi o
che svilupperemo nel futuro prossimo non debba essere riscritto o addirittura buttato.
Resto un po perplessa a dire la verita' pur capendo la necessita' di diminuire il lag inworld...
Mi sembra che la cosa sia gestita in maniera non troppo professionale....
Spero di sbagliarmi ma certo questo deve fare riflettere chi in questo momento
sta portando avanti nuovi progetti che potrebbe dover riscrivere se non buttare
nel giro di poco tempo.
Ad oggi l'unica cosa che si puo' fare e' seguire il consiglio di Keith di stare il piu' bassi
possibile... pero' questo puo' influire nelle scelte di architettura di uno script ....
e non sapendo come sara' la cosa queste scelte potrebbero rivelarsi veramente difficili da
prendere. :doubt:

Re: * Come ottimizzare gli HUD *

MessaggioInviato: ven apr 02, 2010 12:38 pm
di Opensource Obscure
Keith,
ma nel tuo esempio il problema di avere uno script per ogni bottone non è aggirabile riducendo a 1 il numero delle prim e usando le funzioni Touch?

per rimanere aggiornati su questi temi, ai professionisti dello scripting consiglio di seguire le Office Hour di Babbage Linden o quantomeno leggerne le trascrizioni sul wiki ufficiale.
http://wiki.secondlife.com/wiki/User:Babbage_Linden

Re: * Come ottimizzare gli HUD *

MessaggioInviato: ven apr 02, 2010 1:25 pm
di Keith Reinard
si puoi mappare la faccia del prim, ma se devi aggiungere/togliere roba, cambiare disposizioni dei tasti? va rimappata di nuovo tutta la superficie.

a seconda dei casi può essere un problema, soprattutto per chi vende script per interfacce che poi "monterà" il cliente per conto suo.

Re: * Come ottimizzare gli HUD *

MessaggioInviato: ven apr 02, 2010 5:08 pm
di rubin_mayo
Ciao a tutti.

Anche se sono d'accordo con Opensource, che è meglio usare un prim solo e poi mapparne la superfice, devo ammettere che mi darei la zappa sui piedi...

Quando loggo da casa, per poter fare qualcosa in SL devo usare la versione 1.19 del client con le patch di coolviewer, in quanto la mia scheda grafica non regge silverlight: disgraziatamente questa versione non ha il supporto per le funzioni touch che mappano la superfice dei prim.

Potrebbe essere un problema solo per pochissimi disgraziati che come me pretendono di entrare in SL con un PC del 2001 con dentro un criceto zoppo che lo fa andare... ma anche no.
Ci sono persone che in occasioni particolari loggano inworld con client testuali tipo METAbolt: anche loro non hanno quel supporto, anzi per loro sarebbe + opportuno usare comandi chat.

Ecco uno spunto per una interessante discussione: quanto è necessario mantenere la compatibilità delle nostre creazioni con i vecchi viewer e con i viewer testuali? Magari su questo possiamo aprire una discussione in un post apposito.

Mister Rubin (Mayo)