当前位置:文档之家› 《腾讯游戏开发精粹》文字版 2019年9月1日

《腾讯游戏开发精粹》文字版 2019年9月1日

《腾讯游戏开发精粹》内容提要《腾讯游戏开发精粹》是腾讯游戏研发团队的技术结晶,由10多名腾讯游戏资深技术专家撰写而成,整理了团队在自主游戏研发的道路上积累沉淀的技术方案,具有较强的通用性及时效性,内容涵盖游戏脚本系统及开发工具、数学和物理、计算机图形、人工智能与后台架构等。

目录第一部分游戏数学第1 章基于SDF的摇杆移动2摘要21.1 引言31.2 有号距离场(SDF 31.3 利用栅格数据预计算SDF 41.4 SDF 的碰撞检测与碰撞响应51.5 避免往返81.6 利用多边形数据预计算SDF 91.7 其他需求101.7.1 如何将角色从障碍区域中移出10 1.7.2 角色不能越过障碍物的远距离移动11 1.8 动态障碍物121.9 AI寻路141.10 动态地图141.11 总结17参考文献17第2 章高性能的定点数实现方案18摘要182.1 引言182.1.1 浮点数简介182.1.2 32 位浮点数(单精度)表示原理19 2.2 基于整数的二进制表示的定点数原理19 2.2.1 32 位定点数表示原理192.2.2 64 位定点数表示原理202.3 定点数的四则运算212.3.1 加法与减法222.3.2 乘法222.3.3 除法232.4 定点数开方与超越函数实现方法23 2.4.1 多项式拟合242.4.2 正弦/余弦函数252.4.3 指数函数262.4.4 对数函数272.4.5 开方运算272.4.6 开方求倒数282.4.7 为什么不用查表法302.5 定点数的误差对比与性能测试302.5.1 超越函数及开方的误差测试302.5.2 性能测试302.6 总结31参考文献31第二部分游戏物理第3 章一种高效的弧长参数化路径系统34 摘要343.1 引言343.2 端点间二次样条的构建353.3 路径的构建383.4 曲线的弧长参数化393.5 曲线上的简单运动423.5.1 跑动423.5.2 跳跃433.5.3 相邻路径的切换443.5.4 曲线上的旋转插值453.6 总结46参考文献46第4 章船的物理模拟及同步设计47 摘要474.1 浮力系统484.1.1 浮力484.1.2 升力524.1.3 拉力524.1.4 拍击力534.1.5 阻力上限544.2 引擎系统554.2.1 移动、转向模拟554.2.2 向心力计算564.3 Entity-Component 及同步概览564.4 浮力系统物理更新机制574.5 总结59参考文献59第5 章3D 游戏碰撞之体素内存、效率优化60 摘要605.1 背景介绍605.2 体素生成625.3 体素内存优化625.3.1 体素合并的原理625.3.2 体素合并的算法645.3.3 地面处理655.3.4 水的处理665.3.5 范围控制675.3.6 内存自管理675.3.7 体素内存优化算法的效果68 5.3.8 体素效率优化695.4 NavMesh 生成695.4.1 体素生成NavMesh 695.4.2 获取地面高度705.4.3 后台阻挡图715.4.4 前台优先级NavMesh 715.4.5 锯齿725.5 行走、轻功、摄像机碰撞735.5.1 行走735.5.2 轻功755.5.3 摄像机碰撞75参考文献76第三部分计算机图形第6 章移动端体育类写实模型优化78 摘要786.1 引言796.2 方案设计思路796.2.1 角色统一与差异元素分析796.2.2 角色表现=人体+服饰806.2.3 角色资源整理836.2.4 资源制作与实现846.3 具体实现926.3.1 实现流程926.3.2 CPU 逻辑936.3.3 GPU 渲染976.4 效果收益、性能分析和结语976.4.1 方案优劣势986.4.2 方案补充996.4.3 应用场景99参考文献100第7 章大规模3D 模型数据的优化压缩与精细渐进加载101摘要1017.1 引言1027.2 顶点数据优化1027.2.1 顶点数据合并去重1037.2.2 索引数据合并1047.2.3 顶点数据排序1047.2.4 子网格的拆分与合并1057.2.5 顶点数据编码压缩1057.3 有利于渐进加载的数据组织方式1127.4 总结113参考文献114第四部分人工智能及后台架构第8 章游戏AI 开发框架组件behaviac 和元编程116摘要1168.1 behaviac 的工作原理1178.1.1 类型信息1178.1.2 什么是行为树1188.1.3 例子1 1198.1.4 执行说明1198.1.5 进阶1208.1.6 例子2 1208.1.7 再进阶1238.1.8 总结1238.2 元编程在behaviac中的应用1258.2.1 模板特化1268.2.2 加载中的特例化1268.2.3 运行中的特例化129第9 章跳点搜索算法的效率、内存、路径优化方法131摘要1319.1 引言1329.2 JPS算法1339.2.1 算法介绍1339.2.2 A*算法流程1339.2.3 JPS算法流程1359.2.4 JPS算法的“两个定义、三个规则1359.2.5 算法举例1379.3 JPS算法优化1389.3.1 JPS效率优化算法1389.3.2 JPS内存优化1449.3.3 路径优化1459.4 GPPC 比赛解读1469.4.1 GPPC 比赛与地图数据集1469.4.2 GPPC 的评价体系1489.4.3 GPPC 参赛算法及其比较150参考文献151第10 章优化MMORPG开发效率及性能的有限多线程模型152摘要15210.1 引言15210.1.1 多进程单线程模型15310.1.2 单进程多线程模型15310.1.3 单进程单线程模型15310.2 有限多线程模型15410.3 使用OpenMP框架快速实现有限多线程模型15610.4 控制多线程逻辑代码15810.5 异步化解决数据安全问题15910.6 对“不安全”访问的防范16010.7 拆解大锁16110.8 其他建议163参考文献164第五部分游戏脚本系统第11 章Lua翻译工具——C#转Lua 166摘要16611.1 设计初衷16611.2 实现原理16711.2.1 参考对比行业内类似的解决方案16711.2.2 翻译原理16811.2.3 翻译流程16811.3 翻译示例17011.4 实现细节17411.4.1 连续赋值17511.4.2 switch 17511.4.3 continue 17611.4.4 不定参数17711.4.5 条件表达式17811.5 运行性能17911.6 TKLua 翻译蓝图17911.6.1 类关系18011.6.2 类成员18011.6.3 方法体18111.7 发展方向18211.8 总结184参考文献185第12 章Unreal Engine 4集成Lua 186 摘要18612.1 引言18612.2 UE4 元信息18712.2.1 介绍18712.2.2 Lua 通过元信息与UE4交互18912.2.3 读写成员变量18912.2.4 函数调用19012.2.5 C++调用Lua 19112.2.6 小结19212.3 通过模板元编程生成“胶水”代码192 12.3.1 接口设计19312.3.2 实现19512.3.3 读写成员变量19712.3.4 引用类型19812.3.5 导出函数19912.3.6 默认实参20012.3.7 默认生成的函数20212.3.8 C++调用Lua 20312.3.9 小结20312.4 优化20312.4.1 UObject 指针与Table 20312.4.2 结构体20412.4.3 运行时热加载205第六部分开发工具第13 章使用FASTBuild助力Unreal Engine 4 208 摘要20813.1 引言20913.2 UE4 分布式工具20913.2.1 Derived Data Cache(DDC 20913.2.2 Swarm 21013.2.3 IncrediBuild 21013.2.4 FASTBuild 21113.3 在Windows系统下搭建FASTBuild 工作环境21313.3.1 网络架构21313.3.2 搭建基本环境21413.3.3 可用性验证21513.4 使用FASTBuild 分布式编译UE4代码和项目代码21913.4.1 准备工作21913.4.2 部署多机FASTBuild 环境22013.4.3 编译UE4 代码及对比测试22013.4.4 优化FASTBuild 22413.4.5 再次测试分布式编译UE4代码22713.5 “秒”编UE4着色器22813.5.1 准备工作22913.5.2 大规模着色器编译测试23713.5.3 材质编辑器内着色器编译测试24013.6 总结243第14 章一种高效的帧同步全过程日志输出方案244 摘要24414.1 引言24414.2 帧同步的基础理论24514.2.1 基本原理24514.2.2 系统抽象24614.3 本方案最终解决的问题24714.4 全日志的自动插入25014.4.1 在函数第一行代码之前自动插入日志代码25014.4.2 处理手动插入的日志代码25114.4.3 对每行日志代码进行唯一编码25114.4.4 构建版本25214.4.5 整体工具流程及代码清单25214.4.6 为什么不采用IL 注入25614.5 运行时的日志收集25614.5.1 整体业务流程25614.5.2 高效的存储格式25814.5.3 高性能的日志输出25914.5.4 正确选择合适的校验算法25914.6 导出可读性日志信息26014.7 本方案思路的可移植性26014.8 总结261第15 章基于解析符号表,使用注入的方式进行Profiler采样的技术262摘要26215.1 进行测量之前的准备工作26315.1.1 注入的简单例子26315.1.2 注入额外的代码26415.1.3 注入的注意事项26515.2 性能的测量26715.2.1 时间的统计方法26715.2.2 针对函数的采样26815.2.3 测量实战27315.3 总结2762019年9月1日,正值开学之际,腾讯游戏学院为广大游戏爱好者们和在游戏行业里持续钻研学习的开发者们,送上一份重磅知识干货——《腾讯游戏开发精粹》。

本书包含腾讯游戏多个原创技术方案和上线游戏应用案例,全面阐述腾讯游戏最新技术积累和创新。

很长一段时间以来,游戏开发由于技术领域广、不同游戏类型需求差异大等原因,相关的知识和技术流通不够普及,不利于从业者的进步,长远来看甚至会影响行业的持续发展。

相关主题