三维场景的渲染方法、图像处理器、电子设备及存储介质技术

技术编号:37572822 阅读:17 留言:0更新日期:2023-05-15 07:50
本申请提供了一种三维场景的渲染方法、图像处理器、电子设备及存储介质,涉及计算机技术领域,渲染方法应用于图像处理器,包括:获取三维场景在上一帧中的各个三维模型以及每个三维模型对应的显示标记以及包围体数据;针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令,绘制当前帧的该三维模型;若该三维模型对应的显示标记为不可见,则基于该三维模型对应的包围体数据,确定是否将该三维模型对应的显示标记更新为可见,若是,则生成该三维模型的渲染指令,绘制当前帧的该三维模型。采用本申请提供的技术方案能够避免打断渲染流水线问题,提高了渲染效率。效率。效率。

【技术实现步骤摘要】
三维场景的渲染方法、图像处理器、电子设备及存储介质


[0001]本申请涉及计算机
,尤其是涉及一种三维场景的渲染方法、图像处理器、电子设备及存储介质。

技术介绍

[0002]在三维场景渲染过程中,并不是所有的模型都在视锥体范围内,而且在视锥体范围内还存在模型之间相互遮挡的情况,要做到实时绘制,避免丢帧卡顿现象,就需要引入高效的视锥体剔除和遮挡剔除算法,避免或减少不必要的模型绘制。
[0003]目前,针对视锥体剔除,现有技术的解决办法是引入场景管理、空间划分等类似手段,将场景模型构建为某种树型加速结构,然后对该树各个节点计算包围体,按照从根节点到叶子节点依次与视锥体做相交检测,如果根节点与视锥体不相交则不再对其子节点与视锥体做相交检测,但是复杂三维场景的加速树型会引入更多的包围体,而通过中央处理器CPU做剔除运算会消耗大量CPU时间;针对遮挡剔除,通过CPU实时做到像素级正确的剔除几乎是没有办法的,现有技术的解决办法是通过图像处理器GPU的查询办法,对待渲染物体的包围体做绘制检测,如果包围体通过遮挡剔除,则绘制该物体,但是查询会打断渲染流水线,阻塞绘制,反而会降低渲染效率;因此,如何进行三维场景的渲染,以提高渲染效率,成为了亟待解决的问题。

技术实现思路

[0004]有鉴于此,本申请的目的在于提供一种三维场景的渲染方法、图像处理器、电子设备及存储介质,能够通过利用绘制时帧间的相关性,将绘制过程分为绘制“可见模型”和绘制“不可见模型”,并将整个绘制渲染的工作通过图像处理器完成,避免绘制时出现显存与内存的数据通信导致的打断渲染流水线的问题,提高了渲染效率。
[0005]本申请主要包括以下几个方面:
[0006]第一方面,本申请实施例提供了一种三维场景的渲染方法,应用于图像处理器,所述渲染方法包括:
[0007]获取三维场景在上一帧中的各个三维模型以及每个三维模型对应的显示标记以及包围体数据;
[0008]针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型,将当前帧绘制后的每个三维模型的组合确定为当前帧的三维场景;
[0009]针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型对应的包围体数据,确定是否将该三维模型对应的显示标记更新为可见,若是,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型,将当前帧绘制后的每个三维模型的组合确定为当前帧的三维场景。
[0010]进一步的,所述针对每个三维模型,若该三维模型对应的显示标记为可见,则生成
该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型的步骤,包括:
[0011]针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令;
[0012]基于该三维模型的渲染指令,获取所述三维场景对应的视锥体的每个截面;
[0013]基于所述视锥体的每个截面以及该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否仍然在所述视锥体的内部;
[0014]若不在所述视锥体的内部,则将该三维模型对应的显示标记更新为不可见,并基于该三维模型不可见的显示标记,跳过当前帧的该三维模型的绘制;
[0015]若在所述视锥体的内部,则基于该三维模型可见的显示标记,绘制当前帧的该三维模型。
[0016]进一步的,所述基于所述视锥体的每个截面以及该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否仍然在所述视锥体的内部的步骤,包括:
[0017]基于所述视锥体的每个截面以及该三维模型对应的包围体数据,从所述视锥体的第一个截面开始作为当前截面,确定所述包围体数据中包围体中心点到当前截面的距离;
[0018]若所述包围体中心点到当前截面的距离大于所述包围体数据中的包围体半径,则确定该三维模型当前不在所述视锥体的内部;
[0019]若所述包围体中心点到当前截面的距离不大于所述包围体数据中的包围体半径,则确定当前截面是否是所述视锥体的最后一个截面;
[0020]若不是最后一个截面,则将当前截面的下一个截面更新为当前截面继续确定所述包围体中心点到当前截面的距离,直至当前截面为所述视锥体的最后一个截面;
[0021]若是最后一个截面,则确定该三维模型当前仍然在所述视锥体的内部。
[0022]进一步的,所述针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型的包围体数据,确定是否将该三维模型对应的显示标记更新为可见,若是,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型的步骤,包括:
[0023]针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否在所述三维场景对应的视锥体的内部;
[0024]若是,则基于所述包围体数据生成所述包围体对应的外接多面体,并确定所述外接多面体所包围的该三维模型是否被所述视锥体的内部的其他三维模型遮挡;
[0025]若未被遮挡,则获取该三维模型未被遮挡的部分,并将该三维模型对应的显示标记更新为可见,生成该三维模型的渲染指令,基于该三维模型的渲染指令,绘制当前帧的该三维模型未被遮挡的部分。
[0026]进一步的,所述渲染方法还包括:
[0027]在确定当前帧的三维场景之后,获取所述三维场景在当前帧中的各个三维模型以及每个三维模型对应的包围体数据;
[0028]针对当前帧的每个三维模型,基于当前帧的该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否在所述三维场景对应的视锥体的内部;
[0029]若否,则将该三维模型对应的显示标记更新为不可见,得到该三维模型在当前帧的显示标记,以便进行下一帧三维场景的渲染;
[0030]若是,则基于所述包围体数据生成所述包围体对应的外接多面体,并确定所述外接多面体所包围的该三维模型当前是否被所述视锥体的内部的其他三维模型遮挡;
[0031]若被遮挡,则将该三维模型对应的显示标记更新为不可见,得到该三维模型在当前帧的显示标记,以便进行下一帧三维场景的渲染;
[0032]若未被遮挡,则将该三维模型对应的显示标记更新为可见,得到该三维模型在当前帧的显示标记,以便进行下一帧三维场景的渲染。
[0033]第二方面,本申请实施例还提供了一种图像处理器,所述图像处理器包括:
[0034]获取模块,用于获取三维场景在上一帧中的各个三维模型以及每个三维模型对应的显示标记以及包围体数据;
[0035]第一处理模块,用于针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型,将当前帧绘制后的每个三维模型的组合确定为当前帧的三维场景;
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种三维场景的渲染方法,其特征在于,应用于图像处理器,所述渲染方法包括:获取三维场景在上一帧中的各个三维模型以及每个三维模型对应的显示标记以及包围体数据;针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型,将当前帧绘制后的每个三维模型的组合确定为当前帧的三维场景;针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型对应的包围体数据,确定是否将该三维模型对应的显示标记更新为可见,若是,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型,将当前帧绘制后的每个三维模型的组合确定为当前帧的三维场景。2.根据权利要求1所述的渲染方法,其特征在于,所述针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型的步骤,包括:针对每个三维模型,若该三维模型对应的显示标记为可见,则生成该三维模型的渲染指令;基于该三维模型的渲染指令,获取所述三维场景对应的视锥体的每个截面;基于所述视锥体的每个截面以及该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否仍然在所述视锥体的内部;若不在所述视锥体的内部,则将该三维模型对应的显示标记更新为不可见,并基于该三维模型不可见的显示标记,跳过当前帧的该三维模型的绘制;若在所述视锥体的内部,则基于该三维模型可见的显示标记,绘制当前帧的该三维模型。3.根据权利要求2所述的渲染方法,其特征在于,所述基于所述视锥体的每个截面以及该三维模型对应的包围体数据,确定所述包围体数据指示的包围体当前是否仍然在所述视锥体的内部的步骤,包括:基于所述视锥体的每个截面以及该三维模型对应的包围体数据,从所述视锥体的第一个截面开始作为当前截面,确定所述包围体数据中包围体中心点到当前截面的距离;若所述包围体中心点到当前截面的距离大于所述包围体数据中的包围体半径,则确定该三维模型当前不在所述视锥体的内部;若所述包围体中心点到当前截面的距离不大于所述包围体数据中的包围体半径,则确定当前截面是否是所述视锥体的最后一个截面;若不是最后一个截面,则将当前截面的下一个截面更新为当前截面继续确定所述包围体中心点到当前截面的距离,直至当前截面为所述视锥体的最后一个截面;若是最后一个截面,则确定该三维模型当前仍然在所述视锥体的内部。4.根据权利要求1所述的渲染方法,其特征在于,所述针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型的包围体数据,确定是否将该三维模型对应的显示标记更新为可见,若是,则生成该三维模型的渲染指令,并基于该三维模型的渲染指令,绘制当前帧的该三维模型的步骤,包括:针对每个三维模型,若该三维模型对应的显示标记为不可见,则基于该三维模型对应
的包围体数据,确定所述包围体数据指示的包围体当前是否在所述三维场景对应的视锥体的内部;若是,则基于所述包围体数据生成所述包围体对应的外接多面体,并确定所述外接多面体所包围的该三维模型是否被所述视锥体的内部的其他三维模型遮挡;若未被遮挡,则获取该三维模型未被遮挡的部分,并将该三维模型对应的显示标记更新为可见,生成该三维模型的渲染指令,基于该三维模型的渲染指令,绘制当前帧的该三维模型未被遮挡的部分。5.根据权利要求1所述的渲染方法,其特征在于,所述渲染方法还包括:在确定当前帧的三维场景之后,获取所述三维场景在当前帧中的各个三维模型以及每个三维模型对应的包围体数据;针对当前帧的每个三维模型,基于当前帧的该三维模...

【专利技术属性】
技术研发人员:高旭
申请(专利权)人:北京云道智造科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1