Skip to content

FuXiii/Turbo

Repository files navigation

Turbo

LICENSE repo size QQ Group Email 爱发电

Turbo是渲染引擎

TurboImage

Platform

Platform Linux
Platform Windows
Platform IOS
Platform Android
Platform HarmonyOS
Platform Web

Version

当前版本 0.0.0.12

State

  • 研究开发 Vulkan 硬件实时光追。
  • 研究开发C/C++开发WebGPU项目,并发布到浏览器页面中。
    • ./sample 下新增 PureCCppWebGPUTest 项目,详细信息请参考 WebGPU : C/C++ 文档。
    • ./sample 下新增 PureCCppMiniWebGPUTest 项目。

Sponsor

想赞助的小伙伴,欢迎使用爱发电赞助,请量力而为,如果赞助完真有困难可以退回,未成年人禁止投喂!!!
爱发电 爱发电Turbo引擎

赞助项目

Document

Modular

目前Turbo中有以下模块

Core

  • 命名空间:Turbo::Core
  • 文档:./docs/TurboDesign.drawio:CoreCore.md
  • 目录:./engine/core
  • 依赖:独立模块,无依赖。
  • 说明:Core作为核心模块直接与Vulkan沟通,是上层与Vulkan底层最直接的桥梁,Turbo中所有的GPU相关工作最终都会从上层回到Core层。

FrameGraph

  • 命名空间:Turbo::FrameGraph
  • 文档:./docs/TurboDesign.drawio:FrameGraphFrameGraph.md
  • 目录:./engine/framegraph
  • 依赖:独立模块,无依赖。
  • 说明:FrameGraph用于描述一帧中的资源、渲染配置和渲染指令

Render

  • 命名空间:Turbo::Render
  • 文档:FrameGraphAdvance.md
  • 目录:./engine/render
  • 依赖:CoreFrameGraph
  • 说明:由于直接使用Core层进行渲染相对来说还是会比较繁琐吃力一些,Render模块的出现就是将CoreFrameGraph结合起来,提供更加方便的工作流,将开发者从繁杂的Core层脱离出来,提供更加简单易用的设计架构

Clone

git clone --recursive git@github.com:FuXiii/Turbo.git

Build

  • 首先您需要知道的:

    • Turbo目前主要有两个分支:masterdev。其中master是主分支,确保可以正常编译和使用,而dev分支会经常开发新功能,想看开发推进的可以查看dev分支,但不保证能够正常编译。

    • Turbo引擎被设计成各种模块,有Core核心模块, 有FrameGraph模块等。

    • 目前Turbo的核心模块基本完成(未完成部分和相关问题请参考下面的RoadMap章节和docs/Issue.md文档)

    • Turbo引擎的核心位于./engine/core,这是一个单独的模块,您可以直接将他拷贝出来放到自己的工程中

    • Turbo引擎会使用核心进行渲染,有关如何使用该核心,目前可以参考./main.cpp./samples文件夹下各个示例。该文件中有最新的核心实例代码,同时也是引擎的一部分。

    • 核心会用到的第三方库为:

      • glslang : 用于将Shader代码字符串编译成Spir-V
      • SPIRV-Cross : 用于解析Spir-V,获取Shader中相关声明
      • VulkanMemoryAllocator : 用于分配Vulkan资源内存
    • 本人对于CMake并不是非常精通,有关核心是如何寻找Vulkan库的,我直接配置的绝对路径,请修改engine/core/CMakeLists.txt中的此行代码:

      #已遗弃
      ##set_target_properties(vulkan PROPERTIES IMPORTED_LOCATION F:/VulkanSDK/1.3.204.1/Lib/vulkan-1.lib)

      请将该行修改成您电脑上的Vulkan库目录。 该问题将会在不远的未来通过动态加载库文件得到解决。

      ┗|`O′|┛oO 2022/7/27 该问题已修改完成,详情请参考下面的如何编译Turbo章节的

    • Turbo非核心模块,也就是目前除了./engine/core之外,基本上就是Turbo的非核心了,之后将在核心之外,基于核心开发高级模块,比如FrameGraph之类的,目前非核心模块已有核心模块使用案例,位于./main.cpp./samples文件夹下,就像前面说的,用例使用如下第三方库:

      • glfw :窗口库
      • glm : 用于向量矩阵等运算
      • imgui : 用于绘制界面UI
      • KTX-Software : Khronos Texture通用纹理标准
      • tinygltf : 读取gltf文件库
  • 如何编译Turbo

    • 请安装Vulkan SDK

      • ( *:2022/7/27 对于Windows系统,目前Turbo已经完成了动态加载Vulkan函数,Vulkan SDK目前对于Turbo不是必需品(有些第三方依赖需要Vulkan SDK,比如VulkanMemoryAllocator),VulkanRuntimeTurbo的必须品,正常Windows都会自带该运行时库,如果没有请安装Vulkan Latest Runtime即可,Linux系统等有空适配一下(2022/11/14 Linux适配完成))

        Vulkan Loader 文档有这么一句: In previous versions of the loader, it was possible to statically link the loader. This was removed and is no longer possible. The decision to remove static linking was because of changes to the driver which made older applications that statically linked unable to find newer drivers.

    • Turbo的核心可以单独编译,编译相关的CMakeLists.txt位于./engine/core/CMakeLists.txt。将会输出名为TCore的库文件。

      • 2023/9/21 添加了TCORE_SHARED_LIBSCMake选项。用于配置是否输出TCore的动态库。默认情况下为OFF,也就是输出静态库,如果想输出动态库请设置为ON
    • 如果您想直接编译Turbo

      1. 首先请查看环境变量中是否已经加入了gitbin目录,KTX-Sofware编译依赖bash.exe,正常该程序位于gitbin目录下

      2. 请安装python。第三方库很多CMake使用Python脚本运行,安装完后请确保Python{Python的安装目录}/Python{版本号}/目录和{Python的安装目录}/Python{版本号}/Scripts目录加入到了环境变量中

      3. 请修改engine/core/CMakeLists.txt中的Vulkan库目录为您自己的目录

      4. 之后使用./CMakeLists.txt即可

      5. 设置相关CMake参数如下:

        TCORE_SHARED_LIBS=ON //2023/9/21 Turbo的核心库输出为动态库,如果想输出为静态库请设置为OFF

    注:如果编译有遇到问题请查看常见问题文档如果还是没有解决方法请提Issue

Trifles

  • 整理一下头文件,有点乱,去掉不必要的头文件

RoadMap

注:该RoadMap章节信息有滞后性,引擎具体细节和开发计划请查看后面的更新日志(更新的比较频繁)

2022/5/15

  • Turbo 引擎对于 Vulkan 1.0 的相关核心功能已初步成型,由于Vulkan本身的复杂性还有很多特性没有实现,在此做一下记录,记录该引擎以实现的特性和未来计划实现特性,该特性记录将会和docs/Issue.md文档配合使用。
  • Core核心层将会作为单独完整的库发布,位于./engine/core中, 现在核心库已分离成单独的库,将会输出TCore.libTCore.a库文件
  • Turbo将使用该Core核心继续开发高级特性
  • 未来有时间录制Vulkan教程引擎开发教程视频

2022/5/28

  • 实现完Vulkaninput attachment也就是完成了延迟渲染相关工作,Turbo核心现在对于图形的核心封装设计基本上接近尾声,延迟渲染之后将会开展FrameGraph相关设计实现工作。有关几何着色器,细分着色器,光线追踪等将会在Turbo的核心继续展开
  • FrameGraph将会是Turbo引擎实现高级特性的重点,ECS(Entity Component System)或者EC(Entity Component)之类管理场景的相关技术不是Turbo引擎的重点,Turbo引擎目前的重点目标是不依赖任何窗口库(用户自定义),不依赖任何场景结构技术(用户自己实现自己的场景结构),Turbo可以很轻松的嵌入其中。

2022/5/30

  • Turbo核心基本实现完成,接下来开始FrameGraph的设计开发。敬请期待。

2022/6/7

  • 已开始写系列的使用示例。

2022/8/10

  • 开始设计实现engine

已完成示例

  • HelloTriangle - 将会使用核心绘制IMGUI和三角形
  • PureHelloTriangle - 将会使用核心绘制三角形
  • PureCombinedImageSampler - 将会使用核心绘制三角形,在此基础上使用纹理采样器一体式对纹理采样
  • PureSeparateImageSampler - 将会使用核心绘制三角形,在此基础上使用纹理采样器分离式对纹理采样
  • PureIndexDraw - 将会使用核心,基于索引渲染绘制一个方形面片,并在此基础上使用纹理采样器分离式对纹理采样
  • FrameGraphSample - FrameGraph的示例,目前该示例仅供测试(FrameGraph未实现完成),您可以通过该示例了解FrameGraph的基本流程

已完成特性

1.Vulkan核心特性的基本封装,包括:

  • Turbo::Core::TLayerInfo - Vulkan相关验证层信息
  • Turbo::Core::TExtensionInfo - Vulkan相关扩展信息
  • Turbo::Core::TVersion - 通用版本
  • Turbo::Core::TInstance - VkInstance的相关封装
  • Turbo::Core::TPhysicalDevice - VkPhysicalDevice相关封装
  • Turbo::Core::TDevice - VkDevice相关封装
  • Turbo::Core::TDeviceQueue - VkQueue相关封装
  • Turbo::Core::TImage - VkImage相关封装
  • Turbo::Core::TImageView - VkImageView相关封装
  • Turbo::Core::TCommandBufferPool - VkCommandPool相关封装
  • Turbo::Core::TCommandBuffer - VkCommandBuffer相关封装
  • Turbo::Core::TBuffer - VkBuffer相关封装
  • Turbo::Core::TShader - VkShaderModule相关封装
  • Turbo::Core::TDescriptorPool - VkDescriptorPool相关封装
  • Turbo::Core::TSampler - VkSampler相关封装
  • Turbo::Core::TSubpass - VulkanSubpass抽象
  • Turbo::Core::TAttachment - VulkanAttachment抽象
  • Turbo::Core::TRenderPass - VkRenderPass相关封装
  • Turbo::Core::TVertexBinding - Vulkan中顶点属性抽象
  • Turbo::Core::TViewport - VulkanViewport抽象
  • Turbo::Core::TScissor - VulkanScissor抽象
  • Turbo::Core::TDescriptor - Vulkan中各种描述符抽象
  • Turbo::Core::TDescriptorSetLayout - VkDescriptorSetLayout的相关封装
  • Turbo::Core::TPipelineLayout - VkPipelineLayout的相关封装
  • Turbo::Core::TPipeline - TPipelineLayout的相关封装,内部有VkPipeline vkPipeline成员变量,但创建是在其子类中创建
  • Turbo::Core::TGraphicsPipeline - 继承自Turbo::Core::TPipeline,图形渲染管线VkPipeline的相关封装,回去创建父类中的Turbo::Core::TPipeline::vkPipeline
  • Turbo::Core::TDescriptorSet - VkDescriptorSet的相关封装
  • Turbo::Core::TPipelineDescriptorSet - 管线所有有关描述符集的总和抽象,对应多个Turbo::Core::TDescriptorSet
  • Turbo::Core::TFramebuffer - VkFramebuffer相关封装
  • Turbo::Core::TSemaphore - VkSemaphore相关封装
  • Turbo::Core::TFence - VkFence相关封装
  • Turbo::Extension::TSurface - VkSurfaceKHR相关封装
  • Turbo::Extension::TSwapchain - VkSwapchainKHR相关封装

计划完成特性

  • Turbo引擎目前以Core核心层为主(优先级不分先后)

    • [ ✓ ] 生成mipmap
    • [ ✓ ] 混合渲染
    • [ ✓ ] 天空盒
    • HDR(应该算是延迟渲染的一部分)
    • [ ✓ ] 实例化渲染
    • 间接渲染
    • [ ✓ ] 细分着色器
    • [ ✓ ] 几何着色器
    • Vulkan光追标准(提供示例,还未设置Turbo接口)
    • 多线程
    • [ ✓ ] 计算着色器
    • [ ✓ ] 计算管线
    • [ ✓ ] 延迟渲染
  • Core:跨平台窗口层抽象

  • CoreIMGUI

  • CoreKTXglTF

  • CoreFrameGraph

  • CoreFrameGraph层实现PBR

  • CoreECS

  • 2022/7/13 搞了个鸿蒙OS(Harmony OS)系统的手机,有时间适配一下鸿蒙设备。

Log

(2024/12/17) 日志文件转移到了 更新日志

About

Turbo is rendering engine base Vulkan

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published