【技术实现步骤摘要】
一种基于Unity3D的URP三维视频融合方法
[0001]本专利技术涉及虚拟现实
,尤其涉及一种基于Unity3D的URP三维视频融合方法。
技术介绍
[0002]现如今,监控早已随处可见,极大地保障了人们生活的安全性,但想从茫茫的监控画面中提取有效的信息却并非易事。由于3D数据相比2D数据拥有直观、全面等优势,3D数据正获得越来越多的重视,并且应用越来越广泛。同时,随着元宇宙、虚拟现实等技术的发展,三维视频融合将变得很有必要,即将2D的监控画面与虚拟的三维场景无缝融合。如果该技术进一步与当下热门的数字孪生或人工智能等技术相结合,将创造出更多价值,并拥有广阔的前景。
[0003]虚拟现实技术(简称VR),又称虚拟环境、灵境或人工环境,是指利用计算机生成一种可对参与者直接施加视觉、听觉和触觉感受,并允许其交互地观察和操作的虚拟世界的技术。
[0004]视频融合技术是虚拟现实技术的一个分支,也可以说是虚拟现实的一个发展阶段。视频融合技术指将一个或多个由视频采集设备采集的关于某场景或模型的图像序列视频与一个 ...
【技术保护点】
【技术特征摘要】
1.一种基于Unity3D的URP三维视频融合方法,其特征在于,该基于Unity3D的URP三维视频融合方法包括三维视频融合、更改虚拟相机属性、更改投影视频属性、多投影仪拼接、控制投影穿透、屏蔽视频黑边和调参面板;三维视频融合功能通过模拟监控摄像头投影的方式,利用深度信息将监控画面与场景3D模型无缝融合;更改虚拟相机属性包括改变模拟监控摄像头位置、旋转角或焦距;更改投影视频属性为改变投影长宽比、投影透明度,对投影进行剪裁;多投影仪拼接为多投影仪拼接投影、更改投影图层顺序、多投影仪组合移动;控制投影穿透为被遮挡部分不被投影穿透、分层控制接受投影的模型层;屏蔽视频黑边为根据投影透明度Mask对不规则黑边进行屏蔽。2.根据权利要求1所述的基于Unity3D的URP三维视频融合方法,其特征在于,所述三维视频融合具体为:步骤1.1,在场景内创建一个空游戏对象为虚拟相机;步骤1.2,自定义创建深度shader文件,用于每一个虚拟相机深度纹理的绘制;在着色器内编写状态控制语句,用于控制虚拟相机输出的渲染状态,具体设置为背面剔除,关闭深度写入,始终通过深度测试;自定义创建片元函数,将虚拟相机传递的深度纹理,转换为线性深度值,表示为depthValue,其计算公式为:depthValue=Linear01Depth(SAMPLE_TEXTURE2D_X(_CameraDepthTexture,sampler_CameraDepthTexture,screenPos).r,_ZBufferParams)其中,Linear01Depth()为Unity编辑器的0
‑
1线性深度转换函数,SAMPLE_TEXTURE2D_X()为Unity编辑器的纹理采样函数,_CameraDepthTexture为虚拟相机的深度纹理,sampler_CameraDepthTexture为相机深度纹理采样器,screenPos为屏幕的视口坐标,r为red通道,_ZBufferParams为线性化深度缓存区参数;步骤1.3,自定义创建深度后处理脚本,遵循URP后处理规则;在深度后处理脚本内,定义深度绘制功能是否启用;步骤1.4,自定义创建深度渲染通道脚本和深度渲染通道功能脚本,用于添加深度绘制功能到URP中;在深度渲染通道脚本内,通过Volume框架获得后处理堆栈,进而获得该虚拟相机是否开启深度绘制;采用Unity编辑器的Blit()函数,使用步骤1.2创建的深度shader文件的材质,对该虚拟相机的输出进行特殊渲染,使得输出为深度图;在深度渲染通道功能脚本内,在Unity编辑器的Create()函数内初始化深度渲染通道,在Unity编辑器的AddRenderPasses()函数内,将该深度渲染通道添加到URP渲染管线中;步骤1.5,在URP的前向渲染资产的渲染功能中添加步骤1.4中的深度渲染通道功能脚本;在URP的渲染管线资产中启用深度纹理功能;URP渲染管线具备在后处理阶段进行深度绘制的功能;步骤1.6,启用虚拟相机Camera组件的后处理选项,为每一个虚拟相机创建一个立方体子对象用于限定局部后处理生效范围;取消勾选网格渲染使每个立方体子对象不被渲染;为虚拟相机绑定URP中后处理模块提供的Volume脚本,Volume脚本中添加之前自定义的深度绘制后处理效果;虚拟相机具备深度绘制的功能;步骤1.7,为虚拟相机添加Unity编辑器的Video Player组件,设置对应视频源信息;将Video Player组件的材质属性设置为主纹理;Unity编辑器自动将当前对象材质的主纹理属性传入至该视频的画面信息;
步骤1.8,自定义创建投影控制脚本,为虚拟相机添加该投影控制脚本;定义相机渲染纹理;在Unity编辑器的Start()函数内对相机渲染纹理进行初始化;相机渲染纹理长宽初始化为1024x1024,图片格式初始化为R32_SFloat的渲染纹理;初始化后的相机渲染纹理赋值至虚拟相机Camera组件的目标纹理属性,作为虚拟相机的输出纹理;通过Unity编辑器的SetTexture()函数,将该输出纹理传递至投影的材质;步骤1.9,为了实现虚拟相机和三维场景的交互,使虚拟相机具有网格实体;在步骤1.8的投影控制脚本内,自定义虚拟相机更新函数用于初始化和更新虚拟相机的数据;在相机更新函数内,获得虚拟相机Camera组件的FOV、宽高比、近远平面信息,生成一个虚拟相机的网格实体,该网格实体作为投影的媒介,用于限定投影范围;同时,通过虚拟相机Camera组件得到Unity编辑器提供的观察变换矩阵和投影矩阵,将二者相乘得到观察投影矩阵VP,将该观察投影矩阵VP传递给投影材质;步骤1.10,自定义创建投影文件,用于绑定步骤1.9网格实体的材质;在Unity编辑器的顶点函数内,将顶点变换到主视角相机的观察空间下并输出,使其作为下一步片元函数的输入,表示为o.ray,其公式如下:o.ray=mul(UNITY_MATRIX_MV,v.vertex).xyz*float3(1,1,
‑
1)其中,mul为矩阵乘法,UNITY_MATRIX_MV为Unity编辑器的模型视角变换矩阵,v.vertex为输入顶点,float3(1,1,
‑
1)向量为对结果坐标z进行取反;步骤1.11,在步骤1.10的投影shader文件的片元函数内,先将所有顶点投影到主视角相机的原平面上,再获得主视角相机的深度图并采样;通过Unity编辑器的Linear01Depth()函数解析主视角相机深度图得到0
‑
1的线性深度值;将所有顶点乘以得到的线性深度值,再将顶点投影至步骤1.8的网格实体在场景内所接触的每一个物体的表面;利用Unity编辑器的clip函数对不满足条件的投影区域做剔除,还原出网格实体和场景在世界空间的交点即投影区域,用于后续视频画面的输出,其计算公式如下:clip(float2(clipX,clipY)
‑
abs(opos.xy))其中,clip为Unity编辑器的剔除函数,当传入的参数向量或数有任何分量小于0则剔除该片元,float2为二维向量,clipX和clipY分别为投影点在网格实体模型空间的位置,abs为Unity编辑器的绝对值函数,opos为投影点在网格实体模型空间的位置,当投影点的位置超出模型范围时就会被剔除;步骤1.12,在步骤1.10的投影shader文件的片元函数内,根据步骤1.9传入的观察投影矩阵VP和步骤1.11得到的投影点的输出位置信息,手动模拟投影点向虚拟相机投影的过程,得到投影点在虚拟相机屏幕空间的视口坐标,表示为projUV,其计算公式如下:float2 projUV=clipPos.xy*0.5+0.5其中,clipPos.xy为投影点基于虚拟相机计算的规范化设备坐标系位置;将视口坐标作为UV,采样步骤1.8传递的相机渲染纹理得到深度值,表示为depth2,其计算公式如下:float depth2=tex2D(_DepthTexture,projUV).x其中,tex2D为Unity编辑器的采样函数,_DepthTexture为虚拟相机的携带深度信息的渲染纹理;得到相对于虚拟相机的深度信息后,使用clip函数剔除掉大于...
【专利技术属性】
技术研发人员:王智慧,李豪杰,宁森,林政聪,
申请(专利权)人:大连理工大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。