第068封“情书”:广寒宫Houdini Game Tools- Assembling a 3D Scan Of The Earth可视化地图地理数据<Entagma>Houdini 2018

▉ 热情在慢慢消退,逐渐冷却,惰性的冰川大兵压境,步步紧逼。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】

█ “冰临城下”

前言不搭后语

逃避和放弃永远是最容易的选择!人一旦通过努力做到了某件事,就会慢慢形成积极的做事态度和思维模式。放弃一件事没什么,值得警惕的是,养成了放弃的习惯!

本节内容

如何可视化地图数据&地理数据

本节要实现效果

.....

今天是42岁

043周五

68

这是写给Houdini的第068封“情书”

我是geo流程图

我是pointvop

04 置换海拔数据

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

//-- 1b alt属性值在-1~1之间,乘32767把grid转换成米

//-- 1c 再加个比例因子,依据下载的Tile的经纬度计算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轴上

v@P.y += offset;

06 模糊“出错点”再次置换

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

v@P.y += offset;

07 为海拔属性设置的经纬度坐标系

//-- 1 引入经纬度 

//-- 1a 因为输入的面有些锯齿边缘所以不是整数;但经纬度是整数,所以四舍五入

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 通过相对坐标(0,0)到对角(1,1)映射,经纬度的最大最小值

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

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

//-- 3 创建矢量坐标

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

//-- 4 创建属性

v@latlon = latlon;

09 osm的经纬坐标系匹配成alt海拔属性的经纬坐标系

//--osm的经纬坐标系匹配给alt海拔属性的latlon坐标系

//-- 1 同样引入osm的最大最小经纬度;

// 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 将经纬度转成矢量坐标系;

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

//-- 3 使用uvsample在各自的经纬度坐标上采样网格的位置,

//从1接口-想要匹配的位置采样,还有1上的lanlon属性;最后采样应用在0接口-的位置上

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

首先

制作步骤

            ○

小节提要

本节将学习: 

01)获得&转换地图数据:

  1 获取开放地图数据 

 2 转换获得的数据

02)海拔属性置换&纠正:

  1 引入海拔属性进行置换

  2 纠正出现错误的点。

03)引入开放地图数据:

  1 通过uv坐标映射范围成最大最小经度纬度

  2 osm的经纬度采样“海拔经纬度坐标属性”

接下来

正式制作

          使用软件:houdini17.5.229

01 获得&转换地图数据

1获取开放地图数据 

准备工作

首先)更新“游戏工具”标签

游戏标签增加了很多工具

○ 具体操作 ○

任务1) 首先需要“开放地图数据”  

     到“开放地图网站”下载有海拔信息的地图数据

a)进入开放地图网站: openstreetmap.org/export 

b)左侧点击“手动选择不同的区域”

任务2)然后需要“海拔数据” 

问题)这个网站没有此数据

❖解决方案)

A)另一网站获取文件(http://dwtkns.com/srtm30m/

关于数据:SRTMHGT文件

    1)Shuttle Radar Topography Mission:航天飞机雷达地形任务。

2)点击黄色瓷砖下载相应的数据。

    3)Tiles(每块瓷砖)是从NASA服务器下载的纬度/经度投影(EPSG:4326)中以1弧秒分辨率(3601x3601像素)压缩的SRTMHGT文件。

        B)找到某个区域的“左下角,右上角”“坐标”

执行)

 A)下载文件:并且知道了“左下角”坐标。

 1)点击一块Tile,首先注册一下NASA。点击才能“下载”

B)还有显示它的“左下角坐标”,但是没有“右上角坐标”

(这里是:左下角坐标N39W032)

问题) 没有“右上角坐标”

    分析)可以参考一下旁边有连续连接Tile的坐标规律,比如这个四个Tile区域; 

❖解决方案)可以推断出“右上角坐标”N40W031

任务3)回到“开放地图”网站找到对应区域

执行)

1)输入对应的左下角=N39W032,右上角坐标N40W031:

        2)点击下载API:文件名叫map

        3)重命名azores.osm(亚速尔群岛)

2 转换获得的数据

○两个文件○

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

○ 具体操作 ○

解决方案)

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

       ❖ 2)用ps打开。

测试)

           a)图像模式转成32位。

           b)使用曝光命令调节,白色就是高度信息

            3)保存tif格式。

02 海拔属性置换&纠正

1 引入海拔属性进行置换

○ 节点 ○

○ 具体操作 ○

1)geo内建立sop_osm_import节点

(osm=open street map开放地图) 

    1-1)导入osm

需求)几何表格里有点对应的“经度”“纬度”。  我们需要经纬度与SRTMHGT文件进行匹配。    

执行)

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

    3)引入“海拔贴图”//azros.tif;//输出属性alt(altitude海拔)

(现在grid每个点上都由alt高度属性)

需求)将这些数据转换成高度

执行)

    4)pointwrangle:  

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

//-- 1b alt属性值在-1~1之间,乘32767把grid转换成米

//-- 1c 再加个比例因子,依据下载的Tile的经纬度计算tile的边缘长度 但是因为地球表面有扭曲,这里乘引入的RSTM海拔信息,添加一个浮动滑块amp振幅

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

//-- 2 置换到y轴上

v@P.y += offset;


问题1)产生一个非常高的海拔

解决方案)改变“比例因子amp”

amp=0.001

2 纠正出现错误的点 

○ 节点 ○

○ 具体操作 ○

问题2)残留一些细竖线;这些就是ps中的那些白点

改进)

1) 判断偏移,高于30(这个数值参考几何图表看y轴的高度,作者的是一万,我的是高于30)的移入一个组,设置偏移=0

    if(offset>30.0){

    @group_error = 1;

    offset=0;

}     

问题2a)效果仍然有问题

解决方案)在attribfrommap1过滤设置中

问题2b)还是有些点要纠正

测试)将error组中的那些点设置成红色

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

这些要纠正的点,需要跟周围融合一下

解决方案)

通过模糊出错点的模糊属性,以适应整个地形

    1)增加attributblur节点

    2)新增加pointwrangle,条件判断取消

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

v@P.y += offset;

问题2c)还是有点没有纠正过来

分析)因为模糊之前,这些要纠正的点alt属性也应该=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 引入开放地图数据

1 通过uv坐标映射范围成最大最小经度纬度

○ 具体操作 ○

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

    03)pointwragle3

问题1)grid上需要“经度”“纬度”属性    

分析)

sop_osm_import节点的几何图表

1)最大最小的“经度lontitude”“纬度 latitude”

    2)理论上相当于下载的Tile的坐标。

    3)引入“经纬度”为grid的点生成坐标。

执行)

1)sop_osm_import连接pointwrangle3的“槽2”

 2)vex代码

//-- 1 引入经纬度 

//-- 1a 因为输入的面有些锯齿边缘所以不是整数;但经纬度是整数,所以四舍五入

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坐标映射成纬度最大最小值建坐标属性 

解决方案)

    1)使用uv Texture 产生uv坐标属性    

现在有了uv相对坐标属性

   2)将uv坐标范围映射成“经纬度最小最大范围”

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

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

    3)创建经纬度坐标属性   

//--  创建矢量变量坐标

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

//--  创建经纬度属性

v@latlon = latlon;   

2 osm的经纬度采样“海拔经纬度坐标属性

执行)

    1)pointwrangle4:

        a)“槽1”连接sop_osm_import1b)"槽2"连接“pointwrangle3”

b) vex代码:

 //--  将经纬度转成矢量坐标系;

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

//-- 3 使用uvsample在各自的经纬度坐标上采样网格的位置,

    //从1接口-想要匹配的位置采样,还有1上的lanlon属性;最后采样应用在0接口-的位置上

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

可视化地图数据&地理数据

今天就到这里,收功

教程翻译自entagma的网络教程

下一节::20180924 Crochet - Blending between Delaunay and Voronoi

电子邮箱:oneinchtime@126.com

公众号:

微信号

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容