• Welcome to the Community Forums at HiveWire 3D! Please note that our store and forum are on two separate servers so you will require a separate login for each. The store will ask you for your Real Name (WILL NOT BE displayed to the public) and the forum will ask you for a User Name (WILL BE displayed to the public). You may use the same email address and password for both.
  • The 14th Annual Songbird Remix Open Rendering Season Contest is now open! See the contest thread for details.

RELEASED The "Scatter Tool" plugin for Poser

Ken1171

Wise
Contributing Artist
I have been showing some of this at the galleries here at HW, so you might have seen some results already. If not, the Scatter Tool is a new plugin for Poser that scatters a prop over the Poser ground plane. Each copy can have variations in scale and rotation, so they don't look all the same. As long as it's in the same session, the tool will also keep track on each object, so they are placed without falling on top of each other. This is the interface so far. Simple but effective.


The main parts are:

* The props list on the left: it will list all props currently loaded into your scene. Figures, lights, and other types of objects will not show in this list. It will also not include props that have already been scattered by the tool (to avoid clutter). If you have loaded new props after launching the tool, you can double-click this list to refresh it. When you select a prop from this list, it will become the current item to scatter, and its name will show up at the "Selected Scatter Prop" area.

* Scatter Parameters: Here is where you choose how many copies you want to scatter from the currently selected prop. The "Default Item Name" is a prefix that will be added to each copy, so they don't interfere with the existing objects from your scene. This name is also used by the "Remove Selected" button. Once you start a session, you shouldn't change this.

* Variations: This is the part where we configure how much scale and rotations variation we want to have in general. Both options can be toggled on/off with the checkboxes. When Scaling is enabled, you can control 2 sliders that represent the minimum (left slider) and maximum (right slider) scale variations. If min and max values are the same, all scattered items will be of that specific size. If min=0 and max=100, the smallest items will be tiny, and the largest will be of the actual (current) item size. You can scale objects in advance to make that the largest size.

Rotations only happen in the Y axis, meaning items can only be twisted around. I could expand this to have 3 sliders, so we could control rotations in all directions, but in practice, I have only found it useful to rotate in the Y axis. The slider goes from zero to 350 degrees. It doesn't go to 360 because that would be the same as no rotation at all.

* Progress bar: This is located just below the variations section, and it informs the scattering progress as it happens.

* Scatter Selected: This button scatters your selected prop, using whatever parameters and variations you have selected. Once you press the scatter button, you can press it again to repeat the operation as many times as you want, until you have the desired number of items in your scene. However, when you press the "Remove Selected" button" (explained below), it will remove ALL copies at once.

One nifty thing is that the tool will automatically configure your prop by resetting the pivot points so they are centered and aligned correctly for the scattering process. It is common for props to have the pivot point centered to the object, or at a random place in some cases. None of this would work with the Scattering Tool, but all of that is automatically fixed by the tool when you press the scatter button. However, keep in mind that props that were saved to the library with translations and/or rotations cannot be fixed automatically. In an ideal world, content creators would not create props that way, but it happens.

* Remove Selected: This button removes all instances of the currently selected prop from the scene. This is done based on the prop name. All props with the same name will be considered the same, and you can easily rename props to make them different, even if they are the same prop. The tool will ignore the numbers automatically added to the end of the name when we add a 2nd copy of the same prop to the scene. It will only look at the "base" name before the suffix numbers.

To remove a different object, first select it at the props list, and then press the remove button. ALL copies of that object will be removed at once. Please note that ONLY the scattered objects created by this tool will be removed. The original ones will stay on the scene, so you can scatter them again.

For example, if you load 2 cubes and name them as "BoxOne" and "BoxTwo", the Scatter Tool will consider them as different objects that can be scattered separately. This is useful when you want to use different morphs and/or textures on them.

Now let's see some examples of what we can do with this tool.

A) Grove: Created with 2 grass patches, and 1 rock. The tree was added manually afterwards. I have scaled up one of the rocks afterwards to make it stand out more.



B) Maze: This was created with just a single cube, the Poser primitive from the props library. I have scale it up and then stretched it upwards to make it taller. If we set it the right size, the blocks merge and look like seamless walls. Variations were disabled here.



C) Urban city: This has used 2 cubes, each with a different texture and scaled in different sizes to look different. In this example I have only used 2 cubes, but it would look more diversified if I used more. This is where it becomes important that every item will fall at a different place, so they don't overlap (this happens automatically).



D) Morphed terrain: In this example. I have used Poser's built-in Morphing Tool to sculpt some hills and valleys on the default ground plane, and then notice how the scattered objects follow the morphed surface. They stick to the surface, and this happens automatically.

MorphedSurface.jpg


E) Grassland: This scene was created using just 1 single grass patch. Variations help making each look different, giving it a more natural look.



F) Make your own: This scene has used 1 grass patch, 1 rock, and 1 tree. It's basically whatever you want. Create complex scenes in seconds! ^^



The tool is still under development, and I would like to add more features, like the ability to align scattered objects to morphed surfaces. As it is, it follows the surface but does not align to it. I am not sure how to do this, or if Poser can actually provide enough information to do it, but it would be nice if I could add this.
 
Last edited:

Miss B

Drawing Life 1 Pixel at a Time
CV-BEE
Oh me too!!

BTW Ken, by Poser ground do you mean the Construct, or the old, pre-PP11 Ground plane. I ask because I never use the Construct.
 

Ken1171

Wise
Contributing Artist
Oh me too!!

BTW Ken, by Poser ground do you mean the Construct, or the old, pre-PP11 Ground plane. I ask because I never use the Construct.
It's the standard Poser "ground" plane. I never use the construct either. I have tried, but I couldn't get anything to my liking with it. I prefer using my own stuff. As far as I know, the default "ground" plane cannot be removed from the scene - it can only be hidden. It has enough geometry and a reasonable size to do the job well. It can also be scaled up and down, so the default size is not a limitation. It can also be sculpted with the built-in Morphing Tool, as demonstrated above, so we can have any shape we want with it.

As it stands, the tool can scatter props over the morphed plane, and the spawned instances follow it's surface. I am trying to figure out if I can make them align to the surface curvature as well, but that seems complicated. Not sure if it can be done.

Poser Python provides a normal object for every vertex on a surface, and I was wondering if I could use that to align a prop that is sitting on top of it (a ground plane vertex). Under closer inspection, the vertex "normal" is just a XYZ coordinate, and I am not sure what it means. I was expecting a vector, or something, that indicates a direction. Poser Python doesn't seem to have any functionality to align an object to a normal, so I am not sure how to do this.

I was wondering if I could create a normal vector by using the surface vertex and it's corresponding normal coordinate, but I am still not sure what these normal XYZ coordinates mean to Poser. Since Poser doesn't have the feature, this will require some algebra.
 

caisson

Admirable
Contributing Artist
Wow, this is looking interesting! I have a bunch of thoughts -

Can you get the scattered props to align to the surface normal of the polygon(s) they are placed on?

If this was to be used for billboards i.e. single-sided polygons could there be a control to orient them to face a selected camera?

Would it be possible to have a selection for changing display style of selected scatters (especially to Bounding Box) to help with speed of the Preview window?

Density/placement control - the only scatter tool I have used to make images was the Octane to Poser plugin (I don't use currently as I don't have an Nvidia card installed). The way it worked was to take selected mesh items, define them as scatter objects, then use a csv file that instructed the renderer where and how to render the instances. Mesh items were assumed to be saved at world zero. Density and placement were controlled by using a grayscale map where white was 100% density and black was zero - obviously could only be used with a UV'd base mesh. The ideal with Poser would be to use weight painting to control this :D

I did find a screenshot of the dialog for the Octane plugin from about 5-6 years ago -

inst ss 3.JPG


Look forward to seeing more development!
 

Ken1171

Wise
Contributing Artist
Last night I have added a new feature to the Scatter Tool. Whenever we spawn a number of props, it seriously clutters the Hierarchy Editor. The idea to help with this was to create a grouping object, whenever the tool is used, and group all the spawned props to it. This way we end up with just a single item on the Hierarchy Editor (no clutter!), with the added benefit that we can toggle their visibility with a single click. Also, grouping objects won't show in renders, so they are a convenient way to manage scenes.

The tool checks if the grouping object already exists when launched, so it won't be duplicated. If the grouping is empty when the tool is closed, it will remove it automatically. Much better now - no clutter! ^^
 

Ken1171

Wise
Contributing Artist
Wow, this is looking interesting! I have a bunch of thoughts -

Can you get the scattered props to align to the surface normal of the polygon(s) they are placed on?

If this was to be used for billboards i.e. single-sided polygons could there be a control to orient them to face a selected camera?

Would it be possible to have a selection for changing display style of selected scatters (especially to Bounding Box) to help with speed of the Preview window?

Density/placement control - the only scatter tool I have used to make images was the Octane to Poser plugin (I don't use currently as I don't have an Nvidia card installed). The way it worked was to take selected mesh items, define them as scatter objects, then use a csv file that instructed the renderer where and how to render the instances. Mesh items were assumed to be saved at world zero. Density and placement were controlled by using a grayscale map where white was 100% density and black was zero - obviously could only be used with a UV'd base mesh. The ideal with Poser would be to use weight painting to control this :D
I will answer all your questions when I am back from lunch. ^^
 

Ken1171

Wise
Contributing Artist
Can you get the scattered props to align to the surface normal of the polygon(s) they are placed on?
If you look at my last post above yours, I was discussing exactly that point. :)

If this was to be used for billboards i.e. single-sided polygons could there be a control to orient them to face a selected camera?
Yes, that would be rather simple to add, but the prop axes and orientation would have to be properly configured for this to work as expected. For instance, if the axes order is not right, the plane will not point where you want it to. At best I could make sure the pivot point is centered, but I cannot predict the rotation order it was originally created with.

I can add an extra option to create billboards and configure the props to behave as such, but it can only assume the selected prop is configured properly.

Would it be possible to have a selection for changing display style of selected scatters (especially to Bounding Box) to help with speed of the Preview window?
On one hand, that might sound like a good idea. However, bounding boxes will not show you if the current scatter gives you the looks you want. You will only know after rendering. On this side, I have added a new feature today that automatically groups all scattered objects inside a grouping object, so we can toggle visibility of everything with a single click, plus allow repositioning all the props as a whole, and also reduce clutter in the scene.

I use this when I want to work on a character placed on the scene, without the performance issues of displaying everything else. I make all props invisible with a single click, work on the rest of the scene elements, then toggle visibility back before rendering. When I made the "maze" scene, I have noticed there is a general slow down even when all spawned props are a simple cube. If performance is your concern, toggling global visibility is the better solution. :)

I did find a screenshot of the dialog for the Octane plugin from about 5-6 years ago
Oh yes, I have used that scattering tool from Octane many times, and it has pros and cons. It can only perform scattering in renders, you cannot preview how it will look like without rendering first. That means your scene will remain empty the whole time, since objects are never added to the Poser scene - only to renders. The scene will remain empty before and after rendering. This obviously makes it hard to compose scenes with characters, since we don't know if it will end up inside a rock or a tree. My solution actually populates the scene, making composition easier.

Coincidentally, it also uses the Poser ground plane by default. It does have an option to follow surface normals, but that is done in Octane, and not in Poser. Octane does feature an align to normal option, while Poser doesn't. If I want that feature, I will have to code it by hand - assuming Poser has enough information to allow it. I really want to add this feature, but I am still not sure how to do it.
 

Ken1171

Wise
Contributing Artist
Here's how things look after adding the auto-grouping feature to the Scatter Tool. No matter how many props we add, there is only a single item listed in the Hierarchy Editor - the scatter grouping. That's where we toggle global visibility with a single click. Very convenient!

Grouping.jpg

On the fun side, one thing we can do is changing material properties before scattering. In the example above, I have changed the cube color, scattered it, then changed the color again, scattered, and so on, about 4 times to produce the results above. This way we can create even more variations even when using the same prop.
 

Ken1171

Wise
Contributing Artist
One more new feature just added to the tool: it is no longer limited to Poser's default ground plane. You can now pick anything to scatter over. In the example below, I am scattering the red cube over a white one. Note that all instances are still not aligning to the surface normal - they keep their original orientation.

ScatterPlane.jpg

The new interface now has 2 new items:

* The custom "Scatter Plane" object selection, and
* An option in the Scatter Parameters to create billboards. Not implemented yet, but it's coming up next.

ScatterTool.jpg

Until I find a way to align objects to the surface normals, it will be best to keep the scattering plane flat. One thing at a time! :)
 

KageRyu

Lost Mad Soul
Contributing Artist
It would be really useful if it allowed for an object or figure to be set as the ground plane and follow it's topology - this would make it Ideal for use with any number of ground and environment products out there (and other...more interesting experiments...).
 

Janet

Dances with Bees
Contributing Artist
It would be really useful if it allowed for an object or figure to be set as the ground plane and follow it's topology - this would make it Ideal for use with any number of ground and environment products out there (and other...more interesting experiments...).
:yeahthat:
 

caisson

Admirable
Contributing Artist
@Ken1171 - Yep, I use the Visibility option a lot too. The idea behind having display options though comes from wanting to scatter many high polygon objects like trees, particularly if I wanted to then tweak size and position for selected ones. It would be ideal if it were possible to switch styles on a selected scatter group as if it were a single item - texture shaded to bounding box then back again.

I can't see an issue with expecting props to be made to a certain standard for a billboard option, seems reasonable to me.

This may be a mad thought, but strand hair 'grows' from a vertex point perpendicular to the surface - would there be any way of using that as a vector or guide?

@KageRyu & @Janet - Ken has added that option already, see the screenshot - the Scatter Plane is selectable ...
 

Ken1171

Wise
Contributing Artist
It would be really useful if it allowed for an object or figure to be set as the ground plane and follow it's topology
Like Caisson said, it's already done! :D Not figures, but any prop can be picked. If you want a figure, you can use the Grouping Tool to convert it to a prop, and go go from there.

Yep, I use the Visibility option a lot too. The idea behind having display options though comes from wanting to scatter many high polygon objects like trees, particularly if I wanted to then tweak size and position for selected ones.
Ooh, I would be weary about spawning hi-res objects. I suspect Poser will not like that. I know Poser supports instancing (I am counting on that with this tool), but preview performance will suffer. I have tried here scattering heavier trees, and the performance was poor - no wonder. Poser itself isn't very good handling that. I can still look into your suggestion.

And now for the latest news - billboard is now supported, and all you have to do is check the "Billboard" box. Whatever you scatter from this point on will be automatically facing the main camera, and how this will happen will depend on how the object rotation axes were setup. If it's wrong, we can still fix it with the joint editor.

Here's a demo showcasing an entire CROWD of billboard people. They follow the camera when we move it around - but remember: billboard people don't have a top side, so if you raise the camera, they will lay down on the ground! LOL :D

I have setup these 5 props with different textures, and adjusted the pivot points to face forwards, instead of the face up default. This is required for the automatic Poser feature that makes them face the camera. Notice the nice shadows on the ground, that make it more believable. Instant crowds in Poser with a single click, and each is only a single polygon! ^_____^

BillboardCrowds.jpg
 

Ken1171

Wise
Contributing Artist
This may be a mad thought, but strand hair 'grows' from a vertex point perpendicular to the surface - would there be any way of using that as a vector or guide?
Poser was written in C++, and I can only use the parts that were made available through the Poser Python API. Unfortunately, only a fraction of the Poser features can be accessed from there. For instance, we cannot use Python scripts to copy morphs from a figure to the conforming clothing. SMS made sure that cannot be done with scripts, because they pushed that to the "Pro" version only.

My best guess lies on the available vertex normal objects. Those are not really "normals" because those would have to be a vector, and what Poser gives us is a set of XYZ coordinates. I keep scratching my head, wondering what these might mean. I have to do more testings to figure that out.
 

KageRyu

Lost Mad Soul
Contributing Artist
@Ken1171 , sorry I missed that...though for some of what I had in mind converting a figure to a prop isn't feasible...or at least not ideal...
 

Ken1171

Wise
Contributing Artist
@Ken1171 , sorry I missed that...though for some of what I had in mind converting a figure to a prop isn't feasible...or at least not ideal...
The thing about Poser is that once a figure is loaded, it is automatically broken into dozens of separate geometries, which Poser calls "actors". The Scatter Tool can only pick a single actor, so that would be impractical. Conversely, props cannot be converted to figures, but figures can be converted to props. If you must scatter things over a figure, that's how I would do it. You can either export it to OBJ, or use the Grouping Tool to spawn a prop out of it. Either ways can be done without leaving Poser. Dimension3D also has a free script at his site that can convert figures into props with ease.

So there is no lack of ways to do this, and remember - the scatter tool will place objects once, and if you could do it over a figure, posing it would leave the scattered objects behind. If you cannot move/repose a figure after scattering, using a prop version would be pretty much the same.
 

Ghostman

Eager
Contributing Artist
Real cool work. This is something i've wanted for a long time. Semideue started one right before RDNA closed but never finished it.
 
Top