nicky

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  14 随笔 :: 1 文章 :: 23 评论 :: 0 Trackbacks
很久没更新了。。。
最近做的一个demo,其实就是毕设了。算起来写这个之前大概已经有一年没写代码了,呵呵。

系统要求:
R300+, NV40+显卡
需要d3dx9_29.dll
ppprt.part1.rar
ppprt.part2.rar

原理比较简单,将SH光照对HL2的3个轴的结果利用MRT渲染3张lightmap到SH纹理空间(也可以叫lightmap空间),之后利用HL2的Radiosity Normal Mapping方法渲染最终结果,HDR作后期处理。
具体:
预计算建立5阶SH纹理,PRT光照在像素级别计算,这样可以适应低模场景。只不过跟一般的像素PRT不同,考虑Phong光照下的BUMP MAPPING渲染,这样就需要实时采样法向量。P.P.Sloan利用各种基函数来实现BUMP,不过这些都是对渲染公式分出3项进行SH编码,然后计算对法向的卷积,导致SH矩阵的需求。为避免SH矩阵,可以将实时的法向分离到3个已知的HL2正交基进行预计算。考虑到公式的求值复杂性specular用一阶函数(r.s)。渲染时首先对3个基向量渲染得到当前所见的区域的lightmap,具体参考ATi Ruby demo。渲染结果用RGBS编码减少存储和带宽。之后利用法向和眼反射向量对3个基向量的COS权值完成最终的光照公式求值。
HDR在ATi显卡上考虑到fp filter不支持可以用int16渲染中间结果。天空纹理用RGBS编码,filter效果很不错。


2006-7-2:
更新了一下,加入了一些选项:
/Files/nicky/ppprt_update.rar
解压后覆盖原bin文件夹

本想作一下FSAA,发现找不到一个很好的方法。FP16+MSAA的硬件尚未普及,我们只好用其他方法。利用shader作SSAA耗费太大了,FPS剧减而且采样率还不能太高。利用RGBE/RGBS/RGBdiv等编码通过framebuffer来作MSAA倒是可行,不过都属于hack,而且感觉RGBS/RGBdiv实在是不能适应很广的动态范围,会出现banding。Edge-detection FSAA,只能说是一种柔化边界的方法,因为根本上来说采样率并没有提高。

截图:


posted on 2006-06-27 02:18 nicky 阅读(712) 评论(7)  编辑 收藏 所属分类: 3d

评论

#1楼  2006-07-11 00:35 shamy [未注册用户]
很想看看你的毕业论文,能否给格链接?谢谢。
  回复  引用    

#2楼 [楼主] 2006-07-15 10:25 nicky      
paper link:
thesis.rar

  回复  引用  查看    

#3楼  2006-10-08 17:11 yuanhong      
效果很cool啊!小弟很佩服!
很希望能和你就PRT的问题进行交流。
  回复  引用  查看    

#4楼 [楼主] 2006-10-12 18:16 nicky      
欢迎交流。MSN: nickyhu2004@hotmail.com
  回复  引用  查看    

#5楼  2007-03-13 12:34 san [未注册用户]
我现在也要做关于PRT的毕设,不过对PRT还一无所知,好像相关论文都是英文的。nicky有中文相关的资料么?
  回复  引用    

#6楼 [楼主] 2007-03-13 18:11 nicky      
没有啊。
  回复  引用  查看    

#7楼  2007-09-28 22:24 dancer [未注册用户]
这个效果非常不错啊
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-02 16:50 编辑过
成果网帮您增加网站收入


相关链接: