[U3D] Ombre sovrapposte
- 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
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.
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:
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
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.
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:
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
- 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
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?
Ma anche quella del personaggio è una decalcomania?
draw_text(100,100,"fra3point");
Progetti in corso:
Progetti in corso:
Spoiler
- 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
No quella del personaggio è un ombra reale creata tramite la funzione
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
Codice: Seleziona tutto
SwitchShadowCasting(global.light1,true);
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
- 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
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:
Progetti in corso:
Spoiler
- 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
Vi era questo bel esempio ShaderExample sul forum di U3d , se lo trovi ti può essere d' aiuto.
Comunque per aggiungere l' ombra ad un terrreno devi :
Aggiungi questo sul create del object Control :
Sull' object light_point aggiungi nel create event dopo LightPoint(); questo codice che abiliterà questa luce a fare le ombre :
Ora devi dire all' object terreno di abilitare la ricezione della luce ed ombre :
Quindi nel suo create metterai :
mentre nel suo evento step :
Infine devi dire all' oggetto 3d di creare l' ombra :
nel suo create aggiungi :
Mentre nel suo evento step :
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
Comunque per aggiungere l' ombra ad un terrreno devi :
Aggiungi questo sul create del object Control :
Codice: Seleziona tutto
global.light1=light_point;
Codice: Seleziona tutto
SwitchShadows(true);
Quindi nel suo create metterai :
Codice: Seleziona tutto
lightmap=0;
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);
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
- 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
Provo subito! Spero che i miei 25000 triangoli non siano di troppo.. Ma ne dubito! Vediamo che esce fuori! Grazie della spiegazione!
draw_text(100,100,"fra3point");
Progetti in corso:
Progetti in corso:
Spoiler
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: [U3D] Ombre sovrapposte
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
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
- 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
Già vero e pensare che questa parte del manuale l'ho pure tradottaFortunatamente cè il livello di lod per l'ombra che ti permette di avere un'ombra con pochi triangoli senza fare modelli a parte ecc.
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.
- 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
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!
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:
Progetti in corso:
Spoiler
- 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
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.
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%.
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.
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.di ombra che sembrano proseguire fino...
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%.
Bene , invece il mio pc da 1,2 ghz si inchioderebbedettaglio massimo e con 45.000 triangoli nella scena non ho nessun calo di fps!
- 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
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?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.
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:
Progetti in corso:
Spoiler
- 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
Ok , ora credo di aver raggiunto la perfezione : ho eliminato 2 angoli nella mesh... ora è molto meglio ma non ancora perfetto al 100%.
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.Quindi se volessi fare un'ombra di una finestra, dato che ha un foro non funzionerebbe?
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.
- 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
sisi ho capito quello che dici! Solo che mi sbaglio spesso tra mesh e modelli.. Più che altro per pigrizia!
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!
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!
draw_text(100,100,"fra3point");
Progetti in corso:
Progetti in corso:
Spoiler
Chi c’è in linea
Visitano il forum: Nessuno e 41 ospiti