top of page

Coding

Various computer graphics and web projects

Procedural Terrain Generation in Unity

          In the final project of my Computer Graphics Practicum course, I collaborated with a team of four to create a captivating procedurally generated terrain in Unity. Our project showcases a picturesque landscape featuring forested mountains, numerous lakes, large floating islands, and volumetric clouds suspended above. Players have the opportunity to navigate this environment from a third-person perspective, controlling a plane as they soar above the terrain.

          My responsibilities included crafting the mountainous terrain, lakes, and floating islands. We utilized an online tutorial to integrate a foundational Perlin noise terrain, allowing developers to adjust lacunarity, persistence, and level of detail for a customizable experience for the player. The lakes were brought to life through the creation of water shaders using Unity's shader graphs, which were then applied to a high-vertex plane intersecting with the Perlin noise terrain. Floating islands were realized using the marching cubes algorithm, defining positive values outside the half spheres and negative values within. We further enhanced the islands with triplanar texturing, elevating their visual appeal.

Maya Snowflake Generator

          Venturing into a more ambitious project for my second Maya tool, I developed a snowflake generator. This tool empowers users to craft meshes resembling dendrite and plate snowflakes. Users have precise control over essential parameters such as the number of main branches, sub-structures, and various properties of these sub structures. Code for this tool can be found in this github repo

Maya Quaded Cone Tool

          Embarking on my initial exploration of coding Maya tools, I crafted a Python tool that facilitates the creation of quaded cones. This tool empowers users to finely control the dimensions and complexity of the cone along with manipulating the position of the apex, enabling the generation of oblique cones. Code for this tool can be found in this github repo.

2D Pokemon Map Generator

          In the culminating project of my Functional Programming course, I collaborated with a team of three to develop a 2D Pokémon tile map procedural generator. Leveraging the powerful wave function collapse algorithm, our program dynamically generated maps based on user-selected tiles and map size.

          Taking the lead in frontend development, I spearheaded the design and implementation of the selection system. This involved creating an interface for users to choose tiles and specify map size. The final touch was ensuring the smooth display of the generated map onto the screen.

Various Shaders

          In the final project of my Intro to Computer Graphics course, I collaborated with a group of four to develop an engaging demo. The project featured a player-controlled cat navigating two interconnected donuts, strategically designed to create the illusion of portals leading into each other.

          My responsibility was to enhance the surface texture through a vertex shader. I employed a sine and cosine function based on the model's UV coordinates to dynamically alter the height of vertices along their respective normals, creating a visually appealing bumpy surface. Additionally, I utilized a fragment shader to introduce diffuse and specular shading on the model, complemented by a normal shader for the crystals located within the toruses. 

4620_creative2_4k.png
Ray-Tracing

          In the initial phase of this Intro to Computer Graphics assignment, our two-member team implemented a ray-tracer using Python. This encompassed essential features such as diffuse and specular shading, shadows, and mirror reflections.

          For the subsequent part of the assignment, I leveraged our developed ray-tracer to craft a captivating scene. By arranging basic primitives of spheres and triangles, I created the scene above. As a notable enhancement, I implemented a pseudo-scattering effect, adding volumetric shadows to the upper-left corner. Concurrently, my partner optimized the rendering process by implementing a k-d tree. 

Orbiting Patterns

      For this assignment in the Intro to Computer Graphics course, our two-member team worked within the given framework to develop a dynamic application using JavaScript. 

      Our project focused on drawing the orbits of "moons" using bezier splines. Each moon orbits around its parent, with the central "Earth" remaining fixed at the center of the screen. Users could add moons by pressing the 'm' key, and delete moons with the 'd' key. 

      The control panel provided users with the ability to modify the distance, speed, and color of the selected moon. The arrow keys facilitated navigation between moons to allow customization of each moon.

      In terms of responsibilities, I took charge of the visual elements, including the rendering of orbiting spheres, connecting lines, and the bezier spline paths. Meanwhile, my partner focused on implementing key press interactions and the logic for selecting and manipulating individual moons. 

© 2022 by Orion Tian. Proudly created with Wix.com

bottom of page