- 博客(44)
- 资源 (9)
- 收藏
- 关注
原创 移动硬盘复活记
前几天把移动硬盘接到机箱上的usb时电压不太够,顺手就找了个直流变压器接上了。过了一小会,感觉不对劲,usb线怎么这么热。立即把电源拔下来一看,坏了,15V的。果然,移动硬盘再怎么插也没反应了。当时第一反应是可能电压过载会把硬盘盒的保护电路烧掉,但是硬盘本身应该是好的。所以把硬盘盒拆开,把硬盘取出来直接接到电脑的SATA接口上试试,结果电脑都起不来了。这回彻底悲剧了。虽然硬盘里没有非常重要的东西,...
2018-03-10 22:55:08
1292
1
原创 罪恶装备Xrd卡通渲染
随着前两年《阴阳师》《崩坏学院3》的大成,行业内掀起了一股二次元小高潮。很多公司都在上马二次元风格的产品。话说我们几年前就有团队想做二次元风格的产品,然而当时鹅厂的市场根据用户数据分析给出的意见是,二次元属于小众市场,在当时手游市场飞速增长,动不动就出爆款的环境下,小众市场当然是应该被抛弃的。但是猪场的团队显然不是这么思考问题的,所以有了《阴阳师》。由此可以看出,鹅厂和猪场的打法是非常不同的,扯远...
2018-03-10 20:59:39
8881
原创 近来用到的几个技术点
mono的JIT在运行时会造成轻微的卡顿。为了避免这个卡顿对手感的影响,我们在进入游戏时就对局内的功能类做预编译。预编译很简单,调用一下函数指针即可。找到应该预编译哪些累则稍麻烦一些,要给mono加些日志,输出局内JIT编译的函数列表局内关闭mono的GC,具体内容在之前的一篇博客中有介绍Android平台内存分析。为了降低内存占用,我们对游戏进程在android平台上的内存占用进行了仔细的分析,
2017-12-31 14:10:04
568
原创 关闭mono的GC,防止其带来的卡顿
我们的游戏品类特殊,对游戏对局内的画面流畅性要求极高。不允许出现可以明显察觉的卡顿。当我们解决了所有对象创建,JIT编译等带来的卡顿之后。还有一个较为棘手的卡顿来源就是GC。我们想了各种办法尽可能的减少对局内的内存分配。包括对UI的特殊处理,对网络消息的特殊处理。最后终于能够做到在一个对局之内不会产生GC。但是,我们知道,这件事并不是一劳永逸的。随着关卡的继续开发,总有一天还会出现GC,有些内
2017-07-18 21:41:50
1066
原创 gnu flex document
网上好像并没有很方便的查看flex的链接,github上只有texi格式的文档,我将其转成html希望能方便到需要的朋友GNU Flex document另外发现一个flex/bison的windows port,直接在windows上用方便很多win flex bison
2017-05-26 19:02:37
991
原创 fbx sdk c# wrapper
fbx sdk c# wrapperFbxWrapper是fbx sdk的c#封装。目的是为了方便fbx工具的开发,同时也可以方便的与Unity集成。代码使用SWIG生成。目前使用fbx 2016 vs2013版本。想要升级到最新的fbx sdk版本应该不会很难。实现首先要以正确的顺序include所有的头文件。为此实现了一个小工具IncludeGraph,用于对所有的头文件根据依赖关系进行排序,
2017-05-07 16:49:06
2919
1
原创 技术在游戏研发中的重要性
作为一个有追求的技术开发人员,总是希望能够做出好的技术。那么对于游戏研发领域,什么样的技术才是好的技术呢,技术对于游戏研发的重要性如何呢。在从业若干年之后,我个人的总结是:好的技术创造好的游戏体验,提高开发效率。 首先,好的技术可以创造出好的游戏体验,这些体验包括:1.游戏画面带来的视觉体验这一点最为直观。逼真,或者酷炫的画面可以给予玩家强烈的视觉感官刺激。例如当年以画面作为最
2017-02-17 15:30:28
3465
原创 用c#在excel中插入图片和设置表格宽度
问题的由来是我想在excel中自动插入图片,插入图片后我想根据图片的大小调整cell的大小,于是不经意间就来到了一个坑的面前。。。。Range对象有ColumnWidth属性和RowHeight属性,这两个属性的单位不同,并且都不是像素。。。RowHeight的单位是point,可以这样换算 public static int PixelToPointY(int pixe
2016-11-09 22:14:34
3953
1
原创 unity 5.3.5镂空shader的一个bug
现象在某些android手机上,比如OPPO r7s(adreno 405 GPU),镂空效果错误。该透的地方没透。主要用于草和树的渲染。定位弄了一个简单的sample(不用unity),discard指令是可以正确执行的,怀疑可能跟unity的环境有关。用Intel® Graphics Performance Analyzers debug了一下,shader中的clip函数被翻
2016-08-24 18:29:24
3862
原创 在android平台hook OpenGL es的API
在android平台上(其他平台也差不多),OpenGL es API的调用是通过一个一个跳转表实现的。这个跳转表的首地址被保存到当前线程的TLS ( Thread Local Storage)中。我们来看一下Android系统中相关的源代码。我这里引用的是android 4.4.2的代码,不同版本中源码文件所在的位置略有不同。先来看frameworks\native\opengl\lib
2016-02-12 22:28:14
5393
原创 利用手机传感器测量高度
最近简单了解了一下android系统的传感器。其中较常用的是加速计Accelerometer,可以用来实现“摇一摇”。一开始,从加速计这个名字本身来理解,以为是测量加速度的,也就是手机如果静止,则加速计应该返回0.后来发现其实是表示手机外部的支撑物对于手机施加的力产生的加速度,其方向相对于手机的本地坐标系。简单说如果手机静止不动,加速计的值为-g。这样的好处是这个值可以反映手机在静止时的方
2015-05-29 00:40:38
5538
4
原创 移动VR开发初体验
自从google收购oculus开始,VR的概念越来越火。Unite 2015简直就成了半个VR展,而仅仅1年之前UNITE 2014上还仅有一个oculus的一个极其简陋的展示。最近体验了一下三星的Gear VR,很不错。只要漫游的速度不是很快,保证帧率的情况下,几乎没有明显的眩晕感。比之前体验的oculus dk1强太多了。Gear VR自带的应用也比较丰富,有全景照片,全景视频,3d电影
2015-04-30 17:27:15
1862
1
原创 新攒了台机器
自从多了一个叫Unreal4的东西,5年前攒的机器明显跑着有点力不从心。于是琢磨着新攒一台机器。挑了一个礼拜配件,周末装出来。机器定位在中端游戏机(虽然现在基本没时间玩游戏),配置单如下机械硬盘有一块之前的西数2T绿盘,暂时够用了。集体照留念 主板没啥说的,一直用华硕的 作为一个游戏从业者,还是应该买一块差不多的显卡,980,970太贵,960性
2015-03-23 21:57:58
973
原创 doom3的UI系统
doom3的UI系统是纯数据驱动的,例如windowDef TextTitle2{ rect 20,341,600,55 visible 1 text "#str_00073" forecolor 0.6,1,1,0 textscale 0.8 font "fonts/micro"
2014-12-06 23:01:27
1647
原创 记一个手游app数据文件的破解
出于一些很猥琐的需要,同时自己也想做一些新鲜的尝试,周末用了大半天时间破解了某款手游的数据文件。过程比我预想的要顺利,主要原因还是我们开发人员的懈怠,咳咳。过程如下:下载安装包,解压,发现几个XXX.db文件,最感兴趣的是一个50多M的XXX.db用UltraEdit打开XXX.DB文件,没有任何线索。只发现这几个文件有相同的文件头搜索.DB文件可能是什么文件,发现了开源库sq
2014-11-18 15:00:11
4805
原创 doom3技术分析
前言2011年11月doom3代码发布2012年11月doom3 BFG代码发布两个游戏内容虽然相差不多,但doom3 BFG版本在技术上有很大进化(多线程框架,SWF,立体渲染)。本文技术分析主要基于doom3BFG版本架构idCommon是总控制类绿色的是子系统,可以在各处调用。Entity是基于继承的结构多线程渲染整体分为两个线程,主线程(
2014-03-28 17:41:30
2403
原创 说说unity项目的优化
最近由于公司一个项目的需要(马上就上微信了呦),我被临时抓过来搞了一个月的unity。主要是帮着搞一下性能的优化以及解决一些兼容性问题。因为我之前对Unity和移动开发都不是很了解,所以简单总结一下,积累点经验。首先是选定基准平台,android是小米1,ios是iphone4。先在小米1上简单的profile了一下,发现android平台的帧率非常不稳,对profile工作影响很
2014-02-27 18:28:26
2584
原创 对stlport容器进行排序的一个bug
这两天客户端遇到一个bug比较坑爹,记录一下。有一段代码是将一些坐标的z值放到一个stlport的vector中用sort函数排序。结果sort函数中迭代器越界了,导致栈上的数据被篡改。迭代器越界的原因是用于排序的浮点数中有QNAN,造成functor不满足严格弱序,在某些数据下就会产生迭代器越界。这时开启stl debug宏会有断言。试了一下vc2010自带的stl使用同样的
2013-04-15 11:16:01
1219
原创 工作这几年感悟较深的几点
目标导向。一项工作,在真正从产品中看到效果或者解决了一个实际问题之前,这件工作的实际价值为0。也就是说一件工作在真正完成前,谈任何功劳苦劳贡献等等都是没有任何意义的。如果在团队中能够达成这种共识,那么以此为基础的主动工作则是提高工作效率和质量的关键。在工作中的任意时刻,心里对各项工作要有一个明确的优先级。总是应该先做优先级高的事(除非低优先级的事马上就要做完了)。判断哪些事优先级高哪些优先级低则是
2013-03-26 21:42:12
1702
1
原创 unreal engine4效果很不错
看了unreal engine4的ElementalTech Demo和Featuresand Development Walkthrough两个视频,效果还是非常赞的。看来epic这几年是下了大力气了。下面说说ue4的重要特性吧1. 延迟渲染Ue4完全抛弃了预计算技术,取而代之的是全实时的延迟渲染。这个应该是ue4在渲染上最大的改变。随之而来的将会是ue4比ue3对硬件的
2012-06-10 22:29:30
4685
1
原创 也算是为国争光了
http://www.eurogamer.net/articles/df-hardware-nvidia-gtx-680-review前一阵项目组专门给nv赶了一个demo,用于gtx 680的发布展示。虽然仅用于展示物理效果,但是依然说明我们的东西还是能拿得出手的。能跟世界上顶级工作室的产品放在一起展示,还是能让人小小自恋一把的。
2012-03-25 12:21:25
1349
原创 N卡和A卡上动态分支优化测试
选了几块卡测了一下动态分支,结果如下:FXAA(全屏后处理) 消耗时间(毫秒)平台 优化前 优化后GTX 550 4.5 1.66600 111 36.6HD 2600 11.3 17.8HD 4870 4.1
2012-01-13 18:12:17
993
原创 Max pre-rendered frames坑爹啊
优化时发现帧率不稳,有规律的一顿一顿的。然后开始:perfHUD,profile,各种增加删除,各种机器、系统、工具。最后发现是Max pre-rendered frames不小心开太大了。。。。。也就是说原来是帧率“太平滑”了,偶尔卡一下就非常明显。现在帧率不那么平滑了,看上去舒服多了。。。。。谨此祭奠我的三天时间~~ ps.Max pre-rendered fr
2011-11-03 16:39:40
2815
原创 计算用于阴影剔除的包围体(shadow culling volume)
我们在做剔除的时候一般要用到视锥,用视锥的6个平面作为裁剪平面。但是对于渲染shadow map的时候是不能直接使用视锥做剔除的,因为视锥外的物体是有可能将阴影投射到视锥里的。这时我们需要一个专门用于阴影剔除的包围体(culling volume)那么如何构造这个包围
2011-08-15 13:16:24
2061
转载 软件开发中的11个系统思维定律
1. 今日的问题源于昨日的解决方案(Today’s problems come from yesterday’s solutions) 当解决问题时,我们会感到很高兴。我们经常不考虑后果。令人感到意外的是,我们提出的解决方案可能会产生反作用,并带来新问题。作为对取得巨大成功的团
2011-07-11 18:33:39
833
原创 半透明渲染新技术摘录
ATI的头发渲染方案:1. 在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。2. 渲染时使用需要以下4个pass3. 最终的渲染效果此方案不需要实时的三角形排序,效果也比较理想。但是4个pass开销比较大。
2011-06-13 16:08:00
4545
原创 用SSE加速CPU蒙皮计算
我们知道现在绝大多数情况下角色动画的蒙皮计算是放在GPU中计算的。但是仍然有一些特殊的场合我们需要在CPU端使用蒙皮计算的结果,比如涉及到布料的物理模拟的时候。这时我们需要在CPU端计算蒙皮。为了节约宝贵的CPU计算的时间,我们需要用SSE对CPU计算蒙皮进行加速。 顶点结构如下:struct Vertex{ float3 Pos; float3 Normal;
2011-06-12 12:50:00
2645
原创 图形程序与布丁工厂
<br />Shawn Hargreaves有一篇blog,写的是如何理解3d图形程序的效率问题。<br />其中用的比喻非常形象有趣。<br />中心思想是,不能靠仅仅画几个简单的模型就来分析图形程序的效率,那是没有意义的。要用完整场景的进行分析。A tale of many haggis
2011-01-07 18:36:00
1196
原创 3ds max贝塞尔曲线输出
最近通过max的IGame接口实现了贝塞尔曲线的导出,在这里分享一下。在max里编辑关键帧动画时,一般默认使用的贝塞尔曲线控制参数随时间的变化。这里的参数可以指各种参数,物体的位置,欧拉角,灯光的颜色,相机fov等等。IGame提供接口可以导出贝塞尔关键帧,但是由于max sdk的文档写的众所周知的烂,所以还是需要我们求助于google的同时开动自己的脑筋。max sdk烂的程度从它结构体声明的注释就可见一斑。class IGameBezierKey: public MaxHeapOperators { p
2010-06-06 23:21:00
4233
原创 延迟渲染技术文献摘录
延迟渲染亦即延迟着色是近几年流行起来的技术,它最大的优势是可以实现同屏中n多的动态光源(十几到几十个)。这在以往的渲染管线中是很难实现的。以下是我对现有的相关技术文献的摘录和总结。渲染流程延迟渲染管线可分为四个阶段:geometry, lighting, composition, post-processingPost-processing阶段与传统的forward shading
2010-01-30 17:56:00
8055
转载 讲MSAA的好文
http://alt.3dcenter.org/artikel/multisampling_anti-aliasing/index_e.php
2009-12-31 17:56:00
1590
转载 为宋思明平反,从《蜗居》小贝学C++谈起
http://www.blogjava.net/huanzhugege/archive/2009/12/15/306033.html 挺有意思,正好前一阵看了《蜗居》曾经一度以为小贝是美术,因为有一集里看到小贝桌前放着一块手写板。不过又感觉他应该还是搞技术的。看来文中的分析是很有道理的,小贝很可能是开发网站的,编码的同时也要搞点美术。搞时间长了又觉得没意思,所以又偷偷弄了本c+
2009-12-24 16:29:00
2632
原创 关于nividia显卡的硬件PCF
两年多没更新博客了,想想自己真的够懒的。还是抽点空写写吧,自己积累的同时也share给别人,何乐而不为。 早就知道nv的显卡支持硬件的shadow map比较,同时还附带2x2的PCF。但一直没有深究到底是如何使用的。今天翻了一下nv的例子,发现还是很简单的。只要shadow map使用D24S8 D24X8 D16等depth buffer格式,写shader时满足一定的条件即可
2009-12-23 23:08:00
2667
原创 读wildmagic和ogre源码的感受
1。类命名不当会极大地影响系统的可理解性,自认为这一点ogre比wildmagic比差了好多。wildmagic中的类和对象的意义都非常容易理解。而ogre中的类名往往与类的功能相矛盾。比如按MovableObject这个类名理解这个类应该定义有关移动的信息,比如位置,方向,速度等。然而这个类的设计目的却是作为挂接在Node节点的内容和可显示的对象如Entity的父类。而Renderable接口首
2007-09-29 16:38:00
3510
原创 何为左手坐标系(LH)和右手坐标系(RH)
由于一开始接触的是direct 3d的左手笛卡尔坐标系,养成了一种惯性思维,认为无论哪种坐标系,camera就应该沿着z轴的正向看出去,因此怎么也理解不了D3DXMatrixLookAtRH中为什么zaxis = normal(Eye - At)。现在终于明白了,如果把我们的眼睛是camera,在左手坐标系中我们看到的是z轴的正向,在右手坐标系中我们看到的是z轴的负向,我们看到的东西自然在我们前方
2007-09-29 16:37:00
11058
1
原创 vc 2005中的返回值优化测试
考虑下面的一个向量类class Vector2d{public: Vector2d() {}; Vector2d(const Vector2d& v); Vector2d(const float x, const float y); const Vector2d operator+(const Vector2d& v) const; const Vector2d& operator=(cons
2007-06-09 18:22:00
1179
原创 关与opengl和d3d中的坐标系和变换
opengl中用的是右手坐标系,d3d中用的是左手坐标系。手的四指握向手心,大拇指指向的方向为z轴的方向。因此坐标变换时,opengl中是逆时针旋转,direct 3d中是顺时针旋转。(沿坐标轴向原点看去)判断的方法是大拇指面向自己,四指握向手心。d3d中变换坐标时右乘矩阵,因此复合变换时矩阵连乘的顺序是从左到右。D3DXMatrixMultiply( &matWorld, &matRotat
2007-05-24 19:47:00
2476
原创 浮点数表示标准
IEEE Standard 754 Floating Point Numbershttp://steve.hollasch.net/cgindex/coding/ieeefloat.html根据标准,一些浮点数的二进制表示 0 0x00000000 1.0 0x3f800000 0.5 0x3f000000 3 0x40400000 +inf
2007-05-24 19:33:00
1464
转载 五句话足以改变一生
第一句话是:优秀是一种习惯。这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性
2007-04-22 15:45:00
965
转载 内存对齐问题
什么是内存对齐 考虑下面的结构: struct foo { char c1; short s; char c2; int i; }; 假设这个结构的成员在内存中是紧凑排列的,假设c1的地址是0,那么s的地址就应该是1,c2的地址就是3,i的地址就是4
2007-03-20 13:23:00
956
the Art of game design 2nd.Edition
2016-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人