[U3D] Ombre sovrapposte

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Rispondi
Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

[U3D] Ombre sovrapposte

Messaggio da civic71 »

In un gioco fatto con ultimate3D ,quando creo un ombra per un oggetto statico ( in questo esempio un albero ) , il quale è formato da molti poligoni , ho un grande calo degli fps. Quando poi nella room vi sono 10- 12 alberi , gli fps si mettono a piangere :)
La prima idea che mi venne in mente era quella di sostituire l'ombra dell' albero con un' ombra di un oggetto 3d simile all' albero però con moltissimi meno poligoni (tipo un cartellone) , posizionato nelle assi xy dell' albero.
Per aumentare il n° degli fps ho poi aggiunto uno script affinché l' ombra fosse attivata solo nel caso ci si trovasse vicino .
Il risultato era discreto seppur l' ombra era decisamente squadrata e visibile all' improvviso.

Ma un altro problema mi si porse davanti . Come potete vedere anche dall' immagine qui sotto l' ombra dell' albero e quella del personaggio , una volta sovrapposte , apportavano questo diffetto : l'ombra dell uomo veniva resa trasparente nel punto dove coincideva con quella dell' albero.

Immagine


Fortunatamente dopo aver studiato un pò le caratteristiche del terreno , sono venuto a conoscenza delle Decalcomanie per il terreno.
Con esse è possibile posizionare un' immagine in un determinato punto del terreno la quale sarà adattata alla sua superficie.

Ho creato quindi un' immagine per l' albero e l'ho posizionata ai suoi piedi con questo risultato:

Immagine

Grazie al fatto che si possono modificarne il materiale della decalcomanie , ho potuto settare la sua alpha.

IL risultato finale secondo me è nettamente migliore sia dal punto di vista grafico sia da quello delle prestazione ( più FPS )
Certamente non è adattabile agli object in movimento e non si potrà avere un ombra che varia di posizione in base al cambiamento della luce;

Per realizzare una Decalcomania del Terreno , bisogna... http://gamequiz.altervista.org/portale/?q=node/38

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

Purtroppo con le decalcomanie del terreno si possono fare solo ombre statiche. M per un gioco "amatoriale" vanno più che bene! Soprattutto se si vuole tenere sotto controllo le prestazioni!
Ma anche quella del personaggio è una decalcomania?
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da civic71 »

No quella del personaggio è un ombra reale creata tramite la funzione

Codice: Seleziona tutto

SwitchShadowCasting(global.light1,true); 
essa varia in base alla posizione del personaggio nei confronti della luce global.light1.
Troppi oggetti 3d con questa tipo di ombre mi diminuiscono gli fps .
Se poi la mesh del personaggio non è "realizzata bene" si hanno delle anomalie .

Ho intenzione di utilizzare le decalcomanie anche per aggiungere maggiori dettagli al terreno (fiori , sassi...)
Le ho appena scoperte e mi piacciono molto :mrgreen:

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

global.light1 è l'id di un oggetto luce? perchè sto provando anche io, mi piacerebbe usare le ombre dinamiche.. :)
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da civic71 »

Vi era questo bel esempio ShaderExample sul forum di U3d , se lo trovi ti può essere d' aiuto.
:sisisi:
Comunque per aggiungere l' ombra ad un terrreno devi :

Aggiungi questo sul create del object Control :

Codice: Seleziona tutto

global.light1=light_point;
Sull' object light_point aggiungi nel create event dopo LightPoint(); questo codice che abiliterà questa luce a fare le ombre :

Codice: Seleziona tutto

SwitchShadows(true);
Ora devi dire all' object terreno di abilitare la ricezione della luce ed ombre :
Quindi nel suo create metterai :

Codice: Seleziona tutto

lightmap=0;
mentre nel suo evento step :

Codice: Seleziona tutto

if lightmap=30{ 
               //CalculateTerrainLightMap(103658,103693,103678);// anzichè global.light1 puoi mettere 
//gli id dell' objects luce presenti nella room;
               CalculateTerrainLightMap(global.light1);//id della luce
               //SetCustomTerrainLightMap('gfx/Terreno/provaLuce.png') ;//Mappa di luce personalizzata ... avrei preferito //utilizzare questa ma non mi funziona :(

               lightmap=0;
               }else{lightmap+=1;}



SwitchShadowReceiving(global.light1,true);

Infine devi dire all' oggetto 3d di creare l' ombra :
nel suo create aggiungi :

Codice: Seleziona tutto

CreateShadowOptimizedGeometry(global.shadowq,true);
Mentre nel suo evento step :

Codice: Seleziona tutto

SwitchShadowCasting(global.light1,true);

Se gli oggetti 3d che creeranno l' ombra sono composti da molti poligoni , avrai un bel calo degli fps.

Per questo motivo nel mio gioco di Magnum con la ferrari ( ti ricordi il video ? ) , gli avevo messo un' object 3d a forma della ferrari , attaccato ad essa , ma con pochissimi poligoni .
Reso poi invisibile tramite la funzione del SetModelMaterial(0,0,0,0,0); , era questo che creava l' ombra della macchina e non la ferrari. In questo modo ho recuperato un sacco di fps :)

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

Provo subito! Spero che i miei 25000 triangoli non siano di troppo.. Ma ne dubito! Vediamo che esce fuori! :D Grazie della spiegazione!
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da Jak »

25000 triangoli non sono pochi. Conta che le ombre stencil non sonoa ltro che un'altra enderizzazione dei triangoli con colore nero alfato con valore per lo stencil buffer settato a 0. Alla fine è come disegnare 2 macchine. Fortunatamente cè il livello di lod per l'ombra che ti permette di avere un'ombra con pochi triangoli senza fare modelli a parte ecc.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da civic71 »

Fortunatamente cè il livello di lod per l'ombra che ti permette di avere un'ombra con pochi triangoli senza fare modelli a parte ecc.
Già vero e pensare che questa parte del manuale l'ho pure tradotta :mrgreen:
Ora sono andato a dargli un occhiata ed in effetti come dice Jack basta settare (in questo caso global.shadowq ) a 0 che corrisponde al più alto livello di dettaglio ( invariato dal modello), 1 si riferisce ad un livello più basso di dettaglio e così via....

global.shadowq è relativo a CreateShadowOptimizedGeometry(global.shadowq,true); presente nel create del object


Edit : Visto che non avevo niente di meglio da fare , ho messo on-line la parte del manuale tradotta in italiano , che parla della Real-time shadows : http://gamequiz.altervista.org/portale/?q=node/39.
Rileggendola ho potuto capire che CreateConnectionPatches sempre relativo a CreateShadowOptimizedGeometry se è true si ha un ombra più dettagliata , mentre se è false le connessione patch non vengono create, il che porta a una maggiore efficienza ma con un ombra meno dettagliata. :sisisi:

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

Ok! Ho provato le ombre anche nel mio gioco, non solo sul terreno ma anche su oggetti 3d! L'effetto è abbastanza buono, anche se non ho capito perché mi appaiono delle linee di ombra che sembrano proseguire fino a quello che sembra, come diceva jak, il secondo modello che deve essere disegnato (si nota se si guarda bene)!

Comunque per ora anche col dettaglio massimo e con 45.000 triangoli nella scena non ho nessun calo di fps! Forse è perchè sono comunque limitati a 60!
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da civic71 »

A me sugli oggetti 3d l'ombra appare solo se la light_point è posizionata ( object.x , objecty e anche object.z+70; ) vicina a colui che "diffonderà" l' ombra . In più la light_point la devo settare con un range alto (700).
Mentre per il terreno visibile nei precedenti video , la light_point è posizionata nelle cordinate fisse x=0;y=0; z=1000; ( più è alta la z meno si allungheranno le ombre).
Il primo metodo mi va bene per gli interni mentre per l' aperto preferisco il secondo metodo.
Logicamente ognuno deve adattarlo al proprio gioco.
di ombra che sembrano proseguire fino...
La causa ed il modo per riparare dalle lunghe linee di ombre infinite , lo trovi nel manuale linkato precedentemente ... comunque è una questione di mesh , camera e z della light.
Io per esempio ho dovuto cambiare la mesh della pistola del mio personaggio perchè aveva tale problema.... ora è molto meglio ma non ancora perfetto al 100%. :?
dettaglio massimo e con 45.000 triangoli nella scena non ho nessun calo di fps!
Bene , invece il mio pc da 1,2 ghz si inchioderebbe :)

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

Il manuale di U3D ha scritto:La geometria non deve avere nessun foro e dovrebbe avere triangoli che ne rappresentano il bordo... a meno che non abbia un elevato numero di triangoli.
Per far funzionare le ombre correttamente, dice il manuale, c'è bisogno che il modello non abbia fori e abbia triangoli per bordi. Quindi se volessi fare un'ombra di una finestra, dato che ha un foro non funzionerebbe?
Poi parla di elevato numero di triangoli. Se ho inteso bene non si hanno problemi se un modello è high-poly.
Ora faccio un test cambiando i valori e la posizione della luce.

EDIT: Ho provato a renderizzare le ombre solo con un modello nella scena. Questo modello ha un foro. Proprio i vertici dove c'è il foro vengono proiettati sotto forma di ombre lunghissime, dando quel brutto effetto. Quindi il problema è proprio il modello che dovrebbe essere "pieno", senza buchi nè facce mancanti.
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da civic71 »

... ora è molto meglio ma non ancora perfetto al 100%.
Ok , ora credo di aver raggiunto la perfezione :D : ho eliminato 2 angoli nella mesh :mrgreen:
Quindi se volessi fare un'ombra di una finestra, dato che ha un foro non funzionerebbe?
No è la mesh che non deve avere fori. Puoi creare una finestra con una mesh senza fori... perchè il foro che intendi tu (ovvero i vetri della finestra) non centra con il tipo di fori in una mesh.
Diciamo che una sfera non ha fori nella mesh ... ma neanche una ciambella ha fori nella mesh ... ha un buco ma non nella mesh. La mesh della ciambella è sempre chiusa.

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Ombre sovrapposte

Messaggio da fra3point »

sisi ho capito quello che dici! Solo che mi sbaglio spesso tra mesh e modelli.. Più che altro per pigrizia! :lol:
Peccato che non potrò usare le ombre, almeno in questo gioco, poichè le mie mesh sarebbero troppo difficili da correggere completamente! Vabbè pazienza! Sarà per un altro progetto.. Forse! :sisisi:
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 41 ospiti