shader 4 雜 一些和函數名詞、資料結構

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   資料   

Normal:  法線

Normao mapping: 法線貼圖

Lighting mapping: 光照貼圖

Bump mapping:     凹凸貼圖;類比粗糙外表面的技術。 FX-Water simple.shader中即用到了。類比波浪效果。

Rim lighting: 邊緣光照; 在對象的邊緣部分添加?亮度。

Base Texture, 基礎紋理。

Detail Texture,細節紋理。與base texture使用同樣的uv,可是在material中的Tiling值不同。

Cubemap:立方圖

Cubemap reflection,立方圖反射。


Lambert: 漫反射的lightmodel




cg函數:數學、幾何、紋理映射、偏導、調試幾大類。

from   wenku.baidu.com/link?url=5lj1AuzFz6YEZDt72eHEIooI42GhwA_hL0_YO6N827tmzqYV85kNqL7WXmvZZ5JJv7GZiYXaIZKAKSY2Rnaf8IdpL2HiwzsiCydgdOcUfWu

tex2D:  Tex2D(sampler2D tex, float2 s),二維紋理查詢。 返回四元向量值。  紋理映射函數都返回四元向量值。

mul: 矩陣乘法


UnpackNormal: U3D的標準法線解壓函數; 在UnityCG.cginc中。



 unity3d 定製的表面著色器(Surface Shader)的標準輸出結構是這種:struct SurfaceOutput { half3 Albedo; //反射率 half3 Normal; //法線 half3 Emission; //自發光,用於增強物體自身的亮度,使之看起來好像能夠自己發光 half Specular; //鏡面 half Gloss; //光澤 half Alpha; //透明 };
#pragma surfacesurfaceFunction lightModel [optionalparams]

surfaceFunction -表示Cg函數中有表面著色器(surface shader)代碼。這個函數的格式應該是這樣:void surf (InputIN,inout SurfaceOutput o),Input是你自訂的結構。Input結構中應該包括全部紋理座標(texturecoordinates)和和表面函數(surfaceFunction)所須要的額外的必需變數。

lightModel-在光照模式中使用。內建的是Lambert (diffuse)和 BlinnPhong(specular)。


//vertex shader的輸入
struct appdata_base { float4 vertex : POSITION; //頂點位置 float3 normal : NORMAL; //法線方向 float4 texcoord : TEXCOORD0;//紋理座標。。?};


// scroll bump wavesfloat4 temp;//四元向量xyzw        v.vertex.xzxz表示去除vertex的x z x z四個分量組成一個新的向量; 計算後給temp賦值。        temp.xyzw = v.vertex.xzxz * _WaveScale / unity_Scale.w + _WaveOffset;o.bumpuv[0] = temp.xy * float2(.4, .45);o.bumpuv[1] = temp.wz;




from

http://hi.baidu.com/stupidboys1027/item/e6ac3cbb4faccbd684dd799a

語意輸入,語意輸出, uniform

依據語意將參數與頂點的資訊綁定。

非常明顯地看到,入口變數中有三種不同類型的參數:語義型輸入參數,語義型輸出參數,uniform輸入參數。    首先我們來理解“語義”,這個詞的真正含義,事實上,更準確地說我們應該把它叫“綁定語義”(Binding Semantics),從Binding這個詞我們就能想像得到,POSITION這個語義,它就是用來把pInitial 這個參數與外部環境(OpenGL)中的頂點位置向量綁在一起。輸出語義也是這種原理。讓我們來回答開始時提出的問題:從哪裡來,到哪裡處。1、從哪裡來。如今讓我們假設,OpenGL在對頂點進行渲染之前,在程式中都自己主動產生了這樣一個資料結構struct vertex; 這個資料結構包括了vertex.position, vertex.normal, vertex.color, vertex.texcoord.等等全部與頂點相關的狀態資訊。而這些資訊都是公開的,可以被外部函數所引用。所以,CG中的語義型輸入參數的值就是從這些資訊中自己主動擷取。如範例中的“float4 pInitial : POSITION”,通過POSITION這個綁定語義,把pInitial這個變數與vertex.position這個資訊綁定在一起,於是pInitial就被賦值了。這是不是和C++中的引用一樣的原理呢?注意:輸入參數是僅僅讀的。2、到哪裡去?假設知道了從哪裡來,那麼到哪裡去也非常好理解,(out float3 color : COLOR),有個OUT在前面作修飾的參數就是語義型輸出參數。這裡通過COLOR這個綁定語義,把color向量與vertex.color這個值綁定在一起。在CG的代碼中,經過一系列的運算和處理之後,終於得到頂點的新的顏色,把這個顏色值又一次返回給OpenGL的頂點屬性中,OpenGL再通過讀取該屬性對頂點進行渲染。總的來說,語義型參數的輸入與輸出都是由CG自己主動完畢,程式要做的僅僅是把它與相應的語義綁定。    說了那麼多,另一個uniform輸入參數,我們還沒有說。假設說語義型參數是CG自己主動處理的,那麼uniform型參數就是要程式猿在程式中為它賦值的。


http://blog.sina.com.cn/s/blog_63507a56010115gr.html




from cg users manual

float2 * float2; 相應分量相乘後得到的向量。 不是叉乘。

dot, 點乘, 得到的是標量。 相應分量相乘後的和值。

標量與向量相乘, 是將向量的每一個分量乘以標量後得到的新向量。 (向量放縮了。)

mul, 矩陣乘法; 矩陣乘以向量、 或者矩陣相乘。

Swizzle operator:

-------float3(a,b,c).zyx yields float3(c, b, a)

-------float4(a,bc,d).xxyy yields float4(a,a,b,b)

Texture Lookups 須要兩個參數: Texture sampler, texture coordinate

--------texture sampler:   sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampleRECT.

--------tex2D/RECT/CUBE, nonprojective

--------text2D/RECT/CUBEproj, projective texture lookup


float, 32bit浮點數, s23e8 + 1bit

halft, 16bit,                s10e5

int, 32 bit integer

fixed, 12bit

bool,

sampler*, texture object的HANDLE。

string

向量、矩陣。



mul(MVP, pos)---->將vertex的postion轉化為螢幕上的座標

tex2D(texture, texcoordinate)--------->Output the color taken from our texture

vertex的輸出 是 fragment的輸入


螢幕繪製過程:
1) 螢幕繪製到temporary texture中; 而不是通常的screen buffer
2) temporary texture 會經過filter的處理。
3) 處理結果放到screen buffer中準備繪製到螢幕上顯示給使用者

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.