Skip to content
上一篇讲了tone mapping的改进。作为引擎的一个长期议题,优化是不可缺少的。本篇就讲讲在4.10中引入的新优化。 CPU端 在profiler里看到的占据CPU耗用第一名的一直是驱动。原先一直没在意这个,前一阵自己看了一下,发现前几位的好几个都是在SceneManager里,而且都和渲染队列相关。具体情况是,在每一帧确定渲染队列的时候,会执行一遍这样的步骤: 扫描一遍场景里的所有SceneObject,根据它的Renderable的类型建立一个从Renderable到SceneObject列表的unordered_map,每个物体作为那个Renderable的instance 把unordered_map中的Renderable建立一个队列 渲染这个队列 销毁unordered_map 所以其实这里的unordered_map只是 ...
上一篇讲了新的材质系统。本篇将讲tone mapping的改进。 Tone mapping的进化 KlayGE早在2006年的时候就引入了HDR的流水线。和当年的其他引擎一样,HDR的内容经过渲染,需要通过tone mapping转成LDR之后送去显示。这时候,tone mapping的质量就可以决定最后的画面细节度和对比度。 在KlayGE的发展过程中,tone mapping这个看似简单的步骤经历了多次进化。 Reinhard 早期的普遍做法是一篇叫做Photographic Tone Reproduction for Digital Images的论文,大家就用作者的名字称它为Reinhard tone mapping。这是个经验公式,把HDR到LDR的变换简单的描述了出来。 float3 ReinhardToneMapping(float3 color, float adapted_lum) { con ...
好久没写这样的系列了,上一次总结渲染的改进,还是4.5的时候。最近,又对KlayGE的渲染做了一些系统性的修改,所以在这里总结一下。 材质系统 原先的材质系统里,diffuse颜色和specular颜色是分开的。要放到GBuffer里的时候,specular颜色就剩下亮度,之后跟光的亮度操作后,从diffuse的颜色恢复出specular颜色。这只是一个情非得已的hack,因为G-Buffer里只有4个通道可供使用,放不下diffuse和specular颜色。 2015年的Physics and Math of Shading里,详细分析了导体、绝缘体、半导体的diffuse和specular分布,得到的结论是,只需要有个albedo的颜色(3通道)以及一个metalness(1通道),就已经足够。因为导体的diffuse是0,绝缘体的s ...
每一次KlayGE新版本的开发初始,都会花一定的时间改进工程系统,会让新版本的开发和使用更为顺利。目前这一步已经基本完成,在这里写个帖子总结一下。 支持NDK r12 对NDK的支持升级到了新的r12。这里包括把android-cmake更新到最新代码,并可以用clang来把KlayGE编译成android版。因为NDK在慢慢去掉对gcc的支持,gcc的版本停留在了4.9。所以以后也将不再支持用gcc编译KlayGE的android版,转向clang。 用clang的好处之一是,链接速度快了无数倍。 GCC 5.1+ 对于其他平台,仍然可以使用gcc编译。但现在要求gcc 5.1以上。这么做省去了很多为了老版本的gcc而作的兼容,尤其是C++11/14的部分。降低了维护开销。这么一来,gcc和clang下,都 ...
上个星期,KlayGE 4.9刚刚发布。几乎与此同时,新版本的开发已经开始。和以前一样,我会在这里公布KlayGE 4.10的开发计划。欢迎有兴趣、有时间加入KlayGE 4.10开发阵营的朋友们继续参加。同时,4.10的开发流程有一些小的调整,也会在本帖中说明。 时间线 这里列出几个重要的时间点,以供进度参考。 2016年12月7日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。 2016年12月21日,code complete:完成所有代码,除非特殊情况,否则不能再改变接口。 2016年12月31日,release:正式发布KlayGE 4.10。 比起以前的开发周期,feature complete和code complete往后推迟了一周。因为这几个版本的开发中,测试 ...
[zh]6月底,又到了KlayGE的发布时间,KlayGE 4.9正式发布了!相比于以前的开发周期,这次我由于工作超忙,花在KlayGE上的时间和开发进度的控制较少,有些预计的功能并没有按时完成,只能延期到下个版本。同时,越来越多的朋友开始提供宝贵的建议和bug报告,在此表示感谢。由于开发设备的限 制,难免有一些测试不足的情况,尽请见谅。KlayGE 4.9的主要更新如下:[/zh] [en]The end of June, is a KlayGE release date, again. In this development cycle, I don't have that much time spend on KlayGE and progress control. Some planned features have to deferred to next release. Meanwhile, more and more users provide great sugges ...
最近工作太忙,放在KlayGE上的时间不如以前多了。最近有些新工具上线,这里介绍一下。 编辑器 大家期盼已久的编辑器终于有个雏形了,名叫KGEditor。 WPF/C#的外壳,接入KlayGE的核心,可以双向调用。目前实现的功能很简单,只能编辑静态场景。在未来的版本中需要着重发展这个编辑器,也希望有经验的朋友们可以提供帮助。 纹理查看工具 KlayGE的纹理用的DDS格式。但原先DX SDK的纹理查看工具不支持DX10的扩展格式,VS2015的又缺乏一些功能,比如不能调节整体亮度。而且由于我对DDS格式做了略微的扩展,可以放入ETC压缩的纹理,这都要求有一个自己的纹理查看工具,方便开发中使用。 该工具可以方便地打开/关闭某个通道,查看 ...
KlayGE 4.9的开发已经开始。作为第一步,把工程系统整理好,会让新版本的开发和使用更为顺利。所以从几个版本前开始,工程系统的改进总是先行一步。目前这一步已经完成,在这里写个帖子总结一下。 继续停止支持老编译器 不再支持vc110(VS2012)和gcc 4.6-4.7。这样可以去掉很多为了这些老编译器特别写的workaround,提高代码质量。由于剩下支持的编译器都有很好的C++11兼容性,现在可以用绝大部分C++11特性了。C++14也可以适度使用。 合并到同一个solution 很久以前就想这么做。这样对代码搜索和构建都方便。但以前的Visual Studio并不能支撑同一个sln里有那么多项目,经常出现性能严重下降或者崩溃的情况。而现在情况好了很多,终于可 ...
按照惯例,KlayGE 4.8发布之后,新版本的开发也会立刻开始。这里公布一些我对KlayGE 4.9的计划,更开发组成员和用户参考。这些其实大部分在4.8发布之前就已经计划好。和以前一样,欢迎有兴趣、有时间加入KlayGE 4.9开发阵营的朋友们继续参加。由于打算用到assimp和glsl-optimizer,也希望在这方面有经验的朋友能给予帮助。 时间线 这里列出几个重要的时间点,以供进度参考。 2016年5月31日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。 2016年6月15日,code complete:完成所有代码,除非特殊情况,否则不能在改变接口。 2016年6月30日,release:正式发布KlayGE 4.9。 必然出现 这些特性一定会出现在K ...
[zh] 大家圣诞节和新年快乐。又到了6个月一次的KlayGE发布时间,今天KlayGE 4.8正式发布了!在这个版本的开发中,有一些功能是由团队成员完成的,同时也有很多朋友提供了宝贵的建议和bug报告,在此表示感谢。由于开发设备的限制,难免有一些测试不足的情况,尽请见谅。KlayGE 4.8的主要更新如下: 引擎方面的改进 D3D12插件。 异步资源创建,简化资源载入的代码。 增加CPU和GPU的同步原语支持,支持手动同步管理。 在OpenGL/OpenGLES里支持texture array。 加速反射的渲染。 SIMD数学库,把现有的数学库扩展成支持SIMD的实现。(由刘智超和倪成丹完成) 重构了shader编译的工作流。(由钱康来协助完成) 增加了使用音 ...