- C++ 84%
- GLSL 11.7%
- CMake 4.3%
| assets | ||
| cmake | ||
| deps | ||
| engine | ||
| projects | ||
| test | ||
| .clang-format | ||
| .clang-tidy | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| cmake-format.yaml | ||
| CMakeLists.txt | ||
| LICENSE | ||
| README.md | ||
| vcpkg.json | ||
Charlie3D
Mirrors: git.lesleylai.info | Codeberg
Charlie 3D is my personal R&D rendering framework in Vulkan. It is constructed on top of my beyond-core library.
It is designed as a modular rendering playground. Reusable modules living in /engine. Those modules can be pulled into any projects under /projects.
Features
Main Features
- Render Graph: automatic barrier placement and pass reordering
- Shader hot reloading: Set up shader modules and pipeline like normal and shader files will be automatically watched for changes.
Vulkan-related
- Vulkan helpers that simplifies object creation and debug name setting
Rendering
- Shadow mapping with Percentage-Closer Filtering (PCF) and Percentage-Closer Soft Shadows (PCSS)
- Normal map and occlusion map support
- Reverse-Z for better precision
- A simple immediate mode debug renderer
Asset
- GLTF and Obj file loading: Wrapping around tinyobjloader and fastgltf
Interactions
- A versatile camera implementation that support both arcball and first-person control
- Dear Imgui integration
Utilities
- Tracy Profiler integration
Projects
Charlie 3D comes with multiple projects sharing its shared abstractions.
| Project | Info | Screenshot |
|---|---|---|
| Model Viewer | The "main" project of Charlie 3D. Showcases a GLTF model viewer with various features | ![]() |
| Compute Drawing | Interactive rendering with compute shader. Can be useful starting point | ![]() |
| Compute Toy | A simple ShaderToy clone using compute shader | ![]() |
| vk_mini_path_tracer | Me implementing vk_mini_path_tracer | ![]() |
Build Instruction
Important
This project uses git-submodules. And it also uses git-lfs for asset management. Please follow the setup instructions carefully to ensure everything is initialized correctly.
Install git-lfs if you haven't
If you haven't done this before, make sure to install git-lfs and run git lfs install before
cloning the repository to ensure all large assets are correctly downloaded.
If you've already cloned the repository without git-lfs, then install it and run:
git lfs fetch --all
git lfs pull
to download the missing assets.
Install vcpkg
If you haven’t already installed vcpkg. Goto a new directory where you want to install vcpkg, and do:
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh # or bootstrap-vcpkg.bat on Windows
Clone the repository
git clone https://github.com/LesleyLai/Charlie3D.git --recurse-submodules
cd Charlie3D
If you forget the --recurse-submodules argument, do
git submodule update --init --recursive
Configure CMake and Build
At this point, you can either use your IDE’s CMake integration or run the following commands from the terminal. The key is to provide the vcpkg toolchain file to CMake:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build
Tip
Replace
/path/to/vcpkgwith the actual path to the local vcpkg installation.



