• Advertisement
Sign in to follow this  

Connect Centroids / Dynamic Medium

Recommended Posts



I have been here about 2 months ago with my Dynamic Foam project and got help from a developer but we ran into some problems connecting centroids to establish a network between the 'foam bubbles'. 

Here is some extra information for why those centroids need to be connected and form a network along with the problem explained at the end.

I. Dynamic Medium
II. Fields and Boids
III. From Boids to a PBD Network
IV. From Curling Motion to Strings
V. Position Based Dynamics (PBD)
VI. The Problem


I. Dynamic Medium

The goal of this project is to create a kind on a Zero-player game, a bit like Conway's Game of Life, where cells fluctuate based on surrounding cells, and where the goal to generate Knots within a Dynamic Medium.

To get a sense of such a dynamic network think of a foam with bubbles (volumes) where a micro-fluid runs through the edges (currents). These currents move from high to low pressure, forming circuits. The intensity of the fluid passing the bubbles can make the bubbles shrink or expand. Some currents will be able to line up and form closed circuits. 
In 2D these structures are simple loops, in 3D these loops can form strings, and in a next step these strings form again closed-circuits -> knots.



II. Fields and Boids

One way to get a model of bubbles and currents going was by using Boid-particles and Fields, which was tried in Processing. Here are short clips to show the interaction:


A. In the first clip the Fields (red circles) keep their size while the small particles flow in between and form a circuit.


B. In the second version the size of the Fields is influenced by the number of particles within. This gives rise to a dynamic foam with Fields fluctuating. Expand <-> Shrink



III. From Boids to a PBD Network

The problem with using Boids is that they have their limitations whereby the quick expansion of Fields causes the particles to be splattered around, interrupting the steady current. (stable flow vs. splashed around)


Keeping the Boid-particles flowing is important, because a flow-circuit gives rise to organisational rules such as flows going against each other block each other, others can go along and strengthen each other, similar to an electronic circuit:


So to fix these problems a move to PBD was made and hoping to create a network model (nodes/edges) that replaces the small particles.

The flow replaced by edges:


Fields expanding and shrinking depending on the amount of flow through the edges:


• Having two Fields A.B. and in between from point a. to b. an edge.
• This edges (a.b.) can replace all the boids moving in between (A.B.)
• Edge (a.b.) can represents 1 or 1 million small particles or more, simplification.
• Between Field A. and B. a measurement of tension •-VVVVV-•  (A/B)
• The more tension between (A.B.) the less flow there can be in (a.b.)
• Inverse the more flow there is in (a.b.) the less tension between (A.B.)
• The edge (a.b.) runs through the Fields A. and B, cooling or heating up Fields A. and B.
• Through edge (a.b.) runs a current the larger this current the bigger the Fields A. and B. become, expansion vs. shrinking, hot vs. cold, condense vs. vaporise.


The inspiration for the move to 'Position Based Dynamics' came from a talk by Jos Stam where he explained a method explicit on position and using springs:




IV. From Curling Motion to Strings

At the basis of this Dynamic Foam is the idea to get the bubbles moving through the medium based on self regulated currents between the bubbles:


The mechanics are like a sliding-puzzle where the parts can move to where there is space (created):


Space can be created by letting the bubbles shrink on one side and expand on the other, so they can move into that created space, and as a result we get fluctuations and a rolling-curling-motion:


Here is a fun animation that is similar to the idea: 


But for those lemons the input-force is gravity, in my model it are the micro-fluid-currents that effect the size. If the fluid is colder than the bubble than it will condensate and the field will expand; when it is warmer the field will vaporise and shrink. The dynamic curing motion from above, could also turn around and close-loop into knots:


In 3D the wind up curls would be like these folk dansers waving strings:

(at 1:44)


These strings can turn into knots etc. etc.


V. Position Based Dynamics (PBD)

For a look at the current situation you can check this short clip, where a small network is in place based on centroids, and where the volumes can fluctuate:



Here is are the project files on GitHub if you would like to have a closer look:
https://github.com/InteractiveComputerGraphics/PositionBasedDynamics (The PDB software)


VI. The Problem

We took the PBD software from GitHub and modified the Demo example called 'GenericConstraintsDemos'. All constraints are taken out except the distance constraint , and the simulation is limited to work on a 2D plane with the intention of extending to 3D eventually. Check out the graph:


As you can see in the example, there are nine circles. The simulation allows for any number of circles. The green dots represent the centers of the circles; the red dots represent the centroids of the three adjacent/connected circles; the black dots represent some (outer) intersections between circles; and the blue lines connect either centroids with other centroids, or centroids to intersections in a particular pattern. In the simulation, the radii of the circles can change and, since a distance constraint is applied, the varying sizes of the circles causes the locations (and existence) of the dots and lines to change.

The code at this point is able to identify/calculate the locations of the black dots and the red dots, but he had trouble coming up with an algorithm that correctly connects the red and black dots. The diagram above shows the correct connections, but coming up with an algorithm to do this automatically and as the simulation runs stalled our progress.

So I'm now looking for a developer who can take it to the next level. It doesn't necessarily need to be in PBD an other Physics Engine (Bullet?) might do the job, one where on top of the physics-interactions a network-formula can balance out the weights and regulate the system.

All suggestions and questions are more than welcome!


Edited by Chelle

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By spacerat
      we are looking for someone who can develop a fully automatic [recruiting information removed by moderator - please use jobs section]
    • By ja0335
      Currently I'm working in a project in where an AI team of NPCs must attack a squad of 4 characters manipulated by the Player. The problem I have is all the info I've found about AI against a player is related by attacking a single character. In this particular scenario attack rules changes because the AI must be aware about four characters. I'm curious if any one knows some paper about this particular scenario.
    • By eyal wahabi
      Am a new game dev and I need the help of you (the experts)
      While making the game I had one main problem,
      In my game, the player moves his mouse to control the direction of a sword that his character is supposed swings against other players,
      the problem is that I don't know how to program the hand to move according to the mouse. 
      I will be grateful if someone can give me a helping hand on how to code it or a general idea of how this thing can be programmed on unity ^^.
    • By hyper3d
      Recently I have been looking into a few renderer designs that I could take inspiration from for my game engine. I stumbled upon the BitSquid and the OurMachinery blogs about how they architect their renderer to support multiple platforms (which is what I am looking to do!)
      I have gotten so far but I am unsure how a few things that they say in the blogs..
      This is a simplified version of how I understand their stuff to be setup:
      Render Backend - One per API, used to execute the commands from the RendererCommandBuffer and RendererResourceCommandBuffer Renderer Command Buffer - Platform agnostic command buffer for creating Draw, Compute and Resource Update commands Renderer Resource Command Buffer - Platform agnostic command buffer for creation and deletion of GPU resources (textures, buffers etc..) The render backend has arrays of API specific resources (e.g. VulkanTexture, D3D11Texture ..) and each engine-side resource has a uint32 as the handle to the render-side resource.
      Their system is setup for multi-threaded usage (building command buffers in parallel and executing RenderCommandBuffers (not resources) in parallel.
      One things I would like clarification on
      In one of the blog posts they say When the user calls a create-function we allocate a unique handle identifying the resource
      Where are the handles allocated from? the RenderBackend?
      How do they do it in a thread safe way that's doesn't kill performance?
      If anyone has any ideas or any additional resources on the subject, that would be great.
    • By TexasJack
      Disclaimer: I was tempted to put this in Game Design, but it heavily references AI so feel free to move it to wherever it needs to be if this is the wrong place.

      I had this idea that a game could use machine learning to support it's AI and make itself a really challenging opponent (nothing new there), but also to tailor its style of playing based on feedback given by human players.

      Using an RTS as a classic example, lets say you prefer to play defensively. You would probably get more enjoyment out of games where the opponent was offensive so as to challenge your play style. At the end of each match, you give a quick bit of feedback in the form of a score ('5/10 gold stars' for example) that pertains to your AI opponent's style of play. The AI then uses this to evaluate itself, cross referencing its score against previous scores in order to determine the optimum 'preferable' play style.

      Then I got onto to thinking about two issues with the idea:

      1) The human player might not be great at distinguishing feedback about their opponents play style from feedback about their game experience in general.
      2) In a multiplayer context, players could spam/abuse/troll the system by leaving random/erroneous feedback.

      Could you get round this by evaluating the player without them knowing it, i.e. could some other data recorded from the way a player acts in a game be used to approximate their enjoyment of a particular opponents play style without being too abstract? For example 'length of time played somehow referenced against length of time directly engaged with AI opponent' etc...

      Do any existing games work like this? I just came up with it when I saw a stat that call of duty has been played for a collective 25 billion hours or something - which made me that would be the perfect bank of experience to teach a deep learning computer how players interact with a game.

      Just a bit of abstract thinking, that's all.
  • Advertisement