• Home
  • About
    • Shadow Knight photo

      Shadow Knight

      https://live.bilibili.com/9565678

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

KaiJu_Engine介绍

14 May 2018

Reading time ~4 minutes

一

比 Unity 快数倍

9a0c01a1-9990-4b94-94bb-ccf7d4aa78de.png

  • 二、左侧截图信息(D3D12 渲染)
  • Capturing D3D12. Frame: 9011. 1 ms (647 FPS)
  • 正在捕获 D3D12 帧。帧号:9011,单帧耗时:1 毫秒(帧率:647 FPS)
  • F12, PrtScrn to capture. 0 Captures saved.
  • 按 F12 或 PrintScreen 键捕获截图,已保存 0 张截图
  • 画面:一个带木纹纹理的 3D 立方体,展示基础 3D 渲染能力
  • 三、右侧截图信息(Vulkan 渲染)
  • Capturing Vulkan. Frame: 69440. 0.37 ms (2712 FPS)
  • 正在捕获 Vulkan 帧。帧号:69440,单帧耗时:0.37 毫秒(帧率:2712 FPS)
  • F12, PrtScrn to capture. 1 Captures saved.
  • 按 F12 或 PrintScreen 键捕获截图,已保存 1 张截图
  • Captured frame 69015.
  • 已捕获第 69015 帧
  • 画面:数独游戏的主菜单界面,包含 3D 文字与悬浮数字方块,展示 UI 与 3D 场景结合的渲染能力
  • 四、性能对比与背景解读

  • 表格
渲染 API 单帧耗时 帧率
D3D12 1 ms 647 FPS
Vulkan 0.37 ms 2712 FPS
  • 这是 Kaiju Engine 与 Unity 的性能对比演示:
  • Vulkan 后端性能达到 2712 FPS,是 D3D12 后端的约 4.2 倍,也远超 Unity 的常规表现
  • 体现了 Kaiju Engine 极简架构、缓存友好、Go 语言并发优化带来的极致性能优势
  • 右侧数独 Demo 同时展示了 UI 系统与 3D 渲染的高效结合

二

开源游戏引擎

20440734d1c4493199ff75efab28aac9.png~tplv-a9rns2rl98-image.png

A game engine that lets me make games the way I want to

  • 一款能让我按照自己想要的方式开发游戏的引擎

强调高度自定义与开发者友好的设计理念

Maximally multithreaded

  • 最大化多线程化

充分利用多核 CPU,提升性能与并发处理能力

Fast build iteration

  • 快速构建迭代

缩短编译与部署时间,提升开发效率

Cross platform (Windows, Linux, Mac, Android, iOS, AR, VR)

  • 跨平台(支持 Windows、Linux、Mac、Android、iOS、增强现实、虚拟现实)

覆盖主流桌面、移动与沉浸式设备平台

Minimal dependencies

  • 最小化依赖

减少第三方库依赖,降低构建复杂度与潜在冲突

Simplified editor

  • 简化版编辑器

提供轻量、高效的开发工具,避免过度冗余

Vulkan - 3D/2D

  • 基于 Vulkan 图形 API,支持 3D/2D 渲染

采用现代高性能图形接口,兼顾 2D 与 3D 场景渲染

Unified engine and game programming language

  • 引擎与游戏使用统一的编程语言

避免多语言切换成本,提升代码复用与维护性(结合之前信息可知为 Go 语言)

三

编程语言论战(Flame Wars)

7d9e23d7dcc34092a530f622e23e3f99.png~tplv-a9rns2rl98-image.png

Use the right tool for the job

  • 为具体任务选择合适的工具

    Singular function/algorithm measurements are fun but pointless

  • 对单个函数 / 算法做性能测试很有趣,但毫无意义

    As someone who’s made an identical game engine in 3 different languages, as well as created multiple game engines, I’ve learned the following

    作为一个用 3 种不同语言实现过同款游戏引擎、还开发过多个游戏引擎的人,我总结出以下经验

  • 核心结论

    If you don’t lean into the language, you’ll lose a lot of performance

  • 如果你不顺应语言的设计哲学去开发,就会损失大量性能

    The overall design of all your systems, and the communication between or outside of them, dictate your performance

  • 系统的整体架构、模块间 / 模块外的通信方式,才是决定性能的关键

    Individual features can run fast for what they are doing, but will also eat your performance bandwidth

  • 单个功能模块本身可以跑得很快,但它们会消耗整体的性能带宽(即频繁交互带来的开销)

四

cfed145f023c4488b3f8a5c055a9c98c.png~tplv-a9rns2rl98-image.png

对 Go 语言的核心评价

UAbsolutely love C

  • 我非常喜欢 C 语言

    UUse a language (tool) that fits what I need/want

    选- 择符合我需求 / 目标的语言(工具)

    UFeels like C with modern features

  • Go 给人的感觉就像带了现代特性的 C 语言

    UGreat performance

  • 性能优异

    UOutperformed identical engine written in C++

  • 用 Go 实现的同款引擎,性能甚至超过了 C++ 版本

    UEase of use

  • 易于使用

    UExtensive, useful standard library

  • 拥有丰富且实用的标准库

    UMost performance is lost by poor design, not by which system language you use

  • 性能损失大多源于糟糕的设计,而非你选择的系统语言

    Go 语言的核心特性

    USystems programming language

  • 系统级编程语言

    UAllows for Assembly programming

  • 支持汇编级编程

    UBuilt for threading/concurrency

  • 原生为多线程 / 并发而设计

    UBuilt in reflection

  • 内置反射机制

    UVery fast build times

  • 极快的编译速度

    UCooperates with C very well

  • 与 C 语言交互非常顺畅

    UCan even “be” C if needed

  • 必要时甚至可以 “扮演” C 语言的角色

    UCode layout standardization

  • 代码布局标准化(Go fmt 强制统一格式)

    UBuilt in AST

  • 内置抽象语法树(AST)

    五

Kaiju Engine 的核心架构设计原则

0240d11c247b4f2d8276901f382481be.png~tplv-a9rns2rl98-image.png

UInterlocking primitives (much like Unix)

  • 相互关联的基础组件(非常类似 Unix 设计哲学)

强调由小而独立的基础模块组合成复杂系统,每个模块职责单一

UCPU Cache friendly

  • 对 CPU 缓存友好

优化数据布局与访问模式,减少缓存未命中,提升运行时性能

UAssembly where needed

  • 必要时使用汇编语言

在性能关键路径上,可直接编写汇编代码榨干硬件性能

UDesign and redesign systems until they work

  • 反复迭代设计系统,直到其正常工作

拥抱迭代式开发,不追求一步到位的完美设计

USimple code/interfaces

  • 简洁的代码与接口

保持代码可读性与可维护性,降低协作与调试成本

UGarbage collector friendly

  • 对垃圾回收(GC)友好

设计上避免频繁内存分配与释放,减少 GC 停顿对实时性能的影响

UNote on garbage collection and game engines

  • 关于垃圾回收与游戏引擎的特别说明

(后续内容会展开)针对游戏引擎的实时性要求,优化 GC 行为

小结

  • 延续了 Unix “小工具组合” 的思想,用相互协作的基础模块构建复杂系统
  • 兼顾性能优化(缓存友好、汇编级优化)与开发效率(简洁代码、迭代设计)
  • 针对 Go 语言的 GC 特性,专门做了 “GC 友好” 的设计适配,避免游戏运行时出现卡顿

    六

    全局变量设计思路

    d67f219672744d14ab5eafb9e927b29b.png~tplv-a9rns2rl98-image.png

    Globals are not allowed

  • 不允许使用全局变量

    How can you do things simply without globals?

  • 如何在不使用全局变量的情况下简洁地完成开发工作?

    The “Host” is a mediator pattern

    “Host” 是一种中介者模式

    The host is passed nearly everywhere, you access the system through the host

  • Host 实例几乎会被传递到代码的每一处,你通过 Host 来访问整个系统的各类功能

    The host is a composition of primitives, which are a composition of primitives; it’s turtles all the way down

  • Host 是基础组件的组合,而这些基础组件又是更小基础组件的组合;这是一种 “层层嵌套” 的架构(源自谚语 “乌龟驮着世界,一直往下都是乌龟”,用来形容递归式的组合结构)

    小结

  • 核心思想:用 Host 中介者模式 替代全局变量,避免全局状态带来的耦合、测试困难等问题
  • 架构特点:所有系统功能都封装在 Host 中,通过依赖传递的方式在模块间共享,实现高内聚、低耦合
  • 设计哲学:递归式组合(“turtles all the way down”),复杂系统由更小的基础组件层层组合而成

    七

    实体(Entities)与更新(Updates)

    cb31e1894af5402b8b2e5f70446999ac.png~tplv-a9rns2rl98-image.png

    Entities would be called “Actors” or “Game Objects” in other engines

  • 在其他游戏引擎中,这类实体通常被称为 “演员(Actors)” 或 “游戏对象(Game Objects)”

    No inheritance or interfacing

  • 不使用继承或接口 避免面向对象继承层级带来的耦合与复杂度,保持设计简洁

    Holds a transform and optionally some data

  • 仅包含变换信息(位置 / 旋转 / 缩放),并可选择性携带额外数据 实体是轻量化的 “数据容器”,核心是位置信息,而非复杂行为载体

    Updates are registered and manually managed, typically not per-entity but often per-system

  • 更新逻辑需要手动注册与管理,通常不按 “每个实体” 分配,而是按 “每个系统” 集中处理 符合 ECS(实体 - 组件 - 系统)架构思想,将数据与行为分离,提升性能与可维护性

八

用户界面(User Interface)

ac72878fd52d4c54b97404a8398f5a7e.png~tplv-a9rns2rl98-image.png

Retained mode

  • 保留模式(Retained Mode)

UI 元素以树形结构持久化存储,更新时仅修改变化部分,区别于立即模式(Immediate Mode)

Only 2 primitive types, “panel” & “label”

  • 仅包含两种基础类型:「面板(panel)」与「标签(label)」

极简设计,所有复杂 UI 都由这两个基础元素组合而成

Multithreaded

  • 多线程支持

UI 逻辑可并行处理,提升响应速度与性能

CPU cache friendly

  • 对 CPU 缓存友好

数据布局优化,减少缓存未命中,提升渲染效率

Custom built

  • 完全自定义构建

不依赖第三方 UI 框架,自主实现所有功能

HTML & CSS

  • 支持 HTML & CSS 语法

用 Web 技术栈描述 UI 布局与样式,降低学习成本

九

自给自足

3b5e8077423b4a98a11538c0ad2e74bc.png~tplv-a9rns2rl98-image.png

长期目标是尽可能减少对第三方库的依赖。目前依赖的库,未来都计划替换。
库名 用途 计划替换?
github.com/google/uuid 生成唯一 ID 否
tdewolff/parse/v2 CSS 解析器 是
x/clipboard 跨平台复制 / 粘贴 是
Soloud 音乐 / 音效播放 可能
Bullet3 物理引擎 是



KaiJu_Engine Share Tweet +1