/Shade

Graphics programming experimentation.

Primary LanguageC

Shade

Shade is intended to be a learning and debugging tool. D3D12 will be used as the initial graphics backend, with a Vulkan one coming at a later date when app has more features and is decoupled from the rendering backend.

While the envisioned final product has menu systems galore, initial development only requires a small set of functionality and interactivity. Initial app will consist of a single window, with all UI elements being drawn inside its bounds via DX12. Window contents will consist of ImGui elements and a number of viewports. A viewport shows the contents of a scene, rendered with the relevant shaders, meshes, and other state. A scene may have multiple viewports, each differing in view, shaders, mesh visibility, etc...

Essentially the starting goal is a material editor ripped out of Blender/UE4.

Dependencies

Shade currently depends on FMT, ImGui, ImNodes and assimp.

Initial Features

Initial goals are a shader editor and mesh viewer with UI elements like Blender and UE4.

Meshes

  • Load from file
  • Rotate, scale, translate via UI
  • View metadata
  • Edit mesh attributes
  • Edit vertex/primitive attributes

Shaders

  • Select shaders to use for a viewport
    • UI slots for each shader type in pipeline
  • Live shader edit
    • Text editor with colorization
    • Button (F5?) to re-compile shader and pipeline
    • Compilation error feedback (both shader and pipeline)
    • View shader assembly code in form of DXIL, AMDIL, SP3, ...
    • Step through debug (RenderDoc API?)
  • Construct shaders via node graph
    • Base code generation
    • Supplemental instrumentation
    • View resulting shader
    • Save as material
  • Cache of recent shaders
    • Autosave with file hash
    • Option to rename and keep open

Next steps:

  • Fixed viewports
  • Entities
  • Parameterize and better expose pipelines
  • Chain pipelines
  • UI prettification

Current rendered content

Longer Term

Longer term goal is a competent and intuitive UI with easy navigation between multiple tooling modes and/or simultaneous usage.

  • Resource management
    • Memory manager to control residency
    • Batch operations
    • Task graphs
      • Shader passes
      • Resource reuse
  • More resource/asset types
    • Particle systems
    • Curves/splines
    • Mesh groups/composites
  • Animation and scriptable events
    • Bones
    • Timeline, key frames, interpolation
    • Scripting via Lua or Python
    • Describe scene in XML or JSON
    • Task graphs
  • Levels/Tutorials
    • Shader basics
    • New shader model features
    • API visualization
    • Advanced API usage
  • Physics
    • Gravitation
    • Hit-boxes
    • Rigid-body collision
    • Deformation
    • Fluids
  • Error handling
    • Exceptions
    • Reports