第068封“情書”:廣寒宮Houdini Game Tools- Assembling a 3D Scan Of The Earth可視化地圖地理數(shù)據(jù)<Entagma>Houdini 2018

▉ 熱情在慢慢消退,逐漸冷卻,惰性的冰川大兵壓境,步步緊逼?!?每天翻譯一篇教程,這就是我寫給houdini的情書?!臼装l(fā)于同名公眾號:“致houdini的情書”】

█?“冰臨城下”

前言不搭后語

逃避和放棄永遠是最容易的選擇!人一旦通過努力做到了某件事,就會慢慢形成積極的做事態(tài)度和思維模式。放棄一件事沒什么,值得警惕的是,養(yǎng)成了放棄的習(xí)慣!

本節(jié)內(nèi)容

如何可視化地圖數(shù)據(jù)&地理數(shù)據(jù)

本節(jié)要實現(xiàn)效果

.....

今天是42歲

043周五

68

這是寫給Houdini的第068封“情書”

我是geo流程圖

我是pointvop

04 置換海拔數(shù)據(jù)

//-- 1a 引入海拔屬性

//-- 1b alt屬性值在-1~1之間,乘32767把grid轉(zhuǎn)換成米

//-- 1c 再加個比例因子,依據(jù)下載的Tile的經(jīng)緯度計算tile的邊緣長度

//但是因為地球表面有扭曲,這里乘引入的RSTM海拔信息,添加一個浮動滑塊amp振幅

float offset = f@alt*32767.0*chf("amp");

//-- 3 判斷偏移,高于1萬的移入一個組,然后y軸=0

if(offset>30.0){

? ? @group_error = 1;

? ? offset=0;

? ? v@Cd = {1,0,0};

? ? f@alt = 0;

}?

//-- 2 置換到y(tǒng)軸上

v@P.y += offset;

06 模糊“出錯點”再次置換

float offset = f@alt*32767.0*chf("amp");

v@P.y += offset;

07?為海拔屬性設(shè)置的經(jīng)緯度坐標(biāo)系

//-- 1 引入經(jīng)緯度?

//-- 1a 因為輸入的面有些鋸齒邊緣所以不是整數(shù);但經(jīng)緯度是整數(shù),所以四舍五入

float max_lat = rint(detail(1,"max_lat"));

float min_lat = rint(detail(1,"min_lat"));

float max_lon = rint(detail(1,"max_lon"));

float min_lon = rint(detail(1,"min_lon"));

//-- 2 通過相對坐標(biāo)(0,0)到對角(1,1)映射,經(jīng)緯度的最大最小值

float lon = fit01(v@uv.x,min_lon,max_lon);

float lat = fit01(v@uv.y,min_lat,max_lat);

//-- 3 創(chuàng)建矢量坐標(biāo)

vector latlon = set(lat,lon,0.0);

//-- 4 創(chuàng)建屬性

v@latlon = latlon;

09?osm的經(jīng)緯坐標(biāo)系匹配成alt海拔屬性的經(jīng)緯坐標(biāo)系

//--osm的經(jīng)緯坐標(biāo)系匹配給alt海拔屬性的latlon坐標(biāo)系

//-- 1 同樣引入osm的最大最小經(jīng)緯度;

// float max_lat = rint(detail(0,"max_lat"));

// float min_lat = rint(detail(0,"min_lat"));

// float max_lon = rint(detail(0,"max_lon"));

// float min_lon = rint(detail(0,"min_lon"));

//-- 2 將經(jīng)緯度轉(zhuǎn)成矢量坐標(biāo)系;

vector osm_latlon = set(f@latitude,f@longitude,0.0);

//-- 3 使用uvsample在各自的經(jīng)緯度坐標(biāo)上采樣網(wǎng)格的位置,

//從1接口-想要匹配的位置采樣,還有1上的lanlon屬性;最后采樣應(yīng)用在0接口-的位置上

v@P = uvsample(1,"P","latlon",osm_latlon);

首先

制作步驟

? ? ? ? ? ? ○

小節(jié)提要

本節(jié)將學(xué)習(xí):?

01)獲得&轉(zhuǎn)換地圖數(shù)據(jù):

? 1 獲取開放地圖數(shù)據(jù)?

?2 轉(zhuǎn)換獲得的數(shù)據(jù)

02)海拔屬性置換&糾正:

??1?引入海拔屬性進行置換

? 2 糾正出現(xiàn)錯誤的點。

03)引入開放地圖數(shù)據(jù):

? 1 通過uv坐標(biāo)映射范圍成最大最小經(jīng)度緯度

? 2 osm的經(jīng)緯度采樣“海拔經(jīng)緯度坐標(biāo)屬性”

接下來

正式制作

? ? ? ? ? 使用軟件:houdini17.5.229

01 獲得&轉(zhuǎn)換地圖數(shù)據(jù)

1獲取開放地圖數(shù)據(jù)?

準(zhǔn)備工作

首先)更新“游戲工具”標(biāo)簽

游戲標(biāo)簽增加了很多工具

○ 具體操作 ○

任務(wù)1)?首先需要“開放地圖數(shù)據(jù)”??

? ? ?到“開放地圖網(wǎng)站”下載有海拔信息的地圖數(shù)據(jù)

a)進入開放地圖網(wǎng)站:?openstreetmap.org/export?

b)左側(cè)點擊“手動選擇不同的區(qū)域”

任務(wù)2)然后需要“海拔數(shù)據(jù)”?

問題)這個網(wǎng)站沒有此數(shù)據(jù)

?解決方案)

A)另一網(wǎng)站獲取文件(http://dwtkns.com/srtm30m/

關(guān)于數(shù)據(jù):SRTMHGT文件

????1)Shuttle Radar Topography Mission:航天飛機雷達地形任務(wù)。

2)點擊黃色瓷磚下載相應(yīng)的數(shù)據(jù)。

????3)Tiles(每塊瓷磚)是從NASA服務(wù)器下載的緯度/經(jīng)度投影(EPSG:4326)中以1弧秒分辨率(3601x3601像素)壓縮的SRTMHGT文件。

????????B)找到某個區(qū)域的“左下角,右上角”“坐標(biāo)”

執(zhí)行)

?A)下載文件:并且知道了“左下角”坐標(biāo)。

?1)點擊一塊Tile,首先注冊一下NASA。點擊才能“下載”

B)還有顯示它的“左下角坐標(biāo)”,但是沒有“右上角坐標(biāo)”

(這里是:左下角坐標(biāo)N39W032)

問題)?沒有“右上角坐標(biāo)”

? ? 分析)可以參考一下旁邊有連續(xù)連接Tile的坐標(biāo)規(guī)律,比如這個四個Tile區(qū)域;?

?解決方案)可以推斷出“右上角坐標(biāo)”N40W031

任務(wù)3)回到“開放地圖”網(wǎng)站找到對應(yīng)區(qū)域

執(zhí)行)

1)輸入對應(yīng)的左下角=N39W032,右上角坐標(biāo)N40W031:

????????2)點擊下載API:文件名叫map

????????3)重命名azores.osm(亞速爾群島)

2 轉(zhuǎn)換獲得的數(shù)據(jù)

○兩個文件○

1).hgt文件。2)osm文件

○ 具體操作 ○

解決方案)

?????????1)把.hgt改成 .raw格式。

?????????2)用ps打開。

測試)

???????????a)圖像模式轉(zhuǎn)成32位。

???????????b)使用曝光命令調(diào)節(jié),白色就是高度信息

????????????3)保存tif格式。

02 海拔屬性置換&糾正

1 引入海拔屬性進行置換

○ 節(jié)點 ○

○ 具體操作 ○

1)geo內(nèi)建立sop_osm_import節(jié)點

(osm=open street map開放地圖)?

????1-1)導(dǎo)入osm

需求)幾何表格里有點對應(yīng)的“經(jīng)度”“緯度”。? 我們需要經(jīng)緯度與SRTMHGT文件進行匹配。 ? ?

執(zhí)行)

????2)建立分辨率3601*3601的grid:size=10*10

????3)引入“海拔貼圖”//azros.tif;//輸出屬性alt(altitude海拔)

(現(xiàn)在grid每個點上都由alt高度屬性)

需求)將這些數(shù)據(jù)轉(zhuǎn)換成高度

執(zhí)行)

????4)pointwrangle:??

//-- 1a 引入海拔屬性

//-- 1b alt屬性值在-1~1之間,乘32767把grid轉(zhuǎn)換成米

//-- 1c 再加個比例因子,依據(jù)下載的Tile的經(jīng)緯度計算tile的邊緣長度?但是因為地球表面有扭曲,這里乘引入的RSTM海拔信息,添加一個浮動滑塊amp振幅

float offset = f@alt*32767.0*chf("amp");

//-- 2 置換到y(tǒng)軸上

v@P.y += offset;


問題1)產(chǎn)生一個非常高的海拔

解決方案)改變“比例因子amp”

amp=0.001

2 糾正出現(xiàn)錯誤的點?

○ 節(jié)點 ○

○ 具體操作 ○

問題2)殘留一些細豎線;這些就是ps中的那些白點

改進)

1)?判斷偏移,高于30(這個數(shù)值參考幾何圖表看y軸的高度,作者的是一萬,我的是高于30)的移入一個組,設(shè)置偏移=0

????if(offset>30.0){

? ? @group_error = 1;

? ? offset=0;

}? ? ?

問題2a)效果仍然有問題

解決方案)在attribfrommap1過濾設(shè)置中

問題2b)還是有些點要糾正

測試)將error組中的那些點設(shè)置成紅色

????v@Cd= {1,0,0};? ??

這些要糾正的點,需要跟周圍融合一下

解決方案)

通過模糊出錯點的模糊屬性,以適應(yīng)整個地形

????1)增加attributblur節(jié)點

????2)新增加pointwrangle,條件判斷取消

????float offset = f@alt*32767.0*chf("amp");

v@P.y += offset;

問題2c)還是有點沒有糾正過來

分析)因為模糊之前,這些要糾正的點alt屬性也應(yīng)該=0

?float offset = f@alt*32767.0*chf("amp");

if(offset>300.0){

? ? @group_error = 1;

? ? offset=0;

? ? //v@Cd = {1,0,0};

? ? f@alt = 0;

}?

//v@P.y += offset;? ?

通過過濾和修正“海拔屬性alt”引入到grid上

03 引入開放地圖數(shù)據(jù)

1 通過uv坐標(biāo)映射范圍成最大最小經(jīng)度緯度

○ 具體操作 ○

????02)降低一下grid分辨率:360*360

????03)pointwragle3

問題1)grid上需要“經(jīng)度”“緯度”屬性? ??

分析)

sop_osm_import節(jié)點的幾何圖表

1)最大最小的“經(jīng)度lontitude”“緯度?latitude”

????2)理論上相當(dāng)于下載的Tile的坐標(biāo)。

????3)引入“經(jīng)緯度”為grid的點生成坐標(biāo)。

執(zhí)行)

1)sop_osm_import連接pointwrangle3的“槽2”

?2)vex代碼

//-- 1 引入經(jīng)緯度?

//-- 1a 因為輸入的面有些鋸齒邊緣所以不是整數(shù);但經(jīng)緯度是整數(shù),所以四舍五入

float max_lat = rint(detail(1,"max_lat"));

float min_lat = rint(detail(1,"min_lat"));

float max_lon = rint(detail(1,"max_lon"));

float min_lon = rint(detail(1,"min_lon"));



????問題2)建uv坐標(biāo)映射成緯度最大最小值建坐標(biāo)屬性?

解決方案)

????1)使用uv Texture?產(chǎn)生uv坐標(biāo)屬性?? ?

現(xiàn)在有了uv相對坐標(biāo)屬性

???2)將uv坐標(biāo)范圍映射成“經(jīng)緯度最小最大范圍”

float?lon =?fit01(v@uv.y,min_lon,max_lon);

??floatlat =fit01(v@uv.x,min_lat,max_lat);

????3)創(chuàng)建經(jīng)緯度坐標(biāo)屬性? ?

//--? 創(chuàng)建矢量變量坐標(biāo)

vector latlon =set(lat,lon,0.0);

//--? 創(chuàng)建經(jīng)緯度屬性

v@latlon = latlon;???

2 osm的經(jīng)緯度采樣“海拔經(jīng)緯度坐標(biāo)屬性

執(zhí)行)

????1)pointwrangle4:

????????a)“槽1”連接sop_osm_import1b)"槽2"連接“pointwrangle3”

b) vex代碼:

?//--? 將經(jīng)緯度轉(zhuǎn)成矢量坐標(biāo)系;

?vector osm_latlon =set(f@latitude,f@longitude,0.0);

//-- 3 使用uvsample在各自的經(jīng)緯度坐標(biāo)上采樣網(wǎng)格的位置,

????//從1接口-想要匹配的位置采樣,還有1上的lanlon屬性;最后采樣應(yīng)用在0接口-的位置上

v@P =uvsample(1,"P","latlon",osm_latlon);

可視化地圖數(shù)據(jù)&地理數(shù)據(jù)

今天就到這里,收功

教程翻譯自entagma的網(wǎng)絡(luò)教程

下一節(jié)::20180924 Crochet - Blending between Delaunay and Voronoi

電子郵箱:oneinchtime@126.com

公眾號:

微信號

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容