版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Tutorial_06_Basic_Shape_Grammar_2011_11.构建简单建筑物;2.为简单建筑物贴纹理;3.添加LOD;4.建筑物属性随机变化。一、构建简单建筑物本节学习最终要构建一个如下图的建筑物,该建筑物有地面一楼和其他楼层,一楼的正面有一个入口的门,其他窗口都使用的是一个提前做好的OBJ模型。下面开始创建规则进行建模: 为了更好的理解规则,我们自己创建一个新的规则,按照教程中的语句进行规则的书写。1. 在规则文件的最开始处定义建筑的属性(也可以放在规则文件的其他位置)。在CGA文件中,这些属
2、性将对整个规则文件产生作用。这些属性将显示在属性查看器(Inspector)中,可通过属性查看器修改这些属性。attr groundfloor_height = 4 /地面一楼的高度attr floor_height = 3.5 /其他楼层的高度attr tile_width = 3 /将楼面按块划分的宽度attr height = 11 /楼高attr wallColor = "#fefefe" /墙面颜色2. 教程中构建的窗户是使用的一个已经建好的窗户模型window.obj,这个文件存放在assets文件夹中,使用之前也要
3、先定义出来。window_asset = "facades/window.obj" /指定obj文件 3. 下面我们定义第一条规则为Lot. 在属性检查器中,该规则被指定为开始规则。大量的模型是使用拉伸操作创建而来的:/对shape使用height中定义的高度进行拉伸,并命名为BuildingLot -> extrude(height) Building 拉伸之后如下图: 4. 可以通过应用comp()将Buil
4、ding分解为多个面, 生成了正面(FrontFacade)、多个侧面(SideFacade)和一个顶面(Roof)Building-> comp(f) front : FrontFacade | side : SideFacade | top: Roof5. 分解完成之后,就开始开始对这些面进行外观造型。典型的外观造型流程如下:1,将面分解为楼层(Floors)。2,将楼层分解为块(Tile),每一块通常由墙面和窗口构成。这样的细分过程在CGA要素语法的实现过程如下图: /下面的FrontFacade规则将正面沿y轴方向,分割为两
5、大部分,第一部分高度为groundfloor_height的地面一层Groundfloor,剩余的以floor_height高度进行重复分割(以*符号标记),分割为多个Floor。FrontFacade -> split(y) groundfloor_height : Groundfloor | floor_height: Floor * 正面分割之后如下图: 6. 细分侧面:SideFacade -> split(y) groundfloor_height: Floor | floor_height: Floor * Si
6、deFacade规则将侧面沿y轴方向分割也分为两大部分,这两部分使用的都是是相同的Floor对象,因此侧面这两大部分看起来都应该是一样的。只有高度不一样,高度不一样主要是为了与正前面的楼层高度保持一致。侧面分割之后如下图,三个侧面都是一致的: 7. 继续对Floor对象进行细化:/先给每层楼在x轴方向的两端画出宽度为1的墙面(Wall),剩余的部分以tile_width为宽度重复分割(Tile)Floor -> split(x) 1: Wall | tile_width: Tile * | 1 : Wall 如下图:8.
7、 最后对正面的地面一楼进行细化:/同样先在x轴方向的两端画出宽度为1的墙面(Wall),按照tile_width划分为多个Tile,并按照tile_width划分出一个入口EntranceTile。Groundfloor ->split(x) 1: Wall | tile_width: Tile * | tile_width: EntranceTile | 1: Wall 结果如下图:9. 下面对Tile进行定义:/先对Tile在x轴方向中间划分出宽度为2的一部分(对这部分
8、再按y轴方向先划分一个高度为分别为1和1.5的wall和window,剩余的高度也定为wall),然后两边分别划分为宽度大概为1的wallTile -> split(x) 1 : Wall | 2 : split(y) 1: Wall | 1.5: Window | 1: Wall | 1 : Wall 结果如下: 10. 对EntranceTile进行定义:EntranceTile -> split(x) 1 : SolidWall | 2 : split(y) 2.5: Door | 2: SolidWall | 1 : SolidWall 先对
9、入口在x轴方向划分宽度为2的一部分(这部分在y轴方向先划分2.5高度的Door,剩余的大约高度2定为SolidWall.),然后两边各为大约1米的Solidwall。 11. 最后对前面定义的Window,Door,Wall和SolidWall写具体的规则。Window -> s('1,'1,0.4) t(0,0,-0.25) i(window_asset)Door -> s('1,'1,0.1) t(0,0,-0.5) i("builtin:cube")Wall -> color(wallC
10、olor)SolidWall -> color(wallColor) s('1,'1,0.4) t(0,0,-0.4) i("builtin:cube:notex")这里解释一下上面出现的几个命令: s('1,'1,0.4):命令:s(float xSize, float ySize, float zSize)作用设置形状的尺寸。eg1: s(5,5,5) 表示将三个方向的值设为绝对值5eg2: s('0.5,
11、'1,'1.5) 等同于 s(0.5*scope.sx,scope.sy,1.5*scope.sz),如果加上'符号,括号内的值在0-1之间,表示设置xyz的值为原先的多少倍。 t(0,0,-0.25)平移:t(tx, ty, tz) i(window_asset)或者i("builtin:cube:notex")对象替换:i(geometryPath)CityEngine有内置的素材可以直接使用,分为Geometry Assets和Textures。Geometry Asset
12、s: builtin:cube有节点的单位立方体,带有纹理图层的纹理坐标系 builtin:cube:notex单位立方体,不带有纹理坐标系Textures: builtin:default表示16×16黑白方格相间的纹理 builtin:uvtest.png使用CE标准的测试纹理
13、最终效果:到此我们完成了简单建筑物的构建,学习了构建流程,如何拉伸、分解面、分割Tile等。规则可以一步步尝试,也可以替换成其他颜色或将obj替换为其他模型。如下: 二、为简单建筑物贴纹理本节内容开始对之前构建的建筑贴上纹理。使用的规则是在上一节的基础上进行修改。作者也是在学习中,内容中如有不对的地方,欢迎大家指正。1. 开始贴纹理之前,先在规则的最前面对要使用的纹理进行定义。/ texturesfrontdoor_tex
14、0; = "facade/shopdoor.tif"wall_tex = "facade/brickwall2.tif"dirt_tex = "facade/dirtmap.15.tif"roof_tex = "roof/roof.tif"由于要使用的窗户的纹理有9种不同的纹理,这些纹理存放在assets/façade文件夹中。在使用的时候,我们这里定义随机获取其中一个窗
15、户纹理,这样窗户的纹理就是随机的了。randomWindowTexture = fileRandom("*facades/textures/window.*.tif")2. 为建筑物的正面和侧面定义纹理Frontfacade -> setupProjection(0, scope.xy 1.5, 1, 1) setupProjection(2, scope.xy, scope.sx,
16、scope.sy) split(y) groundfloor_height : Groundfloor | floor_height: Floor * Sidefacade -> setupProjection(0, scope.xy, 1.5, 1, 1) setupProjection(2, scope.xy, scope.sx, scope.sy) split(y) groundfloor_height: Floor
17、| floor_height: Floor * 添加红色部分的代码,setupProjection()定义面在scope的xy平面使用color和dirt图片(由通道0和通道2代表)。在使用color map时,纹理图片将以1.5m×1m进行重复贴模。而使用dirt map时,将会在scope的x、y方向平铺。其中setupProjection()命令有以下几种:setupProjection(uvSet, axesSelector, texWidth, texHeight)setupProjection(uvSet, axesSelector, texWidth, texHeigh
18、t, widthOrigin, heightOrigin)setupProjection(uvSet, axesSelector, texWidth, texHeight, widthOrigin, heightOrigin, uwFactor)(1) uvset代表的是不同的纹理图层:(2)axesSelector定义哪个轴分别代表u和v轴,可选的参数有:scope.xy, scope.xz, scope.yx, scope.yz, scope.zx, scope.zy 以scope的轴定义world.xy, world.xz, world.yx, world.yz, world
19、.zx, world.zy 以world的轴定义(3)texWidth和texHeight分别代表纹理的宽度和长度。如果值小于0,则认为可以对纹理做镜像显示,符号表示值大小可以浮动,符号表示相对值。(4)widthOrigin和heightOrigin分别代表距离u方向和v方向的偏移(5)uwFactor设置w轴值相对于u轴的系数,默认为03. 添加Roof规则Roof -> setupProjection(0, scope.xy, scope.s
20、x, scope.sy) texture(roof_tex) projectUV(0)其中projectUV()命令含义如下:命令:projectUV(uvSet)指定纹理应用于哪个uvset。4. 为窗户和门指定纹理:Window -> s('1,'1,0.4) t(0,0,-0.25) &
21、#160; texture(randomWindowTexture) i(window_asset) Door -> s('1,'1,0.1) t(0,0,-0.5) texture(frontdoor_tex) i("builtin:cube") 5.
22、; 定义Wall和SolidWall的纹理Wall -> color(wallColor) texture(wall_tex) set(material.dirtmap, dirt_tex) projectUV(0) projectUV(2)SolidWall -> color(wallColor) s('
23、1,'1,0.4) t(0,0,-0.4) texture(wall_tex) set(material.dirtmap, dirt_tex) i("builtin:cube:notex") projectUV(0) projectUV(2)为Wall和SolidWall定义使用的纹理,使用set()命令定义在material.dir
24、tmap属性,使用dirt_tex纹理。然后定义了将纹理贴在color和dirt通道。set(attribute, bool value)set(attribute, float value)set(attribute, string value)set命令将一个值指定给当前shape的一个属性。属性分为两类,一种是builtin属性,就是内置属性,例如material的属性。另一种是在规则文件中生命的属性。最终结果如下图:三、给建筑物制作LODLOD技术主要是根据距离建筑物对象的距离来调用不同复杂度的模型,即在较远距离时显示复杂度低的模型,在较近距离时显示复杂度
25、高的模型。在CityEngine中为了提高显示效率,也可以使用LOD机制。本节我们就给建筑物模型添加一个简单的LOD机制。当我们要创建大范围的建筑物模型时,可以由此降低模型的复杂度(多边形的数量)。1、添加LOD属性attr LOD = 1在本示例中,只设置两个显示级别:LOD 0:代表较低级别,低复杂度LOD 1:代表较高级别,高复杂度因为模型制作中,我们做的模型已经是搞分辨率的模型,因此现在通过简单的步骤创建低分辨率模型。2 、为模型设置LOD在目前的模型中,对于window类型的模型,之前是使用obj文件创建的一个较复杂的窗户,可以通过使用纹理平面代替obj这种复杂模型。需要添
26、加红色部分的代码:Window -> case LOD > 0 : s('1,'1,0.4) t(0,0,-0.25) texture(randomWindowTexture) i(window_asset) else : texture(randomWindowTexture)当LOD大于0时,使用的是之前创建的高分辨率的窗户模型,否则,使用的是一个简单的平面。同样的,对Door和SolidWall对象也添加类似的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60153-2:2025 EN-FR Hollow metallic waveguides - Part 2: Relevant specifications for ordinary rectangular waveguides
- 【正版授权】 ISO/TR 18155:2025 EN Railway applications - Principles of train detection for operations and services
- 校招三方协议后合同
- 服装的出口合同范本
- 村民办民宿合同范本
- 农村厨房转让协议书
- 出库免责协议书模板
- 教育部做好2025届全国普通高校毕业生就业创业工作(全文)易考易错模拟试题(共500题)试卷后附参考答案
- 个人演出协议书范本
- 区域经理聘任协议书
- 高空曲臂车安全操作规程
- 2025年粉尘涉爆培训题库及答案
- 第4章 学前儿童膳食卫生与保健【教学课件】
- DL-T 1476-2023 电力安全工器具预防性试验规程
- (高清版)DZT 0399-2022 矿山资源储量管理规范
- 智慧售电方案
- 数字化人力资源管理系统建设
- 国有企业投资公司绩效考核管理办法
- 模板支撑系统大样图
- T-CAPDA 006-2020 丙酰芸苔素内酯原药
- 家族财富传承法商
评论
0/150
提交评论