
技术
文章平均质量分 62
Garuda
这个作者很懒,什么都没留下…
展开
-
浮点数表示标准
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 · 1457 阅读 · 0 评论 -
说说unity项目的优化
最近由于公司一个项目的需要(马上就上微信了呦),我被临时抓过来搞了一个月的unity。主要是帮着搞一下性能的优化以及解决一些兼容性问题。因为我之前对Unity和移动开发都不是很了解,所以简单总结一下,积累点经验。首先是选定基准平台,android是小米1,ios是iphone4。先在小米1上简单的profile了一下,发现android平台的帧率非常不稳,对profile工作影响很原创 2014-02-27 18:28:26 · 2573 阅读 · 4 评论 -
记一个手游app数据文件的破解
出于一些很猥琐的需要,同时自己也想做一些新鲜的尝试,周末用了大半天时间破解了某款手游的数据文件。过程比我预想的要顺利,主要原因还是我们开发人员的懈怠,咳咳。过程如下:下载安装包,解压,发现几个XXX.db文件,最感兴趣的是一个50多M的XXX.db用UltraEdit打开XXX.DB文件,没有任何线索。只发现这几个文件有相同的文件头搜索.DB文件可能是什么文件,发现了开源库sq原创 2014-11-18 15:00:11 · 4791 阅读 · 1 评论 -
doom3技术分析
前言2011年11月doom3代码发布2012年11月doom3 BFG代码发布两个游戏内容虽然相差不多,但doom3 BFG版本在技术上有很大进化(多线程框架,SWF,立体渲染)。本文技术分析主要基于doom3BFG版本架构idCommon是总控制类绿色的是子系统,可以在各处调用。Entity是基于继承的结构多线程渲染整体分为两个线程,主线程(原创 2014-03-28 17:41:30 · 2379 阅读 · 1 评论 -
移动VR开发初体验
自从google收购oculus开始,VR的概念越来越火。Unite 2015简直就成了半个VR展,而仅仅1年之前UNITE 2014上还仅有一个oculus的一个极其简陋的展示。最近体验了一下三星的Gear VR,很不错。只要漫游的速度不是很快,保证帧率的情况下,几乎没有明显的眩晕感。比之前体验的oculus dk1强太多了。Gear VR自带的应用也比较丰富,有全景照片,全景视频,3d电影原创 2015-04-30 17:27:15 · 1848 阅读 · 1 评论 -
利用手机传感器测量高度
最近简单了解了一下android系统的传感器。其中较常用的是加速计Accelerometer,可以用来实现“摇一摇”。一开始,从加速计这个名字本身来理解,以为是测量加速度的,也就是手机如果静止,则加速计应该返回0.后来发现其实是表示手机外部的支撑物对于手机施加的力产生的加速度,其方向相对于手机的本地坐标系。简单说如果手机静止不动,加速计的值为-g。这样的好处是这个值可以反映手机在静止时的方原创 2015-05-29 00:40:38 · 5521 阅读 · 4 评论 -
在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 · 5379 阅读 · 2 评论 -
用c#在excel中插入图片和设置表格宽度
问题的由来是我想在excel中自动插入图片,插入图片后我想根据图片的大小调整cell的大小,于是不经意间就来到了一个坑的面前。。。。Range对象有ColumnWidth属性和RowHeight属性,这两个属性的单位不同,并且都不是像素。。。RowHeight的单位是point,可以这样换算 public static int PixelToPointY(int pixe原创 2016-11-09 22:14:34 · 3944 阅读 · 1 评论 -
gnu flex document
网上好像并没有很方便的查看flex的链接,github上只有texi格式的文档,我将其转成html希望能方便到需要的朋友GNU Flex document另外发现一个flex/bison的windows port,直接在windows上用方便很多win flex bison原创 2017-05-26 19:02:37 · 984 阅读 · 0 评论 -
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 · 2901 阅读 · 1 评论 -
关闭mono的GC,防止其带来的卡顿
我们的游戏品类特殊,对游戏对局内的画面流畅性要求极高。不允许出现可以明显察觉的卡顿。当我们解决了所有对象创建,JIT编译等带来的卡顿之后。还有一个较为棘手的卡顿来源就是GC。我们想了各种办法尽可能的减少对局内的内存分配。包括对UI的特殊处理,对网络消息的特殊处理。最后终于能够做到在一个对局之内不会产生GC。但是,我们知道,这件事并不是一劳永逸的。随着关卡的继续开发,总有一天还会出现GC,有些内原创 2017-07-18 21:41:50 · 1052 阅读 · 0 评论 -
近来用到的几个技术点
mono的JIT在运行时会造成轻微的卡顿。为了避免这个卡顿对手感的影响,我们在进入游戏时就对局内的功能类做预编译。预编译很简单,调用一下函数指针即可。找到应该预编译哪些累则稍麻烦一些,要给mono加些日志,输出局内JIT编译的函数列表局内关闭mono的GC,具体内容在之前的一篇博客中有介绍Android平台内存分析。为了降低内存占用,我们对游戏进程在android平台上的内存占用进行了仔细的分析,原创 2017-12-31 14:10:04 · 558 阅读 · 0 评论 -
对stlport容器进行排序的一个bug
这两天客户端遇到一个bug比较坑爹,记录一下。有一段代码是将一些坐标的z值放到一个stlport的vector中用sort函数排序。结果sort函数中迭代器越界了,导致栈上的数据被篡改。迭代器越界的原因是用于排序的浮点数中有QNAN,造成functor不满足严格弱序,在某些数据下就会产生迭代器越界。这时开启stl debug宏会有断言。试了一下vc2010自带的stl使用同样的原创 2013-04-15 11:16:01 · 1215 阅读 · 0 评论 -
工作这几年感悟较深的几点
目标导向。一项工作,在真正从产品中看到效果或者解决了一个实际问题之前,这件工作的实际价值为0。也就是说一件工作在真正完成前,谈任何功劳苦劳贡献等等都是没有任何意义的。如果在团队中能够达成这种共识,那么以此为基础的主动工作则是提高工作效率和质量的关键。在工作中的任意时刻,心里对各项工作要有一个明确的优先级。总是应该先做优先级高的事(除非低优先级的事马上就要做完了)。判断哪些事优先级高哪些优先级低则是原创 2013-03-26 21:42:12 · 1699 阅读 · 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 · 1168 阅读 · 0 评论 -
延迟渲染技术文献摘录
延迟渲染亦即延迟着色是近几年流行起来的技术,它最大的优势是可以实现同屏中n多的动态光源(十几到几十个)。这在以往的渲染管线中是很难实现的。以下是我对现有的相关技术文献的摘录和总结。渲染流程延迟渲染管线可分为四个阶段:geometry, lighting, composition, post-processingPost-processing阶段与传统的forward shading原创 2010-01-30 17:56:00 · 8038 阅读 · 0 评论 -
讲MSAA的好文
http://alt.3dcenter.org/artikel/multisampling_anti-aliasing/index_e.php转载 2009-12-31 17:56:00 · 1589 阅读 · 0 评论 -
3ds max贝塞尔曲线输出
最近通过max的IGame接口实现了贝塞尔曲线的导出,在这里分享一下。在max里编辑关键帧动画时,一般默认使用的贝塞尔曲线控制参数随时间的变化。这里的参数可以指各种参数,物体的位置,欧拉角,灯光的颜色,相机fov等等。IGame提供接口可以导出贝塞尔关键帧,但是由于max sdk的文档写的众所周知的烂,所以还是需要我们求助于google的同时开动自己的脑筋。max sdk烂的程度从它结构体声明的注释就可见一斑。class IGameBezierKey: public MaxHeapOperators { p原创 2010-06-06 23:21:00 · 4218 阅读 · 0 评论 -
用SSE加速CPU蒙皮计算
我们知道现在绝大多数情况下角色动画的蒙皮计算是放在GPU中计算的。但是仍然有一些特殊的场合我们需要在CPU端使用蒙皮计算的结果,比如涉及到布料的物理模拟的时候。这时我们需要在CPU端计算蒙皮。为了节约宝贵的CPU计算的时间,我们需要用SSE对CPU计算蒙皮进行加速。 顶点结构如下:struct Vertex{ float3 Pos; float3 Normal;原创 2011-06-12 12:50:00 · 2637 阅读 · 0 评论 -
半透明渲染新技术摘录
ATI的头发渲染方案:1. 在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。2. 渲染时使用需要以下4个pass3. 最终的渲染效果此方案不需要实时的三角形排序,效果也比较理想。但是4个pass开销比较大。原创 2011-06-13 16:08:00 · 4528 阅读 · 0 评论 -
计算用于阴影剔除的包围体(shadow culling volume)
我们在做剔除的时候一般要用到视锥,用视锥的6个平面作为裁剪平面。但是对于渲染shadow map的时候是不能直接使用视锥做剔除的,因为视锥外的物体是有可能将阴影投射到视锥里的。这时我们需要一个专门用于阴影剔除的包围体(culling volume)那么如何构造这个包围原创 2011-08-15 13:16:24 · 2048 阅读 · 0 评论 -
Max pre-rendered frames坑爹啊
优化时发现帧率不稳,有规律的一顿一顿的。然后开始:perfHUD,profile,各种增加删除,各种机器、系统、工具。最后发现是Max pre-rendered frames不小心开太大了。。。。。也就是说原来是帧率“太平滑”了,偶尔卡一下就非常明显。现在帧率不那么平滑了,看上去舒服多了。。。。。谨此祭奠我的三天时间~~ ps.Max pre-rendered fr原创 2011-11-03 16:39:40 · 2783 阅读 · 1 评论 -
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 · 985 阅读 · 0 评论 -
unreal engine4效果很不错
看了unreal engine4的ElementalTech Demo和Featuresand Development Walkthrough两个视频,效果还是非常赞的。看来epic这几年是下了大力气了。下面说说ue4的重要特性吧1. 延迟渲染Ue4完全抛弃了预计算技术,取而代之的是全实时的延迟渲染。这个应该是ue4在渲染上最大的改变。随之而来的将会是ue4比ue3对硬件的原创 2012-06-10 22:29:30 · 4669 阅读 · 1 评论 -
罪恶装备Xrd卡通渲染
随着前两年《阴阳师》《崩坏学院3》的大成,行业内掀起了一股二次元小高潮。很多公司都在上马二次元风格的产品。话说我们几年前就有团队想做二次元风格的产品,然而当时鹅厂的市场根据用户数据分析给出的意见是,二次元属于小众市场,在当时手游市场飞速增长,动不动就出爆款的环境下,小众市场当然是应该被抛弃的。但是猪场的团队显然不是这么思考问题的,所以有了《阴阳师》。由此可以看出,鹅厂和猪场的打法是非常不同的,扯远...原创 2018-03-10 20:59:39 · 8829 阅读 · 0 评论