This Asset is used to place Windows, Doors and other Decorations such as Greebles / Nurnies. It replaced all other WindowPlacers in prior releases.
All new Building Generators use this Asset to place Custom Props such as windows, doors.
It can place the incoming Props from the second input with group filtering. (Old Method and the quickest if you only want to place one or a few props.)
A more efficient method is to create a OBJ Subnetwork and inside there import the assets with a prefix name such as: widget_0, widget_1, widget_2.
If Create @primID per Face is disabled the asset will look for an udim attribute. Based on this attribute it will chose one of the widgets by random. This way each Building can have their own Windows. If it cant find any udim attribute it will add 1001 for all of them and always chose the same widget. If @primID will be created per Face each face will chose a random widget.
This HDA becomes mandatory when creating Building Generators. It can also handle Building Set Props. Look at the mbSkyscraper.hda for how such a workflow can be implemented in your own Building Generator.
This asset also has the option to Instance the Prop and therefor load it only once. This is almost a must for heavy Buildings as this can handle over 50'000 window placement in 10 seconds. Without instancing this might take minutes. It will also save lots of memory as the objects will be packed. Check the Introduction part about Instancing in the Houdini Doc if one is not familiar with Packed Prims and instancing in houdini.
Point Clouds: Toggle to output Point Cloud with i@nID, matrix @orient or v@up and v@N output for export to Maya, Cinema4D or Game Engines. The point cloud can be imported with the Houdini Engine and uses as an nParticle System. (Use a .bclassic format for the point cloud as there seems to be some bugs with .bgeo when importing to maya.)
Master Example File: http://www.microbot.ch/microcity/current/examples/170817_mbDecorator_Examples.hip
Note: Once you add More Props into a OBJ Subnet they might not appear at first in the viewport. This is because there was nothing changed in the Geo themself and no update or recook has been invoked. Change the seed value a bit to invoke an update.
Place Windows with Group Filtering:
Props Assets inside subnet: 2 different windows placed. create @primID per face enabled:
Note: If instancing is enabled all hacks, random rotation etc wont have any effect.
Note: It is a good practise to model all Props in the proportion of the size of the tile. Otherwise normalize the prop with transform SOP and put follwing expression in scale:
1/bbox(opinputpath(".",0), D_XSIZE), 1/bbox(opinputpath(".",0), D_XSIZE), 1/bbox(opinputpath(".",0), D_ZSIZE)The Asset has an option to allow normalization on the fly and also detects different scales for props. This might not affect non instanced loops but when using Instances this calculation will take some performance as it has to loop thru all the props. A better way to normalize 100 of props would be to use the Python Panel and included mbPropManager which allows to select a subnet and Normalize all Geometry Props in there with one click. The normalization can also be undone.
General Note: Make sure you bake Props to .bgeo or lock them up and clean out the Node before placing them.
By Default if there is no input the asset targets to an internal subnet as can be seen in the Parameter Objects Subnet. Containing a simple 1x1 grid.
Select the asset and hit i to dive inside this subnet. You can modify the prop directly in there.
Additional Hacks: (Dont work with instances. Only use these to fix broken things or know what youre doing)