Bifrost Forum
Welcome to the Bifrost Forum. This is the place for artists using Bifrost to ask and answer questions, browse popular topics, and share knowledge about creating effects procedurally using Bifrost. You can also visit the Bifrost Community on AREA to download an array of ready-to-use graphs, read Bifrost news and updates, and find the latest tutorials.
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PPG V1.0 - Procedural Polygon Generation in Bifrost

Message 1 of 19
3307 Views, 18 Replies

PPG V1.0 - Procedural Polygon Generation in Bifrost

Here is version 1 of my compound pack "Procedural Polygon Generation" for Bifrost.


The goal of these compounds is to create a Construction History in Bifrost that uses different simple initial objects - simple blocks of a few polygons - to create complex buildings that automatically adjust to the scale.


The concept for this kind of modeling was presented by my colleague Maxime Jeanmougin at GDC 2022 as a Platinum Games employee, and he referred to earlier work by Akira Saito.


Tested with Maya 2023, 2024 and Bifrost 2.6 ,



If you are working with Maya 2024 then the colors of the node "PPG_diagnostic" are too bright.
Change the "Brightness" in the section "Color Tags" to 0.32 and the "Default Tag Color" to 0.16, 0.16, 0.16
Then re-publish the node to the folder "PPG_V1.0\compounds" with the namespace "PPG" to keep these settings.


Tutorial video:






Labels (3)
Message 2 of 19
in reply to: Roland.Reyer

It's huge work. Thanks @Roland.Reyer 

Message 3 of 19
in reply to: Roland.Reyer

I have some questions regarding PPG_instance
How best to use the instance ID's
These work quite differently to the usual Create Instance node where the oder of the instances can be controlled by an Array.
I would like to control the specific mesh being assigned to rows– however the IDs change when geo is assigned breaking the numerical order.
Create thisCreate thisBut only manage this so far – needs to be arranged in strict rowsBut only manage this so far – needs to be arranged in strict rows

Message 4 of 19
in reply to: Roland.Reyer

Instance IDs doesn't work as intended?
The "Selection Mode" needs to be set to "Sequential". (I will fix this in the next version).
Please let me know if it is still broken.

The trouble with Instance IDs is that the number of instance points is (intended to be) quite variable.


The more pressing question here is: how do I assign different (sequences of) instances to different floors?

Lets say

  • we want the instances A, B, C in the ground floor (randomly)
  • instances 1, 2, 3, 4, 5 in the second floor (in this order, repeating)
  • instances x, y, z in the third floor (randomly)

This is NOT possible in the PPG_instance node itself.

You will have to create an ID array with exactly the IDs for all instances.


You could get the centers of the selected faces, analyze their Y coordinate and from there create an array of IDs for the instancing.


Message 5 of 19
in reply to: Roland.Reyer

Thank you for the response.

I did create an array with the exact IDs.
However the IDs change in a very odd way.
Or at least they did with one particular attempt.
In any case this is the set up and outcome – maybe I am approaching it incorrectly?


I would have though that specifying the ID would limit the mesh assignments to only those ID stipulated.


Message 6 of 19
in reply to: Roland.Reyer

Oh, I see.


The input „face_IDs“ is for selection of the faces, together with the face tag expression.


The input „instance_IDs“ is an array that specifies which instance geometry to use for each instance (in your image there is only one instance geometry).


The IDs should be plugged into „instance_IDs“.

Message 7 of 19
in reply to: trevor

Nice work trevor. Make sure you show us the final result!

Message 8 of 19
in reply to: Christoph_Schaedl

Thank you Oglu
I will attempt to do so
Message 9 of 19
in reply to: Roland.Reyer

Thank you again Roland for your continued support.
Unfortunately I am still confused being new to Bifrost. 
Apologies for the long response. Please bare with.

Generally speaking it could well be I am asking the PPG system to do something it isn't intended to perform as excellent as it is. Equally it could be that I am just not understanding how the ID system works or both.


Being able to throw some Neo-Classical geo at a Bifrost cube and get a stretchy building back is a rather attractive proposition.

In my head if a face has an ID of say '11' then I should be able to place a 'window' mesh version 'Square' directly onto ID 11. Either by directly calling 11 or by an array that associates Square with 11 in some sort of order or specific non-random pattern. Neo-Classical architecture is very strict in its ordering, layering, proportion, ornamentation and weight. Not that I am a student of it – I just follow what my eyes see. It is a pattern that arrays and face divisions would ideally suit.

I could achieve a building using points instead of faces. It is just a great deal more complicated to do it that way. Sub-dividing faces seems to be a better fit. Scaling a cube in the editor pane is a better option than puzzling over numerical sliders as a method of adjustment.

In the following image the reading tables their variations and chairs their jitter and random rotations are all controlled by points maintaining translational and instance control. Put another way still fully adjustable.


The above haas been written to disk as USD through Bifrost and taken over to UE5 successfully. It isn't finished but getting there.

Enough background back to the point in question.
I just can't seem to get the ID's to work the way I would like – must be missing something quite basic.

In the following image the two geo variants just alternate over the rows.
The objective is to have the variant with the skirting to be just the bottom row.
The variant without the skirting is to take the three rows above.
This would likely require two PPG_instance nodes
One specifying the lowest row and the second controlling the remaining rows.
I have tried all manner of approaches in specifying the face and instance IDs but can't find the logic.

Please – where am I going astray?



Message 10 of 19
in reply to: trevor

Hold the phone I believe I am on to something.



Message 11 of 19
in reply to: trevor

This is now starting to get somewhere.
I am seeing a pattern.


Message 12 of 19
in reply to: trevor

I am beginning to understand your comment Roland:
"The input „instance_IDs“ is an array that specifies which instance geometry to use for each instance "
Its a grid – maybe.

Message 13 of 19
in reply to: trevor

Although I have managed to get as far as the image below and can take it further to reproduce a facade.
When scaling the numbering will naturally change likely in a pattern that could be understood but would become quite complex when having to match the geo to the new numbering matrix.

When scaling vertically the whole multi-cut collapses. Suggesting that I am pushing the whole idea too far.
It may well fair better if the window 'Outers' were reintroduced. They don't quite zero out in any case so probably shouldn't try.

Might I still be missing something?


Looks good for reproducing a facade that will only uniformly scale


Vertical scale not so good



Horizontal might work if the ID arrays could be managed



Message 14 of 19
in reply to: Roland.Reyer

I have already built an option to scale the instances uniformly.


You could set the PPG_multi_cut so that the spaces between the windows are flexible.

That way you can set fixed sizes and ratios for the windows.

Message 15 of 19

A sample scene with this use case could be interesting. 

Message 16 of 19
in reply to: Christoph_Schaedl

Would you like me to send the current scene to you?

Message 17 of 19

I would recommend to send it to Roland. Cause he would do his magic on top. 😄

Message 18 of 19
in reply to: Christoph_Schaedl

Happy to if there is a private method of delivery

Message 19 of 19

It seems like you have made progress in reproducing a facade, but you are encountering challenges with scaling and matching the numbering matrix. Scaling vertically appears to collapse the multi-cut, and reintroducing the window 'Outers' might be a better approach, considering they don't exactly zero out. Take care not to push the idea too far to maintain the desired outcome. Good luck!

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Technology Administrators

Autodesk Design & Make Report