Home › Forums › Games202-高质量实时渲染 › 给WpenumbraRatio乘上NEAR_PLANE / zReceiver效果更好
- This topic has 8 replies, 3 voices, and was last updated 4 years, 7 months ago by
Tecomo.
-
AuthorPosts
-
-
代码里NEAR_PLANE/coord.z应该是NEAR_PLANE/(coord.z*FAR_PLANE + (1.0-coord.z)*NEAR_PLANE)吧?
按作业里的场景布置,对于阴影区域来说,NEAR_PLANE / zReceiver应该蛮小的吧,再乘以这个系数,阴影会变得很硬?感觉你是不是因为NEAR_PLANE设置的是0.1左右,所以用0.1/coord.z才能得到一个比较合适的缩小?纯属胡乱猜测,如果你coord.z已经做了空间转换就当我啥都没说orz-
coord.z和nearplane都是归一化之后。coord.z已经转换到了[0,1]。我知道乘了这个阴影会变硬一些,但依旧有软的效果。因为不知道乘上这个有什么物理意义,就瞎猜了一下,哈哈。就贴上来大家讨论一下
-
你怎么归一化的nearplane?在0到1里,nearplane不是0吗?
-
不是0啊,我的远近平面是0.1和500
-
是啊,所以zReceiver = 500*coord.z+0.1*(1-coord.z)啊,你拿0.1/coord.z就没有意义啊(你下面的回复不是理解的挺清楚的吗,得在相机空间算距离比)。
ps,如果你在计算距离比的时候没有转化到相机空间,那么你计算blocker depth里fliter size要乘的(zReceiver – NEAR) / zReceiver可能也有问题,你的结果看上去没问题只是因为你的NEAR取的是0.1,而场景范围里按(0.1,500)得到的coord.z都是大于0.1的
-
-
-
还有,突然想到,作业里shadow map推荐用的是正交投影,所以不会有“近大远小”;如果是用仿射投影的话,感觉这种想法是有道理的
-
我搞明白了,这个是给透视投影用的。WpenumbraRatio是在相机空间算的,需要计算它投影到shadowmap上的大小。如果渲染shadowmap用的是透视投影,那根据相似三角形乘上NEAR_PLANE / zReceiver就是WpenumbraRatio在shadowmap上的大小。
-
Tecomo
ParticipantpenumbraRatio = (dReceiver – dBlocker) / dBlocker;
penumbraRatio = penumbraRatio * lightSize * NEARPLANE / dReceiver;
按理说直接penumbraRatio * lightSize就是filtersize了,后面这两是在干嘛?“如果渲染shadowmap用的是透视投影,那根据相似三角形乘上NEAR_PLANE / zReceiver就是WpenumbraRatio在shadowmap上的大小”
这句还是没太明白,三角形是哪几个边构建的?方便的话可以麻烦画个图吗?
-
-
-
-
-
AuthorPosts
- You must be logged in to reply to this topic.