游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2242|回复: 3

shadow map of sun light

[复制链接]

46

主题

281

帖子

313

积分

中级会员

Rank: 3Rank: 3

积分
313
QQ
发表于 2006-6-3 00:28:00 | 显示全部楼层 |阅读模式
shadow map经常用来实现小范围的光源,因为它的精确度有限。对于太阳,如果把它放在较远的一个位置,那么得到的深度图势必非常粗糙,即使深度图的分辨率很大也不行;如果放得很近,照射的范围将非常小。我们应该已经注意到了太阳是一个方向光源,感觉shadowvolume会很不错,但是它有个弱点就是要求模型必须是封闭的,对于室外场景来说,有很多植物它们的叶子都是透明贴图,shadowvolume将无能为力。所以,我们把太阳放到每个caster(产生影子的物体)的本地坐标系,从原点沿着相同的方向延伸,大的模型就走远些,小的就近些,然后指向原点即可。这样每一个caster都得到一个深度图,当然我们没有依次保存它们,每生成一个就把它累加到cameraview的shadowmap中。累加的时候需要receiver(身上有影子的物体)在光源坐标系下的深度值,这里有一个小技巧,我们没必要为receiver增加n个pass,如果receiver很多(几乎是场景中的所有物体,包括selfshadow)的话一定会慢死``;也没必要判断各个caster都cast了哪些receiver```我们只需要一张cameraview下的depthmap就可以了。这张depthmap可以最开始跟zpass一起生成,如果用DST(depthstenciltexture)算法会稍微有些不同。在cameraview的累加PS中,从depthmap取出cameraview的深度,连同贴图坐标一起,得到了屏幕坐标的XYZ,把这个XYZ变到光源坐标就可以了,receiver一个都不用画,因为它们已经在depthmap中了...我们只需要画一个投到屏幕之后可以包含影子的简单模型即可```所以画的是shadow的边界盒

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2006-6-7 10:12:00 | 显示全部楼层

Re:shadow map of sun light

点光源也是这么做的,只不过是最后除不除以w的问题

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2006-6-8 02:37:00 | 显示全部楼层

Re:shadow map of sun light

既然是方向光,位置因素对SM精度没有任何影响,这个只取决于caster与视点之间的距离

46

主题

281

帖子

313

积分

中级会员

Rank: 3Rank: 3

积分
313
QQ
 楼主| 发表于 2006-6-8 10:07:00 | 显示全部楼层

Re:shadow map of sun light

嗯,一开始说的精度问题,是因为把太阳当成点光源造成的,我以前习惯把整个lightviewpass画到一张图上,后来才学会把shadowmap用于方向光```
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 16:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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