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.
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
Tutte le volte che uploadate una immagine vi costa 10L$, anche se vi sono dei sistemi che consentono di uploadare immagini accatastandone più di una in una immagine grande in modo da limitare il costo.
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
- 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 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 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.
Una sfera ha una sola faccia.
Un cubo semplice ha 6 facce.
La texture può essere messa su una faccia su un insieme di facce o su TUTTE le facce del prim.
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
La rotazione di una texture è un float (es. PI/2 per 90 gradi) che indica la rotazione della texture.
La scala di una texture è una coppia (x,y) che specifica quanto viene ristretta (>1) o amplificata (<1) lungo l'asse x o y.
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.
L'accesso per UUID è possibile solo se la texture è full permissions (copy-modify-transfer).
string llGetTexture(side) --- vede quale texture c'è sul lato ALL_SIDES se c'è un'unica texture su tutte le facce
vector llGetTextureOffset(side) ---- (x,y) indicano lo spostamento della texture
float llGetTextureRot(side) ---- torna l'angolo di rotazione
vector llGetTextureScale(side) -- torna
llSetTexture(texture,side)
llOffsetTexture(x,y,side) --- imposta l'offset della texture
llRotateTexture(angle, side) --- imposta la rotazione
llScaleTexture(x,y,side) -- 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:
- 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;
default
{
state_entry()
{
stato=0;
// default media texture
llSetTexture("8b5fec65-8d8d-9dc5-cda8-8fdf2716e361",ALL_SIDES);
llRotateTexture(0,ALL_SIDES);
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)
{
llSetText("Imposto la texture1...",<1,1,1>,1);
llSetTexture("Texture1",ALL_SIDES);
}
if(stato==2)
{
llSetText("Imposto la texture2...",<1,1,1>,1);
llSetTexture("Texture2",ALL_SIDES);
}
if(stato==3)
{
llSetText("Ruoto di 45 gradi la texture...",<1,1,1>,1);
llRotateTexture(PI/4,ALL_SIDES);
}
if(stato==4)
{
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)
{
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)
{
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 isola.
5. Cosa fare successivamente.
* Usando llSetTimerEvent() si possono fare dei complicati giochi di movimento delle texture.
* 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..
Comments