虚拟场景渲染方法、装置、存储介质及电子设备与流程

文档序号:25607359发布日期:2021-06-25 14:07阅读:113来源:国知局
虚拟场景渲染方法、装置、存储介质及电子设备与流程

1.本公开涉及计算机技术领域,具体涉及一种虚拟场景渲染方法、装置、存储介质及电子设备。


背景技术:

2.在虚拟场景中烘焙水系时,为了贴合现有的虚拟场景地形通常会制作流水瀑布效果。
3.现有的绘制步骤一般包括:首先将场景内摆好的模型组合导出到3dsmax或者其他dcc工具;然后根据模型创建符合模型走势的流水或者瀑布的模型片并拆分uv;之后导入flowmap tool等其他flowmap绘制工具中绘制水流方向,并将水流方向保存成贴图导出;最后再重新导入引擎给上贴图材质。上述方法需要从多个不同的软件导入导出,操作步骤繁琐且绘制效率低;另外需要额外采样一张flow map贴图来控制流水方向。
4.需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

5.本公开的目的在于提供一种虚拟场景渲染方法、装置、存储介质及电子设备,旨在简化虚拟场景渲染的步骤,提高渲染效率。
6.本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
7.根据本公开实施例的一个方面,提供了一种虚拟场景渲染方法,包括:配置三维场景中流动区域的样条线,并基于所述样条线生成目标网格;根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;以及根据所述目标网格和所述流动区域的相交区域计算泡沫信息;根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,并根据所述顶点像素值渲染所述目标网格。
8.根据本公开的一些实施例,基于前述方案,所述配置三维场景中流动区域的样条线,包括:设置三维场景的流动区域,并为所述流动区域配置流动轨迹;将所述流动轨迹中的轨迹点垂直投影至所述流动区域以生成初始样条线;对所述初始样条线进行重新采样以得到所述样条线。
9.根据本公开的一些实施例,基于前述方案,所述将所述流动轨迹中的轨迹点垂直投影至所述流动区域以生成初始样条线,包括:将所述流动轨迹中的轨迹点垂直投影至所述流动区域得到投影点;选取在投影方向上与所述投影点距离最短的单元网格点作为所述投影点对应的目标网格点;按预设连接规则连接所述目标网格点以生成所述初始样条线。
10.根据本公开的一些实施例,基于前述方案,所述基于所述样条线生成目标网格,包括:选取所述样条线中任意一点,并在该点处生成预设二维平面内与所述样条线垂直的一条目标直线;针对所述样条线复制所述目标直线,以获取所述样条线中各点的目标直线;根
据所述样条线中一点的法线方向对该点的目标直线进行偏移调整;对所述样条线和偏移调整后的目标直线进行蒙皮处理以生成所述目标网格。
11.根据本公开的一些实施例,基于前述方案,所述流动向量包括在预设二维平面内第一方向的流动向量和第二方向的流动向量,所述根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量,包括:基于所述样条线的切线方向获取所述目标网格中各顶点在第一方向的初始流动向量和第二方向的初始流动向量;以及基于所述流动区域的地形参数获取所述流动区域中各顶点在第一方向的梯度向量和第二方向的梯度向量;计算第一方向的初始流动向量和梯度向量的差值得到所述第一方向的流动向量;以及计算第二方向的初始流动向量和梯度向量的差值得到所述第二方向的流动向量。
12.根据本公开的一些实施例,基于前述方案,所述根据所述目标网格与所述流动区域的相交区域计算泡沫信息,包括:计算所述目标网格与所述流动区域的相交区域;根据所述相交区域的面积和噪声类型生成所述相交区域中各顶点对应的随机数作为所述泡沫信息。
13.根据本公开的一些实施例,基于前述方案,所述顶点像素值包括所述目标网格中各顶点在第一颜色通道中的第一像素值、在第二颜色通道中的第二像素值和在第三颜色通道中的第三像素值,所述根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,包括:根据所述流动向量计算所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值;以及基于所述泡沫信息计算所述目标网格中各顶点的所述第三像素值。
14.根据本公开的一些实施例,基于前述方案,所述根据所述流动向量计算所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值,包括:根据预先配置的水流纹理贴图得到所述目标网格中各顶点在第一颜色通道的第一初始像素值和在第二颜色通道的第二初始像素值;以及基于所述流动向量中第一方向和第二方向的流动向量分别计算所述水流纹理贴图在所述第一方向和所述第二方向随时间变化的偏移信息;将所述偏移信息分别叠加至所述第一初始像素值和所述第二初始像素值得到所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值。
15.根据本公开的一些实施例,基于前述方案,所述基于所述泡沫信息计算所述目标网格中各顶点的所述第三像素值,包括:获取预先配置的所述相交区域中顶点在第三颜色通道的第三初始像素值;将所述泡沫信息叠加至所述第三初始像素值得到所述目标网格中各顶点的所述第三像素值。
16.根据本公开的一些实施例,基于前述方案,所述根据所述顶点像素值渲染所述目标网格,包括:基于所述顶点像素值和预先配置的材质像素值确定所述目标网格的漫反射颜色分量和镜面反射颜色分量;根据所述顶点像素值、所述漫反射颜色分量、所述镜面反射颜色分量渲染所述目标网格。
17.根据本公开实施例的第二个方面,提供了一种虚拟场景渲染装置,包括:网格模块,用于配置三维场景中流动区域的样条线,并基于所述样条线生成目标网格;计算模块,用于根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;以及根据所述目标网格和所述流动区域的相交区域计算泡沫信息;渲染模块,用于根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,并根据所述顶点像素值渲染所述目标网格。
18.根据本公开实施例的第三个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述实施例中的虚拟场景渲染方法。
19.根据本公开实施例的第四个方面,提供了一种电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述实施例中的虚拟场景渲染方法。
20.本公开示例性实施例可以具有以下部分或全部有益效果:
21.在本公开的一些实施例所提供的技术方案中,通过配置三维场景中的样条线生成目标网格,然后计算流动向量和泡沫信息以计算目标网格的顶点像素值,最终对目标网格进行渲染得到水流绘制效果。能够避免额外从其他工具采样流动贴图去控制水流方向,一方面,不仅减少了着色器渲染的指令数,还简化了需要从不同软件的导出导入步骤,提高了渲染运行效率,节省渲染时间;另一方面可以直接在渲染的虚拟引擎中调试,渲染效果直观,所见即所得。
22.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
23.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
24.图1示意性示出本公开示例性实施例中一种虚拟场景渲染方法的流程示意图;
25.图2示意性示出本公开示例性实施例中一种初始样条线的示意图;
26.图3示意性示出本公开示例性实施例中一种目标直线的示意图;
27.图4示意性示出本公开示例性实施例中一种目标网格的示意图;
28.图5示意性示出本公开示例性实施例中另一种目标网格的示意图;
29.图6示意性示出本公开示例性实施例中一种相交区域的示意图;
30.图7示意性示出本公开示例性实施例中一种泡沫区域的示意图;
31.图8示意性示出本公开示例性实施例中一种虚拟场景渲染装置的组成示意图;
32.图9示意性示出本公开示例性实施例中一种计算机可读存储介质的示意图;
33.图10示意性示出本公开示例性实施例中一种电子设备的计算机系统的结构示意图。
具体实施方式
34.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
35.此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,
本领域技术人员将意识到,可以实践本公开的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
36.附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
37.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
38.以下对本公开实施例的技术方案的实现细节进行详细阐述。
39.图1示意性示出本公开示例性实施例中一种虚拟场景渲染方法的流程示意图。如图1所示,该虚拟场景渲染方法包括步骤s1至步骤s3:
40.步骤s1,配置三维场景中流动区域的样条线,并基于所述样条线生成目标网格;
41.步骤s2,根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;以及根据所述目标网格和所述流动区域的相交区域计算泡沫信息;
42.步骤s3,根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,并根据所述顶点像素值渲染所述目标网格。
43.在本公开的一些实施例所提供的技术方案中,通过配置三维场景中的样条线生成目标网格,然后计算流动向量和泡沫信息以计算目标网格的顶点像素值,最终对目标网格进行渲染得到水流绘制效果。能够避免额外从其他工具采样流动贴图去控制水流方向,一方面,不仅减少了着色器渲染的指令数,还简化了需要从不同软件的导出导入步骤,提高了渲染运行效率,节省渲染时间;另一方面可以直接在渲染的虚拟引擎中调试,渲染效果直观,所见即所得。
44.基于虚拟场景的渲染需求,经常需要制作贴合现有的场景地形或者场景模型的流水瀑布效果。在现有技术中,通常是将场景内摆好的模型组合导出到3dsmax或者其他dcc工具,再根据模型创建符合模型走势的流水或者瀑布的模型片,拆分uv,之后导入flowmap tool(贴图制作工具)等其他flowmap(流动贴图)绘制工具中绘制水流方向,并将水流方向保存成贴图导出。最后再重新导入引擎给上贴图材质进行渲染。
45.现有的渲染技术制作起来比较繁琐,制作时间较长,并且材质上需要额外采样一张flowmap贴图去控制流水方向,多个不同软件导入导出操作繁琐。
46.因此,本公开提供一种虚拟场景渲染方法,基于houdini(电影特效魔术师)开发专用的工具对虚拟场景的瀑布水流进行渲染,避免额外采样flowmap贴图去控制水流方向,从而提高渲染效率。
47.下面,将结合附图及实施例对本示例实施方式中的虚拟场景渲染方法的各个步骤进行更详细的说明。
48.步骤s1,配置三维场景中流动区域的样条线,并基于所述样条线生成目标网格。
49.在本公开的一个实施例中,步骤s1具体可以包括以下过程:
50.步骤s11,获取三维场景;
51.步骤s12,配置三维场景中流动区域的样条线;
52.步骤s13,基于所述样条线生成目标网格。
53.具体来说,对于步骤s11,首先获取待渲染的虚拟场景模型。其中,虚拟场景可以但不限于包括:游戏场景,虚拟现实(vr)场景,动画场景,模拟器场景等等。比如在手机安卓(android)系统中渲染游戏场景,在pc计算机的安卓(android)系统中渲染动画场景等等。
54.可以利用虚拟引擎加载待渲染的虚拟场景模型。举例来说,可以将需要添加流水或者瀑布的虚拟场景模型传入虚拟引擎unity以获取三维场景。
55.在本公开的一个实施例中,对于步骤s12,所述配置三维场景中流动区域的样条线的具体过程如下,包括:
56.步骤s121,设置三维场景的流动区域,并为所述流动区域配置流动轨迹。
57.具体地,由于虚拟场景是三维模型,而水流区域是三维模型的一部分,所以在对虚拟场景进行水流效果渲染时,需要明确三维场景的流动区域,也就是需要进行水流渲染的区域。配置流动区域可以通过虚拟引擎对三维模型进行智能提取,也可以经过人工干预设置。
58.流动区域设置完毕后需要配置流动区域的流动轨迹,流动轨迹表示该流动区域主要的水流走向。用户可以通过使用虚拟引擎中的控件进行配置,例如点击形成流动轨迹中的关键点,或者是通过滑动绘制等,终端识别到用户对控件的操作后生成流动轨迹。
59.步骤s122,将所述流动轨迹中的轨迹点垂直投影至所述流动区域以生成初始样条线。
60.具体而言,在虚拟引擎中流动轨迹是由多个轨迹点组成的,将所有的轨迹点垂直投影至流动区域能够获得用户配置的流动轨迹对应在流动区域的初始样条线。
61.在本公开的一个实施例中,所述将所述流动轨迹中的轨迹点垂直投影至所述流动区域以生成初始样条线,包括:将所述流动轨迹中的轨迹点垂直投影至所述流动区域得到投影点;选取在投影方向上与所述投影点距离最短的单元网格点作为所述投影点对应的目标网格点;按预设连接规则连接所述目标网格点以生成所述初始样条线。
62.具体而言,可以使导入的流动轨迹中的每一个轨迹点照垂直的方向投射到流动区域模型上,命中后按最短距离吸附到流动区域模型上,让样条线与流动区域更贴合。
63.需要说明的是,虚拟引擎中的坐标系是规则的,有单元网格,而创建的三维虚拟场景模型不一定是规则的,因此在生成初始样条线时,为了将初始样条线与虚拟场景模型更加贴合,所以在投影之后需要选取与投影点距离最短的单元网格点连接成线,也就是按最短距离吸附到流动区域模型上。
64.图2示意性示出本公开示例性实施例中一种初始样条线的示意图,参考图2所示,201为将轨迹点垂直投影至所述流动区域得到的吸附点,即目标网格点,再将多个吸附点201连接成线就得到了初始样条线202。
65.步骤s123,对所述初始样条线进行重新采样以得到所述样条线。
66.在本公开的一个实施例中,为了使得样条线更加平滑,可以对初始样条线进行重新采样,将初始样条线中的点细分。
67.在本公开的一个实施例中,对于步骤s13,所述基于所述样条线生成目标网格,包括:
68.步骤s131,选取所述样条线中任意一点,并在该点处生成预设二维平面内与所述
样条线垂直的一条目标直线。
69.其中,在虚拟场景中的三维坐标系中,样条线所在的竖直平面为yoz平面,那么预设二维平面就是指与yoz平面垂直的xoy平面。在预设xoy平面中,样条线与目标直线呈90
°
垂直。
70.步骤s132,针对所述样条线复制所述目标直线,以获取所述样条线中各点的目标直线。
71.通过复制的方式利用步骤s131中的方法得到样条线中各点的目标直线,此时目标直线在预设二维平面内相互平行。
72.步骤s133,根据所述样条线中一点的法线方向对该点的目标直线进行偏移调整;
73.图3示意性示出本公开示例性实施例中一种目标直线的示意图,参考图3所示,根据样条线中各点的法线方向将所有点对应的目标直线进行偏移,偏移调整后得到与样条线301中与各点实际的法线方向垂直的各偏移后的目标直线302。
74.步骤s134对所述样条线和偏移调整后的目标直线进行蒙皮处理以生成所述目标网格。
75.图4示意性示出本公开示例性实施例中一种目标网格的示意图,参考图4所示,基于水流区域的位置,将样条线以及偏移后的目标直线进行蒙皮化处理成为一个表面,如图4的401所示。
76.图5示意性示出本公开示例性实施例中另一种目标网格的示意图,参考图5所示,为图4的顶部视角呈现的目标网格,其中501为目标网格,502为虚拟场景模型的部分流动区域。
77.步骤s2,根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;以及根据所述目标网格和所述流动区域的相交区域计算泡沫信息。
78.在本公开的一个实施例中,步骤s2主要包括以下两个内容:
79.步骤s21,根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;
80.步骤s22,根据所述目标网格和所述流动区域的相交区域计算泡沫信息。
81.需要说明的是,对计算流动向量和计算泡沫信息的执行顺序不做限定,本公开的方法中可以先计算流动向量,也可以先计算泡沫信息,也可以同时执行。
82.在本公开的一个实施例中,对于步骤s21,所述流动向量包括在预设二维平面内第一方向的流动向量和第二方向的流动向量,所述根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量,包括:
83.步骤s211,基于所述样条线的切线方向获取所述目标网格中各顶点在第一方向的初始流动向量和第二方向的初始流动向量;以及基于所述流动区域的地形参数获取所述流动区域中各顶点在第一方向的梯度向量和第二方向的梯度向量。
84.参考图4的目标网格,预设二维平面即是xoy平面,第一方向和第二方向分别是坐标系中的x轴正方向和y轴正方向。对于目标网格中的每一个顶点,都需要计算该顶点的流动向量。
85.其中,初始流动向量的方向为第一方向和第二方向,大小则为在各方向上的流动速度,可以根据实际的流水预期效果配置相应的流动速度,进而得到该顶点在x和y方向上的初始流动向量。
86.同时,渲染水流还需要考虑到虚拟场景模型地形的陡峭程度,由于地形的崎岖,使得水流偏离了原本的流动方向。基于目标网格中的一个顶点,获取该点的的地形的梯度信息,根据梯度信息计算该顶点在x和y方向上的梯度向量。
87.步骤s212,计算第一方向的初始流动向量和梯度向量的差值得到所述第一方向的流动向量;以及计算第二方向的初始流动向量和梯度向量的差值得到所述第二方向的流动向量。
88.在获取了目标网格中各顶点分别在x方向和y方向上的初始流动向量和梯度向量后,用初始流动向量减去梯度向量就可以得到各顶点分别在x和y方向上流动向量,进而表现出水流向量被反向推开得效果,即根据地形来修正水流的流动向量。
89.在本公开的一个实施例中,对于步骤s22,所述根据所述目标网格与所述流动区域的相交区域计算泡沫信息,包括:
90.步骤s221,计算所述目标网格与所述流动区域的相交区域。
91.其中,目标网格是根据样条线生成的较为平滑的区域,而流动区域是原有的虚拟场景模型中一部分模型区域,所以基于真实的虚拟场景模型,水流所在的目标网格与虚拟模型的流动区域会存在一些相交的区域,在这些相交的区域会使得水流受到障碍物的阻拦而产生水流泡沫。
92.根据目标网格所在的平面和流动区域所在的平面可以得到两个平面相交的点,根据相交的点形成在目标网格上的一个闭合的相交区域。
93.图6示意性示出本公开示例性实施例中一种相交区域的示意图,参考图6所示,目标网格中601中包括多个目标网格和流动区域的相交区域602。
94.步骤s222,根据所述相交区域的面积和噪声类型生成所述相交区域中各顶点对应的随机数作为所述泡沫信息。
95.在本公开的一个实施例中,可以通过添加图像噪声的方式获取泡沫信息。其中噪声类型包括高斯噪声、脉冲噪声、伽马噪声、瑞利噪声、指数分布噪声和均匀分布噪声中的任意一种噪声类型,本公开在此不做具体限定。
96.对相交区域中的各顶点添加图像噪声以获取随机数,进而根据随机数确定水流在该相交区域产生的泡沫区域大小。根据相交区域的大小,所产生的泡沫区域大小也不同。
97.图7示意性示出本公开示例性实施例中一种泡沫区域的示意图,参考图7所示,目标网格中701中包括多个泡沫区域702。
98.步骤s3,根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,并根据所述顶点像素值渲染所述目标网格。
99.在本公开的一个实施例中,首先需要计算目标网格的顶点像素值。其中,顶点像素值包括目标网格中各顶点在第一颜色通道中的第一像素值、在第二颜色通道中的第二像素值和在第三颜色通道中的第三像素值,也就是在红色通道中的r值,在绿色通道中的g值,在蓝色通道的b值,通过对红(r)、绿(g)、蓝(b)三个颜色通道的变化以及它们相互之间的叠加来得到顶点的颜色。
100.在计算顶点像素值时,可以将流动向量信息和泡沫信息以不同的分配方式存储在不同的颜色通道中,进而得到该顶点的rgb值用于着色器进行渲染。
101.在本公开的一个实施例中,所述根据所述流动向量和所述泡沫信息计算所述目标
网格的顶点像素值,包括:
102.步骤s31,根据所述流动向量计算所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值。
103.在本公开的一个实施例中,步骤s31计算第一像素值和第二像素值的具体过程包括如下步骤:步骤s311,根据预先配置的水流纹理贴图得到所述目标网格中各顶点在第一颜色通道的第一初始像素值和在第二颜色通道的第二初始像素值;以及步骤s312,基于所述流动向量中第一方向和第二方向的流动向量分别计算所述水流纹理贴图在所述第一方向和所述第二方向随时间变化的偏移信息;步骤s313,将所述偏移信息分别叠加至所述第一初始像素值和所述第二初始像素值得到所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值。
104.其中,水流纹理贴图是预先配置好的,是用于模拟水流形态的贴图、初始状态下目标网格中各顶点是静态的,水流纹理贴图中包含纹理坐标uv的值,将水流纹理贴图赋在目标网格后就可以得到目标网格中个顶点的uv值,即第一颜色通道的第一初始像素值和在第二颜色通道的第二初始像素在,第一颜色通道可以是红色通道r值,第二颜色通道可以是绿色通道g值。
105.通过流动向量来确定目标网格中各顶点的颜色值在x、y方向随时间的偏移量,用于模拟目标网格中各顶点的水流变化颜色。
106.最后将各顶点在x、y方向的颜色值偏移量叠加在r和g通道的初始像素值中,便计算出各顶点随时间变化的第一像素值r值和第二像素值g值。
107.步骤s32,基于所述泡沫信息计算所述目标网格中各顶点的所述第三像素值。
108.在本公开的一个实施例中,步骤s32计算第三像素值的具体过程包括如下步骤:步骤s321,获取预先配置的所述相交区域中顶点在第三颜色通道的第三初始像素值;步骤s322,将所述泡沫信息叠加至所述第三初始像素值得到所述目标网格中各顶点的所述第三像素值。
109.具体而言,将流动向量信息传递给目标网格中顶点色的红色通道和绿色通道时,可以将泡沫信息传递给目标网格中顶点色的蓝色通道。
110.首先需要先配置相交区域的顶点色,为了贴合实际的水流泡沫颜色,将顶点色设置为白色,即r:255,g:255,b:255,在第三颜色通道b通道的第三初始像素值为255。然后将随时间变化的泡沫信息存储至b通道,将泡沫信息和第三初始像素值进行叠加得到顶点的第三像素值b值。
111.当然也可以将流动向量信息和泡沫信息以不同的分配方式存储在不同的颜色通道中,其中流动向量信息存储在两个颜色通道内,泡沫信息存储在另一个颜色通道内,本公开对此不作具体限定。
112.在得到目标网格的顶点像素值后,就可以执行步骤s33:根据所述顶点像素值渲染所述目标网格。通过shader着色器根据顶点的rgb值渲染出顶点随时间变化的颜色以达到视觉上的水流渲染效果。
113.基于顶点像素值和预先配置的材质像素值确定所述目标网格的漫反射颜色分量和镜面反射颜色分量,然后根据顶点像素值、漫反射颜色分量以及镜面反射颜色分量渲染所述目标网格。
114.接下来,通过一个具体的应用场景的实施例对上述方法做进一步详细的说明。
115.1.在unity中使用houdini engine for unity插件,让had工具得以在unity中运行;
116.2.添加object merge节点开放给unity,添加流水或者瀑布的虚拟场景模型传入houdini制作的hda工具;
117.3.在hda中添加curve节点并开放节点给unity,可以在unity中编辑流动轨迹并输入hda中;
118.4.对导入的流动轨迹跟虚拟场景模型使用ray节点,可以让导入的动轨迹中的每一个点按照垂直的方向投射到导入的模型上,命中后按最短距离吸附到模型上,让样条线与模型更贴合;
119.5.添加resample节点,重新采样样条线,将样条线的点细分,使得样条线更加平滑;
120.6.添加line节点,生成一条在xoy平面垂直与样条线的线;
121.7.使用copy节点,将垂直的线复制到样条线的每一个点上,并根据每个点的法线方向偏移;
122.8.添加skin节点将这些线蒙皮化为一个表面得到目标网格;
123.9.添加flowmap节点,根据样条线的切线方向生成初始流动向量;
124.10.添加flowpmap obstacle节点,将目标网格与虚拟场景模型的流动区域输入,在流动区域各顶点位置将初始流动向量反向推开,得到最后的流动向量;
125.11.添加intersection analysis节点,将目标网格与虚拟场景模型的流动区域输入,获取到两个模型直接的交点。
126.12.添加color节点,将相交点的颜色信息设置为白色。
127.13.添加attribute transfer节点,将目标网格与相交点信息输入,将相交点颜色传递给目标网格,生成泡沫信息。
128.14.添加attribute vop节点,将流动向量传递给目标网格顶点色的rg通道,将泡沫信息传递给目标网格顶点色的b通道。
129.15.最后输出至unity,在unity内通过shader获取流动向量以及泡沫信息做材质渲染上的处理。
130.基于上述方法,利用houdini开发一种虚拟场景模型渲染工具,使用该工具进行虚拟场景渲染能够避免额外采样一张flow map贴图去控制水流方向,不仅减少了shader的指令数,还简化了需要从不同软件的导出导入步骤,提高了渲染运行效率,节省渲染时间,同时可以直接在unity虚拟引擎中调试,渲染效果直观,所见即所得。
131.图8示意性示出本公开示例性实施例中一种虚拟场景渲染装置的组成示意图,如图8所示,该虚拟场景渲染装置800可以包括网格模块801、计算模块802以及渲染模块803。其中:
132.网格模块801,用于配置三维场景中流动区域的样条线,并基于所述样条线生成目标网格;
133.计算模块802,用于根据所述样条线的切线方向和所述流动区域的地形参数计算流动向量;以及根据所述目标网格和所述流动区域的相交区域计算泡沫信息;
134.渲染模块803,用于根据所述流动向量和所述泡沫信息计算所述目标网格的顶点像素值,并根据所述顶点像素值渲染所述目标网格。
135.根据本公开的示例性实施例,所述网格模块801包括流动轨迹单元、初始样条线单元和样条线单元(图中未示出),所述流动轨迹单元用于设置三维场景的流动区域,并为所述流动区域配置流动轨迹;所述初始样条线单元用于将所述流动轨迹中的轨迹点垂直投影至所述流动区域以生成初始样条线;所述样条线单元用于对所述初始样条线进行重新采样以得到所述样条线。
136.根据本公开的示例性实施例,所述初始样条线单元用于将所述流动轨迹中的轨迹点垂直投影至所述流动区域得到投影点;选取在投影方向上与所述投影点距离最短的单元网格点作为所述投影点对应的目标网格点;按预设连接规则连接所述目标网格点以生成所述初始样条线。
137.根据本公开的示例性实施例,所述网格模块801包括目标网格单元(图中未示出),用于选取所述样条线中任意一点,并在该点处生成预设二维平面内与所述样条线垂直的一条目标直线;针对所述样条线复制所述目标直线,以获取所述样条线中各点的目标直线;根据所述样条线中一点的法线方向对该点的目标直线进行偏移调整;对所述样条线和偏移调整后的目标直线进行蒙皮处理以生成所述目标网格。
138.根据本公开的示例性实施例,所述流动向量包括在预设二维平面内第一方向的流动向量和第二方向的流动向量,所述计算模块802包括流动向量单元(图中未示出),用于基于所述样条线的切线方向获取所述目标网格中各顶点在第一方向的初始流动向量和第二方向的初始流动向量;以及基于所述流动区域的地形参数获取所述流动区域中各顶点在第一方向的梯度向量和第二方向的梯度向量;计算第一方向的初始流动向量和梯度向量的差值得到所述第一方向的流动向量;以及计算第二方向的初始流动向量和梯度向量的差值得到所述第二方向的流动向量。
139.根据本公开的示例性实施例,所述计算模块802包括泡沫信息单元(图中未示出),用于计算所述目标网格与所述流动区域的相交区域;根据所述相交区域的面积和噪声类型生成所述相交区域中各顶点对应的随机数作为所述泡沫信息。
140.根据本公开的示例性实施例,所述顶点像素值包括所述目标网格中各顶点在第一颜色通道中的第一像素值、在第二颜色通道中的第二像素值和在第三颜色通道中的第三像素值,所述渲染模块803包括第一单元和第二单元(图中未示出),所述第一渲染信息单元用于根据所述流动向量计算所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值;以及所述第二渲染信息单元用于基于所述泡沫信息计算所述目标网格中各顶点的所述第三像素值。
141.根据本公开的示例性实施例,所述第一单元用于根据预先配置的水流纹理贴图得到所述目标网格中各顶点在第一颜色通道的第一初始像素值和在第二颜色通道的第二初始像素值;以及基于所述流动向量中第一方向和第二方向的流动向量分别计算所述水流纹理贴图在所述第一方向和所述第二方向随时间变化的偏移信息;将所述偏移信息分别叠加至所述第一初始像素值和所述第二初始像素值得到所述目标网格中各顶点随时间变化的所述第一像素值和所述第二像素值。
142.根据本公开的示例性实施例,所述第二单元用于获取预先配置的所述相交区域中
顶点在第三颜色通道的第三初始像素值;将所述泡沫信息叠加至所述第三初始像素值得到所述目标网格中各顶点的所述第三像素值。
143.根据本公开的示例性实施例,所述渲染模块803包括渲染单元(图中未示出),用于基于所述顶点像素值和预先配置的材质像素值确定所述目标网格的漫反射颜色分量和镜面反射颜色分量;根据所述顶点像素值、所述漫反射颜色分量、所述镜面反射颜色分量渲染所述目标网格。
144.上述的虚拟场景渲染装置800中各模块的具体细节已经在对应的虚拟场景渲染方法中进行了详细的描述,因此此处不再赘述。
145.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
146.在本公开的示例性实施例中,还提供了一种能够实现上述方法的存储介质。图9示意性示出本公开示例性实施例中一种计算机可读存储介质的示意图,如图9所示,描述了根据本公开的实施方式的用于实现上述方法的程序产品900,其可以采用便携式紧凑盘只读存储器(cd

rom)并包括程序代码,并可以在终端设备,例如手机上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
147.在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。图10示意性示出本公开示例性实施例中一种电子设备的计算机系统的结构示意图。
148.需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
149.如图10所示,计算机系统1000包括中央处理单元(central processing unit,cpu)1001,其可以根据存储在只读存储器(read

only memory,rom)1002中的程序或者从存储部分1008加载到随机访问存储器(random access memory,ram)1003中的程序而执行各种适当的动作和处理。在ram 1003中,还存储有系统操作所需的各种程序和数据。cpu 1001、rom 1002以及ram 1003通过总线1004彼此相连。输入/输出(input/output,i/o)接口1005也连接至总线1004。
150.以下部件连接至i/o接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如lan(local area network,局域网)卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至i/o接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
151.特别地,根据本公开的实施例,下文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质
1011被安装。在该计算机程序被中央处理单元(cpu)1001执行时,执行本公开的系统中限定的各种功能。
152.需要说明的是,本公开实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、闪存、光纤、便携式紧凑磁盘只读存储器(compact disc read

only memory,cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
153.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
154.描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
155.作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。
156.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
157.通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施
方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd

rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本公开实施方式的方法。
158.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。
159.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1