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

Pathfinding, 7 Agosto 2012, una catastrofe per SecondLife o una nuova potenzialità (come le mesh l’anno scorso)?

Senza grandi avvertimenti, Linden Lab ha sganciato (seguendo l’opinione di alcuni blogger in queste ore) la sua bomba atomica sulla grid negli ultimi giorni, portando tutte le sim alla ultima versione di Havok e di PF (Pathfinding) sull’intera struttura di SL.

Il 6 agosto 1945 la bomba di hiroshima. In questi giorni, in SL, il deploy del sistema pathfinding visto da alcuni come un totale disastro, da altri come una nuova intensa possibilità

Ho atteso  due giorni per vedere la polvere dell’evento diradarsi e capire cosa stava succedendo. Dal mio punto di vista tutto inizia con una notice in un gruppo di SL dove si riporta laconicamente il link di phoenixviewer http://phoenixviewer.blogspot.ca/2012/08/pathfinding-server-rollout.html dove si avverte che TUTTA la grid è passata al pathfinder e si presagisce il disastro, invitando gli owner di sim di disattivare il PF sulla loro proprietà.

Pathfinding  is rolling out on all regions today and may have an impact on the performance of your regions as well as introduce some new bugs. “

La mia prima preoccupazione è che nel sito di SL non ci sono avvisi specifici (gridstatus parla di generici rolling restart: http://status.secondlifegrid.net/2012/08/07/post1723/, senza specificare che questi restart stanno effettivamente introducendo il PF su tutta la grid). Il riferimento a centinaia di bachi irrisolti di cui alcuni (sarà vero?) NASCOSTI esplicitamente da Linden Lab per coprire questa ennesima malefatta mi colpisce. E’ vero che avevo letto che llSetRot non funzionava più qualche mese fa, ma pare che questo problema sia ora risolto. (https://jira.secondlife.com/browse/PATHBUG-136), mentre molti si arrabbiano perchè alcuni trucchi che utilizzavano delle caratteristiche NON DOCUMENTATE di SL come la llVolumeDetect che consentiva di avere in un linkset alcuni prim phantom e altri no non funziona più https://jira.secondlife.com/browse/PATHBUG-69 (altro bug dichiarato fixato) al punto di dichiarare che il business di intere imprese sono state distrutte ). L’uso del PF inoltre aumenta il conteggio del “Land Impact” (un prim che usa il PF può costare un equivalente di 16!) http://modemworld.wordpress.com/2012/04/29/pathfinding-llvolumedetecttrue-and-land-impact-changes/.

Altri blogger cercano di coprire in maniera più neutra l’avvenimento:

Insomma pare che anche quest’anno la solita polemica contro Linden Lab abbia combustibile da bruciare. A questo si aggiunge la polemica associata al fatto che il nuovo PF dato che usa sui client dei brevetti Havok specificatamente dedicati e non distribuibili se non per collegarsi a SL e quindi “disturbando” i viewer TPV come Phoenix e Firestorm, che pure appunto hanno garantito versioni separate per SL e OpenSim. http://www.hypergridbusiness.com/2012/08/linden-lab-cuts-viewer-link-to-opensim/

Insomma terreno di polemica ce n’è in abbondanza. Sintetizzando, la scelta del Pathfinding ha le seguenti controindicazioni:

  • (Presunto) rallentamento delle prestazioni
  • Bug su llDetectVolume usato da alcuni costruttori per avere linkset fisici e con alcuni elementi phantom (aerei)
  • Problemi su llSetRot e altri bachetti sparsi apparentemente risolti
  • Incompatibilità nelle licenze per i viewer TPV che non possono collegarsi con OpenSim.

Ma una volta tanto, non mi sento di allinearmi con le posizioni anti-linden che leggo in giro. Linden Lab sta tutto sommato perseguendo una strategia che nei fatti si dimostra “non perdente”. Inusuale strategia, che punta a garantirsi come riferimento tecnologico per i mondi virtuali. A costo di inimicarsi il proprio parco di utenti acquisiti negli anni 2007-2010, ma nel sempreverde tentativo di acquisire NUOVI spazi e nuove tipologie di utenti. Il fatto che sia “non perdente” è giustificato da una serie di segnali e statistiche che ad esempio affermano che SL è ancora nell’elenco dei primi 10 computer games secondo la statistica Nielsen http://nwn.blogs.com/nwn/2011/07/top-pc-games-may-2011-nielsen-second-life.html in nona posizione. Philip Rosendale (creatore di SL) ha sottolineato recentemente che SL è viva esattamente e certificatamente di più di quello che era nel 2007 quando veniva considerata dai giornali un miracolo: http://pandodaily.com/2012/07/06/philip-rosedale-the-media-is-wrong-secondlife-didnt-fail/, conteggiando una quantità di utenti mensili ancora attorno al più che dignitoso milione per mese. Anche negli ultimi giorni abbiamo statistiche che il marketplace di SL sta superando l’obiettivo del mezzo milione di utenti attivi http://nwn.blogs.com/nwn/2012/08/second-life-marketplace-470k-users.html (pur con qualche difficoltà sul direct delivery). Insomma pare che non si possa risolvere SL secondo i termini dei suoi detrattori, che siano i media oppure gli stessi suoi utenti “anziani” che negli ultimi anni hanno dichiarato la morte di SL.

Guardiamoci in faccia, anche OpenSim o altri cloni equivalenti non è al momento una alternativa di massa, ma una piccola “nicchia” all’interno della “nicchia” di SL. Nicchia per nicchia Sl rimane per molti artisti, istituzioni, artisti, IL mondo virtuale per eccellenza dotato delle capacità tecnologiche massime e tutto sommato anche di una capacità di aggiornamento costante. Non approfondisco qui gli aspetti “sbagliati” di SL, le sue inefficienze, la incapacità di comunicare con i suoi utenti, la dubbia capacità di relazionarsi con realtà educational, tutte cose di cui si trova molto, troppo in giro nella blogosfera.

Qui in questo articolo cerco invece di spiegare anche solo ad un livello introduttivo COSA sia il Pathfinding e sul come questo possa essere utilizzato dagli utenti di SL.

.

Un esempio di percorso di pathfinding che unisce due punti sulla navmesh

.

A questo proposito ho appena uploadato un video che dovrebbe aiutare a capire alcune basi non tanto di scripting del pathfinding, ma delle modifiche di building come la navmesh, i percorsi walkable e alcune altre chicche rese disponibili dal viewer beta (e mi pare di capire anche dal viewer ufficiale di SL), tutte cose che saranno presto rese disponibili anche da Firestorm, nonostante le dichiarazioni (a mio avviso improvvide) di guerra che il gruppo Phoenix ha lanciato contro SL negli ultimi giorni.

Per chi volesse avere informazioni dettagliate sul PathFinding a livello di scripting consiglio i seguenti link:

http://wiki.secondlife.com/wiki/Pathfinding_in_Second_Life

http://wiki.secondlife.com/wiki/Pathfinding_Quick_Start_Guide

ma anche il mio precedente articolo qui su VWM: http://virtualworldsmagazine.wordpress.com/2012/05/27/intelligenza-artificiale-in-secondlife-novita-dal-pathfinding-presto-in-secondlife/ che però era un po’ generico.

Per i pigri ricordo che le funzionalità principali del pathfinding di sl sono le seguenti:

  • definizione di navmesh, cioè di percorsi navigabili gestiti a livello di viewer con risultati di estrema fluidità e realismo. Le navmesh possono essere ostacoli, oppure zone camminabili.
  • supporto di strutture di associazione dei linkset ordinari di SL agganciati alla navmesh
  • definizione di CHARACTERs cioè di personaggi non giocanti che possono usare le navmesh per fare attività di “Vagabondaggio/Pattuglia”, “Caccia ad un Prim o a un Avatar”, “Fuga da un prim o da un avatar”, “individuazione del percorso per arrivare in un certo punto” (da cui appunto il nome pathfinding).

E’ evidente che il target manifesto di queste innovazioni sono nei seguenti ambiti:

  1. Animali o Creature che si muovono libere nel loro ambiente (simulazione di ecosistemi)
  2. Pet animali o creature che vi seguono o vi obbediscono
  3. Simulazione di mostri che controllano castelli che vi possono attaccare o cacciare quando vi vedono
  4. Guide turistiche fluide che possono mostrarvi le caratteristiche di una sim
  5. Bot di benvenuto che possono aiutare nei negozi
  6. …altro

Linden Lab non ha tirato fuori dal cappello queste novità dalla sera alla mattina. Del pathfinding se ne parla dall’anno scorso (ottobre 2011) con il seguente annuncio di Rod http://community.secondlife.com/t5/Featured-News/CEO-Rodvik-Humble-Shares-What-s-New-in-Second-Life/ba-p/1143239 e poi vi sono stati vari post annunciativi

come ad esempio

E le avventure nelle isole selvagge, dedicate solo agli utenti premium:

Come dicevo ad inizio articolo, anche se io notoriamente sono sempre stato molto critico sulle scelte di Linden Lab, al punto da spingermi ad usare molto più intensamente OpenSim, non posso onestamente fare a meno di notare che forse anche grazie a queste scelte sbagliate per gli anziani ma evidentemente importanti per la strategia di marketing di questa azienda stiano in realtà producendo un interessante effetto di “non fallimento” come testimoniato dalle cifre.

E’ comunque un notevole passo avanti (di lato? in alto? in basso?) che testimonia la grande vitalità tecnologica se non altro di questo mondo virtuale.

A breve (a settembre?) lezioni di Pathfinding fatte dal sottoscritto sfruttando anche la notevole opera di divulgazione di Any Ginoid (Magid Pathfinder) del gruppo NCI di autoaiuto gratuito e volontario su SL (http://www.nci-sl.info/blog/) che sta facendo da qualche mese delle lezioni specifiche su Intelligenza Artificiale e Pathfinding in sl cfr questo invito https://lists.secondlife.com/pipermail/educators/2012-May/048473.html per un ciclo di due lezioni che illustra tecniche di uso di pathfinding, di animazione di personaggi, e di intelligenza artificiale.

Alcuni pannelli deo corso ottimamente fatto da Magic Pathfinder di NCI

Salahzar Stenvaag

A lezione di trigonometria su SecondLife (o OpenSim)

Fra le caratteristiche peculiari di SecondLife c’è l’importante fatto che può essere utilizzata come una palestra di apprendimento, sperimentazione e verifica delle proprietà geometriche dello spazio tridimensionale in cui viviamo. L’opportunità è ghiotta perchè consente di vedere immediatamente l’effetto di equazioni, in un modo rapido ed efficace come nessun programma tradizionale potrebbe consentire.

Anche al di là dell’educational, è utile per tutti coloro che vogliono creare ed animare cose in SL o in programmi di animazione, conoscere le basi della trigonometria, che consentono di capire e riprodurre come avvengono gli spostamenti lungo traiettorie curve. Vi sembrerà strano ma molti scripter entrano in crisi quando gli si chiede di far compiere ad un oggetto una traiettoria circolare, soprattutto se si vuole che questa traiettoria possa essere calcolata indipendentemente dalla rotazione iniziale del pezzo.

Negli anni passati questo problema mi era stato chiesto cercando di simulare in SL lo spostamento dei sedili di una ruota panoramica. Gli script disponibili in quel momento consentivano di far “ruotare” la ruota, ma soltanto se la ruota era allineata lungo una certa direzione (es. NS), se la ruota veniva rezzata e “girata” per farla stare in una sim diversa, la rotazione era quella “standard” e quindi con i sedili che si muovevano lungo un cerchio diverso rispetto ai sostegni. Vi lascio solo immaginare inoltre l’inutile complessità degli script generati che cercavano di “cucinare” seni e coseni cercando di ottenere il risultato sperato.

La soluzione matematicamente esatta

Ora la soluzione al problema di tracciare un cerchio nello spazio 3D con il cosiddetto metodo “parametrico” (vale a dire facendo variare un parametro t in un certo intervallo e calcolando le componenti x,y,z per ogni valore), è persino molto elegante ed è riassumibile dalla seguente equazione:

Dove R è il raggio del cerchio, c rappresenta le coordinate del centro del cerchio, u è un vettore unitario che punta arbitrariamente dal centro verso un punto della circonferenza e n è il vettore unitario normale al cerchio.

Oppure nella versione più semplice (se si hanno già due vettori perpendicolari come vedremo è questo il caso in SL):

Che l’equazione sia elegante, non c’è dubbio (ci sono infatti un sacco di segni strani), per capirla dobbiamo fare un piccolo excursus sulla famigerata “trigonometria”. Quindi cerchiamo di fare un piccolo riepilogo dalle basi per cercare di capirla. (NB: notate che per ottenere questa formula ho dovuto ricercare molto intensamente tutto il materiale infinito presente in rete, perchè non è di quelle equazioni che si trovano facilmente su wikipedia). Io l’ho rintracciata in questo forum di fisica: http://www.physicsforums.com/showthread.php?t=123168.

Definizione di base della trigonometria.

Se guardiamo il famoso “cerchio trigonometrico”, che definisce le funzioni seno e coseno in funzione di una circonferenza di raggio unitario:

Capite la profonda elementare relazione che lega seni/coseni con il cerchio appunto. La componente X delle coordinate di un cerchio è appunto Rcos A, mentre la componente Y di coordinate vale Rsin A dove A è l’angolo.

Da questo schema si capisce che per poter descrivere una circonferenza è sufficiente prendere un angolo A e farlo scorrere fra 0 e 360 gradi: plottando le coordinate X e Y definite come RcosA e RsinA viene descritta appunto l’intera circonferenza.

Ma come applicare questo in 3D?

Per poter disegnare questa circonferenza in uno spazio tridimensionale, occorre definire in qualche modo le coordinate X’ e Y’ che descrivono il piano complanare a dove vogliamo disegnare il cerchio nello spazio 3D.

Se abbiamo quindi due vettori unitari U e V che “fungano” da assi cartesiani (siano quindi perpendicolari fra di loro), allora l’equazione del cerchio sarà qualcosa tipo RcosA*U+RsinA*V.

L’applicazione in SL

Supponiamo di avere un oggetto che abbia i propri assi locali X (asse rosso), Y (asse verde), Z (asse blu) e di volere disegnare un cerchio. Abbiamo già i vettori perpendicolari che ci interessano. Per la cronaca usando il linguaggio di scripting per ottenere i vettori normalizzati lungo l’asse X e Y basta fare:

vector v=llVecNorm(llRot2Left(llGetRot())); // torna il vettore unitario dell’oggetto lungo l’asse Y che in SL è il vettore “a sinistra”
vector u=llVecNorm(llRot2Fwd(llGetRot())); // torna il vettore unitario dell’oggetto lungo l’asse X che in SL è il “forward” cioè il fronte dell’oggetto

e per plottare la circonferenza basta fare ad esempio il seguente ciclo:

for(angle=0;angle<360;angle+=10)
{
float rad=DEG_TO_RAD*angle;
vector pos=R*llCos(rad)*u+R*llSin(rad)*(v)+center;
plot(pos);
}

che “plotta” un punto incrementando ogni volta di 10 gradi. Notate che l’angolo “volgare” 0-360 viene moltiplicato per la costante  DEG_TO_RAD per ottenere il corrispondente valore in radianti, che è l’unità di misura “giusta” per operare con le funzioni seno e coseno.

A proposito del plot

Cosa significhi “plottare” in 3D in SecondLife? Ci sono diverse tecniche. Quella che ho seguito io consiste nel “rezzare” una palla alle coordinate indicate. La palla è meglio che sia “temporanea” in modo da scomparire autonomamente dopo circa 1-2 minuti.

Lo script di plot risulta pertanto niente di più che il seguente:

plot(vector x)
{
llRezObject(“Sphere”,x,ZERO_VECTOR,ZERO_ROTATION,0);

}

Per avere una copia di questo rezzer basta che mi mandiate un IM in SL oppure una email a Salahzar@gmail.com

NB: Ci sono molte applicazioni che si possono fare a partire da questo semplice rezzer: non ultimi i rezzer di collane o di strutture di edifici. Inoltre queste equazioni possono come detto essere base per la realizzazione di sentieri curvi su cui far muovere treni ascensori etc…

Salahzar