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

原创 2007年09月22日 22:11:00

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

  
下面分别介绍。
   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.
 

【Visual C++】游戏开发四十八 浅墨DirectX教程十六 三维地形系统的实现

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。   文章链接: http://blog.csdn.net/zhmxy555/article/details/8685546 作者:毛星云(...
  • zhmxy555
  • zhmxy555
  • 2013年03月18日 00:24
  • 28457

OpenGL绘制地形

1.创建顶点缓冲区对象(VertexBuffer) 2.创建索引缓冲区对象(IndexBuffer) 3.加载高度图(Heightmap) 3.1把位图像素转换为高度图数据(顶点数据):高度图在...
  • u014686875
  • u014686875
  • 2016年04月24日 16:06
  • 2606

高度图构造地形

地形生成中,最简单的要数高度图构建地形的方法,同时这种方法也称之为蛮力法。生成流程:1.准备一张纹理,数据编码为高度,你可以同时编码进去垂直与高度轴的那个超平面上的坐标点。这张图我是用了一张128x1...
  • zhao_92221
  • zhao_92221
  • 2015年06月30日 23:15
  • 474

NEHE的OPENGL中文教程 第34课 从高度图生成地形

欢迎来到新的一课,Ben Humphrey写了这一课的代码,它是基于第一课所写的。  在这一课里,我们将教会你如何使用地形,你将知道高度图这个概念。             下面我们来定义一...
  • jiannan86
  • jiannan86
  • 2016年03月28日 21:11
  • 1309

Revit二次开发——场地地形

Revit的场地地形其实没有什么特别的,其实它就是一个面而已,创建这个面用下面这个方法: Form NewFormByCap(bool isSolid, ReferenceArray profile)...
  • niuge8905
  • niuge8905
  • 2017年07月27日 22:08
  • 935

3D-MAX真实三维地形制作过程

3DMAX三维地形图效果演示 工具准备      1、BIGEMAP地图下载器      2、3DMAX软件       3、global mapper     Global mepper ...
  • bigemap
  • bigemap
  • 2016年09月13日 11:43
  • 42635

转载Unity地形编辑

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 前言: 本文不是讲地形编辑器的使用,而是主要讲解(1)地形相关知识(2)使用代码创建地形(3)使用AnimationCurve创建曲...
  • MertenLins
  • MertenLins
  • 2016年02月01日 10:21
  • 1030

Unity3D 自定义地形插件(支持FBX导入模型的编辑)

最近又把去年写到一半的地形插件拿出来捣鼓,想把它完善掉,经过一个半月的努力终于完善的差不多了,再有个把星期就能完成了,所有功能完全模仿自带地形系统,tree支持LOD,Grass采用billboard...
  • UtilXK
  • UtilXK
  • 2015年12月28日 14:02
  • 2306

Minecraft的世界生成过程(一)生成地形之前

首先剧透一下,Minecraft生成地形的主要算法就是噪声函数,Notch本人也早就回答过了。但是我一直没有仔细研究MC生成地形的整个过程,最近有时间就好好研究一下...
  • xfgryujk
  • xfgryujk
  • 2017年03月13日 22:40
  • 3596

3D地形编程——之GeoMipMap基础

喔嚯!你现在开始学习所有地形编程的核心部分,他们又难以置信的复杂算法组成。实际上,这是一个谎话。在这一章我将讲述3个算法,选择他们是因为他们简单而且高效。并且,再一次在这本书,我将让你省略漫长的介绍而...
  • lavendarWang
  • lavendarWang
  • 2014年10月28日 20:09
  • 844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高手做的地形与光照非常强(转,但是不知道文章的出处了)
举报原因:
原因补充:

(最多只允许输入30个字)