游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

写在前面:想要从零手写一套完整强大的 3D 游戏引擎,对于个人开发者而言几乎是一件遥不可及的事情。好在开源生态蓬勃发展,我们不必重复造轮子,掌握引擎的修改与二次开发能力,就足以支撑绝大多数游戏创作的梦想。

一款光鲜亮丽的游戏,炫酷画面、跌宕剧情、拳拳到肉的物理反馈,全部都建立在游戏引擎之上。很多刚入坑的小伙伴分不清游戏逻辑 和游戏引擎底层,也搞不懂一个完整引擎到底由哪些零件拼装而成。今天我们就拨开迷雾,聊聊游戏引擎那些核心知识。

Bilibili 同步视频

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

游戏逻辑 vs 游戏引擎,剧本和摄影机的区别

游戏编程大致可以划分为两大板块:游戏逻辑编程 与游戏引擎编程,二者的分界线其实并非刀割一样清晰。

简单打个比方:做游戏如同拍电影??。

  • 游戏逻辑就是电影剧本:决定什么时候播放剧情、角色何时发起攻击、什么时候播放音效、网络该传递哪些数据。逻辑开发者只关心「要做什么」,不用纠结画面如何渲染、声音怎么解码、动作底层如何运算。

  • 游戏引擎就是整套拍摄与后期设备:接收上层逻辑下达的指令,默默搞定图像绘制、音频处理、网络传输、角色运动等一堆脏活累活,负责解决「该怎么做」。

游戏好不好玩,内核永远是玩法与剧情,引擎不是决定游戏成败的关键。但是一个优秀的引擎,可以把精彩的游戏内容发挥到极致,带来沉浸式视听冲击,就像从老式 2D 影片升级到沉浸式 4D 体验。只要引擎能力足够强悍,当你的游戏剧本已经敲定,底层繁琐工作完全可以交给引擎接管。

现代游戏引擎都包含哪些模块?

如今成熟的商业引擎架构已经十分规范化,一套功能完备的引擎,通常拥有七大核心模块。

现实开发中很少会全部从零自研全部组件,大量模块会直接采购、接入第三方成熟库,减少重复开发成本。

模块 核心作用 常用第三方方案 & 说明
图形引擎 游戏画面渲染的基石,重中之重 大多选择自研,很难完全抽象复用,为画面效果必须定制开发
声音引擎 音乐、音效播放,声音资源管理 FMOD,行业内普及率极高的音频插件
网络引擎 处理游戏网络通信 没有万能通用方案;虚幻引擎网络模块适合 "开房间" 类游戏,并非适配所有服务器架构
脚本引擎 供策划 / 玩家拓展游戏玩法、AI 逻辑 魔兽争霸 3、红警 2 都支持脚本拓展;参考书籍《游戏脚本高级编程》
GUI 图形用户界面 血条、分数、弹窗等屏幕 2D 界面 ScaleForm 为知名 UI 引擎,UI 体验直接影响玩家手感
人工智能引擎 游戏角色 AI 行为逻辑 虚幻内置带编辑器的 AI;Unity 可在商店购入 AI 插件
物理引擎 碰撞、刚体运动、射线检测、布料模拟等 PhysX、Havok、Bullet,PhysX 与 Bullet 开源;软体、流体仿真项目中使用相对较少

表格说明:该表格汇总游戏引擎七大核心模块,清晰展示每个模块的定位以及业界主流实现方式,帮助快速建立整体认知。

游戏编辑器:游戏开发者的工作台

引擎本体负责运行游戏,而编辑器,则是我们制作游戏内容的工作台。它不止能够编辑各类游戏资源,还承担资源管理、性能分析、打包部署、版本发布全套工作。

下面用一张思维导图梳理编辑器各类组件:
#mermaid-svg-T1egBUp5vkhzWcKh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-T1egBUp5vkhzWcKh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-T1egBUp5vkhzWcKh .error-icon{fill:#552222;}#mermaid-svg-T1egBUp5vkhzWcKh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-T1egBUp5vkhzWcKh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-T1egBUp5vkhzWcKh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-T1egBUp5vkhzWcKh .marker.cross{stroke:#333333;}#mermaid-svg-T1egBUp5vkhzWcKh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-T1egBUp5vkhzWcKh p{margin:0;}#mermaid-svg-T1egBUp5vkhzWcKh .edge{stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .section--1 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section--1 path,#mermaid-svg-T1egBUp5vkhzWcKh .section--1 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section--1 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section--1 text{fill:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth--1{stroke-width:17;}#mermaid-svg-T1egBUp5vkhzWcKh .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-0 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-0 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-0 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-0 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-0 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-0{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-0{stroke-width:14;}#mermaid-svg-T1egBUp5vkhzWcKh .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-1 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-1 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-1 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-1 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-1 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-1{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-1{stroke-width:11;}#mermaid-svg-T1egBUp5vkhzWcKh .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-2 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-2 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-2 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-2 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-2 text{fill:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-2{stroke-width:8;}#mermaid-svg-T1egBUp5vkhzWcKh .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-3 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-3 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-3 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-3 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-3 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-3{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-3{stroke-width:5;}#mermaid-svg-T1egBUp5vkhzWcKh .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-4 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-4 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-4 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-4 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-4 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-4{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-4{stroke-width:2;}#mermaid-svg-T1egBUp5vkhzWcKh .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-5 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-5 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-5 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-5 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-5 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-5{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-5{stroke-width:-1;}#mermaid-svg-T1egBUp5vkhzWcKh .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-6 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-6 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-6 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-6 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-6 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-6{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-6{stroke-width:-4;}#mermaid-svg-T1egBUp5vkhzWcKh .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-7 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-7 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-7 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-7 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-7 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-7{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-7{stroke-width:-7;}#mermaid-svg-T1egBUp5vkhzWcKh .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-8 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-8 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-8 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-8 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-8 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-8{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-8{stroke-width:-10;}#mermaid-svg-T1egBUp5vkhzWcKh .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-9 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-9 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-9 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-9 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-9 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-9{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-9{stroke-width:-13;}#mermaid-svg-T1egBUp5vkhzWcKh .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-10 rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-10 path,#mermaid-svg-T1egBUp5vkhzWcKh .section-10 circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-10 polygon,#mermaid-svg-T1egBUp5vkhzWcKh .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-10 text{fill:black;}#mermaid-svg-T1egBUp5vkhzWcKh .node-icon-10{font-size:40px;color:black;}#mermaid-svg-T1egBUp5vkhzWcKh .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .edge-depth-10{stroke-width:-16;}#mermaid-svg-T1egBUp5vkhzWcKh .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled,#mermaid-svg-T1egBUp5vkhzWcKh .disabled circle,#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:lightgray;}#mermaid-svg-T1egBUp5vkhzWcKh .disabled text{fill:#efefef;}#mermaid-svg-T1egBUp5vkhzWcKh .section-root rect,#mermaid-svg-T1egBUp5vkhzWcKh .section-root path,#mermaid-svg-T1egBUp5vkhzWcKh .section-root circle,#mermaid-svg-T1egBUp5vkhzWcKh .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-T1egBUp5vkhzWcKh .section-root text{fill:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .section-root span{color:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .section-2 span{color:#ffffff;}#mermaid-svg-T1egBUp5vkhzWcKh .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-T1egBUp5vkhzWcKh .edge{fill:none;}#mermaid-svg-T1egBUp5vkhzWcKh .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-T1egBUp5vkhzWcKh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 游戏引擎编辑器
常用编辑器
场景编辑器:摆放模型、光源、摄像机
粒子特效编辑器:制作爆炸、火花等特效
模型浏览器:浏览、检视模型资源
动画编辑器:编辑动画,触发游戏事件
材质编辑器:修改模型外观质感
资源管理器:统一管控全部游戏素材
拓展编辑器
物理编辑器
AI行为树编辑器
脚本编辑器
技能编辑器

图表说明:思维导图梳理引擎编辑器的组成,分为常用核心编辑器与拓展专用编辑器两大类,直观展示每个工具的用途。像 Unity、Unreal 这些主流引擎,都集成了上面绝大多数工具。

对于入门新手,建议从 Unity 入手,阅读配套入门书籍,动手做几个小型 Demo,在实操中熟悉编辑器各个功能,是最高效的学习路径。

数学,游戏引擎的内功根基

如果把引擎比作高楼,数学就是深埋地下的地基。不管是写引擎底层,还是做游戏逻辑开发,都离不开数学。高等数学、线性代数、概率统计都是储备知识。

提示:不必被复杂理论吓到!引擎中大量算法都已经封装成成熟库,学会熟练调用就可以完成大部分工作,本文也不会涉及晦涩的多重微积分,聚焦实战高频用到的基础知识点。推荐读物:《3D 数学基础:图形与游戏开发》

需要重点掌握的数学知识点

  1. 向量 ?

    向量是图形学常客,拥有大小与方向。分清标量、点、2D/3D/4D 向量。3D 向量既能代表空间位置点,也可以表达朝向方向。

    需要吃透:向量加减、缩放、求长度、归一化、点积、叉乘等运算,以及每一种运算在游戏场景代表什么物理含义。

  2. 矩阵 ??

    矩阵主要用来做空间变换 ,引擎中以 3×3、4×4 矩阵为主。

    掌握概念:矩阵维度、单位矩阵、转置、求逆、正交矩阵;矩阵与矩阵、矩阵与向量的乘法,乘法顺序不同结果会截然不同。

  3. 四元数 ??

    多用于解决三维旋转,熟悉四元数模、共轭、逆、点乘、叉乘基础定义,网上有大量资料可以查阅。

  4. 基础几何体 ??

    直线、射线、线段、三角形、球体、胶囊体、平面...... 大多用于碰撞检测、相交判断、距离计算,全部以参数化形式描述。

  5. 欧拉角 ??

    欧拉角依靠方位定义旋转,旋转顺序不同,最终结果天差地别 。文中配套引擎采用Roll→Pitch→Yaw旋转顺序。

    非常关键:务必搞懂欧拉角、矩阵、四元数三者之间的转换逻辑,注意部分情况下转换并不具备可逆性。

写在最后

游戏引擎是一个庞大的综合体:上层是玩法逻辑,中间是编辑器工具链,底层依靠图形、物理、网络等各个模块协同工作,而数学则是驱动一切底层运算的源动力。

不必畏惧引擎的庞大复杂,学习可以循序渐进。先搞懂各个模块各司什么职责,再一点点补齐图形学数学基础,动手实操,慢慢就能揭开游戏引擎的神秘面纱。

相关推荐
m0_380743871 小时前
Qt实现调用相机进行拍照并进行图像处理
开发语言·c++
wangqiaowq1 小时前
AST 安全求值
java·开发语言
我们从未走散1 小时前
AI 生图平台如何避免资损:用“扣款与凭据同事务”构建三态账本
开发语言·数据库·php
weixin_440730502 小时前
字符编码笔记-utf-8 、unicode、gbk,ascii编码格式
开发语言·笔记
励志不掉头发的内向程序员3 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
PHP实战开发录3 小时前
PHP接口大整数为什么变了
开发语言·php
临床数据科学和人工智能兴趣组6 小时前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
警醒与鞭策9 小时前
【无标题】
android·unity·性能优化·游戏引擎·perforce
andyweike9 小时前
php笔记
开发语言·笔记·php