Anar’s Computer Graphics Portfolio

December 7, 2025


Over the course of seven weeks, I created six ‘sketches’ in Processing 4. These are mainly works of generative art, plus some interactive experiences that explore how a computer can act both as a tool for creating visual media and as a co-creator, contributing substance independent of human intention.

As we find ourselves at the dawn of a new age where generative computer programs are starting to be seen and addressed as autonomous/intelligent entities, it is important to re-evaluate the role computers have in the process of creation and interpretation. Is creativity something sacred to living beings? When does the computer become a creative agent?

— 1 —

Making a nature scene is like a canon event for everyone learning to draw. A nature scene that procedurally generates a tree, some clouds, and percipitation is me learning to draw with code.

This first project served to ease me into the realm of code. It allowed me to translate what I've learned from classical design and composition into a program, allowing me to integrate controlled parameters and movement.

For instance, this sketch initializes into the season based on the real date. From there, the system defines colors and generates a tree trunk using a slanted sine wave connected to a base of overlapping triangles, with simple ellipses making the leaves.

Clouds are made as objects transformed to generate in smaller sizes toward the horizon, fading out with a simple blue gradient overlay.

ACG_1 // A_tree_for_the_season.

— 2 —

Project 2 had me creating two contasting concepts. One following paths along randomly generated vector vields to create a grid, while the other places shapes on a grid to overlap and form a tessellation of a very specific shape—the DKU logo.

ACG_2.1 // Fields

They are also both very simple in terms of color. Fields starts with the three primary colors, but as lines travel across randomly generated vector fields, their trails overlap to create new colors.

ACG_2.2 // Tessellation

For Tessellation, the color for each elemental hexagon is simply noise at its position and time interval. But the fact that Processing's noise favors certain hues means that most shapes become a blue-green color, which coincides with the colors in our DKU logo.

— 3 —

ACG_3.1 // In-Depth

Here, I applied it to the album cover of Submarine by The Mariás.

For my third project, I begin to involve computer interpretation as a core piece of the concept.

I used a computer vision model released in July 2025 called DepthAnythingAC that generates a depth map for any image. Applying the depth map to a triangle mesh and applying the original photo as a texture in Processing’s 3D engine allowed me to create an interactive view of the computer’s 3D interpretation of the 2D scene.

Depth map for Anar's project 3.

ACG_3.2 // depth_map.png

— 4 —

My fourth project had me coming up with a method of generating fictional guns in a video game.
The gun class consists of a little over 40 parameters determined using a random seed that all shape how the gun looks, shoots, and feels.


void generateGunFromSeed() {
    randomSeed(seed);
    barrelLength = random(200, 400);
    barrelGirth = random(12, 20);
    float barrelArea = barrelLength * barrelGirth;
    recoilRecoverySpeed = map(barrelLength, 200, 400, 0.12, 0.02);
    rotationSmoothingSpeed = map(barrelArea, 2400, 8000, 0.15, 0.03);
    fireMode = int(random(fireModeNames.length));
    singleFireDelay = int(random(8, 16));
    autoFireDelay = int(random(3, 8));
    burstSize = int(random(2, 5));
    burstFireDelay = int(random(2, 6));
    burstCooldownDelay = int(random(10, 25));
    pelletCount = int(random(4, 10));
    if (fireMode < 3) {
      maxAmmo = int(random(10, 51));
    } else {
      maxAmmo = int(random(5, 15));
    }
    currentAmmo = maxAmmo;
    bulletSpeed = random(20, 40);
    bulletSize = random(4, 11);
    bulletTrajectory = int(random(3));
    bulletColor = color(random(120, 255), random(120, 255), random(40, 200));
    bulletSpreadDegrees = random(0, 6);
    spreadPatternLength = int(random(1, 6));
    shotgunSpreadDegrees = random(10, 25);
    numDecorativeShapes = int(random(3, 10));
    shapeTypes = new int[numDecorativeShapes];
    shapePositions = new float[numDecorativeShapes];
    shapeWidths = new float[numDecorativeShapes];
    shapeHeights = new float[numDecorativeShapes];
    shapeTopWidths = new float[numDecorativeShapes];
    shapeOffsets = new float[numDecorativeShapes];
    shapeColors = new color[numDecorativeShapes];
    shapeHasUniqueColor = new boolean[numDecorativeShapes];
    for (int i = 0; i < numDecorativeShapes; i++) {
      shapeTypes[i] = int(random(3));
      shapePositions[i] = random(0, barrelLength);
      shapeWidths[i] = random(30, 120);
      shapeHeights[i] = random(20, 80);
      shapeTopWidths[i] = random(15, shapeWidths[i] * 0.8);
      shapeOffsets[i] = random(-barrelGirth/2 - 30, barrelGirth/2 + 30);
      shapeHasUniqueColor[i] = random(1) < 0.5;
      if (shapeHasUniqueColor[i]) shapeColors[i] = color(random(50, 255), random(50, 255), random(50, 255));
      else shapeColors[i] = metalGrey;
    }
    burstCount = 0;
    fireCounter = 0;
    burstCooldown = 0;
    shotsFired = 0;
    recoilAngle = 0;
    targetAngle = angle;
  }
	

ACG_4 // Procedural_Guns

— 5 —

For my fifth project, I experimented with semantic analysis and data visualization and created an emotion-aware book reader interface.

I used a transformer-based semantic analysis model to determine per-sentence emotional values. Intense emotions show as longer lines, with the color representing the dominant emotion in a sentence.

The user can hover to read line-by-line, and use arrow keys to advance page.

ACG_5 // Emotion-Aware-Reader

— 6 —

ACG_6 // Gun_of_Theseus

For my sixth and final project, I made a proper game. I call it “Gun of Theseus”.

It's a vertical rougelite platformer-shooter where the core game mechanic is that you can collect modules that change your gun part by part.

Enemy species are procedurally generated with unique behavior and attack patterns, so players must adapt both their gun and playstyle to advance.

Anar Nyambayar