unity3d WorldComposer1 衛星地圖生成地形


http://blog.csdn.net/myarrow/article/details/42709113

 

1. 簡介

1.1 TerrainComposer(TC)

       一個Unity擴展工具,可用於創建AAA質量的Unity地形。

1.2 WorldComposer

          是Unity3d擴展工具,可從現實世界中提取數據。它可以單獨運行或作為TerrainComposer的擴展。

          WorldComposer有一個獨一無二陰影刪除工具。衛星圖像(它使用Microsoft衛星地圖,因為Google衛星地圖有Logo,而它沒有)總是有陰影的,如果在游戲或模擬器中直接使用衛星圖像,為配合此陰影,需要把太陽放在一個固定的位置。WorldComposer的陰影刪除算法使效果看起來更好,且允許有白天和黑夜周期。

          WorldComposer像Google地圖一樣提供滾動和縮放功能,你可以創建多個區域,每個區域顯示真實世界的幾公里。衛星圖像可以導出到縮放級別19,每個像素的分辨率為0.3米。海拔數據可以導出到縮放級別14,這是每個像素的分辨率10米。
          WorldComposer僅輸出海拔高度圖(elevation heightmaps)衛星圖像(satellite images),使用它就可以創建看起來像真實世界的地形。
          當於TerrainComposer組合使用時,可混合/修改高度圖,或增加perlin噪點以增強細節,如把衛星圖像與圖片紋理進行混合,增加雲的陰影等等。還可在上面放置樹、草和對象,以進行無限制的調整和編輯。

1.3 RTP Relief Terrain Pack

      主要是搭配Terrain Composer用來設置地形的材質 ( 是Unity中最好的Terrain Shader)

1.4 Ufs Flight Simulation Engine Forum

     則是用來模擬空戰游戲或是飛航效果。

2. 基本概念

 

2.1 Heightmap(高度圖)

      通常Heightmap高度圖儲存成Gray Scale Image也就是常說灰度圖。越白該點就越高,純黑表示最低點,純點表示最高點。8位灰度圖有256階。16位灰度圖有65536階。如果依然精度不夠用的話(例如繪制大型場景),那么可以使用標准的RGB位圖來儲存高度圖,那么精度就是256的3次方=16777216階。同理還可以再升為RGBA。 
      Heightmap可以用3D軟件(Unity的地形也可以)來繪制,或者用Photoshop來繪制

 

     高度圖主要用在3個地方。

         (1) 地形  Terrain          

         (2) 凹凸紋理 Bump Map 

         (3) 置換貼圖 Displacement mapping

         Unity3d自帶地形編輯器,可以繪制地形。地形的起伏即高度信息可以用高度圖(Heightmap)儲存。 既可以導入raw后綴的HeightMap生成地形,也可以在Unity3d里繪制好地形導出raw后綴的Heightmap。HeightMap比起用3D地形模型節省很多儲存空間。

2.2 烘焙(bake)

      把物體模型放進場景之后, 引擎會計算光線,光線照到你的物體的表面形成反射和陰影。 如果不烘焙, 游戲運行的時候,這些反射和陰影都是由GPU和CPU實時進行計算。在執行烘焙之后,這些反射和陰影都記錄到模型里了,變成了新的貼圖,運行的時候,GPU和CPU不需要進行對環境光效果進行實時運算了。

2.3 着色器(Shader)

     Shader是運行在GPU上的一段程序。

     可以讓程序員去通過編寫代碼去參與到GPU渲染圖形的具體流程中去,去制作一些精美的特效和動畫甚至是讓模型發生奇怪的形變;簡單點就是可以把它理解成一種對呈現到屏幕上畫面的一種美化工具。

  編寫Shader目前比較知名的是基於DirectX的HLSL和基於OpenGL的GLSL,而我們Unity用的ShaderLab是基於Nvida和Microsoft一同開發的CG(C for Graphic)語言,從名字上我們就能知道,只是一門類C的語言,如果你接觸過C語言或者C++,甚至是JAVA,C#那對他的基本語法一定不會陌生。CG語言他是跨平台的,他可以基於OpenGL也可以DirectX來運行,也就是說他是工作在DX和OpenGL上層的抽象語言,這三種語言在某些具體方面可能有性能和擴展性上的區別,但是對於背后的實質技術並無過大區別。

  Unity3D使用的並不是完全的CG語言,從官方的API可知Shader分為三大類:

     1)Fixed function shader(固定渲染管線 Shader):

          現在已經很少使用,一般用來做默認處理,以一種固定的模式去處理渲染流程,但是他完全使用ShaderLab語法讓你很簡單的去修改一些參數,功能有限,很多Unity內置的默認效果用的是這個Shader。

     2)Surface Shader (表面Shader):

          這個Shader是Unity官方文檔里用的最多的了,而且在國外很多的UnityShader學習教材里也很多用它來舉例子,這個Shader其實和第三種已經很像了,只是不需要自己來寫所有的片段着色器代碼,Unity給你自帶了很多封裝好的,如果你想要自己寫也可以,它與第三種最大的區別在於它的光照模型不能確定到底是外面哪個光源。另外在Surface Shader中的同一個SubShader中不可以使用多個Pass。

    3)Vertex and Fragment Shader(頂點和片斷Shader):  這類Shader很好很強大,頂點着色器和片段着色器完全由我們自己來控制,這樣子我們就能最大化使用我們掌握的東西,當然這類Shader也是最需要時間學習的。      

        在一個shader中我們主要通過兩個部分來參與渲染,頂點着色器(Vertex)和片段着色器(Fragment),他們兩個參與的時機不同,VertexShader是在頂點變換的時候,而FragmentShader是在光柵化到將最終計算完成的像素值寫入幀緩沖區。在VertexShader中我們可以對模型頂點實施一些坐標轉換甚至形變,也可以通過計算和賦值把一些片元默認並不含有的屬性帶入FragmentShader來進行一些需要的操作。而在FragmentShader中我們可以做的就很多了,很多光照處理都是在這里進行的(當然在VertexShader中也可以進行光照計算,不過效果不是十分好),而且也可以做一些比較復雜的色彩變換和處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM