Nebula3的渲染流程

在说流程之前, 有必要先看一下N3的Frame子系统:

每帧的渲染过程都写进了配置文件, 默认使用的是"frame/win32/dx9default.xml", 阴影还有另外一套.

<?xml version="1.0" encoding="UTF-8"?>
<Nebula3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../schemas/frame.xsd">

<!-- 
    Test frame shader for the Win32 platform.
    Renders a dedicated depth pass first, then renders the solid and alpha geometry to a (possibly
    multisampled) color buffer, and finally resolves the result through a post-effect into the backbuffer.
--> 
<FrameShader name="DX9Default">
    
    <!-- declare render targets -->
    <DeclareRenderTarget name="ColorBuffer" format="A8R8G8B8" depth="true" relWidth="1.0" relHeight="1.0" msaa="true"/>
    
    <!-- render the world to the BackBuffer render target -->
    <Pass name="Color" renderTarget="ColorBuffer" shader="p_color" clearColor="0.2,0.2,0.2,1.0" clearDepth="1.0" clearStencil="0">
        <Batch shader="b_depth" type="Depth" shdFeatures="Depth" nodeFilter="Solid" sorting="FrontToBack" lighting="None"/>
        <Batch shader="b_solid" type="Solid" shdFeatures="Solid" nodeFilter="Solid" sorting="None" lighting="SinglePass"/>
        <Batch shader="b_alpha" type="Alpha" shdFeatures="Alpha" nodeFilter="Alpha" sorting="None" lighting="None"/>
    </Pass>

    <!-- apply a post effect with color correction, renders directly to the presentation buffer -->
    <PostEffect name="Compose" shader="pe_compose">
        <ApplyShaderVariable sem="ColorBuffer" value="ColorBuffer"/>
        
        <!-- render debug stuff on top of complete frame -->
        <Batch shader="b_shape" type="Shapes"/>
        <Batch shader="b_empty" type="Text"/>
    </PostEffect>
    
</FrameShader>
</Nebula3>

在FrameShader的配置文件里, 声明了一些RenderTarget, 还有FramePass和FramePostEffect.

FramePass包装了所有要渲染到RenderTarget的所有3D渲染相关的东西, 由FrameBatch组成.

FrameBatch代表一个批次的ModelNodeInstance, 比如深度批次, 非透明批次和透明批次等等(相当于OGRE中的RenderGroup), 而ModelNodeInstance就做为最小的渲染单位了.

FramePostEffect就是后处理, 各种效果如HDR, Bloom, Depth of Field, Motion Blur等等都是在这里完成. Shadow Mapping有降采样也可以放到这里, 因为那也是图像空间的操作.

具体的流程就由流程图来说明吧:

InternalGraphicsServer代表就是图形世界, 在图形库外部对应前面提过的Stage/View.

一个Graphics View的作用就是把一个Stage通过CameraEntity渲染到RenderTarget上. 一个Stage可以有多个View, 而一个View也可以依赖另一个.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Unity中使用GPU Instancing优化SkinnedMesh渲染

    有这么个需求: 一堆不会动的SkinnedMesh, 通过物理模拟出死亡姿势后, 需要优化性能, 不然才10FPS

    逍遥剑客
  • 汉字转成拼音首字母

    逍遥剑客
  • 溶解效果

    逍遥剑客
  • Hadoop生态系统在壮大:十大炫酷大数据项目

    我是攻城师
  • Spring Batch 介绍 原

    在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用。这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干...

    HoneyMoose
  • ARKit示例 - 第3部分:添加几何和物理乐趣

    在上一篇文章中,我们使用ARKit来检测现实世界中的水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们的AR体验添加虚拟内容,并开始与检测到的平面进...

    iOSDevLog
  • python中3个帮助函数help,di

    py3study
  • Baozi Training Leetcode Solution 224: Basic Calculator

    Blogger: https://blog.baozitraining.org/2019/08/leetcode-solution-224-basic-calc...

    包子面试培训
  • Linux关闭ssh1服务

    安全的同事通过nusses扫描发现一台服务器有ssh1漏洞:tcp/22:10882 - SSH Protocol Version 1 Session Key ...

    loong576
  • 巧用Arcgis Server的REST接口实现OL2中WMS添加过滤

    在实际的应用中,很多时候我们需要对展示的图层进行属性或者空间的过滤,在Geoserver发布的WMS中,可以通过CQL_FILTER来设置过滤条件,但是Arcg...

    lzugis

扫码关注云+社区

领取腾讯云代金券