Mesh是Unity內的一個組件,稱為網格組件。3D網格是Unity中最重要的圖形元素。在Unity中存在多種組件用於渲染標准網格或者蒙皮網格、拖尾或者3D線條。
在Unity-》Component-》Mesh組件內,有Mesh Filter,Text Mesh, Mesh Render三個子項。在聖典中可以看到,有四項內容:
- Mesh Filter 網格過濾器
- Mesh Renderer 網格渲染器
- Skinned Mesh Renderer 蒙皮網格渲染器
- Text Mesh 文本渲染器
比較通俗的理解就是,Mesh是指模型的網格,建模就是建網格。細看Mesh,可以知道Mesh的主要屬性內容包括頂點坐標,法線,紋理坐標,三角形繪制序列等其他有用屬性和功能。因此建網格,就是畫三角形;畫三角形就是定位三個點。
而Mesh Filter內包含一個Mesh組件,可以根據MeshFilter獲得模型網格的組件,也可以為MeshFilter設置Mesh內容。
Mesh Render是用於把網格渲染出來的組件。MeshFilter的作用就是把Mesh扔給MeshRender將模型或者說是幾何體繪制顯示出來。
梳理一下內容,大概就是Unity中的對象就是GameObject,每個GameObject都可以有一個MeshFilter組件(也可以沒有),該組件又有Mesh屬性(這個一定有),而該屬性又有個Ver貼上,也就是一個Vector3數組,儲存着頂點信息。
網格(Mesh)對象擁有頂點及其相關數據(法線和UV坐標)和三角形屬性的屬性。頂點可以任何順序提供,但是法線和UV數組必須有序,這樣索引均與頂點對應(即法線數組的元素0提供頂點0的法線,等等)。頂點為Vector3,代表對象局部空間的點。法線為標准化的Vector3,再一次在本地坐標中代表方向。UV指定為Vector2,但由於Vector2類型沒有成為U和V的字段,因此也就相應的將其轉換為了X和Y。
三角形指定為在頂點數組中充當索引的整數三元組。數組不使用特殊類類表示三角形,而只是一個簡單的整數指數列表。每一個三角形都是以三個為一組,因此,前三個元素定義為第一個三角形,后面三個元素定義為第二個三角形,並依此類推。
三角形的一個重要細節就是拐角處頂點的順序。盡管從哪個拐角開始並不重要,但頂點應予以排序,這樣當俯視三角形的可見外表面時,各個拐角會按順時針轉動。
此處也應該知道了UV坐標表示的是什么。
抓取百度百科的信息:
"UV"這里是指u,v紋理貼圖坐標的簡稱(它和空間模型的X, Y, Z軸是類似的). 它定義了圖片上每個點的位置的信息. 這些點與3D模型是相互聯系的, 以決定表面紋理貼圖的位置. UV就是將圖像上每一個點精確對應到模型物體的表面.
扯到UV坐標,想起來有人問的材質,貼圖和紋理有什么區別。其實,除了看到Textures文件夾內都是圖形,和Materials文件夾內都是材質球外,我也不知道這三者有什么區別。對了,材質球可以根據光照、貼圖、紋理進行生成,然后扔給GameObject的Render組件里的Material屬性。
知乎上的回答如下:
整個 CG 領域中這三個概念都是差不多的,在一般的實踐中,大致上的層級關系是:
材質 Material包含貼圖 Map,貼圖包含紋理 Texture。
紋理是最基本的數據輸入單位,游戲領域基本上都用的是位圖。此外還有程序化生成的紋理 Procedural Texture。
貼圖的英語 Map 其實包含了另一層含義就是“映射”。其功能就是把紋理通過 UV 坐標映射到3D 物體表面。貼圖包含了除了紋理以外其他很多信息,比方說 UV 坐標、貼圖輸入輸出控制等等。
材質是一個數據集,主要功能就是給渲染器提供數據和光照算法。貼圖就是其中數據的一部分,根據用途不同,貼圖也會被分成不同的類型,比方說 Diffuse Map,Specular Map,Normal Map 和 Gloss Map 等等。另外一個重要部分就是光照模型 Shader ,用以實現不同的渲染效果。
對了,如果導入的模型的網格具有蒙皮信息,Unity會自動創建一個Skinned Mesh Renderer.
注意:在使用Mesh Filter的時候必須同時提供一個Mesh Renderer組件,因為需要將其渲染出來,否則你不見他。
Text Mesh :文件過濾器,用於顯示3D文字的。
Mesh Renderer :網格渲染器。用於渲染網格顯示游戲對象。
Mesh Renderer的Materials可以放置多張貼圖,用於顯示在游戲對象的外表。
