■ GPU Program
摘要: 一個渲染效果一般由以下部分組成:一個頂點和/或像素著色器,一個需要設置的設備狀態列表,一個或更多的渲染通道(rendering passes)。此外,有一個能在不同級別的圖形硬件上渲染效果的可靠機制通常是值得的(也就是說,有不同的可用的效果版本執行同樣的效果或盡可能嘗試執行同樣的效果)。顯然,所有這些必要的任務組合在一起成為一個效果。因此,一個合理的做法(步聚)是,設法將這些任務封裝到一個單元中。
Direct3D效果構架提供了這樣一個機制:將渲染效果的任務封裝到一個效果文件。在效果文件中實現效果有兩方面優勢。其一,它允許我們不必重編譯應用程序就能改變一個效果的執行。這是一種更新效果的過程,不管是修正一個bug,一些簡單的加強,或者利用最新的3D硬件特性。第二,它將所有的效果組成部分封裝到一個文件。
閱讀全文
摘要: 像素著色器是一段執行在圖形卡的GPU上的程序,它運行在對每個像素進行光柵化處理時。(不像頂點著色器,Direct3D不會以軟件模擬像素著色器的功能。)實際上它替換了固定功能管線的多紋理化階段(the multitexturing stage),并賦予我們直接操縱單獨的像素和訪問每個像素的紋理坐標的能力。這種對像素和紋理坐標的直接訪問使我們可以達成各種特效,例如:多紋理化(multitexturing)、每像素光照(per pixel lighting)、景深(depth of field)、云狀物模擬(cloud simulation)、焰火模擬(fire simulation)、高級陰影技術(sophisticated shadowing technique)。
閱讀全文
摘要: 頂點著色器(vertex shader)是一個在圖形卡的GPU上執行的程序,它替換了固定功能管線(fixed function pipeline)中的變換(transformation)和光照(lighting)階段。(這不是百分之百的正確,因為頂點著色器可以被 Direct3D運行時(Direct3D runtime)以軟件模擬,如果硬件不支持頂點著色器的話)。
閱讀全文
摘要: 在我們寫的程序里頂點和像素是很小的對象,它們由GPU來執行,是固定功能管線的一部分。用我們自己寫的著色器程序替換一部分固定功能管線,在繪制效果上我們獲得很大的靈活性。我們不再局限于預定義的"固定"操作。
為了編寫著色器程序,我們需要一種高級著色器語言(High-Level Shading Language ,簡稱HLSL) 。在DirectX 8中,著色器是用低級著色器匯編語言編寫的。幸運的是,我們不必再用匯編語言來寫著色器了,DirectX 9支持一種高級著色器語言來寫。
閱讀全文