Graphics Engine Update

Figured 5 months was long enough to justify an update. Shiny pictures at the top, feature list at the bottom! Couldn’t make better gifs, but the pictures just didn’t do it justice.

Particle System Gifs

This slideshow requires JavaScript.

Screenshots

 

Features

I’ve made a ton of progress, but I’ll quickly summarize the big pieces. Here’s the current feature list for the graphics engine:

  • Rendering UI using the Chromium Embedded Framework as the off-screen renderer.
  • Deferred renderer which supports:
    • Automatic render-call optimization
      • Groups calls up by shader-type, resource, etc. to help reduce the number of state/resource changes on the GPU.
    • Lighting system
      • Point lights
      • Spotlights
      • Directional lights
      • All of the settings like intensity, color, spotlight angle, falloff, etc.
    • Materials
      • Diffuse textures
      • Specular power
      • Specular intensity
      • Emissive
  • Full animation pipeline for animating meshes
    • Generalized rig/mesh system that handles .FBX files
  • Point-sprite particle engine
    • Additive/regular blending
    • Emitter with a ton of options
    • Physical animator to impact things like growth, force, velocity damping
    • Particle twister
    • Particle attractor
    • Color animator
    • Engine can handle ~100k concurrent particles without performance impacts to main engine (assuming they aren’t the size of the screen)
  • Multi-viewport support
    • Viewport object culling (for first-person shooter arms and stuff so you can’t see them in other viewports)
  • GPU-based object picking
  • GPU-side profiler (times the actual GPU calls, not the CPU-side calls)
  • Debug rendering for points and lines that uses batching to reduce render calls
  • Dynamic shader pipeline
    • Automatic input-layout generation for non-instanced shaders
    • Clean constant-buffer management
    • Full reflection data generation
    • Automatic shader-call optimization (prioritizes calls to minimize shader changes)
  • Management systems for all DirectX Systems
    • Blend state manager
    • Raster state manager
    • Depth stencil manager
    • Depth stencil state manager
    • Render target manager
    • Input layout manager
    • Converts all DirectX errors to readable strings

And this is all under an overarching API, so it’s pretty easy to use. I’m still working to implement:

  • Sprite text system
  • Particle depth blending, to prevent sharp artifacts near geometry
  • Shadow mapping
  • Specular/emissive texture maps
  • Glow mapping
  • Maybe cloth rendering using Bullet (time allowing)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s