[zh]三年前,我就曾经计划过一个KlayGE的长期研发子项目,D3D11 HLSL字节码到GLSL的编译器。两年前,在d3d1x for linux代码的帮助下,基本的字节码解析和反汇编工具已经实现。如今,这个子项目被正式命名为DXBC2GLSL,在库和工具两个层面上提供HLSL字节码(DXBC)到GLSL的转换。2013年底,DXBC2GLSL支持VS和PS初始版本已经由团队新成员林胜华完成,并提交到开发版本中。GS的支持也已经在上个月加入。当前所有KlayGE中的shader已经全部通过测试。[/zh]
[en]Three years ago, I've planned a long-term R&D sub-project of KlayGE, D3D11 HLSL bytecode to GLSL complier. Two years ago, derived from d3d1x for linux, a simple bytec ...
[消息来源]
在正在举行的GDC 2014上,Khronos发布了OpenGL ES 3.1的规范。总体来说,OpenGL ES 3.1以OpenGL 4.4为蓝本,把一些原本是桌面API的功能带到了移动平台。
OpenGL ES 3.1的新功能包括:
Compute shader:GLSL ES也开始支持compute shader了,和桌面API取齐。来自OpenGL 4.3。
分离式shader:可以分开绑定不同stage的shader。来自OpenGL 4.1。
间接绘制指令:允许从一个buffer object提供Draw的参数,而不用倒回CPU发起Draw。来自OpenGL 4.0。
增强了纹理的功能:包括multisample的纹理、stencil的纹理,以及在纹理上执行gather操作一次读取4个像素。来自OpenGL 4.1和4.3。
着色语言的改进:新的算术和位域操作, ...
最近突然出现很多DirectX 12的消息,这里稍微整理一下,对可以确认的消息给个汇总。
DirectX 12将于3月20号在GDC 2014宣布。(来自这里)
有4家GPU厂商将会第一批支持DirectX 12,NVIDIA、AMD、Intel和高通。
和DirectX 11一样,移动平台和桌面平台的接口统一。
XBox ONE也可能会升级到DirectX 12。见入口网页左下角的图标。
驱动开销会减少很多,和Mantle一样的思路。
如果驱动层变薄了,驱动开销变少,性能就有机会和Mantle一样得到不少性能提升。而且驱动的开发也会变容易。但比Mantle更好的是,DirectX 12可以用于各厂商的显卡,不限于AMD。
AMD Mantle的SDK一直都没出,但现在至少有了支持Mantle的Catalyst 14.1驱动。Geeks3D网站有个帖子列出了mantle32.dll和mantle64.dll等几个DLL中包含的函数入口。
Mantle本身存在于mantle32.dll和mantle64.dll。导出的函数接口如下:
IcdDbgMessage
DllMain
grAllocMemory
grAttachImageViewDescriptors
grAttachMemoryViewDescriptors
grAttachNestedDescriptors
grAttachSamplerDescriptors
grBeginCommandBuffer
grBeginDescriptorSetUpdate
grBindObjectMemory
grClearDescriptorSetSlots
grCmdBeginQuery
grCmdBindDescriptorSet
grCmdBindDynamicMemoryView
grCmdBindIndexData
grCmdBindPipeline ...
经过团队几个月的努力,KlayGE 4.4已经在去年年底顺利发布。在此感谢大家的支持和帮助。实际上从上个月开始,KlayGE 4.5就已经进入了计划阶段。这里公开一下对KlayGE 4.5的一些规划。和以前一样,欢迎有兴趣、有时间的朋友加入KlayGE 4.5的开发阵营。
KlayGE 4.5将会更好地支持移动平台,包括Android和WinRT,并为以后支持iOS跨出第一步。同时,在4.5里,会继续把一些原本在例子中的技术集成入引擎的核心层,方便使用。
时间线
这里列出几个重要的时间点,以供进度参考。
2014年5月31日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。
2014年6月15日,code complete:完成所有代码,除非特殊情况,否则不能 ...
上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的OpenGL和OpenGLES插件的改进。
OpenGL 4.4
KlayGE在OpenGL方面一直是紧跟spec的步伐,这次也不例外。在八月份OpenGL 4.4发布的时候,glloader和KlayGE的OpenGL插件就很快加上了4.4的支持。并且这次把代码彻底过了一遍,很多原先通过扩展实现的功能,都尽量替换成用核心实现的,提高兼容性。
经过测试,OpenGL插件在NV和Intel的显卡上所有例子都能正常工作。
OpenGLES 3.0
虽然GLES3出了有一段时间了,但硬件支持度和开发环境都还没跟上,所以原先OpenGLES插件只支持2.0。这次尝试了PowerVR和Mali的OpenGLES 3模拟器,觉得还行,就加上了GLES3的支持。Adreno的模 ...
[zh]
随着半年一个新版本的周期,今天KlayGE 4.4正式发布了!在这个版本的开发中,多名团队成员贡献了自己的代码,也有很多朋友提供了宝贵意见和bug报告。也从SALVIA项目的编译脚本中学习和借鉴了很多经验。这些都为KlayGE的发展和完善做出了贡献,在此表示感谢。KlayGE 4.4的主要更新如下:
改进的编译系统
尽可能使用MSBuild
第三方库使用cmake工程文件
自动搜索OpenGLES SDK的目录,简化了编译的配置
OpenGL ES 3.0支持
Tile-based deferred rendering
OpenGL 4.4支持
Multi-resolution层
高质量地形渲染(由孙文全协助完成)
屏幕空间SSS和半透明效果(由石裕隆完成)
基于后处理的图片放缩
多线程场 ...
本系列的上一篇提到了KlayGE 4.4将会出现的高质量地形渲染。本篇仍讲一个新功能,Screen Space Sub Surface Scattering(SSSSS)和Translucency。这两个效果都是由团队成员石裕隆实现的。
Sub Surface Scattering(SSS)对渲染效果的提升有很明显的左右,尤其是皮肤和植被之类物体。早在GPU Gems 1里就有在texture space作的近似SSS。GPU Gems 3里的方法更是大张旗鼓地用了多次Gaussian来逼近Dipole,在texture space作6次blur后线性叠加,得到非常真实的皮肤效果。但这么做的开销实在太大了。
首先看看直接用Blinn Phong BRDF渲染的结果,皮肤本身看起来很塑料。
SSSSS
到了GPU Pro里,Jorge Jimenez等人提出了SSSSS的方法。在s ...
本系列的上一篇讲了DR中的一些改进。本篇开始将描述这个版本加入的新功能,高质量地形。
原有的地形
以前的地形实现和水面的方法一样,都是从Crytek在2008年的老方法改进而来。虽然比projected grid的好得多,并且速度很快,但有一些很明显的缺点:
视点移动的时候会抖动。水面比较平,而且有波浪看不出抖动。如果用来做静态地形抖动就会非常明显。尤其是far plane变大之后,远处更明显,所以限制在3000以下。
不支持shadow。因为只有产生了视野内的三角形,视野外的地形无法正确投出shadow。
顶点密度较低,无法表达精细的地形。原先的方法三角型分布接近于screen space,不足以很好表达地形。
这个抖动的消除可以靠snappi ...
上一篇讲了TBDR的实现,本篇继续讲解deferred rendering层的一些重要改进。
切换到ESM
原先deferred系统用的是VSM,现在切换到开销更小的ESM。具体参见我之前的一篇文章。用ESM之后只需要一个通道,空间占用减少,性能也有所提升。下个版本会进一步改成支持打包到RGBA8的纹理,让不支持浮点纹理的硬件也可以使用ESM。
Multi-resolution层
KlayGE很早就引入了multi-resolution的概念,用来加速SIL的GI。但原先的MR、SIL和Deferred绑在了一起。从上一版开始,MRSIL从Deferred独立出来之后,这个版本继续改进,把MR和SIL也分开了。现在MR可以用于其他地方,比如SSGI。原本SSVO也打算上MR,但后来来不及改了。
这个分离的思路是,MR层负责 ...