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
    +关注

    关注

    27

    文章

    4417

    浏览量

    126669
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30179
  • Unity
    +关注

    关注

    0

    文章

    126

    浏览量

    21526
收藏 人收藏

    评论

    相关推荐

    爱普生的低抖动温补可编程晶振

    爱普生发布最新可编程晶体 SG-8200/8201CJ.封装为2.0 x1.6(mm)还有SG-8201CJA 符合汽车应用AEC-0100可为可编程?就是输出频率可以根据客户需求编辑的晶体振荡器
    发表于 04-08 14:27 0次下载

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

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

    可编程片上系统是什么

    可编程片上系统(Programmable System-on-Chip,PSoC)是一种特殊的嵌入式系统,它集成了数字逻辑、模拟电路和可配置模块,将传统的微处理器、微控制器和可编程逻辑器件等功能融合
    的头像 发表于 03-28 14:55 167次阅读

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

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

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

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

    现场可编程门阵列是什么

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

    分享 | 可编程晶振芯片几个知识点

    什么是可编程晶振?可编程晶振多为有源晶振,由两个芯片组成;一个是全硅MEMS谐振器,一个是具有温补功能的芯片,可以启动电路锁相环CMOS
    的头像 发表于 01-09 17:51 551次阅读
    分享 | <b class='flag-5'>可编程</b>晶振芯片几个知识点

    可编程防复制加密芯片GEN-FA介绍

    可编程防复制加密芯片GEN-FA介绍
    的头像 发表于 12-21 10:18 321次阅读
    <b class='flag-5'>可编程</b>防复制加密芯片GEN-FA<b class='flag-5'>介绍</b>

    可编程晶振详解「工作原理、结构、特点、应用」

    可编程晶振器是一种高级的晶体振荡器,其工作原理、结构和应用均有一定的特点。今天晶发电子对可编程晶振的详细介绍。 一、工作原理 可编程晶振器是通过数字控制方式来改变其输出频率,它由晶体
    发表于 10-14 17:38

    可编程电源作用原理

    可编程电源是现代电子设备测试中常见的一种设备,具有稳定性高、精度高、输出稳定等优点,为工业生产、研发及维修等领域提供了可靠的电源保障。今天我们要详细介绍一下可编程电源的工作原理,让大家了解其内部结构、电子元件及控制系统等方面的信
    的头像 发表于 10-10 16:38 575次阅读
    <b class='flag-5'>可编程</b>电源作用原理

    国产可编程系统AnyControl的具体功能和特点

    可编程控制器是工业自动化领域最常见的控制设备,比如我们常说的PLC、边缘控制器、工控机、运动控制器、机器人控制器、DCS控制站、远程I/O和车辆控制器,都属于可编程自动化控制器。
    的头像 发表于 09-08 16:31 1783次阅读
    国产<b class='flag-5'>可编程</b>系统AnyControl的<b class='flag-5'>具体</b>功能和特点

    如何将Unity着色器移植到通用渲染管道

    Unity中的通用渲染管道(URP)可在从移动到计算机的一系列平台上优化图形。URP在高端设备上生成高质量的图形,并在低端设备上优化性能。URP的其他优点在“什么是通用渲染管道? 在本指南中,我们将
    发表于 08-02 13:39

    Unity中的局部立方体图渲染技术解读

    本指南介绍了用于在Unity版本5及更高版本中实现反射的本地立方体贴图渲染技术。反射在游戏中很重要,因为它们使对象看起来很逼真。与旧的渲染技术相比,立方体贴图提供了几个优势。 例如,立
    发表于 08-02 10:14

    可编程逻辑器件测试

    可编程逻辑器件 (Programmable Loeie Device,PLD)是一种用户编程实现某种逻辑功能的逻辑器件,主要由可编程的与阵列、或阵列、门阵列等组成,可通过编程来实现一定
    发表于 06-06 15:37 441次阅读
    <b class='flag-5'>可编程</b>逻辑器件测试

    可编程逻辑器件测试方法

    可编程逻辑器件 (Programmable Loeie Device,PLD)是一种用户编程实现某种逻辑功能的逻辑器件,主要由可编程的与阵列、或阵列、门阵列等组成,可通过编程来实现一定
    的头像 发表于 06-06 15:35 754次阅读
    <b class='flag-5'>可编程</b>逻辑器件测试方法