最新 | 最热门 | 最高评价

+0  设计了一个数据格式

Tag: 游戏开发 | 语言与设计
云风 发于 2019年01月31日 14:06 | 点击: 3787 | 展开摘要
最近一段时间在忙着设计和实现我们游戏引擎用到的数据格式。

在此之前,我们一直在直接使用 lua 描述数据;但最近随着数据类型系统的完善,同事建议设计一种专有数据格式会更好。希望专用格式手写和阅读起来能比 lua 方便,对 diff 更友好,还能更贴近我们的类型系统,同时解析也能更高效一些。lua 的解析器虽然已经效率很高,但是在描述复杂数据结构时,它其实是先生成的构造数据结构的字节码,然后再通常虚拟机运行字节码才构造出最终的数据结构。这样的两步工作会比一趟扫描解析构造要慢一

查看全文: http://www.udpwork.com/item/17373.html

+0  粒子系统的设计

Tag: 游戏开发
云风 发于 2019年01月09日 16:44 | 点击: 1790 | 展开摘要
因为需要为我们的 3d engine 添加特效系统的模块,我最近读了一篇文章:Efficient CPU Particle Systems 。文章的作者为很多 MMO / MOBA 游戏设计过粒子系统,其中最有名的是上古卷轴 Online 。所以我认为他的实践很有参考价值。

文章很长,夹杂着设计思路,优化,算法实现,渲染实现。对于我来说,由于过去我做过好几版粒子系统,所以读起来不太费力,很多细节可以直接略过,我今天写一篇 blog 把我认为文章中对我最有参考价值的部分列出来

查看全文: http://www.udpwork.com/item/17279.html

+0  一种 16 倍抗锯齿字体渲染的方法

Tag: 算法 | 游戏开发
云风 发于 2019年01月08日 18:01 | 点击: 1801 | 展开摘要
昨天读了几篇文章,讲解了一种新的抗锯齿字体渲染的方法 。

我觉得颇有意思,就试着实现了一版 CPU 版本,想看看针对中文的效果。虽然最后觉得这个算法对游戏领域的实用性不大,不过还是挺有启发的。这里写写我对这个算法的理解,以及我所理解的算法局限性。

原文讲解的非常细致,还配了不少图片,我就不再重复了,只简单说两句。

我认为发明这个算法的动机是 “Our UI has a lot of smooth animation, text should be able to mov

查看全文: http://www.udpwork.com/item/17278.html

+0  ECS 中的 Entity

Tag: 游戏开发 | 语言与设计
云风 发于 2018年11月30日 16:04 | 点击: 1665 | 展开摘要
我认为 ECS 框架针对的问题是传统面向对象框架中,对象数量很多而对象的特性非常繁杂,而针对对象的不同方面 aspect 编写处理逻辑会非常繁杂。每个针对特定的方面执行业务,都需要从众多对象中挑选出能够操作的子集,这样性能低下,且不相关的特性间耦合度很高。

所以 ECS 框架改变了数据组织方式,把同类数据聚合在一起,并用专门的业务处理流程只针对特定数据进行处理。这就是 C 和 S 的概念:Component 就是对象的一个方面 aspect 的数据集,而 System 就是

查看全文: http://www.udpwork.com/item/17223.html

+0  动作游戏中的击打判定

Tag: 游戏开发
云风 发于 2018年09月20日 16:26 | 点击: 1624 | 展开摘要
最近在玩怪物猎人世界,断断续续差不多 100 小时了,加上之前花在这个系列上的几百小时,不敢说是个老猎人,忠实粉丝还是算得上的。

因为职业原因,我又琢磨了一下这类游戏的实现方法。在网上搜不到太多直接资料,所以这篇 blog 更多的是对自己的想法的记录。这次主要还是想理解一下游戏中是如何处理武器和怪物之间的击打判定的。

我知道动作游戏和格斗游戏侧重点不同,但也有类似之处。格斗游戏尤其是 2D 格斗游戏资料比较全,制作方法成熟,从网上能找到不少资料介绍原理。浅谈格斗游戏的精髓

查看全文: http://www.udpwork.com/item/17094.html

+0  lockstep 网络游戏同步方案

Tag: 游戏开发
云风 发于 2018年08月31日 11:27 | 点击: 1819 | 展开摘要
今天想写写这个话题是因为上周我们一个 MOBA 项目抱怨 skynet 的定时器精度只有 10ms (100Hz),无法满足他们项目 “帧同步” 的需求。他们表示他们的项目需要服务器精确的按 66ms 的周期向客户端推送数据,而 skynet 只能以 60ms 或 70ms 的周期触发事件,这影响了游戏的“手感” 。

讨论下来,我认为,这是对所谓“帧同步” 算法有什么误解。我们客户端运行时不应该依赖服务器的准时推送消息才能得到(手感)正确的结果。虽然在 skynet 下你可

查看全文: http://www.udpwork.com/item/17036.html

+0  虚拟文件系统的自举

Tag: 游戏开发
云风 发于 2018年08月16日 11:43 | 点击: 1754 | 展开摘要
我们给游戏引擎设计了一个虚拟文件系统,可以挂接不同的文件系统实现,比如本地文件系统模块,内存文件系统模块,网络文件系统模块。比如前几天谈到的资源仓库,就是一个文件系统模块。

这个虚拟文件系统是用 lua 编写的,这就有了一个小问题:lua 代码本身也是放在虚拟文件系统中的,那么就需要解决自举。这些代码很有可能需要从网络更新(网络文件系统模块),而网络模块也是 lua 编写的,代码同样放在这套文件系统内。

这篇 blog 我想谈谈自举是怎样完成的。

首先我不想做的太复杂。

查看全文: http://www.udpwork.com/item/17004.html

+0  Lua 虚拟机的封装

Tag: lua与虚拟机 | 游戏开发
云风 发于 2018年08月15日 16:06 | 点击: 1774 | 展开摘要
我打算就我们在开发客户端引擎框架时最近遇到的两个问题写两篇 Blog ,这里先谈第一个问题。

我们的框架技术选型是用 Lua 做开发。和很多 C++ 开发背景(现有大部分的游戏客户端引擎使用 C++ 开发)的人的认知不同,我们并不把 Lua 作为一个嵌入式脚本来看待,而是把它当成一种通用语言来设计整个引擎框架。

其实这更接近 HTML5 流行之后,用 javascript 设计游戏引擎框架:虽然 javascript 的虚拟机本身是用 C++ 开发的,但和游戏引擎相关的部

查看全文: http://www.udpwork.com/item/17003.html

+0  游戏资源仓库及升级发布

Tag: 游戏开发 | 语言与设计
云风 发于 2018年08月15日 11:20 | 点击: 1670 | 展开摘要
去年底,我为我们的 3d engine 设计了资源仓库的结构。

随后交给开发组的一个同学实现,这半年来,一直在使用。最近做了引擎一个小版本的内部验收,我感觉这块东西还有比较大的改进余地。因为资源文件系统目前和开发期资源在线更新部分现在掺杂在一起,而网络更新部分似乎还有些 bug ,偶尔会卡住。我觉得定位 bug 成本较高,不如把这块重新实现一遍,顺便把新的改进想法加进去。

这段时间,我重新思考了资源仓库应该怎样设计更合理。越细想越觉得和 git 要解决的问题基本一致。我们

查看全文: http://www.udpwork.com/item/17002.html

+0  通过斜切变换 2d sprite 提高装箱率

Tag: 游戏开发
云风 发于 2018年01月19日 17:05 | 点击: 2415 | 展开摘要
现代 2d 游戏的图形地层绝大多数也是基于 3d api 实现的。为了提高性能,通常要把若干图元 (sprite) 装箱在整张贴图中。这个装箱过程可以是在线下完成,也可以是在运行期来做。

TexturePacker 就是做这件事的优秀商业工具。不过我认为把它放在开发工具链中还有一些不足。图元的装箱和根据装箱结果合成贴图是两件事情,如果我们是手工操作,合在一起完成当然方便;但如果是在自动化流程中,分开独立完成更好。因为迭代开发过程中,每次重新打包资源,都只会修改少部分图元,且

查看全文: http://www.udpwork.com/item/16607.html

+0  资源文件系统的设计

Tag: 游戏开发
云风 发于 2017年12月20日 11:47 | 点击: 1954 | 展开摘要
上次说到,我们的引擎打算在 PC 上开发,设备上直接调试。如果是按传统的开发方式:运行前将 app 打包上载然后再运行,肯定是无法满足开发需要的。所以必须建立一套资源的同步机制。

目前,我们已经实现了基本的资源文件系统,大致是这样工作的:

所有的资源文件,包括程序代码本身(基于 Lua),都是放在开发 PC 上的。开发环境会缓存每个文件的 md5 值,文件系统将用此 md5 值为标准,默认 md5 相同的文件,其内容也是一致的,暂不考虑 md5 冲突的问题。

在设备上,

查看全文: http://www.udpwork.com/item/16552.html

+0  近期在 bgfx 上做的一些工作

Tag: 我爱折腾 | 游戏开发
云风 发于 2017年10月26日 14:58 | 点击: 1988 | 展开摘要
这段时间玩 bgfx ,除了前段公布的 lua binding 外,还颇做了一些别的工作。

首先是帮 bgfx 的 directx 12 driver 打了补丁,使之可以用 mingw build 出来正确运行。也就是之前 blog 上提到的 Direct3D12 的接口设计 bug 。这个 pr 已经被官方接纳。

然后是我给 bgfx 的 debug text 做了中文的支持。 bgfx 专门做了一个层,模拟 VGA 的 text mode 。一开始我学着过去 dos

查看全文: http://www.udpwork.com/item/16475.html
|<<<1234567>>>| 一共10页, 112条记录