做公司網(wǎng)站找誰(shuí)企業(yè)培訓(xùn)課程有哪些
一、函數(shù)介紹
?
函數(shù)圖像參考網(wǎng)站:Graphtoy
1.基本數(shù)學(xué)運(yùn)算
函數(shù) | 含義 | 示例圖 |
min(a,b) | 返回a、b中較小的數(shù)值 | |
mul(a,b) | 兩數(shù)相乘用于矩陣計(jì)算 | |
max(a,b) | 返回a、b中較大的數(shù)值 | |
abs(a) | 返回a的絕對(duì)值 | |
round(x) | 返回與x最近的整數(shù) | |
sqrt(x) | 返回x的平方根 | |
rsqrt(x) | 返回x平方根的倒數(shù) | |
degregee(x) | 轉(zhuǎn)換成弧度 | |
redians(x) | 將角度轉(zhuǎn)為弧度制 | |
noise(x) | 噪聲函數(shù) |
2.冪指對(duì)與偏導(dǎo)數(shù)
函數(shù) | 含義 | 示例圖 |
pow(x,y) | x的y次冪,xy | |
ldexp(x,exp) | 返回x與2的exp次方的乘積,x*2exp | |
exp(x) | 返回以e為底的指數(shù)函數(shù),ex | |
exp2(x) | 返回以2為底的指數(shù)函數(shù),2x | |
log(x) | 返回x以e為底的對(duì)數(shù),lnx | |
log10(x) | 求以10為底的對(duì)數(shù),log10x | |
log2(x) | 求以2為底的對(duì)數(shù),log2x | |
frexp(x,out exp) | 把一個(gè)浮點(diǎn)數(shù)分解為尾數(shù)和指數(shù), x : 要分解的浮點(diǎn)數(shù)據(jù) 返回值: 返回尾數(shù) x = 尾數(shù)*2指數(shù) (如果x參數(shù)為0,則此函數(shù)的尾數(shù)和指數(shù)均返回0) |
3.三角函數(shù)與雙曲線(xiàn)函數(shù)
函數(shù) | 含義 | 示例圖 |
sin(x) | 返回x的正弦值 | |
cos(x) | 返回x的余弦值 | |
tan(x) | 返回x的正切值 | |
tan(y,x) | 返回y/x的正切值 | |
sincos(x, out s, out c) | 返回x的正弦和余弦值 | |
asin(x) | 返回x的反正弦值 | |
acos(x) | 返回x的反余弦值 | |
atan(x) | 返回x的反正切值 | |
atan2(y,x) | 返回y/x的反正切值 | |
sinh(x) | 返回x的雙曲正弦值,0.5*(ex-e-x) | |
cosh(x) | 返回x的雙曲余弦值 0.5*(ex-e-x) | |
tanh(x) | 返回x的雙曲正切值 |
4.數(shù)據(jù)范圍
函數(shù) | 含義 | 示例圖 |
ceil(x) | 返回>=x的最小整數(shù) | |
step(x,y) | x<=y為1,否則為0 | |
floor(x) | 返回小于或等于x的最大整數(shù) | |
saturate(x) | 返回將x限制在0和1之間的值 | |
clamp(x,min,max) | 把x限制在[min,max]范圍內(nèi),小于返回min,大于返回max | |
frac(x) | 返回x的小數(shù)部分 | |
fmord(a,b) | 返回a/b的浮點(diǎn)部分 | |
modf(x,out ip) | 將值x分為小數(shù)和整數(shù)部分(各部分符號(hào)與x相同),ip返回整數(shù)部分,整體返回小數(shù)部分 | |
lerp(a,b,s) | 按照s在a到b之間差值 | |
smoothstep(min,max,x) | 如果x在[min,max]范圍內(nèi),則返回介于0~1之間的平滑Hermite差值;使用smoothstep HLSL內(nèi)在函數(shù)在兩個(gè)值之間創(chuàng)建平滑過(guò)渡。例如,使用此功能平滑的混合兩種顏色 |
5.類(lèi)型判斷類(lèi)
函數(shù) | 含義 |
all(x) | 確定指定量的所有分量是否均為非零,均非零則返回true,否則返回false(處理由浮點(diǎn)、整形、布爾型數(shù)據(jù)定義的標(biāo)量,向量或者矩陣) |
clip(x) | 如果輸入值小于0,則丟棄當(dāng)前像素,常用語(yǔ)判定范圍(不僅僅針對(duì)0,返回值為void),常用于測(cè)試alpha,如果每個(gè)分量代表到平面的距離,還可以用來(lái)模擬剪切平面 |
sign(x) | 返回x的正負(fù)性,如果x小于0返回-1,如果x等于0返回0,如果x大于0返回1 |
isinf(x) | 如果x參數(shù)為+INF或者-INF(無(wú)窮+無(wú)窮仍無(wú)窮,0x3f3f3f3f),返回true,否則返回false |
isfinite(x) | 判斷x參數(shù)是有有界,有限的,與isinf(x)相反 |
isnan(x) | 如果x參數(shù)為NAN(非數(shù)字),返回true,否則返回false |
6.向量與矩陣類(lèi)
函數(shù) | 含義 |
length(v) | 返回向量的長(zhǎng)度 |
normalize(v) | 向量歸一化,x/length(x) 方向向量歸一化 |
distance(a,b) | 返回兩個(gè)向量之間的距離,按理說(shuō)應(yīng)該為0,此處表示為根號(hào)下各分量之差的平方和 |
dot(a,b) | 返回a和b這兩個(gè)向量的標(biāo)積/內(nèi)積/數(shù)量積/點(diǎn)積(a在b上的投影長(zhǎng),a·b=|a||b|·cosθ) |
cross(a,b) | 返回a和b這兩個(gè)向量的矢積/外積/向量積/叉積(返回值是個(gè)向量,而且與a、b都垂直,大小上|a×b| = |a| * |b| * sinθ) |
determinant(m) | 返回指定浮點(diǎn)矩陣的按行列方式計(jì)算的值 |
transpose(m) | 返回矩陣m的轉(zhuǎn)置矩陣 |
7.光線(xiàn)運(yùn)算類(lèi)
函數(shù) | 含義 | 示例圖 |
reflect(i, n) | 返回以i為入射向量n為法線(xiàn)方向的反射光 | |
refract(i, n, ri) | 返回以i為入射向量n為返現(xiàn)方向,ri為折射率的折射光 | |
lit(n_dot_l, n_dot_h, m) | 輸入標(biāo)量(normal,light,半角向量h,鏡面反射系數(shù)m),返回光照向量(環(huán)境光,漫反射光,鏡面高光反射,1) | |
faceforward(n, i, ng) | 得到面向視圖方向的曲面法向量,輸入輸出為同源向量,返回 -n*sign(dot(i,ng))(normal,light,normal) |
8.1D紋理查找(幾乎不會(huì)使用)
GPU在PS階段是在屏幕空間XY坐標(biāo)系中對(duì)每一個(gè)像素去對(duì)應(yīng)的文立中查找對(duì)應(yīng)的紋素確定像素的顏色。
《GPU 編程與CG語(yǔ)言之陽(yáng)春白雪下里巴人》
函數(shù) | 含義 | |
tex1D(s,t) | 普通一維紋理查找,返回紋理采樣器s在標(biāo)量t位置的color4 | |
tex1D(s,t,ddx,ddy) | 使用微分查詢(xún)一維紋理t和ddxy均為vector | |
tex1Dlod(s,t) | 使用LOD查找紋理s在t.w位置的color4 | |
tex1Dbias(s,t) | 將t.w決定的某個(gè)MIP層偏置后的一維紋理查找 | |
tex1Dgrad(s,t,ddx,ddy) | 使用微分并制定MIP層的一維紋理查找 | |
tex1Dproj(s,t) | 把紋理當(dāng)做一張幻燈片投影到場(chǎng)景中,先試用投影紋理技術(shù)需要計(jì)算出投影紋理坐標(biāo)t(坐標(biāo)t.w除以透視值),然后使用投影紋理坐標(biāo)進(jìn)行查詢(xún) | |
9.2D紋理查找
函數(shù) | 含義 | 示例圖 |
tex2D(s,t) | 普通二維紋理查找,返回紋理采樣器s在vector t位置的顏色 | |
tex2D(s,t,ddx,ddy) | 使用微分查詢(xún)二維紋理 t和ddxy均為vector | |
tex2Dlod(s,t) | 使用LOD查找紋理s在t.w位置的color4 | |
tex2Dbias(s,t) | 將t.w決定的某個(gè)MIP層偏置后的二維紋理查找 | |
tex2Dgrad(s,t,ddx,ddy) | 使用微分并指定MIP層的二維紋理查找 | |
tex2Dproj(s,t) | 把紋理當(dāng)做一張幻燈片投影到場(chǎng)景中,先使用投影紋理技術(shù)需要計(jì)算出投影紋理坐標(biāo)t(坐標(biāo)t.w除以透視值),然后使用投影紋理坐標(biāo)進(jìn)行查詢(xún) |
10.3D紋理查找
函數(shù) | 含義 | 示例圖 |
tex3D(s,t) | 普通三維紋理查找,返回紋理采樣器s在vector t位置的顏色 | |
tex3D(s,t,ddx,ddy) | 使用微分查詢(xún)?nèi)S紋理 t和ddxy均為vector | |
tex3Dlod(s,t) | 使用LOD查找紋理s在t.w位置的color4 | |
tex3Dbias(s,t) | 將t.w決定的某個(gè)MIP層偏置后的三維紋理查找 | |
tex3Dgrad(s,t,ddx,ddy) | 使用微分并指定MIP層的三維紋理查找 | |
tex3Dproj(s,t) | 把紋理當(dāng)做一張幻燈片投影到場(chǎng)景中,先使用投影紋理技術(shù)需要計(jì)算出投影紋理坐標(biāo)t(坐標(biāo)t.w除以透視值),然后使用投影紋理坐標(biāo)進(jìn)行查詢(xún) |
11.立體紋理查找
函數(shù) | 含義 | 示例圖 |
texCUBE(s,t) | 返回紋理采樣器s在vector t位置的顏色 | |
texCUBE(s,t,ddx,ddy) | 使用微分查詢(xún)一維紋理t和ddxy均為vector | |
texCUBElod(s,t) | 使用LOD查找紋理s在t.w位置的color4 | |
texCUBEbias(s,t) | 將t.w決定的某個(gè)MIP層偏置后的一維紋理查找 | |
texCUBEgrad(s,t,ddx,ddy) | 使用微分并制定MIP層的一維紋理查找 | |
texCUBEproj(s,t) | 把紋理當(dāng)做一張幻燈片投影到場(chǎng)景中,先試用投影紋理技術(shù)需要計(jì)算出投影紋理坐標(biāo)t(坐標(biāo)t.w除以透視值),然后使用投影紋理坐標(biāo)進(jìn)行查詢(xún) |
參考鏈接:
Cg(C for Graphic)語(yǔ)言標(biāo)準(zhǔn)函數(shù)庫(kù)之紋理映射函數(shù),偏導(dǎo)函數(shù),與調(diào)試函數(shù)_liu_lin_xm的博客-CSDN博客
Mipmap:
MipMap的LOD實(shí)現(xiàn)原理_tex2dgrad_jieniyimiao的博客-CSDN博客
Unity中關(guān)于 Mipmap_mipmaps_u010019717的博客-CSDN博客
2D:
tex2Dbias
3D:
Introduction To Textures in Direct3D 11 - Win32 apps | Microsoft Learn
Texture Coordinates (Direct3D 9) - Win32 apps | Microsoft Learn
3D Textures
立體紋理查找:
Cubic Environment Mapping (Direct3D 9) - Win32 apps | Microsoft Learn
作業(yè):
寫(xiě)出你覺(jué)得最常用的5個(gè)函數(shù)
- tex2D(s,t)
- normalize(x)
- saturate(x)
- dot(x,y)
- lerp(x,y,t)
ddx、ddy的實(shí)際使用測(cè)試
1.銳化圖像
fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);col += ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity);return fixed4(col.rgb,1.0);}
右圖為銳化intensity=1時(shí)
最后輸出ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity)則可以看到銳化范圍。
2.求面法線(xiàn)
struct appdata
{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : TEXCOORD3;
};struct v2f
{float2 uv : TEXCOORD0;UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;float3 pos : TEXCOORD1;float3 worldPos : TEXCOORD2;float3 worldNormal : TEXCOORD3;
};sampler2D _MainTex;
float4 _MainTex_ST;
float _Intensity;
float _DDXIntensity;
float _DDYIntensity;v2f vert (appdata v)
{v2f o;o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.vertex = UnityObjectToClipPos(v.vertex);o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;o.worldNormal = mul(v.vertex,(float3x3)unity_WorldToObject).xyz;return o;
}fixed4 frag (v2f i) : SV_Target
{fixed3 col = tex2D(_MainTex, i.uv);//銳化//col += ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity);//求面法線(xiàn)col = normalize(cross(ddy(i.worldPos),ddx(i.worldPos))); return fixed4(col,1.0);
}