关闭

高手做的地形与光照非常强(转,但是不知道文章的出处了)

标签: 算法游戏图形引擎patchemail
3711人阅读 评论(0) 收藏 举报

室外渲染有很多课题,我只做了室外地形渲染、光照阴影、水面渲染等基本的课题。本来这些课题就有多种多样的思路和算法,我将我的一些思路写出来与大家分享,希望对大家有帮助,也希望有自己不同见解的师兄能分享你的思路和方法。

  
下面分别介绍。
   1
:地形渲染。采用GeoMipmaps技术,2lod4层地形纹理,一张全局光照图(假如光照图是每像素对应每个顶点光照值的话,可以在初始化时将光照图中每个顶点的值写进顶点的diffuse,ps中可少用一张纹理,本文也是这样。当然你可以用更大的光照图和更细致的地形光照计算方法来生成), 一张控制4层纹理混合权重的纹理图(3颜色通道混合4层纹理,alpha通道预留在后面的阴影通道)wow中一个pitch64x64的纹理图来混合多层纹理和地形的shadow map.(由于地形编辑器暂时只支持全局的4层地形纹理设置,我也没有去手工设定每个patch4层纹理,所有看上去还没有wow地形那么丰富和细腻).高度图读取顶点高度数据,高度图在地形辑器里编辑.(形高度图的高度数据生成和地形光照图的生成算法可以参考《Focus.On.3D.Terrain》,那里也有其他地形渲染不错的资料)。地形渲染如下图:

  


   2
:水的渲染。和wow水一样的渲染,同样也有人发表过这个水渲染的帖子和源代码了。D3DTOP_ADD D3DTA_TFACTOR一个给定颜色,可以在设置水的颜色,再加上alpha 通道的值。30张纹理轮换交替形成水波荡漾状。最后D3DRS_ALPHABLENDENABLED3DBLENDOP_ADD。如果不要透视效果,就是和水底的纹理混合的话,不做ALPHABLENDE就是了。水渲染如下图:


   3:
光照和阴影。阴影用的是hw shadow map技术,静态的物体的shadow map预先一次算好。(实时阴影psm,tsm技术个人觉得在实际游戏应用中每帧2次渲染遮挡体,如果物体多了速度就慢了)。shadow map有精度问题,下面3张图分别是3个物体同在一个shadow map512x512256x25664x64大小时候的阴影渲染情况。物体投射在地形的阴影,如前面地形渲染说的,可以用投射纹理的办法算进纹理混合权重控制图里的alpha通道。正如Gpu Gems上所说的样,物体投影在地形上的阴影才是玩家最看重的样,我们可以用模糊阴影来预先算进alpha通道,这样最后渲染的时候加快了地形的渲染,又可以尽量避免锯齿现象。
 
物体自我的遮挡阴影如果被遮挡的像素与遮挡面中对应的像素离的很近的话,精度问题就难避免了,这时就会出现斑马纹了。(wow中小物体上自我遮挡阴影好像没有用,感觉是在diffuse上抹上去的,这个是猜想,有待实践)。动态物体的阴影暂时还是像wow一样用椭圆的阴影贴在地面,至于怎样快速计算动态的实时光照那时另外一个课题(暂时打算参考游戏编程精粹上的算法)。
   512x512shadow map
如下:


   512x512shadow map
在地形阴影中加入模糊如下:



  
本来还打算加上镜头光晕,体积雾,现在快过年了,又没那个心思了。室外图形渲染还应包括动态云层,天气效果等等。但是下一步计划研究下室内渲染的课题后,在成都找家游戏公司研究下实际商业引擎中的技术,剩下那些只好以后有空再研究。按照轻重缓急,先把基本重要的东西做出来再说。
(附:有对图形渲染技术和引擎技术有研究,愿意和我交流的朋友,

EMAIL留言--Email:windrunner17@163.com.
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:223345次
    • 积分:2907
    • 等级:
    • 排名:第12226名
    • 原创:59篇
    • 转载:5篇
    • 译文:0篇
    • 评论:47条
    最新评论