Rainity

Sequences of images, rhythms of songs, excerpts from books, moments in nature and many other things we experience in our lives since we were born shape who we are today. Everything we perceive from this world is a collection of montage. History somehow can even be distorted based on certain personas who create it. Painter creates a painting by depicting parts of reality and mixed it with their imagination. Photography and film are represented in a boundary of frames, documenting unseen reality outside. Even mathematical and scientific theories revealing reality of the world are not completely new yet established from observation of nature over a long course of time. So what is more real than nature? Nature is more powerful than we can imagine. Natural phenomenon like climate can alter how we feel. We do not know for sure whether these emotions are truly generated from our subconsciousness or inspired by the weather. One of the fundamental natural phenomenon that effects our emotions since it contains powerful sensations like lightning and thunder than the other phenomenon, is rain. Rainity aims to imitate visible drops of artificial rain by creating scenographic experience with an aid of digital light installation. The installation captures certain aspects of rain, reality of nature, simulating into a montage sequence of light and rhythms. By entering the space, viewers can understand instantly that raining effect is artificial simulated by LED light and programming. ‘TITLE’ enables audiences to be submerged by their own subjective interpretation through common sense about reality that people shared.

Rainity1Rainity2Rainity3

test

map = THREE.ImageUtils.loadTexture('../texturez/dots.jpg');
geometry = new THREE.TorusKnotGeometry(115.31, 29.04, 57, 8, 2, 3, 1);
material = new THREE.MeshPhongMaterial({shading: THREE.SmoothShading, color: 0x000000, ambient: 0x000000, emissive: 0x000000, specular: 0x939393, shininess: 6.63, map: map, side: THREE.DoubleSide, transparent: true, opacity: 1});
mesh = new THREE.Mesh(geometry, material);
map.wrapS = map.wrapT = THREE.RepeatWrapping;
map.repeat.set( 6.852668816980547, 6.852668816980547 );
mesh.scale.x = mesh.scale.y = mesh.scale.z = 1.76;
mesh.castShadow = true;
scene.add(mesh);

bg = document.body.style;
bg.background = '#1623ff';

renderer.shadowMapEnabled = true;

scene.fog = new THREE.Fog( 0xff0000, 4963.45, 9000 );

test test test

var constellation = [];
var n;
var d;

function setup() {
createCanvas(500, 500);
pixelDensity(1); // Set 1 because it's too slow on firefox
//pixelDensity(displayDensity());
n = 200;

for (var i = 0; i <= n; i++) {
constellation.push(new star());
}
strokeWeight(.75);
stroke('#FFFFFF');
}

function draw() {

background('#000000');

for (var i = 0; i < constellation.length; i++) {
constellation[i].update();
for (var j = 0; j j) { // "if (i > j)" => to check one time distance between two stars
d = constellation[i].loc.dist(constellation[j].loc); // Distance between two stars
if (d render will be more homogeneous
this.r = random(width * .2, width * .25); // first position will looks like a donut
this.loc = createVector(width / 2 + sin(this.a) * this.r, height / 2 + cos(this.a) * this.r);
this.speed = createVector();
this.speed = p5.Vector.random2D();
//this.speed.random2D();
this.bam = createVector();
this.m;

this.update = function() {
this.bam = p5.Vector.random2D(); // movement of star will be a bit erractic
//this.bam.random2D();
this.bam.mult(0.45);
this.speed.add(this.bam);
// speed is done according distance between loc and the mouse :
this.m = constrain(map(dist(this.loc.x, this.loc.y, mouseX, mouseY), 0, width, 8, .05), .05, 8); // constrain => avoid returning "not a number"
this.speed.normalize().mult(this.m);

// No colision detection, instead loc is out of bound
// it reappears on the opposite side :
if (dist(this.loc.x, this.loc.y, width / 2, height / 2) > (width / 2) * 0.98) {
if (this.loc.x avoid blinking stuff
} else if (this.loc.x > width / 2) {
this.loc.x = width - this.loc.x + 4; // "+4" => avoid blinking stuff
}
if (this.loc.y height / 2) {
this.loc.y = width - this.loc.y + 4;
}
}
this.loc = this.loc.add(this.speed);
} // End of update()
} // End of class