经过几个月的准备,CubeEngine 2.0 开始更新,这是一次颠覆式的重构,1.0 的代码全部弃用,整体会采用 Cmake 来构建管理工程,目前的目标是先在 Windows/Mac 端跑起来,之后引入 Android 端,除此之外,底层的图形 API 也从 OpenGL 3.3 升级到 Vulkan 1.1(为了兼容 Mac 和 Android,暂时没有选择 Vulkan 1.2),这一次让我们从头开始。
- Cmake Project
- Vulkan RHI
- GPU Driven Rendering
- PBR
- Soft Shadow
- Compute Shader Culling
- Global Lighting
- ECS
- Render Graph
- Cross Platform
- MutilpleThread
本项目通过 https://github.com/corporateshark/bootstrapping 管理第三方依赖,需要提前安装的只有下面两个:
前往 https://www.vulkan.org/ 下载合适的SDK
- 对于 Windows,推荐安装 visual studio 2019 及以上;
- 对于 Mac,推荐安装 ninja,
brew install ninja
- 对于 Linux,推荐安装 ninja.
- Cmake 编译
mkdir build
cd build
cmake ..
cmake --build .
- SceneCovert 工具转换
首先,配置
data/sceneconverter.json
中关于模型的属性
[
{
"input_scene": "deps/src/glTF-Sample-Models/2.0/DamagedHelmet/glTF/DamagedHelmet.gltf",
"output_mesh": "data/meshes/test_DamagedHelmet.meshes",
"output_scene": "data/meshes/test_DamagedHelmet.scene",
"output_materials": "data/meshes/test_DamagedHelmet.materials",
"scale": 1.0,
"calculate_LODs": false,
"merge_instances": false
}
]
之后运行编译好的程序 ./build/tools/SceneConvert/SceneConver
,来将模型转换到引擎使用的内部格式。
3. 将 CWD 设置为当前项目的根目录,运行示例项目
天空盒(待实现)
PCF 软阴影(待实现)
SSAO(待实现)
奔引擎主要用来学习使用,对于引擎内部的实现逻辑,可以参照以下文档
对于 MacOS 系统,由于底层使用的是 MoltenVK,不支持超过 18 个纹理资源的绑定,所以在使用大场景模型时,如果纹理数量过多,需要做以下兼容设置
- 设置环境变量 MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=1,同时使用 Intel 的集显,才能使用 texture array;
- https://github.com/google/filament
- https://github.com/openscenegraph/OpenSceneGraph
- https://github.com/vsg-dev/VulkanSceneGraph
- https://github.com/EmbarkStudios/kajiya
- https://github.com/ConfettiFX/The-Forge
本项目主要参考了《3D Graphics Rendering Cookbook》,电子书我放在 Reference 文件夹里了,这里安利一下。