Unity3d一些常見筆試題...

1.請描述遊戲動畫有哪幾種,以及其原理。

主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。

關節動畫把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連接成一個整體的動畫,角色比較靈活Quake2中使用了這種動畫。

單一網絡模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀裏記錄各個頂點的原位置及其改變量,然後插值運算實現動畫效果,角色動畫較真實。

骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,由關節相連,可做相對運動,皮膚作爲單一網格蒙在骨骼之外,決定角色的外觀。皮膚網格每一個頂點都會受到骨骼的影響,從而實現完美的動畫。(骨骼動畫是由關節動畫發展而來的,如今基本都使用骨骼動畫來實現角色動畫)

2.alpha blend 工作原理

實際顯示顏色 = 前景顏色*Alpha/255 + 背景顏色*(255-Alpha)/255

3.寫光照計算中的diffuse的計算公式

實際光照強度 I= 環境光(Iambient) + 漫反射光(Idiffuse) + 鏡面高光(Ispecular);

環境光:Iambient= Aintensity* Acolor; (Aintensity表示環境光強度,Acolor表示環境光顏色)

漫反射光:Idiffuse = Dintensity*Dcolor*N.L;

(Dintensity表示漫反射強度,Dcolor表示漫反射光顏色,N爲該點的法向量,L爲光源向量)

鏡面反射光:Ispecular = Sintensity*Scolor*(R.V)^n;

(Sintensity表示鏡面光照強度,Scolor表示鏡面光顏色,R爲光的反射向量,V爲觀察者向量,n稱爲鏡面光指數)

4.lod是什麼,優缺點是什麼

LOD技術即Levels of Detail的簡稱,意爲多細節層次。LOD技術指根據物體模型的節點在顯示環境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。

優點:可根據距離動態地選擇渲染不同細節的模型

缺點:加重美工的負擔,要準備不同細節的同一模型,同樣的會稍微增加遊戲的容量。

5.兩種陰影判斷的方法工作原理

陰影由兩部分組成:本影與半影

本影:景物表面上那些沒有被光源直接照射的區域(全黑的輪廓分明的區域)

半影:景物表面上那些被某些特定光源直接照射但並非被所有特定光源直接照射的區域(半明半暗區域)

求陰影區域的方法:做兩次消隱過程

一次對每個光源進行消隱,求出對於光源而言不可見的區域L;

一次對視點的位置進行消隱,求出對於視點而言可見的面S;

shadow area= L ∩ S

陰影分爲兩種:自身陰影和投射陰影

自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面

工作原理:利用背面剔除的方法求出,即假設視點在點光源的位置。

投射陰影:因不透明物體遮擋光線使得場景中位於該物體後面的物體或區域受不到光照照射而形成的陰影

工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然後再按視點位置對場景進行相應處理得到所要求的視圖(利用空間換時間,每次只需依據視點位置進行一次陰影計算即可,省去了一次消隱過程)

若是動態光源此方法就無效了。

5.Vertex Shader是什麼?怎麼計算?

頂點着色器是一段執行在GPU上的程序,用來取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作頂點。

Vertex Shader對輸入頂點完成了從local space到homogeneous space(齊次空間)的變換過程,homogeneous space即projection space的下一個space。在這其間共有world transformation, view transformation和projection transformation及lighting幾個過程。

6.MipMap是什麼?作用?

在三維計算機圖形的貼圖渲染中有一個常用的技術被稱爲Mipmapping。爲了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱爲 MIP map 或者 mipmap。

7.用u3d實現2d遊戲,有幾種方式?

1.利用引擎自帶的GUI

2.把攝像機設爲Orthographic,用面片作爲2d元素

3.利用第三方插件:NGUI、2dToolkit

8.u3d中碰撞器和觸發器的區別?

collider碰撞器會有碰撞的效果,IsTrigger = false,可以調用OnCollisionEnter/Stay/Exit函數

trigger觸發器沒有碰撞效果,isTrigger = true,可以調用OnTriggerEnter/stay/exit函數

9.物體發生碰撞的必要條件

物體A必須帶有(collider+rigidbody)或者CharacterController,另一個物體也必須至少帶有collider

10.CharacterController和Rigidbody的區別

Rigidbody具有完全真實物理的特性,而CharacterController可以說是受限的Rigidbody,具有一定的物理效果但不是完全真實的。

11.物體發生碰撞時,有幾個階段,分別對應的函數

三個階段,OnCollisionEnter/Stay/Exit函數

12.u3d中,幾種施加力的方式,描述出來

rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成員函數

13.什麼叫做鏈條關節

Hinge Joint ,他可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離後就會產生拉力。(簡單說就是彈簧)

14.物體自旋轉使用的函數叫什麼

transform.Rotate

15.物體繞某點旋轉使用函數叫什麼

transform.RotateAround

16.u3d提供了一個用於保存讀取數據的類,(playerPrefs),請列出保存讀取整形數據的函數

PlayerPrefs.SetInt 與 PlayerPrefs.GetInt

17.unity3d提供了幾種光源,分別是什麼

共4種,Directional Light、Point Light、Spot Light、Area Light(只用於烘培)

18.unity3d從喚醒到銷燬有一段生命週期,請列出系統自己調用的幾個重要方法。

Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy

19.物理更新一般在哪個系統函數裏?

FixedUpdate,每固定幀繪製時執行一次,和update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate調用次數就會跟着下降。FixedUpdate比較適用於物理引擎的計算,因爲是跟每幀渲染有關。Update就比較適合做控制。

20.移動相機動作在哪個函數裏,爲什麼在這個函數裏。

LateUpdate,,是在所有update結束後才調,比較適合用於命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有update操作完纔跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。

21.當遊戲中需要頻繁創建一個物體對象時,我們需要怎麼做來節省內存。

做一個pool,遊戲開始時預先實例化足夠的數量,然後用的時候取不用的時候收回

22.一個場景放置多個camera並同時處於活動狀態,會發生什麼

實際看到的畫面由多個camera的畫面組成,由depth、Clear Flag、Culling Mask都會影響最終合成效果。

23.簡述prefab的用處和環境

在遊戲運行時實例化,prefab相當於一個模版,對你已有的素材、腳本、參數做一個默認配置,以便於以後修改,同時prefab打包的內容簡化了導出的操作,便於團隊的交流。

24.如何銷燬一個UnityEngine.Object以及其子類

Destroy

25.爲什麼u3d會出現組件上數據丟失的情況

一般是組件上綁定的物體對象被刪除了

26.u3d下如何安全的在不同工程遷移asset數據

方法1,可以把assets目錄和Library目錄一起遷移,

方法2,導出包

方法3,用unity帶的assets server功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章