摘要: 目前开发的游戏在地图部分的加载是一次性完全加入内存中。随着项目的发展,目前已经有6块区域,平均一块区域要占用2-4MB内存,6块一共大概也有15MB左右。这个对于手机游戏来说已经是一个不小的数目了。更重要的是这种方式是不可持续的,随着区域的增加,内存占用还会不停地增长。因此必须对现有的方法进行替... 阅读全文
posted @ 2014-11-18 17:20 PbLite 阅读(324) 评论(0) 推荐(1) 编辑
摘要: 用unity3d做游戏也有一段时间了,这周有一个渲染的需求,用到的技术不算很深,但确实也比较繁琐,值得记录一下。 需求大概是这样的,有四层图,我们称为A,B,C,D四层。他们的Blend顺序是A->B->C->D,其中C对D的Blend算法使用的是PS中的叠加算法,B->C,D是替换,A->B... 阅读全文
posted @ 2014-07-22 18:07 PbLite 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 这是一个多变的时代,一次又一次的浪潮将不同的人推上了巅峰。新的人想搭上这一波,同时老的人也不想死在沙滩上。这些年新的浪潮又一次推开,历史不停地重复上演,那便是移动互联网。它的兴起无人抗拒,而在这一波浪潮中移动互联网游戏更是重中之重。 在这个混沌时期,手机游戏以几倍的速度经历着客户端游戏曾经走过的道路,从轻度到重度,从弱交互到强交互,从简单到复杂。来到2014,我们正处于一个中间时期,由于门槛低,渠道单一,手机游戏依然是渠道为王。当然这并不是这篇随笔的重点。 同时手机游戏由于目前的环境,需要更快的速度推上市场,这便带来了快速开发的需求。而unity3d搭上了这一波,同时也将.net更深入... 阅读全文
posted @ 2014-03-21 01:18 PbLite 阅读(1475) 评论(5) 推荐(2) 编辑
摘要: 上周美术同学在使用unity3d制作lightmap的过程中,发现部分被lightmap影响的模型在移动端上效果与pc端不一致。当时我大概看了下,分析后,得到一个结论是“在移动端上lightmap的hdr格式转换到ldr格式后,着色时没有进行tonemap的还原”。因此效果就是曝光度>1的部分,最多只能显示出原本模型diffuse贴图的色调,而不是达到曝光的色调。所以当时我给出的解决办法就是将hdr->ldr转换时的压缩比列得到,最后在shader采样出ldr光照贴图后使用这个比例值还原hdr的效果。当然具体怎么做,还必须参考unity3d内部的要求。 到了本周,得知进展不大。于是 阅读全文
posted @ 2014-01-16 22:46 PbLite 阅读(3395) 评论(2) 推荐(0) 编辑
摘要: 之前游戏为了解决在ios自动更新的问题,想到使用了将游戏代码打包成dll,使用反射加载执行的办法。办法想好了以后,一直没有做测试。上周不知道什么原因,终于有人去测试了,结果发现报错了。我当时觉得有点意外。虽说网上有人说ios上不能使用.net的反射模块,但是后来我仔细研究过这个问题,发现技术上应该是可行的。因为unity在使用C#作为脚本时,底层是使用的是mono。而使用mono的话,在ios平台上面,底层就应该是使用的Xamarin.iOS。它对于ios的限制主要在于它使用了AOT编译,而不是传统的JIT,也就是说IL代码在编译时,就被翻译成对应平台的机器码,而不是如JIT一样,在运行时.. 阅读全文
posted @ 2013-12-31 12:00 PbLite 阅读(1876) 评论(0) 推荐(1) 编辑
摘要: 深度缓冲,做图形的朋友应该不会陌生。一般来说我们通过深度缓冲来确定一个像素是否比另一个像素离摄像机更远。在图形学中,我们一般使用三次空间变换,来将模型坐标系下的物体坐标,转换到clip space下(x : -1 ~ 1, y: -1 ~ 1, z -1 ~ 1),然后最后再将clip space计算得来的图形变换到屏幕像素空间。 要说非线性深度之前,我们先说说线性深度,所谓线性,就是指变化曲线的一阶导数为常量,也就是说变化量是恒定的。既然变换是恒定的,那么深度z的采样点在-1~ 1之间就是均匀分布。在做延迟渲染时,我们一般需要这种深度,以避免深度采样点分布不均匀时,在某一区间内由深度计... 阅读全文
posted @ 2013-12-20 20:34 PbLite 阅读(3667) 评论(1) 推荐(1) 编辑
摘要: 一般来说网游要求逻辑在服务端计算,原因是一方面利于玩家之间逻辑同步的实现,另一方面服务器做仲裁方,防止玩家作弊。但在有些情况下,由于一些逻辑要求的实时性很高,我们不得不把一些逻辑的判断放在客户端,以保证游戏的流畅感。比如动作游戏中,玩家受击时的动作切换,如果需要根据属性逻辑计算的结果切换到不同被动动作,不同的被动动作意味着玩家是否能更快的反击对方。 在这种情况下,如果服务器无法直接参与这部分的逻辑计算,那么服务器可以验证客户端传来的结果是否与服务器计算的一致,从而判定客户端是否有作弊的嫌疑。由于客户端不需要等待验证结果,所以游戏的流畅感被保证了。同时,服务器能够判定玩家是否作弊,以此为证... 阅读全文
posted @ 2013-12-12 16:35 PbLite 阅读(3094) 评论(0) 推荐(0) 编辑
摘要: 由于公司用unity3d开发客户端部分,今天去参加了下unity3d成都开发者大会。在这里简单记录一下会议里关于unity3d的内容。 说到unity3d,第一次知道的时候也是大概3年前的事情。这几年它发展十分迅猛,不得不佩服他在中国市场上推广的投入。相对于unreal与crysis这些大牌引擎商,unity3d无论从上手难度,使用成本,开发便捷都要更胜一筹。虽然它在次世代效果上不如前者,但对于市场上大多数游戏,尤其是手机,Pad,以及国内网游来说已经是大大够用了。在目前的市场来看,大型游戏,次世代游戏已经成为少数大厂家的专利。小中型团队由于技术门槛,开发成本,团队磨合度等因素,基本... 阅读全文
posted @ 2013-11-13 23:53 PbLite 阅读(806) 评论(1) 推荐(0) 编辑
摘要: 这部分主要聊C Nodes。首先我们需要了解下Erlang的分布式系统:分布式Erlang: 分布式Erlang是由一组相互通信的Erlang运行时组成,其中每一个运行时称为一个Node。不同Node上的进程通过消息通信(TCP/IP),并且Node对于进程来说是透明的。比如Pid ! Msg,调用进程不需要知道Pid是在哪个Node上。但是当使用进程的注册名进行消息投递时,如果投递的进程不在同一个Node上,这时我们需要带上Node的名称才行,因为进程注册名只是进程所属Node上的本地信息。 【启动Node】 一个Node通过添加命令行-name 或者 -sname启动运行时来创建... 阅读全文
posted @ 2013-11-13 22:27 PbLite 阅读(1898) 评论(0) 推荐(1) 编辑
摘要: 前面聊了普通端口,今天聊下链入式驱动端口,以及NIFs。链入式驱动端口 如上图所示,链入式驱动端口与Erlang虚拟机存在于同一个OS进程中。 在Erlang这边与普通端口类似,所有与链入式驱动端口的通信,也是通过一个Erlang的连接进程进行的,终止这个进程将同时终止端口。在端口创建之前,驱动需要先载入运行时(驱动以动态库方式提供),可以通过erl_dll:load_driver/1函数。然后就与普通端口一样,使用open_port/2函数打开。 -module(complex5).-export([start/1, stop/0, init/1]).-export([foo/... 阅读全文
posted @ 2013-11-12 15:16 PbLite 阅读(1604) 评论(2) 推荐(2) 编辑