游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4083|回复: 2

全局光照Radiosity算法(辐射度算法)中关于划分patch的问题

[复制链接]

7

主题

14

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-1-17 14:58:00 | 显示全部楼层 |阅读模式
大侠们好,最近我在看全局光照算法中的radiosity算法,在网上找了许多资料文献翻看。基本思想也知道得差不多。但有一个问题却苦苦想不明白:此算法的第一步就是划分适当的patch。但,patch到底是什么?我知道它是最小的计算单位,而且一个patch的颜色是相等的。我理解它应该是对某一个多边形的再次细分,细分到足够小。但是这个细分的策略是什么呢?如何能够让程序对每个多边形进行细分呢?

    我猜测,进行radiosity算法的前提是不是提前将模型网格都细分好(利用3dmax软件等等)?这样就没有“自动细分”的困扰了。可如果这样的话,该算法岂不是大大依赖于提供的图元?一般模型的图元提供的都是“三角形”,而且是索引三角形。在这种普遍的情况下,patch应该如何划分呢?

    急切盼答!

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2010-1-18 09:46:00 | 显示全部楼层

Re:全局光照Radiosity算法(辐射度算法)中关于划分patch的

patch的意思是"片,碎片,斑点, 小块地",其实不一定单单指把三角形面细分才得到patch,只要把对光照分块处理之后再储存起来,那么这个块就算是一个patch了.意思很广泛,其实关键还是算法的问题.
计算radiosity算法的算法很多.我觉得有三个比较常用的方法.一是利用GPU渲染视图结果,之后cos图累加进贴图缓冲区.
二是利用光子投射方式的渲染器,先把光子一次性散射到场景里面,之后再通过滤波把它们的结果计算出来.
第三个的方法可以渲染最真正的场景,就是无限反复的递归去计算光照,直到你认为足够逼真了才停止.不需要光子投射,但它的速度很慢,场景大概要上1000次反复渲染,那样每个象素点才得到均衡.
问题回来,patch应该如何划分,其实还是要看你的渲染算法怎么样写了,两种方式,第一是三角形细分,第二是先计算UV纹理坐标,之后最后再细分2x2,再之后通过UV转换3D坐标,通过这个3D坐标计算亮度.

7

主题

14

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2010-1-18 11:17:00 | 显示全部楼层

Re: 全局光照Radiosity算法(辐射度算法)中关于划分patch的

greenlitchi,你好。 非常感谢你专业而翔实的热心解答!

我理解你提出的2这种划分patch的方法,是不是这样:第一种是真正的划分,即把一个三角形划分为更小的图元,也就意味着生成了更多的顶点,增加了处理器更重的负担;第二种划分是光照贴图的划分,也就是说三角形本身是不变的,而在它上面贴一个光照贴图,在这张贴图上划分出更小的区域,然后把这些区域“回找”到三角形所在的世界空间的坐标,计算光照颜色,算完后把这张光照贴图贴在三角形上面。是这样吗?

第二种方式如果是我理解的这样,我想问下,那不是要为每一个基本图元都要准备一张贴图了?这岂不是有非常多的贴图,这么多的贴图该怎么处理呢?阁下有没有这方面的资料推荐一下?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-17 01:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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