Skip to content

snej55/mix_simulator

Repository files navigation

https://hackatime-badge.hackclub.com/U08264TFUKV/mix_simulator

Duck Bowling

A physics based game where you play as a duck destroying various ceramic items. It is intended mainly as a tech demo for my OpenGL renderer, which most of the development time was spent on.

screenshot1

Building:

This should work on Linux. You will most likely also have to install some additional dependencies if you get linking errors (e.g. on fedora: sudo dnf install mesa-libGLU-devel alsa-lib-devel). Building:

git clone  https://github.com/snej55/mix_simulator.git
cd mix_simulator

# build it
cmake -S . -B build
cmake --build build/ -j$(nproc)

# to run
./build/main

Running on MacOS:

brew install zibuyin/duckbowling/duckbowling
duckbowling

Renderer Features:

  • Physically based rendering
  • IBL (Image Based Lighting)
  • Skeletal animation
  • GLTF Model loading
  • Hybrid renderer (deferred shading / forward rendering)
  • HDR (ACES & Khronos PBR Neutral)
  • Bloom (PBR)
  • SSAO (Screen Space Ambient Occlusion)
  • Anti-aliasing (FXAA)
  • JSON Scene loading
  • Frustum Culling (AABB bounding volumes)
  • Freetype2 font rendering
  • Physics engine (Jolt)
  • Spatial audio (SoLoud)
  • Cascading Shadow Maps
  • Flow field pathfinding (static quadtree generation)

screenshot2 screenshot2 screenshot2 screenshot2

Credits / Libraries in use:

  • ambientcg.com (PBR materials)
  • polyhaven.com (HDRI maps)
  • Free sfx: kenny.nl, mixkit.co
  • cmftStudio: (IBL irradiance maps)
  • GLFW (windowing library)
  • GLAD (OpenGL bindings)
  • GLM (Matrix operations)
  • JoltPhysics (Physics engine)
  • SoLoud (Spatial audio)
  • Assimp (Model loading)
  • STB_Image (Texture loading)
  • Freetype2 (TTF font rendering)
  • nlohmann json (JSON loading)
  • mikktspace.h (calculate TBN matrix tangents)
  • @zibuyin (MacOS build)

TODO:

Details
  • Finish IBL
  • Skeletal animation
  • PBR Textures
  • PBR Material loading
  • Deferred rendering
  • Mesh sorting (render opaque meshes deferred and transparent/translucent using forward)
  • Duplicate material checks? Batch render meshes using material index vertex data?
  • Animate transparent meshes
  • Fog
  • Implement static entities
  • Fix transparent mesh culling
  • SSAO
  • Add FXAA anti-aliasing
  • Global materials
  • JSON Scene loading
  • Frustum culling
  • Space partitioning
  • Bounding volume generation
  • Main game class
  • Level editor
  • Add lights to level editor
  • Rag dolls?
  • Fix arena deletion order (child -> parent -> root)
  • Add Jolt Physics
  • Point lights
  • Add shader compilation test
  • Add lens dirt
  • Find lens dirt texture
  • Area lights
  • Optimize static shader uniforms
  • Add player character + controls/kinematic body
  • Create player models
  • Implement freetype2 font rendering
  • Screen coordinates shape rendering
  • Add UI framebuffer
  • Add cascading shadow maps
  • Smooth cascade transition
  • Add credits
  • Make camera follow player
  • Add alpha to shape rendering
  • Add settings
  • Add in game font
  • Find new HDRI
  • Make some music
  • Add physics sfx using jolt contact listeners
  • Add sliding sfx
  • Add different sfx for different materials
  • Generate flow field quadtree
  • Paralax mapping with tesselation shader?
  • Quad tree generation
  • Flow field pathfinding
  • Make some models
  • Generate shards in blender
  • Preload jolt convex hulls
  • Shatter logic
  • Test shadows with complex shapes
  • Flow field generation
  • Clean up data folder
  • Convex hull preloading (export jolt bodies as binaries)
  • Particle vfx
  • Load all assets at the start
  • Fix sounds
  • Fix pathfinding when player is same tile
  • Different screen resolutions
  • Screenshake
  • Variance shadow mapping?
  • Add settings page to menu
  • Score
  • Spikes?
  • Star particles?
  • Dash
  • Collision particles
  • Shockwave postprocessing
  • Perlin noise fog?
  • Make camera scroll change focal length
  • Multithreaded assets loading (partially)
  • Cloudy skybox
  • Different fog intensities
  • Add invisible walls around whole thing
  • Try some cool post processing fx (cross stitching?)
  • Duck puns on first menu
  • Level transitions
  • Add tonemapping options to settings
  • Lens dirt!

Game loop (today):

  • Create decor
  • Maze generation?
  • Walls around level
  • New HDRI
  • Limit player flying
  • Find rubber duck model
  • Particles

Blender items:

  • Mug
  • Bud vase
  • Pot
  • Cider jug (remake)
  • Wrecking ball
  • Pestle
  • Anaphora
  • Ewer
  • Player character (rubber duck)
  • Add all the shards

Debugging/Release todo:

  • Polish shadows
  • Fix camera jitter when falling
  • Fix minimizing bug on Windows
  • Fix mouse position scaling with menu button on Windows
  • Fix MacOS build
  • Centre models around WS origin
  • Compile release version
  • Test linux build
  • Fix window title

About

A game made using a custom OpenGL renderer

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors