游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2224|回复: 9

请教一个渲染的问题

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-3-14 12:51:00 | 显示全部楼层 |阅读模式
我要做一些project texture,但是 project texture的数量不确定,比如人物脚底下的光环
是每做一个投影就多一个pass渲染,还是所有的一起一个pass渲染搞定,效率方面有没什么大的影响?
俺渲染方面研究不精,希望高手予以解答

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2009-3-15 20:11:00 | 显示全部楼层

Re:请教一个渲染的问题

一个高手,居然用“希望高手予以解答”这种口气说话,,,
我看会有谁会好意思回答你

有些时候,礼多是一种压力,特别是在上网的时候。
反正这个问题我是完全外行。
看你们的啦!
谁会的,站出来跟大家说说,错了对了都无所谓!

你们谁是高手?都给我站出来!
TONYKEE,这里好像没有高手啊

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2009-3-16 13:07:00 | 显示全部楼层

Re:请教一个渲染的问题

其实也就是multi-Light的的情况,多个光源是一次处理还是多个pass出来。

ps:我从来都不认为自己是高手,呵呵。。。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-16 16:04:00 | 显示全部楼层

Re:请教一个渲染的问题

有些做法是把需要project的多张纹理先渲染成一张大纹理,然后用一个pass实现
不过这种做法好像限制也挺多的

另外问一下,tonykee兄用什么mesh来project
比如投影到地上的光环,是直接用这个地形tile,还是对映射区域生成一块较小的临时mesh?

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-16 16:37:00 | 显示全部楼层

Re:请教一个渲染的问题

我曾经用Shadow Volumn的方法做过复数单位下面的光环,可以在一个pass内完成,效率还不错。你能把你想具体实现的东西详细说明一下吗?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2009-3-16 16:54:00 | 显示全部楼层

Re:请教一个渲染的问题

本来打算脚下踩上一个mesh然后各顶点去求高度实时去lock,unlock也可以,但是如果与地形深度太接近测试不精确的情况下有时会出现与地形交错的闪烁,这效果似乎不好,如果直接投影在地形上,整一个可视范围一个texture,光源数量也不确定的情况下,确实有点麻烦,但是多个pass去混合,恐怕效率方面也不行,我只是突然想到这部分还没做,打算先问问各位给点经验再去搞。

楼上说的情况和这个有点不同,这里如果用的投影贴图,必然涉及到多个光源的情况。
clayman 兄渲染方面是你的强项啊,给点经验吧。

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-16 17:13:00 | 显示全部楼层

Re:请教一个渲染的问题

你在地上踩一个mesh肯定不能够做到紧贴地面,碰到复杂地形肯定会闪烁。我说的那个用Shadow Volumn的办法可以很好地解决这个问题,不够要用到3个pass(前面说错了),两个pass计算Stencil buffer,第三个pass,进行绘制。虽然3个pass带来额外的像素绘制消耗,但其实影响不大
下面我简单介绍一个下画一个光环的方法:
以单位的贴地点作为中心,建立两个个上下封闭的圆柱,一大一小,大的套小的。
关闭depthwrite
第一个pass时,stencil设为zpass-increase,将两个圆柱画一遍,
第二个pass时,stencil设为zpass-decrease,将两个圆柱画一遍。
这时候stencil值为1的像素就形成了一个垂直投向地面的圆环
第三个pass时,只让stencil值为1的像素通过,画大圆柱。

这样的圆环能够紧贴地面适应任何地形。
不过还有两点需要注意的。
第一,圆柱高度要适当。太高了,会带来额外的像素。太低了,可能不能容纳所有的地形。
第二,当需要同时处理多个圆环时,可能需要对stencil的设置做适当的调节,具体我忘了,这个试试就知道了。

这其实就是Clayman提到的“利用地形tile”的方法之一

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2009-3-16 17:17:00 | 显示全部楼层

Re:请教一个渲染的问题

哦,用到了模板缓冲渲染,这玩意好久没碰过了。
呵呵,谢谢LS,回头好好研究研究。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-16 20:08:00 | 显示全部楼层

Re:请教一个渲染的问题

基本上三个游戏里decal的做法都一样
首先用lock,unlock生成mesh。
wow里生成的mesh精度大概是最高的,在比较崎岖的户外地形上,法师的施法区域框有时候分成了4,5个子区域(每个区域间可以有叠加)来渲染,也就是需要4,5次DP,可能是这样比较容易计算顶点位置吧。
帝国三每个单位脚下的选择框就只用了一个quad,这大概是因为帝国3本身地形也不太崎岖。猜想war3可能也差不多。

3个游戏都在渲染的后期(也就是普通场景都渲染完之后)才处理decal,关闭depth write,打开depth test,为了避免z fighting,把z bias设置为-0.0(没有打错,确实是负0),然后用普通的project texture技术渲染。

对于多纹理的情况,比如half life墙上大量的污迹和海报,帝国里选中大量单位之后不同的选择框(普通单位的圆环,高级单位的星形),首先把需要渲染的decal mesh按纹理sort,然后把相同纹理的decal打包为一个buffer,用一次DP来渲染,和基本的instancing一样。

http://blogs.msdn.com/shawnhar/archive/2009/03/13/motogp-skidmarks.aspx

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-16 21:02:00 | 显示全部楼层

Re:请教一个渲染的问题

关于Decal,还有两个方法可以参考。
一个是将用于绘制Decal的Quad向z方向升高,这样可以避免跟地形交错。具体可以参考World in conflict。
另一个是用一系列Quad连成一个链来形成圈。具体可以参考Company of Heroes。
我之前提到的那个方法是Endwar里的方法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 02:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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