Projects (outdated) - lorentzo/IntroductionToComputerGraphics GitHub Wiki

OUTDATED!

See: https://github.com/lorentzo/IntroductionToComputerGraphics/blob/main/README.md for project tasks.

Intro

Student can choose:

  • Predefined project
  • Custom project

Predefined projects are separated by layers of abstraction and expected outcomes.

Each project contains several steps where each step brings certain amount of points.

Projects are currently for individual work. Team work?

Predefined projects

Low level (mostly coding and low-level APIs - focus on rendering)

This might be interesting for students into graphics programming and rendering pipelines. This knowledge can be applied on any application of computer graphics since it is essential to any rendering system.

Write ray-tracing-based renderer (CPU)

Any language (e.g., C++, Pyhton)

Tasks:

  1. Define camera
  2. Define shape: analytic sphere (positioning and intersection information)
  3. Define light: shape with emissive material
  4. Define object: shape with diffuse material
  5. Define more complex shape (positioning and intersection information)
  6. Material system: diffuse, specular, glossy
  7. Animated shape
  8. Small 3D scene with all elements.

Learning material:

  1. https://raytracing.github.io/
  2. https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-overview
  3. https://www.pbr-book.org/3ed-2018/contents
  4. https://rtarun9.github.io/blogs/deferred_shading/

Write rasterization-based renderer (GPU)

Any language (e.g., Python or C++).

Any API (e.g., OpenGL or WebGL)

Tasks:

  • Define camera
  • Use assimp (or other importer/exporter) library for importing sphere triangulated shape
  • Create point light
  • Write vertex buffers for imported shape
  • Write vertex shader program
  • Write fragment shader program which uses facing ratio for shading: https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-shading/shading-normals
  • Write fragment shader program which uses point light for shading
  • Add camera movement
  • Add material library: diffuse, specular, glossy
  • Write textures
  • Small 3D scene with all elements.

Learning material:

  1. https://learnopengl.com/
  2. https://www.youtube.com/watch?v=W3gAzLwfIP0&list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2&ab_channel=TheCherno
  3. https://open.gl/
  4. http://www.opengl-tutorial.org/

Results and Outcomes:

Results:

  • Code
  • Write documentation: code, usage, project explanation, work process, developed methods, results, future work.
  • Upload your code, documentation and results on Git host: GitHub, GitLab, BitBucket, etc. Write readme for how to run the code.

Outcomes:

  1. Understanding rendering pipeline
  2. Understanding how 3D scene elements are represented: lights, cameras, objects

High level (mostly working with modeling/interaction tools or higher level APIs - focus on modeling)

This might be interesting to students who want to apply graphics to particular disciplines while learning tools needed to do so.

Physics simulation and animation in DCC

Any modeling tool, but recommended: Blender or Houdini

  1. Investigate fluid models and artists parameters
  2. Fluid simulation: liquids (water, honey)
  3. Investigate rigid body models and artists parameters
  4. Rigid body: rigid body collisions (cubes)
  5. Investigate cloth models and artistic parameters
  6. Cloth model: cloth on wind

Modeling and interaction

  1. Model objects in a DCC tool (blender): complex shape modeling using procedural tools, modifiers, shape representations
  2. Transfer objects from DCC to interactive environment (e.g., Unity, Godot, Three.js, Unreal)
  3. Create materials for objects (noding or scripting system)
  4. Add lights and camera in interactive environment
  5. Script interaction with objects and movement in the scene (camera movement)

Results and outcomes:

Results:

  1. 3D scene
  2. Documentation: usage, project explanation, work process, used methods, results, future work.
  3. Upload results and documentation on Git host: GitHub, GitLab, BitBucket, etc. Write readme for how to run the code.
  4. (Optional). Use community to show your work: e.g., https://sketchfab.com/, https://www.artstation.com/

Outcomes:

  1. Skills with industry-standard modeling or interaction tools
  2. Understanding how 3D scene elements are modeled: lights, cameras, objects

Custom

Nothing above arises your interest of fits you? No problem, projects possibilities with computer graphics are endless! Introduce your own topic!

  • Write project proposal
  • Write roadmap

Ideas for projects follow:

(low abstraction level) Write your own post-processing effects and rendering features

Write basic renderer (OpenGL) or use game engines (Godot, Unity, Unreal) to implement

  • Bloom
  • DOF
  • Image-processing: edge detection
  • Toon shading

(low abstraction level) Write your own 3D modeling tool

  • Mesh/spline/voxels/points/sdfs modeling toolset
  • Simple rendering using OpenGL/WebGL or game engines: Godot, Unity, Unreal

(high abstraction level) Character animation:

  • Pick existing 3D character model
  • Create Armature
  • Animate Armature

(high abstraction level) Environmental FX animation using physics solvers: Blender/Houdini

  • Fluids: gases, smoke and fire
  • Hair
  • Fracture

(high abstraction level) Procedural material modeling

  • Create materials using scattering functions, image and procedural textures using Blender, Godot, Unity or Unreal node/shader system

(high abstraction level) Procedural shape modeling

  • Geometry nodes in Blender/Houdini
  • Python geometry modeling: Blender, Maya

(high abstraction level) Complex shape modeling

  • Characters, environments, assets
  • Curved and subdivision surfaces: Blender, Maya, 3DS MAX
  • Modifiers: Blender, Maya, 3DS Max

Want to develop a game?

  • Let's talk!

Want to apply graphics on domain you find interesting?

  • Medicine?
  • simulations?

Want to create small animation?

  • let's talk!