//更新2020.07.15:國外一個地形高度網站,terrain.party,提供了全球任意位置高度圖下載,PNG格式的灰度圖。拖入Unity更改圖片屬性:read/write checked。
1下載衛星圖
1.1 下載
框選一個矩形區域,彈出一個選擇菜單欄
幾個關鍵數據:
Map下拉有衛星圖和交通圖,第一次選擇區域時用衛星圖。
zoom表示縮放的精度級別,值越高,像素密度越大,瓦片區塊越多。
1.2 拼接
下載好之后需要拼接
zoom要與下載設置的zoom一樣!導出之后的ecw文件會有色差問題,這里先不管了。
2裁切衛星圖
2.1 裁切導出
下載好ecw格式的文件用mapper打開裁切導出。而worldMachine導入文件的格式支持png、bmp等,如下圖
導出后會生成png、pgw與prj(帶有坐標信息),這里還需要一個經緯度信息
2.2 生成經緯度信息
把導出好的png再次用mapper打開,生成經緯度信息。
只需要TXT元數據,導出會有兩個文件:.jpg和.txt。jpg暫時不用,打開txt能看見經緯度信息。南和西開始代表小值,北和東代表大值。
3下載DEM數據
打開網址http://www.gscloud.cn/search,獲取高程數據:GDEMV2 30M 分辨率數字高程數據。
把txt里面的經緯度信息輸入,下載。下載好的數據解壓,導入mapper中,輸出hfz格式選擇邊界框並繼續輸入經緯度信息,確定。
把生成的hfz文件導入mapper,測量裁切后地形長寬值。
4導入DEM到WorldMachine
4.1 導入高程數據
新建File Input設備,導入高程hfz數據。設置它的長寬,自然高度
4.2 導入貼圖
新建File Input設備,選中Interpret as RGB;點選Place into current view。
5 對公路和河流的侵蝕與遮罩
5.1 侵蝕的問題
制作公路與河流略。用Erosion侵蝕設備對公路和河流邊緣地形進行圓潤打磨。
對公路和河流的combiner高程輸出作為侵蝕輸入,這時出現問題了
黃線左右對比,被侵蝕的特別厲害,公路消失了,河流很淺了。
5.2 對侵蝕使用遮罩
對公路和河流layout的shapeMask合並相加,強度最大。
公路和河流的高低差合並,mask遮罩合並反轉,侵蝕。
6 設置各種材質
6.1 溝壑材質效果
Erosion flow輸出給Equalizer平衡器和Clamp壓縮
Combiner對選中的區域反轉進行mask遮罩,被遮罩的部分不進行flow效果添加;對flow的顏色用color生成器增強。
6.2 公路或河流材質,突出顯示
三個端口,A、B端口是混合類型,C是將要控制的對象shape mask連接。然后選擇方法。
這里端口A是整體顏色,端口B是給控制對象要添加顏色,端口C的輸入是控制對像的特定輸出。然后用上圖的算法進行混合。就是把個體與整體的突出分離融合。
然后是河流:
突出河流顏色,新增color生成器與公路combine合並,然后把河流的shape遮罩輸入,只對河流部分增加顏色。
7 導出
7.1 導出高度圖、位圖
導出高度圖,需要連接最后一次height Filed output;
導出位圖也就是rgb貼圖需要連接最后一次bitmap output.
7.2 導出網格優化
導出網格mesh也要連接最后一次heightFiled output,跟導出高度圖的連接點相同。
參數說明:從上至下從左至右
Always output all tiles:一般勾選。如果要導出特定坐標的話需要手動選擇下面列出的格子。
Tiling Options:
Merge to xxx:勾選,
Share edge x:勾選.共享邊緣頂點。
Flip y-axis :翻轉坐標Y軸朝向。
Calculate edge :勾選,計算瓦片邊緣。
Tile Resolution:單個瓦片分辨率
tiles per : 最終瓦片數量
blending: 瓦片邊緣過渡的混合強度
Naming string:命名格式format
7.3 導出splatmap
地形貼圖分層顯示。
red是flow shape;每個select slope連接heightFiled,然后調整高度,分別連接green、blue。最后輸出png格式的bitmap貼圖。
7.4 導出有腐蝕效果的splatmap
8 導入unity
depth根據world machine導出時的格式精度;
寬高是整個分辨率;
byte order字節大小端;
flip表示左右手坐標系,wm勾了unity就不勾。保持統一就行
Terrain size:unity中單位為米,根據wm長寬等比例縮,Y值高度也要等比例縮放。
設置splat分層貼圖:
核心就是讀取和設置TerrainData的alphamap數據
然后讀取創建好的splat貼圖數據。
注意splat貼圖的rgb之和不能大於1,如果手動制作的貼圖不能保證,在代碼里加幾行
這樣在每層邊緣過渡的時候不會有硬邊了。