游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4858|回复: 18

如何实现不雾化,超深远的场景

[复制链接]

35

主题

340

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2004-12-19 18:45:00 | 显示全部楼层 |阅读模式
现在的游戏多半在室内玩效果,即使是室外,也是山不高,谷不深, 再笼罩上一层浓雾

总之是视野不开阔,不能给人以心旷神怡的感觉

好难得有几宽像《微软飞行模拟》《il-2》等游戏算开阔
但细节品质又太低

原因大概就是机器配置有限
我们看到的《farcry》说画面好,横大程度上就是因为她是室外游戏,而且视野开阔,但其配置实在杀人;

但是为什么就不能想办法在低配置下让视野开阔一点的呢/

横多的游戏里面都采用模型替换方法,近的用精细模型,远了用简单模型替代
大规模地形 往往使用lod 远景减面加雾化方法;都不能理想的达到扩大视野

这里,我 想到一种方法, 动态背景法
一般游戏的天空盒(天空球)都是图片,动画也只限于采制坐标的改变
现在我想让背景动起来,我想游戏不能够有开阔的视野,是因为如果渲染的东西太多,帧速就会变慢,而背景的改变非常微小(一般情况下),比如我们坐火车,你如果一直看远山,会觉得山的轮廓,光影,没有一点变化,只有过了相当长的时间,山的外形才会有较大的变化(也就是说,动态渲染背景对帧速的要求之低,我们完全可以10秒种渲染一帧背景,同时渲染300帧靠近的地形,如果配置好一点  我们 可以渲染双层背景,游戏在开阔视野下的真实感将会比通过雾化得来的背景有一个质的飞跃),

这个方法有下面几个不完善的地方
1。游戏的背景往往由6张512×512的贴图组成,我们至少要同时对其中4张进行修改,消耗很大 。但是,我认为出现山的地方不会太大每张大概要修该 256 ×512 的内容总共每帧只要渲染 1024*512 想素的内容了

2。游戏需要同时两个渲染线程,一个渲染场景,一个渲染背景,其中增加了程序的复杂度,内存的空间消耗等等,但是我认为,背景帧速要求非常低,一般可优先保证前台的运行,至于内存的问题(首先很多游戏的推荐配置为两G) 我们同样可以以时间复杂度换空间复杂度

3。最致命的地方是,摄像机的运动必须是相对连续的,否则就会在切换视点的时候出现错误的结果,这对与游戏的限制实在太大。
我的解决方案是,预先存储数张不同位置的背景图(256×512)先充数,这些背景图还可以先不载入内存中,需要时载入,或者在玩家命令切换视点后,有5秒的等待时间,这一时间内,玩家继续在原地活动。像《war3》的回城一样

4。补充的是,这种方法需要对360°的场景都进行渲染,所以数据组织将面临挑战,为了解决这个问题,我想没次分8 个步骤进行渲染,比如 一次渲染45°并立即更新

我想在我正在做的游戏里加入这个 功能,游戏就可以不用雾化而拥有开阔的场景,不知道是否可行 各位大虾有何见建议。

这只是一个想法,具体应该怎么做

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2004-12-19 19:31:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

英雄萨姆不错

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2004-12-19 19:32:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

呵呵,你到楼顶上看一看,现在污染这么严重,几公里远就看不清楚了

2

主题

100

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2004-12-19 22:19:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

其实这种超视野场景可以通过其他方法解决:
比如球面地表,这样地表上的视点就能得到很好的视野又节省资源。
还有技术隐藏地表,通过高矮复杂的地表,让玩家永远无法得到很远的视野,即便有部分远视野也是低复杂度地表,这样也能减少“多雾”的烦恼。
如果要真正意义上解决远视野的问题,就必须使用新的数据结构,我想现在很多公司都在研究这个问题。
从现在的发展速度来看,硬件性能的逐级提升已经让我们看到了希望,通过很多电影特技我们能够看到专业领域里已经找到了一些办法,所需要的是进一步提高性能。把这样的技术普及需要多方面的共同努力。

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2004-12-20 08:25:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

关键是超深远的量化概念是多少?对于飞行游戏,是不是8000米高空下视角10度远?

35

主题

340

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
 楼主| 发表于 2004-12-20 12:55:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

我想就是在山区晴天的能见度 的视野吧
达到一般户外风景照的水平:)

1

主题

130

帖子

135

积分

注册会员

Rank: 2

积分
135
发表于 2004-12-20 14:39:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

说说我的想法吧,一般来说游戏中使用雾是为了掩饰摄像机的截取面,说到底就是说是为了节约渲染资源.而楼主的做法实质上没有裁减掉任何的物体,全部都画了一遍.如果场景足够大就很难想象所需要的运行环境.

一般来说处理远景不用雾的办法就是lod,对远处的物体使用低模,并使用最底层的onepass效果,地形上的表面物体可以通过算法把颜色保存为地形的mask,这样一个满是树的山头远看只是一片绿色的粗糙轮廓...个人觉得这样是比较现实一点的实现方法

35

主题

340

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
 楼主| 发表于 2004-12-21 18:37:00 | 显示全部楼层

Re: 如何实现不雾化,超深远的场景

误会
背景上面是只绘制地形,不绘制人物或者其他
我记得《三角洲:黑鹰计划》狙击枪的镜面上可以反射出地形
而《bf1942》的飞机机身上也能反射出周围的地形

我所想的当然也是要lod的
图中白的雪山其实是一渲染的背景,但如果玩家乘坐飞机靠近此山
距离到了一定程度,就改用真实的网格来实时渲染这做山

由于背景盒相对玩家是静止的,所以玩家在数十秒钟内感觉山没有变化
是很符合常理的
因此对于近景我们每秒渲染超过60帧,对于背景,我们完全可以5~10秒一帧
sf_20041221183728.jpg

1

主题

130

帖子

135

积分

注册会员

Rank: 2

积分
135
发表于 2004-12-21 18:53:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

"背景上面是只绘制地形,不绘制人物或者其他.."
这样会使一座近看全是树的山原看是光秃秃的一片,这就背离了你原来的想法了吧...或者说你的地形是指静态的场景所有东西?这样的话实际上画的东西并没有减少啊...

"我们完全可以5~10秒一帧"
只要是实时的渲染,不管多久画一次,那一次的计算量就有可能超出设备负担,最多不过由任何时候都是很卡变为了5-10秒卡一下,也许后一种更不能让人接受.....

呵呵,我的意思是无论你把远处的物体当作背景还是实体处理,其实并没有减少任何一面的操作,所以最实际的渲染大场景的办法应该是优化裁减算法与使用更好的渲染机制,减少面数和stateblock,才能达到比较理想的目的

35

主题

340

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
 楼主| 发表于 2004-12-21 20:53:00 | 显示全部楼层

Re:如何实现不雾化,超深远的场景

误会
我是开了两个渲染线程,一个渲染到背景,一个渲染到屏幕
也就是相当于两条流水线,游戏运行是 两条流水线都是不会出现空闲的

我当然不是同时渲染360°的“全景图”我每帧分8个步骤,每次45°
如果内存不足,我每次送渲染的顶点可以更少

能快点当然快点了,我说了是牺牲 帧速 来换取较少的 内存和cpu消耗
如果你电脑够强,1秒一帧也没意见
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 20:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表