收到了面試,準備準備:
1. 一個三角形三個頂點之間的紋理座標是通過三個頂點之間插值得到的。
2. 透明度裁剪 和混合
Blend SrcFactor DstFactor: 稍微解釋一下,這行指令意思就是將本 Shader 計算出的顏色值(源顏色值,即藍色) * 源Alpha值(0.6) + 目標顏色值(可以理解爲背景色) * (1-0.6),從而讓藍色方塊展示出了40%的透明度。
3.Tags是鍵值對,鍵值都是字符串類型,這些鍵值對是SubShader和渲染引擎之間的溝通橋樑,需要怎樣何時渲染這個對象。
4.表面着色器是不需要關心多少個pass,以及如何渲染的問題。
5.點乘是 對應項相乘再相加。 叉乘是交叉相乘再相加。
6.平移,不是線性變換,而是仿射變換,因爲平移滿足標量乘法但是不滿足矢量加法。仿射變換可以使用4*4矩陣來表示。需要把矢量擴展到四維空間下,這個空間就是齊次座標空間。
7. 對於一個點,從三維座標到齊次座標是把w分量設爲1,對於方向矢量來說,是把w分量設爲0. 目的是爲了對一個點進行平移,旋轉,縮放都會施加於該點。而對矢量變換時會忽略平移操作。
8. unity中只有觀察座標是右手座標系,其他(模型,時間,屏幕等)都是左手座標系。
9. 注意: 通常在頂點變換中,是使用右乘的。按列矩陣進行乘法,因爲unity的內置矩陣(M內置)都是按列存儲的。float4×4等類型的變量是按行優先的方式進行填充的,方便和unity的內置矩陣進行相乘。
//按行優先的方式初始化矩陣,先把一行填充滿。所以是矩陣 M(內置)右乘於矩陣 M(f)
M float3×3 M(f) = float3×3 (1.0.2.0,3.0,
4.0,5.0,6.0,
7.0,8.0,9.0);
10. Unity支持的語義
11. 將二進制轉化成十進制,直接考慮每位數所對應的數值,第一位是2的一次方,第二位爲二次方,以此類推,得到如圖所示的關係。最後把和相加。
12. Unity和3Dmax的尺寸比例:
scale factor =1 使用use file scale ,那麼兩個單位都是1 ,否則是unity裏的100倍。
13. 模型面數要求:
手機面數:300-1500,一般是1000以下。
電腦:1500-5000
整個屏幕:7500面以下。
14. 貼圖壓縮:ETC4
透明通道的圖片:分開壓縮 不透明貼圖壓縮: RGBA 16bit 或者RGBA 32bit。unity5.4以後支持
因爲分離前受4個通道影響壓縮效果,而RGB只受R,G,B三個量影響,A僅受A自己影響,很明顯會帶來更多的壓縮可能性;
在unity中,帶有透明通道的圖片壓縮後。均會出現一定的質量的下降。並且帶有透明通道的圖片佔用內存較大。
最後使用shader合併到half4中輸出到屏幕。
15.模型綁定及動畫
骨骼數60,動畫每秒10幀,一般控制在1s內播完。
16. 場景優化:
遮擋剔除
原理:在場景空間中創建一個區域,該遮擋區域有單元格組成,每個單元格構成整個場景的一部分,這些單元格會把整個場景拆分成多個部分,當攝像機能夠看到該單元格時,表示該單元格中的物體會被渲染出來。
層消消隱:
float[] distances=new float[32];
//這裏定義數組小標“9”表示第9層
distances[9] = 10;
Camera.main.layerCullDistances = distances;
層級細節: LOD
17.音頻
·遊戲中播放時間較長的音樂(如背景音樂)使用.ogg或.mp3的壓縮格式。
·較短音樂(如槍聲)使用.wav和.aif的未壓縮音頻格式。
流模式加載
18.粒子特效
·屏幕上的最大粒子數建議小於200個粒子。
·每個粒子發射器發射的最大粒子數建議不超過50個。
·粒子大小:如果可以的話,粒子的size應該儘可能地小。因爲Unity的粒子系統的shader無論是alpha test還是alpha blending都是一筆不小的開銷。同時,對於非常小的粒子,建議粒子紋理去掉alpha通道。
·儘量不要開啓粒子的碰撞功能。非常耗時。
19. 光照:
光照貼圖
·光源“Important”個數,建議1個,一般爲方向光。“Important”個數應該越小越少。個數越多,drawcall越多。
·Pixel Light數目1-2個。逐像素光照的數目不能超過2個。
20. 資源加載
Resources AssetBuild WWW
21.髒字屏蔽
fastCheck的索引號用來表示對應的字符。裏面的值 表示這個字符在單詞中出現的位置。再判斷再首尾字符的長度是否要求。
快速排出一些不是髒字的字。都不滿足則進行hash查找,找首個髒字。