Newsgroup: it.comp.hardware.video-3d
Titolo: CAZZOOO!!! VIPER 330 & Bilinear Filtering

Salve a tutti,
vi ricordate il mio messaggio riguardante una presunta errata
implementazione del driver Direct3D?
Ebbene, devo segnalare a tutti i possessori di Viper 330 una errata
implementazione (o un bug di altra natura, vedro` di approfondire
meglio) del filtro bilineare. Con un semplice test potete anche voi
vedere la differenza:
1) Pigliatevi TombRaider 2 e andate nel setup e abilitate tutte le
funzioni 3D tranne Buffer Triplo e Filtro Bilineare: come potrete
notare il corpo di Lara e` perfetto.
2) Abilitate il Bilinear Filtering e vedrete apparire sul corpo di
Lara strani segmenti che si notano soprattutto sul volto (sembra una
indiana!!!). Da vicino (quando la telecamera si avvicina) questi
difetti sembrano sparire.
Vi pregherei di segnalare (come faro` anche io) alla Diamond questa
"piccolissima" sfiga che rovina NON poco alcuni giochi, specialmente
quelli tipo Tomb Raider 2.
Difficile ma possibile vedere il difetto anche in Motoracer. Provate a
voltarvi con la moto verso le case sui lati delle strade: spariscono e
compaiono poligoni che e` una bellezza. Non a caso le case sono
texture filtrate.
P.S.
Inutile dire che la 3DFx non soffre di questo problema.
---
Che lo SFORZO sia con te... (now playing XWing vs Tie Fighter!)
Home page: 
http://www.cs.unibo.it/~abilli
ICQ Number: [2509239]

Sai cos'è la netiquette?


Evidentemente No

Evidentemente No
Ah, raga', avete anche ragione, ma il difetto non ci deve comunque
essere....
st.

Io non ho una Viper330 ma mi succede lo stesso quindi credo che sia o un
problema di direct3d o comunque di configurazioni. Sto provando in tutti i
modi ad avere i driver aggiornati della mia Virge DX. A parte questo
problema non del tutto sorvolabile il resto va che è una favola e la
grafica la riesco perfino a paragonare alle foto delle riviste in 3Dfx.

 
flo...@easynet.it
-- 
"Television, the Drug of the nation, Breeding ignorance and Feeding
Radiation..."
                      (Disposable Heroes Of Hiphoprisy)
                          ***********************
               Simone "SKIZZO" Salotti, 
sim...@mbox.lognet.it
           HIP HOP DON'T STOP!! -- 
http://italianhiphop.lognet.it

Sai cos'è la netiquette?
contattare privatamente:
supe...@rocketmail.com



Volete sapere la piu' bella? Tomb raider II in d3d NON usa
il mip-mapping!


Ma allora com'e' che se lo metto a zero va tutto bene????!!
Boh... misteri della vita.....

-- 


 >



sono pochi quelli che sanno cosa sia e il suo reale utilizzo.....
Il mipmapping e' una tecnica che serve a ridurre i problemi inerenti la
texturizzazione, cioe' l'applicazione di una immagine 2D su una superficie
3D con le regole della prospettiva.
Il metodo piu' semplice per "texturizzare" una superficie e' detta "point
sampling", in cui praticamente la texture viene usata come "campione" per
sapere quale colore usare per un particolare pixel dello schermo. Il
risultato e' pero' una schifezza, per due motivi: a causa della
rappresentazione prospettica, praticamente le dimensioni di un pixel e di un
texel non coincidono mai. Questo vuole dire che se ad esempio la mia textue
e' di 20x20, e copro con questa un quadrato in 3D che e' posto ad una
distanza tale che le sue dimensioni finali proiettate sono di 20x20 pixel,
un pixel ed un texel coincidono. Se pero' il quadrato (in 3D) e' posto piu'
vicino, le sue dimensioni possono essere ad esempio di 60x60. In tal caso ad
ogni texel (cioe' pixel della texture), corrispondono 9 (3x3) pixel del
quadrato finale. Insomma se si ricopre in questo modo il quadrato, esso
appare ricoperto a "quadrettoni". Il problema opposto si ha quando il
quadrato e' posto molto lontano, per cui la sua proiezione prospettica
appare come un quadrato ad esempio di 5x5. In tal caso ad ogni pixel sullo
schermo coincidono ben 16 pixel (un gruppo di 4x4 pixel) della texture. La
domanda e': se ho 16 pixel da cui scegliere il colore da usare per colorarne
1, quale e' quello giusto da usarsi?
Nota poi che il caso di cui parlo e' semplice, cioe' il quadrato in 3D e'
posto esattamente parallelo al piano del monitor. Se invece lo inclini, la
forma finale e' un trapezio, in cui puoi avere entrambi i problemi
combinati: hai 1 solo pixel della texture per colorarne 10 a video per le
parti "vicine" del quadrato, e magari hai 10 pixel della texture tra cui
scegliere il colore per colorarne 1 a video.
Il point sampling la fa breve: ripete le texel mancanti se il quadrato
finale e' piu' grande della texture, o "taglia" i texel in eccesso se il
quadrato e' piu' piccolo. Il risultato comunque e' davvero spiacevole:
quadrettoni enormi per i poligoni vicini, effetto moire e sfarfallio per
quelli lontani. Infatti i poligoni lontani sono quelli critici: da una
immagine alla successiva un piccolo movimento in questi puo' causare al
point sampling di passare da un gruppo di pixel ad un altro, magari di
colori completamente diversi.
Il mipmapping risolve uno dei due problemi, piu' precisamente quello in cui
la texture e' piu' grande del poligono su cui va mappata. Torniamo al
quadrato di 5x5, su cui va mappata una texture di 20x20: in pratica ad ogni
pixel corrisponde un insieme di 4x4 texel. Il point sampling prende un texel
tra i 16 possibili, ad esempio sempre il primo o quello centrale. Insomma
sugli assi x e y prende un pixel ogni 4 e da una texture di 20x20 ottiene un
insieme di 5x5 pixel corrispondenti. Il risultato non e' male in se, ma
diventa inaccettabile nel caso di un renderint in tempo reale, perche' porta
a uno sfarfallio continuo dei colori. L'idea migliore sarebbe di fare una
"media" dei colori dei pixel: in fondo un gruppo di 4x4 pixel se fossero
visti "da lontano", sembrerebbero 1 solo pixel con un colore che e' dato
dalla fusione dei colori prevalenti nel gruppo. Il problema e' che per
disegnare 1 solo pixel sullo schermo bisogna calcolare una formula su 16
pixel, nel nostro caso. In certe condizioni le cose peggiorano anche,
insomma il punto e' che comunque l'insieme di calcoli richiesti per
tracciare 1 pixel diventa troppo elevato. Nel nostro esempio bisogna
lavorare su 16 texel per ottenere 1 solo pixel.
Il mipmapping risolve il problema in modo un po' diverso: supponiamo di
avere diverse versioni della stessa texture, di dimensioni diverse. Questo
vuole dire che chi disegna la texture non ne produce una sola, ma ne produce
diverse versioni di diverse dimensioni in modo che per ciascuna dimensione
si abbia la massima risoluzione possibile. Immaginiamo ora di "espandere" le
versioni piu' piccole tutte alla dimensione di quella piu' grande. Il
risultato e' che quelle piu' piccole avranno texel piu' grandi,
corrispondenti anche ad un solo texel di quella a risoluzione maggiore.
Faccio un esempio: la mia texture di 20x20 la produco in dimensioni 15x15,
10x10, 5x5. Se "espando" quelle piu' piccole fino a "tirarle" ad una
dimensione di 20x20, si vede che ad un texel di quella di 20x20
corrispondono 4 texel di quella da 10x10, 16 texel di quella da 5x5, ecc.
A questo punto torniamo al problema della texturizzazione: quasi sicuramente
il poligono finale che devo disegnare non ha la dimensione di nessuna delle
varie versioni che ho in memoria della texture da mappare, inoltre
l'inclinazione 3D del poligono di solito tale che a causa della prospettiva
non si ha mai corrispondenza tra un pixel e un texel. Pero' per ogni pixel,
si ha sempre una coppia di versioni della texture tali che una ha i texel di
dimensione leggermente piu' grande della dimensione esatta, una leggermente
piu' piccola. Il mipmapping lavora scegliendo le versioni della dimensione
adeguata della texture, e facendo una "media" tra questi. Il risultato
richiede ancora un po' di calcoli, ma di solito in quantita' molto minore.
Al posto di prendere 2 soli texel delle due versioni, si possono avere
diverse versioni del mip mapping:
lineare: si prende un texel piu' grande e uno piu' piccolo e si fa la media.
bilineare: si prendono 4 texel adiacenti nelle due versioni della texture di
dimensioni piu' prossime, 2 sull'asse x e due sull'asse y, a croce.
trilineare: si prendono tutti e 8 i texel adiacenti che circondano quello
scelto, da entrambi i livelli piu' vicini.
Il calcolo applicato su queste texel non e' una semplice media, ma piuttosto
una media pesata dei loro colori in base alla differenza di distanza tra il
pixel e la texel.
Questo e' quello che fa il mipmapping, da non confondersi comunque con il
famoso "bilinear o trilinear filtering", che invece lavora nel secondo caso:
quando la texture e' piu' piccola del poligono su cui va applicata, e che
serve ad eliminare i "quadrettoni".
Il mipmapping non e' comunque perfetto: se il poligono su cui va eseguita la
texturizzazione e' obliquo rispetto all'osservatore il mip mapping puo'
causare una "sfuocatura" eccessiva della texture mappata. Per risolvere
anche questo problema e' necessario ricorrere ad un sistema detto "filtro
anisotropo", in cui praticamente i texel da usare nel campionamento sono
scelti da gruppi piu' ampi di texel rispetto anche agli 8 del mipmapping
trilineare, inolte sono scelti in base alla proiezione del pixel da
disegnare nello spazio della texture. Il sistema si chiama appunto
"anisotropo" perche' la regione di texel da usare per il filtraggio ha forma
irregolare, dipendente appunto dalla proiezione di cui parlo sopra. Al
contrario il mipmapping e' isotropo perche' in ogni condizione filtra gruppi
di texel di forma quadrata.
Il parametro piu' importante nel mipmapping e' quindi (appurato che il
tipo - cioe' lineare, bilineare, trilineare non puo' essere cambiato ma fa
parte dell'hardware) la quantita' di "livelli" di dettaglio da considerare,
ossia quante versioni della stessa texture tenere in memoria. Ovviamente
piu' sono e maggiore sara' la probabilita' di averne due delle dimensioni
adatte su cui fare il sampling. Per questo il mip mapping viene a volte
anche detto "LOD mipmapping", LOD = level of detail. Un maggiore livello di
dettaglio, cioe' piu' versioni della stessa texture, ovviamente occupa piu'
memoria.
--
-=================[ ICQ:   787595 ]=================-
       Marco Braga - Email: 
bra...@tin.it
            F.A.Q. sulle schede 3D / 3dfx
 
http://www.ludus.com/TECNICO/schede3d/
Join The Wild Wereboar Team  RC5-64 Project effort!
http://www.geocities.com/SiliconValley/Horizon/5766
-===================================================-

soprattutto che differenza c'e' fra 0 o 8???? mah!!! 
Beh, a zero il RIVA128 o chi per lui se ne sbatte di cambiare
le texture. Usa quelle e basta, al piu' ci applica l'effetto bilineare.
Mettendo ad 8 invece quel settaggio, vengono preparati 8 diversi
livelli di texture, da usare poi a seconda delle occasioni.
Prendi Moto Racer, ad esempio.
Se lo metti a 8, noterai che le moto man mano che si allontanano
iniziano ad apparire (brutte) e sfocate. Se metti a zero, vedrai che
le texture delle moto non cambiano.
Il mip mappin' e' in genere utile, il fatto che ora i driver per il RIVA128
lo implementino di merda e' un altro discorso (vedi il volto di Lara in TR2)
Spero di esserti stato di aiuto. Ciao,
Simone