NVIDIA cg語言編寫shader的學習筆記

主要的學習教程是nvidia出的那個《cg教程,可編程實時權威指南》以及三本《GPU編程精粹》

個人能力有限,只能儘量將自己理解的關鍵點記錄下來,有想認真深入的朋友,建議完整的看一遍以上書籍

學習cg語言的主要目的是爲了學習unity3d中shader的編寫,以及以後可能做opengl,opencv的開發

官方的docment是用c++寫opengl接口的程序,然後調用cg語言的.cg 文件來訪問gpu硬件,我不會寫c++,只好把所有工作都放到unity3d的環境中了,其中有些差異,但不大,主要是unity3d應用程序已經將頂點,法線等信息處理好了,封裝了不少使用的東西在它的UNITY.cgnic文件中


一.gpu的發展歷史

第一代第二代沒有可編程能力,固定管線

第三代支持頂點編程(vertex)

第四代(即現今我們使用的)擁有可編程能力,使得頂點變換和像素操作從cpu轉移到gpu中進行




二.gpu的渲染流程

在GPU渲染流水線的不同階段,需要處理的對象分別是頂點(vertex)、幾何圖元(primitive)、片元(fragment)、像素(pixel)

頂點變換:將3d application中給定的頂點位置等,變換屏幕位置以便光柵器使用

圖元處理:圖元裝配和光柵化,圖元裝配即是將頂點裝配爲幾何圖元,光柵化決定那些像素被圖元覆蓋,然後是插值貼圖和着色

光柵操作:對片段進行操作(fragment)







三.vertex fragment

結構體:個人理解,用於定義輸入輸出結構,並綁定語義詞,結尾有;,忘記輸入;會報錯

struct VertexIn{

position:POSITION;

normal:NORMAL;

textoord:TEXTOORD0;

};




語義詞:全部大寫,書中說是一種粘合劑,把cg程序和圖形流水線的其他部分綁定在一起,指明該變量的硬件資源

POSITION

NORMAL

TEXTOORD0

COLOR

等等。。。。。


profile:cg程序用何種接口編譯你的cg程序,各種profile對應不同的編程接口及不同能力的gpu硬件

opengl:

direct:



四.頂點 片段的流程和一些解釋


變量

uniform修飾詞,表示這是一個由外部程序提供的變量


普通變量的聲明:type name = value;

例:float4  color = float4(1,1,1,1);


支持的類型:float,half,fixed三種浮點數類型的範圍和大小不一樣,分別是32bit,16bit,11bit


紋理(texture)

sampler1D

sampler2D

sampler3D

samplerCUBE

samplerRECT




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章