Comunicazione Visuale o Testuale: il dilemma dei mondi virtuali e “lavagne” condivise
Parole o Immagini?
Nei mondi virtuali, a partire dal web stesso che è a sua volta uno specifico “Luogo” irreale dotato di innumerevoli “porte” di transazione fra un posto e l’altro (i link http://it.wikipedia.org/wiki/Collegamento_ipertestuale), si è trovato spesso a dover conciliare due concetti apparentemente opposti fra di loro: rappresentare la testualità (rappresentata da un testo eventualmente abbellito con qualche piccolo effetto oppure rappresentare l’immagine e il conseguente impatto visivo inconscio legato alle immagini e ai simboli (spesso molto più pregnanti di mille parole, come dice il proverbio).
Sebbene sappiamo tutti che la vera soluzione al problema sia semplicemente quella di fare coesistere parole ed immagini come fanno ora i blog, i giornali, facebook, pinterest etc, tuttavia vediamo che i mondi virtuali tecnicamente paiono preferire la suggestione visuale. Quando non lo fanno interpretano il testo come “altro” accessibile solo attraverso schermi web che però non sono accessibili a tutti gli utenti (cfr. la ormai assodata debacle dei viewer 2/3 di SL).
In SecondLife l’aspetto testuale è minimale ed è interpretato solo dai cosiddetti testi fluttuanti (llSetText) che però hanno il difetto di creare una sorta di inquinamento visivo e sono percepiti negativamente specie quando sono troppo densi e raccolti insieme. Per avere una informazione testuale si scaricano delle texture (costo 10 L$ ognuna) oppure si forniscono delle notecard esplicative che però hanno una espressività paragonabile a quella degli editor di testo di 20 anni fa, prima dell’avvento di Word e delle finestre grafiche.
Altri mondi virtuali assomigliano a SL nel tentativo di spostare tutta la percezione testuale negli aspetti tecnici del viewer (HUD o funzionalità del browser) come ad esempio World Of Warcraft che usa una textualità del manoscritto medievale che a noi ipovedenti ci crea non poche difficoltà (leggere pergamente vergate marrone scuro su marrone sporco non è il massimo della lettura).
Minecraft usa invece degli appositi cartelli testuali che consentono di visualizzare 4 righe brevi di testo ma che sono usate spesso in maniera efficacissima.
In SecondLife questo problema è stato “risolto” fin dall’aprile del 2004 da Xylor Baysklef ecco il testo leggendario: http://forums-archive.secondlife.com/54/9c/12156/1.html che inizia così:
04-06-2004 22:31Stanchi di usare llSetText? Volete mostrare il testo direttamente sui prim, ma non volete sprecare un prim per ogni carattere? Se è così provate questo script 🙂Informazioni generali:Questo script visualizza 6 caratteri su un prim. Può mostrare qualunque carattere stampabile in SL, e in aggiunta altri 15 caratteri estesi. I prim possono essere concatenati assieme e agire come ‘celle’ consentendo di creare dei sistemi di visualizzazione anche molto grossi (come nel sistema gratuito XyText Notecard Reader).
- https://wiki.secondlife.com/wiki/XyText_1.5
- https://wiki.secondlife.com/wiki/XyText-UTF8 (il mio contributo)
- https://wiki.secondlife.com/wiki/XyText-UTF8_aGimp_Texture_Creation (come creare font con gimp)
- https://wiki.secondlife.com/wiki/SSText (la mia ultima incarnazione a basso lag e usando pochissimi prim mesh)
- https://marketplace.secondlife.com/p/FREE-8-faced-mesh-prim-xytext-v2-16-characters-per-half-a-prim/3312172 (hanno avuto la mia stessa idea, questa è una implementazione con 16 caratteri per mezzo prim che riduce ulteriormente, ma conserva un pochino di lag come la versione 10char/prim).
Esistono anche delle implementazioni eretiche di XyText come ad esempio
- http://wiki.secondlife.com/wiki/PfText (una implementazione semplificata, ma molto meno supportata per quello che so e c’è meno documentazione su come farsi il proprio font)
- http://rumplers.blogspot.it/2009/03/screamtxt-alternative-to-xytext-for_07.html (pare simile a pftext)
- http://digigrids.free.fr/wiki/index.php?title=NumRs (solo per numeri, ma usa 3 numeri per prim quindi non ci sono in realtà scusanti per non usare direttamente xytext)
Una nota sui font
I font usati dallo script per gimp devono essere fondamentalmente monospaced quindi NON proporzionali come il testo che state leggendo. Gimp su Windows (ma credo anche sugli altri sistemi) utilizza i font direttamente dalla cartella dei font di sistema, quindi è sufficiente installare un font in formato ttf o otf e automaticamente gimp lo utilizza. Fra i siti che possono produrre questi font ecco alcuni esempi:
- http://www.myfonts.com/search/mono/fonts/ a pagamento, ma alcuni font sono gratuiti specie se per uso personale
- http://blogs.adobe.com/typblography/2012/08/source-sans-pro.html Adobe opensource fonts fra cui anche un font monospaced che però non è ancora arrivato 😦 Ma qui http://blogs.adobe.com/typblography/2012/08/source-sans-pro-revised-and-hosted-on-github.html dicono che ci stanno lavorando e sembra che il 7 Dicembre 2012 sia stato rilasciato: http://sourceforge.net/projects/sourcecodepro.adobe/files/SourceCodePro_FontsOnly-1.013.zip/download
- http://www.urbanfonts.com/fonts/monospaced-fonts.htm alcuni font interessanti
- http://hivelogic.com/articles/top-10-programming-fonts/ oppure http://www.lowing.org/fonts/ i font “classici” che dovreste trovarvi già installati sul vostro sistema
- http://www.fontex.org/monospaced-fonts.html alcuni font intriganti
- http://www.fontsquirrel.com/fonts/list/style/Monospaced
Come fate a produrre dei font? Avendo installato Gimp 2.8, installate il font sul vostro sistema, poi create un file XXXXX.py che mettete nella cartella .gimp/.gimp/plug-ins lanciate gimp e vi dovreste trovare sotto il menu Filter una opzione di nome XyText1CharE
la cliccate e vi chiede il seguente
- https://sites.google.com/site/salahzar-2nd-life/image–texture-blog/gimp-xyzzy-python-fu-for-2-char-face
- https://sites.google.com/site/salahzar-2nd-life/image–texture-blog/esperantoversionhowtogeneratespecialesperantochars
- https://sites.google.com/site/salahzar-2nd-life/image–texture-blog/gimp—xyzzy-using-python-fu
- https://sites.google.com/site/salahzar-2nd-life/image–texture-blog/script-fu-for-generating-fonts-with-gimp
- http://wiki.secondlife.com/wiki/XyzzyText-UTF8 (include una versione vbscript per photoshop)
- https://marketplace.secondlife.com/p/XYTEXT-classes-held-by-Salahzar-in-2008-2010/4278306 con varie classi di lezioni fatte su xytext negli anni passati.
Una miniera di materiali in Italiano per chi vuole imparare a scriptare in SecondLife/OpenSim.
Lo “scripting“, cioè la programmazione di oggetti 3D all’interno dei mondi virtuali di SecondLife/OpenSim o simili, è considerata un’arte preziosa, e chi la sa fare viene visto come un privilegiato, potenzialmente in grado di poter offrire i suoi servigi a chi vuole arredare una sim con contenuto interattivo o comunque riuscire a sfruttarne al massimo la potenza.
Grazie agli script è possibile realizzare “applicazioni” di ogni genere nei mondi virtuali, garantendo ai fruitori della vostra terra virtuale una esperienza immersiva utile e stimolante.
Se immaginassimo un mondo senza script non potremmo ad esempio:
- Sederci sugli oggetti o sulle palline delle varie posizioni di danza o sessuali
- Toccare gli oggetti per avere materiale o per comandarne il comportamento (i famosi menu blu)
- Guidare un veicolo
- e molte altre attività come gli AO, gli HUD, i collari BDSM, lavagne testuali
In sintesi l’esperienza virtuale sarebbe sensibilmente svuotata. Quindi imparare almeno ad usare (se non proprio a creare) gli script è una necessità primaria e alfabetizzarsi nell’uso e nella comprensione almeno degli aspetti più di base è un MUST per tutti coloro che vogliono utilizzare e organizzare attivamente la virtualità e non soltanto subirla.
Come facciamo allora per imparare ad usare gli script? Premesso che occorre avere un minimo di sensibilità “logica” per seguire i passi dello script, vi sono differenti percorsi di apprendimento ed autoapprendimento.
Inworld vi sono diversi corsi interattivi in Italiano che si tengono in varie università di SecondLife fra cui citiamo ad esempio la sim di Torino (cfr gruppo secondlife:///app/group/fae51a95-41e2-9b9a-71e3-5e1b5eb740a1/about ) coordinata per la parte di scripting da Marcus73 Core, o anche il gruppo ALI – Accademia delle Land Italiane secondlife:///app/group/3fb2f1ff-98fd-fbef-9406-41791347686f/about o altri ancora.
Per chi volesse fare da solo o volesse ripassare o avere comunque del materiale, consiglio per iniziare le seguenti guide:
- http://wiki.secondlife.com/wiki/Getting_started_with_LSL/it
- http://wiki.secondlife.com/wiki/A_Basic_LSL_Tutorial/it
- http://wiki.secondlife.com/wiki/Rotation/it
Lezioni dei mentori Italiani nel 2008
Questa serie di corsi organizzati nel 2008 dai Mentori Italiani sulla base delle notecard inworld per i corsi di Salahzar Stenvaag:
Ringrazio Michel Lemmon http://wiki.secondlife.com/wiki/User:Michel_Lemmon/it che purtroppo non frequenta più SecondLife, ma nel 2008-2009 era attivissimo ad aiutarmi nel coordinare e pubblicare le lezioni.
- Script Base http://wiki.secondlife.com/wiki/User:Michel_Lemmon/Script_Base
- Ciao avatar! le basi http://www.youtube.com/watch?v=VPOBupoXcik (forse il mio video su youtube + visto !) anche qui http://www.youtube.com/watch?v=DPshr1W13QM
- Ti ho sentito il listen
- Cambio colore gli stati
- Scrittura muta llsettext
- Ti regalo una maglietta (anche video http://www.youtube.com/watch?v=1hy9ei4WglQ)
- Lezione sit/teleport http://wiki.secondlife.com/wiki/User:Michel_Lemmon/Script_Sittp
- come ci si siede in SL
- script per sedersi SENZA pallina
- sedersi con le posizioni
- semplice script di teletrasporto
- Comunicazione fra oggetti http://wiki.secondlife.com/wiki/User:Michel_Lemmon/Script_Intermedio
- Debug verificare se un programma funziona e perchè non funziona
- Comunicazione fra oggetti (llSay, llMessageLinked)
- Propedeutica agli script avanzati http://wiki.secondlife.com/wiki/User:Michel_Lemmon/Script_Propedeutico
- Come si crea uno script new script
- Come si edita uno script
- Running reset degli script
- Debug degli script
- Impostazione delle permissions
- Sintassi linguaggio
- Tipo variabili
- Variabili locali e globali
- funzioni
- struttura a stati
- costrutti elementari
- funzioni di gestione stringhe/matematiche/liste/timer/touch/
- uso di lldialog
- Presentazione diapositive (slideshow):
- http://wiki.secondlife.com/wiki/User:Michel_Lemmon/Script_Presentazione SlideShow con dialogo,
- http://www.youtube.com/watch?v=WSYoEe6ctWM video slideshow senza dialogo
Altri video sullo scripting
Scriptare particles in OpenSim (craft) http://www.youtube.com/watch?v=jLfxAG-TI7Y
Fare un llDialog http://www.youtube.com/watch?v=5Gos7kEzM7M
Altre risorse in Italiano
Dal blog di Gaia Rossini, storica divulgatrice del mondo SecondLife, http://gaiarossini.myblog.it/sl_tutorial_-_script/
Dal blog di Micalita Writer vari tutorial fra cui anche una serie sullo scripting http://micalitasl.blogspot.it/2007/10/tutorial.html
http://pantalica-sl.blogspot.it/2009/05/linden-scripting-language-lsl.html (purtroppo con un po’ di pubblicità, ma pare buono)
Una risorsa utile in Francese
Per chi capisce questa lingua consiglio il seguente sito http://script.lsl.free.fr/telechar.htm che contiene alcuni programmi E manuali preziosi e ben fatti (ma in francese). Inoltre anche dei programmi che consentono di aiutare i Dialog, le Particles ecc.
Per le particelle: http://script.lsl.free.fr/present.htm
Per scegliere i colori: http://script.lsl.free.fr/couleurs.htm
Per i dialoghi: http://script.lsl.free.fr/dialog.htm
Uno script “registratore” di animazioni per produrre ascensori, palloni, guide etc..
Grazie alla nuova funzionalità offerta dall’istruzione llSetKeyframeMotion http://wiki.secondlife.com/wiki/LlSetKeyframedMotion ora è possibile specificare una “animazione” definendo una sequenza di istantanee della posizione e rotazione di un oggetto non fisico in SecondLife.
Serve in pratica per poter implementare una classe notevole di script che rendono viva SecondLife come ad esempio:
- Ascensori
- Veicoli di spostamento (treni, carrozze etc)
- Mongolfiere guide turistiche per le sim
- Effetti speciali tipo pedane rotanti, montagne russe, ruote panoramiche (per discoteche, lunapark ecc)
- Effetti artistici e grafici
- Movimenti lenti e uniformi della camera per fare machinima (videoclip su secondlife)
Questo genere di funzionalità erano finora offerte da due tecniche che avevano però una serie di controindicazioni:
- Tecnica 1: Fare gli oggetti fisici e poi “spingerli” con forze ed impulsi opportuni
- Tecnica 2: Fare gli oggetti non fisici e utilizzare la funzionalità di riposizionamento dell’oggetto con llSetPos() e llSetRot() ogni pochi millesimi di secondo
In ambedue i casi veniva generato molto lag e nel caso degli oggetti fisici questi oggetti erano impossibili o comunque difficilissimi da controllare.
Ora possiamo utilizzare questa funzionalità per ridurre il lag e ottenere dei risultati decenti. In un mio articolo precedente ho mostrato un paio di video dove veniva utilizzata questa funzione per ottenere interessanti effetti scenici (Anche i prim devono andare in discoteca).
Ma entriamo un po’ nel dettaglio della funzione. La funzione ha essenzialmente due parametri LISTA: llSetKeyframedMotion(lista1,lista2);
le liste in SL sono rappresentate da una parentesi quadrata, gli elementi della lista separati da virgola e da una parentesi quadra chiusa: [ a, b, c, d]
La prima lista (lista1) di solito contiene terne di valori corrispondenti alla differenza di posizione rispetto allo start, differenza di angolo e durata in secondi per spostare l’oggetto dal frame precedente.
In pratica ad esempio la list1 [ <0,0,1>, ZERO_ROTATION, 1 ] indica ad esempio che l’oggetto si SOLLEVA di un metro lungo l’asse Z, senza cambiare rotazione e il movimento lo esegue in 1 secondo.
La seconda lista invece lista2 indica dei comandi che si vogliono dare per definire come l’animazione viene eseguita [ KFM_MODE, KFM_FORWARD ] indica che si vuole animare l’oggetto dal primo frame fino all’ultimo, KFM_PINGPONG fa oscillare l’oggetto in avanti indietro lungo i frame forniti, KFM_REVERSE fa tornare indietro dall’ultimo al primo, KFM_LOOP invece ripete indefinitamente la sequenza.
Ora c’è un piccolo inghippo, l’oggetto per poter eseguire una animazione deve avere la nuova “fisica” quella delle mesh, ma non è necessario che sia mesh per farlo, basta andare nella finestra delle proprietà avanzate dell’oggetto e mettere CONVEX_HULL invece che prim e possiamo animarlo.
Da qui si capisce che lo script minimo per animare un oggetto è qualcosa come il seguente
default { state_entry(){ while(llVecDist(llGetPos(),)>0.01) llSetLinkPrimitiveParamsFast(0, [ PRIM_POSITION, , PRIM_ROTATION, ]); llSetKeyframedMotion([ , , 0.184138, , , 0.110658, , , 0.215561 ],[KFM_MODE,KFM_FORWARD]);}}
La riga 3-6 si accerta di posizionare l’oggetto in una posizione prefissata, mentre la riga 8-12 è appunto un esempio di sequenza di frame.
Come vedete è praticamente mortale.
Lo script che ho realizzato che potete vedere all’opera in questo video youtube consente invece di memorizzare i frame e di poter estrarre in modo relativamente semplice le istruzioni per poterlo fare funzionare.
Le istruzioni per l’uso
Come usare questo registratore di keyframe: 1) rezzate l'oggetto 2) per sicurezza fare il reset la prima volta che lo usate da tools->reset 3) Editate l'oggetto in modo da vedere le freccine e spostatelo nella posizione iniziale 4) Premete RESTART nell'opzione del menu per fissare la posizione iniziale 5) Muovete l'oggetto e ruotatelo nel frame 1 e premete ADDFRAME 6) proseguite per tutti gli altri frame 7) se volete vedete l'animazione cliccando |<< per andare all'inizio, >>| per andare alla fine e < e > per scorrere i frame dell'animazione 8) Se un frame non vi piace quando avete scorso fino a quello premete DELFRAME posizionate l'oggetto come volete e fate ADDRAME per sostituirlo 9) Per provare l'animazione premete PLAY 10) Per avere lo script premete SCRIPT 11) Create un box nuovo abilitate la fisica CONVEX HULL dalla tab features 12) inserite un nuovo script e copiate incollate la parte in chat, p.es. default { state_entry() { while(llVecDist(llGetPos(),)>0.01)llSetLinkPrimitiveParamsFast(0, [ PRIM_POSITION, , PRIM_ROTATION, ]); llSetKeyframedMotion([ [09:50] *** (3/1/2012) llSetKeyframedMotion: , , 0.184138, , , 0.110658, , , 0.215561 [09:50] *** (3/1/2012) llSetKeyframedMotion: ],[KFM_MODE,KFM_FORWARD]);}} 13) assicurate di cancellare la parte iniziale di tutte le linee che iniziano con "[09:50] *** (3/1/2012) llSetKeyframedMotion: " 14) salvate il vostro script e voilà dovrebbe animarsi da solo ogni volta che lo resettate 15) Potete eventualmente fare in modo che lo script si attivi al touch od altro Salahzar
Ecco il codice dello script per fare il registratore: uso pastebin perchè qui mi distrugge il codice 😦 http://pastebin.com/uw6Zema1
Anche i prim hanno il diritto di andare in discoteca e ballare….
Recentemente Linden Lab ha introdotto una nuova funzionalità di scripting che consente di memorizzare “animazioni dei prim” in modo da fargli fare (al prim o al root prim) un percorso prestabilito ed eseguirlo in modo fluido (play) in modo che tutti vedano i prim nelle stesse posizioni. Questa funzionalità è stata inserita per limitare il lag nelle sim dovuto ad ascensori od oggetti fisici che si muovono. Per dettagli su questa funzione nuova guardate qui: http://wiki.secondlife.com/wiki/LlSetKeyframedMotion
E’ possibile ad esempio far fare ad un oggetto il giro della vostra sim specificando le tempistiche con cui si deve muovere o semplicemente dirgli di girare su sè stesso.
Nel caso della semplice rotazione attenzione a non confondere la rotazione semplice fatta normalmente in SL con llTargetOmega() che influisce solo sul viewer [ogni viewer vede una rotazione differente] con la rotazione server side, dove tutti vedono l’oggetto ad un livello di rotazione condiviso. Per ovviare a questo fino a poco fa si usavano oggetti fisici oppure costosi spostamenti con llSetPos() che avevano però il difetto di presentare il movimento in modo innaturale e a scatti e comunque impattavano pesantemente sulla sim.
A parte ascensori, treni, mongolfiere etc, le possibilità artistiche (cosa che pochi riescono a cogliere) offerte da questa nuova funzione sono effettivamente interessanti, quindi vale veramente la pena di imparare a scriptare con questo metodo.
Questo è ad esempio un interessante video fatto da uno scripter che usa queste animazioni con oggetti flexy ottenendo sorprendenti risultati:
Rufus Darkfold, il creatore di questo video e degli “attori” animati, produce anche il componente opensource da lui chiamato “primcontrol” che potete trovare qui: http://community.secondlife.com/t5/Building-and-Texturing-Forum/Free-primcontrol-HUD-Easy-Prim-Torture-Beta-Test-Open/td-p/1092577 oppure iscrivervi al suo gruppo inworld dove fornisce il componente di creazione delle animazioni: “Navigator Users”.
NB: l’oggetto primcontrol fa un SACCO di altre cose: per vederle tutte occorrerebbero almeno 10 articoli 🙂
Altre applicazioni artistiche
Pallina Loon ad esempio ha fatto un video dove illustra alcune applicazioni di questa animazione evidenziando l’aspetto “fisico” che queste animazioni hanno sugli avatar con il suo bel video “The Avatar Machine”.
Altre idee?
Se avete altre idee su come utilizzare questa funzione, commentate oppure scrivetemi.
Salahzar Stenvaag
Commenti recenti