注册 | 登录

游侠NETSHOW论坛





查看: 4070|回复: 38
打印 上一主题 下一主题

【原创】(知识帖)FPS中的游戏技术―――阴影 [复制链接]

帖子
1029
精华
1
积分
715
金钱
148
荣誉
0
人气
0
评议
0
楼主
发表于 2005-12-14 21:26:53 |只看该作者

【原创】(知识帖)FPS中的游戏技术―――阴影

在坛子上经常看见很多人争吵哪个游戏引擎做得好,但论据都不怎么对。本人粗通一点3D技术,用OpenGL作过简单的3D场景,在这里讲些知识抛砖引玉。

其实我说的这点东西对所有3D游戏都是一样的,不过FPS游戏自由度高,对拟真的要求比其他类型的游戏都高。就比如寂静岭,生化危机这样的游戏自由度不高,虽然后期版本也是3D的,但它们的场景不能像FPS那样随意转动,最多只能前后左右稍微晃动一下而已,因此许多特效是可以用相对简单而耗费系统资源少的捷径来做到的。比如寂静岭III的画面堪比DOOM III,系统要求却低得多,就是这个道理。

首先谈谈阴影。自half-life 2以后的重量级FPS都把实时的阴影作为一个重要的实现。比如FEAR和DOOM III,阴影是渲染游戏气氛的重要组成部分。
但是可以告诉大家,在渲染阴影方面所有的游戏引擎都是或多或少地走些捷径。真正的,完全实时的阴影效果,在游戏――――3D实时渲染领域,目前是不现实的。如果要实现,目前的系统综合性能起码要翻100倍以上才可能有理想的效果;所以近期,完全实时的阴影渲染是不可能的。争论哪个游戏引擎是“真阴影”哪个是假的这样的问题毫无意义。
为什么?很简单。大家都知道3D场景由多边形构成。每一个多边形在渲染的时候,程序会根据一系列的信息,比如多边形定义的颜色,贴图,反射性质,法向量等等,来确定这个多边形显示在屏幕上是怎样的。假设我们要实现完全实时阴影。那么如果这个多边形在阴影中,那程序就要确定有哪些多边形把阴影投射在这个多边形上,以及这个多边形把阴影投射在哪些多边形上面。而这在实时渲染是不可能做到的。因为在实时渲染中,在每一桢,几乎所有的多边形都是同时绘画出来的,然后再一起进入其他程序(比如贴图等等),这样才能保持速度,也就是说不可能根据先后关系来确定多边形之间的阴影投射关系。

目前唯一应用“实时”阴影效果的领域,其实是CGI(Computer Generated Image),也就是电脑电影特效或者纯CG电影(比如Shrek这样的3D电影)这样的领域。它是如何做到的?电脑渲染这样的CG,每一次循环,它只画一个多边形――――确定多边形顶点,然后贴图渲染,光源处理。然后再画下面一个多边形。这样一个一个处理,使得完全真实的阴影可以被渲染出来,不仅如此,这种方式还可以轻而易举地完成其他在实时渲染,也是游戏领域无法完成的特效。这种方式缺点就一个字:慢。使用数十台工作站并行工作,画完一桢――――注意是一桢,花费时间从数秒钟到十几分钟不等。当然电影导演们有时间等,玩游戏就是另外一回事情了,你愿意玩一个0.1桢/秒的,画面超逼真的游戏吗?

目前各重量级FPS引擎对阴影的处理各不相同,但大致上都差不多。比如对于某些相对静态的阴影,像墙壁在固定光源照射下的阴影,这样的阴影都是通过某种手段事先定义好的,引擎事先算好,到时候一股脑画上去,不用实时计算。需要处理的是可移动的物体,比如人物和可移动物件的阴影。而这样的阴影的大致形状也都是事先运算好的,然后这个形状再通过与光源的相对关系进行几何变换,比如剪切变形、拉伸、缩减扭曲之类。耗费的系统资源相对小,而且效果也可以接受。静态物体阴影和动态物体阴影这两个问题搞定了,渲染出的画面基本上也就像模像样了。不过某些要求是不能达到的:比如,渲染透过玻璃被折射以后的扭曲阴影,以及透过动态的水波被折射并且不断变换着的阴影。

值得一提的是,早期的3D FPS有的会把阴影画到贴图里面去,这样的效果也可以接受,但是太死板而且麻烦(至少这样的贴图就不能重用到别的场景了!),现在新潮FPS的引擎没有一个是这样做的。

嗯,今天先讲这些,有空我再讲点别的。玩游戏去了...

[ 本帖最后由 51m0n 于 2006-8-22 14:00 编辑 ]

使用道具 举报

帖子
2356
精华
0
积分
1178
金钱
1402
荣誉
0
人气
1
评议
0
沙发
发表于 2005-12-14 23:40:57 |只看该作者
好帖~长见识了~~曾经也想玩一下3D类软件的,不过太花时间了~~
激烈燃烧中的烈火の男!!Nothing's Gonna Change My Love For You

Nothing's Gonna Stop Us Now

使用道具 举报

帖子
480
精华
0
积分
240
金钱
2348
荣誉
0
人气
0
评议
0
板凳
发表于 2005-12-15 00:39:01 |只看该作者
阴影太过复杂,能用简单的算法完成勉强可以的阴影就不错了.老卡号称能把几万个多边形运算,在速度上等同于几百个的速度.这种研究比较有意义.

使用道具 举报

帖子
330
精华
0
积分
165
金钱
288
荣誉
0
人气
0
评议
0
地板
发表于 2005-12-15 02:13:13 |只看该作者
懂了 这贴要顶 【支持】 【支持】 【支持】 【开心】 【开心】 【开心】

使用道具 举报

见习

帖子
1717
精华
0
积分
859
金钱
1892
荣誉
0
人气
0
评议
0
5#
发表于 2005-12-15 02:43:46 |只看该作者
好贴  加精~~~~~~~111515151515151515151515151515
i5 2300k  
威刚 DDR3 1333 4G*2
华硕 P8p6 LE
蓝宝石 6870

使用道具 举报

帖子
1029
精华
1
积分
715
金钱
148
荣誉
0
人气
0
评议
0
6#
发表于 2005-12-15 13:10:13 |只看该作者
自顶一下
谢谢版主加精【开心】

使用道具 举报

帖子
483
精华
0
积分
242
金钱
126
荣誉
0
人气
0
评议
0
7#
发表于 2005-12-15 14:25:23 |只看该作者
RIDDICK中的假阴影也十分的华丽呀,是低配置玩家的福音【经典】

使用道具 举报

帖子
3602
精华
0
积分
1806
金钱
4401
荣誉
0
人气
20
评议
0
8#
发表于 2005-12-15 16:27:07 |只看该作者
长见识了,受益非浅!顶【支持】 【支持】 【支持】 【支持】
上联:小撸怡情,大撸伤身,强撸灰飞烟灭;
下联:先撕长裙,后撕短裤,百撕不得骑姐 。
横批:无撸木骑

使用道具 举报

帖子
585
精华
0
积分
293
金钱
653
荣誉
0
人气
0
评议
0
9#
发表于 2005-12-15 21:03:26 |只看该作者
LZ说了很多我想说的话,我也说过同样一句话,真正即时光影的游戏还没有出现.LZ的帖子也让大部分那些说Q4的全即时光影的人懂了什么叫即时光影.

使用道具 举报

帖子
330
精华
0
积分
165
金钱
288
荣誉
0
人气
0
评议
0
10#
发表于 2005-12-15 21:08:27 |只看该作者
最初由 bogui 发表
[B]LZ说了很多我想说的话,我也说过同样一句话,真正即时光影的游戏还没有出现.LZ的帖子也让大部分那些说Q4的全即时光影的人懂了什么叫即时光影. [/B]

D3引擎相对于现在很多引擎,能算是"即时"了 【汗水】 【开心】 【开心】

使用道具 举报

帖子
1029
精华
1
积分
715
金钱
148
荣誉
0
人气
0
评议
0
11#
发表于 2005-12-16 07:40:40 |只看该作者
最初由 bogui 发表
[B]LZ说了很多我想说的话,我也说过同样一句话,真正即时光影的游戏还没有出现.LZ的帖子也让大部分那些说Q4的全即时光影的人懂了什么叫即时光影. [/B]


我觉得现在的FPS还是可以称得上是即时光影的。不同于阴影的实现,光照效果是OpenGL库的一个非常基础的功能,就跟贴图一样基础,因此我认为现在的游戏可以认为是“真光影”。不过,OpenGL最多只支持同时8个光源,所以对于某些场景的处理,比如一个大场景里面有很多灯管,就需要一些技巧。不可能每个灯管都作为一个独立光源,8个光源就不够用,系统也消耗不起。于是肯定会有一些技巧啦,比如其实只有一个光源+一些贴图特效,让你误以为每个灯管都在发光。不过这不能算“伪光影”吧,最多算偷工减料。【汗水】

使用道具 举报

帖子
1143
精华
2
积分
994
金钱
859
荣誉
2
人气
0
评议
0
12#
发表于 2005-12-16 11:00:20 |只看该作者
如果我没理解错的话。楼主说的好像是光线追踪技术,这个应该是当今3d游戏最难攻克的障碍了。
除了算法要革新外,硬件一定要跟上,光显卡不够了,得要光线追踪卡。
id的jc退而求其次,目前正在致力于高精度贴图和大材质的研究,估计这能在d3e加强版里实现(雏形就是quake war)
真正的ray tracing,不知道何时能实现【汗水】

使用道具 举报

帖子
138
精华
0
积分
69
金钱
1038
荣誉
0
人气
0
评议
0
13#
发表于 2005-12-16 12:28:48 |只看该作者
同意10楼得说法。doom3/quake4已经实现一个物体的阴影准确投射在另一个物体上,不管这两个物体是静还是动,也不管光源是静还是动。不像其他游戏,只能将静态光源产生的阴影投射在3D场景容器的壁面上。所以可以称为实时阴影。
不同意12楼的看法。
E6600 OC 3.36G,X38-DQ6 ,黑龙1G DDR2-1066 ×2,WinFast 8800GTS 640M 650/1512/1600,7200.10 单碟250G*2,轩辕2496,2407WFP-HC,DT231

使用道具 举报

帖子
1976
精华
3
积分
1599
金钱
2241
荣誉
1
人气
5
评议
0
14#
发表于 2005-12-16 18:59:43 |只看该作者
长见识了
.....................

使用道具 举报

帖子
138
精华
0
积分
69
金钱
1038
荣誉
0
人气
0
评议
0
15#
发表于 2005-12-16 19:39:51 |只看该作者
严重同意16楼!!!
一瓶子不满半瓶子晃荡的人在讨论问题时犯些低级错误也没人说你是小白(我的水平也不怎么样),但你这样水平的人拜托千万别发有关技术的帖子,会误人子弟的!!!
E6600 OC 3.36G,X38-DQ6 ,黑龙1G DDR2-1066 ×2,WinFast 8800GTS 640M 650/1512/1600,7200.10 单碟250G*2,轩辕2496,2407WFP-HC,DT231

使用道具 举报

帖子
1029
精华
1
积分
715
金钱
148
荣誉
0
人气
0
评议
0
16#
发表于 2005-12-16 22:30:51 |只看该作者
[QUOTE]最初由 Mr.bug 发表
[B]LZ做过的事 小学生按照书籍都能做

LZ对编程还一窍不通 还停留在“别人教你怎么做 你就只会那么做”的阶段

你这种半吊子就别出来糊弄大众了

CG动画之所以不能实现即时渲染光影 关键是因为品质 大多数CG动画

使用道具 举报

帖子
1029
精华
1
积分
715
金钱
148
荣誉
0
人气
0
评议
0
17#
发表于 2005-12-16 22:36:23 |只看该作者
16楼的在谈论CG之前,请你最好把一些最最基本的概念弄清楚。比如什么是“光”(光照效果),什么是“影”。我很乐意参加讨论,但我不负责扫盲。谢谢

使用道具 举报

帖子
330
精华
0
积分
165
金钱
288
荣誉
0
人气
0
评议
0
18#
发表于 2005-12-18 22:07:23 |只看该作者
最初由 Mr.bug 发表
[B]你吹你的牛B去吧 你是那棵葱 我去问sunmast就知道 还多次全国编程比赛

个最基础的天光是什么都不知道 还敢学人家谈CG动画 昏死 [/B]
【汗水】 【汗水】 【汗水】 【汗水】 【汗水】 【汗水】

使用道具 举报

DOOM3☆闪亮电浆冲锋枪

帖子
2474
精华
16
积分
4467
金钱
4925
荣誉
3
人气
0
评议
0
19#
发表于 2005-12-18 22:57:21 |只看该作者
【汗水】 都是专业的东东,我等莱鸟不明白啊【汗水】【汗水】 其实可能大家都没有错,现在的3D标准还不统一吧,不是什么OpenGL的,什么DirectX的等?各有各的技术,程序等吧?55555,莱鸟的说,等挨板砖【汗水】 【汗水】

BAIDU后找到的有趣的东东火眼金睛-CG还是实景拍摄 ?

使用道具 举报

DOOM3☆闪亮电浆冲锋枪

帖子
2474
精华
16
积分
4467
金钱
4925
荣誉
3
人气
0
评议
0
20#
发表于 2005-12-18 23:15:08 |只看该作者
哗咔咔,错了4个但是依然不错哦【汗水】 继续努力【汗水】

The Challenge Results


Six out of ten answers were correct.
Pretty good ! The CG artists have worked really hard -- but you're still slightly ahead of the game!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-30 13:14 , Processed in 0.364176 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到