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.

Marcus73 Core continua ad alfabetizzare sugli script nella Sim di Torino in SL

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:

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:

Michel Lemmon

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.

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

Gaia Rossini

Dal blog di Gaia Rossini, storica divulgatrice del mondo SecondLife, http://gaiarossini.myblog.it/sl_tutorial_-_script/

Micalita Writer

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

[sourcecode language=”java”]

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]);}}

[/sourcecode]

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

[sourcecode language=”text”]
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
[/sourcecode]

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”.

oppure anche http://secondlife.lithium.com/t5/LSL-Scripting/Free-primcontrol-HUD-Easy-Keyframe-Animation-Easy-Prim-Torture/td-p/1092569

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