前一阵子在把KlayGE的OpenGLES插件升级到OpenGL ES 3的过程中,原先还满怀希望地觉得GLES3总该全面支持浮点纹理的读写了,结果发现GLES3的标准支持float16和float32的读取,但不支持渲染到float16/float32的纹理上。只有支持GL_EXT_color_buffer_float或GL_EXT_color_buffer_half_float扩展的硬件,比如Tegra 4和Adreno 3xx才能很好地支持。所以,在其他设备上如果要渲染到浮点纹理,就得另想办法了。
编码和解码
单通道的float是32-bit,RGBA8也是,所以按说把float编码到RGBA8的纹理中应该没啥问题。很可惜的是,不支持浮点纹理的硬件往往也不支持整数指令和位运算操作。所以在这里需要有些限制。在网上搜了一下,最靠谱的应该是大牛Aras ...
之前放出过两批3D模型,这次继续几个整理好的高质量3D模型。有兴趣的话仍然可以到这里下载。
网上看到的GPU比较,都是桌面和桌面比,移动和移动比。很多人对此没有概念,总觉得移动的CPU/GPU在性能上也能比肩桌面CPU/GPU。那么就让我们来看看把各家的顶级GPU放在一起比硬指标,是什么样的结果吧。资料来自wikipedia和厂商自家宣传。
计算单元对比
Model
Fab (nm)
Core
Clock rate
API
Core (MHz)
Memory (MHz)
NVIDIA GeForce GTX Titan
28
2688
836-993
6008
D3D 11.0, OpenGL 4.4, CUDA 5.5, OpenCL 1.2
NVIDIA Quadro K6000
28
2880
901.5
6008
D3D 11.0, OpenGL 4.4, CUDA 5.5, OpenCL 1.2
AMD Fusion APU 8670D
32
384
844-950
1066
D3D 11.0, OpenGL 4.3, OpenCL 1.2
AMD ...
在渲染场景的时候,一般来说分辨率和输出大小,也就是窗口大小相同。但在移动平台上,基本上没机会让你随便切换分辨率,都是只告诉你大小。在这时候,你如果想要用特定的分辨率渲染,就不可避免需要一次放缩。另一个常见的情况是,如果一个平台性能达不到需要的帧速率,也需要渲染较小的图之后,拉伸到指定分辨率。在XBox 360等console平台,有个专门的硬件放缩机制,只要打开就能自动把输入图像拉伸到720p或1080i/p(DX11.2才开始引入这样的机制)。但在PC和移动平台上,这个事情得在引擎里自己完成。所以在post process后端,加一个resizer就成了必然之选。
框架
这个放缩的框架很简单,把窗口大小填充给screen resolution,而渲染的分辨 ...
最近不少朋友提出为何不把KlayGE推到github的问题,原因是目前github只支持git,而我暂时不打算从hg切换到git。我原先觉得,既然有hg-git这样的插件,这件事情技术上应该很容易,直接转就可以了。试验了一下,发现其实还存在一些坑,必须要对付。这里拿空明大牛的salvia的repository为例子,试验从hg转到git。
第一次尝试,直接转换
安装了hg-git之后,建立一个叫做salvia-git的目录,在里面初始化一个git repository。然后在到salvia-hg的目录,直接执行hg push ../salvia-git。结果在执行了很久之后,出现
pushing to ../salvia-git
abort: The system cannot find the file specified
以失败告终。
第二次尝试,bare
在初始化git r ...
SIGGRAPH 2013今天已经结束,还挺迅速,有的course ppt已经放出来了。
Khronos 2013 SIGGRAPH Camera BOF
Physically Based Shading in Theory and Practice
Advances in Real-Time Rendering in 3D Graphics and Games的网页已经上线,但ppt还没
在一年一度的SIGGRAPH大会上,Khronos group按照惯例,发布了OpenGL 4.4。新的OpenGL 4.4标准包含了一些新功能,同时以核心和扩展的形式出现:
ARB_buffer_storage
ARB_clear_texture
ARB_enhanced_layouts
ARB_multi_bind
ARB_query_buffer_object
ARB_texture_mirror_clamp_to_edge
ARB_texture_stencil8
ARB_vertex_type_10f_11f_11f_rev
另外,还有一些新扩展也宣布了:
ARB_compute_variable_group_size
ARB_indirect_parameters
ARB_shader_draw_parameters
ARB_shader_group_vote
ARB_sparse_texture
为什么还是没有direct state access!为什么还是没有direct state access!为什么还是没有dire ...
在2010年,曾经有个d3d1x for linux的项目短暂地轰动过。它通过Gallium的state tracker,原生地支持了d3d10和11的API,能运行一些简单的demo。遗憾的是,由于Wine的人对d3d1x不是很感兴趣(d3d9还支持不过来呢),在2013年3月份,d3d1x for linux因为无法使用和无人维护,被从mesa的repository里删除了。
(题外话:尚在开发中的HLSL bytecode to GLSL编译器也用了d3d1x for linux的bytecode解析代码,里面bug不少,而且都是下标写错之类不执行到肉眼很难看出来的bug。)
与此同时,d3d9 for linux诞生了。和之前一样,它也是个state tracker,也是原生支持。更好的是,它已经可以执行d3d9的游戏,并且性能高于Wine的转换成OpenGL的方 ...
KlayGE 4.3.0的输入插件新增了对触摸输入的支持。但这部分代码在WinXP上执行的时候,说user32.dll缺少GetTouchInputInfo的入口。这里出个补丁,通过动态检测和载入可以有效的解决这个问题。同时感谢黄河水报告了这个bug。分别解压后覆盖掉源文件即可。
KlayGE源代码的补丁:KlayGE_4_3_0_patch.7z
Sample的补丁:KlayGE_Samples_4_3_0_patch.z7
KlayGE 4.4的开发刚刚开始。在目前的开发版本里,编译脚本有了较大的改进,速度提升、内存消耗降低。这里就先总结一下一些经验。
MSBuild
KlayGE的编译脚本原先是通过调用devenv,也就是Visual Studio的IDE来编译工程的。用户的普遍反映是编译信息不断滚动,很难看清是否有错误。前不久在编译Salvia的时候,看到空明大大的脚本输出通过不同颜色区分warning和error。问了一下才知道他调用的是MSBuild,本身就带颜色高亮。
MSBuild从VS2008开始就集成到Visual Studio了,在VS2010的时候已经全面接管了C++工程的编译。所以,如果调用devenv来编译一个工程,那么它的流程是:
启动VS IDE
启动MSBuild,调用cl和linker等
关闭VS IDE
...