JH

Forum Replies Created

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • in reply to: [作业1]关于PCSS边界明显的Tip #8214 Score: 0
    JH
    Participant
    3 pts

    我觉得你说有道理,而且directional light也应该是用正交投影,所以不需要去做linearization。我这里的操作应该只能针对使用透视投影的光源。感谢指正!

    in reply to: [作业1]关于PCSS边界明显的Tip #8209 Score: 0
    JH
    Participant
    3 pts

    不好意思我可能有点没说清楚…我的意思是修改PCSS中step2 penumbra size的计算,而所有关于shadow map中深度的比较都是用的[0,1]范围的深度这个没错。
    这个是我原来的代码

    float filterSize = (coords.z / avgBlockerDepth - 1.0) * LIGHT_WIDTH_UV;
    float ret = PCF(shadowMap, coords, filterSize);

    其中coord.z和avgBlockerDepth都是[0,1]的值。
    这个是我更新后的代码

    float vsReceiverDepth = linearizeDepth(coords.z);
     float vsBlockerDepth = linearizeDepth(avgBlockerDepth);
     float filterSize = (vsReceiverDepth / vsBlockerDepth - 1.0) * LIGHT_WIDTH_UV;
     float ret = PCF(shadowMap, coords, filterSize);

    简单来说就是把这里normalized的depth转换到linear depth再求解filterSize。我非常同意你说的有可能改一点就会让结果差很多,比如你可以加一个scalar来进行调参,不过这样并不能保证是physically correct的。我的理解是求解filterSize的本质是相似三角形,不过当所有距离都进行来非线性变换(从linear depth变成[0,1])之后相似三角形的比例关系并不能保证一定满足,所以这里利用linear depth求解是比较合理的。实践上来看我自己的测试也得到了更好的效果,同时我也参考了一些别人的实现,包括Nvidia的实现(http://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf),感觉大多都是使用linear depth来计算的。
    这些就是我大致的理解和推测,如果有问题的话欢迎继续讨论:)

    in reply to: [作业1]关于PCSS边界明显的Tip #8088 Score: 0
    JH
    Participant
    3 pts

    linear depth计算:https://learnopengl.com/Advanced-OpenGL/Depth-testing

    • This reply was modified 3 years ago by JH.
    in reply to: PCSS效果很奇怪 #8048 Score: 0
    JH
    Participant
    3 pts

    我猜可能是光源宽度过大(建议尝试调至0.1甚至0.01的数量级)以及findBlocker函数中filterSize的计算方式不对,这里不应该去sample shadow map,而是应该用near plane的值。可以先用固定的blocker search region(e.g. 16×16 texel)看一下结果对不对排除一些其他错误的可能。希望有帮助:)

    in reply to: [作业1]关于CPU和GPU同步问题 #8029 Score: 0
    JH
    Participant
    3 pts

    我觉得渲染顺序就是在WebGLRenderer.js的render()函数里确定的,先渲染shadow pass然后渲染camera pass。GPU上commands的执行顺序是由submit的顺序决定的,所以如果CPU先submit shadow pass的draw call再submit camera pass的draw call,那么GPU也会先shadow再camera,而不是同时进行。OpenGL也有一些强制同步的命令比如glFinish()和glFlush(),不过在这种情况下并不需要。不知道我有没有理解对你的问题…
    stackoverflow上类似问题的解答:https://stackoverflow.com/questions/20696150/execution-sequence-for-opengl-commands
    还有一些opengl wiki上关于synchronization的参考资料:https://www.khronos.org/opengl/wiki/Synchronization

    in reply to: 关于shadow map精度导致的问题 #7967 Score: 0
    JH
    Participant
    3 pts

    我认为理论上说是会的,不过自遮挡的问题在离散化深度值的时候就已经产生了,双线性插值肯定比point sampler要好,但是改善的很有限。考虑一张分辨率较低的shadow map,可能某个深度连续变化的区域在shadow map上都是同一个值,而此时sample方式并不会改善自遮挡问题。
    其实PCF的思想就是用更多邻近的pixel去判断单一pixel的visibility,也可以看作一种区域插值,只不过不是对于shadow map插值的,而是对于比较结果插值的。

    in reply to: 关于shadow map精度导致的问题 #7958 Score: 0
    JH
    Participant
    3 pts

    我的理解也是没有遮挡,因为红片本来就是在光源视角下将深度离散化后的假想结果,如果把深度想象成不连续的,光源视角下的每个pixel都可以看作面朝光源的面片的深度值(面朝光源是因为同一面片深度一致,相当于一个pixel只有一个深度值)。换句话说,如果想象所有的面片像光源方向平行,应该是可以完美地填满整个shadow map的。
    我还有一个问题,是不是可以认为更高分辨率的shadow map有利于改善self occlusion的问题?

    • This reply was modified 3 years, 1 month ago by JH.
    in reply to: 关于作业补交问题及MSAA与SSAA区别问题 #3799 Score: 0
    JH
    Participant
    3 pts

    感谢🙏,我去把大佬的博客再看一遍😂

    in reply to: 关于作业补交问题及MSAA与SSAA区别问题 #3797 Score: 0
    JH
    Participant
    3 pts

    感谢解答🙏

    in reply to: 关于作业补交问题及MSAA与SSAA区别问题 #3737 Score: 0
    JH
    Participant
    3 pts

    好的谢谢!

Viewing 10 posts - 1 through 10 (of 10 total)