*H3D2 ENGINE开发
早年的H3D ENGINE,现在有个商业游戏产品应用。基于OPENGL的H3D,当初设计具有GL的1.2.1 ,1.3和1.5三条渲染管道。就是在TNT2(radeon), GEFORCE2-4(RADEON8500-9200), GEFORCE5(ATI9500-)三种平台上分别跑固定管线,带VP,带VP和FP的图形功能。当时的硬件大概是这么划分的。对应于D3D,大概相当于D3D7,D3D8,D3D9 sm2吧。 GL2的规范和驱动迟迟未出,GLSL也是很晚驱动才支持。所以引擎没有支持GLSL。
我一直挺喜欢这个引擎截图。http://www.horizon3d.com.cn/horizon3d/horizon3d_client_004.jpg
引擎支持一套相当于D3DX Effect系统,只不过是自己定义的格式。另外有一些比较重要的扩展。动态支持VP FP(VS,PS)。以及所有渲染状态。FX中的TECHNIQUE,H3D ENGINE相当于对3个硬件平台的动态支持。管道的支持使用C++的多态。在做完H3D SHADER系统后返回去看EFFECT,才发现又做了重复工作。M$已经做得很好了。
另外还有一些诸如动态LOD /OUT OF CORE 地形室外系统,以及后期加入的portal/octree室内系统。后期的研究中,对点光源soft shadow做了一些工作,并未彻底,如图:
这些会争取在项目开发不那么紧张的时候加入进去。
不过EFFECT缺少了一项对动态渲染上下文变化的对应支持。相当于一个带凹凸象素光照的动物,从远处半透明FADE IN,从雾中走出,中间经过一个聚光灯,走过一片水塘旁的一棵大树,树背后一堆绿色篝火,被投影上一棵树的阴影和闪动的绿火,且水波的涟漪被映射在动物身上,动物皮肤次表面散射,与鼻头光亮的反射,经过GLOW(或HDR)处理格外刺眼。随着动物走进和镜头位置摇动,效果一一组合呈现又一一消逝。这种变化只利用现有D3D EFFECT系统不能做到,但在H3D ENGINE中,通过增添一个环境SHADER层,封装了此种变化,利用一个统一架构和SHADER格式,大致可以把80%的渲染环境变化体现出来。
如果说GL被D3D灭了,不如说GL被ATI灭了。 ATI凭借自己的3D硬件生产能力,有计划,有目的,有预谋的在驱动层面逐渐破坏GL的兼容性和基本功能。我十分怀疑ATI被M$收买过去专门一边散步销售自己的硬件,一边故意让GL的支持和兼容性能极差。导致开发者逐步远离OPENGL。诸如glBegin(GL_LINES)之后跟随唯一个glColor3f这样的语句,都能导致在9000、9100系列的显卡上所有渲染状态失效,一片漆黑。
有鉴于此,H3D2的开发全面转入D3D。包括FX制作工具,可以整合到3DSMAX中,十分方便。不过3DSMAX令人头疼的软件开发水平,总是BUG不断(恩,并了MAYA,说明一切,此处纯技术评论)。H3D2估计在近期赶不上D3D10的车了。针对国情,中国玩家什么都要,但肯定不要高配置才能跑。所以D3D7的支持也许还得有。D3D9是标准配置。 在功能方面,除了需要sm2以上才支持的softshadow之外,类似UNREAL3的SHAOW混合应用也许比较靠谱(shadow volume+shadowmap),动态光照方面加强lightmap+parallax_mapping的支持。如果可能,HALF-LIFE2采用的直角坐标系的协和函数全局光照分解或者HALO3采用的小波分解全局光照的用法,应该参考一下。毕竟LIGHTMAP才是王道。一直有个想法,如何能够加入过饱和的lightmap计算支持和渲染。在PS2平台的ICQ中,此技术成了支持那个沉闷空阔场景渲染的唯一亮点。没看到过此种渲染做在光能辐射渲染器里。也许真得自己写光能辐射渲染器。。。这个方面http://www.FluidStudios.com/有个很强得lightmap rendering tool. open source..sound sweet..ha...