美文网首页
实时渲染、三种渲染方法介绍

实时渲染、三种渲染方法介绍

作者: coldestheaven | 来源:发表于2019-12-17 19:41 被阅读0次

    实时渲染,一般有三种渲染方法,多光源一次渲染,多光源多次渲染和延迟着色。

    多光源一次渲染:对于每个物体,计算所有光源对其的影响来对该物体进行渲染

    for each object do

        for each light do

            framebuffer = light_model(object,light);

    这是一个简单的方法,但是存在一些问题和缺陷。

    第一个问题:由于光照是针对每一个物体进行的,因此*之前渲染着色的对象能够被之后渲染着色的对象所取代*,换句话讲,对隐藏对象进行着色是浪费的。

    第二个问题:如何在可编程渲染管线中,在一次渲染过程中管理多个光源。此外,该方法很难与阴影算法进行集成。

    多光源多次渲染:对于每一个光照计算过程,执行所有光照计算。因此,对于每一个光源,所有被该光源影响的物体会被渲染。

    for each light do

        for each object affected by light do

            framebuffer += light_model(object,light);

    与第一个方法类似

    第一个问题:隐藏曲面会造成渲染的浪费。

    第二个问题:光照首先对于每一个光源计算,然后对每一个物体计算。有可能有一些计算过程(例如,顶点转换和三角面片设置[Moller02])由于同一个物体在另外一个光照计算中被再次处理而重复计算。

    第三个问题:由于光源排序和物体排序时互斥的,因此很难执行此操作。

    延迟着色:原理,将每个像素点的属性存储在显存里面用于后面的渲染,后面的渲染则是一个像素一个像素的渲染,每个像素都会独立的渲染。

    在上面两种渲染方法,延迟着色有很大的优势,特别是在效率上面,时间复杂度要小很多

    for each object do

        G-buffer = lighting properties of object;

    for each light do

        framebuffer += light_model(G-buffer,light);

    延迟着色还有一些其它优势。例如,一旦几何处理和光源处理进行解耦分离,很容易进行批操作。

    版权声明:本文为CSDN博主「shilod」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/u013299585/article/details/57075189

    相关文章

      网友评论

          本文标题:实时渲染、三种渲染方法介绍

          本文链接:https://www.haomeiwen.com/subject/wisenctx.html