实时阴影绘制技术研究
C++博客
首页
新随笔
联系
聚合
管理
48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
公告
Name:Roger
Job:PostGraduate student
Age:25
Majority:Computer Application
Research Interest:realtime shadow rendering
email:roogeer [at]gmail.com
Glad to be your friends:) -----------------------
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
(49)
c++(3)
directX(7)
graphic(6)
other(11)
rendering engine(2)
shadow(7)
转载(13)
随笔档案
(48)
2006年8月 (1)
2006年6月 (1)
2006年5月 (7)
2006年4月 (8)
2006年3月 (7)
2006年2月 (1)
2006年1月 (10)
2005年12月 (13)
文章分类
(6)
c++(4)
game
rendering engine(2)
shadow
文章档案
(20)
2006年3月 (10)
2006年1月 (10)
相册
bhre
CG
link
shadow
我的其他blog
I like java
我的毕业进程
我关注的blog
mythma
用5年时间来学C++
STL Chin
全球中文论坛网
山高岳小,水落石出
最新随笔
1. BHRE Release 1.0
2. 基于shadow map的软阴影生成过程祥解
3. 代码提交风暴
4. link-2006-05-26-PPU专题
5. link-2006-05-25
6. link-2006-05-19
7. 又好几天没更新了
8. c++使用笔记
9. link-2006-05-12
10. shader学习笔记(4)-关于cg1.2和cg1.4的发展历程
11. shader学习笔记(3)-cg openGL runtime library
12. link-2006-04-21
13. shader学习笔记(2)- Using Cg Runtime Library整理
14. shader学习笔记(1)-basic cg in openGL
15. link-20060419
16. link-20040418
17. link-20060416
18. C++ 中的Singleton 类的实现讨论
19. 我的个人知识管理更新
20. C++ 代码优化
搜索
积分与排名
积分 - 98064
排名 - 253
最新随笔
1. BHRE Release 1.0
2. 基于shadow map的软阴影生成过程祥解
3. 代码提交风暴
4. link-2006-05-26-PPU专题
5. link-2006-05-25
6. link-2006-05-19
7. 又好几天没更新了
8. c++使用笔记
9. link-2006-05-12
10. shader学习笔记(4)-关于cg1.2和cg1.4的发展历程
11. shader学习笔记(3)-cg openGL runtime library
12. link-2006-04-21
13. shader学习笔记(2)- Using Cg Runtime Library整理
14. shader学习笔记(1)-basic cg in openGL
15. link-20060419
16. link-20040418
17. link-20060416
18. C++ 中的Singleton 类的实现讨论
19. 我的个人知识管理更新
20. C++ 代码优化
最新评论
1. re: 最牛的游戏引擎之一--Source剖析
我晕。。。
--路过
2. re: BHRE Release 1.0
说实话真的不怎么样,要是还博士接手,就真应该接近于CryEngine的效率和效果,否则就太对不起博士的名号了。
--王栋栋
3. re: [导入]Effective STL 中文版电子书下载
怎么没有看到下载地址啊
--abc
4. re: 我的个人知识管理更新
评论内容较长,点击标题查看
--UA31Ellen
5. re: [导入]Effective STL 中文版电子书下载
已经不错了,非常感谢!学习了。
--小蜜蜂
阅读排行榜
1. 最牛的游戏引擎之一--Source剖析(8551)
2. UnReal Engine 3中的阴影技术(5804)
3. 基于shadow map的软阴影生成(4650)
4. 游戏引擎剖析(4272)
5. 图形世界分裂的两派——理清D3D和OpenGL的脉络(上)(3837)
评论排行榜
1. BHRE Release 1.0(17)
2. 最牛的游戏引擎之一--Source剖析(8)
3. 游戏引擎剖析(3)
4. 近期工作小结-开学两个礼拜(3)
5. 我的个人知识管理更新(3)
基于shadow map的软阴影生成过程祥解
英文原文:
http://www.gamedev.net/reference/articles/article2193.asp
在我的前边文章中有
这样一篇文章
,是转载gameres的文章,一直也没有好好看看。昨天偶然间看到,仔细研究了一下,读了一下代码。
四遍的绘制过程如下:
pass 1:从光源看过去,绘制场景深度,写入最后的COLOR
,这个COLOR最终被绘制到g_pShadowSurf这个Re
nderTarget,深度模板表面保存在g_pShadowDe
pth(这个暂时不知道怎么用)
Pass 2:
不计算光照,利用VS绘制从视点看过去的场景z值深度
,输出一个POSITION和一个TEXTURE0
,其中TEXTURE0保存了从光源到该点的深度
(使用了纹理矩阵来处理从视点可见的点即可得到)
,此纹理输出给PS使用。
在PS中,为每一个纹理g_pShadowMap上的像素点
,构造它周围的3*3的表示的纹理坐标数组,并遍历该数组取得纹理
颜色值(也就是从光源看到的场景深度值),同从视点看到的点的对应
深度值,逐一进行比较。使得周围8个点中看到光源的点越多
,最后输出的Color的值就越大,最小为0.1,最大为1。
该pass的颜色输出到纹理g_pSceneSurf
,深度模板表面保存在g_pNewDetphSurf中。
Pass 3:
利用高斯函数pass2中得到的shadow mask进行模糊,这一遍做水平模糊
//
// Gaussian functions(高斯函数)
//
float GetGaussianDistribution( float x, float y, float rho ) {
float g = 1.0f / sqrt( 2.0f * 3.141592654f * rho * rho );
return g * exp( -(x * x + y * y) / (2 * rho * rho) );
}
void GetGaussianOffsets( bool bHorizontal, D3DXVECTOR2 vViewportTexelSize,
D3DXVECTOR2* vSampleOffsets, float* fSampleWeights ) {
// Get the center texel offset and weight
fSampleWeights[0] = 1.0f * GetGaussianDistribution( 0, 0, 2.0f );
vSampleOffsets[0] = D3DXVECTOR2( 0.0f, 0.0f );
// Get the offsets and weights for the remaining taps
if( bHorizontal ) {
for( int i = 1; i < 15; i += 2 ) {
vSampleOffsets[i + 0] = D3DXVECTOR2( i * vViewportTexelSize.x, 0.0f );
vSampleOffsets[i + 1] = D3DXVECTOR2( -i * vViewportTexelSize.x, 0.0f );
fSampleWeights[i + 0] = 2.0f * GetGaussianDistribution( float(i + 0), 0.0f, 3.0f );
fSampleWeights[i + 1] = 2.0f * GetGaussianDistribution( float(i + 1), 0.0f, 3.0f );
}
}
else {
for( int i = 1; i < 15; i += 2 ) {
vSampleOffsets[i + 0] = D3DXVECTOR2( 0.0f, i * vViewportTexelSize.y );
vSampleOffsets[i + 1] = D3DXVECTOR2( 0.0f, -i * vViewportTexelSize.y );
fSampleWeights[i + 0] = 2.0f * GetGaussianDistribution( 0.0f, float(i + 0), 3.0f );
fSampleWeights[i + 1] = 2.0f * GetGaussianDistribution( 0.0f, float(i + 1), 3.0f );
}
}
}
具体的数学公式我没有查,大概看不懂,还望高手指点。
Pass4:这二遍做垂直模糊。
Pass 5:绘制场景,逐像素的计算光照,并将模糊后的shadow mask信息和聚光灯贴图应用到场景中。
posted on 2006-06-02 14:02
苦行僧
阅读(3790)
评论(1)
编辑
收藏
引用
所属分类:
shadow
Feedback
#
re: 基于shadow map的软阴影生成过程祥解
2006-12-05 16:46
wu_chung_tang
利用高斯函数pass2中得到的shadow mask进行模糊
you can do this in PS not in C++ code, can be fast
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
基于shadow map的软阴影生成过程祥解
UnReal Engine 3中的阴影技术
正式开题全过程记录
使用半影楔在任意表面近似软阴影
阴影开题分析及shadow 算法分类
我的当前研究进展
我的技术blog安家落户
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 苦行僧