CN115797522A - 数字内容创作的实时可视化方法及装置 - Google Patents
数字内容创作的实时可视化方法及装置 Download PDFInfo
- Publication number
- CN115797522A CN115797522A CN202211661003.0A CN202211661003A CN115797522A CN 115797522 A CN115797522 A CN 115797522A CN 202211661003 A CN202211661003 A CN 202211661003A CN 115797522 A CN115797522 A CN 115797522A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- engine
- real
- visualization
- 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.)
- Pending
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本申请实施例提供一种数字内容创作的实时可视化方法,方法包括:获取目标软件中各个可视化对象的目标数据;将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;向目标引擎发送第一请求,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果;通过实时传输通道获取目标引擎根据第一请求返回的第一可视化结果;根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果。本申请实施例提供的数字内容创作的实时可视化方法,可以提高数字内容创作的效率。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种数字内容创作的实时可视化方法、装置、计算机设备及存储介质。
背景技术
在使用数字内容创作软件进行数字内容创作时,通常需要结合第三方引擎进行。而在数字内容创作的过程中,创作者往往希望查看创作的中间结果来获得即时反馈,但是在查看创作的中间结果时,创作者通常需要将数字内容创作软件的数据导出至第三方引擎,再从第三方引擎中导入数据并调整配置,创作的效率比较低。
发明内容
本申请的目的在于提供一种数字内容创作的实时可视化方法、装置、计算机设备及存储介质,用于解决目前创作者在进行数字内容创作时创作的效率较低的技术问题。
本申请实施例的一个方面提供了一种数字内容创作的实时可视化方法,包括:获取目标软件中各个可视化对象的目标数据;将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;向目标引擎发送第一请求,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果;通过实时传输通道获取目标引擎根据第一请求返回的第一可视化结果;根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果。
可选地,实时传输通道基于操作系统的共享内存建立。
可选地,每一可视化对象包括唯一标识,将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象,包括:基于唯一标识将目标数据通过实时传输通道传输至目标引擎,以供目标引擎根据目标数据和唯一标识实时生成或更新可视化对象的代理对象。
可选地,基于唯一标识将目标数据通过实时传输通道传输至目标引擎,包括:基于唯一标识将目标数据发送至目标引擎在共享内存中创建的消息接收队列中。
可选地,获取目标软件中各个可视化对象的目标数据,包括:在目标引擎未建立代理对象的情况下,通过主动查询的方式获取所述目标软件中各个可视化对象的目标数据;在目标引擎已建立代理对象的情况下,基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据。
可选地,基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据,包括:建立目标软件中各节点与需要同步的可视化对象的映射关系,在节点收到事件通知时,通知与收到事件通知的节点具有映射关系的可视化对象,以获取需要同步的可视化对象的目标数据。
可选地,基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据,包括:确定需要同步的可视化对象对应的第一节点,在第一节点收到事件通知时,根据第一节点重新构建的逐层传递的依赖关系完成逐层传递,以获取需要同步的可视化对象的目标数据。
可选地,将目标数据通过预先建立的实时传输通道传输至目标引擎,包括:在目标数据的大小大于或等于预设阈值的情况下,以可视化对象为单位将目标数据切割为若干份数据,将若干份数据通过实时传输通道传输至目标引擎。
可选地,将目标数据通过预先建立的实时传输通道传输至目标引擎,包括:在目标数据包含动画内容数据的情况下,获取动画内容数据中的关键帧数据;将关键帧数据通过实时传输通道传输至目标引擎,以供目标引擎根据关键帧数据实时生成或更新可视化对象的代理对象。
可选地,方法还包括:向目标引擎发送第二请求,第二请求用于请求设置代理对象的目标属性,目标属性包括材质属性和/或骨骼模型属性;接收目标引擎根据第二请求和资源数据返回的属性选择菜单,在目标软件中显示属性选择菜单;接收对属性选择菜单的选定信息,将选定信息发送至目标引擎,以使目标引擎根据选定信息设置代理对象的目标属性。
可选地,根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果,包括:获取目标软件的第一投影参数和目标引擎的第二投影参数;在第一可视化结果中的深度图像为目标引擎的设备空间下的第一深度图像、第一投影参数与第二投影参数存在差异且不能调整成一致的情况下,获取将第一深度图像转换到世界空间深度图像的转换参数;根据转换参数将第一深度图像转换为世界空间下的第二深度图像;根据第一投影参数将第二深度图像转换为目标软件的设备空间下的第三深度图像;根据第三深度图像在目标软件中显示有遮挡关系的第二可视化结果。
本申请实施例的一个方面又提供了一种数字内容创作的实时可视化装置,包括:第一获取模块,用于获取目标软件中各个可视化对象的目标数据;传输模块,用于将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;请求模块,用于向目标引擎发送第一请求,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果;第二获取模块,用于通过实时传输通道获取目标引擎根据第一请求返回的第一可视化结果;显示模块,用于根据第一可视化结果在目标软件中显示具有遮挡关系的第二可视化结果。
本申请实施例的一个方面又提供了一种数字内容创作的实时可视化方法,包括:通过预先建立的实时传输通道获取目标软件传输的目标数据,目标数据为目标软件中各个可视化对象的数据;根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象;响应于目标软件发送的第一请求,通过实时传输通道将第一可视化结果传输至目标软件,以供目标软件根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果,其中,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
可选地,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,包括:在目标引擎中实时生成或更新代理对象时,将目标软件坐标系下的几何变换转换为目标引擎坐标系下的几何变换;利用多线程将目标软件的目标属性转换为与目标引擎对应的属性。
可选地,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,包括:在可视化对象为几何对象时,将目标软件中的分层式或依赖图式的节点结构中的多级节点几何变换合并为单个累积变换,根据累积变换在目标引擎中实时生成或更新可视化对象的代理对象。
可选地,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,包括:在目标引擎中实时生成或更新代理对象时,建立与目标软件的目标几何数据匹配的分部位可视化结构,目标几何数据为目标软件根据预设查询方式得到的数据,且在同一几何对象有多个实例化对象时,目标几何数据为对实例化对象通过预设查询方式查询一次,同时对实例化对象的几何变换逐个查询获得的数据;在代理对象包含关节对象代理的情况下,建立关节对象代理与目标引擎内动画主体的关联。
可选地,方法还包括:在目标软件指定目标引擎的更新频率的情况下,停止目标引擎中的主动更新,根据更新频率进行动画的同步更新。
可选地,方法还包括:在接收到第一请求时,基于同一场景和不同的相机参数生成不同相机下的可视化图像作为第一可视化结果,相机参数根据目标软件的指定值或通过计算转换得到,相机参数包括视口大小、相机空间变换、透视投影视场参数、正交投影视锥体尺寸。
可选地,通过实时传输通道将第一可视化结果传输至目标软件,包括:通过目标引擎的快速获取接口获取第一可视化结果,将第一可视化结果拷贝至实时传输通道中,以供目标软件从实时传输通道读取第一可视化结果。
本申请实施例的一个方面又提供了一种数字内容创作的实时可视化装置,包括:获取模块,用于通过预先建立的实时传输通道获取目标软件传输的目标数据,目标数据为目标软件中各个可视化对象的数据;代理模块,用于根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象;传输模块,用于响应于目标软件发送的第一请求,通过实时传输通道将第一可视化结果传输至目标软件,以供目标软件根据第一可视化结果在目标软件中显示具有遮挡关系的第二可视化结果,其中,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
本申请实施例的一个方面又提供了一种计算机设备,计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时用于实现上述的数字内容创作的实时可视化方法的步骤。
本申请实施例的一个方面又提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序可被至少一个处理器所执行,以使至少一个处理器执行上述的数字内容创作的实时可视化方法的步骤。
本申请实施例提供的数字内容创作的实时可视化方法、装置、计算机设备及存储介质,包括以下优点:
通过获取目标软件中各个可视化对象的目标数据,将目标数据通过预先建立的实时传输通道传输至目标引擎,供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;向目标引擎发送用于请求目标引擎返回第一可视化结果的请求,其中第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含深度信息的结果;再通过实时传输通道获取目标引擎根据请求返回的第一可视化结果,根据第一可视化结果和深度信息在目标软件中显示具有遮挡关系的第二可视化结果,可以将目标软件中可视化数据同步给目标引擎,再从目标引擎获取到结合引擎数据渲染的可视化结果在目标软件显示;由于不需要在数字内容创作软件与第三方引擎之间频繁转换数据,数字内容创作者可以在目标软件中直接看到与第三方引擎的引擎数据结合后的可视化结果,并根据看到的可视化结果进行创作,可以实现“所见即所得”的效果,有效提高创作的效率。
附图说明
图1示意性示出了本申请实施例一的数字内容创作的实时可视化方法的流程图;
图2为图1新增步骤的流程图;
图3为图1中步骤S150子步骤的流程图;
图4为数字内容创作的实时可视化方法的实施流程示例图;
图5为在Maya中面向虚幻引擎创建数字内容的产品效果图;
图6示意性示出了本申请实施例二的数字内容创作的实时可视化装置的框图;
图7示意性示出了本申请实施例三的数字内容创作的实时可视化方法的流程图;
图8为图7中步骤S420子步骤的流程图;
图9为图7中步骤S420另一子步骤的流程图;
图10为数字内容创作的实时可视化方法的另一实施流程示例图;
图11为在Maya中面向虚幻引擎创建数字内容的产品的使用流程示例图;
图12示意性示出本申请实施例四的数字内容创作的实时可视化装置的框图;
图13示意性示出了本申请实施例五的计算机设备的硬件架构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
相关技术中,在使用数字内容创作软件进行数字内容创作时,需要在数字内容创作软件与第三方引擎之间频繁转换数据,创作的效率较低。
本申请实施例的数字内容创作的实时可视化方案,可以提高使用数字内容软件进行数字内容创作的效率,以下通过若干实施例进行说明。
实施例一
图1示意性示出了本申请实施例一的数字内容创作的实时可视化方法的流程图,可以包括步骤S110~步骤S150,具体如下:
步骤S110,获取目标软件中各个可视化对象的目标数据。
应当说明的是,步骤S110~步骤S150的执行主体可以为目标软件,更具体地,可以为目标软件中定制的插件。其中,目标软件可以包括但不限于Maya、Max、Blender、Houdini等数字内容创作软件。而目标引擎可以包括但不限于Unreal Engine、Unity、Cry Engine 3或Hero Engine等第三方引擎。
目标数据为目标软件需要同步至目标引擎的数据。在示例性的实施例中,获取目标软件中各个可视化对象的目标数据,可以包括:在目标引擎未建立代理对象的情况下,通过主动查询的方式获取所述目标软件中各个可视化对象的目标数据;在目标引擎已建立代理对象的情况下,基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据。
即插件在首次获取目标数据时,可以通过主动查询的方式获取目标数据,后续可以利用目标软件中的事件通知机制来获取相应的目标数据。在利用事件通知机制来获取目标数据的具体实现中,目标软件的插件可以预先注册一系列的事件通知,再利用注册的事件通知来获取相应的目标数据。事件通知可以包括但不限于:场景变化前后通知、文件加载前后通知、动画生产前后通知、对象增删改通知、对象实例化通知、对象名称改变通知和对象层次关系改变通知等事件通知。通过目标软件的事件通知机制来获取可视化对象的目标数据,可以在需要同步的可视化对象发生相应改变时及时获取到相应的目标数据进行同步,提高数据同步的效率。
在示例性的实施例中,上述基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据,可以包括:建立目标软件中各节点与需要同步的可视化对象的映射关系,在节点收到事件通知时,通知与收到事件通知的节点具有映射关系的可视化对象,以获取需要同步的可视化对象的目标数据。
在目标软件面向节点的事件通知中,为了不拖慢整个目标软件的效率,节点的变化很可能不会通知到所有受影响的节点。另外,通过目标软件的预留接口查询收到变化通知的节点到底影响了其它哪些需要同步的可视化对象,往往会导致性能低下。而通过建立节点与需要同步的可视化对象的映射关系,可以在节点收到事件通知时,直接通知到受影响的可视化对象,可以提高同步的效率和目标软件的性能。
在示例性的实施例中,上述基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据,可以包括:确定需要同步的可视化对象对应的第一节点,在第一节点收到事件通知时,根据第一节点重新构建的逐层传递的依赖关系完成逐层传递,以获取需要同步的可视化对象的目标数据。
在需要同步的可视化对象对应的第一节点收到事件通知时,根据重新构建的逐层传递的依赖关系完成逐层传递,来获取需要同步的可视化对象的目标数据,亦可以提高同步的效率和目标软件的性能。
步骤S120,将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象。
在示例性的实施例中,实时传输通道基于操作系统的共享内存建立。其中,操作系统可以为windows操作系统。具体实现中,可以是目标软件在操作系统初始化全局唯一共享内存,再在全局唯一共享内存中将目标数据传输给目标引擎。由于数字内容创作会涉及到目标软件同步至目标引擎的复杂几何数据、目标引擎同步给目标软件的包含深度信息的可视化图像等大体量数据,因此基于操作系统共享内存机制来创建实时传输通道,可以极大地降低大体量数据的传输代价,满足复杂情况下实时可视化的要求。
在示例性的实施例中,每一可视化对象包括唯一标识,步骤S120中,将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象,可以包括:基于该唯一标识将目标数据通过实时传输通道传输至目标引擎,以供目标引擎根据目标数据和该唯一标识实时生成或更新可视化对象的代理对象。可以理解的是,基于可视化对象的唯一标识将目标数据通过实时传输通道传输至目标引擎,可以使目标引擎根据相应的标识生成或更新代理对象的相应数据,从而实现代理对象相应的生成或更新。
在示例性的实施例中,上述基于唯一标识将目标数据通过实时传输通道传输至目标引擎,可以包括:基于唯一标识将目标数据发送至目标引擎在共享内存中创建的消息接收队列中。具体实现中,目标软件和目标引擎均有各自定制的插件,通过各自的插件在共享内存中创建各自的消息接收队列,再将相应的消息发送至对方的消息接收队列中来进行相互的通信。可选地,可以将消息接收队列中的共享对象名称作为该唯一标识,从而方便双方根据该唯一标识进行有效的通信。其中,消息接收队列的大小可以为最多支持的消息个数与每条消息的最大数据大小之积,目标软件接收的每条消息大小包含可同时容纳的最大几何数据大小。目标软件与目标引擎可定期向全局共享内存对象中更新自身的活跃时间,并将唯一标识、消息版本号、活跃时间等信息存储至全局共享内存对象中。
默认情况下,每个数字内容创作软件可与单个第三方引擎关联,数字内容创作软件插件活跃期间,可以定期尝试从全局唯一共享内存中匹配可提供服务的第三方引擎作为目标引擎,验证消息版本号及活跃时间后,记录其对应的消息队列名称用于后续消息发送;若已匹配的目标引擎没有定期更新活跃时间,则可以认为目标引擎已失效,并重新查找匹配。另外,在默认情况下,每个第三方引擎可以与多个数字内容创作软件匹配关联,数字内容创作软件同步给第三方引擎的内容会出现在同一场景中可视化后同步给所有与第三方引擎匹配的数字内容创作软件。第三方引擎插件活跃期间,已同步对象信息的数字内容创作软件若没有定期更新活跃时间,则认为已失效,可以清除同步的所有信息;单个数字内容创作软件可为内部不同的相机请求可视化图像,每个相机对应第三方引擎内部不同的可视化图像捕获组件;第三方引擎插件在活跃期间,可定期检查每个可视化图像捕获取组件是否仍在捕获图像,若失效则及时清除对应的捕获组件。
步骤S130,向目标引擎发送第一请求,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
目标软件插件将目标软件中可视化对象的目标数据传输给目标引擎后,目标引擎可以根据目标数据生成可视化对象对应的代理对象。另外,在目标引擎中,可以根据实际需要生成相应的场景等引擎数据;目标引擎在生成或更新代理对象后,可以将代理对象与场景等引擎数据结合在一起得到具有深度信息的结果。其中,第一可视化结果可以包括深度图像和颜色图像,即每个像素的颜色和在指定空间下的深度。
目标软件在向目标引擎发送第一请求时,可以是将第一请求对应的消息发送至目标引擎对应的消息接收队列中,从而使目标引擎从自身的消息接收队列中获取到第一请求对应的消息,并根据第一请求对应的消息进行相应的处理或回复。
步骤S140,通过实时传输通道获取目标引擎根据第一请求返回的第一可视化结果。
具体地,目标引擎根据第一请求返回第一可视化结果时,可以将第一可视化结果拷贝至实时传输通道中,从而使目标软件可以从实时传输通道中读取到第一可视化结果。
步骤S150,根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果。
具体地,目标软件的插件可以在目标软件中与目标引擎对应的定制渲染器中显示第二可视化结果。在获取到第一可视化结果以及第一深度信息后,目标软件的插件可以将自身包括编辑辅助元素在内的其它可视化信息与第一可视化结果根据第一深度信息进行融合,从而得到具有正确遮挡关系的第二可视化结果。其中,正确的遮挡关系可以通过设备空间的深度比较实现,由于对屏幕空间的每一个位置的已有像素而言,若其在设备空间的深度值越小,则表明其离观察者越近,因此若同一位置后续生成的其它像素在同一设备空间的深度值大于已有像素的深度值则抛弃当前生成的像素,若小于已有像素的深度值则用当前生成的像素替换已有像素,这样就能实现正确遮挡。
本实施例提供的数字内容创作的实时可视化方法,通过获取目标软件中各个可视化对象的目标数据,将目标数据通过预先建立的实时传输通道传输至目标引擎,供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;向目标引擎发送用于请求目标引擎返回第一可视化结果的请求,其中第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含深度信息的结果;再通过实时传输通道获取目标引擎根据请求返回的第一可视化结果,根据第一可视化结果和深度信息在目标软件中显示具有遮挡关系的第二可视化结果,可以将目标软件中可视化数据同步给目标引擎,再从目标引擎获取到结合引擎数据渲染的可视化结果在目标软件显示;由于不需要在数字内容创作软件与第三方引擎之间频繁转换数据,数字内容创作者可以在目标软件中直接看到与第三方引擎的引擎数据结合后的可视化结果,并根据看到的可视化结果进行创作,可以实现“所见即所得”的效果,有效提高创作的效率。
在示例性的实施例中,步骤S120中,将目标数据通过预先建立的实时传输通道传输至目标引擎,包括:在目标数据的大小大于或等于预设阈值的情况下,以可视化对象为单位将目标数据切割为若干份数据,将若干份数据通过实时传输通道传输至目标引擎。其中,预设阈值可以根据共享内存以及实时传输通道的实际情况决定,此处不做具体限制。在将切割后的若干份数据传输至目标引擎时,可以是分多次传输,进行多次同步。通过将大于或等于预设阈值大小的目标数据切割为若干份数据,可以使较大的数据分多次完成同步,解决较大的数据同步的问题。
在示例性的实施例中,步骤S120中,将目标数据通过预先建立的实时传输通道传输至目标引擎,可以包括:在目标数据包含动画内容数据的情况下,获取该动画内容数据中的关键帧数据,将关键帧数据通过实时传输通道传输至目标引擎,以供目标引擎根据关键帧数据实时生成或更新可视化对象的代理对象。
具体地,在进行动画内容创作时,可以对目标软件内关节对象配置后只获取动画内容数据中的关键帧数据,再将关键帧数据通过实时传输通道同步至目标引擎,可以充分利用动画主体已有的外观配置,大大减少向目标引擎传输的数据量,提高同步的效率。
实际应用中,还可以将目标软件中复杂的对象的分层结构或依赖图结构在同步时转换为简单扁平结构,构建简化的对象依赖映射降低对象变化时遍历依赖关系的代价;对实例化对象在同步时避免多次查询共享属性,充分利用目标软件高效的数据查询接口尤其是几何数据的批量属性查询接口来提高查询的效率;已同步网格对象的齐次变换变化时只同步变换本身来提高同步的速度。
在示例性的实施例中,如图2所示,数字内容创作的实时可视化方法还可以包括步骤S210~步骤S230,具体如下:
步骤S210,向目标引擎发送第二请求,第二请求用于请求设置代理对象的目标属性,目标属性包括材质属性和/或骨骼模型属性。
在设置代理对象的目标属性时,可以是分别设置,例如,先请求对代理对象的材质属性进行设置,在设置完材质属性,再对代理对象的骨骼模型属性进行设置。其中,骨骼模型属性是指在目标引擎中驱动的骨骼模型。
实际应用中,设置材质属性适用于:向目标引擎同步的可视化对象的目标数据是三角形等几何数据,由于目标引擎可能会指定默认材质,因此通过交互来设置材质属性可以获得用户更加满意的外观;设置骨骼模型属性适用于:向目标引擎同步的可视化对象的目标数据是动画关键帧数据,此时需要在目标引擎中关联骨骼模型,否则动画关键帧数据不能可视化。若动画关键帧也同时驱动了目标软件中的几何模型,此时动画关键帧变化时,目标软件中的几何数据也同时变化,此时可以设置材质属性或骨骼模型属性,或者,同时设置材质属性或骨骼模型属性。优选地,可以只设置材质属性或只设置骨骼模型属性。
步骤S220,接收目标引擎根据第二请求和资源数据返回的属性选择菜单,在目标软件中显示属性选择菜单。
目标引擎在接收到第二请求后,可以获取代理对象与目标属性对应的资源数据,根据相应的资源数据定制属性选择菜单返回目标软件,目标软件在接收到属性选择菜单后,在目标软件中显示该属性选择菜单,供目标软件的用户对相应的属性进行选择。其中,属性选择菜单可以为定制窗口形式,即在目标软件中弹出定制窗口供用户进行选择。
步骤S230,接收对属性选择菜单的选定信息,将选定信息发送至目标引擎,以使目标引擎根据选定信息设置代理对象的目标属性。
其中,选定信息是指用户选定的目标属性的信息,例如,用户选定A材质,则选定信息为用户选定A材质的信息。
目标软件的用户可以对显示的属性选择菜单进行选择,根据用户对属性选择菜单的输入指令来接收选定信息,然后将选定信息发送目标引擎。目标引擎在接收到选定信息后,根据选定信息设置在目标引擎中的代理对象的目标属性。
本实施例中,通过向目标引擎发送用请求设置代理对象的目标属性的第二请求,接收目标引擎根据第二请求和资源数据返回的属性选择菜单,在目标软件中显示属性选择菜单;再接收对属性选择菜单的选定信息,将选定信息发送至目标引擎,以使目标引擎根据选定信息设置代理对象的目标属性;由于用户可以在目标软件中直接对目标引擎中的代理对象的目标属性进行设置,因此可以方便进行数字内容创作,避免在目标软件与目标引擎间来回转换数据,提高了数字内容创作的效率。
在示例性的实施例中,步骤S150中,根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果,如图3所示,可以包括步骤S151~步骤S155,具体如下:
步骤S151,获取目标软件的第一投影参数和目标引擎的第二投影参数。
步骤S152,在第一可视化结果中的深度图像为目标引擎下的设备空间下的第一深度图像、第一投影参数与第二投影参数存在差异且不能调整成一致的情况下,获取将第一深度图像转换到世界空间深度图像的转换参数。
步骤S153,根据转换参数将第一深度图像转换为世界空间下的第二深度图像。
步骤S154,根据第一投影参数将第二深度图像转换为在目标软件的设备空间下的第三深度图像。
步骤S155,根据第三深度图像在目标软件中显示有遮挡关系的第二可视化结果。
在步骤S151~步骤S155中,具体地,由于第一可视化结果中的深度图像为目标引擎的设备空间下的第一深度图像,并非世界空间的深度图像,也非目标软件世界空间的深度图像,因此需要先根据转换参数将第一深度图像转换为世界空间的深度图像,再根据第一投影参数将世界空间下的深度图像转换为目标软件的设备空间下的深度图像,最后根据目标软件的设备空间下的深度图像与目标软件中其它可视化元素融合在一起得到具有正确遮挡关系的第二可视化结果。
实际应用中,在第一投影参数、第二投影参数存在差异且不能调整为一致的情况下,若能直接从目标引擎实时获取到世界空间的深度图像,则此时的深度图像亦为目标软件世界空间的深度图像,目标软件在获取到该深度图像后,可以使用第一投影参数将其转换为目标软件的设备空间的深度图像即可。另外,若第一投影参数与第二投影参数可以调整成一致,且能直接实时获得目标引擎的设备空间的深度图像,则此时的深度图像亦为目标软件设备空间下的深度图像,目标软件在获取到该深度图像后可以直接使用该深度图像用于遮挡即可;若第一投影参数与第二投影参数可以调整成一致,但不能实时获得目标引擎的设备空间的深度图像,则需要实时获取目标引擎中世界空间的深度图像,此时该世界空间的深度图像亦为目标软件世界空间的深度图像,目标软件在获取该世界空间的深度图像后,可以根据第一投影参数将其转换为目标软件的设备空间的深度图像用于遮挡。
本实施例中,在第一可视化结果中的深度图像为目标引擎的设备空间下的第一深度图像、目标软件与目标引擎的投影参数存在差异且不能调整成一致的情况下,获取将第一深度图像转换到世界空间深度图像的转换参数;根据转换参数将第一深度图像转换为世界空间下的第二深度图像;根据目标软件的投影参数将第二深度图像转换为在目标软件的设备空间下的第三深度图像,根据第三深度图像在目标软件中显示有遮挡关系的第二可视化结果,可以在投影参数存在差异且不能调整为一致、第一可视化结果为目标引擎的设备空间下的深度图像的情况下,转换得到目标软件的设备空间下的深度图像,从而实现在目标软件显示具有正确遮挡关系的可视化结果。
为了更清楚地说明本申请实施例的数字内容创作的实时可视化方法,以下通过具体的示例进行说明,其中,目标软件以Maya为例,目标引擎以虚幻引擎为例,如图4所示,具体说明如下:
1、在目标软件Maya中可以通过创建Maya插件工程,实现插件的初始化函数、插件的退出函数以及Maya退出函数回调,具体可以包括以下内容:
可以在插件的初始化函数MStatusinitializePlugin(MObject obj)执行以下操作:
(1)通过函数MHWRender::MRenderer::registerOverride注册插件中面向目标引擎虚幻引擎(Unreal Engine)的定制渲染器;
(2)通过函数MTimerMessage::addTimerCallback注册定期刷新视口的回调函数,在视口刷新时实现插件的Tick功能;
(3)通过函数MFnPlugin::registerCommand注册MPxCommand命令以辅助关联Maya与虚幻引擎编辑器(Unreal Engine Editor)内的对象、属性和资源;
(4)通过函数MSceneMessage::addCallback注册Maya退出函数回调;
(5)初始化依赖的虚幻引擎环境。
插件退出函数MStatusuninitializePlugin(MObject obj)及Maya退出函数回调中执行如下操作:
(1)向当前关联的虚幻引擎编辑器发送消息清除其中所有代理对象及配置;
(2)从共享内存中清除残留的图像数据及插件的注册信息;
(3)取消注册所有MPxCommand命令对象;
(4)取消注册所有回调函数;
(5)取消注册插件内实现的渲染器;
(6)销毁依赖的虚幻引擎环境。
2、初始化全局唯一共享内存,写入当前插件注册信息,初始化当前插件的消息接收队列,定期更新插件在此共享内存中的活跃时间并处理消息接收队列中的消息,具体可以包括以下内容包括:
基于Windows API CreateFileMapping、OpenFileMapping、MapViewOfFile、UnmapViewOfFile等创建共享内存的封装类FAzureInterprocessMemory,提供根据字符串名称创建共享内存、打开已有共享内存、关闭已打开共享内存、获取映射地址、获取共享内存总大小等接口。
基于类FAzureInterprocessMemory创建全局唯一共享内存的封装类FInterProcessRenderingSharedMemory。
其中,类FInterProcessRenderingSharedMemory主要提供四大类服务:
(1)创建、打开或关闭全局唯一共享内存对象;
(2)以Client_开头的系列函数为需要可视化服务的Maya插件提供注册、信息更新、匹配查找和取消注册等服务;
(3)以Server_开头的系列函数为提供可视化服务的虚幻引擎插件提供注册、信息更新、匹配查找和取消注册等服务;
(4)以Image_开头的系列函数提供可视化图像的设置和获取,以及接口的清除。
基于类FInterProcessRenderingSharedMemory完成全局唯一共享内存对象的初始化及Maya插件的注册。全局唯一共享内存对象使用统一固定的字符串名称,Maya插件注册时使用的字符串名称可以根据插件的完整路径加工生成。如果启用多个Maya插件实例,则可以在加工生成的路径后面增加数字后缀并不断尝试注册直到成功。
基于类FAzureInterprocessMemory创建Maya插件及虚幻引擎插件的消息接收队列封装类FAzureInterprocessMessageQueue。
其中,类FAzureInterprocessMessageQueue主要提供下列接口:
(1)初始化队列、关闭队列;
(2)在给定时间内尝试获取队列锁并存放单条或多条消息、通知等待方;
(3)在一定时间内尝试获取队列锁并取走已有消息或清除所有消息;
(4)查询已创建队列的最多消息个数和消息大小限制,供消息发送前检查是否需要拆分消息等。
Maya插件的消息接收队列的名称直接使用该插件在全局唯一共享内存中注册时使用的名称。
在视口定期刷新时通过FInterProcessRenderingSharedMemory::Client_KeepAlive接口更新本插件的活跃时间。
在视口定期刷新时从Maya插件的消息接收队列中取出所有消息,删除同类型冗余消息后再逐个处理。
3、从全局唯一共享内存注册信息中查找匹配的虚幻引擎编辑器,初步匹配后向对方消息接收队列发送消息清除可能存在的残留代理数据,收到清除成功回复后确定最终匹配成功,然后注册节点变化等回调函数,清空本地同步缓存,准备对象同步,具体可以包括以下内容:
通过FInterProcessRenderingSharedMemory::Server_FindAlive在全局唯一共享内存中给定时间内仍活跃的虚幻引擎编辑器中筛选出符合需要的作为提供可视化服务的对象,记录其消息接收队列的名称;
向匹配的虚幻引擎编辑器端消息发送消息清除虚幻引擎编辑器内与本插件名称关联的所有代理对象及配置。由于直接往消息队列中发送消息,可能受锁冲突或消息容量已满等因素影响而发送失败,因此增加消息缓存可以保证消息发送成功。消息缓存的主要接口包括按消息接收者缓存消息、补充发送者并在给定时间内尝试发送消息,以及查询缓存消息的所有接收者并清除过时接收者的所有消息等。
发送消息时,先打开接收者消息队列,调用接收者消息队列的FAzureInterprocessMessageQueue::TrySend执行消息发送,在TrySend中统计确认消息序列化后大小满足接收者消息队列的消息大小限制后,执行消息头和消息具体内容的序列化并存入接收者消息队列中,其中,消息头包含消息发送时间、发送者的消息接收队列名称和消息类型等信息,以方便回复对方或按发送者删除过时消息;
虚幻引擎编辑器在收到清除消息执行完成的信息后,按消息要求回复Maya端,Maya端收到回复后认为连接正式建立,清空本地同步缓存,注册当前场景节点的回调函数,包括:MDGMessage::addNodeAddedCallback、MDGMessage::addNodeRemovedCallback 、MNodeMessage::addNameChangedCallback 、MDagMessage::addInstanceAddedCallback 、MDagMessage::addInstanceRemovedCallback 、MDagMessage::addChildAddedCallback 、MDagMessage::addChildRemovedCallback 、MNodeMessage::addNodeDirtyCallback等。
4、设置Maya中网格模型在虚幻引擎编辑器中渲染时的材质参数。具体可以包括以下内容:
插件启动时扩充Maya配置脚本dagMenuProc.mel为选中对象增加右键扩展菜单项“Assign UE4 Material”;
设置材质时,对选中对象调用此菜单项,执行时列举所有关联的表面着色器(surfaceShader)并显示其名称到定制窗口中,交互时双击选择要与虚幻引擎编辑器内材质关联的表面着色器,即会执行启动插件时注册的MPxCommand命令,获取选中表面着色器的uuid(通用唯一识别码)并发送挑选材质消息给虚幻引擎编辑器;
虚幻引擎编辑器收到消息后弹出定制的内容浏览器(Content Browser)到Maya前显示所有可供选择的UMaterialInstance及UMaterial资源,双击匹配资源后即将选中的材质路径和对应表面着色器的uuid返回;
Maya收到返回消息后,根据uuid查找表面着色器节点,将UMaterialInstance及UMaterial资源的路径设置给此节点的名为“UE4Material”的扩充属性。
5、设置Maya中动画控制器在虚幻引擎编辑器中驱动的骨骼模型,具体可以包括以下内容:
选择所需动画控制器根节点,在Maya定制的界面中为此控制器向虚幻引擎编辑器发送选择关联骨骼组件的消息;
虚幻引擎编辑器收到消息弹出定制窗口到Maya前供选择场景内Actor及其包含的骨骼组件,交互选择后将动画控制器名称及选中的骨骼组件的GetPathName(获取路径名)结果返回。
6、根据已同步节点对象缓存,以及前次同步后从各种事件中收集而来的节点变化信息,确定最终要同步的节点对象,具体可以包括以下内容:
节点对象以其MDagPath的fullPathName()为同步双方的唯一标记,也作为缓存信息中对象的标记;
已同步节点对象的缓存结构为TSet<FString>,用于判断本次同步需要删除的对象和增加的对象,在同步消息成功发送后更新;
通过注册的节点变化回调MNodeMessage::addNodeDirtyCallback收集修改对象,其中,用于变换的节点在变化时一般并不通知其子孙节点;为提高变化传递效率,可以构建TMap<FString,TSet<FString>>类型的从Transform类节点到所有受影响网格节点的映射,从而快速传递变化;并根据节点的回调 函 数 MDagMessage::addChildAddedCallback 、MDagMessage::addChildRemovedCallback 、MNodeMessage::addNameChangedCallback等在同步对象前更新此映射;
由于两次同步之间,同一对象可能有多次更新动作,因此需要对这些更新动作进行合并;对于网格对象,则需要判断最终是否要添加、删除、重新同步几何数据、只同步几何变换等。
7、对需要同步的网格对象,使用高效接口获取几何数据,并考虑实例化因素,切分过大的几何数据同步消息,定制数组类型数据的序列化,以直接批量拷贝代替逐个拷贝,在可能时仅同步空间变换。
网格对象的同步消息根据同步内容可以分为以下几个部分:
(1)需删除的网格对象,只需记录其唯一标记;
(2)修改材质的网格对象,记录其唯一标记及对应各子部位在虚幻引擎编辑器中的材质路径;
(3)修改可见性的网格对象,只需记录其唯一标记及当前是否可见;
(4)只修改空间变换的网格对象,只需记录其唯一标记及变换矩阵FMatrix;
(5)实例化的网格对象,记录共享的几何信息,以及所有实例的唯一标记、变换矩阵、包围盒;
(6)非实例化的网格对象,记录几何信息、唯一标记、变换矩阵、包围盒。
其中,单个网格对象的几何信息结构包含顶点的各属性数组,以及各部位使用的顶点索引,可以包括以下内容:
(1)使用MFnMesh::getConnectedSetsAndMembers快速批量获取此网格对象的所有部位,结合MHWRender::MGeometryExtractor批量获取共享的顶点属性、各部位的顶点索引等。
(2)发送网格数据同步消息前,计算网格数据的序列化大小,当超过虚幻引擎编辑器消息接收队列每条消息的最大大小时,对网格数据以网格对象为单位、拆分成多条网格数据同步消息再逐个发送。
(3)发送前,对几何顶点属性、索引等数组类型数据执行序列化时,需要以定制化的批量拷贝代替默认的逐元素拷贝以提升序列化效率。
8、对要同步的动画数据,实时收集各关节的名称及关键帧数据。
其中,关节对象MFnIkJoint通过其方法getScale、getScaleOrientation、getRotation、getOrientation、getTranslation获取关键帧数据并转换为虚幻引擎编辑器中直接可用的矩阵。
9、向关联的虚幻引擎编辑器消息接收队列发送要同步的对象等数据,发送成功后使用相机参数为当前视口请求渲染结果。
请求渲染的消息包含如下内容:
(1)ViewportId,为渲染窗口的面板名称、用于返回时验证;
(2)CameraId,为渲染所用Maya相机节点的唯一标识,用于在虚幻引擎编辑器端创建对应的渲染图像捕获组件,满足虚幻引擎编辑器端渲染的连续性要求避免出现图像瑕疵;
(3)Width、Height为渲染图像的大小,CameraTransform为相机的位置朝向等参数,FOV为透视投影时的Field of view参数,OrthoWidth为正交投影参数;
(4)bHideMyMeshes为是否隐藏网格对象渲染、从而只显示三维场景和Maya内的线框;
(5)bCanProcessLatestOnly为是否覆盖未处理的历史同类消息,在拍屏时为false,其它时间为true;
(6)bStopWorldTick、WorldTickDeltaSeconds为拍屏所使用,用于停用虚幻引擎编辑器端自有的场景更新,改按拍屏给定的更新间隔受控更新;
具体地,匹配虚幻引擎编辑器后通过MCommandMessage::addProcCallback注册回调,回调函数的字符串参数包含"performPlayblast"或"playblast"即为拍屏相关调用,回调函数的bool参数指出拍屏开始或结束,据此为bCanProcessLatestOnly、bStopWorldTick、WorldTickDeltaSeconds等正确赋值;
FrameNumber将回设给回复消息带回,用于验证是否为当前帧请求的渲染结果、及检查网格对象等是否已全部正确同步。
渲染消息添加到消息缓存FInterProcessRenderingMessageSendCache后,在一定时间内不断尝试向匹配的虚幻引擎编辑器队列发送FInterProcessRenderingMessageSendCache内所有消息,并等待回复直到回复消息的FrameNumber与最近一次请求消息中的值匹配。
10、根据渲染回复消息从全局共享内存对象中查询渲染结果,更新给当前渲染器内部的纹理对象,具体可以包括以下内容:
从自身的消息队列获得渲染回复消息后,先检查消息是否已过时,再从全局唯一共享内存中以消息接收队列的名称查询渲染图像数据,渲染图像数据有颜色图像和深度图像两部分;
在MHWRender::MRenderer::getTextureManager()返回的MHWRender::MTextureManager对象接口acquireTexture申请纹理对象并缓存下来,更新纹理对象的数据内容。由于频繁因视口大小改变重新申请纹理对象有机会触发Maya内部控制器错乱的缺陷,因此可以将视口所需尺寸向上圆整到2的幂次后再申请,同时以圆整后的尺寸为映射的Key缓存纹理对象不释放,通过这种方式来减少纹理对象的申请次数来绕开缺陷,相应地需要以实际尺寸和圆整后的尺寸为比例缩放访问此图像数据时的纹理坐标。
11、渲染器以绘制背景图的方式恢复虚幻引擎编辑器返回的图像及深度,使用设备空间深度图配合其投影参数恢复出场景深度,再使用Maya中的投影参数生成新的设备深度。
其中,用于渲染背景图的pixel shader主函数可以根据需要包括VSUV、UVScale、gInputSampler、gInputSampler2、InvDeviceZToWorldZTransform、gSceneDepth2Device等内容:
VSUV为同时访问颜色和深度纹理对象的uv坐标;
UVScale为有效图像尺寸与纹理对象向上圆整为2的幂次后尺寸之间的缩放值;
gInputSampler用于采样MHWRender::kR16G16B16A16_FLOAT格式的颜色纹理;
gInputSampler2用于采样MHWRender::kR32G32_FLOAT格式的深度纹理;
InvDeviceZToWorldZTransform,为4维浮点向量,为虚幻引擎编辑器跟随深度图像一起发送的用于将虚幻引擎编辑器设备空间深度转换为虚幻引擎编辑器世界空间深度的参数;
gSceneDepth2Device为Maya中当前M3dView的投影矩阵;从虚幻引擎编辑器深度纹理中读出的虚幻引擎编辑器中设备深度ue4_ndc_depth经参数InvDeviceZToWorldZTransform转换成虚幻引擎编辑器世界空间深度scene_depth,再经gSceneDepth2Device重新计算后成Maya视图中设备空间的深度ndc_depth,转换到openGL的标准设备深度范围内并赋值给gl_FragDepth完成深度写入。
12、渲染器渲染透明物体、UI等其它内容,具体可以包括:
透明物体使用MHWRender::MSceneRender派生类并指定渲染MHWRender::MSceneRender::kRenderTransparentShadedItems类型,避免清除已写入的颜色及深度等;
UI元素使用MHWRender::MSceneRender派生类并指定渲染MHWRender::MSceneRender::kRenderUIItems类型,避免清除已写入的颜色深度等。
图5为在Maya中面向虚幻引擎创建数字内容的产品效果图。
实施例二
图6示意性示出了根据本申请实施例二的数字内容创作的实时可视化装置300的框图,该数字内容创作的实时可视化装置300可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。
如图6所示,该数字内容创作的实时可视化装置300可以包括第一获取模块310、传输模块320、请求模块330、第二获取模块340和显示模块350。
第一获取模块310,用于获取目标软件中各个可视化对象的目标数据;
传输模块320,用于将目标数据通过预先建立的实时传输通道传输至目标引擎,以供目标引擎根据目标数据实时生成或更新可视化对象的代理对象;
请求模块330,用于向目标引擎发送第一请求,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果;
第二获取模块340,用于通过实时传输通道获取目标引擎根据第一请求返回的第一可视化结果;
显示模块350,用于根据第一可视化结果在目标软件中显示具有遮挡关系的第二可视化结果。
在示例性的实施例中,实时传输通道基于操作系统的共享内存建立。
在示例性的实施例中,每一可视化对象包括唯一标识,传输模块320还用于:基于唯一标识将目标数据通过实时传输通道传输至目标引擎,以供目标引擎根据目标数据和唯一标识实时生成或更新可视化对象的代理对象。
在示例性的实施例中,传输模块320还用于:基于唯一标识将目标数据发送至目标引擎在共享内存中创建的消息接收队列中。
在示例性的实施例中,第一获取模块310还用于:在目标引擎未建立代理对象的情况下,通过主动查询的方式获取目标软件中各个可视化对象的目标数据;在目标引擎已建立代理对象的情况下,基于目标软件的事件通知获取目标软件中各个可视化对象的目标数据。
在示例性的实施例中,第一获取模块310还用于:建立目标软件中各节点与需要同步的可视化对象的映射关系,在节点收到事件通知时,通知与收到事件通知的节点具有映射关系的可视化对象,以获取需要同步的可视化对象的目标数据。
在示例性的实施例中,第一获取模块310还用于:确定需要同步的可视化对象对应的第一节点,在第一节点收到事件通知时,根据第一节点重新构建的逐层传递的依赖关系完成逐层传递,以获取需要同步的可视化对象的目标数据。
在示例性的实施例中,传输模块320还用于:在目标数据的大小大于或等于预设阈值的情况下,以可视化对象为单位将目标数据切割为若干份数据,将若干份数据通过实时传输通道传输至目标引擎。
在示例性的实施例中,传输模块320还用于:在目标数据包含动画内容数据的情况下,获取动画内容数据中的关键帧数据;将关键帧数据通过实时传输通道传输至目标引擎,以供目标引擎根据关键帧数据实时生成或更新可视化对象的代理对象。
在示例性的实施例中,数字内容创作的实时可视化装置300还包括设置模块(图中未示出),其中设置模块用于:向目标引擎发送第二请求,第二请求用于请求设置代理对象的目标属性,目标属性包括材质属性和/或骨骼模型属性;获取目标引擎根据第二请求返回的资源数据,根据资源数据在目标软件中显示属性选择菜单;接收对属性选择菜单的选定信息,将选定信息发送至目标引擎,以使目标引擎根据选定信息设置代理对象的目标属性。
在示例性的实施例中,显示模块350还用于:获取目标软件的第一投影参数和目标引擎的第二投影参数;在第一可视化结果中的深度图像为目标引擎的设备空间下的第一深度图像、第一投影参数与第二投影参数存在差异且不能调整成一致的情况下,获取将第一深度图像转换到世界空间深度图像的转换参数;根据转换参数将第一深度图像转换为世界空间下的第二深度图像;根据第一投影参数将第二深度图像转换为在目标软件的设备空间下的第三深度图像;根据第三深度图像在目标软件中显示有遮挡关系的第二可视化结果。
实施例三
图7示意性示出了本申请实施例三的数字内容创作的实时可视化方法,可以包括步骤S410~步骤S430,具体如下:
步骤S410,通过预先建立的实时传输通道获取目标软件传输的目标数据,目标数据为目标软件中各个可视化对象的数据。
应当说明的是,步骤S410~步骤S430的执行主体可以为目标引擎,更具体地,可以为目标引擎中定制的插件。另外,本实施例为与实施例一对应的在目标引擎侧的方法实施例,以下主要就目标引擎侧的实现进行说明,其余相同部分可以参见实施例一的相关描述,此处不再赘述。
具体地,可以是目标软件将要传输的目标数据先传输至实时传输通道中,目标引擎再从实时传输通道中获取目标数据。
步骤S420,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象。
具体地,目标引擎根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,在生成或更新代理对象时,可以结合目标引擎的场景等引擎数据生成或更新。
步骤S430,响应于目标软件发送的第一请求,通过实时传输通道将第一可视化结果传输至目标软件,以供目标软件根据第一可视化结果和第一深度信息在目标软件中显示具有遮挡关系的第二可视化结果,其中,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
具体地,目标引擎在接收到目标软件发送的第一请求后,根据代理对象和引擎数据实时渲染出包含深度信息的第一可视化结果,将第一可视化结果传输至实时传输通道中,以使目标软件可以从实时传输通道中获取第一可视化结果,再根据深度信息和第一可视化结果结合其自身的其它可视化元素融合得到具有正确遮挡关系的第二可视化结果。
本申请实施例的数字内容创作的实时可视化方法,通过预先建立的实时传输通道获取目标软件传输的目标数据,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,在接收到目标软件发送的请求时,将包含深度信息的第一可视化结果通过实时传输通道传输给目标软件,可以使目标软件根据深度信息和第一可视化结果生成具有正确遮挡关系的第二可视化结果;由于不需要在目标引擎和目标软件之间来回转换数据,因此可以有效地提高数字内容创作的效率。
在示例性的实施例中,如图8所示,在步骤S420中,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,可以包括步骤S501~步骤S502,具体如下:
步骤S501,在目标引擎中实时生成或更新代理对象时,将目标软件坐标系下的几何变换转换为目标引擎坐标系下的几何变换。
由于目标软件的坐标系与目标引擎的坐标系存在差别,因此可以先获取目标引擎坐标系与目标软件坐标系的转换关系,再根据转换关系将目标软件坐标系下的几何变换转换为目标引擎坐标系下的几何变换。
步骤S502,利用多线程将目标软件的目标属性转换为与目标引擎对应的属性。
由于目标软件中对象的目标属性在目标引擎中的对应属性并不相同,因此目标引擎也可以先获取两者属性之间的转换关系,再将目标软件中的目标属性转换为目标引擎对应的属性。其中,目标属性可以包括:顶点法线空间、顶点颜色等属性。
在转换时,可以利用多线程来进行转换,每一线程负责一个或以上的属性。例如,可以利用一个线程负责顶点法线空间属性的转换,一个线程负责顶点颜色属性的转换。
本实施例中,通过在目标引擎中实时生成或更新代理对象时,将目标软件坐标系下的几何变换转换为目标引擎坐标系下的几何变换,可以使目标软件中的几何变换转变为目标引擎中的几何变换,从而顺利在目标引擎中生成或更新代理对象;另外,利用多线程将目标软件的目标属性转换为与目标引擎对应的属性,一方面可以将目标软件中的属性转变为目标引擎中的属性,另一方面利用多线程可以提高转换的效率。
在示例性的实施例中,步骤S420中,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,包括:在可视化对象为几何对象时,将目标软件中的分层式或依赖图式的节点结构中的多级节点几何变换合并为单个累积变换,根据累积变换在目标引擎中实时生成或更新可视化对象的代理对象。
通这将目标软件中的分层式或依赖图式的节点结构中的多级节点几何变换,合并为单个累积变换,可以将目标软件中复杂的节点层次结构转换为以几何对象为中心的扁平结构,极大地简化了目标软件与目标引擎中的同步过程。
在示例性的实施例中,如图9所示,步骤S420中,根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象,可以包括步骤S601~步骤S602,具体如下:
步骤S601,在目标引擎中实时生成或更新代理对象时,建立与目标软件的目标几何数据匹配的分部位可视化结构,目标几何数据为目标软件根据预设查询方式得到的数据,且在同一几何对象有多个实例化对象时,目标几何数据为对实例化对象通过预设查询方式查询一次,同时对实例化对象的几何变换逐个查询获得的数据。
其中,预设查询方式可以包括但不限于通过目标软件高效的查询接口或批量属性查询接口等接口查询的方式。
由于几何数据往往比较复杂,当同一几何对象有多个实例化对象时,多次查询会导致性能低下,因此对同一几何对象的多个实例化对象通过预设查询方式获取几何数据时只查询一次,同时对各实例化对象的几何变换逐个查询,可以有效地减少查询的代价,提高数据同步的效率。
步骤S602,在代理对象包含关节对象代理的情况下,建立关节对象代理与目标引擎内动画主体的关联。
本实施例中,通过在目标引擎中实时生成或更新代理对象时,建立与目标软件的目标几何数据匹配的分部位可视化结构,其中目标几何数据为目标软件根据预设查询方式得到的数据,且在同一几何对象有多个实例化对象时,目标几何数据为对实例化对象通过预设查询方式查询一次,同时对实例化对象的几何变换逐个查询获得的数据,可以减少查询的代价和数据的拷贝,提高同步的效率;而通过在代理对象包含关节对象代理的情况下,建立关节对象代理与目标引擎内动画主体的关联,可以重用外观配置,减少几何数据的查询和同步,提高同步的效率。
在示例性的实施例中,数字内容创作的实时可视化方法还可以包括:在目标软件指定目标引擎的更新频率的情况下,停止目标引擎中的主动更新,根据更新频率进行动画的同步更新。具体地,若目标软件未指定更新频率,目标引擎可以按照目标引擎中设置或默认的更新频率进行更新;若目标软件指定目标引擎的更新频率,则目标引擎停止目标引擎中的主动更新,根据目标软件指定的更新频率进行动画的同步更新。通过在目标软件指定更新频率时,停止目标引擎中的主动更新,根据更新频率进行动画的同步更新,可以使目标软件的用户根据需要指定目标引擎中的更新频率,满足数字内容创作的需要。
在示例性的实施例中,数字内容创作的实时可视化方法还可以包括:在接收到第一请求时,基于同一场景和不同的相机参数生成不同相机下的可视化图像作为第一可视化结果,其中,相机参数根据目标软件的指定值或通过计算转换得到,相机参数包括视口大小、相机空间变换、透视投影视场参数(Field Of View)、正交投影视锥体尺寸。通过在接收到第一请求时,基于同一场景和不同的相机参数生成不同相机下的可视化图像作为第一可视化结果,可以使目标软件的用户根据实际需要请求不同的可视化图像,从而更好地满足数字内容创作的需要。
在示例性的实施例中,步骤S430中,通过实时传输通道将第一可视化结果传输至目标软件,可以包括:通过目标引擎的快速获取接口获取第一可视化结果,将第一可视化结果拷贝至实时传输通道中,以供目标软件从实时传输通道读取第一可视化结果。通过快速获取接口获取第一可视化结果,将第一可视化结果拷贝至实时传输通道中,可以减少拷贝次数,提高运行效率。
为了更清楚地说明本申请实施例的数字内容创作的实时可视化方法,以下将通过具体示例来进一步说明,其中,目标引擎以虚幻引擎为例,目标软件以Maya例,更具体地,以虚幻引擎端插件为例进行说明,如图10所示,具体如下:
虚幻引擎端的插件可以包含以下内容:
1、创建虚幻引擎插件,实现虚幻引擎插件模块初始化及退出函数。
在虚幻引擎插件模块的StartupModule函数内:
(1)设置UEditorPerformanceSettings::bThrottleCPUWhenNotForeground为false,避免虚幻引擎编辑器不在前台时会降低帧率而不能及时处理消息;
(2)向代理对象注册回调函数GEngine->OnWorldAdded()、GEngine->OnWorldDestroyed()、FEditorDelegates::PostPIEStarted、FEditorDelegates::PrePIEEnded、FGameDelegates::Get().GetEndPlayMapDelegate();在这些回调函数中,根据情况开启或关闭渲染服务;在关闭渲染服务时将为Maya提供的捕获组件USceneCaptureComponent2D及网格代理组件等从当前UWorld中取消注册;开启渲染服务时则将这些组件注册到新的UWorld中。
在虚幻引擎插件模块的ShutdownModule函数内:
(1)清除虚幻引擎插件模块现在的注册信息、消息接收队列等;
(2)删除注册的所有回调函数;
2、让虚幻引擎插件模块继承FGCObject,覆盖父类的方法AddReferencedObjects,以收集所有为Maya提供服务的USceneCaptureComponent2D及网格代理组件等,避免被垃圾回收。
3、在虚幻引擎插件的Tick函数中,初始化全局唯一共享内存,写入虚幻引擎插件的注册信息,同时更新虚幻引擎插件的活跃时间,处理消息队列中消息,清空过时的Maya对象代理等,具体可以包括以下内容:
初始化全局唯一共享内存,虚幻引擎插件的注册过程与Maya插件的操作基本相同,区别在于虚幻引擎插件注册时使用了FInterProcessRenderingSharedMemory::Server_Register接口,且用于注册的名称根据虚幻引擎插件模块dll的完整路径经加工而来,注册成功后也创建消息接收队列用于接收Maya插件消息。
通过函数FInterProcessRenderingModule::Server_KeepAlive更新虚幻引擎插件的活跃时间;从消息队列中获取所有消息后,去除冗余消息后逐个处理;
当检测到Maya插件不再活跃时,清空虚幻引擎内对应的图像捕获组件、网格代理组件等;当检测到活跃Maya插件内某相机已不再请求捕获时,销毁为之创建的图像捕获组件。
4、在处理Maya发来的清除消息时,清空与之关联的图像捕获及代理组件等,并根据参数决定是否回复。其中,Maya首次连接时、场景创建或打开等变化前发送的清除消息并期望回复则回复,在Maya不再切换其它渲染器、退出插件或编辑器时发送的清除消息则无需回复。
5、处理Maya发来的请求挑选材质消息时,创建窗口至Maya前以供显示UMaterialInstance及UMaterial类型的资源,交互选择后将选中的资源路径和请求的对象标识发回Maya。创建窗口时,生成SWindow并设置IsTopmostWindow属性为true可显示到Maya编辑器前,其中,借助虚幻引擎编辑器内置的FContentBrowserModule模块可轻松创建资源选择窗口。
6、处理Maya发来的网格对象同步消息时,清除已删除对象的代理、创建新增对象的网格代理、更新网格对象代理的空间变换和几何数据、材质等,具体可以包括以下内容:
清除已删除对象的代理时,从UWorld中取消注册相应组件,等待垃圾回收;修改网格对象代理的各部位材质时,因网格对象为从UMeshComponent派生的子类,按路径加载材质后可调用UMeshComponent::SetMaterial为各部位设置材质对象;对象的显隐可调用更高级父类函数USceneComponent::SetVisibility;变换更新则将变换矩阵转换到虚幻引擎坐标系统下后调用USceneComponent::SetWorldTransform。
为快速拷贝几何数据,可以创建UMeshComponent的子类UAzureMayaMeshComponent及面向渲染线程的数据结构FAzureMayaMeshSceneProxy。
Maya几何数据经处理后直接批量拷贝到相应的顶点属性Buffer或索引Buffer中。
Maya几何数据的处理包括,逐顶点作法线归一化并补充副法线的方向,顶点较多时可以借助多线程加速完成,其中,函数GetSafeNormal可以完成快速的法线归一化处理,函数ConvertTangentNormal将从Maya传来的法线空间转换成虚幻引擎中需要的法线空间。
Maya几何数据的处理还包括,在其空间变换矩阵的秩为负时,改变顶点索引数据的顺序。
Maya几何数据的处理还包括,逐顶点将FLinearColor转换为FColor类型的颜色数据。
处理好的几何数据在覆写的虚函数FAzureMayaMeshSceneProxy::GetDynamicMeshElements中供渲染线程分部位收集后渲染。
7、处理Maya发来的请求挑选USkeletalMeshComponent与指定关节根对象关联的消息时,创建窗口到Maya前以显示当前所有Actor及内部的USkeletalMeshComponent列表,交互选择后将选中组件的GetPathName结果及关节根对象标识发回Maya,具体可以包括以下内容:
创建窗口时,借助FSceneOutlinerModule::CreateSceneOutliner可轻松创建场景内Actor的选择界面,对选中的Actor调用GetComponents可查询其内部组件供选择。对已关联的USkeletalMeshComponent需设置其动画更新方式为动画蓝图,并嵌入自定义节点以应用之后从Maya同步来的动画数据。
对已关联的USkeletalMeshComponent:
(1)调用USkeletalMeshComponent::SetUpdateAnimationInEditor(true);
(2)调用USkeletalMeshComponent::SetAnimationMode(EAnimationMode::AnimationBl ueprint);
(3)设置自定义的动画实例类USkeletalMeshComponent::SetAnimInstanceClass(UAzureMayaLinkInstance::St aticClass());
(4)将Maya关节根对象标识设置到由UAzureMayaLinkInstance:publicUAnimInstance创建的FAzureMayaLinkInstanceProxy:publicFAnimInstanceProxy内的FAnimNode_AzureMayaLinkPose:publicFAnimNode_Base中;
(5)动画更新时在FAnimNode_AzureMayaLinkPose::Evaluate_AnyThread根据关联的Maya关节根对象标识从Maya同步来的关键帧数据中查找匹配者,之后按骨骼名称设置给各骨骼。
(6)如果USkeletalMeshComponent已使用的动画实例类内有其它节点行为不能忽略,则直接将节点FAnimNode_AzureMayaLinkPose嵌入到其动画蓝图中共同生成最终姿态,将Maya关节根对象标识设置到此FAnimNode_AzureMayaLinkPose中。
8、处理Maya已关联关节节点的关键帧数据同步,先缓存后由动画蓝图节点FAnimNode_AzureMayaLinkPose在需要时查询。
9、处理Maya请求渲染的消息时,找到或创建与Maya相机匹配的图像捕获组件,设置捕获参数,执行捕获并使用高效接口获取图像数据后返回,具体可以包括以下内容:
(1)按消息发送者及请求渲染消息FInterProcessRendering_MsgRenderRequest中的相机标识CameraId创建或找到并设置对应的捕获组件USceneCaptureComponent2D,设置图像捕获组件的透视或正交投影参数,其中,函数参数CameraTransform、FOV、OrthoWidth分别对应FInterProcessRendering_MsgRenderRequest中的同名成员。
(2)捕获前,若FInterProcessRendering_MsgRenderRequest参数bStopWorldTick、WorldTickDeltaSeconds有效则调用FSlateThrottleManager::Get().EnterResponsiveMode(),以停止UWorld自身的动画更新,然后调用函数来完成受控更新;同时调用USceneCaptureComponent::UpdateDeferredCaptures(EditorWorld->Scene)更新虚幻引擎编辑器内当前场景自带图像捕获组件的捕获内容;
(3)捕获前,若FInterProcessRendering_MsgRenderRequest参数bHideMyMeshes非0,则对所有同步组件调用SetHiddenInGame(true);
(4)捕获前,增加FrameNumber避免特效等渲染错误;
(5)调用USceneCaptureComponent2D::CaptureScene()执行捕获;
(6)使用高效的FRHICommandListImmediate::ReadSurfaceFloatData接口从捕获组件的RenderTarget中读取颜色缓存:
(7)获取深度贴图纹理,因深度贴图实际大小可能超过所需大小,因此逐行读取深度数据;
(8)将捕获的数据通过FInterProcessRenderingSharedMemory::Image_Set直接设置到全局唯一的共享内存中为此Maya插件分配的位置;
(9)更新与当前CameraId匹配的捕获时间,方便后期清除过时捕获组件;
(10)收集当前与此Maya插件关联的网格代理对象等数目,返回给Maya端供验证。
以下再进一步说明在Maya端和虚幻引擎端的实施过程,如图11所示,包括:
1、虚幻引擎端,在虚幻引擎编辑器的插件管理器中启用按本申请方案为虚幻引擎创建的插件,并重启编辑器使其生效。
2、Maya端,在插件管理器中启用按本申请方案为Maya创建的插件。在首选项中,将“渲染引擎”设置为“OpenGL-核心配置(精确)”或“OpenGL-核心配置(兼容性)”,并重启Maya。重启后在视口菜单的“渲染器”中,选择使用本申请方案创建的新的渲染器。此时视口内已显示虚幻引擎编辑器中显示的场景。
3、Maya端,创建或加载待处理的网格模型,此时网格模型已由虚幻引擎编辑器渲染但使用了虚幻引擎中的默认材质;选中网格模型的某个部位单击右键、点击“Assign UE4Material”菜单项后弹出虚幻引擎编辑器中的材质列表,双击选择合适的材质后,视口中网格模型的相应部位外观已发生变化;继续为其它部位选择合适的材质,保存网格模型后下次打开就可以直接使用;对网格模型执行进一步建模或动画制作操作。
4、Maya端,在特定界面中建立关节根节点与虚幻引擎编辑器中骨骼模型的映射,调整关节节点后即会更新骨骼模型的姿态;建立变换节点与虚幻引擎编辑器中通用场景组件的映射,修改变换节点即会使虚幻引擎编辑器中通用场景组件产生运动;也可建立灯光、相机等节点与虚幻引擎编辑器中灯光、相机组件的映射,达到类似目的。
5、Maya端,对当前的动画进行拍屏,将生成由虚幻引擎编辑器渲染的动画视频。
6、Maya端,导出当前的模型或动画,输出到虚幻引擎编辑器中供进一步使用。
实施例四
图12示意性示出了根据本申请实施例四的数字内容创作的实时可视化装置700的框图,该数字内容创作的实时可视化装置700可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。
如图12所示,该数字内容创作的实时可视化装置700可以包括获取模块710、代理模块720和传输模块730。
获取模块710,用于通过预先建立的实时传输通道获取目标软件传输的目标数据,目标数据为目标软件中各个可视化对象的数据;
代理模块720,用于根据目标数据在目标引擎中实时生成或更新可视化对象的代理对象;
传输模块730,用于响应于目标软件发送的第一请求,通过实时传输通道将第一可视化结果传输至目标软件,以供目标软件根据第一可视化结果在目标软件中显示具有遮挡关系的第二可视化结果,其中,第一请求用于请求目标引擎返回第一可视化结果,第一可视化结果为目标引擎根据代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
在示例性的实施例中,代理模块720还用于:在目标引擎中实时生成或更新代理对象时,将目标软件坐标系下的几何变换转换为目标引擎坐标系下的几何变换;利用多线程将目标软件的目标属性转换为与目标引擎对应的属性。
在示例性的实施例中,代理模块720还用于:在可视化对象为几何对象时,将目标软件中的分层式或依赖图式的节点结构中的多级节点几何变换合并为单个累积变换,根据累积变换在目标引擎中实时生成或更新可视化对象的代理对象。
在示例性的实施例中,代理模块720还用于:在目标引擎中实时生成或更新代理对象时,建立与目标软件的目标几何数据匹配的分部位可视化结构,目标几何数据为目标软件根据预设查询方式得到的数据,且在同一几何对象有多个实例化对象时,目标几何数据为对实例化对象通过预设查询方式查询一次,同时对实例化对象的几何变换逐个查询获得的数据;在代理对象包含关节对象代理的情况下,建立关节对象代理与目标引擎内动画主体的关联。
在示例性的实施例中,数字内容创作的实时可视化装置700还包括更新模块(图中未示出),其中更新模块用于:在目标软件指定目标引擎的更新频率的情况下,停止目标引擎中的主动更新,根据更新频率进行动画的同步更新。
在示例性的实施例中,数字内容创作的实时可视化装置700还包括生成模块(图中未示出),其中生成模块还用于:在接收到第一请求时,基于同一场景和不同的相机参数生成不同相机下的可视化图像作为第一可视化结果,相机参数根据目标软件的指定值或通过计算转换得到,相机参数包括视口大小、相机空间变换、透视投影视场参数、正交投影视锥体尺寸。
在示例性的实施例中,传输模块730还用于:通过目标引擎的快速获取接口获取第一可视化结果,将第一可视化结果拷贝至实时传输通道中,以供目标软件从实时传输通道读取第一可视化结果。
实施例五
图13示意性示出了根据本申请实施例五的适于数字内容创作的实时可视化方法的计算机设备800的硬件架构图。计算机设备800可以是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或数据处理的设备。例如,可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)、网关等。如图13所示,计算机设备800至少包括但不限于:可通过系统总线相互通信链接存储器810、处理器820、网络接口830。其中:
存储器810至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器810可以是计算机设备800的内部存储模块,例如该计算机设备800的硬盘或内存。在另一些实施例中,存储器810也可以是计算机设备800的外部存储设备,例如该计算机设备800上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器810还可以既包括计算机设备800的内部存储模块也包括其外部存储设备。本实施例中,存储器810通常用于存储安装于计算机设备800的操作系统和各类应用软件,例如数字内容创作的实时可视化方法的程序代码等。此外,存储器810还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器820在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器820通常用于控制计算机设备800的总体操作,例如执行与计算机设备800进行数据交互或者通信相关的控制和处理等。本实施例中,处理器820用于运行存储器810中存储的程序代码或者处理数据。
网络接口830可包括无线网络接口或有线网络接口,该网络接口830通常用于在计算机设备800与其他计算机设备之间建立通信链接。例如,网络接口830用于通过网络将计算机设备800与外部终端相连,在计算机设备800与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通信系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband CodeDivision Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图13仅示出了具有部件810-830的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器810中的数字内容创作的实时可视化方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器820)所执行,以完成本申请实施例。
实施例六
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的数字内容创作的实时可视化方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中数字内容创作的实时可视化方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (22)
1.一种数字内容创作的实时可视化方法,其特征在于,包括:
获取目标软件中各个可视化对象的目标数据;
将所述目标数据通过预先建立的实时传输通道传输至目标引擎,以供所述目标引擎根据所述目标数据实时生成或更新所述可视化对象的代理对象;
向所述目标引擎发送第一请求,所述第一请求用于请求所述目标引擎返回第一可视化结果,所述第一可视化结果为所述目标引擎根据所述代理对象和引擎数据实时渲染出的包含第一深度信息的结果;
通过所述实时传输通道获取所述目标引擎根据所述第一请求返回的所述第一可视化结果;
根据所述第一可视化结果和所述第一深度信息在所述目标软件中显示具有遮挡关系的第二可视化结果。
2.根据权利要求1所述的方法,其特征在于,所述实时传输通道基于操作系统的共享内存建立。
3.根据权利要求2所述的方法,其特征在于,每一所述可视化对象包括唯一标识,所述将所述目标数据通过预先建立的实时传输通道传输至目标引擎,以供所述目标引擎根据所述目标数据实时生成或更新所述可视化对象的代理对象,包括:
基于所述唯一标识将所述目标数据通过所述实时传输通道传输至所述目标引擎,以供所述目标引擎根据所述目标数据和所述唯一标识实时生成或更新所述可视化对象的代理对象。
4.根据权利要求3所述的方法,其特征在于,所述基于所述唯一标识将所述目标数据通过所述实时传输通道传输至所述目标引擎,包括:
基于所述唯一标识将所述目标数据发送至所述目标引擎在所述共享内存中创建的消息接收队列中。
5.根据权利要求1所述的方法,其特征在于,所述获取目标软件中各个可视化对象的目标数据,包括:
在所述目标引擎未建立所述代理对象的情况下,通过主动查询的方式获取所述目标软件中各个可视化对象的目标数据;
在所述目标引擎已建立所述代理对象的情况下,基于所述目标软件的事件通知获取所述目标软件中各个所述可视化对象的目标数据。
6.根据权利要求5所述的方法,其特征在于,所述基于所述目标软件的事件通知获取所述目标软件中各个所述可视化对象的目标数据,包括:
建立所述目标软件中各节点与需要同步的可视化对象的映射关系;
在所述节点收到事件通知时,通知与所述收到事件通知的节点具有映射关系的可视化对象,以获取所述需要同步的可视化对象的目标数据。
7.根据权利要求5所述的方法,其特征在于,所述基于所述目标软件的事件通知获取所述目标软件中各个所述可视化对象的目标数据,包括:
确定需要同步的可视化对象对应的第一节点;
在所述第一节点收到事件通知时,根据所述第一节点重新构建的逐层传递的依赖关系完成逐层传递,以获取所述需要同步的可视化对象的目标数据。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述将所述目标数据通过预先建立的实时传输通道传输至目标引擎,包括:
在所述目标数据的大小大于或等于预设阈值的情况下,以所述可视化对象为单位将所述目标数据切割为若干份数据,将所述若干份数据通过所述实时传输通道传输至所述目标引擎。
9.根据权利要求1-7任一项所述的方法,其特征在于,所述将所述目标数据通过预先建立的实时传输通道传输至目标引擎,包括:
在所述目标数据包含动画内容数据的情况下,获取所述动画内容数据中的关键帧数据;
将所述关键帧数据通过所述实时传输通道传输至所述目标引擎,以供所述目标引擎根据所述关键帧数据实时生成或更新所述可视化对象的代理对象。
10.根据权利要求1-7任一项所述的方法,其特征在于,还包括:
向所述目标引擎发送第二请求,所述第二请求用于请求设置所述代理对象的目标属性,所述目标属性包括材质属性和/或骨骼模型属性;
接收所述目标引擎根据所述第二请求和资源数据返回的属性选择菜单,在所述目标软件中显示所述属性选择菜单;
接收对所述属性选择菜单的选定信息,将所述选定信息发送至所述目标引擎,以使所述目标引擎根据所述选定信息设置所述代理对象的目标属性。
11.根据权利要求1-7任一项所述的方法,其特征在于,所述根据所述第一可视化结果和所述第一深度信息在所述目标软件中显示具有遮挡关系的第二可视化结果,包括:
获取所述目标软件的第一投影参数和所述目标引擎的第二投影参数;
在所述第一可视化结果中的深度图像为所述目标引擎的设备空间下的第一深度图像、所述第一投影参数与所述第二投影参数存在差异且不能调整成一致的情况下,获取将所述第一深度图像转换到世界空间深度图像的转换参数;
根据所述转换参数将所述第一深度图像转换为世界空间下的第二深度图像;
根据所述第一投影参数将所述第二深度图像转换为在所述目标软件的设备空间下的第三深度图像;
根据所述第三深度图像在所述目标软件中显示有遮挡关系的第二可视化结果。
12.一种数字内容创作的实时可视化装置,其特征在于,包括:
第一获取模块,用于获取目标软件中各个可视化对象的目标数据;
传输模块,用于将所述目标数据通过预先建立的实时传输通道传输至目标引擎,以供所述目标引擎根据所述目标数据实时生成或更新所述可视化对象的代理对象;
请求模块,用于向所述目标引擎发送第一请求,所述第一请求用于请求所述目标引擎返回第一可视化结果,所述第一可视化结果为所述目标引擎根据所述代理对象和引擎数据实时渲染出的包含第一深度信息的结果;
第二获取模块,用于通过所述实时传输通道获取所述目标引擎根据所述第一请求返回的所述第一可视化结果;
显示模块,用于根据所述第一可视化结果在所述目标软件中显示具有遮挡关系的第二可视化结果。
13.一种数字内容创作的实时可视化方法,其特征在于,包括:
通过预先建立的实时传输通道获取目标软件传输的目标数据,所述目标数据为所述目标软件中各个可视化对象的数据;
根据所述目标数据在目标引擎中实时生成或更新所述可视化对象的代理对象;
响应于所述目标软件发送的第一请求,通过所述实时传输通道将第一可视化结果传输至所述目标软件,以供所述目标软件根据所述第一可视化结果和第一深度信息在所述目标软件中显示具有遮挡关系的第二可视化结果,其中,所述第一请求用于请求所述目标引擎返回所述第一可视化结果,所述第一可视化结果为所述目标引擎根据所述代理对象和引擎数据实时渲染出的包含所述第一深度信息的结果。
14.根据权利要求13所述的方法,其特征在于,所述根据所述目标数据在目标引擎中实时生成或更新所述可视化对象的代理对象,包括:
在所述目标引擎中实时生成或更新所述代理对象时,将所述目标软件坐标系下的几何变换转换为所述目标引擎坐标系下的几何变换;
利用多线程将所述目标软件的目标属性转换为与所述目标引擎对应的属性。
15.根据权利要求13所述的方法,其特征在于,所述根据所述目标数据在目标引擎中实时生成或更新所述可视化对象的代理对象,包括:
在所述可视化对象为几何对象时,将所述目标软件中的分层式或依赖图式的节点结构中的多级节点几何变换合并为单个累积变换,根据所述累积变换在所述目标引擎中实时生成或更新所述可视化对象的代理对象。
16.根据权利要求13所述的方法,其特征在于,所述根据所述目标数据在目标引擎中实时生成或更新所述可视化对象的代理对象,包括:
在所述目标引擎中实时生成或更新所述代理对象时,建立与目标软件的目标几何数据匹配的分部位可视化结构,所述目标几何数据为所述目标软件根据预设查询方式得到的数据,且在同一几何对象有多个实例化对象时,所述目标几何数据为对所述实例化对象通过所述预设查询方式查询一次,同时对所述实例化对象的几何变换逐个查询获得的数据;
在所述代理对象包含关节对象代理的情况下,建立关节对象代理与所述目标引擎内动画主体的关联。
17.根据权利要求13所述的方法,其特征在于,还包括:
在所述目标软件指定所述目标引擎的更新频率的情况下,停止所述目标引擎中的主动更新,根据所述更新频率进行动画的同步更新。
18.根据权利要求13所述的方法,其特征在于,还包括:
在接收到所述第一请求时,基于同一场景和不同的相机参数生成不同相机下的可视化图像作为所述第一可视化结果,所述相机参数根据所述目标软件的指定值或通过计算转换得到,所述相机参数包括视口大小、相机空间变换、透视投影视场参数、正交投影视锥体尺寸。
19.根据权利要求13所述的方法,其特征在于,所述通过所述实时传输通道将第一可视化结果传输至所述目标软件,包括:
通过所述目标引擎的快速获取接口获取所述第一可视化结果,将所述第一可视化结果拷贝至所述实时传输通道中,以供所述目标软件从所述实时传输通道读取所述第一可视化结果。
20.一种数字内容创作的实时可视化装置,其特征在于,包括:
获取模块,用于通过预先建立的实时传输通道获取目标软件传输的目标数据,所述目标数据为所述目标软件中各个可视化对象的数据;
代理模块,用于根据所述目标数据在目标引擎中实时生成或更新所述可视化对象的代理对象;
传输模块,用于响应于所述目标软件发送的第一请求,通过所述实时传输通道将第一可视化结果传输至所述目标软件,以供所述目标软件根据所述第一可视化结果在所述目标软件中显示具有遮挡关系的第二可视化结果,其中,所述第一请求用于请求所述目标引擎返回所述第一可视化结果,所述第一可视化结果为所述目标引擎根据所述代理对象和引擎数据实时渲染出的包含第一深度信息的结果。
21.一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时用于实现权利要求1至11或13-19中任一项所述的数字内容创作的实时可视化方法的步骤。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行权利要求1至11或13-19中任一项所述的数字内容创作的实时可视化方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211661003.0A CN115797522A (zh) | 2022-12-22 | 2022-12-22 | 数字内容创作的实时可视化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211661003.0A CN115797522A (zh) | 2022-12-22 | 2022-12-22 | 数字内容创作的实时可视化方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115797522A true CN115797522A (zh) | 2023-03-14 |
Family
ID=85427764
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211661003.0A Pending CN115797522A (zh) | 2022-12-22 | 2022-12-22 | 数字内容创作的实时可视化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115797522A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116389284A (zh) * | 2023-03-17 | 2023-07-04 | 南通大学 | 一种分布式量子计算中基于依赖图的传输代价优化方法 |
-
2022
- 2022-12-22 CN CN202211661003.0A patent/CN115797522A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116389284A (zh) * | 2023-03-17 | 2023-07-04 | 南通大学 | 一种分布式量子计算中基于依赖图的传输代价优化方法 |
CN116389284B (zh) * | 2023-03-17 | 2023-11-07 | 南通大学 | 一种分布式量子计算中基于依赖图的传输代价优化方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101386822B1 (ko) | 마커들을 모션 캡처하는 방법 및 마커들을 모션 캡처하는 컴퓨터 프로그램이 저장된 컴퓨터 판독 가능한 저장 매체 | |
US20190311544A1 (en) | Image processing for augmented reality | |
CN110675466A (zh) | 渲染系统及渲染方法、装置、电子设备和存储介质 | |
CN110199323B (zh) | 用于定义、捕获、组装和显示定制视频内容的系统和方法 | |
US20080094394A1 (en) | Automated derivative view rendering system | |
US20020080139A1 (en) | Apparatus and method of interactive model generation using multi-images | |
US10607409B2 (en) | Synthetic geotagging for computer-generated images | |
CN108876887B (zh) | 渲染方法和装置 | |
CN111125402B (zh) | 用于记录关于被渲染资产的信息的方法和系统 | |
US9019268B1 (en) | Modification of a three-dimensional (3D) object data model based on a comparison of images and statistical information | |
CN112258610B (zh) | 图像标注方法、装置、存储介质及电子设备 | |
WO2022033162A1 (zh) | 一种模型加载方法以及相关装置 | |
CN115797522A (zh) | 数字内容创作的实时可视化方法及装置 | |
WO2018094883A1 (zh) | 生成三维模型的方法和终端设备 | |
CN112652046A (zh) | 游戏画面的生成方法、装置、设备及存储介质 | |
US8219637B2 (en) | Storage management for renderfarm | |
CN114581580A (zh) | 渲染图像的方法、装置、存储介质及电子设备 | |
Nicolet et al. | Repurposing a relighting network for realistic compositions of captured scenes | |
CN117201883A (zh) | 用于图像编辑的方法、装置、设备和存储介质 | |
KR101155564B1 (ko) | 협업적 영상 제작 관리 장치 | |
CN111640191A (zh) | 基于vr一体机的投录屏画面采集处理方法 | |
CN115591239A (zh) | 游戏场景生成方法、装置、计算机设备和存储介质 | |
US11978147B2 (en) | 3D rendering | |
CN114266874A (zh) | 一种三维数据生成方法、装置、设备和存储介质 | |
CN116635900A (zh) | 时延弹性化的云渲染 |
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 |