zoukankan      html  css  js  c++  java
  • XDGEUnity XDGEPipeLine

    XDGEUnity XDSRP PipeLine (一)

    image-20200929173821306

    image-20200929173831780

    (后续标题为XDGE_XXXX, XDGEUnity_XXXX, XDGEUE_XXXX)

    一、Unity PipeLine 说明

    SRP,LWRP,HDRP、CommandBuffer

    SRP为一个上层代码驱动的渲染管线,Unity将许多绘制命令和绘制状态进行了封装,并通过RenderContext和CommandBuffer暴露给C#等上层代码

    PipelineAssets

    用于产生Pipeline,同时存放当前的配置(这个按自己的要求来),XDRender是用来配置可以用到的管线。

    image-20200929194032098

    Pipeline

    这里的PileLine我们可以只当作转发,从而实现多个管线并存(多个Camera)

    image-20200929194119914

    LWRP,HDRP

    LWRP为轻量级,HDRP比较高(不仅仅是Feature多,整个代码结构也不一样,比如存在类似RenderGraph等等)

    LWRP和HDRP都依赖了CoreRP的公共库。

    SRP: 这里对应了LWRPScriptRender, 其中又衍生出Forward

    CommandBuffer的执行

    1、CommandBuffer会收集我们通过CommandBuffer执行的命令,并在RenderContext执行该命令缓存区时,执行收集的命令。

    2、当然我们也可以自己做一个事件或者CMDQueue机制,来收集这些CommandBuffer,按需执行。

    CommandBuffer和RenderTexture

    这里RenderTexture在Unreal源码中也有类似的处理,RTHandle(这里XDRender又封装了一下,可以理解为句柄或者唯一ID标识)

    1、在我们执行SetRenderTarget, Blit等等,经常是需要RT的。这里Unity会将RenderTexture退化为RenderTargetIdentifier

    image-20200929193215442

    image-20200929193239621

    2、在利用CommandBuffer分配RT时注意这个是临时的,当Exe后就失效了。

    比如XDRender中CSMShadow使用

    RTHandle vRT1 = ShadowRTSystem.AllocationRT("_gShadowMapTextureColor" + i, shadowResolution, shadowResolution,24);
    
    //////XDRenderHandleSystem:
    int Skeyid = Shader.PropertyToID(pShaderKeyName);
                _cmd.GetTemporaryRT(Skeyid,pWidth,pHeight,pDepth);
                return new RTHandle(Skeyid,Skeyid);
    

    OK ......以上就是一个大概,剩下就是BeginHandle.

    题外

    1、为何要这样?

    a、能够将一套思路搞三个(目前就做了两个,博客这里就只放理论和Unity/UE实现)

    b、这个是最关键的,将很经典或者能普遍的Feature集成于XDRender.

    c、自己的比较自由和克制处于平衡

    2、如何这样?

    a、从Pipeline(这个是Unity原始带的,所以XDRender这部分起点相当于CoreRP)开始减少依赖Unity扩展出 其他Render-Package

    大致结构

    Shader结构

    image-20200929195337178

    代码结构

    image-20200929195452388

    人生当苦,笑着看看
  • 相关阅读:
    蜕变过程中的思考
    Django template for 循环用法
    Django 发送html邮件
    Django F对象的使用
    在Django中使用Q()对象
    ubuntu中管理用户和用户组
    Django settings.py 的media路径设置
    Git版本控制 备忘录
    Git .gitignore文件的使用
    将git关联到pycharm
  • 原文地址:https://www.cnblogs.com/BaiPao-XD/p/13751661.html
Copyright © 2011-2022 走看看