UnitySRP原理初探

UnitySRP原理初探

分析基于Unity官方提供的资料非常的珍贵SRP底层渲染流程及原理

原视频从profiler的角度解释了SRP内部运行原理,但看完依然有几个问题无法解答.

  1. 自定义的SRP RenderPipeline的Render是在哪里被调用的?
  2. context的函数是如何调用Unity内核的?
  3. 经过调试发现Render()函数并不是多线程调用的,为什么说SRP是多线程渲染.

为了解答上面几个问题,需要对程序做一个逆向分析.

下面是一段简单的渲染队列运行过程:

public class OpaqueAssetPipeInstance : RenderPipeline
{
   
    protected override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
   

        foreach (var camera in cameras)
        {
   
     
            // Culling
            camera.TryGetCullingParameters(out var cullingParams);

            var cullreults = context.Cull(ref cullingParams);

            // Setup camera for rendering (sets render target, view/projection matrices and other
            // per-camera built-in shader variables).
            context.SetupCameraProperties(camera);

            // clear depth buffer
            var cmd = new CommandBuffer();
            cmd.ClearRenderTarget(true, false, Color.black);
            context.ExecuteCommandBuffer(cmd);
            cmd.Release();

            // Draw opaque objects using BasicPass shader pass
            SortingSettings sst = new SortingSettings(camera){
   criteria = SortingCriteria.CommonOpaque};
            var settings = new DrawingSettings(new ShaderTagId("BasicPass"),sst);

            var filterSettings = new FilteringSettings(RenderQueueRange.opaque);
            context.DrawRenderers(cullreults, ref settings,ref filterSettings);
            
            // Draw skybox
            context.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值