当前位置:网站首页>【TA-霜狼_may-《百人計劃》】2.3 常用函數介紹
【TA-霜狼_may-《百人計劃》】2.3 常用函數介紹
2022-07-01 03:41:00 【zczplus】
2.3HLSL常用函數
2.3.1 基本數學運算
max(a,b) min(a,b) mul(a,b) abs(a) round(x)
sqrt(x) 返回x的平方根
rsqrt(x) 返回x的平方根的倒數
degrees(x) 將弧度轉換成角度
redians(x) 將角度轉換成弧度
noise(x) 噪聲函數
2.3.2 幂指對函數
pow(x,y) x的y次幂(x和y均可為自變量或具體的數)
exp(x) 返回以e為底的指數函數
exp2(value x) 返回以2為底,x為指數的幂
ldexp(x,exp) 返回x與2的exp次方的乘積
log(x)
log10(x)
log2(x)
frexp(x,out exp) 把浮點數 x 分解成尾數和指數 x = ret*2^exp,返回值是尾數,exp參數返回的值是指數
(如果x參數為0,則此函數的尾數和指數均返回0)
2.3.3 三角函數與雙曲函數
sin(x) cos(x) tan(x)
sincos(x, out s, out c) 返回x的正弦值和餘弦值
tan(y,x) asin(x) acos(x) atan(x) atan2(y,x) 返回y/x的反正切值
上述的x值均為弧度錶示
sinh(x) 返回x的雙曲正弦值 即 (ex-e-x) / 2
cosh(x) 返回x的雙曲餘弦值 即 (ex+e-x) / 2
tanh(x) 返回x的雙曲正弦值 即 (ex-e-x) / (ex+e-x)
2.3.4 數據範圍類
ceil(x) 返回>=x的最小整數
floor(x) 返回<=x的最大整數
step(x,y) x<=y為1,否則為0
saturate(x) 返回將x鉗制到0和1之間的值
clamp(x,min,max) 把x限制在[min,max]範圍內,即判斷x是否在這個區間範圍內,若在則返回原值,若不在則返回上限或下限
fmod(x,y) 返回x對y取餘的餘數
frac(x) 返回x的小數部分
modf(x, out ip) 將值x分為小數和整數部分(各部分符號與x相同)
ip返回整數部分,整體返回小數部分
插值函數
lerp(x,y,s) 按照s在x到y之間插值,即返回x*(1-s)+y*s;
smoothstep(min,max,x) 如果x在[min, max]範圍內,則返回介於0與1之間的平滑Hermite插值,使用smoothstep在兩個值之間創建平滑過癮。例如可以平滑地混合兩種顏色。
2.3.5 類型判斷類
all(x) 確定指定量的所有分量是否均為非零,若均為非零則返回True,否則false(標量、矢量或者矩陣都可以)
clip(x) 如果輸入值小於零,則丟弃當前像素 常用於判定範圍(不僅僅針對0,返回值為void),或者測試alpha,如果每個分量代錶到平面的距離,還可以用來模擬剪切平面
sign(x) 返回x的正負性 如果x小於零返回-1,如果x等於零返回0,如果x大於零返回1
isinf(x) 判斷是否為無窮大或無窮小
isfinite(x) 判斷x參數是否有限
isnan(x) 判斷是否為NAN
2.3.6 向量與矩陣類
length(v)
normalize(v)
distance(a,b) 錶示:兩個矢量,返回根號下各個分量之差的平方和(不就是 終點的距離麼)
dot(a,b) 點積
cross(a,b) 叉積
determinant(m) 返回矩陣m按行列式方式計算的值
transpose(m) 返回矩陣m的轉置矩陣
2.3.7 光線運算類
reflect(i,n) 返回以i為入射方向,n為法線方向的反射光
refract(i,n,ri) 返回以i為入射向量,n為法線方向,ri為折射率的折射光
lit(n_dot_I, n_dot_h, m) 分別對應(normallight,normal半角向量h,鏡面反射系數m)返回一個光照向量(環境光,漫反射光,鏡面高光反射,1)
faceforward(n,i,ng)得到面向視圖方向的曲面法向量輸入輸出為同元向量,返回-n*sign(dot(i,ng))(normal,light,normal)
光照向量
光照向量(環境光,漫反射光,鏡面高光反射,1)(Blinn模型)
2.3.8 紋理查找
GPU在片元處理(PixelShader)階段是在屏幕空間XY坐標系中對每一個像素去對應的紋理中查找對應的紋素來確定像素的顏色(名字好理解)
1D
方法不太常用,很少有按照這種方式來存儲數據的,對應一維的數組
2D
對應二維的數組,也就是矩陣
3D紋理查找
對三維的數據進行查找,由多層的二維數組進行組合。
tex(s,t)在給定紋理采樣器(s,指的就是被采樣的圖片)的情况下,通過t(1D下為標量,2D、3D為矢量,也就是比特置坐標)來確定紋素數據。
投影紋理相關(講的不太清楚 再看一下)
tex1Dproj(s, t)把紋理當做一張幻燈片投影到場景中,先使用投影紋理技術計算出投影紋理的坐標(由於投影光線和投影面的角度存在變化,所以投影紋理的坐標不是簡單的縮放,還會發生斜切等其他問題,另外投影面的不規則也是需要解决的問題),最後使用投影紋理坐標進行紋素查詢。
ddx、ddy重點自己查一下
mipmap
好圖,更好的用於理解為什麼內存空間只多占用了1/3
立體紋理查找
與三維查找不同的是,需要指定特定的面,且性能耗費更高。
總結
寫出你覺得最常用的5個函數?
- 在看入門精要的時候發現有關矩陣和向量的運算較多,其中 mul(x,y)作為高頻應用點肯定必不可少;
- 歸一化的運算應該也比較常見,所以saturate(x)應該也比較常用;
- 插值函數;
- 光線運算類應該是重點和難點,一般物體都會受到光照,應該是常用函數;
- 紋理查找中的mipmap相關函數是整個渲染過程中無法避免的問題,所以是常用函數;
ddx、ddy和Mipmap
看了Games101 P9,開始理解了。
- 在Mipmap中,ddx和ddy的主要用途就是用於計算屏幕像素在紋素中的覆蓋長度,由
L = MAX(sqrt(ddx(u, v)2, ddy(u, v)2))可以得到近似的覆蓋紋素矩形的邊長; - 再利用D=Log2(L)獲得需要取的Mipmap的層數,取Log2(L)是因為,Mipmap的每一層都縮小到上一層的1/2,只要找到Log2(L)層, 此時L在該層上就是單比特長度,從而節省了再次采樣的過程;
- 並且,Log2(L)一般情况下為非整數,此時利用兩側的Mipmap層再進行一次線性插值,可以使得結果更加准確,因此Mipmap方法也被稱為三次線性插值法。
边栏推荐
- Home online shopping project
- Asgnet paper and code interpretation 2
- 168. Excel表列名称
- 392. 判断子序列
- Feature Pyramid Networks for Object Detection论文理解
- 【EI会议】2022年国际土木与海洋工程联合会议(JCCME 2022)
- 衡量两个向量相似度的方法:余弦相似度、pytorch 求余弦相似度:torch.nn.CosineSimilarity(dim=1, eps=1e-08)
- Idea plug-in backup table
- Cookie&Session
- Leetcode 1482 guess, how about this question?
猜你喜欢
Appium automation test foundation -- supplement: c/s architecture and b/s architecture description
How to achieve 0 error (s) and 0 warning (s) in keil5
Ultimate dolls 2.0 | encapsulation of cloud native delivery
Cookie&Session
用小程序的技术优势发展产业互联网
Download and installation configuration of cygwin
整合阿里云短信的问题:无法从静态上下文中引用非静态方法
Edlines: a real time line segment detector with a false detection control
bootsrap中的栅格系统
Leetcode 31 next spread, leetcode 64 minimum path sum, leetcode 62 different paths, leetcode 78 subset, leetcode 33 search rotation sort array (modify dichotomy)
随机推荐
Ridge regression and lasso regression
Unexpected token o in JSON at position 1 ,JSON解析问题
205. 同构字符串
Are you still wasting brain cells for self-study? This interview note is definitely the ceiling of station C
Use of comment keyword in database
深度学习中的随机种子torch.manual_seed(number)、torch.cuda.manual_seed(number)
166. 分数到小数
[daily training] 1175 Prime permutation
Binary tree god level traversal: Morris traversal
Asgnet paper and code interpretation 2
Leetcode:剑指 Offer 59 - I. 滑动窗口的最大值
Nacos
What happens when a function is called before it is declared in C?
187. 重复的DNA序列
Cookie&Session
GCC usage, makefile summary
torch.histc
Leetcode:829. Sum of continuous integers
Include() of array
bootsrap中的栅格系统