unity中使用commandbuffer将自定义画面渲染到主相机上

CommandBuffer 保存渲染命令列表(例如设置渲染目标或绘制给定网格)。您可以指示 Unity 在内置渲染管线中的各个点安排和执行这些命令,因此,您可以自定义和扩展 Unity 的渲染功能。

这句话意味着你可以通过command buffer让相机渲染自己想要的画面,而不是像以前一样搞个画布搞张RawImage贴在相机前全屏,然后为了能看到模型再搞个相机去单独渲染模型画面贴在前面。在现在的unity2022中你以前大可不必进行这一繁琐的操作了,只需要拿到你需要渲染的纹理,然后通过command buffer让相机去进行渲染,而不必再担心模型被遮住的问题。

直接上例子吧:

public class CommandBufferSample : MonoBehaviour
{
    public Camera _camera;//主相机
    public Material _bgMat;
    private CameraClearFlags m_cameraClearFlags;
    private CommandBuffer _commandBuffer;
    public RenderTexture _renderTexture;

    // Start is called before the first frame update
    void Start()
    {
        _commandBuffer=new CommandBuffer();
        _commandBuffer.name="AR Background";
        _commandBuffer.SetRenderTarget(_renderTexture);//
        _commandBuffer.ClearRenderTarget(true,true,Color.clear);
        _commandBuffer.Blit(null,_renderTexture,_bgMat);
        _commandBuffer.Blit(_renderTexture,BuiltinRenderTextureType.CameraTarget);

        _camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque,_commandBuffer);
        _camera.AddCommandBuffer(CameraEvent.BeforeGBuffer,_commandBuffer);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

核心api:Camera.AddCommandBuffer

AddCommandBuffer (Rendering.CameraEvent evt, Rendering.CommandBuffer buffer);

参数一:CameraEvent

在摄像机的渲染中定义一个用来附加 CommandBuffer 对象的位置。

通过在摄像机渲染中的不同点添加所谓的“命令缓冲区”可以扩展 Unity 的渲染循环。例如,您可以添加一些自定义几何形状,以便在绘制天空盒后立即绘制。

变量:

BeforeDepthTexture在摄像机的深度纹理生成之前。
AfterDepthTexture在摄像机的深度纹理生成之后。
BeforeDepthNormalsTexture在摄像机的深度 + 法线纹理生成之前。
AfterDepthNormalsTexture在摄像机的深度 + 法线纹理生成之后。
BeforeGBuffer在渲染延迟渲染 G 缓冲区之前。
AfterGBuffer在渲染延迟渲染 G 缓冲区之后。
BeforeLighting在延迟渲染中的光照通道之前。
AfterLighting在延迟渲染中的光照通道之后。
BeforeFinalPass在延迟光照中的最后一个几何形状通道之前。
AfterFinalPass在延迟光照中的最后一个几何形状通道之后。
BeforeForwardOpaque在前向渲染中的不透明对象之前。
AfterForwardOpaque在前向渲染中的不透明对象之后。
BeforeImageEffectsOpaque在不透明对象和透明对象之间发生的图像特效之前。
AfterImageEffectsOpaque在不透明对象和透明对象之间发生的图像特效之后。
BeforeSkybox在绘制天空盒之前。
AfterSkybox在绘制天空盒之后。
BeforeForwardAlpha在前向渲染中的透明对象之前。
AfterForwardAlpha在前向渲染中的透明对象之后。
BeforeImageEffects在图像特效之前。
AfterImageEffects在图像特效之后。
AfterEverything在摄像机完成所有渲染之后。
BeforeReflections在延迟渲染中的反射通道之前。
AfterReflections在延迟渲染中的反射通道之后。
BeforeHaloAndLensFlares在光环和镜头光晕之前。
AfterHaloAndLensFlares在光环和镜头光晕之后。

参数二:CommandBuffer

要执行的图形命令的列表。

命令缓冲区可保存渲染命令列表(“设置渲染目标、绘制网格等等”)。可将渲染命令设置为在摄像机渲染(请参阅 Camera.AddCommandBuffer)、光源渲染(请参阅 Light.AddCommandBuffer)期间的各个点执行,或者立即执行(请参阅 Graphics.ExecuteCommandBuffer)。

通常,它们将用于以一些自定义方式扩展Unity的渲染管道。例如,可以在完成所有常规对象之后将一些附加对象渲染到延迟渲染G缓冲区中,或者对光影贴图进行自定义处理。有关更多详细信息,请参阅命令缓冲区概述页。

命令缓冲区创建后,可根据需要多次执行。

变量:

name此命令缓冲区的名称。
sizeInBytes此命令缓冲区的大小,以字节为单位(只读)。

构造函数:

CommandBuffer创建新的空命令缓冲区。

具体api链接:Rendering.CommandBuffer - Unity 脚本 API

我们通常用的方法是

CommandBuffer.Blit

参数:

source

要从中进行 blit 操作的源纹理或渲染目标。
dest要作为 blit 操作目标的目标。
mat要使用的材质。
pass要使用的着色器通道(默认为 -1,表示“所有通道”)。
scale应用于源纹理坐标的缩放。
offset应用于源纹理坐标的偏移。
sourceDepthSlice要从中执行 blit 操作的纹理数组源切片。
destDepthSlice要对其执行 blit 操作的纹理数组目标切片。

描述

添加“对渲染纹理执行 blit 操作”命令。

这与 Graphics.Blit 相似 - 主要用于从一个(渲染)纹理复制到其他纹理,可能使用自定义着色器。

源纹理或渲染目标将作为“_MainTex”属性传递给材质。

可通过若干种方式指示要使用的渲染纹理:RenderTexture 对象、用 GetTemporaryRT 创建的临时渲染纹理或内置的临时纹理之一 (BuiltinRenderTextureType)。上述所有形式的渲染纹理都用 RenderTargetIdentifier 结构来表示,该结构使用隐式转换运算符,实现键入时保存。

请注意,Blit 会更改当前处于活动状态的渲染目标。在 Blit 执行后,dest 会变为活动渲染目标。

通常不需要保留 Blit dest 的先前内容。在这种情况下,建议使用 SetRenderTarget 以适当的加载和存储操作显式激活 dest 渲染目标。然后,应将 Blit dest 设置为 BuiltinRenderTextureType.CurrentActive。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/733837.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组和链表的区别是什么?

引言:本文旨在深入探讨数组和链表之间的区别,分析它们在不同情境下的优缺点,并探讨如何根据应用需求选择合适的数据结构。通过深入理解数组和链表的内部工作原理和应用场景,读者将能够更好地应用这些知识解决实际问题,…

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell Jenkins弱口令 默认用户一般为jenkins/jenkins 使用admin/admin123登陆成功 Jenkins反弹shell 格式为 println"命令".execute().text 在/tmp目录中生成shell.sh文件,并向其中写入反弹shell的语句 new…

【金】?Y? python网页前端streamlit

1、如何从 Google Colab Notebook 启动 streamit参考-How to Launch Streamlit App from Google Colab Notebook !streamlit run web.py & npx localtunnel --port 8501 & curl ipv4.icanhazip.com

【Excel经验】字符串处理方法

概览-公式汇总 序号公式功能公式公式示例公式说明1把多列内容拼接在一起,作为新的一列的内容CONCATENATE (text1,text2,…)CONCATENATE(A2,“#”,B2,“”,C2)用于根据多个列的内容拼成我们指定格式的内容,拼接的内容通常来源于原始数据,同时…

keep-alive实现页面缓存

<!--router-view 实现页面缓存--> <router-view v-slot"{Component}"><keep-alive :max"8"><component :is"Component"></component></keep-alive> </router-view>

人工智能导论笔记

有关知识表示和推理的零碎知识点 人工智能导论复习题和概念-CSDN博客 机器学习篇 机器学习分类&#xff08;根据样本数据是否带有标签&#xff09;&#xff1a;监督的机器学习、无监督的机器学习、半监督学习。 监督学习又称为“有教师学习”。在监督学习中&#xff0c;模型…

不到3毛钱的SOT23和SOT89封装18V耐压低功耗高PSRR高精度LDO稳压芯片ME6231电流0.5A电压3.3V和1.8V

前言 SOT23-5封装ME6231外观和丝印 一款国产LDO&#xff0c;某些场合&#xff0c;要把1117扔了吧&#xff0c;SOT23封装&#xff0c;虽然不是最小&#xff0c;但也是够小的了。 参考价格&#xff1a;约0.25元 概述 ME6231 系列是以 CMOS 工艺制造的 18V 耐压、低功耗、高 PSR…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

【Linux】基础IO_3

文章目录 六、基础I/O3. 软硬链接4. 动静态库 未完待续 六、基础I/O 3. 软硬链接 使用 ln 就可以创建链接&#xff0c;使用 ln -s 可以创建软链接&#xff0c;直接使用 ln 则是硬链接。 我们对硬链接进行测试一下&#xff1a; 根据测试&#xff0c;我们知道了 硬链接就像一…

kettle从入门到精通 第七十三课 ETL之kettle kettle调用http分页接口教程

场景&#xff1a;kettle调用http接口获取数据&#xff08;由于数据量比较大&#xff0c;鉴于网络和性能考虑&#xff0c;所以接口是个分页接口&#xff09;。 方案&#xff1a;构造页码list&#xff0c;然后循环调用接口。 1、总体设计 1&#xff09;、初始化分页参数pageNum1…

LeetCode 算法:排序链表 c++

原题链接&#x1f517;&#xff1a;排序链表 难度&#xff1a;中等⭐️⭐️ 题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输…

VLAN单臂路由

1、搭建网络 搭建拓扑、规划IP、划分网段 2、交换机配置 配置脚本&#xff08;设置trunk和创建vlan很重要&#xff09; Switch>enable Switch#conf t Enter configuration commands, one per line. End with CNTL/Z.//创建vlan20 Switch(config)#vlan 20 Switch(config…

Android 添加自己的时钟小部件

小部件&#xff0c;也叫微件&#xff0c; 它的介绍参考官网 应用 widget 概览 https://developer.android.google.cn/develop/ui/views/appwidgets/overview?hlzh-cn 直接上图&#xff0c;原生系统上&#xff0c;时钟应用的小部件效果。 我也整一个。 1.创建小部件布局文…

陈好与王星越中戏传承

陈好与王星越&#xff1a;中戏传承&#xff0c;万人迷与未来之星在娱乐圈的星光璀璨中&#xff0c;我们时常被那些耀眼的明星所吸引&#xff0c;但你是否曾想过&#xff0c;他们背后的成长之路&#xff0c;是如何被一位位优秀的老师所指引的呢&#xff1f;今天&#xff0c;就让…

香橙派 5 PLUS 安装QQ(arm架构、Ubuntu系统)

1、下载QQ for Linux&#xff1a; 访问腾讯QQ官网&#xff0c;下载适用于香橙派 5 PLUS的arm架构Linux的QQ安装包。 比如&#xff1a;ARM版下载deb格式QQ安装包 ‘ QQ_3.2.9_240617_arm64_01.deb ’。 2、安装QQ for Linux&#xff1a; sudo dpkg -i [下载的文件名.deb]3、运…

【开源节流】如何通过数字化转型增强盈利能力?

引言&#xff1a;随着市场竞争的日益激烈&#xff0c;新技术发展的推动和企业发展的需求等&#xff0c;这些背景因素共同促使企业加快数字化转型步伐&#xff0c;以适应市场变化、提升竞争力并实现可持续发展。那如何通过如何通过数字化转型增强盈利能力&#xff1f;需要通过开…

食品企业仓储式批发零售一体化解决方案

食品企业需要有效应对日益复杂的市场挑战和消费者需求的快速变化的挑战并提升市场竞争力&#xff0c;仓储式类的批发零售一体化需求应运而生。这一全新的商业模式不仅整合了传统的批发和零售模式&#xff0c;还优化了供应链管理和客户体验&#xff0c;成为食品行业发展的新引擎…

如何监控巨量千川的违规行为

在这个瞬息万变的数字营销时代&#xff0c;每一分数据都蕴含着无限价值&#xff0c;尤其在电商领域&#xff0c;精准洞察与高效决策力已成为致胜关键。然而&#xff0c;面对巨量千川这一电商一体化智能营销平台的广阔天地&#xff0c;如何在海量信息中准确捕捉投放违规信息&…

51单片机STC89C52RC——6.2 定时器

一&#xff0c;定时器介绍 STC89C51RC/RD系列单片机的定时器0和定时器1&#xff0c;与传统8051的定时器完全兼容&#xff0c;当在定时器1做波特率发生器时&#xff0c;定时器0可以当两个8位定时器用。 STC89C51RC/RD系列单片机内部设置的两个16位定时器/计数器TO和T1都…

mac电脑守护神CleanMyMac2024免费版本下载

&#x1f31f; 电脑的守护神&#xff1a;CleanMyMac&#x1f47e; 亲爱的数码控们&#xff0c;是不是每次看到电脑上满满的垃圾文件和缓慢的运行速度就感到头疼呢&#xff1f;别怕&#xff0c;今天我要来给你们安利一款神奇的小帮手——CleanMyMac&#xff01;它可是我们电脑的…