top of page

Signed Distance Fields and Subsurface Scattering

This is an OpenGL SDF and SS shader.

  • Implemented a raymarching function to perform sphere-marching, capturing intersection points and material properties.

  • Developed creative SDF models by assembling intricate scenes using multiple SDF functions and geometric transformations, while also incorporating a custom BSDF function to assign materials.

  • Implemented subsurface scattering and integrated it with PBR results. Utilized the SDF-approximated ambient occlusion formula to calculate the ambient occlusion of PBR.

  • Utilized a grid-based SDF repetition function to duplicate models within the scene.

Github:

https://github.com/Jeff-Ling/OpenGL-Signed-Distance-Fields/tree/main

Deferred Rendering and Screen Space Reflection

This is an OpenGL Deferred Rendering and SSR shader.

  • Programmed g-buffer.frag.glsl shader to store data in multiple output channels, facilitating the rendering of accurate reflections of objects on other objects within a scene.

  • Computed screen-space reflections by determining intersection points within the G-buffer, enhancing the realism of reflections in 3D environments.

  • Created and integrated a Gaussian kernel for blurred reflections to simulate glossy reflections of rough surfaces, utilizing blur.frag.glsl for applying Gaussian blur to specular reflections.

  • Combined rendered elements using combine.frag.glsl, integrating reflection colors with the PBR for final image synthesis, achieving visually coherent and dynamic scenes.

Github:

https://github.com/Jeff-Ling/OpenGL-Deferred-Rendering-and-Screen-Space-Reflection

Render1.gif

PBR Shader

This is an OpenGL physically-based shader for simulating realistic lighting interactions in 3D scenes.

  • Implemented a microfacet Bidirectional Scattering Distribution Function (BSDF) model, allowing for the representation of materials with varying degrees of metallicness and roughness.

  • Programmed the shader to calculate light intensity falloff based on the distance between the light source and the point being illuminated, ensuring accurate light attenuation.

  • Integrated the Cook-Torrance model for glossy reflection and the Lambertian model for diffuse reflection, achieving a physically correct, energy-conserving BSDF.  

  • Implemented pre-computation techniques for glossy and diffuse irradiance within plastic-metallic Bidirectional Reflectance Distribution Functions (BRDFs), significantly enhancing shader performance and rendering realism.

  • Achieved photorealistic material effects by accurately calculating Cook-Torrance BRDF attributes, including the Fresnel reflectance using Schlick's approximation, and effectively merging diffuse and glossy components for dynamic material appearance.

Github:

https://github.com/Jeff-Ling/OpenGL-PBR-Shader

Dorformplanet

This is a tile-laying game inspired by the game Dorfromantik, players must strategically place procedurally generated tiles onto a hexagonal grid, ensuring that each tile connects appropriately to its neighbors. 

  • Utilizing Unity ShaderGraph, developed a variety of shaders including noise function-based water, sand dunes, and clouds shaders.

  • Created multiple cell variants including houses, trees, and oceans, along with transitions for each pair.

  • Developed the Wave Function Collapse algorithm rules for each type of cell.

Github:

https://github.com/Jeff-Ling/CIS-566-Final-Proj--Dorformplanet

Demo:

https://drive.google.com/file/d/1d7E-KBuFgFHyAs3NIUrNeHWTY-xcYdtZ/view

Presentation Video:

https://youtu.be/MQxo6jGBajI

Mini Minecraft

This is an interactive 3D world exploration and alteration program in the style of the popular computer game Minecraft. This project is mainly programmed in C++.

  • Used fbm2D driven by perlinNoise2D function for grassland biome. Used WorleyNoise function to generate mountain biome. The transition between these two biomes is completed by another function (calculateHeight), which takes the return from the grassland generator and mountain generator and uses the smoothstep to make a transition between them. The smoothstep is also derived by fbm2D.

  • Used the perlinNoise3D which takes in a vec3 of world coordinates X, Y, Z and returns back a float as a threshold to generate a Cave underground.

  • Used L-System which takes in a string to simulate the path of turtle movement. Then, used this path to simulate the river system in reality.

Github:

https://github.com/CIS4600-Fall-2022/final-project-mini-minecraft-handsomeadam

Presentation Video:

https://www.youtube.com/watch?v=jnCrwooge5Y

PBFluids

This is a C++ Maya plug-in tool allows users to quickly and easily generate fluid simulations without requiring any prior experience or training. The intuitive UI enables users to easily set up parameters such as shape, density, and the number of particles, without a steep learning curve.

  • Developed the user interface for our tool using MEL scripting language.

  • Implemented the main algorithm for fluid simulation based on the research paper "Position Based Fluids" by Miles Macklin and Matthias Müller.

  • Developed and integrated a mesh decomposition function using the third-party library Point Cloud Mesher WOF, enabling the arbitrary mesh to be decomposed into the fluid's initial status.

Github:

https://github.com/Wuhao1627003/PBFluids

Presentation Video:

https://youtu.be/i4HCRSffNCc

bottom of page