本文档为Esri CityEngine学习文档,是CityEngine_2011_Tutorials 官方示例教程2—— “Tutorial_02_Street_Generation__2011_2”的中文翻译稿,由网友冬冬翻译整理。
本教程将对CityEngine中建立街道网和建立精细街道模型的方法进行讲解。自动生成的街道图能够反应出受到各种障碍的影响,如湖泊和地形等。在本教程的第二部分,将讲解如何根据街道图创建街道图层。应用道路规则到道路数据上,能够生成精细的街道模型。在本文的最后部分,展示了一些特定属性信息下生成不同样式的道路网络。
在城市环境中,道路的放置受到很多的限制。如湖泊、河流或公园,这些地方很可能不会有道路网络分布。在CityEngine中,你可以创建一个障碍图层(obstacle layer)来控制这种表现方式。
创建一个新的地图图层【Layer】 → 【New Map Layer...】;
选择Obstacle(障碍),并单击下一步;
从地图文件夹(maps)中选择文件“obstacles.png”作为障碍文件;
将对齐位置设置为中心点,并保持比例按键按下;
将X size(X的大小)设置为3000;
单击Finish结束设置。
提示:如果在viewport视窗中没有显示障碍图层,则通过视图设置菜单切换到纹理阴影模式。
我们创建的街道需要遵循高程地形。这将通过创建一个由灰度高程图生成的地形图层来获得。
在文件导航(Navigator)窗口的地图文件夹中,选择图像文件“elevation.jpg”;
将图像拖拽到你的3D视窗中;
从地图文件夹中选择“topo.png”作为纹理贴图文件;
将max. elevation(最高海拔)设置为250;
与前面一样,将对齐位置设置为中心点,并将保持比例按钮按下;
将X size设置为3000;
单击“Finish”结束;
在场景视窗中选择障碍(Obstacle)图层,在Inspector视窗(可以通过【Window】 →【Inspector】方式打开)中,将其Elevation Offset修改为-15 。这样做可以防止在ViewPort窗口中两个图层互相覆盖。
现在可以开始生成街道网络。
通过点击viewport视窗中的空白处来取消对障碍图层的选择;
通过【Graph】→【Grow Streets...】方式启动街道生长对话框;
将街道数修改为1500;
在“Environment Settings”组中,从“Heightmap”的下拉选项中选择你的地形图层;
从“Obstaclemap”的下拉选项中选择你的障碍图层;
单击【Apply】,并关闭窗口。
在生成或导入道路模型时,街道和十字路口的形状可能会产生冲突,这些冲突在图中以带红色点的线段显示。
这些冲突是由图形的重叠导致的,通常情况是由于道路中心线上结点间距离过短造成的。你可以尝试使用手工编辑道路网的方式来解决冲突,也可以使用图形清理工具“Resolve Conflicts(解决冲突)” 选项(【Graph】->【Cleanup Graph】)。
我们现在只对街道感兴趣,因此:
在“Viewport”视窗中单击右键,【Select】->【Select All】,选择场景中的全部要素;
选择Inspector”视窗中的“Blocks”选项卡;
将“shapeCreation”属性设置为“false”,通过单击“Off/On”开关。
此操作将在街区(blocks)中创建地块形状的功能设置为不可用。
小知识:当你处理较大数据量的道路网时,此功能可以用来阻止街道的形状创建以提高软件性能。选择一些道路和结点,在它们的“Inspector”视窗中的“Shapes”选项卡中,将“shapeCreation”的参数设置为false,能够使这些街道线和结点无法生成道路和路口。
已生成的道路网能够进行交互式优化:
在空白区域创建更多的街道,选择一条或临近的几条街道,在街道生长对话框中调整你要生成的街道数,并单击【apply】按钮就会自动在该条路段上自动生成相应数量的街道(随机生成)。
选择你希望删除的街道,通过菜单栏中的【Edit】->【Edit】进行删除;
手工创建新的街道,使用“Create Street”工具(快捷键:G);
转换道路,设置道路宽度,修改道路弯曲,使用“Edit Street”工具;
使用变换调节器来实现单一或一组道路的转换,旋转及伸缩。
选中一个或多个道路段;
打开“Inspector”视窗中的“Segment”选项卡;
通过设置“streetWidth”参数,修改道路宽度;
场景中的地形海拔看起来有些高。
在“Scene Editor”视窗中,选中地形图层;
打开图层属性“Layer Attributes”组;
将高程属性的最大高度值“max height”由250改为220。
小知识:你同样可以修改其他图层的属性。如果你有另外一个不同的高程图,选择你的新地图,“viewport”视窗中的地形也会随之改变。
现在你需要根据新的地形让街道网重新适应地形:
在“Scene Editor”视窗中选择街道网图层;
打开图形适应地形话框:【Graph】->【Align Graph to Terrain...】;
选择图形适应地形方式 :“Project All”;
选择地形图层;
单击【Finish】排列图形元素。
使用【Layer】->【Align Terrain to Shapes...】功能,地形会发生变化并与形状贴合。
选中场景中的全部街道图形;
打开图形对齐对话框:【Layer】->【Align Terrain to Shapes...】;
使用默认设置,单击【Finish】结束。
当地形图层的线框图被激活之后,适应后地形图的改变看起来会更明显些。
在“scene”视窗中单击街道网格图层前的眼睛图标,使其不可见,再选中地形图层
在“Inspector”视窗的图层属性(Layer Attributes)组中,将线框图的透明度(Wireframe Alpha)设置为0.3
在3D视窗设置中,使线框图模型处于激活状态(viewport视窗上方的工具条)或者按一下“7”键
小知识:快速验证修改效果的方法,是在“Inspector”视窗中切换“elevationDelta”的激活状态(在地形图层选中的状态下)
小知识:用来构建地形的原始高程图并没有被修改
当使用一张高程图创建地形的时候,高程图的分辨率决定地形图的分辨率。可以在“Inspector”视窗的“layer attribute”组中对分辨进行手工调整(在地形图层选中状态下)
较高的分辨率有助于提高对齐后的地形图的精确度
小知识:需要注意,地形图层设置较高的分辨率会降低3D视窗的显示性能(取决于你电脑的显卡性能)
你可以直接打开“Tutorial_02_Streets/scenes/streetTutorial_01.cej”查看本教程第一部分的结果。
你可以继续在已经完成的场景中进行接下来的学习,或者直接打开“Tutorial_02_Streets/scenes/streetTutorial_01.cej”场景。
可以看到图中有5中不同类型的街道形状被创建了,这些形状已经被赋予了"start rule(初始规则)",在“Inspector””视窗中显示了被选中形状的“start rule(初始规则)。
下图中以不同演示区分了不同类型的道路模型。初始规则是规则文件十分重要的一部分。
现在执行最后一步:创建真实的3D街道模型。应用CGA规则“rules/simpleStreets.cga”到街道形状上。每一个不同类型的街道形状都有一个独特的CGA初始规则作用在其上。这些初始规则的描述如下。
街道(Street):根据路宽应用街道贴图;
人行道(Sidewalk):应用人行道贴图,分布道路小品如行道树、路灯等;
十字路口(Crossing):应用道路底色贴图;
交叉路口(Junction):同十字路口;
连接入口(JunctionEntry):同十字路口。
查看“simpleStreets.cga”规则文件的细节,规则语法。参考CGA模型语法教程进一步学习该语法。
在“Scene”视窗中选择“Streetnetwork”图层
【Shapes】->【Assign Rule File...】选择“Tutorial_02_Streets/rules/simpleStreets.cga”规则文件
框选一些街道模型
单击上方工具条中的生成按钮
你同样可以打开“Tutorial_02_Streets/scenes/streetTutorial_02.cej”场景,生成街道,以查看本部分教程示例的结果。