Vital Modelling Abbreviated Folio

Page 1

VITAL MODELLING AGENCY SYSTEMS

collaboration with camilla burke

Ensuring the particles recognise the rest of the particle collection was the next step in behaviour development. By utilising vectors, an attraction was created between particles triggered at a set distance, which were then repeled when a certain proximity from each other was reached. A particle’s direction could also be determined to ensure it was aligned to follow the larger body’s heading. This behaviour, known as flocking, formed the fundamental basis for our experimentation of complex behaviours of attracting and separating interactions.

The transition from working in a 2-dimensional canvas to a 3-dimensional space required additional parameters to the existing vectors. Fading effects from drawn transparent overlays were harder to achieve and mouse input more difficult to steer, but depth of perspective allowed for greater diversity in the agent’s behaviours. We were able to observe the various ways our functions affected spatial movement patterns by video recordings, and in subsequent studies, 3D meshes.


The generated isomeshes from processing were found to be unfeasible for resin printing due to the unworkability of the generated meshes. So an alternative method was explored by recording the particle trails as curves to export to more 3D oriented programs. By using a combination of 3Ds Max Plugins (PWrapper) and Rhino modelling, we were able to generate more refined and varied forms. The outcomes from tweaking the control settings ranged from fragmenting, flaking and disintegrating effects, while still maintaining digital workability for a resin print.

/*---------------------------------------

//Not sure exactly what's going on here - play around with it and see what it does

IMPORT LIBRARIE

//His comment was "move it to the ground

---------------------------------------*

obj.translate

if (distance < radius) {

fill(255);

int moveCount = 0;

acc.addSelf(steer);

acc addSelf(steer);

ptPop add(loc copy());

} ().y - bounds.getCenter().y), 0));

//---Constructor---//

import toxi.geo

//---Ball Flocking Function---/

{

import toxi.geo

//Make an array of WETriangleMeshes, the same size as the number of segments in the original OBJModel

import processin

WETriangleMes

voi v vo oid floc

getSegmentCount()];

separat

import processin

//---Display of Ball as spheres---//

cohesio

import processin

//Lets create a different WETriangleMesh to repres nt the whole thing

import processin

WETriangleMes

import peasy.or

//Loop over i, from 0 to the number of segments in the original OBJModel

import peasy.*

for (int i= 0

//---Behaviours---//

align(0.1

/*---------------------------------------

}

GLOBAL SETUP & SKETCH INITIALIZATION ---------------------------------------*/

//---Ball Alignmen ment t Beh Be Behaviour---/ void alig

c.y,loc.z);

import peasy.or //Do our little function below to make a WETriangl Mesh out of segment number i. import saito.objloade

meshArray

/*--------------------------------------

Vec3D stee

i));

>0) renderCurve();

//Add that to the giant mes

GLOBAL VARIABLE

int coun

100,-50,800);

fo (in for fo in

expMesh.addMes

---------------------------------------*

// smooths so when balls separate does not look as mechan

}

boolean savePD

width, height, "drawing.mov", 30, MovieMaker

Ball

return expMes

boolean exportDX

f(diff); "StudioMesh2.obj","absolute",TRIANGLES);

boolean record

normalizeTo(1.0/distance);

floa f loat

}

MovieMaker m mm m;

if (distanc

//--- Generate a WETriangleMesh from Segment---/

stee

public boolean

coun

//---Model variables---/

public WETriangleMes

}

PeasyCam m cam m;

}

OBJModel model

//New, blank WETriangleMes

f(1.0/count);

WETriangleMes

1000);

if( coun

//---Particle variables---/

steer

ArrayList ballCollectio

//Loop over i, from 0 to the number of faces in th

ArrayList attractorCollectio

for (int i =

segment

}

magnitude);

model);

r);

int radius = 1 ;

steer.scaleSel

int numBalls = 100;

//Get the face number i from that segmen

acc.addSel

Face face

}

WETriangleMesh mesh; /*---------------------------------------

//Get vector 0 (Java is zero-indexed

Methods

//---Ball / / Cohesion Behaviour---/

Vec3D a =

---------------------------------------*/

numBalls; i++) {

v d cohesio voi

//---Origin from a point or an area---// //Get vector

//---Generate a WETriangleMesh from an OBJModel---//

//Vec3D origin = new Vec3D(random(-1.5*width/4,1.5*width/4),random(10,20),random(-50,50))

Vec3D b =

Vec3D su

30,20,50);

in nt coun

origin); public WETriangleMesh convertOBJModel(OBJModel obj) {

//Get vector

l); ;

for (in

Vec3D c = //Put it in the middle

Ball

obj.translateToCenter();

//Add a face to the WETriangleMesh based on those

float

mesh.addFac //Get the overall bounds BoundingBo

bound

BoundingBo (thi

} obj)

GLOBAL PROGRAM LOOP //When we've gone over every face in the segment, return the finished WETriangleMesh

//Two PVectors, centre and axi

return mesh;

PVector cente

center.z);

float distance = V.distanceTo(ball.loc); //This AABB thing

class Ball cl

steer.addSelf(diff);

sum m.addSelf(other.loc); count++;

count++; //--C /// --CLASS -C C VARIABLES---/

if (savePDF) beginRecord(PDF, timestamp()+".pdf");

Vec3D loc =

if (exportDXF) beginRaw w(DXF, "output.dxf");

Vec3D speed

c); if(count >0) {

Vec3D acc =

//------------------------------- co code de aft afte er here

Vec3D grav =

//Checks distance from ball to face ArrayList ptPo

}

d);

} Vec3D steer = sum m.sub(loc); steer.scaleSelf(m magnitude);

//---Model display---//

sum m.scaleSelf(1.0/count);

if(count > 0) { steer.scaleSelf(1.0/count);

background(128);

//---Ball movement---//

} }

} random m(-1,1));

toxi.geom m.m mesh.W WEVertex V = mesh.getClosestVertexToPoint(ball.loc);

Vec3D boundPoin

AABB objBound

diff.normalizeTo(1.0/radius);

---------------------------------------*/ / voi oid d draw w() { // this line will start pdf export, if the variable savePDF was set set e to true

public boolean intersecting(Ball ball, WETriangleMesh mesh) { //Two points - one is the centre, one is at the ax

if (distanc

mechanical// //---BALL CLASS--/

}

PVector wh

Vec3D centrePoin

/*---------------------------------------

steer.scaleSelf(m magnitude); {


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.