千炮捕鱼游戏下载|街机千炮捕鱼1破解版
 找回密碼
 注冊帳號

掃一掃,訪問微社區

Hor Shader入門(2)--圖形學用到數學部分簡單介紹

7
回復
523
查看
打印 上一主題 下一主題
[ 復制鏈接 ]

2

主題

14

帖子

34

積分

Rank: 9Rank: 9Rank: 9

UID
324078
好友
1
蠻牛幣
35
威望
0
注冊時間
2019-6-5
在線時間
18 小時
最后登錄
2019-12-5

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
本帖最后由 Hor 于 2019-11-5 15:44 編輯

數學部分(除開矩陣,這個應該是初中的數學沒人反對吧?)坐標系:
  • 分左手坐標系,右手坐標系,區別主要在于 z 軸的指向
  • unity用的是左手坐標系
  • 本地坐標系
    • 物體本身坐標系
    • 在unity中假如reset的話,那本地坐標系和世界對應的坐標系一致

  • 世界坐標系
    • 例如本身坐標進行旋轉,本地坐標變了,但世界坐標沒變

  • 攝像機坐標系
    • 攝像機坐標系也屬于一種本地坐標,對于攝像機坐標的操作會影響攝像機的視野范圍

      • 而在視野范圍的會被保留交給GPU去進行圖形的渲染,視野范圍外的會被剔除


  • 屏幕坐標系
    • 屏幕坐標是個二維坐標系,將游戲里面的三維坐標投影成屏幕坐標然后輸出,這樣我們才能看到。


- 向量:
  • 向量的定義:一個有方向又具有大小的有像線段
  • 向量運算:
    • 加法
      • 假設有兩個向量:v1(0,1)   ;      v2(1,1)
      • 那么相加可得:v3 = v1+v2 = (0+1,1+1) = (1,2)

    • 減法
      • 和向量加法類似
      • v1,v2相減可得:v3 = v1-v2 = (0-1,1-1) = (-1,0)
      • 得到得是由v2得終點指向v1的終點的有向線段

    • 點乘
      • 向量的點乘得到的是一個常數,不再是向量
      • v1 * v2  = (0,1) *(1,1) = 0 * 1+1*1 = 1
      • 點乘意義:

        • 由于向量v1 * v2 = |v1||v2|cosA
        • 所以當知道向量v1 ,v2就能求他們之間的夾角


    • 叉乘
      • 叉乘相乘得到的還是一個向量,且這個向量為垂直于v1,v2所組成平面的法向量。
      • 向量a X b 和向量 b X a 得到的法向量的方向相反。
      • 假如 向量a(1,1,1) ; 向量b(0,1,0)
      • a X b = (1 * 0 - 1 * 1,1 * 0 - 1 * 0,1 * 1-1*0) = (-1,0,1)
      • 因為我們所有看到的面對應的法向量是面向我們的,有些情況下看不到很可能就是法向量的方向反了。


  • 矩陣
    • 矩陣要說的比較多,也是學習shader的一大數學阻礙,這里不展開說,只說其中的 對于shader的意義,具體可以百度去了解矩陣所需要掌握的知識
    • 意義:用于變換,比如坐標的平移,旋轉,縮放都可以用矩陣去表示,還有顏色等變換等
    • 以平移變換矩陣為例子,假設向量a(1,1,1)想要向Y軸上平移n個單(1,1+n,1)那么我們就想向量a乘什么的矩陣會等于(1,1+n,1),下面就是這個矩陣,具體怎么得到的,需要去了解矩陣的乘法;(7字形乘法,這樣比較好記,哈哈)
    • [1,0,0]
    • [0,1,0]
    • [0,n,1]


CG數學函數(shader用到的函數):
  • bs(x)  返回輸入參數的絕對值;
  • acos(x) 反余弦函數,輸入參數范圍[-1,1],返回[0,π]區間的角度值;
  • all(x) 如果輸入的參數均不為0,則返回true,否則返回false;
  • any(x) 輸入的參數只要有一個不為0,則返回true;
  • asin(x) 反正弦函數,輸入的參數取值區間[-1,1],返回角度值范圍為[-π/2,π/2];
  • atan(x) 反正切函數,返回角度值范圍[-π/2,π/2];
  • atan2(y,x) 計算y/x的反正切值;
  • ceil(x) 對輸入的參數向上取整;
  • clamp(x,a,b) 如果x小于a,返回a;x大于b,則返回b;否則,返回x;
  • cos(x) 返回x的余弦值,返回值范圍[-1,1];
  • cosh(x) 雙曲余弦函數,計算x的雙曲余弦值;
  • cross(A,B) 返回兩個三元向量的叉積,注意參數必須是三元向量;
  • degrees(x) 輸入參數為弧度值,函數將其轉換為角度值;
  • determinant(m) 計算矩陣的行列式因子;
  • dot(A,B) 返回A和B的點積,參數可以是標量,也可以是向量;
  • exp(x) 計算e^x的值,e=2.71828;
  • exp2(x) 計算2^x的值;
  • floor(x) 對輸入的參數向下取整;
  • fmod(x,y) 返回x/y的余數。如果y為0,結果不可預料;
  • frac(x)  返回標量或者是每個向量組件的分數部分;
  • frexp(x,out exp) 將浮點數x分解為尾數和指數,x=m*2^exp返回m,并將指數存入exp中,如果x為0,則尾數和指數都返回0;(不是很明白?)
  • isfinite(x) 判斷標量或者向量中的每個數據是否是無限,如果是返回true,否則返回false;
  • isnan(x) 判斷標量或者向量中的每個數據是否是非數據,如果是返回true,否則返回false;
  • ldexp(x,n) 計算x(2^n)的值;
  • lerp(a,b,f) 計算(1-f)a + bf 或者 a+f(b-a)的值,即在下限a和上限b之間進行插值,f表示權值。注意,如果a和b是向量,則權值f必須是標量或者等長的向量;
  • lit(NdotL,NdotH,m)  N表示法向量。L表示入射光向量。H表示半角向量。m表示高光向量。函數計算環境光,散射光,鏡面光的貢獻,返回四元向量: X表示環境光的貢獻,總是1;Y表示散射光的貢獻,如果N.L<0,則為0,否則為N.L; Z表示鏡面光的貢獻,如果N.L<0或者N.H<0,則為0;否則為(N.H)^m;W始終為1;
  • log(x)    計算ln(x)的值,x必須大于0;
  • log2(x) 計算log2^x的值,x必須大于0;
  • log10(x) 計算log10^x的值,x必須大于0;
  • max(a,b) 比較兩個標量或者等長向量元素,返回最大值;
  • min(a,b) 比較兩個標量或者等長向量元素,返回最小值;
  • mul(M,N) 計算兩個矩陣相乘,如果M為AxB矩陣,N為BxC矩陣,則返回AxC矩陣;
  • mul(M,v)  計算矩陣和向量相乘;
  • mul(v,M) 計算向量與矩陣相乘;
  • noise(x)  噪聲函數,返回值始終在0-1之間,對于同樣的輸入,返回相同的值(也就是說并不是真正意義上的隨機噪聲);
  • pow(x,y)  表示x^y;
  • radians(x) 函數將角度值轉換成弧度值;
  • round(x)  四舍五入;
  • saturate(x) 如果x小于0,返回0;如果x大于1,返回1;否則返回x;
  • sign(x) 符號函數 ,如果x大于0,返回1;如果小于0,返回-1;否則返回0;
  • sin(x)  輸入參數為弧度,計算正弦值,返回值范圍[-1,1];
  • sincos(float x ,out s, out c)  該函數是同時計算x的sin值和cos值,其中s=sin(x),c=cos(x),這樣比分開計算要快;
  • smoothstep(min,max,x)  x位于min和max之間,若x=min,返回0;若x=max,返回1;若x在兩者之間,按下列公式返回數據:-2((x-min)/(max-min))^3+3((x-min)/(max-min))^2;
  • step(a,x)  若x< a,返回0,否則返回1;
  • sqrt(x)  求x的平方根,x必須大于0;
  • tan(x)  輸入參數為弧度,計算正切值;
  • tanh(x) 計算雙曲正切值;
  • transpose(M)   M為矩陣,計算其轉置矩陣;  

2,幾何函數
  • 幾何函數,用于執行和解析幾何相關計算,如根據入射光向量和頂點法向量,求反射光和折射光的方向向量。
  • distance(pt1,pt2)  兩點之間的歐幾里得距離;
  • faceforword(N,I,Ng)   若Ng*I<0,返回N,否則返回-N;=
  • length(v)  返回一個向量的模;
  • normalize(v) 歸一化向量;
  • reflect(I,N)   根據入射光方向向量,和頂點法向量N,計算反射光方向向量,其中I和N必須被歸一化,需要注意的是:這個I是指向頂點的;函數只對三元向量有效;
  • refract(I,N,eta)  計算折射向量,I為入射光線,N為法向量,eta為折射系數;其中I和N必須被歸一化,如果I和N之間夾角太大,則返回(0,0,0),也就是沒有折射光線;函數只對三元向量有效;

3.紋理映射函數
  • tex1D(sampler1D tex,float s)  一維紋理查詢;
  • tex1D(sampler1D tex, float s, float dsdx, float dsdy)   使用導數值查詢一維紋理;
  • Tex1Dproj(sampler1D tex, float2 sq)  一維投影紋理查詢;
  • Tex2D(sampler2D tex,float2 s)  二維查詢紋理;
  • Tex2Dproj(sampler2D tex, float4 szq) 二維投影紋理查詢;
  • Tex3D(sampler3D tex, float s)   三維紋理查詢;
  • Tex3Dproj(sampler3D tex, float4 szq)   查詢三維投影紋理,并進行深度值比較;
  • texCUBE(samplerCUBE tex, float3 s)    查詢立方體紋理;
  • texCUBEproj (samplerCUBE tex, float4 sq)    查詢立方體投影紋理;

  • 偏導函數**ddx(a) 參數a對應一個像素位置,返回該像素值在X軸的偏導數;ddy(a)  參數a對應一個像素位置,返回該像素值在X軸上的偏導數;
  • 調試函數**void debug(float4 x)    如果在編譯時設置了debug,片段著色程序中調用該函數可以將值x作為COLOR語義的最終輸出,否則該函數什么也不做;





回復

使用道具 舉報

1

主題

10

帖子

17

積分

Rank: 1

UID
201799
好友
0
蠻牛幣
10
威望
0
注冊時間
2017-1-14
在線時間
7 小時
最后登錄
2019-11-25
沙發
2019-11-11 20:10:13 只看該作者
感謝分享
回復

使用道具 舉報

3偶爾光臨
193/300
排名
25425
昨日變化

0

主題

65

帖子

193

積分

Rank: 3Rank: 3Rank: 3

UID
119006
好友
0
蠻牛幣
0
威望
0
注冊時間
2015-8-20
在線時間
112 小時
最后登錄
2019-11-16
板凳
2019-11-11 20:30:08 只看該作者
感謝分享
回復

使用道具 舉報

0

主題

3

帖子

4

積分

Rank: 1

UID
335046
好友
0
蠻牛幣
0
威望
0
注冊時間
2019-10-30
在線時間
1 小時
最后登錄
2019-11-14
地板
2019-11-14 12:17:32 只看該作者
謝謝樓主,十分有用
回復 支持 反對

使用道具 舉報

0

主題

14

帖子

35

積分

Rank: 1

UID
329644
好友
0
蠻牛幣
15
威望
0
注冊時間
2019-8-17
在線時間
21 小時
最后登錄
2019-11-20
5#
2019-11-16 09:58:37 只看該作者
6666666666
回復

使用道具 舉報

7日久生情
3947/5000
排名
327
昨日變化

7

主題

575

帖子

3947

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
100070
好友
1
蠻牛幣
10
威望
0
注冊時間
2015-5-13
在線時間
1532 小時
最后登錄
2019-12-6

活力之星

6#
2019-11-25 17:32:04 只看該作者
感謝分享
回復

使用道具 舉報

排名
64939
昨日變化

0

主題

11

帖子

16

積分

Rank: 1

UID
169072
好友
0
蠻牛幣
22
威望
0
注冊時間
2016-9-18
在線時間
3 小時
最后登錄
2019-12-4
7#
2019-11-28 16:32:17 只看該作者
謝謝分享!!!!!!!
回復

使用道具 舉報

0

主題

43

帖子

53

積分

Rank: 2Rank: 2

UID
335753
好友
0
蠻牛幣
71
威望
0
注冊時間
2019-11-12
在線時間
10 小時
最后登錄
2019-12-4
8#
2019-12-2 18:59:59 只看該作者
看的來 學不來
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

千炮捕鱼游戏下载 3d跨度走势图 福彩3d走势图综合版 内蒙古快3开奖 彩票平台怎么赚钱 快乐8 好奇心日报靠什么赚钱 e球彩走势图 北京十一选五遗漏Top10 江苏时时彩组三的几率 51678金蟾捕鱼9u下载