CN115859411A - 一种体渲染碰撞检测方法、装置、设备以及存储介质 - Google Patents

一种体渲染碰撞检测方法、装置、设备以及存储介质 Download PDF

Info

Publication number
CN115859411A
CN115859411A CN202211582535.5A CN202211582535A CN115859411A CN 115859411 A CN115859411 A CN 115859411A CN 202211582535 A CN202211582535 A CN 202211582535A CN 115859411 A CN115859411 A CN 115859411A
Authority
CN
China
Prior art keywords
detection
ray
position point
volume
point
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202211582535.5A
Other languages
English (en)
Other versions
CN115859411B (zh
Inventor
宁世杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211582535.5A priority Critical patent/CN115859411B/zh
Publication of CN115859411A publication Critical patent/CN115859411A/zh
Application granted granted Critical
Publication of CN115859411B publication Critical patent/CN115859411B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

本申请实施例提供了一种体渲染碰撞检测方法、装置、设备以及存储介质,应用于云技术、医学、三维重建等场景,方法包括:获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;若碰撞检测结果指示碰撞检测成功,则将检测交点确定为碰撞位置点;若碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。本申请可以提高碰撞检测的效率和准确度。

Description

一种体渲染碰撞检测方法、装置、设备以及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种体渲染碰撞检测方法、装置、设备以及存储介质。
背景技术
目前的碰撞检测算法支持对表面重建的模型进行碰撞检测,无法支持对体积重建的模型进行碰撞检测。然而,表面重建相比于体积重建而言,重建速度比较慢,在对重建速度比较慢的表面重建的模型进行碰撞检测时,由于重建模型的过程需要花费大量的时间,所以对表面重建的模型进行碰撞检测不可避免地会降低碰撞检测的效率。此外,表面重建相比于体积重建而言,重建效果比较粗糙,在对重建效果比较粗糙的表面重建的模型进行碰撞检测时,由于直接对粗糙模型进行碰撞检测,所以对表面重建的模型进行碰撞检测不可避免地会降低碰撞检测的准确度。
发明内容
本申请实施例提供一种体渲染碰撞检测方法、装置、设备以及存储介质,可以提高碰撞检测的效率和准确度。
本申请实施例一方面提供了一种体渲染碰撞检测方法,包括:
获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;体渲染容器包含体渲染对象;
在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;
若检测交点对应的碰撞检测结果指示碰撞检测成功,则将检测交点确定为检测射线针对体渲染对象的碰撞位置点;
若检测交点对应的碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。
本申请实施例一方面提供了一种体渲染碰撞检测装置,包括:
位置点确定模块,用于获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;体渲染容器包含体渲染对象;
碰撞检测模块,用于在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;
碰撞点确定模块,用于若检测交点对应的碰撞检测结果指示碰撞检测成功,则将检测交点确定为检测射线针对体渲染对象的碰撞位置点;
切面移动模块,用于若检测交点对应的碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。
本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;
处理器与存储器相连,其中,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行本申请实施例提供的方法。
在本申请实施例中,计算机设备可以获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,进而在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果。其中,体渲染容器包含体渲染对象。进一步地,若检测交点对应的碰撞检测结果指示碰撞检测成功,则计算机设备可以将检测交点确定为检测射线针对体渲染对象的碰撞位置点。可选的,若检测交点对应的碰撞检测结果指示碰撞检测失败,则计算机设备可以沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。由此可见,本申请实施例提出了一种体渲染(即体积渲染、体积重建)碰撞检测方法,该方法可以解决体积渲染无法进行碰撞检测的问题,通过在检测射线上不断构建体积切面来对检测射线和体渲染对象(即体积重建的模型)进行碰撞检测,从而实现直接在体渲染对象上进行射线碰撞检测,得到检测射线针对体渲染对象的碰撞位置点。由于体积重建相比于表面重建而言效果更加的细腻,所以在效果细腻的体渲染对象上所检测到的碰撞位置点可以提高碰撞检测的准确度。此外,体积重建相比于表面重建而言构建速度更加快,所以在构建速度快的体渲染对象上所检测到的碰撞位置点可以提高碰撞检测的效率。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种网络架构的结构示意图;
图2是本申请实施例提供的一种进行数据交互的场景示意图;
图3是本申请实施例提供的一种体渲染碰撞检测方法的流程示意图;
图4是本申请实施例提供的一种确定边界位置点的场景示意图;
图5a是本申请实施例提供的一种确定碰撞位置点的场景示意图;
图5b是本申请实施例提供的一种确定碰撞位置点的场景示意图;
图6是本申请实施例提供的一种体渲染碰撞检测方法的流程示意图;
图7a是本申请实施例提供的一种体渲染碰撞检测的流程示意图;
图7b是本申请实施例提供的一种体渲染碰撞检测的流程示意图;
图8是本申请实施例提供的一种体渲染碰撞检测装置的结构示意图;
图9是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
具体的,请参见图1,图1是本申请实施例提供的一种网络架构的结构示意图。如图1所示,该网络架构可以包括服务器2000和终端设备集群。其中,终端设备集群具体可以包括一个或者多个终端设备,这里将不对终端设备集群中的终端设备的数量进行限定。如图1所示,多个终端设备具体可以包括终端设备3000a、终端设备3000b、终端设备3000c、…、终端设备3000n;终端设备3000a、终端设备3000b、终端设备3000c、…、终端设备3000n可以分别与服务器2000通过有线或无线通信方式进行直接或间接地网络连接,以便于每个终端设备可以通过该网络连接与服务器2000之间进行数据交互。
其中,终端设备集群中的每个终端设备均可以包括:智能手机、平板电脑、笔记本电脑、台式计算机、智能语音交互设备、智能家电(例如,智能电视)、可穿戴设备、车载终端、飞行器等具有体渲染碰撞检测功能的智能终端。
应当理解,如图1所示的终端设备集群中的每个终端设备均可以安装有应用客户端,当该应用客户端运行于各终端设备中时,可以分别与上述服务器2000之间进行数据交互。其中,该应用客户端可以包括社交客户端、多媒体客户端(例如,视频客户端)、娱乐客户端(例如,游戏客户端)、教育客户端等具有空间重建功能(例如,三维重建功能)的应用客户端。其中,该应用客户端可以为独立的客户端,也可以为集成在某客户端中的嵌入式子客户端,在此不做限定。为便于理解,本申请实施例还可以将应用客户端称之为三维重建软件(例如,医学影像三维重建软件)。
为便于理解,本申请实施例可以在图1所示的多个终端设备中选择一个终端设备作为目标终端设备。例如,本申请实施例可以将图1所示的终端设备3000c作为目标终端设备,目标终端设备中可以安装有具有空间重建功能(例如,三维重建功能)的应用客户端。此时,目标终端设备可以通过应用客户端与服务器2000之间实现数据交互。
其中,服务器2000可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
三维重建(3D Reconstruction)是从一堆二维图像中恢复物体的三维结构,并进行渲染,最终在计算机中进行客观世界的虚拟现实的表达。换言之,三维重建是一种从二维到三维,平面到立体的过程,三维重建又可以称之为图像重建。例如,三维重建可以包括医学影像三维重建,二维医学影像的三维重建方法包括表面三维重建和体积三维重建,表面三维重建又可以称之为面重建、表面重建等,体积三维重建又可以称之为体重建、体积重建等,表面三维重建可以生成表面重建的三维模型(即表面重建的模型),体积三维重建可以生成体积重建的三维模型(即体积重建的模型)。
体积渲染(即体渲染)是一组用于显示3D离散采样数据集(通常是3D标量场)的2D投影的技术。例如,3D数据集是由CT(Computed Tomography,电子计算机断层扫描)、MRI(Magnetic Resonance Imaging,核磁共振成像)或MicroCT(微型CT)扫描仪获取的一组2D切片图像,这一组2D切片图像是通过多个图像进行层层叠加所得到的,本申请实施例不对每个3D数据集中的切片图像的数量进行限定。通常,3D数据集是以规则模式(例如,每毫米深度一个切片,这里的切片即为一张2D切片图像)获取的,并且通常在规则模式中具有规则数量的图像像素,换言之,3D数据集中的2D切片图像具有相同的图像分辨率,例如,512*512。
换言之,体积渲染是指基于体素(即体积元素、体积单元)的数据渲染,体素可以用于构成三维空间的物体,体素是三维空间的物体的基本元素。体素是2D像素的3D概念对应物,二维空间的像素对应于三维空间中的体素。每个体素都是体积的量子单位,并具有与其关联的一个或多个数值,这些数值表示真实对象或现象的某些可测量属性或自变量,例如,颜色。
应当理解,本申请实施例中的计算机设备可以在应用客户端中,通过云技术实现检测射线针对体渲染对象(即体渲染、体渲染模型)的碰撞检测,即本申请实施例的碰撞检测可以应用于应用客户端。具体的,计算机设备可以获取针对体渲染对象的检测射线和体渲染对象所属的体渲染容器(即BoundBox,这里指体渲染的边界框),进而确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,对边界开始位置点和边界结束位置点之间的位置点进行碰撞检测,直到在边界开始位置点和边界结束位置点之间确定碰撞位置点(即碰撞检测成功),或者,未在边界开始位置点和边界结束位置点之间确定碰撞位置点(即碰撞检测失败)。
其中,碰撞检测又可以称之为射线检测、射线碰撞检测等,射线检测表示沿给定的线(即检测射线)执行碰撞遍历,并返回首个阻挡命中对象以及命中位置(即碰撞位置点)等信息。例如,本申请实施例可以基于UE引擎(Unreal Engine,虚幻引擎)实现检测射线针对体渲染对象的碰撞检测,例如,本申请实施例可以基于UE4.26实现检测射线针对体渲染对象的碰撞检测。
其中,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术(Cloudtechnology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,以能通过云计算来实现。
其中,本申请实施例所提供的体渲染碰撞检测方法可以由服务器2000执行(即上述计算机设备可以为服务器2000),也可以由目标终端设备执行(即上述计算机设备可以为目标终端设备),还可以由服务器2000和目标终端设备共同执行。为便于理解,本申请实施例可以将终端设备对应的用户称之为对象,例如,将目标终端设备对应的用户称之为目标对象。
其中,在体渲染碰撞检测方法由服务器2000和目标终端设备共同执行时,目标终端设备可以获取针对体渲染对象的检测射线,进而将检测射线发送至服务器2000,这样,服务器2000可以在接收到目标终端设备发送的检测射线之后,获取体渲染对象所属的体渲染容器,进而确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,对边界开始位置点和边界结束位置点之间的位置点进行碰撞检测。
可选的,在体渲染碰撞检测方法由服务器2000执行时,服务器2000可以获取针对体渲染对象的检测射线和体渲染对象所属的体渲染容器,进而确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,对边界开始位置点和边界结束位置点之间的位置点进行碰撞检测。
可选的,在体渲染碰撞检测方法由目标终端设备执行时,目标终端设备可以从服务器2000获取体渲染对象所属的体渲染容器,进而在获取针对体渲染对象的检测射线之后,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,对边界开始位置点和边界结束位置点之间的位置点进行碰撞检测。
可以理解的是,上述网络框架可以适用于医学场景、游戏场景、建筑场景、文物场景等,这里将不对具体的业务场景进行一一列举。此时,相应场景下的功能具体可以包含医学场景下的3D测量标注、游戏场景下的动画模拟、建筑场景下的3D测量标注、文物场景下的3D测量标注等,这里将不对相应场景下的具体功能进行一一列举。
比如,在医学场景下,通过碰撞检测可以对体渲染对象进行3D测量标注,例如,两次碰撞检测可以标注得到体渲染对象上的两个碰撞位置点,根据两个碰撞位置点分别对应的坐标可以计算两个碰撞位置点之间的距离,在两个碰撞位置点为肿瘤上的位置点时(即体渲染对象包括肿瘤),两个碰撞位置点之间的距离可以表示肿瘤的大小。
可以理解的是,通过直接在体积重建模型(即体渲染对象)上进行碰撞检测,则能让医生在更高质量的3D视图画面中进行3D标注测量操作。此外,基于体渲染的碰撞检测测量,一方面有利于医生对病灶区域进行分析并给出准确的诊疗方案,提升医疗诊断的准确性与科学性;另一方面可实现术前模拟(例如,通过碰撞检测确定手术过程中的最佳动刀角度,即在手术之前模拟从身体外部的某个方向动刀时,会切入到身体内部中的对应位置点,这个切入所得到的位置点即为碰撞检测所生成的碰撞位置点),对医生进行准确的诊疗起到很好的辅助作用。
又比如,在游戏场景下,通过碰撞检测可以对体渲染对象进行动画模拟,例如,将虚拟装备的射击模拟为检测射线(即将虚拟装备的射击射线模拟为检测射线),检测射线针对体渲染对象的碰撞位置点可以表示虚拟装备射中体渲染对象的位置点,此时可以在体渲染对象的碰撞位置点上显示射击动画,从而指示虚拟装备成功射中体渲染对象。
又比如,在建筑场景下,通过碰撞检测可以对体渲染对象进行3D测量标注,例如,在建筑物的体积非常大时,无法直接对建筑物的尺寸进行测量,在获取建筑物对应的体渲染对象之后,通过两次碰撞检测在体渲染对象上所确定的两个碰撞位置点,可以标注得到体渲染对象中的两个碰撞位置点之间的尺寸,从而推算得到建筑物的尺寸。
又比如,在文物场景下,通过碰撞检测可以对体渲染对象进行3D测量标注,例如,在木乃伊的包装完整的情况下,为确保木乃伊的完整性,无法直接对木乃伊的内部内容(例如,头部)进行测量,在获取木乃伊对应的体渲染对象之后,通过两次碰撞检测在体渲染对象上所确定的两个碰撞位置点,可以标注得到木乃伊的内部内容(例如,头部)的尺寸。
为便于理解,进一步地,请参见图2,图2是本申请实施例提供的一种进行数据交互的场景示意图。如图2所示的服务器20a可以为上述图1所对应实施例中的服务器2000,如图2所示的终端设备20b可以为上述图1所对应实施例中的目标终端设备,终端设备20b对应的对象可以目标对象。为便于理解,本申请实施例以体渲染碰撞检测方法由终端设备20b执行为例进行说明。
如图2所示,目标对象可以通过终端设备20b向服务器20a发送数据集获取请求,这样,服务器20a在接收到数据集获取请求之后,可以从图像数据库21a中获取数据集获取请求对应的目标数据集,进而将目标数据集返回至终端设备20b。其中,图像数据库21a可以单独设置,也可以集成在服务器20a上,或者集成在其他设备或云上,这里不做限定。
其中,如图2所示的图像数据库21a中可以包括多个数据库,多个数据库具体可以包括图2所示的数据库21b、…、数据库21c,数据库21b、…、数据库21c可以用于存储不同场景所对应的数据集,例如,数据库21b可以用于存储游戏场景的数据集,数据库21c可以用于存储医学场景的数据集。因此,在数据集获取请求所请求获取的数据集为医学场景的数据集时,服务器20a可以从数据库21c中获取医学场景的目标数据集,目标数据集是由一组医学图像所构成的数据集。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
如图2所示,终端设备20b在接收到目标数据集之后,可以对目标数据集进行体积三维重建,得到体渲染对象22a和体渲染对象22a所属的体渲染容器22b。可选的,服务器20a还可以在从数据库21c中获取到目标数据集之后,对目标数据集进行体积三维重建,得到体渲染对象22a和体渲染对象22a所属的体渲染容器22b,进而将体渲染对象22a和体渲染容器22b返回至终端设备20b,以使终端设备20b显示体渲染对象22a和体渲染容器22b。
可以理解的是,根据体渲染对象22a在三维空间中的X轴、Y轴和Z轴分别对应的层数(即体渲染对象22a在X轴中的体素的数量)和体渲染对象22a所对应的像素间距值(即体素间距值),可以确定体渲染容器22b的大小,换言之,本申请实施例可以根据体渲染对象22a在三维空间中的X轴、Y轴和Z轴分别对应的层数和体渲染对象22a所对应的像素间距值的乘积,确定体渲染容器22b的大小。
比如,X轴所对应的体素的数量可以为x个,体渲染对象22a所对应的像素间距值可以为v,则体渲染容器22b在X轴的长度为x*v;又比如,Y轴所对应的体素的数量可以为y个,体渲染对象22a所对应的像素间距值可以为v,则体渲染容器22b在Y轴的长度为y*v;又比如,Z轴所对应的体素的数量可以为z个,体渲染对象22a所对应的像素间距值可以为v,则体渲染容器22b在Z轴的长度为z*v。这样,根据X轴的长度为x*v、Y轴的长度为y*v和Z轴的长度为z*v可以生成体渲染容器22b。
其中,体渲染容器22b可以为包含体渲染对象22a的最小形状。可选的,本申请实施例还可以生成包含体渲染容器22b的其他体渲染容器(未在图上示出),其他体渲染容器(未在图上示出)同样可以包含体渲染对象22a,此时,本申请实施例可以将其他体渲染容器(未在图上示出)作为用于进行碰撞检测的体渲染容器。应当理解,本申请实施例不对用于进行碰撞检测的体渲染容器的容器尺寸进行限定。
为便于理解,本申请实施例以体渲染容器(例如,体渲染容器22b)为立方体为例进行说明,实际上,体渲染容器还可以为除立方体之外的其他形状(例如,圆柱体、三角体)。应当理解,本申请实施例不对体渲染容器的容器形状进行限定。
进一步地,终端设备20b可以在体渲染对象22a和体渲染容器22b所属的立体空间(例如,三维空间)中获取针对体渲染对象22a的检测射线22c,检测射线22c的射线起点为目标位置点23a。检测射线22c与体渲染容器22b相交,检测射线22c经过体渲染容器22b的位置点为边界开始位置点23b和边界结束位置点23c,换言之,检测射线22c与体渲染容器22b相交于边界开始位置点23b和边界结束位置点23c,检测射线22c与体渲染容器22b在边界开始位置点23b的相交时间早于检测射线22c与体渲染容器22b在边界结束位置点23c的相交时间。
进一步地,如图2所示,终端设备20b可以在边界开始位置点23b上确定与检测射线22c垂直的体积切面(例如,体积切面24a),对体积切面24a和监测射线22c的检测交点(即边界开始位置点23b)进行碰撞检测,生成边界开始位置点23b对应的碰撞检测结果。其中,与检测射线22c垂直的体积切面可以为无穷大的平面,也可以为任意形状的平面,本申请实施例不对体积切面的具体形状和具体大小进行限定,为便于理解,本申请实施例以体积切面(例如,体积切面24a)为矩形为例进行说明。
进一步地,若边界开始位置点23b对应的碰撞检测结果指示碰撞检测成功,则终端设备20b可以将检测交点(即边界开始位置点23b)确定为检测射线22c针对体渲染对象22a的碰撞位置点,即边界开始位置点23b为检测射线22c和体渲染对象22a相交的首个位置点。
可选的,如图2所示,若边界开始位置点23b对应的碰撞检测结果指示碰撞检测失败,则终端设备20b可以沿边界开始位置点23b向边界结束位置点23c对体积切面24a进行规则移动,得到移动后的体积切面(即体积切面24b),继续基于体积切面24b和检测射线22c进行碰撞检测,以此类推,直到在检测射线22c上确定碰撞位置点(例如,碰撞位置点23e)。其中,基于体积切面24b和检测射线22c进行碰撞检测的具体过程可以参见下述图3所对应实施例中对步骤S104的描述。
由此可见,本申请实施例可以在获取针对体渲染对象的检测射线之后,确定检测射线经过体渲染对象所属的体渲染容器的边界开始位置点和边界结束位置点,基于在检测射线上所确定的与检测射线垂直的体积切面,依次对边界开始位置点和边界结束位置点之间的位置点进行碰撞检测,直到在检测射线上确定检测射线针对体渲染对象的碰撞位置点,或者在边界开始位置点和边界结束位置点之间的位置点中不存在检测射线针对体渲染对象的碰撞位置点,从而可以实现对体渲染对象进行碰撞检测,体渲染对象即为体积重建的模型,进而在对体积重建的模型进行碰撞检测时,可以提高碰撞检测的效率和碰撞检测的准确性。
进一步地,请参见图3,图3是本申请实施例提供的一种体渲染碰撞检测方法的流程示意图。该方法可以由服务器执行,也可以由终端设备执行,还可以由服务器和终端设备共同执行,该服务器可以为上述图2所对应实施例中的服务器20a,该终端设备可以为上述图2所对应实施例的终端设备20b。其中,该体渲染碰撞检测方法可以包括以下步骤S101-步骤S104:
步骤S101,获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;
具体的,计算机设备可以响应操作组件针对立体空间的触发操作,获取触发操作在立体空间中的触发位置和触发方向。其中,立体空间用于显示体渲染容器;触发位置在体渲染容器之外。进一步地,计算机设备可以将触发位置作为目标位置点,将触发方向作为射线方向。进一步地,计算机设备可以将从目标位置点开始沿射线方向的射线确定为针对体渲染对象的检测射线。进一步地,计算机设备可以确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点。其中,体渲染容器包含体渲染对象,本申请实施例不对体渲染容器的大小进行限定,本申请实施例不对体渲染容器的形状进行限定。
其中,操作组件可以为鼠标,立体空间可以为三维空间,触发位置可以为三维坐标(即触发位置是由三个位置参数所确定的),触发方向可以为三维方向(即触发方向是由三个方向参数所确定的),触发操作可以为点击操作。此时,计算机设备可以获取鼠标在屏幕上的点击操作,获取点击操作在三维空间中的三维坐标和三维方向,三维坐标可以为点击操作在屏幕上所对应的位置的坐标,三维方向可以为点击操作在屏幕上所显示的方向(即屏幕上的画面所显示的三维空间的方向)。实际上,鼠标在屏幕上的点击操作所对应的坐标为二维坐标,本申请实施例需要将屏幕所对应的二维坐标转换为点击操作在三维空间中的三维坐标。
可以理解的是,计算机设备可以通过操作控制函数(例如,GetPlayerController函数)获取操作控制器(即玩家控制器),通过操作控制器检测目标对象的操作事件(例如,通过操作控制器检测目标对象基于操作组件的触发操作),进而通过触发转换函数(例如,ConvertMouseLocationToWorldSpace函数)获得当前操作组件在立体空间的位置WorldLocation(即触发位置)和立体空间的朝向WorldDirection(即触发方向)。其中,立体空间还可以称之为场景空间,检测射线、体渲染容器和体渲染对象属于同一立体空间(即场景空间),即检测射线、体渲染容器和体渲染对象属于同一坐标空间,本申请实施例不对检测射线、体渲染容器和体渲染对象所属的坐标空间的坐标轴原点的位置进行限定。
其中,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点的具体过程可以描述为:计算机设备可以根据检测射线上的目标位置点,在检测射线上确定第一候选位置点。其中,目标位置点和第一候选位置点之间的距离大于目标位置点沿检测射线到体渲染容器的距离;目标位置点为检测射线的射线起点。进一步地,计算机设备可以根据目标位置点和第一候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界开始位置点。进一步地,计算机设备可以根据边界开始位置点,在检测射线上确定第二候选位置点。其中,边界开始位置点和第二候选位置点之间的距离大于体渲染容器的最大对角线长度。进一步地,计算机设备可以根据边界开始位置点和第二候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界结束位置点。
其中,可以理解的是,计算机设备根据检测射线上的目标位置点确定第一候选位置点的具体过程可以描述为:计算机设备可以对检测射线上的目标位置点沿检测射线到体渲染容器的距离进行沿长处理,得到第一沿长距离(即目标位置点和第一候选位置点之间的距离)。进一步地,计算机设备可以根据第一沿长距离,沿检测射线的射线方向对目标位置点进行移动,得到检测射线上的第一候选位置点。其中,第一候选位置点位于体渲染容器之内,第一沿长距离小于目标位置点沿检测射线到体渲染容器的距离和体渲染容器的最大对角线长度之和,本申请实施例不对第一沿长距离的具体长度进行限定。
可以理解的是,计算机设备可以通过射线碰撞检测函数(例如,LineTraceByChannel函数)进行射线碰撞检测,即对体渲染容器表面进行射线碰撞检测,获得体积射线检测的入口开始位置(即边界开始位置点)。LineTraceByChannel函数支持对面渲染的表面碰撞检测,射线起始位置设置为WorldLocation(即目标位置点),结束位置设置为WorldLocation+(WorldDirection*p1)(即第一候选位置点),其中,p1值(即第一沿长距离)大于WorldLocation沿检测射线距离体渲染容器的长度(即目标位置点沿检测射线到体渲染容器的距离)。LineTraceByChannel函数返回碰撞位置保存为StartLocation(即边界开始位置点)。
可选的,第一候选位置点位于体渲染容器之外,目标位置点和第一候选位置点之间的距离大于目标位置点沿检测射线到体渲染容器的距离和体渲染容器的最大对角线长度之和。此时,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点的具体过程可以描述为:计算机设备可以根据检测射线上的目标位置点,在检测射线上确定第一候选位置点。进一步地,计算机设备可以根据目标位置点和第一候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界开始位置点和检测射线经过体渲染容器的边界结束位置点。换言之,在第一候选位置点位于体渲染容器之外时,目标位置点和第一候选位置点在检测射线上的检测线段与体渲染容器具有两个交点,计算机设备可以将这两个交点分别确定为边界开始位置点和边界结束位置点。
其中,可以理解的是,计算机设备根据边界开始位置点确定第二候选位置点的具体过程可以描述为:计算机设备可以对体渲染容器的最大对角线长度进行沿长处理,得到第二沿长距离(即边界开始位置点和第二候选位置点之间的距离)。进一步地,计算机设备可以根据第二沿长距离,沿检测射线的射线方向对边界开始位置点进行移动,得到检测射线上的第二候选位置点。其中,第二候选位置点位于体渲染容器之外,本申请实施例不对第二沿长距离的具体长度进行限定。
其中,计算机设备可以获取体渲染容器的K条对角线,这里的K可以为正整数,进而获取K条对角线分别对应的对角线长度,将K个对角线长度中的最大对角线长度确定为体渲染容器的最大对角线长度。例如,若体渲染容器为立方体,则体渲染容器的K条对角线分别对应的对角线长度均相等,此时可以将任意一个对角线长度确定为体渲染容器的最大对角线长度。
可选的,在体渲染容器不包括对角线(比如,体渲染容器为圆柱体时,体渲染容器不包括对角线;又比如,体渲染容器为三角体时,体渲染容器不包括对角线)时,计算机设备可以将体渲染容器的截面的最大长度确定为体渲染容器的最大对角线长度。其中,计算机设备可以通过平面对体渲染容器进行截取,得到体渲染容器的至少两个截面(例如,圆柱体的截面可以为矩形或者圆形),获取每个截面分别对应的最大长度(例如,矩形的最大长度可以为对角线的长度,圆形的最大长度可以为圆的直径),进而在至少两个截面分别对应的最大长度中选取最大值,将最大值确定为体渲染容器的最大对角线长度。
可以理解的是,计算机设备可以通过射线碰撞检测函数(例如,LineTraceByChannel函数)进行射线碰撞检测,即对体渲染容器表面进行射线碰撞检测,获得体积射线检测的出口结束位置(即边界结束位置点)。LineTraceByChannel函数支持对面渲染的表面碰撞检测,射线起始位置设置为StartLocation(即边界开始位置点),结束位置设置为StartLocation+(WorldDirection*p2)(即第二候选位置点),其中,p2值(即第二沿长距离)大于体渲染容器的最大对角线长度。LineTraceByChannel函数返回碰撞位置保存为EndLocation(即边界结束位置点)。
其中,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点的具体过程可以参见图4,图4是本申请实施例提供的一种确定边界位置点的场景示意图。如图4所示,检测射线40b经过体渲染容器40a时相交于两个位置点,即检测射线40b经过体渲染容器40a时相交于边界开始位置点和边界结束位置点。此外,为便于理解边界开始位置点和边界结束位置点,这里未显示体渲染容器40a中的体渲染对象。
其中,在检测射线40b上的位置点41a为目标位置点时,位置点41b可以为边界开始位置点,位置点41c可以为边界结束位置点;可选的,在检测射线40b上的位置点41d为目标位置点时,位置点41c可以为边界开始位置点,位置点41b可以为边界结束位置点。为便于理解,这里以位置点41a为目标位置点为例进行说明。
如图4所示,计算机设备可以根据目标位置点41a,在检测射线40b上确定第一候选位置点(例如,第一候选位置点41e),进而根据目标位置点41a和第一候选位置点41e,对检测射线40b和体渲染容器40a进行表面碰撞检测,得到检测射线40b经过体渲染容器40a的边界开始位置点41b。其中,边界开始位置点41b可以为检测射线40b和体渲染容器40a的交点,边界开始位置点41b既位于检测射线40b上,也位于体渲染容器40a上。
进一步地,如图4所示,计算机设备可以根据边界开始位置点41b,在检测射线40b上确定第二候选位置点(例如,第二候选位置点41d),进而根据边界开始位置点41b和第二候选位置点41d,对检测射线40b和体渲染容器40a进行表面碰撞检测,得到检测射线40b经过体渲染容器40a的边界结束位置点41c。其中,边界结束位置点41c可以为检测射线40b和体渲染容器40a的交点,边界结束位置点41c既位于检测射线40b上,也位于体渲染容器40a上。
如图4所示,体渲染容器40a可以包括8个顶点,8个顶点具体可以包括顶点42a、顶点42b、顶点42c、顶点42d、顶点43a、顶点43b、顶点43c和顶点43d,体渲染容器40a可以包括4条对角线,4条对角线具体可以包括顶点42a和顶点43c所构成的对角线,顶点42b和顶点43d所构成的对角线,顶点42c和顶点43a所构成的对角线,以及顶点42d和顶点43b所构成的对角线。由于体渲染容器40a为立方体,顶点42a和顶点43c所构成的对角线,顶点42b和顶点43d所构成的对角线,顶点42c和顶点43a所构成的对角线,以及顶点42d和顶点43b所构成的对角线均相等。此时,计算机设备可以直接确定体渲染容器40a的最大对角线长度(例如,顶点42c和顶点43a所构成的对角线的对角线长度)。
步骤S102,在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;
具体的,计算机设备可以根据边界开始位置点(即体积切面的起始点)和检测射线的射线方向(即体积切面的朝向),在立体空间中确定第一裁切面。其中,立体空间用于显示体渲染容器。进一步地,计算机设备可以将第一裁切面确定为在边界开始位置点上与检测射线垂直的体积切面。进一步地,计算机设备可以对体积切面和检测射线的检测交点(即边界开始位置点)进行碰撞检测,生成检测交点(即边界开始位置点)对应的碰撞检测结果。其中,边界开始位置点对应的碰撞检测结果可以称之为第一碰撞检测结果。
可以理解的是,计算机设备可以通过切面设置函数(例如,SetActorLocationAndRotation函数)设置体积切面(即ClipPlane)的位置为StartLocation(即边界开始位置点),设置体积切面(即ClipPlane)的旋转为WorldDirection(即射线方向)。体积切面的作用是沿着检测射线裁切体渲染对象,此时不会渲染体积切面背向空间的体积,背向空间指的是体积切面面对画面捕捉组件的背后,换言之,体积切面的背后的体素会被隐藏,即体积切面的背后的体素不会被渲染。
其中,计算机设备对体积切面和检测射线的检测交点进行碰撞检测的具体过程,可以参见下述图6所对应实施例中对步骤S1022-步骤S1025的描述。
可以理解的是,计算机设备可以基于检测交点对应的碰撞检测结果执行下述步骤S103或步骤S104。其中,若碰撞检测结果指示碰撞检测成功,则计算机设备可以执行下述步骤S103;可选的,若碰撞检测结果指示碰撞检测失败,则计算机设备可以执行下述步骤S104。
步骤S103,若检测交点对应的碰撞检测结果指示碰撞检测成功,则将检测交点确定为检测射线针对体渲染对象的碰撞位置点;
步骤S104,若检测交点对应的碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。
其中,计算机设备沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测的具体过程可以描述为:计算机设备可以获取与边界开始位置点和边界结束位置点相关联的最大循环次数。进一步地,计算机设备可以获取体积切面对应的步进次数,对体积切面对应的步进次数进行累加处理,得到累加步进次数。进一步地,若累加步进次数小于或等于最大循环次数,则计算机设备可以根据检测射线对应的检测步长和累加步进次数,沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面。其中,移动后的体积切面对应的步进次数为累加步进次数。进一步地,计算机设备可以对移动后的体积切面和检测射线的检测交点进行碰撞检测。可选的,若累加步进次数大于最大循环次数,则计算机设备可以结束检测射线针对体渲染对象的碰撞检测,即确定不存在检测射线和体渲染对象的交点,即检测射线针对体渲染对象的碰撞检测失败。
其中,计算机设备可以确定边界开始位置点和边界结束位置点之间的位置点距离。进一步的,计算机设备可以根据位置点距离和检测步长,确定最大循环次数(即步进检测最大循环次数、最大检测循环次数)。其中,计算机设备可以通过位置点距离除以检测步长,将除数确定为最大循环次数。例如,位置点距离等于23厘米,检测步长等于4厘米,此时,最大循环次数可以等于5厘米。
可以理解的是,计算机设备可以通过距离函数(例如,Distance函数)计算检测射线穿过体渲染容器的长度(即位置点距离),Distance函数的输入为Vector,Vector可以包括入参V1和入参V2,入参V1可以为StartLocation(即边界开始位置点),入参V2可以为EndLocation(即边界结束位置点),Distance函数的返回值为DistanceFloat(即位置点距离)。此时,ListIndex=DistanceFloat/StepLength,ListIndex表示最大循环次数,DistanceFloat表示位置点距离,StepLength表示检测步长。其中,检测步长可以影像检测精度,可选的,检测步长可以小于影像数据(即体渲染对象)的像素间距值。
其中,在同一组数据集中的像素间距值是相同的,不同的数据集可以对应于不同的像素间距值,即不同的体渲染对象可以对应于不同的像素间距值。其中,像素间距值可以用于确定体渲染对象在现实环境中的参数对比,即通过像素间距值和像素距离确定体渲染对象中的长度对应于现实环境中的实际长度。应当理解,本申请实施例不对像素间距值的具体取值进行限定,本申请实施例不对检测步长的具体取值进行限定。
其中,对移动后的体积切面和检测射线的检测交点进行碰撞检测的具体过程,可以参见下述图6所对应实施例中对体积切面和检测射线的检测交点进行碰撞检测的描述。
可以理解的是,本申请实施例可以将体积切面对应的步进次数初始化为0,对体积切面对应的步进次数进行累加处理所得到的累加步进次数可以为1,即移动后的体积切面对应的步进次数可以为1。
其中,可以理解的是,计算机设备根据检测射线对应的检测步长和累加步进次数,沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面的具体过程可以描述为:计算机设备可以将检测射线对应的检测步长和累加步进次数的乘积确定为切面移动距离。进一步地,计算机设备可以根据切面移动距离,沿边界开始位置点向边界结束位置点对边界开始位置点进行移动,得到检测射线上的移动位置点。进一步地,计算机设备可以根据移动位置点(即移动后的体积切面的起始点)和检测射线的射线方向(即移动后的体积切面的朝向),在立体空间中确定第二裁切面。其中,立体空间用于显示体渲染容器。进一步地,计算机设备可以将第二裁切面确定为对体积切面进行规则移动所得到的移动后的体积切面。
可以理解的是,计算机设备可以对移动后的体积切面和检测射线的检测交点(即移动位置点)进行碰撞检测,得到移动位置点对应的碰撞检测结果。其中,移动位置点对应的碰撞检测结果可以称之为第二碰撞检测结果。其中,若第二碰撞检测结果指示碰撞检测成功,则将移动位置点确定为检测射线针对体渲染对象的碰撞位置点;可选的,若第二碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对移动后的体积切面进行规则移动,得到更新体积切面,继续基于更新体积切面和检测射线进行碰撞检测。
其中,可以理解的是,计算机设备沿边界开始位置点向边界结束位置点对移动后的体积切面进行规则移动,得到更新体积切面,继续基于更新体积切面和检测射线进行碰撞检测的具体过程可以描述为:计算机设备可以获取与边界开始位置点和边界结束位置点相关联的最大循环次数。进一步地,计算机设备可以获取移动后的体积切面对应的步进次数,对移动后的体积切面对应的步进次数进行累加处理,得到更新步进次数。进一步地,若更新步进次数小于或等于最大循环次数,则计算机设备可以根据检测射线对应的检测步长和更新步进次数,沿边界开始位置点向边界结束位置点对移动后的体积切面进行规则移动,得到更新体积切面。其中,更新体积切面对应的步进次数为更新步进次数。进一步地,计算机设备可以对更新体积切面和检测射线的检测交点进行碰撞检测。可选的,若更新步进次数大于最大循环次数,则计算机设备可以结束检测射线针对体渲染对象的碰撞检测。
其中,可以理解的是,计算机设备根据检测射线对应的检测步长和更新步进次数,沿边界开始位置点向边界结束位置点对移动后的体积切面进行规则移动,得到更新体积切面的具体过程可以描述为:计算机设备可以将检测射线对应的检测步长和更新步进次数的乘积确定为更新切面移动距离。进一步地,计算机设备可以根据更新切面移动距离,沿边界开始位置点向边界结束位置点对边界开始位置点进行移动,得到检测射线上的更新移动位置点。进一步地,计算机设备可以根据更新移动位置点(即更新体积切面的起始点)和检测射线的射线方向(即更新体积切面的朝向),在立体空间中确定第三裁切面。进一步地,计算机设备可以将第三裁切面确定为对移动后的体积切面进行规则移动所得到的更新体积切面。
可选的,计算机设备沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测的具体过程可以描述为:计算机设备可以获取体积切面对应的步进次数,对体积切面对应的步进次数进行累加处理,得到累加步进次数。进一步地,计算机设备可以将检测射线对应的检测步长和累加步进次数的乘积确定为切面移动距离。进一步地,根据切面移动距离,沿边界开始位置点向边界结束位置点对边界开始位置点进行移动,得到检测射线上的移动位置点。进一步地,若移动位置点位于边界开始位置点和边界结束位置点之间,则计算机设备可以根据移动位置点和检测射线的射线方向,在立体空间中确定第二裁切面。其中,立体空间用于显示体渲染容器。进一步地,计算机设备可以将第二裁切面确定为对体积切面进行规则移动所得到的移动后的体积切面。其中,移动后的体积切面对应的步进次数为累加步进次数。进一步地,计算机设备可以对移动后的体积切面和检测射线的检测交点进行碰撞检测。可选的,若移动位置点不位于边界开始位置点和边界结束位置点之间,则计算机设备可以结束检测射线针对体渲染对象的碰撞检测。
可以理解的是,体积切面对应的步进次数和移动后的体积切面对应的步进次数(即累加步进次数)还可以统称为循环起止值(即ThisIndex),根据触发方向、累加步进次数、检测步长和边界开始位置点,确定移动位置点的过程可以参见等式StepLocation=WorldDirection*ThisIndex*StepLength+StartLocation,WorldDirection表示触发方向,ThisIndex表示累加步进次数(或步进次数),StepLength表示检测步长,StartLocation表示边界开始位置点,StepLocation表示移动位置点(即当前检测坐标)。
其中,对体积切面对应的步进次数进行累加处理的具体过程可以为对体积切面对应的步进次数进行自增,即将1和体积切面对应的步进次数确定为累加步进次数,ThisIndex=ThisIndex+1,等式左边的ThisIndex可以表示累加步进次数(即移动后的体积切面对应的步进次数),等式右边的ThisIndex可以表示体积切面对应的步进次数。
同理,计算机设备可以通过切面设置函数(例如,SetActorLocation函数)设置移动后的体积切面(即ClipPlane)的位置为StepLocation(即移动位置点),此时,移动后的体积切面的朝向保持不变,即移动后的体积切面的旋转为WorldDirection(即射线方向)。
为便于理解,请参见图5a和图5b,图5a和图5b是本申请实施例提供的一种确定碰撞位置点的场景示意图。如图5a所示,体渲染容器50a中可以包括体渲染对象50c,体渲染容器50a是由体渲染对象50c所确定的,检测射线50b经过体渲染容器50a的边界开始位置点可以为位置点51a,检测射线50b经过体渲染容器50a的边界结束位置点可以为位置点51c。在通过检测射线50b针对体渲染对象50c进行碰撞检测之后,可以确定检测射线50b针对体渲染对象50c的碰撞位置点可以为位置点51b。
其中,在边界开始位置点51a和边界结束位置点51c之间确定碰撞位置点的具体过程可以参见图5b,如图5b所示的检测射线50b可以为图5a所对应实施例中的检测射线50b,如图5b所示的边界开始位置点51a可以为图5a所对应实施例中的边界开始位置点51a,如图5b所示的边界结束位置点51c可以为图5a所对应实施例中的边界结束位置点51c。
如图5b所示,检测射线50b上的目标位置点可以为位置点52a,在边界开始位置点51a上的体积切面可以为体积切面53a,对体积切面53a和检测射线50b的检测交点51a(即边界开始位置点51a)进行碰撞检测,可以生成检测交点51a对应的碰撞检测结果。可以理解的是,在检测交点51a对应的碰撞检测结果指示碰撞检测成功时,可以将检测交点51a确定为碰撞位置点;可选的,在检测交点51a对应的碰撞检测结果指示碰撞检测失败时,可以对体积切面53a进行规则移动。为便于理解,这里假设检测交点51a对应的碰撞检测结果指示碰撞检测失败。
进一步地,如图5b所示,计算机设备可以沿边界开始位置点51a向边界结束位置点51c对体积切面53a进行规则移动,得到移动后的体积切面53a(即体积切面53b),对体积切面53b和检测射线50b的检测交点51d进行碰撞检测,可以生成检测交点51d对应的碰撞检测结果。可以理解的是,在检测交点51d对应的碰撞检测结果指示碰撞检测成功时,可以将检测交点51d确定为碰撞位置点;可选的,在检测交点51d对应的碰撞检测结果指示碰撞检测失败时,可以对体积切面53b进行规则移动。为便于理解,这里假设检测交点51d对应的碰撞检测结果指示碰撞检测失败。
进一步地,如图5b所示,计算机设备可以沿边界开始位置点51a向边界结束位置点51c对体积切面53b进行规则移动,得到移动后的体积切面53b(即体积切面53c),对体积切面53c和检测射线50b的检测交点51b进行碰撞检测,可以生成检测交点51b对应的碰撞检测结果。可以理解的是,在检测交点51b对应的碰撞检测结果指示碰撞检测成功时,可以将检测交点51b确定为碰撞位置点;可选的,在检测交点51b对应的碰撞检测结果指示碰撞检测失败时,可以对体积切面53c进行规则移动。为便于理解,这里假设检测交点51b对应的碰撞检测结果指示碰撞检测成功。因此,计算机设备可以将检测交点51b确定为检测射线50b针对体渲染对象50c的碰撞位置点。
在本申请实施例中,计算机设备可以获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点,进而在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果。其中,体渲染容器包含体渲染对象。进一步地,若检测交点对应的碰撞检测结果指示碰撞检测成功,则计算机设备可以将检测交点确定为检测射线针对体渲染对象的碰撞位置点。可选的,若检测交点对应的碰撞检测结果指示碰撞检测失败,则计算机设备可以沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。由此可见,本申请实施例提出了一种体渲染(即体积渲染、体积重建)碰撞检测方法,该方法可以解决体积渲染无法进行碰撞检测的问题,通过在检测射线上不断构建体积切面来对检测射线和体渲染对象(即体积重建的模型)进行碰撞检测,从而实现直接在体渲染对象上进行射线碰撞检测,得到检测射线针对体渲染对象的碰撞位置点。由于体积重建相比于表面重建而言效果更加的细腻,所以在效果细腻的体渲染对象上所检测到的碰撞位置点可以提高碰撞检测的准确度。此外,体积重建相比于表面重建而言构建速度更加快,所以在构建速度快的体渲染对象上所检测到的碰撞位置点可以提高碰撞检测的效率。
可选的,操作组件针对立体空间的触发位置也可以在体渲染容器之上,此时,目标位置点和边界开始位置点为同一个位置点,即目标位置点和边界开始位置点重合。此时,基于边界开始位置点(即目标位置点)和边界结束位置点,对检测射线和体渲染对象进行碰撞检测的具体过程,可以参见上述图3所对应实施例中基于边界开始位置点和边界结束位置点,对检测射线和体渲染对象进行碰撞检测的描述,这里将不再进行赘述。
可选的,操作组件针对立体空间的触发操作还可以在体渲染容器之内,此时,计算机设备可以确定检测射线经过体渲染容器的边界结束位置点。其中,检测射线不存在与体渲染容器相交的边界开始位置点。进一步地,计算机设备可以在目标位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点(即目标位置点)进行碰撞检测,生成检测交点(即目标位置点)对应的碰撞检测结果。进一步地,若检测交点(即目标位置点)对应的碰撞检测结果指示碰撞检测成功,则将检测交点(即目标位置点)确定为检测射线针对体渲染对象的碰撞位置点。可选的,若检测交点(即目标位置点)对应的碰撞检测结果指示碰撞检测失败,则沿目标位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。此时,基于目标位置点和边界结束位置点,对检测射线和体渲染对象进行碰撞检测的具体过程,可以参见上述图3所对应实施例中基于边界开始位置点和边界结束位置点,对检测射线和体渲染对象进行碰撞检测的描述,这里将不再进行赘述。
进一步地,请参见图6,图6是本申请实施例提供的一种体渲染碰撞检测方法的流程示意图。该体渲染碰撞检测方法可以包括以下步骤S1021-步骤S1025,且步骤S1021-步骤S1025为图3所对应实施例中步骤S102的一个具体实施例。
步骤S1021,在边界开始位置点上确定与检测射线垂直的体积切面;
可以理解的是,检测射线可以为体积切面的法线,检测射线和体积切面相交于边界开始位置点。其中,与检测射线垂直的体积切面可以为无穷大的平面,也可以为任意形状的平面,本申请实施例不对体积切面的具体形状和具体大小进行限定,为便于理解,本申请实施例以体积切面(例如,上述图5b所对应实施例中的体积切面53a)为矩形为例进行说明。
其中,在边界开始位置点上确定与检测射线垂直的体积切面的具体过程可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再进行赘述。
步骤S1022,获取画面捕捉组件在体积切面和检测射线的检测交点上所拍摄的线性颜色数据;
具体的,计算设备可以获取画面捕捉组件在检测射线上所拍摄的线性颜色数据集合。其中,线性颜色集合包括画面捕捉组件在检测射线上所拍摄的S个线性颜色数据,这里的S可以为正整数。进一步地,计算机设备可以通过体积切面对S个线性颜色数据进行裁切,在S个线性颜色数据中确定体积切面和检测射线的检测交点上的线性颜色数据。
应当理解,计算机设备可以在立体空间中创建画面捕捉组件。其中,画面捕捉组件的位置为检测射线上的目标位置点,画面捕捉组件的拍摄方向为检测射线的射线方向;目标位置点为检测射线的射线起点,立体空间用于显示体渲染容器。进一步地,计算机设备可以将画面捕捉组件的捕捉画布设置为目标尺寸。其中,目标尺寸与线性颜色数据集合中的每个线性颜色数据所对应的体素的体素尺寸相匹配。
换言之,计算机设备可以在WorldLocation(即目标位置点)的坐标位置创建画面捕捉组件(例如,2D CaptureComponent),并将WorldDirection(即射线方向)设置为2DCaptureComponent的旋转值,即将2D CaptureComponent的朝向设置为检测射线的朝向,将2D CaptureComponent的的位置设置为目标位置点。其中,2D CaptureComponent是虚幻引擎的场景2D画面捕捉组件,2DCaptureComponent可以理解为一个摄像机,即2DCaptureComponent可以为处于3D空间中的用于捕捉2D画面的摄像机。
其中,射线方向可以为三维方向,三维方向表示射线方向是由三个旋转值所构成的,计算机设备可以将射线方向的三个旋转值设置为画面捕捉组件的旋转值,例如,将射线方向沿着X向量的旋转值设置为画面捕捉组件在X向量的旋转值。
与此同时,计算机设备可以将2D CaptureComponent的RenderTarget(渲染目标)画布(即捕捉画布,还可以称之为渲染画布)设置为目标尺寸(例如,1px*1px),RenderTarget画布表示2D CaptureComponent所捕捉到的画面的大小,2DCaptureComponent所捕捉到的画面是二维的。线性颜色数据所对应的体素的体素尺寸(例如,1px*1px*1px)与目标尺寸相匹配。
可以理解的是,计算机设备可以通过渲染目标像素读取函数(例如,ReadRenderTargetRawPixel函数)从半透明缓冲区中读取2D CaptureComponent中RenderTarget的LinearColor数据(即线性颜色数据),进而从LinearColor中获取不透明度opacity值(即检测交点对应的透明度值),opacity值可以表示体素的不透明度。其中,由于线性颜色数据是从半透明缓冲区中所读取到的,所以线性颜色数据是从半透明缓冲区数据中所读取到的数据。
可选的,计算机设备也可以在获取画面捕捉组件所拍摄的S个线性颜色数据之后,在S个线性颜色数据中直接获取体积切面和检测射线的检测交点所对应的线性颜色数据。可选的,计算机设备还可以通过画面捕捉组件直接拍摄体积切面和检测射线的检测交点所对应的线性颜色数据。
同理,计算机设备可以获取画面捕捉组件在移动后的体积切面和检测射线的检测交点上所拍摄的线性颜色数据:计算设备可以获取画面捕捉组件在检测射线上所拍摄的线性颜色数据集合。其中,线性颜色集合包括画面捕捉组件在检测射线上所拍摄的S个线性颜色数据。进一步地,计算机设备可以通过移动后的体积切面对S个线性颜色数据进行裁切,在S个线性颜色数据中确定移动后的体积切面和检测射线的检测交点上的线性颜色数据。
步骤S1023,从线性颜色数据中获取检测交点对应的透明度值,将透明度值与透明度阈值进行比较,得到透明度比较结果;
其中,线性颜色数据集合可以包括画面捕捉组件在检测射线上所拍摄的S个透明度值,即S个线性颜色数据可以表示S个透明度值,在体积切面和检测射线的检测交点上所拍摄的线性颜色数据可以表示在体积切面和检测射线的检测交点上的体积元素所对应的透明度值。
可选的,线性颜色数据也可以包括画面捕捉组件在检测射线上所拍摄的S个RGBA(Red(红色)、Green(绿色)、Blue(蓝色)、和Alpha(透明度))颜色数据,即S个线性颜色数据可以表示S个RGBA颜色数据,在体积切面和检测射线的检测交点上所拍摄的线性颜色数据可以表示在体积切面和检测射线的检测交点上的体积元素所对应的RGBA颜色数据,透明度值可以为RGBA颜色数据中的Alpha(透明度),即计算机设备可以将检测交点对应的RGBA颜色数据中的Alpha(透明度)确定为检测交点对应的透明度值。其中,Alpha(透明度)的取值范围在0.0~1.0之间,0.0表示体积元素完全透明,1.0表示体积元素完全不透明。
可选的,线性颜色数据也可以包括画面捕捉组件在检测射线上所拍摄的S个RGB颜色数据,即S个线性颜色数据可以表示S个RGB颜色数据,在体积切面和检测射线的检测交点上所拍摄的线性颜色数据可以表示在体积切面和检测射线的检测交点上的体积元素所对应的RGB颜色数据,计算机设备可以根据RGB颜色数据确定检测交点对应的透明度值。
其中,本申请实施例不对透明度阈值的具体取值进行限定,例如,透明度阈值可以等于0.5。
可以理解的是,计算机设备可以基于透明度比较结果执行下述步骤S1024或步骤S1025。其中,若透明度比较结果指示透明度值大于透明度阈值,则计算机设备可以执行下述步骤S1024;可选的,若透明度比较结果指示透明度值小于或等于透明度阈值,则计算机设备可以执行下述步骤S1025。
步骤S1024,若透明度比较结果指示透明度值大于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测成功;
换言之,若透明度比较结果指示透明度值大于透明度阈值(即检测到不透明像素),则计算机设备可以生成用于指示碰撞检测成功的碰撞检测结果,返回碰撞检测成功状态和碰撞位置点(即StepLocation)。
步骤S1025,若透明度比较结果指示透明度值小于或等于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测失败。
换言之,若透明度比较结果指示透明度值小于或等于透明度阈值(即未检测到不透明像素),则计算机设备可以生成用于指示碰撞检测失败的碰撞检测结果,返回碰撞检测失败状态。
本申请实施例可以在边界开始位置点上确定与检测射线垂直的体积切面,进而获取画面拍摄组件在体积切面和检测射线的检测交点上所拍摄的线性颜色数据,从线性颜色数据中获取检测交点对应的透明度值,将透明度值与透明度阈值进行比较,得到透明度比较结果。可以理解的是,若透明度比较结果指示透明度值大于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测成功;可选的,若透明度比较结果指示透明度值小于或等于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测失败。由此可见,由于三维重建体渲染中有许多半透明体素,本申请实施例可以支持自定义阈值(即透明度阈值)穿过半透明体素,检测到内部体素空间的坐标(即检测到内部的组织),使得透明度低的体素不会被错误检测为碰撞位置点。例如,医学三维重建体渲染中可以有许多半透明体素,这些半透明体素可以是由血液等生成的。因此,本申请实施例在受到半透明像素干扰时仍然可以进行射线穿透检测,避免受到场景中细小半透明体素(即细碎半透明体素)的干扰,从而提高碰撞检测的质量,此外,由于直接基于半透明缓冲区数据进行碰撞检测,本申请实施例可以提高碰撞检测的效率。
为便于理解,请参见图7a和图7b,图7a和图7b是本申请实施例提供的一种体渲染碰撞检测的流程示意图。如图7a所示,计算机设备可以执行步骤S11,通过步骤S11获取鼠标(即操作组件)屏幕点击位置,进而将屏幕点击位置转换为场景空间与朝向,换言之,计算机设备可以响应操作组件针对立体空间的触发操作,将触发操作转换为场景空间(即立体空间)与朝向(即触发方向),即获取触发操作在立体空间中的触发位置和触发方向,进而将触发位置作为目标位置点,将触发方向作为射线方向,在立体空间中将从目标位置点开始沿射线方向的射线确定为针对体渲染对象的检测射线。
进一步地,如图7a所示,计算机设备可以执行步骤S12,通过步骤S12创建并设置画面捕捉组件的位置与朝向,这里可以将操作组件的触发操作所对应的触发位置确定为画面捕捉组件的位置(即画面捕捉组件的位置为检测射线上的目标位置点),将触发操作所对应的触发方向确定为画面捕捉组件的方向(即画面捕捉组件的拍摄方向为检测射线的射线方向)。与此同时,计算机设备还可以将画面捕捉组件的捕捉画布设置为目标尺寸,以使画面捕捉组件可以在后续步骤中拍摄在检测射线上的体素所对应的线性颜色数据。其中,由于目标尺寸和体素的体素尺寸是相匹配的,所以通过画面捕捉组件可以拍摄得到检测射线上的体素。
进一步地,如图7a所示,计算机设备可以执行步骤S13,通过步骤S13获取体渲染容器表面射线检测碰撞入口位置,换言之,计算机设备可以根据检测射线上的目标位置点,在检测射线上确定第一候选位置点,进而根据目标位置点和第一候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界开始位置点(即体渲染容器表面射线检测碰撞入口位置)。其中,检测射线上的第一候选位置点是根据第一沿长距离,沿检测射线的射线方向对目标位置点进行移动所得到的,第一沿长距离大于检测射线上的目标位置点沿检测射线到体渲染容器的距离。
进一步地,如图7a所示,计算机设备可以执行步骤S14,通过步骤S14获取体渲染容器表面射线检测碰撞出口位置,换言之,计算机设备可以根据边界开始位置点,在检测射线上确定第二候选位置点,进而根据边界开始位置点和第二候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界结束位置点(即体渲染容器表面射线检测碰撞出口位置)。其中,检测射线上的第二候选位置点是根据第二沿长距离,沿检测射线的射线方向对边界开始位置点进行移动所得到的,第二沿长距离大于体渲染容器的最大对角线长度。
进一步地,如图7a所示,计算机设备可以执行步骤S15,通过步骤S15设置体积切面起始点与朝向,其中,体积切面的起始点可以为边界开始位置点,体积切面的终止点可以为边界结束位置点、或者边界开始位置点和边界结束位置点之间的任意一个位置点,体积切面的朝向可以为触发操作所对应的触发方向(即检测射线的射线方向)。其中,体积切面的终止点是在对检测射线上的检测交点进行碰撞检测的过程中所确定的。在碰撞检测成功时,可以将边界开始位置点和边界结束位置点之间的碰撞检测成功的检测交点确定为体积切面的终止点;可选的,在碰撞检测失败时,可以将边界结束位置点确定为体积切面的终止点。
进一步地,如图7a所示,计算机设备可以执行步骤S16,通过步骤S16计算步进检测最大循环次数(即最大循环次数),进而基于步进检测最大循环次数和当前步进数执行步骤S17,通过步骤S17进入循环步进检测逻辑。其中,步骤S17的具体过程可以参见下述图7b所对应实施例的描述。其中,最大循环次数是由边界开始位置点和边界结束位置点所确定的,根据边界开始位置点和边界结束位置点之间的位置点距离和本申请实施例所设定的检测步长,可以确定最大循环次数。
进一步地,如图7a所示,计算机设备可以执行步骤S18,通过步骤S18输出最终检测结果的成功状态与碰撞位置,即在检测交点(这里的检测交点可以为步骤S17的循环步骤中的任意一个检测交点,例如,在边界开始位置点上所确定的体积切面和检测射线的检测交点)对应的碰撞检测结果指示碰撞检测成功时,输出碰撞检测成功状态(即最终检测结果的成功状态)和碰撞位置点(即碰撞位置)。可选的,在检测交点(这里的检测交点可以为步骤S17的循环步骤中的所有检测交点)对应的碰撞检测结果均指示碰撞检测失败时,输出碰撞检测失败状态(即最终检测结果的失败状态)。
如图7b所示,在步骤S17中,计算机设备可以执行步骤S171,通过步骤S171将当前步进数(例如,累加步进次数)和最大循环次数比较大小,若当前步进数小于或等于最大循环次数(即当前步进数不大于最大循环次数),则执行步骤S172,在步骤S172中,通过当前步进数计算检测坐标位置(即移动位置点),进而执行步骤S173,通过步骤S173设置体积切面位置为当前检测坐标位置(即移动位置点),即根据检测射线对应的检测步长和累加步进次数,沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面。
其中,在步骤S172中,计算机设备可以将检测射线对应的检测步长和累加步进次数的乘积确定为切面移动距离,进而根据切面移动距离,沿边界开始位置点向边界结束位置点对边界开始位置点进行移动,得到检测射线上的移动位置点。在步骤S173中,计算机设备可以根据移动位置点和检测射线的射线方向,在立体空间中确定第二裁切面,进而将第二裁切面确定为对体积切面进行规则移动所得到的移动后的体积切面。
可选的,若当前步进数大于最大循环次数,则表示检测射线针对体渲染对象未检测到碰撞,返回碰撞检测失败状态。即确定在检测交点(这里的检测交点可以为步骤S17的循环步骤中的所有检测交点)对应的碰撞检测结果均指示碰撞检测失败,输出碰撞检测失败状态(即最终检测结果的失败状态)。
进一步地,如图7b所示,计算机设备可以执行步骤S174,通过步骤S174读取画面捕捉组件原始像素透明度值,即获取画面捕捉组件在检测射线上所拍摄的线性颜色数据集合,通过移动后的体积切面对线性颜色数据集合中的S个线性颜色数据进行裁切,在S个线性颜色数据中确定移动后的体积切面和检测射线的检测交点上的线性颜色数据,进而从移动后的体积切面和检测射线的检测交点上的线性颜色数据中获取相应的检测交点对应的透明度值(即原始像素透明度值)。
进一步地,如图7b所示,计算机设备可以执行步骤S175,通过步骤S175将透明度值(即移动后的体积切面和检测射线的检测交点对应的透明度值)和自定义阈值(即透明度阈值)比较大小。可以理解的是,若透明度值大于透明度阈值,则表示检测射线针对体渲染对象检测到碰撞位置,返回碰撞检测成功状态和碰撞位置点(即移动后的体积切面和检测射线的检测交点)。
可选的,若透明度值小于或等于透明度阈值(即透明度值不大于透明度阈值),则表示检测射线在当前检测交点(即移动后的体积切面和检测射线的检测交点)针对体渲染对象未检测到碰撞位置,从而对当前步进数(即累加步进次数)进行累加处理,得到更新步进次数,进而将累加处理后的当前步进数(即更新步进次数)和最大循环次数继续执行步骤S171中比较大小的步骤。
其中,基于更新步进次数和最大循环次数执行步骤S171-步骤S174的具体过程,可以参见上述基于累加步进次数和最大循环次数执行步骤S171-步骤S174的描述,这里将不再进行赘述。
可选的,如图7b所示,在步骤S17中,若体积切面为边界开始位置点上的体积切面,则计算机设备可以确定当前步进数(即边界开始位置点上的体积切面对应的步进次数)小于或等于最大循环次数,从而无需执行步骤S171-步骤S173,而是直接执行步骤S174,通过步骤S174读取画面捕捉组件原始像素透明度值,即获取画面捕捉组件在检测射线上所拍摄的线性颜色数据集合,通过体积切面(即边界开始位置点上的体积切面)对线性颜色数据集合中的S个线性颜色数据进行裁切,在S个线性颜色数据中确定体积切面和检测射线的检测交点上的线性颜色数据,进而从体积切面和检测射线的检测交点上的线性颜色数据中获取相应的检测交点对应的透明度值(即原始像素透明度值)。进一步地,如图7b所示,计算机设备可以执行步骤S175,通过步骤S175将透明度值(即体积切面和检测射线的检测交点对应的透明度值)和自定义阈值(即透明度阈值)比较大小。可以理解的是,若透明度值大于透明度阈值,则表示检测射线针对体渲染对象检测到碰撞位置,返回碰撞检测成功状态和碰撞位置点(即体积切面和检测射线的检测交点)。可选的,若透明度值小于或等于透明度阈值(即透明度值不大于透明度阈值),则表示检测射线在当前检测交点(即体积切面和检测射线的检测交点)针对体渲染对象未检测到碰撞位置,从而对当前步进数(即边界开始位置点上的体积切面对应的步进次数)进行累加处理,得到累加步进次数,进而将累加处理后的当前步进数(即累加步进次数)和最大循环次数继续执行步骤S171中比较大小的步骤。
进一步地,请参见图8,图8是本申请实施例提供的一种体渲染碰撞检测装置的结构示意图,该体渲染碰撞检测装置1可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如,该体渲染碰撞检测装置1为一个应用软件,该体渲染碰撞检测装置1可以用于执行本申请实施例提供的方法中的相应步骤。该体渲染碰撞检测装置1可以包括:位置点确定模块11,碰撞检测模块12,碰撞点确定模块13,切面移动模块14;
位置点确定模块11,用于获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;体渲染容器包含体渲染对象;
其中,位置点确定模块11包括:操作响应单元111,射线确定单元112,第一碰撞单元113,第二碰撞单元114;
操作响应单元111,用于响应操作组件针对立体空间的触发操作,获取触发操作在立体空间中的触发位置和触发方向;立体空间用于显示体渲染容器;触发位置在体渲染容器之外;
射线确定单元112,用于将触发位置作为目标位置点,将触发方向作为射线方向;
射线确定单元112,用于将从目标位置点开始沿射线方向的射线确定为针对体渲染对象的检测射线。
第一碰撞单元113,用于根据检测射线上的目标位置点,在检测射线上确定第一候选位置点;目标位置点和第一候选位置点之间的距离大于目标位置点沿检测射线到体渲染容器的距离;目标位置点为检测射线的射线起点;
第一碰撞单元113,用于根据目标位置点和第一候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界开始位置点;
其中,第一碰撞单元113,具体用于对检测射线上的目标位置点沿检测射线到体渲染容器的距离进行沿长处理,得到第一沿长距离;
第一碰撞单元113,具体用于根据第一沿长距离,沿检测射线的射线方向对目标位置点进行移动,得到检测射线上的第一候选位置点。
第二碰撞单元114,用于根据边界开始位置点,在检测射线上确定第二候选位置点;边界开始位置点和第二候选位置点之间的距离大于体渲染容器的最大对角线长度;
第二碰撞单元114,用于根据边界开始位置点和第二候选位置点,对检测射线和体渲染容器进行表面碰撞检测,得到检测射线经过体渲染容器的边界结束位置点。
其中,第二碰撞单元114,具体用于对体渲染容器的最大对角线长度进行沿长处理,得到第二沿长距离;
第二碰撞单元114,具体用于根据第二沿长距离,沿检测射线的射线方向对边界开始位置点进行移动,得到检测射线上的第二候选位置点。
其中,操作响应单元111,射线确定单元112,第一碰撞单元113和第二碰撞单元114的具体实现方式,可以参见上述图3所对应实施例中对步骤S101的描述,这里将不再进行赘述。
碰撞检测模块12,用于在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;
其中,碰撞检测模块12包括:切面确定单元121,数据获取单元122,透明度比较单元123,第一比较单元124,第二比较单元125;
切面确定单元121,用于根据边界开始位置点和检测射线的射线方向,在立体空间中确定第一裁切面;立体空间用于显示体渲染容器;
切面确定单元121,用于将第一裁切面确定为在边界开始位置点上与检测射线垂直的体积切面。
数据获取单元122,用于获取画面捕捉组件在体积切面和检测射线的检测交点上所拍摄的线性颜色数据;
其中,数据获取单元122,具体用于获取画面捕捉组件在检测射线上所拍摄的线性颜色数据集合;线性颜色集合包括画面捕捉组件在检测射线上所拍摄的S个线性颜色数据;S为正整数;
数据获取单元122,具体用于通过体积切面对S个线性颜色数据进行裁切,在S个线性颜色数据中确定体积切面和检测射线的检测交点上的线性颜色数据。
其中,数据获取单元122,还具体用于在立体空间中创建画面捕捉组件;画面捕捉组件的位置为检测射线上的目标位置点,画面捕捉组件的拍摄方向为检测射线的射线方向;目标位置点为检测射线的射线起点;立体空间用于显示体渲染容器;
数据获取单元122,还具体用于将画面捕捉组件的捕捉画布设置为目标尺寸;目标尺寸与线性颜色数据集合中的每个线性颜色数据所对应的体素的体素尺寸相匹配。
透明度比较单元123,用于从线性颜色数据中获取检测交点对应的透明度值,将透明度值与透明度阈值进行比较,得到透明度比较结果;
第一比较单元124,用于若透明度比较结果指示透明度值大于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测成功;
第二比较单元125,用于若透明度比较结果指示透明度值小于或等于透明度阈值,则将检测交点对应的碰撞检测结果确定为碰撞检测失败。
其中,切面确定单元121和数据获取单元122的具体实现方式,可以参见上述图3所对应实施例中对步骤S102和图6所对应实施例中对步骤S1021的描述,这里将不再进行赘述。其中,透明度比较单元123,第一比较单元124和第二比较单元125的具体实现方式,可以参见上述图6所对应实施例中对步骤S1022-步骤S1025的描述,这里将不再进行赘述。
碰撞点确定模块13,用于若检测交点对应的碰撞检测结果指示碰撞检测成功,则将检测交点确定为检测射线针对体渲染对象的碰撞位置点;
切面移动模块14,用于若检测交点对应的碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。
其中,切面移动模块14包括:次数获取单元141,切面移动单元142,碰撞检测单元143,碰撞结束单元144;
次数获取单元141,用于获取与边界开始位置点和边界结束位置点相关联的最大循环次数;
次数获取单元141,用于获取体积切面对应的步进次数,对体积切面对应的步进次数进行累加处理,得到累加步进次数;
切面移动单元142,用于若累加步进次数小于或等于最大循环次数,则根据检测射线对应的检测步长和累加步进次数,沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面;移动后的体积切面对应的步进次数为累加步进次数;
其中,切面移动单元142,具体用于将检测射线对应的检测步长和累加步进次数的乘积确定为切面移动距离;
切面移动单元142,具体用于根据切面移动距离,沿边界开始位置点向边界结束位置点对边界开始位置点进行移动,得到检测射线上的移动位置点;
切面移动单元142,具体用于根据移动位置点和检测射线的射线方向,在立体空间中确定第二裁切面;立体空间用于显示体渲染容器;
切面移动单元142,具体用于将第二裁切面确定为对体积切面进行规则移动所得到的移动后的体积切面。
碰撞检测单元143,用于对移动后的体积切面和检测射线的检测交点进行碰撞检测;
碰撞结束单元144,用于若累加步进次数大于最大循环次数,则结束检测射线针对体渲染对象的碰撞检测。
其中,次数获取单元141,切面移动单元142,碰撞检测单元143和碰撞结束单元144的具体实现方式,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再进行赘述。
其中,切面移动模块14,还具体用于确定边界开始位置点和边界结束位置点之间的位置点距离;
切面移动模块14,还具体用于根据位置点距离和检测步长,确定最大循环次数。
其中,位置点确定模块11,碰撞检测模块12,碰撞点确定模块13和切面移动模块14的具体实现方式,可以参见上述图3所对应实施例中对步骤S101-步骤S104和图6所对应实施例中对步骤S1021-步骤S1025的描述,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
进一步地,请参见图9,图9是本申请实施例提供的一种计算机设备的结构示意图,该计算机设备可以是终端设备或服务器。如图9所示,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,在一些实施例中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。可选的,网络接口1004可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器1005还可以是至少一个位于远离前述处理器1001的存储装置。如图9所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图9所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
获取针对体渲染对象的检测射线,确定检测射线经过体渲染容器的边界开始位置点和边界结束位置点;体渲染容器包含体渲染对象;
在边界开始位置点上确定与检测射线垂直的体积切面,对体积切面和检测射线的检测交点进行碰撞检测,生成检测交点对应的碰撞检测结果;
若检测交点对应的碰撞检测结果指示碰撞检测成功,则将检测交点确定为检测射线针对体渲染对象的碰撞位置点;
若检测交点对应的碰撞检测结果指示碰撞检测失败,则沿边界开始位置点向边界结束位置点对体积切面进行规则移动,得到移动后的体积切面,继续基于移动后的体积切面和检测射线进行碰撞检测。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3或图6所对应实施例中对体渲染碰撞检测方法的描述,也可执行前文图8所对应实施例中对体渲染碰撞检测装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的体渲染碰撞检测装置1所执行的计算机程序,当处理器执行计算机程序时,能够执行前文图3或图6所对应实施例中对体渲染碰撞检测方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
此外,需要说明的是:本申请实施例还提供了一种计算机程序产品,该计算机程序产品可以包括计算机程序,该计算机程序可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器可以执行该计算机程序,使得该计算机设备执行前文图3或图6所对应实施例中对体渲染碰撞检测方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (16)

1.一种体渲染碰撞检测方法,其特征在于,包括:
获取针对体渲染对象的检测射线,确定所述检测射线经过体渲染容器的边界开始位置点和边界结束位置点;所述体渲染容器包含所述体渲染对象;
在所述边界开始位置点上确定与所述检测射线垂直的体积切面,对所述体积切面和所述检测射线的检测交点进行碰撞检测,生成所述检测交点对应的碰撞检测结果;
若所述检测交点对应的碰撞检测结果指示碰撞检测成功,则将所述检测交点确定为所述检测射线针对所述体渲染对象的碰撞位置点;
若所述检测交点对应的碰撞检测结果指示碰撞检测失败,则沿所述边界开始位置点向所述边界结束位置点对所述体积切面进行规则移动,得到移动后的体积切面,继续基于所述移动后的体积切面和所述检测射线进行碰撞检测。
2.根据权利要求1所述的方法,其特征在于,所述获取针对体渲染对象的检测射线,包括:
响应操作组件针对立体空间的触发操作,获取所述触发操作在所述立体空间中的触发位置和触发方向;所述立体空间用于显示体渲染容器;所述触发位置在所述体渲染容器之外;
将所述触发位置作为目标位置点,将所述触发方向作为射线方向;
将从所述目标位置点开始沿所述射线方向的射线确定为针对体渲染对象的检测射线。
3.根据权利要求1所述的方法,其特征在于,所述确定所述检测射线经过体渲染容器的边界开始位置点和边界结束位置点,包括:
根据所述检测射线上的目标位置点,在所述检测射线上确定第一候选位置点;所述目标位置点和所述第一候选位置点之间的距离大于所述目标位置点沿所述检测射线到体渲染容器的距离;所述目标位置点为所述检测射线的射线起点;
根据所述目标位置点和所述第一候选位置点,对所述检测射线和所述体渲染容器进行表面碰撞检测,得到所述检测射线经过所述体渲染容器的边界开始位置点;
根据所述边界开始位置点,在所述检测射线上确定第二候选位置点;所述边界开始位置点和所述第二候选位置点之间的距离大于所述体渲染容器的最大对角线长度;
根据所述边界开始位置点和所述第二候选位置点,对所述检测射线和所述体渲染容器进行表面碰撞检测,得到所述检测射线经过所述体渲染容器的边界结束位置点。
4.根据权利要求3所述的方法,其特征在于,所述根据所述检测射线上的目标位置点,在所述检测射线上确定第一候选位置点,包括:
对所述检测射线上的目标位置点沿所述检测射线到体渲染容器的距离进行沿长处理,得到第一沿长距离;
根据所述第一沿长距离,沿所述检测射线的射线方向对所述目标位置点进行移动,得到所述检测射线上的第一候选位置点。
5.根据权利要求3所述的方法,其特征在于,所述根据所述边界开始位置点,在所述检测射线上确定第二候选位置点,包括:
对所述体渲染容器的最大对角线长度进行沿长处理,得到第二沿长距离;
根据所述第二沿长距离,沿所述检测射线的射线方向对所述边界开始位置点进行移动,得到所述检测射线上的第二候选位置点。
6.根据权利要求1所述的方法,其特征在于,所述在所述边界开始位置点上确定与所述检测射线垂直的体积切面,包括:
根据所述边界开始位置点和所述检测射线的射线方向,在立体空间中确定第一裁切面;所述立体空间用于显示所述体渲染容器;
将所述第一裁切面确定为在所述边界开始位置点上与所述检测射线垂直的体积切面。
7.根据权利要求1所述的方法,其特征在于,所述对所述体积切面和所述检测射线的检测交点进行碰撞检测,生成所述检测交点对应的碰撞检测结果,包括:
获取画面捕捉组件在所述体积切面和所述检测射线的检测交点上所拍摄的线性颜色数据;
从所述线性颜色数据中获取所述检测交点对应的透明度值,将所述透明度值与透明度阈值进行比较,得到透明度比较结果;
若所述透明度比较结果指示所述透明度值大于所述透明度阈值,则将所述检测交点对应的碰撞检测结果确定为碰撞检测成功;
若所述透明度比较结果指示所述透明度值小于或等于所述透明度阈值,则将所述检测交点对应的碰撞检测结果确定为碰撞检测失败。
8.根据权利要求7所述的方法,其特征在于,所述获取画面捕捉组件在所述体积切面和所述检测射线的检测交点上所拍摄的线性颜色数据,包括:
获取画面捕捉组件在所述检测射线上所拍摄的线性颜色数据集合;所述线性颜色集合包括所述画面捕捉组件在所述检测射线上所拍摄的S个线性颜色数据;所述S为正整数;
通过所述体积切面对S个所述线性颜色数据进行裁切,在S个所述线性颜色数据中确定所述体积切面和所述检测射线的检测交点上的线性颜色数据。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
在立体空间中创建所述画面捕捉组件;所述画面捕捉组件的位置为所述检测射线上的目标位置点,所述画面捕捉组件的拍摄方向为所述检测射线的射线方向;所述目标位置点为所述检测射线的射线起点;所述立体空间用于显示所述体渲染容器;
将所述画面捕捉组件的捕捉画布设置为目标尺寸;所述目标尺寸与所述线性颜色数据集合中的每个线性颜色数据所对应的体素的体素尺寸相匹配。
10.根据权利要求1所述的方法,其特征在于,所述沿所述边界开始位置点向所述边界结束位置点对所述体积切面进行规则移动,得到移动后的体积切面,继续基于所述移动后的体积切面和所述检测射线进行碰撞检测,包括:
获取与所述边界开始位置点和所述边界结束位置点相关联的最大循环次数;
获取所述体积切面对应的步进次数,对所述体积切面对应的步进次数进行累加处理,得到累加步进次数;
若所述累加步进次数小于或等于所述最大循环次数,则根据所述检测射线对应的检测步长和所述累加步进次数,沿所述边界开始位置点向所述边界结束位置点对所述体积切面进行规则移动,得到移动后的体积切面;所述移动后的体积切面对应的步进次数为所述累加步进次数;
对所述移动后的体积切面和所述检测射线的检测交点进行碰撞检测;
若所述累加步进次数大于所述最大循环次数,则结束所述检测射线针对所述体渲染对象的碰撞检测。
11.根据权利要求10所述的方法,其特征在于,所述根据所述检测射线对应的检测步长和所述累加步进次数,沿所述边界开始位置点向所述边界结束位置点对所述体积切面进行规则移动,得到移动后的体积切面,包括:
将所述检测射线对应的检测步长和所述累加步进次数的乘积确定为切面移动距离;
根据所述切面移动距离,沿所述边界开始位置点向所述边界结束位置点对所述边界开始位置点进行移动,得到所述检测射线上的移动位置点;
根据所述移动位置点和所述检测射线的射线方向,在立体空间中确定第二裁切面;所述立体空间用于显示所述体渲染容器;
将所述第二裁切面确定为对所述体积切面进行规则移动所得到的移动后的体积切面。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
确定所述边界开始位置点和所述边界结束位置点之间的位置点距离;
根据所述位置点距离和所述检测步长,确定所述最大循环次数。
13.一种体渲染碰撞检测装置,其特征在于,包括:
位置点确定模块,用于获取针对体渲染对象的检测射线,确定所述检测射线经过体渲染容器的边界开始位置点和边界结束位置点;所述体渲染容器包含所述体渲染对象;
碰撞检测模块,用于在所述边界开始位置点上确定与所述检测射线垂直的体积切面,对所述体积切面和所述检测射线的检测交点进行碰撞检测,生成所述检测交点对应的碰撞检测结果;
碰撞点确定模块,用于若所述检测交点对应的碰撞检测结果指示碰撞检测成功,则将所述检测交点确定为所述检测射线针对所述体渲染对象的碰撞位置点;
切面移动模块,用于若所述检测交点对应的碰撞检测结果指示碰撞检测失败,则沿所述边界开始位置点向所述边界结束位置点对所述体积切面进行规则移动,得到移动后的体积切面,继续基于所述移动后的体积切面和所述检测射线进行碰撞检测。
14.一种计算机设备,其特征在于,包括:处理器和存储器;
所述处理器与所述存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1-12任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-12任一项所述的方法。
16.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,且适于由处理器读取并执行,以使得具有所述处理器的计算机设备执行权利要求1-12任一项所述的方法。
CN202211582535.5A 2022-12-09 2022-12-09 一种体渲染碰撞检测方法、装置、设备以及存储介质 Active CN115859411B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211582535.5A CN115859411B (zh) 2022-12-09 2022-12-09 一种体渲染碰撞检测方法、装置、设备以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211582535.5A CN115859411B (zh) 2022-12-09 2022-12-09 一种体渲染碰撞检测方法、装置、设备以及存储介质

Publications (2)

Publication Number Publication Date
CN115859411A true CN115859411A (zh) 2023-03-28
CN115859411B CN115859411B (zh) 2024-07-09

Family

ID=85671699

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211582535.5A Active CN115859411B (zh) 2022-12-09 2022-12-09 一种体渲染碰撞检测方法、装置、设备以及存储介质

Country Status (1)

Country Link
CN (1) CN115859411B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117710368A (zh) * 2024-02-05 2024-03-15 腾讯科技(深圳)有限公司 图像处理方法、装置、设备、介质及程序产品

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080129734A1 (en) * 2006-12-05 2008-06-05 Electronics And Telecommunications Research Institute Apparatus and method of ray-triangle collision detection for ray-tracing
CN103529959A (zh) * 2013-01-21 2014-01-22 Tcl集团股份有限公司 基于关键点射线碰撞检测的框选方法、系统及电子设备
CN111340949A (zh) * 2020-05-21 2020-06-26 超参数科技(深圳)有限公司 3d虚拟环境的建模方法、计算机设备及存储介质
CN111968216A (zh) * 2020-07-29 2020-11-20 完美世界(北京)软件科技发展有限公司 一种体积云阴影渲染方法、装置、电子设备及存储介质
CN114022548A (zh) * 2021-09-15 2022-02-08 苏州中科华影健康科技有限公司 一种内窥镜碰撞检测方法、装置、设备及存储介质
US20220319096A1 (en) * 2021-03-30 2022-10-06 Advanced Micro Devices, Inc. Machine-learning based collision detection for objects in virtual environments

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080129734A1 (en) * 2006-12-05 2008-06-05 Electronics And Telecommunications Research Institute Apparatus and method of ray-triangle collision detection for ray-tracing
CN103529959A (zh) * 2013-01-21 2014-01-22 Tcl集团股份有限公司 基于关键点射线碰撞检测的框选方法、系统及电子设备
CN111340949A (zh) * 2020-05-21 2020-06-26 超参数科技(深圳)有限公司 3d虚拟环境的建模方法、计算机设备及存储介质
CN111968216A (zh) * 2020-07-29 2020-11-20 完美世界(北京)软件科技发展有限公司 一种体积云阴影渲染方法、装置、电子设备及存储介质
US20220319096A1 (en) * 2021-03-30 2022-10-06 Advanced Micro Devices, Inc. Machine-learning based collision detection for objects in virtual environments
CN114022548A (zh) * 2021-09-15 2022-02-08 苏州中科华影健康科技有限公司 一种内窥镜碰撞检测方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
MAN R等: "A survey of collision detection", APPLIED MECHANICS&MATERIALS, 31 December 2014 (2014-12-31) *
丁晓东;陈国栋;: "交互式软组织切割仿真框架的设计及实现", 佳木斯大学学报(自然科学版), no. 01, 15 January 2016 (2016-01-15) *
沈瑛;王辉;王立晖;吴青青;: "面向移动终端的三维模型简化与碰撞检测方法研究", 计算机科学, no. 2, 15 November 2017 (2017-11-15) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117710368A (zh) * 2024-02-05 2024-03-15 腾讯科技(深圳)有限公司 图像处理方法、装置、设备、介质及程序产品
CN117710368B (zh) * 2024-02-05 2024-04-30 腾讯科技(深圳)有限公司 图像处理方法、装置、设备、介质及程序产品

Also Published As

Publication number Publication date
CN115859411B (zh) 2024-07-09

Similar Documents

Publication Publication Date Title
Riegler et al. Free view synthesis
Hedman et al. Scalable inside-out image-based rendering
CN109523621B (zh) 对象的加载方法和装置、存储介质、电子装置
Izadi et al. Kinectfusion: real-time 3d reconstruction and interaction using a moving depth camera
US11749310B2 (en) Process for defining, capturing, assembling, and displaying customized video content
CN109242961A (zh) 一种脸部建模方法、装置、电子设备和计算机可读介质
CN115100339A (zh) 图像生成方法、装置、电子设备和存储介质
CN116097316A (zh) 用于非模态中心预测的对象识别神经网络
CN115859411B (zh) 一种体渲染碰撞检测方法、装置、设备以及存储介质
Caliskan et al. Multi-view consistency loss for improved single-image 3d reconstruction of clothed people
Weber et al. Editable indoor lighting estimation
Cui et al. Fusing surveillance videos and three‐dimensional scene: A mixed reality system
CN115830202A (zh) 一种三维模型渲染方法和装置
KR20230013099A (ko) 실시간 깊이 맵을 사용한 지오메트리 인식 증강 현실 효과
Hwang et al. Image-based object reconstruction using run-length representation
Chen et al. A quality controllable multi-view object reconstruction method for 3D imaging systems
Volino et al. Online interactive 4D character animation
Jiang et al. A large-scale scene display system based on webgl
Congote et al. Real-time volume rendering and tractography visualization on the web
CN117392358B (zh) 碰撞检测方法、装置、计算机设备和存储介质
US11830140B2 (en) Methods and systems for 3D modeling of an object by merging voxelized representations of the object
Xie Dance Performance in New Rural Areas Based on 3D Image Reconstruction Technology
Johansson et al. From BIM to VR
US20240062425A1 (en) Automatic Colorization of Grayscale Stereo Images
Whang et al. DeepCinema: Adding Depth with X3D Image-Based Rendering

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant