Aurora Logo

曙光渲染引擎

Aurora Rendering Engine (A.R.E.)
一个基于 C++ 的高性能路径追踪渲染库

English | 中文

License Version Issues

--- ## 📖 简介 曙光渲染引擎(Aurora Rendering Engine,简称 A.R.E.)是一个基于 C++ 开发的路径追踪渲染库,由 **NanoEra Studio** 开发和维护。A.R.E. 利用 OpenGL 4.3 计算着色器实现高效的 GPU 路径追踪,提供了简洁易用的 API,适合学习和研究光线追踪技术。 ## ✨ 特性 - 🚀 **GPU 加速路径追踪** - 基于 OpenGL 4.3 Compute Shader - 🎨 **PBR 材质系统** - 支持漫反射、金属、电介质等材质 - 💡 **多种光源支持** - 点光源、面光源、环境光 - 📦 **静态链接库** - 轻松集成到现有项目 - 🔧 **CMake 构建** - 跨平台支持 ## 🛠️ 依赖项 A.R.E. 依赖以下外部库: - **OpenGL 4.3** - 图形 API - **GLFW** - 窗口和输入管理 - **GLAD** - OpenGL 加载器 - **GLM** - 数学库 - **stb-image** - 图像加载 - **spdlog** - 日志系统 ## 📦 快速开始 ### 克隆仓库 ```bash git clone https://github.com/NanoEraStudio/AuroraRenderingEngine.git cd AuroraRenderingEngine ``` ### 编译项目 ```bash mkdir build && cd build cmake .. cmake --build . ``` ## 🎮 极简示例:康奈尔盒子 以下代码展示了如何使用 A.R.E. 渲染一个经典的康奈尔盒子场景: ```cpp #include #include #include #include #include #include #include using namespace are; int main() { // 1. 初始化窗口 glfwInit(); GLFWwindow* window = glfwCreateWindow(800, 800, "Aurora - Cornell Box", nullptr, nullptr); glfwMakeContextCurrent(window); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); // 2. 配置渲染器 RendererConfig config; config.width_ = 800; config.height_ = 800; config.samples_per_pixel_ = 1; config.max_ray_depth_ = 4; auto renderer = std::make_unique(config); renderer->initialize(); // 3. 创建场景 auto scene = std::make_unique(); // 创建材质 auto white_mat = std::make_shared(); white_mat->set_albedo(Vec3(0.73f, 0.73f, 0.73f)); white_mat->set_type(MaterialType::DIFFUSE); uint white_id = scene->add_material(white_mat); auto red_mat = std::make_shared(); red_mat->set_albedo(Vec3(0.65f, 0.05f, 0.05f)); red_mat->set_type(MaterialType::DIFFUSE); uint red_id = scene->add_material(red_mat); // 创建地板 (示例:一个简单的四边形) auto floor = std::make_shared(); std::vector vertices = { {{-2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, {{ 2.0f, -2.0f, -2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 0.0f, 0.0f}}, {{ 2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}, {1.0f, 0.0f, 0.0f}}, {{-2.0f, -2.0f, 2.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 0.0f, 0.0f}} }; std::vector indices = {0, 1, 2, 0, 2, 3}; floor->set_vertices(vertices); floor->set_indices(indices); floor->set_material(white_id); floor->upload_to_gpu(); scene->add_mesh(floor); // 设置相机 auto camera = std::make_shared(); camera->set_position(Vec3(0.0f, 0.0f, 4.5f)); camera->set_target(Vec3(0.0f, 0.0f, 0.0f)); camera->set_perspective(45.0f, 1.0f, 0.1f, 100.0f); scene->set_camera(camera); // 4. 渲染循环 while (!glfwWindowShouldClose(window)) { renderer->render(*scene); glfwSwapBuffers(window); glfwPollEvents(); } return 0; } ``` ## 📚 文档 详细文档请访问:[A.R.E. Documentation](https://are.nanoera.top/docs) ## 🤝 贡献指南 我们欢迎所有形式的贡献!请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详情。 ## 📄 许可证 本项目基于 MIT 许可证开源,详见 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 感谢所有依赖库的开发者和贡献者。 ---
Built with ❤️ by NanoEra Studio