Python
A neural network trained to generate poetry by fine-tuning GPT-2 on a large dataset of poems.
Poems can be modified with various inputs, including sampling temperature, title, syllables and characters per line, number of words, number of poems, sentiment, alliteration, and rhyme scheme.
All features are applied to generated poems through post-process methods. While working with David Li and Jake Lem, I was responsible for implementing the sentiment and alliteration modifications.
We also used BERT masking to implement many of the features.
Some generations:
Inputs | Generations |
---|---|
Lines per Stanza: 3
Number of poems: 1 Number of words: 200 Sentiment: Negative Alliteration: s | sick scent of the sea,
In the synodic month in the sky supra the sea in the south-side the bitter sour green smell so sour cologne I swear it shall sidesplitte me: You shall see me spreading my skirts out on the snow to spread some in the sun... mock the shadow sooner the sooner — I won't show you what it is I speak of in my sad song — you shall soon be uncertain what it symbolize to be a superpower: |
Rhyme Scheme: aabb
Unit: Syllables Units per line: 6,10 Lines per Stanza: 2 Number of words: 200 | I came away from your
battleships of Iwo Jima or sure battleships of Pearl till I was a student living in brazil dressed in a huge plaid band, tucked into the back seat and By the stand opposite a parks made of tin and a concrete, I watched sharks running their hooves kills every another toward two hills in a straight circle to a distance I could see circling two the elephants. What was this moment, this fierce place? What I saw has a wonderful loss state history, absolutely great— |
Title: Old McDonald Had A Farm
Rhyme Scheme: eieio Unit: Syllables Units per line: 6,8,10 Lines per Stanza: 5 | ...
to see the world that once you mine was your own, a blue sky, the fields that grew were green, your corn and wine that was white, the corn and corn do up like a record. The sun is in now sky and the sky is green, and all our corn is now turn green, the fields that once were yellow, my queen with me, you with my learn and our father with me, and all our fields begin to turn green, third to see the world that was once your land. the spring air had stirred my spirit into a dance, like a laws of twelve meeting a girl of seventeen, a young girl two last act was to dance to an old one who, rather than trying to forget it, was waiting for you to leave for the day that you would be gone. ... |
WebGL
Rendered in real-time with raymarching, inspired by the children's book.
All shapes are 3D primitives represented by signed distance functions with smooth blending or CSG (constructive solid geometry). A depth of field blurring effect is achieved with a post-process gaussian blur linear interpolation.
Most of the textures are created procedurally, using 2D/ 3D fractal brownian motion and worley noise.
See code and real-time render on ShaderToy.
C++
Full path tracer with direct and global illuminuation. Rays are sampled with multiple importance sampling for estimating direct illumination. I also implemented a full lighting integrator,
using both direct and global illumination along with russian roulette ray termination. Materials with different BSDFs (specular, fresnel, microfacet) and different light sources (point, area, spot) are supported. Other
features include a thin-lens camera and CSG (constructive solid geometry).
Full Lighting Integrator
Samples per pixel: 400
Recursion limit: 8 bounces
Full Lighting Integrator
Samples per pixel: 900
Recursion limit: 8 bounces
Direct Lighting Integrator
Samples per pixel: 100
Recursion limit: 5 bounces
Full Lighting Integrator
Samples per pixel: 100
Recursion limit: 5 bounces
Direct Lighting Integrator
Samples per pixel: 100
Recursion limit: 5 bounces
Full Lighting Integrator
Samples per pixel: 100
Recursion limit: 5 bounces
C++, OpenGL
Basic Minecraft interface that allows the user to move around and modify the terrain. Features include: chuncking terrain generation, procedural terrain, game engine update function and player physics, l-system rivers/ caves/ trees,
textures with animation, multithreaded terrain generation, biomes, procedurally placed trees, and procedural day and night cycle. I was responsible for chunking terrain generation, texturing, and the day and night cycle.
Chunking (efficient terrain rendering)
The terrain is rendered using a "chunk" system where blocks of 16 X 256 X 16 are chunked together. Only the hull, or outside faces, of each chunk is rendered, and special cases like empty blocks, edge blocks, and transparent blocks are handled differently.
A single interleaved VBO is used to store block informationn for more efficient processing.
Texturing
All textures are loaded in from 1 image file, and UV information for each block type is stored in the VBO. Animated textures, like water and lava, and transparent textures, like ice, are also implemented. A second VBO is used for transparent blocks,
since opaque blocks are rendered before any transparent ones.
Procedural sky dome
The sky dome is implemented in a fragment shader. UV coordinates for a quad are generated through ray casting to sample colors from interpolating between hard coded color palettes that correspond to different time values. The terrain is lit
from the rotating sun/ moon.
C++, OpenGL
Mesh editor based off of Autodesk Maya. A half-edge data structure is used to support mesh topology editing operations including: splitting edges, triangulating faces, extruding faces, and smoothing mesh by catmull-clark subdivision.
Meshes can be loaded in through OBJ files and skeletons through JSON files, where the data is parsed to form a half-edge mesh. The skeleton joints are stored in a scene graph tree, and are interactive through a GUI.
I used the skeleton to implement mesh skinning and shader-based skin deformation, where a simple distance based linear blend skinning algorithm is used.
Imported from OBJ and JSON files
Skin deformation
Original cube
Smoothed cube
Dodecahedron with extruded and triangulated faces