Alejandro Schianchi

Untitled (2010)

The project involve the creation of abstract images and sounds generated completely by code with successive deformations. The first with basic three-dimensional shapes and the second with wave modulations.
The code becomes as important as the resulting images and sounds, exhibiting it to reveal how they were made, to create variations (remixes), and mainly as an alternative way of distributing audiovisual works.

Cubo virtual en tres dimensiones de color gris con fondo blanco

void setup(){ size(1280, 720, P3D); frameRate (24); } void draw(){ lights(); background(255); translate(width/2, height/2, -100); rotateX(frameCount*PI/100); rotateY(frameCount*PI/100); rotateZ(frameCount*PI/100); noStroke(); fill(150); box(200); // save ("image.png"); }

Objectives

Code as art

If most of the contemporany audiovisual productions is computer generated, the distribution and exhibition circuit remains the same as in any work with "real world" registry material. The project intention is to take notice of some specific characteristics of synthesis audiovisual material, impossible to get with a camera, and the possible code distribution instead of the resulting images and sounds with the traditional video formats. The first point can be seen in the use of basic three dimension shapes that doesn't exist in the "real world", in a deliberately "virtual space", with algorithmic deformations impossible to achieve outside a computer because of their complexity.
The second point deal with the code distribution going through the open source philosophy and the efficiency of "size" in bits. A file of some Gb in a Blu-Ray or DVD (even a compressed .avi file which could be downloaded by torrent, ed2k, or a streaming .flv or .mp4) it can't be compared with the "weight" in bytes of the program instructions. This alternative distribution could be related with the DVD Jon's DeCSS code in Haikus and t-shirts, or what happened recently with the hexadecimal code 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 wich allow to hack the DRM protection in the HD-DVD and some Blu-Ray. This show that knowing the code sequence becomes in something as important as the result of it. The idea is to transfer this logic to the difital aesthetic field.

Predictable random

Since the early works of art with computers the random possibility has fascinate the artists. The permanent variations of the elements allow the work of art to develop over time without defining each of the steps. In this project the random function is use to reduce the code length, but not to generate unpredictable variations. They are unpredictable only in a sense of the complexity level, but each time the program is executed the "randomness" will be the same. Using the "randomSeed" Processing function, a random function can be run (pseudorandom to be precise) that return always the same "unpredictable" values. This allow the resulting audiovisual to be as a cinematographic or video process where the same images and sounds are shown in each exhibition, confronting an alternative distribution for the same audiovisual result.

Distribution

The distribution has two alternatives: download the code from internet to be run in Processing (suggested), or to watch it as a standard video (on-line, p2p, torrent, DVD or an exhibition theater).

Concept

The digital representation of an image or a sound its built upon an algorithm. If the "digital artist" has to express with algorithms what he wants to do, to make the code is to make the work of art. The Michael Noll reference, or the Lazlo Moholy-Nagy telephone work are indispensable to understand this need to codify the work when new media it's being used. El Lissitzky explained the telephone ability to disminishing the physical materiality of the paper, the same logic could be explained as the digital code can relieve the physical amount of celuloid and video produced.
On the other hand, if the image was the double of a referent, the synthetic image force to reconsider the reality and reference terms, in which the aesthetic proposals of Kasimir Malevich and Hans Richter could be update.

Technical concept

The choice of Processing as the software language of the project reinforce the "open source" philosophy of the project, being accesible the source code to understand how it works and anyone can download it free to the computer an run the "program/film". And it has Windows, Mac, and Linux versions.

Project status

You need to upgrade your Flash Player





/* Untitled (2010) Experimental digital "open source" film. Author: Alejandro Schianchi License: GNU GPL / CC-BY-NC */ import processing.opengl.*; import wblut.hemesh.*; import wblut.geom.*; import processing.video.*; import fullscreen.*; SoftFullScreen fs; import ddf.minim.*; import ddf.minim.signals.*; import ddf.minim.ugens.*; Minim minim; AudioOutput out; AudioRecorder recorder; SineWave sine; SineWave sine2; WhiteNoise wn; import peasy.*; PeasyCam cam; Particle[] parts = new Particle[300]; PVector O = new PVector(); float a=0; float freq=0; float freq2=0; float pan=0; float amp=0; float rythm = 0; float tam = 1; int x =0; int x2 =0; int y =0; int y2 =0; float posx=0; float posy=0; float tam2=200; float c=150; HE_Mesh box; MovieMaker mm; float roty = 0; float rotx = 0; float rotz = 0; void setup(){ size(screen.width, screen.height, OPENGL); smooth(); frameRate (24); randomSeed (1); fs = new SoftFullScreen(this); fs.enter(); cam = new PeasyCam(this,500); minim = new Minim(this); out = minim.getLineOut(Minim.STEREO); sine = new SineWave(freq, 0.5, out.sampleRate()); sine.portamento(200); out.addSignal(sine); wn= new WhiteNoise (0.2); sine2 = new SineWave(freq2, 0.4, out.sampleRate()); sine.portamento(200); out.addSignal(sine2); /* Based on: ADSRExample de Anderson Mills */ out.pauseNotes(); for( int i = 0; i < 5; i++ ) { out.playNote( 1.25 + i*2.0, 1, new ToneInstrument( 60, 0.6, out ) ); out.playNote( 2.50 + i*2.0, 1, new ToneInstrument( 60, 0.6, out ) ); out.playNote( 1.75 + i*2.0, 1, new ToneInstrument( 150, 0.4, out ) ); out.playNote( 2.75 + i*2.0, 3, new ToneInstrument( 90, 0.4, out ) ); out.playNote( 1.25 + i*2.0, 3, new ToneInstrument( 2850, 0.05, out ) ); out.playNote( 2.0 + i*2.0, 0.3, new ToneInstrument( 1640, 0.08, out ) ); out.playNote( 2.25 + i*2.0, 0.3, new ToneInstrument( 3620, 0.2, out ) ); out.playNote( 2.5 + i*2.0, 0.3, new ToneInstrument( 5250, 0.1, out ) ); } HEC_Box boxCreator=new HEC_Box(this).setWidth(250).setWidthSegments(7) .setHeight(250).setHeightSegments(7) .setDepth(250).setDepthSegments(7); box=new HE_Mesh(boxCreator); HEM_Noise nm=new HEM_Noise().setAmplitude(0); box.modify(nm); for( int i = 0; i < parts.length; i++ ) { parts[i] = new Particle(); } noStroke(); smooth(); // mm = new MovieMaker(this, width, height, "sintitulo2010.mov", // 24, MovieMaker.ANIMATION, MovieMaker.HIGH); // recorder = minim.createRecorder(out, "sintitulo2010.wav", true); } void draw(){ noCursor(); background(255); lights(); camera(); noStroke(); fill(150); translate(width/2,height/2); if (frameCount<100){ intro(); } else if (tam<250){ richter(); } else if (frameCount<800){ malevich(); } else if (frameCount<1300){ richter3d(); } else if (frameCount<1800){ noisecube(); } else if (frameCount<2200){ noisecubestill(); } else if (frameCount<2500){ noisecubestillflick(); } else if (frameCount<2800){ noisecubestillwire(); } else if (frameCount<3300){ noisecubenoisewire(); } else if (frameCount<3700){ noisewireandsphere(); } else if (frameCount<4000){ cubes2(); } else if (frameCount<4200){ cubes4(); } else if (frameCount<4500){ particles(); // mm.addFrame(); } else if (frameCount<4800){ ending2001(); } else if (frameCount<5300){ fadeout(); } else if (frameCount>5300){ fin(); } } void stop(){ // recorder.endRecord(); // recorder.save(); minim.stop(); out.close(); super.stop(); } void intro(){ /* Thanks to Laurence Bender, Marcelo Terreni and Frederik Vanhoutte */ // recorder.beginRecord(); // mm.addFrame(); } void richter(){ cam.rotateZ(0); box(tam); tam=tam+0.5; // mm.addFrame(); } void malevich(){ cam.rotateZ(0); box(tam); // mm.addFrame(); } void richter3d(){ cam.rotateX(0.02); cam.rotateY(0.015); cam.rotateZ(0.01); box(tam); // mm.addFrame(); } void noisecube(){ cam.rotateX(0.015); cam.rotateY(0.01); cam.rotateZ(0.02); freq++; sine.setFreq(freq); pan= 0; sine.setPan(pan); amp= 0.5; sine.setAmp(amp); HEM_Noise nm=new HEM_Noise().setAmplitude(a); box.modify(nm); noStroke(); box.drawFaces(); a=a+0.02; // mm.addFrame(); } void noisecubestill(){ cam.rotateX(0.01); cam.rotateY(0.02); cam.rotateZ(0.015); sine.setFreq(100); pan= 0; sine.setPan(pan); amp= 0.4; sine.setAmp(amp); noStroke(); box.drawFaces(); // mm.addFrame(); } void noisecubestillflick(){ cam.rotateX(0.01); cam.rotateY(0.02); cam.rotateZ(0.015); amp= 0.05; wn.setAmp(amp); float flick= random(0,1); if (flick > 0.8){ stroke(0); noFill(); out.addSignal(wn); } else { fill(150); out.disableSignal(wn); } box.drawFaces(); // mm.addFrame(); } void noisecubestillwire(){ if (rythm<10){ sine.setFreq(440); rythm++; } else if (rythm<20){ rythm++; sine.setFreq(50); } else { rythm=1; } cam.rotateX(0.01); cam.rotateY(0.02); cam.rotateZ(0.015); stroke(0); noFill(); box.drawFaces(); // mm.addFrame(); } void noisecubenoisewire(){ sine.setFreq(80); cam.rotateX(0.015); cam.rotateY(0.01); cam.rotateZ(0.02); stroke(0); noFill(); box.drawFaces(); HEM_Noise nm=new HEM_Noise().setAmplitude(a); box.modify(nm); tam=500; // mm.addFrame(); } void noisewireandsphere(){ if (rythm<5){ sine.setFreq(80); rythm++; } else if (rythm<10){ rythm++; sine.setFreq(120); } else { rythm=1; } cam.rotateX(0.015); cam.rotateY(0.01); cam.rotateZ(0.02); stroke(0); noFill(); box.drawFaces(); HEM_Noise nm=new HEM_Noise().setAmplitude(a); box.modify(nm); sphere(tam); tam=tam-0.5; // mm.addFrame(); } void cubes2(){ cam.rotateZ(0.0); noStroke(); fill(150); if (rythm<50){ sine.setFreq(200); rythm++; translate(x,0,0); box(75); x++; } else if (rythm<100){ rythm++; sine.setFreq(120); translate(x2,0,0); x2--; box(75); } else { rythm=1; } // mm.addFrame(); } void cubes4(){ cam.rotateZ(0.0); noStroke(); fill(150); if (rythm<50){ sine.setFreq(200); rythm++; translate(x,0,0); box(75); x++; } else if (rythm<100){ rythm++; sine.setFreq(120); translate(x2,0,0); x2--; box(75); } if (rythm<30){ sine.setFreq(300); rythm++; translate(-50,y,0); box(75); y++; } else if (rythm<60){ rythm++; sine.setFreq(150); translate(-50,y2,0); y2--; box(75); } else { rythm=1; } // mm.addFrame(); } void particles(){ // Based on: 2009 Daniel Winkler http://www.phyloa.com amp= 0; sine.setAmp(amp); out.resumeNotes(); cam.rotateX(0.008); cam.rotateY(0.008); cam.rotateZ(0.008); noStroke(); fill(150); O.set(400, 500, 0 ); for( int i = 0; i < parts.length; i++ ) { parts[i].update(); } } int size = 12; public class Particle { PVector loc = new PVector( random( 0, width ), random( 0, height ), random( -300, -700 ) ); PVector speed = new PVector(); public Particle() { } public void update() { PVector dir = new PVector(200, 200, 0 ); dir.sub( loc ); dir.normalize(); speed.add( dir ); loc.add( speed ); pushMatrix(); translate( loc.x, loc.y, loc.z ); rotateToFace( loc ); beginShape( QUADS ); vertex( -size, -size, 0 ); vertex( size, -size, 0 ); vertex( size, size, 0 ); vertex( -size, size, 0 ); endShape(); popMatrix(); } } PVector U = new PVector( 0, 1, 0 ); void rotateToFace( PVector P ) { PVector D = new PVector( ); D.set( O ); D.sub( P ); PVector Right = U.cross( D ); Right.normalize(); PVector Backwards = Right.cross( U ); Backwards.normalize(); PVector Up = Backwards.cross( Right ); applyMatrix(Right.x, Right.y, Right.z, 0, Up.x, Up.y, Up.z, 0, Backwards.x, Backwards.y, Backwards.z, 0, 0, 0, 0, 1); } void ending2001(){ amp= 0.5; sine.setAmp(amp); sine.setFreq(100); cam.rotateZ(0); box(tam2); tam2=tam2-0.2; // mm.addFrame(); } void fadeout(){ sine.setFreq(freq); freq--; cam.rotateZ(0.0); noLights(); fill(c); c=c+0.3; box(tam2); tam2=tam2-0.2; // mm.addFrame(); } void fin(){ // mm.finish(); exit(); }

Download program/film

Version 1.0

License: GNU GPL / CC-BY-NC

Requires Processing with Hemesh, Peasycam, Fullscreen, and the Beta version of Minim libraries to run the program/film.
Download the zip file, uncompress and open the "Untitled2010.pde" file in Processing and run it (Ctrl+R).
To modify the point of view with the mouse: left-drag (rotate), mouse-wheel o right-drag (zoom), middle-drag o cmd-left-drag in Mac (pan), and double-click (reset).

Bibliographic references

Most discussions of cinema in the computer age have focused on the possibilities of interactive narrative. It is not hard to understand why: since the majority of viewers and critics equate cinema with storytelling, computer media is understood as something which will let cinema tell its stories in a new way. Yet as exciting as the ideas of a viewer participating in a story, choosing different paths through the narrative space and interacting with characters may be, they only address one aspect of cinema which is neither unique nor, as many will argue, essential to it: narrative. The challenge which computer media poses to cinema extends far beyond the issue of narrative. Computer media redefines the very identity of cinema. In a symposium which took place in Hollywood in the Spring of 1996, one of the participants provocatively referred to movies as "flatties" and to human actors as "organics" and "soft fuzzies." As these terms accurately suggest, what used to be cinema's defining characteristics have become just the default options, with many others available. When one can "enter" a virtual three-dimensional space, to view flat images projected on the screen is hardly the only option. When, given enough time and money, almost everything can be simulated in a computer, to film physical reality is just one possibility..Lev Manovich, The Language of New Media.

In computer graphics today there’s, this great push toward simulating reality, especially natural phenomena. Realistic simulations of plants, for example. Plants are beautiful, so naturally the simulations are beautiful. Plants, mountains, trees, the pattern water makes when it goes over a rock-these are evocative in the same way music is. But I want to know why. I don’t want to simply reproduce the pattern; I want to know what it is about the pattern that evokes that feeling. And what’s the relation between that pattern and its mathematical description. Larry Cuba, An Interview With Larry Cuba de Gene Youngblood, en Video and the Arts Magazine, Winter 1986.

It may seem perverse to use a computer, that most precise and deterministic of all machines conceived by the human mind, to produce “random” numbers. More than perverse, it may seem to be a conceptual impossibility. Any program, after all, will produce output that is entirely predictable, hence not truly “random.” Nevertheless, practical computer “random number generators” are in common use. William H. Press, Numerical Recipes.

Digital imagery opens up a new a point of entry into the debate surrounding the issue of the ‘aura’ of the unique work of art – that quality famously identified by Walter Benjamin in his essay The Work of Art in the Age of Mechanical Reproduction. Much attention has been focused on the notion that the ‘aura’ of a work of art is related to its ‘uniqueness’. The digital image can present a challenge to such claims in two ways. First, it is by its very nature infinitely reproducible. Indeed it is nothing but reproduction. There is, literally, no original of a digital image, since every version has equal status by virtue of being absolutely identical. Variation does occur in practice, but only at the point where the image is performed, as the performance is dependent upon the character of the apparatus displaying it. Even here, however, there is no sequential hierarchy. Each performance has an equal relationship to the code on which it is based. William Vaughan, Digital Art History.

Art references

  • - Kasimir Malevich, Black Square, 1913.
  • - Hans Richter, Ryhtmus 21, 1921.
  • - László Moholy-Nagy, Construction in Enamel 2, 1923.
  • - John Whitney, Catalog, 1961.
  • - Michael Noll, Vertical-Horizontal Number Three, 1964.
  • - John Whitney, Arabesque, 1975.
  • - Larry Cuba, Calculated Movements, 1985.
  • - Karl Sims, Evolved Virtual Creatures, 1994.
  • - Eva and Franco Mattes, Biennale.py, 2001.
  • - James Frost y Aaron Koblin, House of Cards, 2008.