LayaBox引擎3D源碼閱讀(一、從繼承鏈開始學習)

-前言-

習慣2D開發的同學,在轉到3D遊戲開發的時候,始終會有所不適,首先最難讓人不習慣的就是,空間的轉換沒辦法那麼快的就轉換過來。另一個始終是分不清紋理,材質,網格,貼圖這些名詞之間到底什麼關係。

-正文-

不管3D遊戲還是2D遊戲,對於遊戲引擎來說都是把顯示對象繪製到屏幕上。我們首先來了解Laya3D有哪些顯示對象(3D精靈)

Sprite3D作爲3D顯示對象基類,有三個子類,分別是RenderableSprite3D,BaseCamera以及LightSprite

RenderableSprite3D

RenderableSprite3D是可渲染對象基類,它的子類都是可以被Laya引擎渲染的。其中每個子類對應一個Render對象

1.MeshSprite3D是靜態網格精靈,常用於美術預製的網格數據渲染模型。比如遊戲場景中的建築,裝飾物

2.ShuriKenParticle3D是粒子特效精靈。與2D粒子特效的用法差不多

3.PixelLineSprite3D是像素線精靈,是由線段在3維空間組成的網格數據

4.SkinnedMeshSprite3D是蒙皮網格精靈,一般用於人物模型網格數據

5.TrailSprite3D是拖尾精靈

BaseCamera

BaseCamera只有一個子類Camera,是3D場景中的攝像機對象。攝像機是一個3D場景必備的對象,否者也不會渲染出任何對象。

攝像機主要作用就是確認哪些對象是需要渲染的,哪些對象是不需要渲染的。並且在幀循環中對視窗內的對象進行渲染。

一個場景中可以存在多個攝像機,每個攝像機的渲染邏輯都是單獨計算的,因此每增加一個攝像機,渲染負擔也同時增加一倍。

LightSprite

LightSprite是燈光對象的基類,燈光分爲如下幾類

1.DirectionLight是平行光,用於模擬太陽光,固定一個方向,光照不會衰減。

2.PointLight是點光源,可以用於模擬燈泡,蠟燭燈,有強度,顏色,衰減半徑屬性。

3.SpotLight是聚光燈,可以用於模擬手電燈,光照區域邊緣有衰減現象,區域也被隨距離越來越大。

 

在瞭解了顯示對象之後,再來看看對於顯示對象處理的Render函數有哪些。

BaseRender是所有渲染器的基類,持有所需要渲染的材質引用及包圍盒對象。看到這裏我們就可以理解爲Sprite3D是材質紋理的一個顯示容器,Render是Sprite3D持有的可以渲染到屏幕的邏輯處理器。

1.PixelLineRenderer是PixelLineSprite3D持有的渲染器。用於渲染像素線精靈。

2.MeshRenderer是MeshSprite3D持有的渲染器,用於渲染靜態網格精靈。

3.ShurikenParticleRenderer是ShuriKenParticle3D持有的渲染器,用於渲染3D粒子

3.TrailRenderer是TrailSprite3D所持有的渲染器,用於渲染拖尾精靈。

 

剛剛有說Sprite3D是顯示對象容器,被Render邏輯處理渲染,那它處理的對象就是我們的資源資產對象Resource。下面來看看Resource對象的繼承鏈。

上圖的Resource繼承鏈,我只寫了3D相關的資源類型,2D的資源就暫時忽略了。

可以看到Resource資源類型可以分爲Mesh網格,Material材質類型,Avatar骨骼映射數據,AnimationClip動畫數據。

可以說一個Sprite3D也是由這些資產數據所組成。

1.Mesh是模型數據,在Laya中一般是.lm後綴文件。

2.Material分類很多,一般文件後綴爲.lmat文件,是Unity中爲模型設置的材質信息。加載.ls或者.lh文件時會自動加載.lmat文件來產生材質。

材質分類

1.BlinnPhongMaterial材質是LayaAir3D中標準材質。

2.EffectMaterial材質是特效材質,靠混合模式產生光效,這種材質常用於特效製作。

3.UnlitMaterial材質是不受光材質。這種材質最大的特點就是不受光照影響,且最省性能。這種材質直接顯示原貼圖的樣式。

4.PBRStandardMaterial材質基於物理普通反射材質,一般用於粗糙質感的材質。

5.PBRStandardMaterial材質基於高光,常用於光滑金屬質感。

6.WaterPrimaryMaterial材質水初級材質。

每個材質都會對應着Sprite3D的使用。所以可以這麼說Laya中每個3D資產單元都會對應從管理到渲染的一套邏輯。

紋理,材質,網格之間的關係

通過閱讀代碼,可以理解,紋理是材質中的一項屬性,通常是Texure對象,材質還包含處理紋理的很多屬性。

網格是一個模型在3D空間的組成點數據合成。

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