A Wolfenstein-style raycaster I made with OpenGL.
I'm super excited to use this functionality for lighting and audio occlusion, in addition to the player camera! The game world is made up of a grid, with horizontal and vertical grid lines. The rays are cast from the player's vision and impact these grid lines, and the length of this ray is used to determine the height of each ray-impacted segment of wall. If, for example, the ray length is shorter, then it follows that the player is closer to the ray-impacted wall, and from the player's perspective, the wall segments will appear to be taller.
Categories: Graphics Programming, Game Graphics
Tools: OpenGL/GLUT, CLion
Two shaders which portray imaginary objects in Al Cielo.
The white shader is used for static objects and the yellow shader is used for interactable, put-an-object-here slots. In crafting these shaders, there was a careful balance between utility and aesthetic.
The first important layer of the material is simply a bunch of dots, which are scaled in accordance to the mesh to ensure a consistent dot-size and dot-amount between objects.
The second layer takes in a mesh's AO map and generates a dotted outline of the mesh's silhouette.
The third layer is a projected gradient, which was used to add dimension and visual emphasis to these transparent objects.
Categories: Shader Programming, Game Graphics
Tools: 3ds Max, Substance Painter, Unreal Engine 4
A library of fabric materials which are pervasive throughout Trash Pandas.
We'd decided on a stylistic choice which was very costly, in terms of development time. I worked closely with 2D artists to streamline their workflow, to solve their problems generatively. This functionality utilizes meshes' AO, curvature, and baked-normals to auto-generate stitching, patchwork, tears, wrinkles, and creases. In the overall scope of our project, it allowed us to create gorgeous, PBR fabric materials for every asset in the game, and it allowed our artist-heavy team to maintain a healthy, stable pace.
Categories: Shader Programming, Game Graphics
Tools: 3ds Max, Arnold, Substance Painter, Unreal Engine 4
A structural supports generator for an .STL file to prepare it for 3D printing. This was one of my contributions to a browser-based collaborative design app.
This project was heavily-rooted in integral calculus and radial geometry. The program takes an input mesh, and if the angle of some of its normals are within a user-specified angular range, it will create new, supporting geometry, which goes from the ground up to that normal. In making this program, it was necessary to import Three.js to a Glitch project for 3D functionality and .STL parsing.
The orange-colored mesh is the user-inputted mesh and the black mesh(es) are generated with the tool.
Categories: Generative Design
Tools: Glitch, Three.js, JavaScript
A terrain generator which is based on a slime intelligence model. It generates ring outlines of a terrain's topography, and these topographic rings are used to define a height range.
In the positive height range, topographic rings are used for mountains, and in the negative height range, they are converted into masks, which are then used to boolean-subtract terrain layers from water-filled areas. The water is made up of individual water meshes, not a water plane, and this water is perfectly flush with the terrain. The entire terrain can be changed by tweaking with the lower-level physarum algorithm and physarum post-processing, or by messing with higher-level noise and mask post-processing parameters.
Categories: Shader Programming, Creative Coding
Tools: TouchDesigner
An entropic crowd system, a generator of path-following 3D-mesh pseudo-particles.
The "people" particles behave according to systemic and individual factors, and will cyclically follow a path and then re-converge to an origin, during which some of them will either disperse from the system and re-converge, or disperse from the system altogether.
Each person's, speed, formation tightness, dispersal, and dispersal direction is related to both the entropy of the system and person-by-person traits. With relation to time and user-entered parameters, the crowd will dwindle, lose its formation, and lose its liveliness. The gradually-darkening hue is meant to portray sundown.
Categories: Generative Design
Tools: TouchDesigner, 3ds Max
A VHS shader for Unity which was inspired by Rockstar's Manhunt.
We used camera distortion, color and contrast correction, sprites, masks, and visual noise to achieve this effect.
Categories: Shader Programming, Game Graphics
Tools: Unity, C#
A generator which creates an imitation of an image by voxelizing it.
The program features "Mutation" slider which adds more circles, pixelates, and accurizes the imitation.
Categories: Generative Design
Tools: Glitch, JavaScript, HTML
As a student robotics researcher at UCSC's DANSER lab, I designed and printed a tensegrity “snake” robot’s vertebrae, utilized FEA to improve the design (the robot is for search and rescue applications), created cast molding of a fluid intaking membrane for hydraulic motion, simulated the robot's serpentine motion with NASA’s Tensegrity Robotics Toolkit, and created functionality for complex data analysis of this serpentine motion.
We utilized VR for motion capture/data gathering and motion control of the robot.
Categories: Design
Tools: Unity, Maya, Fusion 360
I collaborated with local non-profits, colleges, and developers to design a modular “tiny house", tailored for low income and houseless residents who are struggling against the Bay Area's housing crisis. I attended many meetings between developers and business owners to gain a systemic understanding of this housing crisis, homelessness, and real estate in the Bay Area, and I used these insights to define my project's goals, purpose, and structure.
As housing availability and size goes down, developers must do more with less
Parking lots in many parts of Oakland will be used for far more valuable development
There is high demand for housing, affordable restaurants and businesses, and "unskilled" work spaces
With these considerations in mind, I started developing the property itself, with heavy consideration of my mentors at Jack London Improvement District, Laney College, and others. I demonstrated this project to a live audience using the Oculus Rift.
We achieved our goal of making a practical, liveable space, and I've continued this work by creating a manufacturable version of this space in Fusion 360.
Categories: Design
Tools: Unreal Engine 4, Quixel, Photoshop, Blender, Maya, Fusion 360
Inspired by my thought of "what if I made a comic generator", each permutation is an animated comic cell with meaningfully-different terrain, people, and structures. Narratively, it tells the story of a post-apocalyptic mailperson, and they'll encounter all manner of different people and monuments.
Categories: Generative Design
Tools: Glitch, JavaScript, HTML
A portrayal of the Infinite Monkey Theorem, where each monkey produces a unique imitation of Macbeth: Act 1 Scene 7. The player's dialogue and monkey's writing is transcribed into an adjacent HTML text box. This project required a lot of lower-level HTML work and input parsing, as well as crash-prevention features. There is also a lot of transcription and type-changing that was necessary to jumble the original text.
Categories: Generative Design
Tools: Glitch, JavaScript, HTML
An autotiling map generator and map editor for post-apocalyptic, underground bunkers. Each permutation contains meaningfully-different room layouts, environmental decay, random loot, and unlucky scavengers.
Categories: Generative Design
Tools: Glitch, JavaScript, HTML