kikita & Maps

GIS,spatial and artificial intellegence learning and share

​ 经常看到官微、公众号的各种推送,了解到很多轰动一时的大片和电游的视觉制作都有CityEngine 助力过。CityEngine 在影娱视觉行业早已硕果累累,而对于GIS大众,CityEngine 算是刚从幕后走到了台前,从神秘娱乐圈走近了烟火人间。这几年来,这个不姓“Arc”的非主流产品在不断地推陈出新,吸引着慕名围观的用户去了解。3D模型的纹理贴图问题通常是建模中的高频问题,作为前排围观群众之一,我今天就用CityEngine做一面“墙”娱乐一下吧。

环境: Esri City Engine 2017.1

​ 在 CityEngine中的 shape 对象具有material 属性,这一属性可以控制模型的纹理贴图、阴影效果、外观等。CityEngine 支持的纹理图片的格式有:**.bmp、.gif、.jpg/.jpeg、.png、.tif/.tiff**。 CityEngine贴图支持6个纹理通道,它们通过特定的关键字来表达,如下:

uv-set Texture Layer
0 colormap
1 bumpmap
2 dirtmap
3 specularmap
4 opacitymap
5 normalmap

下面我通过几个实例来说明下它们的用途:

​ 基于共同的基础脚本向下进行,这里不再解释,相信你一看即懂。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* File: MyTestforBaseTexure.cga
* Created: 21 Mar 2018 08:26:37 GMT
* Author: Xiaoyan Mu
*/

version "2017.1"
attr height = 6
wall_tex = "facades/textures/brickwall.jpg"
dirt_tex = "facades/textures/dirtmap.15.tif"
graffiti_tex = "facades/kiktia/Graffiti.jpg"
Lot --> extrude(height) Building
Building --> comp(f) {side : Sidefacade}

material.colormap

Read more »

我们可以将2D矢量数据、3D模型格式导入到CityEngine 中使用,前者一般作为CityEngine shape 来使用,后者作为模型来使用。

OBJ,DAE,FBX这几种模型格式导入时可以作为两种角色来使用,shape 或 static model。这是由导入窗口中的 Import as static model 设置控制的。

Import as static model

When checked, the file will be imported ‘as is’ and will not be modifiable by cga rules.

  • Shapes—Serve as a base for CGA generation. A typical example is footprint data.
  • Static models—Can be scaled, rotated, and translated after import but cannot be processed further with CGA.

通过如上说明,我们可以清晰的了解到把模型转为shape或Static Model的差异。 一般实际应用中,我们会把当作“素材”使用的模型小件作为static model用;而把表示基础结构的模型作为shape来使用。

static model导入之后,仍然可以再转换为shape,操作:菜单栏 Shapes->Convert Models to Shapes。成为shapes 之后,就可以通过cga对这个模型的继续进行改造了。

在如下示例图中了解:

这是一部老片。

年少无知的时候,看到题目《闻香识女人》,暗自以为这是一部有关调情高手的电影,完全无感,从此错过。

在没有很多电影可以走入内心的今天,翻看旧电影真的是种享受。竟然有几句台词可以让我记住和感动。


Now I’ve come to the crossroad in my life. I always knew what the right path was. Without exception. I knew, but I never took it. You know why. It’s was too damn hard.


But there is nothing like the sight of an amputated spirit. There is no prosthetic for that.


我虽不是很相信人有灵魂,但我确信看到过人性的高贵。

说到免费开放的数据,自然会想到 Open Street Map,这里分享下在 ArcGIS 产品线中osm数据的使用实践。

环境:ArcGIS Desktop 10.6, Esri CityEngine 2017.1

在ArcMap中使用osm数据

一般情况下,我们可以在 Open Street Map 官网可以通过指定范围直接下载osm格式数据,然后在 ArcMap中直接读取。如下,以Esri中国所在的金泰大厦为中心的数据:

ArcMap直读OSM

osm数据是基于xml的数据格式,ArcMap不能直接编辑。如果希望导入地理数据库中编辑,可以利用插件,这是Esri额外提供的一个桌面端的免费开源的osm插件,ArcGIS Editor for OSM 10.6.x Desktop。 通过这个插件可以下载、更新OSM数据有关这个插件的源码、文档,可以在Github上获得。

OSM is an XML-based format used to describe vector data in a map. It defines three basic data types—nodes, ways, and closed ways—which are used to describe all the other elements:

  • Nodes—Points between which segments are drawn.
  • Ways—Ordered list of nodes, displayed as connected by line segments in the editor.
  • Closed Ways—Ways that go in a complete loop. They are used to describe areas such as parks, lakes, or islands.

以前10.3年代的时候,整理过一次简单的说明,点这里直达。通过测试,相同的网络环境下,官网下载osm数据,之后再使用 Load OSM File 导入GDB,效率明显优于直接使用 Download OSM Data导入GDB。

在CityEngine中使用osm数据

Read more »

​ CityEngine 中的Map Layer可以参与到批量建模当中,根据角色的不同可以分为Terrain,Texture,Obstacle,Mapping,Function几个类型的图层。

Terrain Map Layer

​ 顾名思义,用于表示场景的地表结构和底图图层,这个图层可以由一个DEM和一个影像共同构成。 这类图层在创建的时候,可以设置影像取值的通道、高程的拉伸范围、影像的尺寸、锚点位置、偏移量等参数。

​ 在图层创建之后,我们可以看到属性窗口中,有这样一段代码表述了上面的一些设置:

1
attr elevation = map_01(brightness, 0.0, 150.0) + elevationDelta

这时,有个疑问,elevationDelta 是什么?如何体现出来的?带着这个疑问我们来看看CE对于场景高程的作用机制。

导入CE场景中的道路线数据一般被识别为Graph Segment,静态模型一般为Static Shape,这两种类型数据可以通过 Align graph to terrain,Align shapes to terrain 来向地形数据对齐。在实际应用中,很多建筑物或道路的底面是个平面,需要将地形整平到与模型底面完美贴合,这时再使用工具 Align terrain to shape 来解决这个问题。

这时保存场景,在CE的工程目录的data文件夹下,就会出现一个场景同名的文件夹,并在其下自动生成一个16bit的栅格数据,储存地形变化量,这个栅格数据即为 elevationDelta。当预览数据时,从渲染方案上可以得到直观印象,灰色为无变化,黑色为减低,白色为增加。

0%