|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |||||
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
Vertex Shader (&pixel)
continuo qui una discussione inizata su un altro post e rispondo tra gli altri a yossarian.... quoto e rispondo riassumento l'argomento come shader poichè sono state dette alcune inesattezze
![]() (ultimamente per motivo vari non ho avuto occasione di leggere e continuare la discussione quindi lo riprendo qui) Quote:
ad ogni modo la tua affermazione è sbagliata poichè da DX7 era inclusa un unità che operava sui vertici e questo è il T&L. Si tratta di fixed-function parametrizzabili che operano appunto sui vertici e permettono di ottenere in maniera veloce (a carico della GPU) le basilari operazioni di traformazione ed illuminazione. Precedentemente questo carico era della CPU mentre dalle DX7 è passato a carico della GPU con il suo T&L. Quote:
questi numeri su cui ti fissi hanno ben poco significato nel contesto... non è il poter eseguire i calcoli in virgola mobile o meno a fare la differenza tra fixed-function o shader... Dalle Dx8 (Nv20) è stata sviluppata una vera GPU programmabile che sostituisce e non è compatibile con la precedente architettura T&L(le fixed--function) per la parte vertici e multitexturing per i pixel o texel. A motivo di questa incompatibilità nella Gef3 è stato incluso il motore T&L cioè le vecchie fixed-function o meglio il core NV15. Quote:
Quindi punto di forze del Geforce(DX7) è stato proprio il passaggio da cpu e gpu per i calcoli ai vertici(cioè le trasformazioni T&L a mezzo di fixed-function). Quote:
a livello hardware sono circuiti come quelli che si trovano nella CPU e proprio per questo si parla di vera GPU poichè è programmabile. Non ci sono le fixed-function ma circuiti che permettono l'esecuzione di istruzioni... queste istruzioni operano sui vertici (Vertex-shader) o sui pixel(Pixel-shader) e la sequenza di questa istruzioni determina il comportamento con infinite 'funzioni' finali... nel senso che a seconda del programma i programmatori ottengono quello che vogliono.... mentre con le fixed-function le funzioni erano appunto fisse mentre adesso con gli shader queste funzioni vanno programmate. Quote:
In realtà attualmente non c'è quasi niente che sfrutti gli shader... sopratutto i vertex-shader... per molto tempo non c'è stato niente e pur avvantaggiandosi della nuova architettura (frequenze maggiori, ottimizzazioni ecc...) ottentendo performance più elevate il software continuava ad essere T&L ed a non sfruttare gli shader. Col tempo alcuni titoli hanno inizato a sfruttare parzialmente gli shader... i vertex shader con semplice conversione di fixed-function a programma shader equivalente ed i pixel shader per ottenere alcuni effetti in più non disponibili a chi non aveva l'hw adeguato. Ad oggi la situazione non è cambiata di molto e titoli shader-oriented sono ancora purtroppo solo prossimi e futuri... Saluti ![]() |
|||||
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
hmm.... uppete che nn so se yossarian ha letto
![]() ![]() ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
Visto che parli di innovazioni portate da nVIDIA e di programmabilità (e dimostri di apprezzare queste cose), dovresti apprezzare il fatto che il Radeon 256 riproduceva funzioni, quali la keyframe interpolation e il morphing, proprie di un chip con motore VS e successivamente riprese e sviluppate da nVIDIA con l'NV20 (questo oltre ad avere la possibilità di applicare 3 textures psp ne facevano un chip che andava ben oltre le DX7, al contrario della GF2). Per quale motivo un'unità VS non dovrebbe essere compatibile con le operazioni di rotazione e traslazione di un poligono? Le funzioni finali ottenibili non sono infinite nel modo più assoluto. Un'nità "programmabile" non è altro che un'unità in grado di eseguire operazioni di tipo più complesso rispetto a semplici operazioni lineari, ma da qui a dire che le funzioni ottenibili sono infinite ce ne corre (salvo ricorrere all'utilizzo di algoritmi di interpolazione che permettono di APPROSSIMARE la quasi totalità delle funzioni, con perdita, però, di precisione). La presunta inclusione del motore Fixed Function nell'NV20 non è altro che un'estensione delle operazioni che il motore VS è in grado di compiere: oltre alle operazioni di traslazione e rotazione (lineari) il motore VS dell'NV20 ne poteva compiere altre più complesse (di tipo non lineare). Quindi quanto sostieni sulla presunta incompatibilità non ha alcun senso. Nell'NV25, rispetto all'NV20 è stata aggiunta una seconda unità VS (identica alla prima). Ps: fixed function sta a significare semplicemente che le operazioni svolte non modificano forma e dimensione dei triangoli (le operazioni di rotazione e traslazione si limitano ad effettuare delle operazioni di spostamento di un intero poligono senza modificare le posizioni dei vertici uno rispetto all'altro). Introducendo operazioni di trasformazione non lineare è possibile, invece, cambiare le posizioni dei vertici di un triangolo, modificando la forma del triangolo stesso (cosa che con le trasformazioni lineari non avviene. Un chip DX8 deve essere in grado di svolgere sia le operazioni lineari che quelle non lineari, pichè entrambe le categorie sono necessarie alla costruzione di una scena 3D). ![]() P.s. mi pare che sei l'unico che ancora difenda la presunta superiorità dall'NV30 e speri ancora in una release di drivers che, miracolosamente, faccia andare l'FX molto più veloce senza abbassare la qualità ![]() Complimenti per la tenacia, un po' meno per la preparazione tecnica ![]() Ciao |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
![]() Secondo te, allora, i giochi DX7 come girerebbero su chip DX9? In base al tuo discorso l'R300 o avrebbe solo pipelines fixed function o avrebbe un motore per il TL statico oltre alle unità PS e VS (stesso discorso per l'NV30, ovviamente). E magari con un "circuito discriminatore di DX" ![]() Siamo seri ![]() Pps visto che ti sei preso la briga di riaprire questa discussione, cerca un post in cui ti facevo una serie di domande, sull'NV30 e sul comportamento di nVIDIA, a cui ti sei ben guardato dal rispondere. ![]() ![]() |
|
![]() |
![]() |
![]() |
#5 | ||||||
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
Re: Vertex Shader (&pixel)
Quote:
![]() ricordiamo che per il T&L si tratta di operazioni hard-coded(codificate nel silicio quindi come si diceva macro funzioni per le quali esiste un corrispondente circuito fisico). L'errore che fai è che un motore programmabile non può 'gestire' le Fixed-function o T&L statico... i 2 non sono compatibili. Questo ovviamente non significa che un motore programmabile (gli shader) non possano adempiere agli stessi risultati... ma le operazioni sono diverse... per le FF i programmatori parametrizzano e richiamano la funzione interessata(che per la scheda grafica significa: esegui questo circuito fisico) Per gli shader significa che i programmatori devono scrivere un programma, cioè una sequenza di istruzioni (tra quelle a disposizione della GPU) per eseguire l'operazione richiesta. Se ad una GPU programmabile (shader) arriva la chiamata ad una funzione FF(T&L) ... ERROR!!! non funziona, non è compatibile!!! proprio per questo nella Gef3 è stato incluso per compatibilità il vecchio T&L/FF... cosa che chiunque può trovare facendo una ricersa su internet in merito al Gef3... quindi potresti farla anche tu evitando di scrivere qui tue teorie... ![]() Sbagli totalmente quindi quando dici che il VS esegue le fuznioni FF più altre... il VS non esegue nessuna funzione me istruzioni, cioè programmi scritti nel linguaggio assembler della GPU... le funzioni poi dipendono dai programmatori che se le devono programmare. P.S. per il vecchio T&L/FF oltre a rotazione e traslazione non dimenticare l'illuminazione e poi ci sarebbero anche altre cosette... ![]() Quote:
cmq non sono proprie di un motore VS... è la programmabilità stessa del VS rende attuabile la keyframe-interpolation... il morphing ecc... non ci sono ovviamente FF ad eseguire tali operazioni nel VS... Quote:
l'ho già detto le FF non sono compatibili con gli shaders... difatti le procedure sono parallele... se un gioco va in modalità T&L il VS è disabilitato e viceversa... sono fisicamente 2 blocchi di silicio diversi ed il T&L esiste solo per compatibilià e proprio perchè il VS non sa cosa farsene. Quindi in un programma/gioco che utilizza gli shader le operazioni come traslazione e rotazione sono eseguite con programmi shader. Quote:
Questa è una delle principali differenze rispetto al T&L dove invece le possibilità erano fisse poichè i programmatori potevano solo richiamare funzioni già fatte per ottenere risultati/effetti prestabiliti. Gli shader sono una GPU corrispondente ad una CPU... solo che le istruzioni che può eseguire sono pensate per la computer grafica con tutte le ottimizzazioni del caso per ottenere buone performance con la CG in real-time come obiettivo. Il discorso invece sull'approssimazione non sta nè in cielo nè in terra e non c'entra proprio niente... la differenza tra FF e Shader e tutt'altra... Quote:
Con il VS si hanno delle istruzioni con le quali scrivere un programma con il quale ogni vertice viene poi processato (in pratica SIMD)... con la sequenza di queste istruzioni si possono realizzare N^ operazioni ai vertici tra le queli rotazioni ecc... ma è questione di programmazione. ES: A) equivalente di T&L/FF= esiste un programma il quale presenta alcuni bottoni e noi clikkando possiamo ottenere dei risultati, ad esempio clikkando il pulsante A otteniamo un messaggio a video "Ciao". B) equivalente di 'Shader' = abbiamo un linguaggio di programmazione, questo non ci permette con un tasto di avere il messaggio a video però possiamo programmare e quindi fare quello che vogliamo... come ad esempio scrivere una sequenza di istruzioni che poi presenterà a video il messaggio "Ciao" ![]() Spero sia chiaro... con A) abbiamo dei bottoni esattamente come con il T&L/FF abbiamo delle funzioni richiamabili... quelle sono e quelle restano. con B) possiamo programmare ed ottenere l'effetto che vogliamo proprio come gli shader che hanno un loro linguaggio di programmazione. Quote:
![]() ![]() cmq hai sbagliato... solitamente per motivi vari (performance in primis) nei titoli che sfruttano il T&L si hanno per lo più trasformazioni che non modificano la 'struttura' di una mesh... ma questo non significa che non sia possibile... già ad esempio un banale scaling modifica la distanza tra i vertici di una mesh... non sto parlande del NV30 nè tanto meno difendendolo.. cosa che non ho mai fatto e non nè vedo il motivo... anzi proprio io ho sempre parlato del NV35... ad ogni modo sto parlando di shader... per NV30 mi piacciono alcune evoluzioni apportate agli shader... e come ho sempre detto tutto in IMHO non capisco dove tu voglia arrivare cercando di processarmi se trovo per dei mei motivi l'NV30 (e quindi e sopratutto i progressi che anticipa) entusiasmante. Saluti ![]() |
||||||
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
Re: Vertex Shader (&pixel)
Quote:
![]() dici cose che non ho mai detto e che non c'entrano nulla con le differenze tra T&L/FF e Shader... Se vuoi un consiglio fatti qualche ricerca... non ci vuole poi molto per capirci almeno qualcosa da comune utente. P.S. non so bene a cosa ti riferisci... proverò ad andare a vedere, se è quello che immagino ti posso solo dire che non ho interesse in questo forum a fare argomentazioni del genere... annoierebbe i più e non sarebbe fruttuoso... già questo argomento è 'spesso' per dei 'comuni utenti' come è logico ci siano in questo forum... figurati se mi metto qui a discutere su cosa mi piace di singole istruzione degli shader ecc.... già qui abbiamo scritto molto e fin troppo per una cosa stupida che per me è assolutamente elementare... sorry ma non ci penso nemmeno di entrare qui nei meriti della programmazione di una GPU. queste discussioni ho già con chi farle ![]() preferisco attenermi ad argomentazioni semplici che qualunque utente può capire o ha la possibilità di fare una ricerca su internet per avere informazioni e verificare che ho ragione... ed in questo caso tu torto ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
![]() Come ho detto: poche idee (anzi solo una) e molto ben confuse. In quanto all'annoiare, mi pare che tu sia abbastanza noioso già con queste argomentazioni, quindi hai ragione, non tentare di cercarne altre ![]() ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
extra LOL ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
Se poi vuoi aver ragione a tutti i costi.......beh che ti devo dire Hai torto ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
![]() Evitiamo di scendere troppo sul tecnico perchè altrimenti non ci capiresti niente. ![]() |
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jan 2003
Messaggi: 68
|
"..Parli di assembler senza sapere neppure cosa sia. Un chip non si programma in assembler ma in linguaggio macchina (che solo gli ignoranti confondono con l'assembler)..."
Bellissimo quello che leggo !! UN CHIP NON SI PROGRAMMA IN ASSEMBLER MA IN LINGUAGGIO MACCHINA. E' meraviglioso ! L'assembler alza solamente il livello di programmazione. Per poterlo eseguire occorre compilarlo/linkarlo e quindi ottenere il TUO BEL LINGUAGGIO MACCHINA. E' più comodo usare un linguaggio ad "alto livello" e poi con compilatori/linker farcelo tradurre in linguaggio di basso livello. Se proprio volgliamo dirla tutta un CHIP si programma a 01000101110 ( bit ) perchè non lo capisce il linguaggio macchina ! solo gli ignoranti confondono il linguaggio macchina con BIT ! ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
Re: Vertex Shader (&pixel)
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
Prima di riempirti la bocca con concetti come i PS e i VS, la programmabilità e le FF, dovresti conoscere, almeno in parte i principi analitici su cui questi concetti sono basati (ossia devi conoscere la matematica). Le FF non sono altro che trasformazioni lineari che non richiedono complessi calcoli e soprattutto possono essere rappresentate in maniera più che soddisfacente, operando in virgola fissa. Le trasformazioni lineari su un poligono, però non prevedono che vengano alterati i rapporti tra le varie grandezze dello stesso (lo scaling lascia i rapporti inalterati, e così pure la traslazione e la rotazione e tutte le altre operazioni lineari). Discorso completamente diverso quando si passa a rappresentare funzioni di tipo diverso (goniometriche, trascendenti, ecc., o semplicemente non lineari). In tal caso, il ricorso a calcoli in virgola mobile (FP) è necessario, pena la perdita di precisione. Teoricamente è possibile rappresentare buona parte delle funzioni non lineari o, più generalmente, di tipo complesso (inteso come estensione del tipo reale), mediante approssimazioni, al limite anche lineari (basta dare un'occhiata alla formule di interpolazione proprie dell'analisi numerica), ma questo, se da un lato semplifica notevolmente i calcoli (basta effettuare operazioni di derivazione), dall'altro comporta una perdita di precisione, in alcuni casi, notevole. Per questo motivo (proprio perchè in realtà quando viene calcolata una funzione cos(x), tanto per fare un esempio, i calcoli vengono eseguiti utilizzando algoritmi di interpolazione, è importante che la precisione sia la più accurata possibile: di conseguenza i calcoli non possono essere eseguiti in virgola fissa, né, in molti casi, ci si può fermare ad algoritmi del primo grado; non entro nel merito dei criteri di valutazione sulla stima degli errori per non complicare le cose). Un motore VS è in grado di eseguire sia calcoli complessi che calcoli più semplici (di tipo lineare). E' ovvio che in quest'ultimo caso, il procedimento adottato non è uguale a quello di un motore che esegue solo calcoli di tipo lineare, per il semplice motivo che mentre un motore che esegue calcoli solo lineari opera esclusivamente con delle rette, un motore che esegue calcoli complessi opera con algoritmi di interpolazione che, a seconda dei casi, possono approssimare una retta, una parabola, un'iperbole, un generico polinomio di grado n, una funzione goniometrica, ecc, semplicemente effettuando calcoli differenziali e minimizzando i resti ottenuti. Spero di essere stato chiaro. Mi sono tenuto molto sullo gerico, senza andare su un livello troppo tecnico per non annoiare chi legge ![]() ![]() |
|
![]() |
![]() |
![]() |
#17 | ||||
Senior Member
Iscritto dal: May 2002
Messaggi: 830
|
Re: Vertex Shader (&pixel)
Quote:
Quote:
![]() ![]() Quote:
Per ogni istruzione esiste un circuito(per dirlo un po brutalmente ma il senso è quello)... Nel T&L/FF queste istruzioni non ci sono ma ci sono direttamente delle funzioni/algoritmi. Qui per ogni funzione esiste un circuito... Quote:
![]() l'origine del mio punto di vista è puramente software... cioè programmer-oriented... ok per quello che hai detto... ma parliamo in un certo senso di 2 cose diverse... io mi riferisco al fatto che un motore shader o che esegue calcoli complessi esegue algoritmi che sono composti da sequenze di istruzioni scritte dal programmatore... in questo modo un programmatore può realizzare l'algoritmo/funzione che gli serve per operare come crede sui vertici o pixel(a secoda dello shader)... il 'motore shader' quindi esegue istruzioni. Nel T&L/FF questi algoritmi invece sono operazioni hard-coded(codificate nel silicio) cioè funzioni per le quali esiste un corrispondente circuito. Per questo considero il discorso 'precisione' non competente ed ininfluente ai termini del paragone T&L/FF e shaders... Tu parli di calcoli o singole operazioni che sono praticamente istruzioni... ma nel T&L/FF non ci sono calcoli/singole_operazioni/istruzioni... ma funzioni... per un programmatore lo shader ha istruzioni mentre FF ha funzioni... quindi non ha senso il tuo cercare di considerare il parco istruzioni T&L/FF come un sottoinsieme delle istruzioni shaders... proprio perchè non c'è un parco istruzioni T&L/FF. |
||||
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2002
Città: Nosgoth
Messaggi: 16896
|
![]() |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
Ti ripeto l'invito: non parlare solo per sentito dire o per aver letto qualche articolo che, per quanto apparentemente approfondito, non può, per ovvie ragioni (chi scrive deve fare informazione e rivolgersi a tutti, compresi coloro che non sono addetti ai lavori o appassionati), entrare nel dettaglio di determinate cose. Tu continui a parlare di aspetto "puramente SW"; bene, sappi che il SW non può prescindere dal'aspetto HW; di conseguenza se non conosci la struttura HW e il modo di poter comunicare con essa non puoi nemmeno capire come funziona il SW. |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Re: Vertex Shader (&pixel)
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:43.