【调试记录】在CARLA中插入可以播放视频的组件

〇、问题描述

做实验验证的时候,需要在CARLA仿真环境中添加一个可以播放视频的功能,查了很多现有的实验,基本都是插入图像,而对于插入视频,实现的方法就很麻烦了。一开始考虑的是直接用射影变换进行叠加,计算出给定时刻的视频的帧,然后用射影变换将帧投影到采集的环境图像中,但是这种投影很难体现出场景中的光照信息,而且标记每一帧的投影矩阵的开销太大了,所以这里尝试了一下用UE4的组件来向CARLA中添加可以播放视频的组件。

一、调试流程

先说一下整个实现的大体流程,首先将需要播放的视频导入到工作目录下,创建媒体播放器组件并测试能否播放该视频,之后利用该媒体播放器生成媒体纹理,再将媒体纹理应用在材质上,最后利用静态网格体或者蓝图类加载这个材质包。

加载视频

打开CARLA后,下方会有一个叫做内容浏览器的界面,这个里面是预设好的一些CARLA的内容,我们可以直接在其中操作。创建文件夹后,点击左上角的导入-导入资产,将需要的视频加载到这个路径下,之后才可以用CARLA读取这个视频。下图中1_converted就是导入的视频。
在这里插入图片描述

创建媒体播放器

在内容浏览器中右键媒体-媒体播放器,可以创建一个媒体播放器组件,创建时会弹出一个窗口,提示你同步创建视频纹理,这里要选输出媒体纹理资产,这样就会同步创建好上图中红色的两个组件。
在这里插入图片描述
之后双击创建好的媒体播放器,这个界面中会展示你当前目录下所有导入的视频,双击视频可以预览。
在这里插入图片描述
需要注意,这里并不是所有的视频都可以加入进来,因为我用的是Ubuntu版本的CARLA,并不是所有的视频插件都安装好了的,查了一圈发现最好还是用webm格式的视频,而且需要调整码率。如果不能播放,打开carla的控制台会提示报错,大体的报错内容就是缺少XX插件,无法播放视频。这里我使用的是FFmpeg 将MP4视频转换为WebM格式,转码可以使用下面的指令。

ffmpeg -i "1.mp4" -c:v libvpx -b:v 1M -c:a libvorbis "1_converted.webm"

成功打开视频后的界面如下,此时选择左上角的保存即可完成媒体播放器的设置,右下角的打开时播放记得勾选,这样子我们可以在加载CARLA场景后就进行视频播放。
在这里插入图片描述

生成媒体纹理

双击内容浏览器中的媒体纹理,由于我们刚才勾选了同步生成,所以这里默认的设置是设置好的,只要确定右边的媒体播放器正确一般不会出什么问题。
在这里插入图片描述

应用材质文件

接下来我们需要的是将创建好的媒体纹理变成材质包,这样才可以加载到物体上。在内容浏览器中右键创建材质,之后双击进入材质的设置文件中。在材质编辑器中,右键点击空白区域,搜索并添加 Texture Sample 节点,在这个节点的设置细节中,将纹理属性设置为之前保存的媒体属性。
在这里插入图片描述
之后将 Texture Sample 节点的 RGB 输出连接到自发光颜色的输入端。这里补充一点,如果直接连接,可能会出现视频效果不清楚的问题,这里的解决方法是放大媒体纹理的RGB输出,添加一个乘法节点。最终的节点连接如下:
在这里插入图片描述
设置前后的效果对比如下,左边的发黑的立方体是直接连接的,而右边的立方体是放大150倍之后的效果。
在这里插入图片描述

导入到场景

导入到场景其实有两种方法,用实例以及用蓝图,个人的理解是实例需要手动拖到场景中的,而蓝图则可以保存然后用代码导入到场景中。

实例实现起来最简单,从左上方的放置actor中拖一个需要的actor,然后再设置中将材质设置为刚才我们保存的材质,由于在导入视频是我们勾选了自动播放,所以这里可以直接实现启动场景就开启播放视频。
在这里插入图片描述
蓝图的实现就要复杂一些了,还是在内容浏览器中右键新建一个蓝图类,之后双击进入蓝图的编辑器。首先在右上角的组件一栏中点击添加组件,选择静态网格体组件,添加好的静态网格体会出现在下方,双击静态网格体,右边会出现具体的属性设置,这里需要修改两项内容:静态网格体和材质。前者是选择添加什么样子的物体,后者则是将我们设置的媒体材质放置在物体表面。
在这里插入图片描述
之后为了让视频自动播放,蓝图类需要设置事件图表,具体的原理我也解释不太清楚,这里放一下CHATGPT的推理结果:
在这里插入图片描述
在这里插入图片描述
这里补充几个容易出问题的地方,首先是汉化问题,如果你的CARLA也是中文版,有些地方会和上图的名称不一样,Open Source对应的中文名叫“打开源”,Play对应的中文名是“播放”,而且是媒体播放器那一栏里面的播放。其次是在搜索组件时,可能会搜不到,这时候需要把搜索栏右边的情景关联关掉,这个东西会过滤掉很多系统认为你用不到的组件,但实际你需要这些组件。最后整个的事件图表如下:
在这里插入图片描述

最终测试

完成这一切之后,我们就可以从内容浏览器中拖拽物体到场景中了,点击运行只后找到我们拖拽进去的物体,就可以发现物体的表面就是我们导入到视频,会自动播放。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL—Group_Concat函数用法详解

SQL—Group_Concat函数用法详解 在LC遇见的一道很有趣的SQL题,有用到这个函数,就借这道题抛砖引玉,在此讲解一下group_concat函数的用法。🤣 GROUP_CONCAT([DISTINCT] expression [ORDER BY expression] [SEPARATOR separator])…

深入解析 Linux 设备树中的引脚控制(pinctrl)二

在嵌入式开发中,设备树(Device Tree)是描述硬件设备和系统拓扑的重要结构。而在 Linux 内核中,引脚控制(pinctrl)是一个关键的硬件资源管理部分,负责管理和配置设备的引脚(GPIO、I2C、SPI 等接口)功能和状态。设备树通过描述这些引脚的特性,指导 Linux 内核如何正确地…

MySQL(六)MySQL 案例

1. MySQL 案例 1.1. 设计数据库 1、首先根据相关业务需求(主要参考输出输入条件)规划出表的基本结构   2、根据业务规则进行状态字段设计   3、预估相关表的数据量进行容量规划   4、确定主键   5、根据对相关处理语句的分析对数据结构进行相应的变更。   设计表的时…

后台管理系统动态面包屑Breadcrumb组件的实现

在后管理系统开发中,面包屑导航是一个非常常见的功能,通常是根据当前的 url 自动生成面包屑导航菜单,当跳转路由发生变化时,面包屑导航都会随之发生变化,即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…

4.1.2 栈和队列(一)

文章目录 栈的定义栈的基本运算栈的存储结构栈的应用表达式求值 栈和队列的逻辑结构与线性表相同,但是其运算受到限制,统称为运算受限的线性表。 栈, 先进后出 队列,先进先出 栈的定义 栈顶,唯一能操作端 栈底&#xf…

基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真,仿真输出燃料电池中氢氧元素含量变化以及生成的H2O变化情况。 2.系统仿真结果 3.核心程序与模型 版本…

k620老显卡,装cuda.等。

CUDA安装教程(超详细)-CSDN博客 1.下载支持12.0以上的驱动 NVIDIA RTX Driver Release 550 R550 U12 (553.50) | Windows 11 解压。安装。一路下一步。查看结果 2.下载 cuda CUDA Toolkit Archive | NVIDIA Developer 安装cuda时,第一次…

【数学建模笔记】评价模型-基于熵权法的TOPSIS模型

视频课地址:https://www.bilibili.com/video/BV1eRyVYUEhg 本系列文章和课程一样,只使用Python实现,好久没玩数学建模了 国赛中不能再用TOPSIS,可以做辅助算法。 1. 算法原理 熵权TOPSIS方法是一种结合熵权法和TOPSIS的决策分析…

当今世界如何减少暴戾之气和矛盾纷争

《消暴戾、减纷争》(一) 暴戾之气常见于陌生人之间、纷争矛盾常见于与陌生人、同事、朋友、家人之间,总之就是一切人际关系、交际 常见案例:路怒症、住户与外卖小哥的纷争,同事、朋友、家人之间的矛盾 小吵还好&#…

【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 沸羊羊舔狗自查表)

【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 & 沸羊羊舔狗自查表) 文章目录 1、情感关系中的平等意识2、如何经营一段长期稳定的关系(避免左倾 | 敬畏与担当)3、沸羊羊/舔狗自查表(避免右…

让css设置的更具有合理性

目录 一、合理性设置宽高 二、避免重叠情况,不要只设置最大宽 三、优先使用弹性布局特性 四、单词、数字换行处理 五、其他编码建议 平常写css时,除了遵循一些 顺序、简化、命名上的规范,让css具有合理性也是重要的一环。 最近的需求场…

Go小技巧易错点100例(二十一)

本篇内容: errors.Is方法与两种方式进行error比较 在Go语言中,处理错误(error 类型)时,errors.Is 和直接使用 操作符进行错误比较,虽然看起来都用于比较错误,但实际上它们有着根本的不同。这主…

【服务器项目部署】✈️将本地项目部署到服务器(二)!

目录 👋前言 👀一、功能调整 🌱二、服务部署 💞️三、代码调整 🍻四、章末 👋前言 小伙伴们大家好,上篇文章本地实践了如何将本地项目部署到服务器上,从服务器的选择、服务器环境…

Kafka消息队列

目录 前置内容常用脚本说明和示例描述与定义部分术语说明两种模式点对点模式发布订阅模式 topic主题命令行操作指令生产者Broker消费者 前置内容 队列: 先进先出 应用: 大数据中主要用于离线和实时处理 流程: Flume正常获取数据,…

如何使用 Ansys OptiSlang 同时运行多个参数化设计研究

了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。 了解参数化设计研究的重要性 参数化设计研究在工程和设计过程中起着至关重要的作用。通过改变输入参数,工程师可以探索不同设计选择的效果,并优化其设计以满足性能、成本或其他…

Nginx (40分钟学会,快速入门)

一、什么是Nginx ? 可以做什么 ? Nginx 是高性能的 HTTP 和反向代理的 web 服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发的连接数.Nginx特点就是内存少,并发能力强。事实上…

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数,那么它就可…

【Android项目学习】3. MVVMHabit

项目链接 文章目录 一. 项目结构1. 项目整体划分2. 模块细分 二. Android知识点学习1. registerActivityLifecycleCallbacks方法2. 一. 项目结构 1. 项目整体划分 MVVMHabit是以谷歌DataBindingLiveDataViewModel框架为基础,整合OkhttpRxJavaRetrofitGlide等流行…

【大模型】7 天 AI 大模型学习

7 天 AI 大模型学习 Day 3 今天,我们要一起学习大模型微调了 ~ 包括:大模型微调领域概览、Lora微调 等 ~ 文章目录 7 天 AI 大模型学习 Day 3大模型微调概览大模型项目 pipeline提示词工程 Prompt EngineeringIn-context Learning…

密码学精简版

密码学是数学上的一个分支,同时也是计算机安全方向上很重要的基础原理,设置密码的目的是保证信息的机密性、完整性和不可抵赖性,安全方向上另外的功能——可用性则无法保证,可用性有两种方案保证,冗余和备份&#xff0…