rigatoni – Reading #1

It's gratifying to see that a official time-honored document exists for engineers from all walks of life as there does for medical practitioners in the form of the Hippocratic Oath. The tenet that personally rung a chord with me is (1)

 

The Critical Engineer considers any technology depended upon to be both a challenge and a threat. The greater the dependence on a technology the greater the need to study and expose its inner workings, regardless of ownership or legal provision.

 

Up until this point in my creative and technical career I have been guilty of relying on a handful of tools well within my comfort zone to reify my creative vision, but it is becoming increasingly evident to me that this reliance on my staple technologies (Unity and Blender to name a few) is becoming a crutch to the point where I frame all my projects in terms of what these tools will allow me to accomplish, and thereby fail to do justice to my creative intent. (Incidentally when I introduced myself to the class, this is the core of what I was trying to express).

 

The engineers I respect the most, both in pop culture as well as real life, are the ones that can make the best of any situation. The engineers that raise no qualms about not knowing a certain language, pipeline or tool and invest themselves in learning said skills seem to be boundless in their creative capabilities.

 

This semester I am going to focus on what I see as being "language agnostic", I will boil down the core components of what I am learning so that I may adapt to any method of producing creative content. I noted some degree of parallel between (1) and (5), because ultimately all engineers are also users, and thus engineered by the products we use. I am going to strive to be a creative professional rather than a "Unity expert" or a "Java guru" (although the latter 2 labels would also be formidable to say the least).

rigatoni – LookingOutwards – 1

Hard Time MDickie

I am always fascinated by the kinds of video games that the rising amount of "one-man team" game developers can come up with. Developer Mat Dickle's 2007 game Hard Time is no exception. The player can design a custom avatar from an impressively wide variety of stats and appearance modifiers. He (and I use this pronoun because all avatars are suspiciously male) is then thrown into a prison environment with real-time events such as "lunch time", "lock down" and even the occasional "terrorist attack"!. It is evident that this game with all its procedurally ensuing hilarity is part of the trend of "great terrible games", a subversive genre of games that unabashedly feature comically poor characters, environments and purposefully cheesy dialogue. On my first play through I struggled with in-game obesity, depression and gang violence on a daily basis.

 

As I mentioned earlier, I was inspired by this game because I am in awe of the rich, dynamic self-contained gamespace and deeply comical characters that Mat Dickle has been able to create all by himself. And he isn't even remotely humble of his tendency to fly solo; crediting himself several times through all of his games' end credits and putting the following quote from Bruce Lee on the masthead of his website:

 

"The creative individual is more important than any established style or system"

--Bruce Lee

 

Although his writing style might be lacking in humility, an indie developer such as myself cannot help but feel a small, albeit vicarious, sense of empowerment to see a fellow developer compete with larger and better-funded teams to refreshingly unique content with a robust shelf life. I spent some time thinking on how a single developer team like Mat Dickle can produce seemingly vast content. It seems to me that he focused on reusability and symbolic abstractions wherever possibility. Creating assets for games is a costly and time-consuming process; wouldn't it maximize efficiency of these hard-earned assets to reuse them with procedurally generated modifications wherever possible rather than treating them as singletons? To compliment this reusability, we can also take advantage of the human tendency to find patterns and reduce complexity down to its core components and then restrict ourselves as developers to create only these components to create believable patterns and let the player project the superfluous details themselves.

 

From what reading I have done on Mat Dickle so far, it seems clear he has built his engines and tools himself; he credits himself for the creation of everything in his game. This is not hard to believe as Dickle as been working on open source games long before heavyweight engines like Unity and Unreal were open to the general public. As far as his inspirations, rather than standing on the shoulders of giants he seeks to topple them, expressing his distaste of "the bureaucracy of a team". While personally I cherish the opportunity to work with other developers every now and then, after experiencing some of Mat Dickle's solo work, I am compelled to set my sights higher and approach projects I may have once deemed out of my reach.

via GIPHY

 

Anarchist Baby Steps into Procedural Art

var redraw
function setup() {
createCanvas(4096, 4096, WEBGL);
fullscreen()
redraw=true
}
 
function draw() {
     if(redraw==true) {
          background(0);
          setLights()
          drawLines(2500)
          save();
          save('myCanvas.jpg');
          redraw=false
     }
}
 
function setLights() {
     ambientLight(100);
     directionalLight(250, 0, 0, 50, 250, 1)
     directionalLight(0, 50, 0, 250, -250, 1)
}
 
function drawLines(lineCount) {
     for(i=0; i<lineCount; i++) {
          var xPos = random(-100,100)
          var yPos = 0
          var zPos = random(-100,100)
          draw3dLine(xPos, yPos, zPos)
     }
}
 
function draw3dLine(xPos, yPos, zPos) {
     var xRot = Math.random(0, TWO_PI)
     var yRot = Math.random(0, TWO_PI)
     var zRot = Math.random(0, TWO_PI)
 
     rotateX(xRot)
     rotateY(yRot)
     rotateZ(zRot)
 
     translate(xPos, yPos, zPos)
     noStroke()
     ambientMaterial(255,100,100)
     cylinder(2, 1000000, 10, 10, false, false)
}