Crysis 地形渲染技术剖析——材质与LOD
10材质
Crysis地形的一个最重要的特色是它的地表材质系统。当进入到一定距离之后,可以看到非常精细的地表材质,包括Bump Mapping,Parallax Occlusion Mapping,有了材质系统的支持,Crysis的地形相较基于传统的Texture Splatting的地形可以呈现出令人惊叹的细节。
在POM技术支撑下的Crysis地形:
基于Texture Splatting技术的地形:
Crysis的地表材质技术的原理如下:
渲染包括两个步骤,首先基于颜色图和法线图,绘制基本的地形色彩与明暗,这一遍渲染结果主要用于远处地形。然后会针对不同材质,将细节通过AlphaBlend融合到之前的渲染结果上,材质细节通常只在离视野较近的区域内才渲染,因此第二个步骤的耗费并不多,根据实际情况,每帧中大约会有从一百到数百个不等的细节层Mesh被绘制。 (more…)
关于地形渲染技术的杂谈
3地形是3D游戏中不可或缺的基础部分,特别是对于要表现室外场景的游戏来说。随着图形硬件的发展,地形渲染技术也经历了若干变迁。主要包括几个方面:LOD,光照和阴影,材质表现。由于本人的时间精力有限不可能面面俱到,所以只能是浅谈辄止,粗浅的叙述一下相关的技术和一些思考,欢迎交流指正。
关于LOD
早些年,由于图形硬件的瓶颈在于顶点和三角形处理上,因此发展出一批目的在于尽可能减少顶点和三角形数量的算法,如ROAM。后来随着显卡性能的提升,渲染效率的瓶颈逐渐变成了总线上的数据传输速率,地形渲染随之演变成尽可能将预计算好的数据存储于显卡上,从而避免每帧传递数据,如Geo-Mipmapping。还有后续的算法在此基础上继续改进,如Chunked LOD。
除此之外,地形LOD算法还需要处理的问题包括如何消除LOD级别改变时发生的视觉上的突变。一种常见的方法就是通过Morphing。不过不知是出于效率还是工程上的考虑,Crysis的地形上并没有做morphing。
再后来,随着Shader Model 3.0中增加了Vertex Texture访问以及对Instancing的支持,地形渲染技术则有了更多的选择,例如通过VertexTexture技术,可以在VertexShader中算顶点,而Instancing技术更进一步减少了数据传输量,进一步简化了CPU端的计算和数据传输。
参考:CDLOD,这个作者正在基于DX11实现他的下一个版本的CDLOD,将会包含下面要说的Tessellation技术。
到了DX11,新引入的Tessellation技术则让引擎开发者拥有了将整个地形渲染完全搬到显卡上去做的能力。如果说SM3.0中我们只是在硬件上动态生成所需的地形顶点,那么到了DX11中,我们就可以在硬件上实现LOD了,我们可以GPU上决定每个Patch应该有多细密的网格,并且在GPU上处理好和邻接Patch的接缝问题。关于这个话题可以参考GPU Pro2中的Terrain And Ocean Rending with Hardware Tessellation。
这意味着到DX11普及的时候,以往的那些在用于CPU端计算LOD索引的很多算法,都不再被需要了。当然,上述算法中产生的核心思想仍然会继续起作用——例如利用四叉树做地形的数据管理,例如如何在LOD改变时避免视觉上看到跳变等等。 (more…)
自动构建二:CruiseControl.NET配置基础
0在软件工程领域,CruiseControl是一个基于Java的持续集成框架。它包含了大量与持续集成有关的功能,如:邮件通知,Ant自动构建,以及支持多种源码管理工具。可以利用Web页面观察当前和以往的构建流程。它允许我们对软件开发中的很多流程进行持续的自动化控制。
CruiseControl是一个自由,开源软件,使用BSD类型的license。最早的时候,该软件是由ThoughtWorks公司的员工开发出来用于该公司自身内部项目的,随后则变成了一个独立的应用软件。
CruiseControl.NET是CruiseControl的.NET版本。还有一个Ruby版本的CruiseControl,被称为CruiseControl.rb。
对于使用Windows平台,以及Visual Studio集成开发环境的团队来说,使用CruiseControl.NET的好处在于他整合了MSBuild,NAnt,VSS等微软平台下常用的软件开发中的工具,并且非常易于在.NET平台下对他的功能进行扩展。
自动构建一:MSBuild基础
0MSBuild是微软自Visual Studio 2005开始提供的构建平台,既可以用于VC#项目,也可用于VC++项目。
通常情况下,我们采用IDE本身进行项目的构建,有时,也会采用命令行方式调用IDE程序Build我们的项目。(对于VC++项目来说,就是通过命令行调用devenv进行构建)
然而,当我们希望在持续集成工具当中实现项目的自动构建时,尤其是当依赖情况或者部署情况较为复杂时,我们希望有一个简单、易维护的工具实现构建——MSBuild就是我们所需要的工具。
为什么你应当从现在就开始学习投资理财
0用一句话来说就是,学习投资理财有很多好处,却没有任何明显的坏处。
更明确一点说,学习投资理财,可以提升自己对市场经济的认识,有助于形成正确的财富观念,在实践当中获得收益,并且是一条通往财务自由之路。