游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2521|回复: 7

关于场景层次树和渲染状态的问题。

[复制链接]

13

主题

145

帖子

149

积分

注册会员

Rank: 2

积分
149
发表于 2005-4-5 09:56:00 | 显示全部楼层 |阅读模式
场景一般建成层次树octree,bsp,quadtree等来加速三角形剔除,但是每一个leaf node包含的各个三角形可能渲染状态不同,根据渲染状态把它们分成不同的submesh。
渲染的时候有两种办法:
1.给每个leaf node创建一个固定的vertex buffer和index buffer,然后遍历树,单独渲染每个可见的节点。
2.遍历树,找出可见的节点的集合,然后给这个集合中所有相同渲染状态的三角形创建vertex buffer和index buffer(也可以只动态的创建index buffer),这样可以减少渲染状态的切换。
1和2谁快?大家都是用的什么办法?

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2005-4-5 11:25:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

理论上,1具有最小的空间复杂度,所以会有最大的时间复杂度

55

主题

175

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2005-4-5 11:40:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

2, 渲染状态切换是主要的性能瓶颈.
当然一定要使用固定的vertex buffer,而动态的创建index buffer.
而且1无法处理复杂的分组场景层次,无法处理复杂的blend渲染,总之要有管理地渲染。

11

主题

114

帖子

118

积分

注册会员

Rank: 2

积分
118
QQ
发表于 2005-4-6 13:37:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

你的两种办法都有些极端,如果结合一下,仍然采用一个固定的vertex buffer和index buffer,另外创建一个属性指示表,对Index buffer多次遍历,每次渲染相同属性的节点,用多次遍历的时间换掉状态切换的时间。猜想这应该也是D3DXMESH的工作方式

18

主题

579

帖子

583

积分

高级会员

Rank: 4

积分
583
发表于 2005-4-7 14:54:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

我觉得渲染的时候,应该先缓存一下待渲染的数据,然后排一下序后渲染

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-4-9 00:38:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

我用第1种方法,原因是管理简单,面向对象

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-4-10 15:06:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

问题中的对象和程序中的对象根本就是两回事,很多书都写错了。
我也觉得应该同种状态的放在一起渲染,并且应该把同种纹理的归到一起渲染。因为传输纹理也需要时间。
但是只需要编历一次,因为可以把他们的引用归类存起来。

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-4-11 23:40:00 | 显示全部楼层

Re:关于场景层次树和渲染状态的问题。

在我这里是一个概念
对象与问题里的对象是不是一个东西,那得看设计者是怎么设计的

方法2中的动态生成VB,怎么看也很慢阿,视角动一下,就得生成一次
何不改进方法1,将相同渲染的node组织起来呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 06:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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