decay

Forum Replies Created

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • in reply to: 作业二提高部分思考 #7422 Score: 0
    decay
    Participant

    图漏了

    Attachments:
    You must be logged in to view attached files.
    in reply to: 作业二提高部分思考 #7421 Score: -1
    decay
    Participant

    这篇回复是回复给“食铁兽”同学的,不知为何回复到了外层

    This post has received 1 vote down.
    in reply to: 作业二提高部分思考 #7420 Score: 0
    decay
    Participant

    个人理解:无论是msaa还是ssaa都需要把depth buffer和frame buffer都开成原来的n倍,而msaa和ssaa的区别在于ssaa是直接进行完整的n遍渲染,最后再把这些渲染的结果平均起来;msaa则是进行n次光栅化,但着色只进行一次,并且认为着色点仍然是像素中心,而不是四个子像素的位置,最后根据光栅化时的结果将相应的frame buffer更新到新的着色值。
    写一下伪代码更清晰一些:

    
    rasterization_ssaa:
        for(x : xmin ~ xmax):
            for(y : ymin ~ ymax):
                 for(subsample : n):
                     if(depth_test(subsample) == success):
                         update(depth_buffer[subsample])
                         sample_buffer[subsample] = shading(subsample, other_info)
                 frame_buffer[sample] = avg(sample_buffer)
    
    
    rasterization_msaa:
        for(x : xmin ~ xmax):
            for(y : ymin ~ ymax):
                 // 着色发生在内部采样循环外面,因此只着色一次,提高了效率
                 pixel_color = shading(sample, other_info)
                 for(subsample : n):
                     if(depth_test(subsample) == success):
                         update(depth_buffer[subsample])
                         sample_buffer[subsample] = pixel_color
                 frame_buffer[sample] = avg(sample_buffer)
    

    可以在文刀大大的回答以及learnopengl中找到类似的结论:
    https://www.zhihu.com/question/20236638/answer/44821615
    https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing
    不过对于你可能还有个问题,就是作业2中的着色其实就是对像素进行颜色插值,所以实际上对于作业2来说,msaa和ssaa其实是差不太多的。至于你和楼主遇到的黑边,是因为你们没有开n倍的frame buffer,只要让frame buffer把每个子采样点的颜色记住就不会出问题。
    我用上述思路在作业3中实现了msaa,最后附上blinn-phong着色的效果图对比图,右边是4xmsaa的,可以看到虽然还是有一些狗牙,但平滑了不少.(吐槽一下,作业3的insideTriangle函数直接把参数定义成了int,坑了我好久)

    in reply to: 作业五:关于光线追踪的理解 #7369 Score: 0
    decay
    Participant

    作业5的光照模型认为反射材质不会有漫反射,纯粹靠反射来的光线着色(这些光线最终来自光源或者别的漫反射物体),在现实里也是有这种情况的,比如你在单光源的房间里把一块镜子放在背光的地方,然后如果镜子前的东西能照到光的话,你依然可以在镜子上看到很清楚的像

    in reply to: 作业七的性能瓶颈是随机数生成 #7350 Score: 1
    decay
    Participant

    太感谢了,最早在实现多线程之前想要profile一下整个程序,优化的同时正好复习一下最近学的csapp第五章的知识,但无奈mac上用gprof和谷歌的profiler会有很多问题,与之搏斗了一天以后作罢。。按照你的发现修改了程序以后64spp渲染只需要40+秒,以前需要20分钟,尤其是我最近在微表面提高题那里疯狂踩坑,每次微调一下公式想看效果就得等上半小时左右,现在感觉写起bug来也有劲了!
    另外由于我不是特别了解多线程的基本知识,只是用openmp调包实现了个简单的多线程,想问一下我把get_random_float中的random_device、梅森旋转引擎和均匀采样分布生成器都只是简单地设为static,这样在多线程上是不是会产生问题,如果是的话,这样的问题会对随机数的质量产生影响吗,因为我看最终的效果并没有什么偏差。
    总之,十分感谢题主!!

    This post has received 1 vote up.
    in reply to: 作业2:关于 SSAA #7114 Score: 0
    decay
    Participant

    我和你碰到了类似的问题,我想了很久也想不出怎么只靠深度buffer的sample list就得出一个像素点的各采样点颜色信息(因为这些采样点很属于多个深度不同的三角形),我最后的解法是把frame_buffer也给扩充,每个像素维护一个sample list

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