您的位置:首页 > 移动开发 > Unity3D

Unity(5.3) 渲染流程简述

2018-04-05 22:30 375 查看
裁剪 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 渲染流程