SL Italian Mentors-Scripting Textures

20
SL Italian Mentors Lezioni di Scripting base Scriptare le Textures Maggio 2008

Transcript of SL Italian Mentors-Scripting Textures

Page 1: SL Italian Mentors-Scripting Textures

SL Italian Mentors

Lezioni di Scripting base

Scriptare le Textures

Maggio 2008

Page 2: SL Italian Mentors-Scripting Textures

0. Cosa sono le Texture

Le texture sono delle immagini o fotografie, che vengono usate pesantemente in SL per dare vitalità e realtà alle costruzioni, agli oggetti e agli avatar.

Le trovate nel vostro inventory nella cartella Textures e hanno come simbolo una griglia di colori oppure la cornice. Non c'è differenza fra le due tipologie, la Linden ha voluto distinguere le foto direttamente uploadate dalla funzione "snapshot" e le altre immagini utenti.

Non confondete la "Texture" che contiene una immagine complessa con il colore o tinta che potete aggiungere ad una texture "Color". Su un prim potete aggiungere SIA una texture che un colore.

Page 3: SL Italian Mentors-Scripting Textures

Le texture vengono costruite nei seguenti modi:

Esternamente dal proprio PC:

scaricando immagini da internet (browser save as .jpg)

facendo snapshot sul vostro computer (programmi che scattano foto)

dalla vostra macchina fotografica producendole con programmi di gestione di

immagini (GIMP o PHOTOSHOP)

Internamente da SL:

Facendo snapshot con il menù del client Usando una texture che avete nel vostro inventory

datavi da altri

Page 4: SL Italian Mentors-Scripting Textures

Tutte le volte che uploadate una immagine vi costa 10L$,

1. Dimensioni e tipo delle texture

Le texture hanno dimensioni che sono normalmente multipli di 128 pixel.

Un pixel è un punto che può essere Rosso, Verde o Blu

Le dimensioni più diffuse sono:

QUADRATE:

256 x 256 (bassa risoluzione) occupa circa 200Kbyte

Page 5: SL Italian Mentors-Scripting Textures

512 x 512 (media risoluzione) occupa circa 800 Kbyte

1024 x 1024 (alta risoluzione) occupar circa 3.5 Mbyte

RETTANGOLARI: - 256x512 - 512x1024

Come vedete una texture 1024x1024 è decisamente "grande". Una scena con 300 texture di questo tipo comporta lo scarico di quasi 1 GigaByte!!! Ecco perchè secondlife a volta sembra lento :(

Le texture vengono anche usate per contenere i dati dei "sculpted prims", ma questo non è oggetto di questo corso. Se aprite una texture usata per uno

Page 6: SL Italian Mentors-Scripting Textures

sculpted vedrete una immagine con una sequenza casuale di punti rossi verdi blu.

Le tipologie attualmente accettate come texture dall'image upload sono:

Image (propriamente dette) quelle di questa lezione

Hair/Head/Upper-LowerBody - servono per le skin e gli abiti & Sculpted Prims.

2. Alpha channel e come mettere le textures su un prim.

Vi sono un tipo particolare di texture trasparenti o semi trasparenti. Queste texture si dice che sono "alpha channel". La trasparenza consente di creare

Page 7: SL Italian Mentors-Scripting Textures

effetti molto potenti (finestre, abiti trasparenti, porte, effetto vetro).

Sebbene non sia parte di questo corso la trasparenza (si manda ad apposito corso) è importante conoscere il significato della dicitura "alpha". Nello scripting l'alpha è un numero che va da 0 a 1

0 = trasparente

0.5 = semi-trasparente

1 = opaco

Un prim ha un certo insieme di facce tipicamente da 1 a 8. Si possono mettere texture differenti per ogni faccia del prim.

Un cubo con HOLE e CUT ha tipicamente 8 facce.

Page 8: SL Italian Mentors-Scripting Textures

Una sfera ha una sola faccia.

Un cubo semplice ha 6 facce.

ALL_SIDES

La texture può essere messa su una faccia su un insieme di facce o su TUTTE le facce del prim.

OFFSET

L'offset di una texture è una coppia (x,y) che indica di quanto la texture viene spostata lungo l'asse x o l'asse y. 0= non spostata, 0.5 = spostata a metà .75=spostata di 3/4

ROTAZIONE

La rotazione di una texture è un float (es. PI/2 per 90 gradi) che indica la rotazione della texture.

Page 9: SL Italian Mentors-Scripting Textures

LA SCALA

La scala di una texture è una coppia (x,y) che specifica quanto viene ristretta (>1) o amplificata (<1) lungo l'asse x o y. Es. (0.5,0.5) vuol dire amplifica mostrando ¼ della texture. (2,2) vuol dire mostrare una griglia di 2 x 2 = 4 textures uguali sul prim.

3. Istruzioni di scripting che agiscono sulle texture

L'accesso alle texture da uno script in un prim o in un linkset consente di gestire le texture usando il nome della texture nell'inventory dell'oggetto oppure usando un numero UUID.

Page 10: SL Italian Mentors-Scripting Textures

L'accesso per UUID è possibile solo se la texture è full permissions (copy-modify-transfer).

string llGetTexture(side) ovede quale texture c'è sul lato ALL_SIDES se c'è

un'unica texture su tutte le facce vector llGetTextureOffset(side)

o(x,y) indicano lo spostamento della texture float llGetTextureRot(side)

otorna l'angolo di rotazione vector llGetTextureScale(side)

otorna la “scala” llSetTexture(texture,side) llOffsetTexture(x,y,side)

o imposta l'offset della texture llRotateTexture(angle, side)

Page 11: SL Italian Mentors-Scripting Textures

o imposta la rotazione llScaleTexture(x,y,side)

o imposta la scala della texture

analoghe operazioni possono essere fatte su un altro prim dello stesso linkset.

Non consideriamo in questa lezione le istruzioni che agiscono sulle animazioni di una texture (llSetTextureAnim).

4. Esempio concreto di programma che manipola le texture

Il programma indicato permette di "giocare" con un cubo cambiando da script:

Page 12: SL Italian Mentors-Scripting Textures

- la texture- l'offset- la rotazione- la scale

Questo viene ottenuto facendo uno script che ogni volta che viene toccato, cambia i parametri della texture sul cubo.

Ecco lo script:integer stato=0; // (1) per passare di stato in stato

default {

state_entry() {

stato=0;

Page 13: SL Italian Mentors-Scripting Textures

// (2) uso la UUID di una texture neutra

llSetTexture("8b5fec65-8d8d-9dc5-cda8-8fdf2716e361",ALL_SIDES);

llRotateTexture(0,ALL_SIDES); // (3) resetto i parametri

llOffsetTexture(0,0,ALL_SIDES);

llScaleTexture(1,1,ALL_SIDES);

llSetText("Spiegazione textures",<1,0,0>,1);

}

touch_start(integer total_number) {

stato=stato+1;

if(stato==1){ // (4)

llSetText("Imposto la texture1...",<1,1,1>,1);

llSetTexture("Texture1",ALL_SIDES);

}

if(stato==2) { //(5)

llSetText("Imposto la texture2...",<1,1,1>,1);

llSetTexture("Texture2",ALL_SIDES);

}

Page 14: SL Italian Mentors-Scripting Textures

if(stato==3){ //(6)

llSetText("Ruoto di 45 gradi la texture...",<1,1,1>,1);

llRotateTexture(PI/4,ALL_SIDES);

}

if(stato==4) { //(7)

llSetText("Rimetto la rotazione a 0 e sposto la x di 1/3",<1,1,1>,1);

llRotateTexture(0,ALL_SIDES);

llOffsetTexture(0.333,0,ALL_SIDES);

}

if(stato==5) { //(8)

llSetText("Metto offset a 0.25, 0.25 e metto scale a 0.5 0.5",<1,1,1>,1);

llOffsetTexture(0.25,0.25,ALL_SIDES);

llScaleTexture(0.5,0.5,ALL_SIDES);

stato=0;

}

if(stato==6) { //(9)

Page 15: SL Italian Mentors-Scripting Textures

llSetText("Restarting from start",<1,1,1>,1);

llResetScript();

}

}

}

Commento: come vedete si possono fare un po' di giochi con le texture, e uno dei principali è quello di riuscire a visualizzare un frammento di texture (base per avere tante immagini e uploadarne una sola).

5. Cosa fare successivamente.

* Usando llSetTimerEvent() si possono fare dei complicati giochi di movimento delle texture.

Page 16: SL Italian Mentors-Scripting Textures

* Usando coppie di texture Finestra aperta (trasparente) Finestra chiusa e comandi linkmessage o llSay si possono fare script che aprono/chiudono finestre.

* In combinazione con il movimento dei prim si possono avere effetti scenografici spettacolari

* analogo con le funzioni che impostano il colore, la trasparenza, le caratteristiche del prim ecc..