Unity(5.3) 渲染流程简述

  • 裁剪 Camera.StandaloneCull

  • 利用裁剪结果进入渲染流程 Camera.Rander

  • 设置相机为当前相机

  • 更新深度图 UpdateDepthTextures

  • 初始化Render,设置RT,投影矩阵(SetProjectionMatrix)和视口(SetViewport)等

  • 开始渲染所有几何体 DoRender

  • 进入DoRenderLoop

  • PrepareFrame,设置世界转换矩阵,渲染模式(正交/透视),相机坐标,viewport

  • 遍历所有可视节点,进行排序过程

    •     利用世界坐标预估深度EvaluateObjectDepth

    •     一次遍历记得点的所有材质(GetMaterial)

      •         获取材质上Shader

      •         确定Shader渲染队列在Opaque还是AfterOpaque

      •         将Shader数据添加到响应的渲染队列(kPartOpaque/kPartAfterOpaque)

  • 渲染Opaque物体

    •     执行PrePassRender

      •         遍历所有节点,进行排序(根据RenderQueue设置,lightmap,材质,距离等)

      •         执行BasePass,生成MainRT(RenderBasePass)

      •         渲染深度图DepthRT,法线DepthNormalsRT,ShadowMap

      •         执行FinalPass(RenderFinalPass)

      •         如果需要合并depth+normals(CombineDepthNormalsTexture)

    •     执行ForwardShaderRender

      •         判断是否接受阴影,获取渲染设置,LightManager等

      •         对所有的Node执行渲染

        • 获取ShaderLab

        • 找到所有影响无物体的光源Light

        • 生成主光源阴影(MainLightShadow)

        • 如果需要,生成其他光源阴影AdditionalShadow

        • 获取Shander中的每个pass,进行排序

        • 执行每个pass(具体过程未完)

        • 有几种情况会break batch

如果有ForwadAddPass

是ShadowCaster

    •     如果有PrePass更新深度图UpdateCameraDepthTextures

  • 渲染天空盒 RenderSkybox

  • 执行RenderImageFilters

  • 渲染AfterOpaque物体

    •     执行ForwardShaderRender

    •     更新深度图UpdateCameraDepthTextures

你可能感兴趣的:(Unity)