Community
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.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Particle Size over life, with Randomization of particle size.

13 REPLIES 13
Reply
Message 1 of 14
Seb_ABF
904 Views, 13 Replies

Particle Size over life, with Randomization of particle size.

Is there a way to use an fcurve to drive particles size over life?

 

I've managed to use "set_particle_property_from_age" with point_size in the property, but that only gives a Birth Value and Death Value, with nothing in-between. So, particles kind-of pop on before nicely fading out, it'd be cool to be able to use an fcurve to drive this instead (how I'm used to doing particles with Particular in AE).

 

Whilst I'm here, I've been trying to use randomize_geo_property with Point_Size as the property after the set_particle_property_from_age to get random particle sizes, it works, but once the particles hit the age limit they start flickering like mad. Any chance someone could advise?

54cafd23-3122-4c45-9a8e-3a9a6833d532.png

 

13 REPLIES 13
Message 2 of 14
Seb_ABF
in reply to: Seb_ABF

One other question, how do I randomise the particle's life span?

 

Using randomize_geo_property with point_age in the property doesn't seem to work.

Message 3 of 14
InNeedOfHelp
in reply to: Seb_ABF

You're looking for the get_normalized_age node. You can just plug it into an evaluate_fcurve and use this to set the point size property, where the curve from 0-1 determines the size over age.

 

The flickering you mentioned when randomizing the size is because once points start dying their order will be constantly shifting, ie you have point 1 and point 2, if point 1 dies all the sudden point 2 becomes point 1. In the particle_solver_settings enable 'label point id' this will add a property called 'point_id' that will stay constant for each point. You can use this to randomize the size by making a random_value node, plug the point_id data into the index port, and then multiple this with the evaluate_fcurve.

 

To randomize the life span the property you wanna add to your source geo is "point_age_limit". Or if you go inside the source_particles node there's actually 'age_limit_random' and 'speed_random' parameters which randomizes on a per point basis. I usually prefer to use these, not sure why they aren't exposed.

Message 4 of 14
Seb_ABF
in reply to: InNeedOfHelp

Thank you so much for the detailed and helpful response, I'll give this a try later today! 

Message 5 of 14
Seb_ABF
in reply to: InNeedOfHelp

It took a bit of figuring out to get the set up correct, but this worked well! I'll post up a render soon. Thanks again.

 

The only thing that didn't work quite so well was the randomize_point_rotation, the points no longer rotate now but I'll have a look at that later today.

 

If only the particle system in Bifrost came with a complete solution like Particular in After Effects, some kind of compound graph that was set up with all the regular things that designers might need (colour, sizes, lifespan, randomisation options, turbulence), saving them from spending a day or two setting this up manually. I might keep adding to this graph to see how far along that path I can get, so it is more plug-and-play in future

 

Particles.PNG

Message 6 of 14
Seb_ABF
in reply to: Seb_ABF

Finished particles test: 

Message 7 of 14
InNeedOfHelp
in reply to: Seb_ABF

Nice looks good! The rotation property in bifrost is called point_orientation and is represented with quaternions so the data type should be vector4 (there's a bunch of nodes for converting more intuitive units to quaternion), as for randomizing it you'd wanna use a similar approach as the point size, using the point_id to avoid flickering.

Message 8 of 14
Seb_ABF
in reply to: InNeedOfHelp

Thank you! I'll give that rotation/orientation a try today!

Message 9 of 14
Seb_ABF
in reply to: InNeedOfHelp

The rotation seems to have stumped me unfortunately, I can't seem to get the points to rotate no matter what configuration I try to do... Any chance you could advise on the correct set up when you get a free minute please?

 

My current (apparently dodgy) setup:

Rotation.PNG

Message 10 of 14
InNeedOfHelp
in reply to: Seb_ABF

try this (copy the text and ctrl+v in the graph)

 

<sub_root>
    <nodes>
        <node>
            <vnnNode name="pass" type="BifrostGraph,Core::Graph,pass" flag="0">
    <metadatas>
    <metadata name="DisplayMode">
        <value>2</value>
    </metadata>
    <metadata name="LayoutPos">
        <value>-649.225 -556.11</value>
    </metadata>
</metadatas>
    <ports>
        <port name="input" type="Amino::Object" flag="4096" is_input="yes" default_values=""/>
        <port name="output" type="Amino::Object" flag="4096" is_input="no"/>
    </ports>
</vnnNode>
        </node>
        <node>
            <vnnNode name="get_geo_property" type="BifrostGraph,Geometry::Properties,get_geo_property" flag="0">
    <metadatas>
    <metadata name="DisplayMode">
        <value>2</value>
    </metadata>
    <metadata name="LayoutPos">
        <value>-403.915 -337.323</value>
    </metadata>
</metadatas>
    <ports>
        <port name="geometry" type="Amino::Object" flag="0" is_input="yes"/>
        <port name="property" type="string" flag="0" is_input="yes" default_values="point_id"/>
        <port name="type" type="array&lt;long&gt;" flag="4096" is_input="yes" default_values="">
            <metadatas>
                <metadata name="TypeWranglingSuggestedTypes" value="array&lt;float&gt;, array&lt;long&gt;, array&lt;uint&gt;, array&lt;bool&gt;, array&lt;string&gt;, array&lt;Math::float2&gt;, array&lt;Math::float3&gt;, array&lt;Math::float4&gt;, array&lt;Math::float3x3&gt;, array&lt;Math::float4x4&gt;"/>
            </metadatas>
        </port>
        <port name="data" type="array&lt;long&gt;" flag="4096" is_input="no"/>
        <port name="default" type="long" flag="4096" is_input="no"/>
        <port name="target" type="string" flag="4096" is_input="no"/>
    </ports>
</vnnNode>
        </node>
        <node>
            <vnnNode name="random_value" type="BifrostGraph,Core::Randomization,random_value" flag="0">
    <metadatas>
    <metadata name="DisplayMode">
        <value>2</value>
    </metadata>
    <metadata name="LayoutPos">
        <value>-117.92 -318.734</value>
    </metadata>
</metadatas>
    <ports>
        <port name="index" type="long" flag="0" is_input="yes" default_values="0"/>
        <port name="min" type="Math::float3" flag="4096" is_input="yes" default_values="-180;-180;-180"/>
        <port name="max" type="Math::float3" flag="4096" is_input="yes" default_values="180;180;180"/>
        <port name="seed" type="long" flag="0" is_input="yes" default_values="0"/>
        <port name="random_value" type="array&lt;Math::float3&gt;" flag="4096" is_input="no"/>
    </ports>
</vnnNode>
        </node>
        <node>
            <vnnNode name="euler_to_quaternion" type="BifrostGraph,Core::Math,euler_to_quaternion" flag="0">
    <metadatas>
    <metadata name="DisplayMode">
        <value>2</value>
    </metadata>
    <metadata name="LayoutPos">
        <value>145.195 -278.694</value>
    </metadata>
</metadatas>
    <ports>
        <port name="euler_radians" type="array&lt;Math::float3&gt;" flag="4096" is_input="yes"/>
        <port name="order" type="Math::rotation_order" flag="0" is_input="yes"/>
        <port name="quaternion" type="array&lt;Math::float4&gt;" flag="4096" is_input="no"/>
    </ports>
</vnnNode>
        </node>
        <node>
            <vnnNode name="set_geo_property" type="BifrostGraph,Geometry::Properties,set_geo_property" flag="0">
    <metadatas>
    <metadata name="DisplayMode">
        <value>2</value>
    </metadata>
    <metadata name="LayoutPos">
        <value>421.227 -585.866</value>
    </metadata>
</metadatas>
    <ports>
        <port name="geometry" type="Amino::Object" flag="0" is_input="yes"/>
        <port name="property" type="string" flag="0" is_input="yes" default_values="point_orientation"/>
        <port name="default" type="Math::float4" flag="4096" is_input="yes">
            <metadatas>
                <metadata name="TypeWranglingSuggestedTypes" value="float, long, uint, bool, string, Math::float2, Math::float3, Math::float4, Math::float3x3, Math::float4x4"/>
            </metadatas>
        </port>
        <port name="data" type="array&lt;Math::float4&gt;" flag="4096" is_input="yes">
            <metadatas>
                <metadata name="TypeWranglingSuggestedTypes" value="float, long, uint, bool, string, Math::float2, Math::float3, Math::float4, Math::float3x3, Math::float4x4, array&lt;float&gt;, array&lt;long&gt;, array&lt;uint&gt;, array&lt;bool&gt;, array&lt;string&gt;, array&lt;Math::float2&gt;, array&lt;Math::float3&gt;, array&lt;Math::float4&gt;, array&lt;Math::float3x3&gt;, array&lt;Math::float4x4&gt;"/>
            </metadatas>
        </port>
        <port name="target" type="string" flag="0" is_input="yes" default_values="point_component"/>
        <port name="out_geometry" type="Amino::Object" flag="0" is_input="no"/>
    </ports>
</vnnNode>
        </node>
    </nodes>
    <connections>
        <connection output_port="pass.output" input_port="get_geo_property.geometry"/>
        <connection output_port="pass.output" input_port="set_geo_property.geometry"/>
        <connection output_port="get_geo_property.data" input_port="random_value.index"/>
        <connection output_port="random_value.random_value" input_port="euler_to_quaternion.euler_radians"/>
        <connection output_port="euler_to_quaternion.quaternion" input_port="set_geo_property.data"/>
    </connections>
</sub_root>
Message 11 of 14
Seb_ABF
in reply to: InNeedOfHelp

Many thanks for taking the time to do that for me! That works for me now, thank you!

Message 12 of 14
Seb_ABF
in reply to: Seb_ABF

In case any users want to use the little particle system that was made through this, use the file below, it might save some people from the problems I had... If you use it or modify it then share your work and updates with it here too 😀. Hopefully some users will!

Message 13 of 14
Christoph_Schaedl
in reply to: Seb_ABF

Thats nice thanks. Please share is also on the Bifrost Discord channel.

----------------------------------------------------------------
https://linktr.ee/cg_oglu
Message 14 of 14
Seb_ABF
in reply to: Christoph_Schaedl

Will do, I'll pop it on there today 👍

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

Post to forums  

Autodesk Design & Make Report