[Houdini]Tops初识

文件在这里:tops_lesson_start-数据集文档类资源-CSDN下载

英文教程:hfoundations_09_tops_city_build.pdf (sidefx.com)

下载好之后我们会依赖这些资源文件来学习

1.Create a city grid

首先设置项目路径,选择File->SetProject.找到tops_lesson的路径,然后点击Accept.

选择File>Save As,进入到刚才设置的路径下(顺利的话此时已经在了),如果没有可以点击左侧的$JOB,然后将本hip保存在这里

 接下来创建一个Trace节点

 替换图片为$HIP下的tex文件夹里的citygrid.jpg,将ScaleToSize设置为500,500

在trace节点里,设置RotateX为-90,Scale为100,100

创建一个Reverse节点来翻转法线,点开点查看视图可以看到目前有很多点

接下来创建一个Resample节点并将长度设为1,然后创建一个NULL节点名字改为CITYBLOCK_OUT然后保存你的工作

2.生成并显示Work Items

回到object层级然后重命名刚才的geo为street_grid

这里可以选择把市口调整为Left/Right方便查看

创建一个Top network节点

 

双击进入Topnet

按下tab > Geometry Import,设置Geometry Source为SOP Node然后点击Choose Operator图标(在SOP Path旁边)将路径设置为刚才的CITYBLOCKS_OUT

 

在Data Extraction下,设置Copy from Class 为 Primitive.这将将文件存储到磁盘,以便下一个TOP检索到它们,这对于分布式计算任务非常重要

将geometryimport重命名为cityblocks,按下Shift+G便可以Cook

Cook之后便可以查看每一个Geo的信息,一共有73个点对应着生成的73的geo,可以通过Ctrl+鼠标中键,右键单独点之后选择View Work Item Output

如果你想要加速你的network进程,那么可以选中localscheduler节点,将TotalSlots选项选为Equal to CPU Count Less One,这将大大加快cook的速度因为更多的进程被使用了

为了能在视口中看到work item,你需要设置一下work item viewer.回到上层节点,创建一个file节点并重命名为work_item_viewer

通常来讲你需要通过File节点来指定一个磁盘上的文件

双击进入work_item_viewer节点,选中file节点,选择Geometry File选择器按钮,

选择$HIP/geo目录然后选择 city_01_cityblocks序列(就是刚刚cook出来的)

 然后增加一个color节点,设置颜色为(1,0,0),滚动时间轴来查看读取不同的区域

 ($HIP/geo/city_1.city_blocks.$F.bgeo.sc,仔细看这个文件名,它里面包含了0-72共73个区域,通过时间线$F来控制显示哪个区域)

将geometry file更改为`@pdg_output`,它的意思是,不从硬盘文件读取数据,而是直接从topnet里面拿cook的数据,如果刚打开项目可能报错,因为此时还没有cook过

同时,在topnet里面选择不同的工作项则可以查看不同的区域

3.增加属性

 

为了创建建筑,想要设置修正过的带有随机高度的地基,你可以通过在geometry层设置一些属性,但是你也可以通过在TOP里做到这点,并且这样会更简单

在TOP下新增一个AttributeCreate节点,并作如下设置:

GenerateWhen设置为Each Upstream Item is Cooked,并添加如下属性

 

base_height属性和height_variation属性,默认值分别为10和rand(@pdg_index)*20

分别代表了基础高度和随机变量

选中AttributeCreate然后按下Shift+G来cook

中键点击工作项(小节点)你会发现多了两个属性

 虽然在geometry里添加属性是可行的,但是在TOP里直接添加属性会更方便

4.为城市网格添加建筑

现在需要用ROP Geometry节点创建简单的建筑,为了看到效果,你需要选中某一个工作节点

在TOP里创建一个ROP Geometry Output,重命名为create_buildings.关闭UseExternalSOP选项.

按下Shift+G Cook这个节点,那些灰色的代表还没有处理。现在可能会报错不过不要紧,因为现在还没有处理任何geometry

双击这个节点进入到geometry层级

创建一个PolyExtrude节点并放置在incoming和输出节点之间,重命名它为block_offset,设置Inset为1,在Extrusion栏下面,关闭OutputSide选项,这会为之后制作人行道留出空间

下一步,添加一个Fuse节点,然后设置SnapDistance为0.2来移除过小的线,注意现在你可以Viewport中看到一些东西了,尽管work_item_viewer节点仍然在报错,让我们稍后解决它

 

 再创建一个PolyExtrude节点,重命名为building_height,设置Distance为@base_height+@height_variation

确定Distance参数为高亮,将其复制到Divisions参数里,并将其除以2

 

 在Extrusion栏里,开启FrontGroup,并且命名为building_top,开启SideGroup,并且命名为building_side,我们将用它为建筑增加细节

 新加一个PolyExtrude节点,并重命名为window_frames,设置:

Group为building_side

Inset为0.05

Divde Into 为 IndividualElements

在Extrusion面板里,开启FrontGroup并命名为window_out

创建一个新的PolyExtrude节点 并重命名为windows,设置Group为window_out,Distance设为-0.05

再新增一个新的PolyExtrude节点,并重命名为extend_roof,设置:

Group为building_top

Distance为0.5

再添加一个PolyExtrude节点,并重命名为roof_edge,设置

Group为building_top

Inset为0.3

在Extrusion栏里,开启FrontGroup并且命名为roof_out

新增加一个PolyExtrude节点,重命名为roof,设置Group为roof_out,Distance为-0.25

这将塑造出屋顶

增加一个Color节点,设置Group为window_out

颜色设为(0.2, 0.2, 0.2) 

 回到上一级,在create_buildings里,更改$F为`@pdg_index`

所以OutputFile会变成$HIP/geo/$HIPNAME.$OS.`@pdg_index`.bgeo.sc

这将会使用pdg的index而不是时间轴作为运算标记

点击ROP Fetch栏,设置CasheMode为WriteFiles.保存,然后shift+g  cook

回到work_item_viewer删除color节点,你将不再看到红色.现在选择不同的节点来看不同的建筑高度

5.组合建筑

为了加速任务进程,你可以使用PDG服务,在TOP网络视口中选择Task-PDG Services,单机AddService.设置Type为ROP Fetch Service,Pool Size为4.点击Add然后点击Start

保存场景然后按下Shift+D再按下Shift+G重新cook它,会发现快了不少

添加一个Wailt for All TOP节点,这会把所有生成的ROP Geometry 节点组合在一起,同时他还会防止在cook时出现的变动,知道全部的cook完成(有一点像Merge)

添加一个Geometry Import TOP,命名为building_merge,设置Generate When为Each Upstream Item is Cooked 设置Merge Operation 为Import and Merge All Geometry

保存场景,选择building_merge节点然后按下Shift+G来Cook 它,当任务完成时,点击最终building_merge节点里的work item,你可以看到整个城市了

回到AttributeCreate TOP,编辑height_variation 属性如下:

值为rand(@pdg_index)*15

这会使得建筑略矮一些

重新编译 你会看到结果

回到上级Street_grid 里面,创建一个颜色节点,链接到Resample后面,设置Class为Primitive,Color设置为黑色(0,0,0),重命名为base_color

 

 创建一个sphere 并设置PrimtiveType为Polygon,UniformScale为5

添加一个Color节点在这个sphere后面,设置Class为Primitive,颜色设置为绿色(0,1,0),命名为transfer_color

添加一个AttributeTransfer节点,链接到base_color和transfer_color后面,将两个颜色的Class属性改为Primitive

 

 取消勾选Point,设置Primitve这里属性为Cd

然后在Conditions栏目里,设置

DistanceThrehold为0

BlendWidth为30左右

让鼠标悬停在视口处,按下空格+Y可以切换显示和隐藏其他物体

 回到TOP网络里,选择attributecreate节点,编辑height_variation属性的值为rand(@pdg_index) * 15 + @Cd.g*30

这会让更绿的区域更高,而它的位置是可以通过球体位置改变的

然后重新编译

 

6.集中于一幢建筑

直到现在位置建筑的高度都是由height_variation随机决定的,如果这里有一幢你想个性化的确定高度的建筑要修改,那么还需要创建一个属性

回到street_grid中,打开显示primitive数字选项

我们可以选择一个数字来让他的属性个性化,比如24

在TOP网络里,复制一个attributecreate节点

勾选Create When 并填入如下属性:@primitiveoffset==24

 在下面的height_variation属性里,右键Delete Channels,并给它一个0值,设置base_height为50,这将让序号为24的建筑高度定死在50

现在重新cook它们,任何时候24号建筑的高度都不会随机变化了,这是通过了覆盖前面属性的方式来做到的

7.标记城市核心位置

为了标记street_grid里面球体的位置,我们需要借助HDA,并且运行HDA的TOP进程节点

在street_grid网络里,选中除了CITYBLOCKS_OUT以外的所有节点,在Assets菜单下,选择NewDigitalAsset from Selection.命名为streetgrid_maker,label 为 Street Grid Maker,存在$HIP/hda文件夹下

 在Operator Type Properties 面板下,点击Parameters 栏,进入到asset,从trace节点拖动

Image Input到参数列表, 再把Scale X 拖到Scale Y, 选择Relative Channel Reference,然后再拖一个Scale X到参数列表命名为Scale,从sphere节点拖动Center并将其命名为SphereCenter,从

attributetransfer节点拖动BlendWidth然后点击Accept

 回到TOP网络,创建一个HDA processor TOP链接到GeometryImport之前,在 GeometryImport节点里,设置GenerateWhen为EachUpstreamItem is Cooked 并将 Geometry Source设置为Upstream Out File。

选择HDA Processor节点,设置HDA文件为$HIP/hda/ streetgrid_maker.hda,点击HDA Parameters栏,可以看到ImageInput,Center,Scale和BlendWidth属性列表

重命名这个TOP为make_citygrid,然后按下Shift+V重新Cook它

创建一个Wedge TOP节点,链接到make_ citygrid之前,设置Wedge Count为4

点击Wedge Attributes一旁的+号,设置Attribute Name为center_wedge然后做如下设置:

Type 为Float Vector

Start range 为 -50, 0, -50, 0

End range 为 50, 0, 50, 0

打开Random Samples

这将会在Start range 和End range之间随机给一个值,后面会作为城市中心的坐标点

选择HDA Processor节点,在HDA参数面板下,设置Center参数为@center_wedge.0, @center_wedge.1, @center_wedge.2

选择make_citygrid节点按下Shit+V

此时应该可以看到有4个工作节点被创建,这是因为上面设置Wedge Count为4

现在你可以隐藏street_grid了,street_grid的作用就是输出hda,他不参与实时显示

现在为height variation添加一些wedging,这样你会得到一些不同的高度变化

选择wedge TOP节点然后点击Wedge Attributes旁的+号,设置Attribute Name为seed_wedge

 

 我们现在需要把所有和输出文件名相关的路径都改一下,还记得刚刚的Wedge Count么?为了和它对应上,我们需要把所有包含.bgeo的路径前面加上.`@wedgenum`。应该有下面四个

make_citygrid HDA Processor

geometryimport Geometry import

create_buildings ROP Geometry

building_merge Geometry Import

 将Wait for All节点替换成Partition by Attribute 节点,点击+号按钮增加一个属性,命名为wedgenum,这会为每个wedge创建一个partition

保存,然后Cook全部。这会创建4张城市地图,你可以通过点击来看它们之间的不同

8.创建道路

在TOP网络里,添加一个ROP Geometry Output节点,连接到make_citygrid 后面,并重命名为build_streets.

取消Use ExternalSOP,在Output File路径里同样添加.`@wedgenum`在.bgeo之前

在ROP Fetch栏里,设置CacheMode为WriteFiles

 

Cook这个节点同样可以得到4个工作项,双击进入到geometry层级,我们将在这一层根据输入制作道路

添加一个PolyExtrude节点在incoming和output之间,设置Distance为-0.05, 取消勾选Output Front,勾选Output Back

添加一个Reverse节点,来把法线反向,然后再添加一个Color节点将所有的城区涂成白色

 

 添加一个Box节点的分支,再在其下添加一个blast节点,设置Group为2,勾选DeleteNonSelected选项(设置只保留一个面)

 

在blast后添加一个Transform节点,并设置:

Translate Y为 -0.05 

Scale X 为 1.05

Scale Z 为 1.05

使其稍微大一点,并下沉一些

添加一个Color节点,并给一个灰色(0.33,0.33,0.33),现在创建一个Merge节点并连接到两个Color节点,确保output是显示的来查看street geometry

保存,回到TOP网络层Cook节点,现在应该可以看到道路了,目前所有的4种变体看起来还是一样的,一会当我们导入更多的city grids后你将会看到不同

添加一个PartitionByIndex节点TOP网络里的最后,第一个节点连接building_merge,第二个连接

build_streets。勾选上UseDynamicParenting选项

Cook这个节点,完成后,点击一个work itme查看

 

如果按下Ctrl+鼠标中键,你会发现有两个输出

还记得我们之前给work_item_viwer添加的文件是`@pdg_output`,这代表我们想要查看TOP的输出,默认是第一个输出,现在有两个输出了那么第二个是`@pdg_output.1`

 

回到Object层级,复制一个work_item_viewer,点击进去修改Geometry File为 `@pdg_output.1`

回到上一级 ,选择PartitionByIndex其中的一个workitem,现在可以看到两个输出都显示出来了

9.导入四张城市地图 

让我们给wedging添加一个额外的变量,我们可以导入四张不同的高度图来为它们创建城市

回到wedge 节点,选择+号按钮添加一个新的wedge参数

设置如下:

Attribute Name 为file_wedge

Attribute Type 为Integer

Start/End 为1,4

这将会创造一个1-4的int 数值,来作为使用不同城市地图的标签

选中streetgrid_maker HDA节点,修改该ImageInput路径,导航进入到more_grid文件夹

然后修改$F为

文件夹里有4张图片,wedge属性会把它们逐一读取进来

重新Cook HDA文件(shift+v)

现在你可以看到不同的高度图生成的城市了

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值