0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Unity可编程渲染管线SRP具体流程介绍

454398 来源:CSDN 作者:莫之 2020-10-05 01:55 次阅读

一、RenderPipeline类

通过SRP可以实现对渲染管线的完全控制,它提供了需要的工具来创建符合项目需求的渲染管线和效果;通过在C#脚本中定义一系列的命令来控制每一帧的渲染过程,和传统内置管线不同,它开放了更多的接口,给了开发者更大的自由度,但是又不至于像OpenGL手写管线那么复杂,可以很好满足开发者既需要自定义管线又要简单快捷的开发需求,降低了渲染管线的开发门槛;

该类用于srp中的渲染方式,它通过定义一系列的命令和设置来告诉unity怎么渲染一帧;

二、相关类

所有可编程渲染管线相关的类定义在UnityEngine.Rendering中;

1. RenderPipelineAsset

所有的管线资源都要继承自该类,并重写其创建管线的CreatePipeline()方法,返回一个RenderPipeline实例,并且需要将该值赋予到GraphicSettings,然后才可以使用这个自定义的管线来进行渲染;

2. GraphicsSettings

它和编辑器中的Project Settings中的Graphics的设置是紧密相关的,用于以脚本的方式来进行自动设置来代替手动设置;所以,它提供的属性和方法都是和设置面板相对应的;例如,创建一条管线后,就可以通过GraphicsSettings.renderPipelineAsset来将其设置为当前的渲染管线;

3. RenderPipeline

核心类,可编程的渲染管线的具体流程在此定义,所有的可编程渲染管线继承自该类,在创建新的管线资源时,需要使用到该类的子类进行实例化;

4. ScriptableRenderContext

渲染上下文,在自定义渲染管线中定义一些状态和渲染命令,然后调用Submit函数提交到GPU;这个上下文的概念类似于OpenGL中上下文的概念,定义渲染管线要使用的许多状态以及绘制命令,相当于整个渲染的manager;

SetupCameraProperties(camera):相机的配置是第一步,设置相机的属性,获取一个相机实例后,就可以获取它的观察矩阵(transform)和裁剪矩阵(clip plane等)等属性值;

5. CommandBuffer

它的出现早于SRP,在没有SRP时,它用于对unity内置的渲染管线进行扩展;该缓冲区用于存储一系列渲染命令,然后提交到渲染上下文中;

使用步骤:创建缓冲区-设置-提交-释放缓冲区

CommandBuffer buf=new CommandBuffer(); //设置渲染命令.... context.ExecuteCommandBuffer(buf) //非立即执行 buf.Release()

6. SortSettings

设置场景中物体的排序方式,使用默认方式和使用自定义方式

默认方式,设置criteria,这是一个SortingCriteria枚举类型,包含了透明物体(从前到后)、半透明(从后到前);

自定义方式,设置cameraPosition、customAxi、worldToCameraMatrix三个变量联合使用;

三、第一步-完成一个最基础的渲染管线

创建命令缓冲区,如下,设置清空渲染目标的命令;

剔除操作,通过相机获取剔除参数,剔除场景中的不可见物体;

绘制命令,绘制前需要对场景中的物体进行排序,为不同的物体设置不同的排序方式,比如半透明物体要从后到前渲染;在DrawingSettings中,构造函数第一个参数为ShaderTagId类型,也就是要使用的pass的tag的Id值,以及排序的设置;FilteringSettings则设置渲染队列的范围,用于设置哪些物体将会被渲染,如下例子,将透明和半透明分开进行渲染;

注意:天空盒的渲染在不透明物体之后,在半透明物体之前;

var cmd = new CommandBuffer(); CameraClearFlags clearFlags = camera.clearFlags; cmd.ClearRenderTarget((CameraClearFlags.Color&clearFlags)!=0,(CameraClearFlags.Depth&clearFlags)!=0,camera.backgroundColor); context.ExecuteCommandBuffer(cmd); cmd.Release(); context.SetupCameraProperties(camera); //剔除 ScriptableCullingParameters cullingPrama; camera.TryGetCullingParameters(out cullingPrama); CullingResults cullRet = context.Cull(ref cullingPrama); //绘制 SortingSettings sortSettings = new SortingSettings(camera); sortSettings.criteria = SortingCriteria.CommonOpaque; DrawingSettings drawSettings = new DrawingSettings(new ShaderTagId("BasicPass"),sortSettings); FilteringSettings filterSettings = new FilteringSettings(RenderQueueRange.opaque); context.DrawRenderers(cullRet,ref drawSettings,ref filterSettings); context.DrawSkybox(camera); sortSettings.criteria = SortingCriteria.CommonTransparent; drawSettings.sortingSettings = sortSettings; filterSettings.renderQueueRange = RenderQueueRange.transparent; context.DrawRenderers(cullRet,ref drawSettings,ref filterSettings); context.Submit();

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4740

    浏览量

    128950
  • 编辑器
    +关注

    关注

    1

    文章

    806

    浏览量

    31173
  • Unity
    +关注

    关注

    1

    文章

    127

    浏览量

    21830
收藏 人收藏

    评论

    相关推荐

    可编程晶振的优点和缺点

    可编程晶振,近年来渐入人们眼中。什么是可编程晶振,与普通晶振有什么区别?可编程晶振的优点和缺点有哪些?1,什么是可编程晶振可编程晶振是一种可
    的头像 发表于 09-30 10:44 397次阅读
    <b class='flag-5'>可编程</b>晶振的优点和缺点

    用TMAG5328电阻器和电压可编程霍尔效应开关实现可编程性和诊断

    电子发烧友网站提供《用TMAG5328电阻器和电压可编程霍尔效应开关实现可编程性和诊断.pdf》资料免费下载
    发表于 09-11 10:01 0次下载
    用TMAG5328电阻器和电压<b class='flag-5'>可编程</b>霍尔效应开关实现<b class='flag-5'>可编程</b>性和诊断

    可编程晶振都有什么频率的呢?分享3个挑选可编程晶振的技巧

    频率范围全面覆盖,满足多样化需求: • CMOS可编程晶振:1~200MHz宽广选择,为您的基础应用提供稳定可靠的支持。 • 可编程差分晶振:高达2100MHz的卓越性能,满足高速数据传输与信号处理的高标准要求。 • 可编程压控
    的头像 发表于 07-18 18:30 1155次阅读
    <b class='flag-5'>可编程</b>晶振都有什么频率的呢?分享3个挑选<b class='flag-5'>可编程</b>晶振的技巧

    可编程电源的作用是什么

    可编程电源的作用是什么 可编程电源是一种电子设备,它可以根据用户的需求调整输出电压和电流。这种电源广泛应用于各种电子设备和系统的测试、调试和研发过程中。 ### 可编程电源的作用 #### 1.
    的头像 发表于 06-10 15:33 669次阅读

    可编程电源使用方法

    可编程电源使用方法 可编程电源使用方法 摘要:本文详细介绍可编程电源的使用方法,包括其基本概念、主要功能、选择原则、操作步骤、注意事项以及实际应用案例,旨在帮助读者全面了解
    的头像 发表于 06-10 15:29 1013次阅读

    可编程电源如何编程

    可编程电源如何编程  可编程电源是一种可以调节输出电压和电流的电源设备,广泛应用于电子设备测试、研发和生产等领域。通过编程,用户可以根据需要设置电源的输出参数,实现自动化测试和控制。本
    的头像 发表于 06-10 15:24 1342次阅读

    什么是现场可编程逻辑阵列?它有哪些特点和应用?

    可编程逻辑元件和可编程互连,实现逻辑威廉希尔官方网站 的设计和配置。FPLA在电子系统设计、数字信号处理、网络通信等多个领域都有广泛应用。本文将对现场可编程逻辑阵列进行详细介绍,包括其定义、原理、特
    的头像 发表于 05-23 16:25 957次阅读

    可编程片上系统的基本特征和主要应用

    可编程片上系统是一种特殊的嵌入式系统:首先它是片上系统,即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。
    的头像 发表于 03-28 15:13 635次阅读

    可编程片上系统是什么意思

    可编程片上系统(Programmable System-on-Chip,PSoC)是一种特殊的嵌入式系统。它首先是一个片上系统,这意味着整个系统的主要逻辑功能由单个芯片完成。其次,它具有可编程的特性,设计方式灵活,可裁减、可扩充、可升级,并具备软硬件在系统
    的头像 发表于 03-28 15:09 574次阅读

    现场可编程门阵列的原理和应用

    FPGA是一种可编程的硬件逻辑器件,其核心组成部分是可编程逻辑单元(PLU)和可编程互连资源(Interconnect Resources)。PLU是一组可编程的逻辑门,如与门、或门、
    的头像 发表于 03-27 14:49 699次阅读

    现场可编程门阵列设计流程

    现场可编程门阵列(FPGA)设计流程是一个综合性的过程,它涵盖了从需求分析到最终实现的各个环节。下面将详细介绍FPGA设计流程的主要步骤。
    的头像 发表于 03-16 16:38 1961次阅读

    现场可编程门阵列是什么

    现场可编程门阵列(Field Programmable Gate Array,简称FPGA)是一种超大规模可编程逻辑器件,由可编程逻辑资源、可编程互连资源和
    的头像 发表于 03-16 16:38 2473次阅读

    可编程逻辑器件的特征及优势科普

    可编程逻辑器件是一种集成威廉希尔官方网站 ,具有可编程功能的特性。它们可以根据用户的需求进行编程,从而实现不同的逻辑功能。
    的头像 发表于 02-26 18:24 1112次阅读

    可编程控制器的组成 可编程控制器有哪些特点?

    可编程控制器(Programmable Logic Controller,PLC)是一种使用数字计算机技术和专用外设实现工业过程自动化控制的设备。它在工业生产中起到了非常重要的作用。本文将详细介绍
    的头像 发表于 01-18 11:18 1532次阅读

    基于FPGA的可编程AES加解密IP

    可编程AES加解密IP内建密钥扩展功能,使用初始密钥产生扩展密钥,用于加解密过程。可编程AES加解密IP处理128-bit分组数据,并且支持可编程的密钥长度:128-bit,192-bit和256-bit。
    发表于 01-09 10:49 493次阅读
    基于FPGA的<b class='flag-5'>可编程</b>AES加解密IP