2012-01-16 16 views
5

Ho un albero BSP caricato in memoria. Per prima cosa scopro in quale foglia sono. Successivamente, decodifico il PVS. Quindi, percorro ciascuna regione in quel PVS e vedo se si trova nel mio trambusto.Sto rendendo gli alberi BSP in modo errato?

Mi è stato detto che questo è il modo scorretto di renderizzare e che dovrei effettivamente fare un back to front rendering attraversando l'albero BSP. Come esattamente faccio questo? Ho visto un certo numero di metodi diversi per farlo, ecco perché lo chiedo.

Ad esempio, il rendering di Quake 3 BSP dice: Attraversare il BSP per determinare in quale posizione è posizionata la telecamera. Recupera e decomprime il PVS per questa foglia, itera su PVS e segna le foglie nel BSP. Attraversare il BSP vicino al lontano Se un nodo non è marcato, saltarlo. Testare la casella di delimitazione del nodo contro Camera Frustrum. Aggiungi la foglia corrente all'elenco delle interpretazioni

È ancora questo il modo standard in cui è fatto oggi o almeno per i giochi più semplici.

+0

oggi è il rendering preferito da fronte a retro; back to front era necessario solo per l'algoritmo del pittore (vale a dire prima che i buffer z compressi ad alta larghezza di banda li rendessero preferibili). front-to-back consente i primi z-reject (tutto ciò che è dietro ciò che è stato disegnato verrà rifiutato, nell'hardware moderno, prima che molto lavoro oltre a determinare e controllare il suo valore z sia fatto). Commenterò di nuovo quando avrò un po 'di più. –

risposta

1

Come OrgnlDave detto:

Quando si disegna un primitivo, i pixel poste di fronte alla z-buffer saranno vernice e verrà eseguito lo shader programma. Ma se il pixel è dietro la scena, i pixel vengono rifiutati. Non vi è alcun obbligo di fare tali disegni, da fronte a retro, ma il guadagno in termini di prestazioni è peggiore.

Tuttavia, se si utilizza l'oggetto blend, sarà necessario disegnare questo dopo ogni oggetto solido e farlo di nuovo in primo piano. Perché è necessario fondere il colore con l'oggetto posto subito dopo.

+0

@OrgnlDave Ben detto. Il riempimento dei pixel è costoso. È l'unico punto della pipeline in cui è necessario l'accesso in scrittura a una risorsa condivisa. Gli shader Vertex possono essere eseguiti in parallelo e generare elenchi di geometrie simultaneamente, tuttavia quando Pixel Shader scrive sul Color Buffer o sul Z Buffer, solo un programma può accedere alla stessa memoria alla volta. Rende la geometria opaca dalla parte anteriore a quella posteriore, per eliminare il riempimento dei pixel sugli oggetti che sono coperti e quindi renderizza la geometria non opaca dalla parte posteriore alla parte anteriore, in modo che la geometria oscurata abbia un peso nella miscela alfa. – Dan

Problemi correlati