阴影渲染方法和装置与流程

文档序号:11178441阅读:258来源:国知局
阴影渲染方法和装置与流程

本发明涉及图像处理领域,具体而言,涉及阴影渲染方法和装置。



背景技术:

在一个三维游戏中,为了表现出三维场景的真实性,美化渲染场景,通常会给游戏物体加上阴影的效果,即遮挡住光线的部分会显得比较暗。通常游戏中的阴影效果使用shadowmap技术实现。这样的阴影效果比较接近真实世界的光学原理,对于普通个人电脑来说也能够在保证效果正确的前提下机器也足够负载起其消耗。然而在大型手机网络游戏的渲染过程中,由于某些低端机器性能问题,承受不了使用shadowmap带来的内存和运行速度上的消耗。



技术实现要素:

本发明提供阴影渲染方法和装置,旨在改善上述问题。

第一方面,本发明提供的一种阴影渲染方法,用于渲染应用程序中多个角色的阴影。所述方法包括:获取所述应用程序中全部所述角色的第一数量;建立对应所述应用程序的骨骼模型,其中,所述骨骼模型中包含第二数量的骨骼,所述第一数量等于所述第二数量;查找每个所述角色的标志点,将每个所述骨骼匹配至多个所述角色中一个角色的标志点;渲染所述骨骼模型中的全部所述骨骼,生成每个所述角色的阴影。

第二方面,本发明提供的一种,用于渲染应用程序中多个角色的阴影。述阴影渲染装置包括:角色数量获取模块、模型建立模块、骼匹配模块和阴影生成模块。角色数量获取模块,用于获取所述应用程序中全部所述角色的第一数量。模型建立模块,用于建立对应所述应用程序的骨骼模型,其中,所述骨骼模型中包含第二数量的骨骼,所述第一数量等于所述第二数量。骨骼匹配模块,用于查找每个所述角色的标志点,将每个所述骨骼匹配至多个所述角色中一个角色的标志点。阴影生成模块,用于渲染所述骨骼模型中的全部所述骨骼,生成每个所述角色的阴影。

上述本发明实施例提供的阴影渲染方法和装置,用于渲染应用程序中多个角色的阴影。首先获取所述应用程序中全部所述角色的第一数量,获取对应该应用程序的骨骼模型,使得所述骨骼模型包含的骨骼的第二数量与角色的第一数量保持一致,以使每个骨骼可以匹配至一个角色。建立第二数量的骨骼的骨骼模型后,进行骨骼角色匹配。查找每个所述角色的标志点,将一个骨骼匹配至一个角色的标志点,即可完成骨骼模型中每个骨骼与每个角色的匹配。完成匹配后,渲染所述骨骼模型中的全部所述骨骼,即可生成每个所述角色的阴影。通过骨骼渲染的方式,将骨骼模型中的每个骨骼匹配一个角色,作为该角色的阴影。通过渲染骨骼模型中全部骨骼即可实现对应用程序中多个角色的阴影渲染,在保证渲染体验的前提下,降低了阴影缓冲区渲染代价,提高了渲染速度。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的应用终端的方框示意图;

图2示出了本发明实施例提供的阴影渲染方法的流程图;

图3示出了本发明实施例提供的阴影渲染方法的步骤s204的流程图;

图4示出了本发明实施例提供的步骤s303的流程图;

图5示出了本发明实施例提供的步骤s402的流程图;

图6示出了本发明实施例提供的阴影渲染装置的功能模块图。

具体实施方式

本领域技术人员长期以来一直在寻求一种改善该问题的工具或方法。

鉴于此,本发明的设计者通过长期的探索和尝试,以及多次的实验和努力,不断的改革创新,得出本方案所示的阴影渲染方法和装置。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参见图1,是本发明实施例提供的阴影渲染方法和装置所应用的应用终端100的方框示意图。所述应用终端100包括阴影渲染装置101、存储器102、存储控制器103、处理器104、外设接口105、输入输出单元106、显示单元等107。

所述存储器102、存储控制器103、处理器104、外设接口105、输入输出单元106、显示单元107等各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述阴影渲染装置101包括至少一个可以软件或固件(firmware)的形式存储于所述存储器中或固化在所述应用终端100的操作应用程序(operatingsystem,os)中的软件功能模块。所述处理器104用于执行存储器中存储的可执行模块,例如所述阴影渲染装置101包括的软件功能模块或计算机程序。

其中,存储器102可以是,但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存储器102用于存储程序,所述处理器104在接收到执行指令后,执行所述程序,后述本发明实施例中任一实施例揭示的过程定义的服务器所执行的方法可以应用于处理器104中,或者由处理器104实现。

处理器104可能是一种集成电路芯片,具有信号的处理能力。上述的处理器104可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述外设接口105将各种输入输出单元106耦合至处理器104以及存储器102。在一些实施例中,外设接口105、处理器104以及存储控制器103可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

输入输出单元106用于提供给用户输入数据实现用户与所述服务器的交互。所述输入输出单元106可以是,但不限于,鼠标和键盘等。

显示单元107在所述服务器与用户之间提供一个交互界面,例如用户操作界面,或用于显示图像数据给用户参考。在本实施例中,所述显示单元107可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。

本实施例提供的阴影渲染方法,用于渲染应用终端上运行的应用程序汇总多个角色的阴影。具体可以用于应用终端上游戏中角色的阴影渲染。当然,本发明实施例的具体应用场景并不作为限定,其他需要进行阴影渲染的场景也可以应用于本实施例。以下为对本发明实施例进行的详细说明。

请参见图2,示出了本发明实施例提供的一种阴影渲染方法的流程图,应用于图1所述应用终端所设置的阴影渲染装置。下面将结合图2,对本发明实施例提供的阴影渲染方法的实施过程进行具体说明。

步骤s201,获取所述应用程序中全部所述角色的第一数量。

本实施例提供的阴影渲染方法,用于对应用终端所运行的应用程序中的多个角色进行阴影渲染。优选地,用于对低配置的应用终端运行的手机游戏中的多个角色进行角色的阴影渲染。所述低配置的应用终端,可以为gpu(graphicprocessingunit,图形处理单元)渲染能力较低的应用终端。所述gpu渲染能力较低的应用终端,可以限定为不满足标准配置参数的应用终端,所述标准配置参数可以包括:核心频率400mhz、带宽8.3gb/s、像素填充率32亿/秒、每秒渲染三角形个数2亿个等中的至少一个。当应用终端的对应配置参数低于或者近似于杉树表中参数时,可以将该应用终端列为低配置的应用终端,尤其适用于本实施例提供的阴影渲染方法。

在需要应用终端上运行的应用程序中的多个角色进行实时渲染时,首先需要获取需要渲染的角色的数量,将所述角色的数量作为所述第一数量。获取该应用程序中需要渲染的角色的数量,可以直接获取当前显示界面所显示的全部角色的数量。在其他实施方式中,也可以预先划定显示区域,获取该显示区域内的角色的数量,作为所述第一数量。

步骤s202,建立对应所述应用程序的骨骼模型,其中,所述骨骼模型中包含第二数量的骨骼,所述第一数量等于所述第二数量。

依据上述步骤获取所述应用程序中需要进行阴影渲染的全部角色的数量后,建立对应阴影的骨骼模型,通过蒙皮骨骼方式进行动画渲染。蒙皮,是指蒙于机体或翼面骨架外面构成所需气动外形的板件,在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动。把模型绑定到骨骼上的技术即为做蒙皮。

建立对应所述应用程序的骨骼模型,骨骼模型中包含多个骨骼,设置所述骨骼模型中骨骼的数量为第二数量,设置所述第一数量等于所述第二数量,以使每个骨骼对应一个角色的阴影模型。通过蒙皮骨骼进行动画渲染时,可以实现骨骼模型内全部骨骼的同步渲染,即为实现对全部所述角色的同步渲染。

在其他实施方式中,考虑到应用程序中的角色的第一数量可能会发生变化,为了保证每个所述角色都能分配到一个骨骼,也可以设置所述骨骼的第二数量大于全部所述角色的第一数量,以保证角色数量增加的时候,也能为增加的角色分配骨骼,进行该部分角色的阴影渲染。在其他实施方式中,建立对应所述应用程序的骨骼模型,与获取所述引用程序中角色的第一数量的前后顺序也可以进行调换。在需要对应用程序的多个角色进行阴影渲染时,可以先建立对应该应用程序的骨骼模型,该骨骼模型内包含骨骼的第二数量可以为预先设置的标准数量,该标准数量可以有多个选项供用于根据该应用程序的类别进行选择。建立所述骨骼模型后,获取该应用程序中角色的第一数量,根据全部所述角色的第一数量,从所述第二数量的骨骼中,选取出第一数量的骨骼,并一一匹配至第一数量的角色,也可以所述角色与所述骨骼的匹配。

步骤s203,查找每个所述角色的标志点,将每个所述骨骼匹配至多个所述角色中一个角色的标志点。

在所述应用程序中,对应每个角色设置其标志点,用于标示该角色的位置和存在状态,所述标志点可以设置在角色的几何中心区域或者约定区域等。于本实施例中,考虑到现实情况下,阴影为光投射到人体时呈现在人体脚下位置的区域,因此优选设置所述标志点为所述角色的人物脚所在位置。

建立对应该应用程序的骨骼模型后,进行骨骼模型中骨骼与需要渲染的角色的一一匹配。查找每个所述角色的标志点,将每个所述骨骼匹配至一个角色的标志点,即为将全部骨骼中的每个骨骼挂到一个角色的人物脚位置处,每个骨骼对应其所挂角色的阴影模型。上述步骤即可实现骨骼对应的阴影模型随角色的人物脚移动,虽然没有较为完整准确的阴影的各个部位,但是能保证用户可以直观认识到随着角色的圆形阴影片即为该角色的阴影,达到了阴影渲染体验。

步骤s204,渲染所述骨骼模型中的全部所述骨骼,生成每个所述角色的阴影。

依据上述步骤完成对应全部角色的骨骼匹配后,根据所述骨骼建立阴影模型,进行角色的阴影渲染。下面结合图3,对步骤s204所示的过程进行具体说明。

步骤s301,获取每个所述骨骼的模型。

根据骨骼建立时的模型点,获取每个所述骨骼的模型。一般地,每根骨骼控制四个模型点,则该骨骼的模型为其所控制的四个模型点所构成的方形模型片。

步骤s302,根据每个所述模型生成阴影片。

获取骨骼的模型后,根据该骨骼的模型,生成对应该骨骼对应角色的阴影片。考虑到一般情况下可以将角色的阴影模糊化为圆形片,优选设置角色的阴影片为圆形阴影片,即为根据该骨骼的方形模型片,构建对应的圆形阴影片。具体可以直接根据该方形模型片的四条边,建立该方形模型片的内切圆,内切圆覆盖区域设置为角色的圆形阴影片区域。在其他实施方式中,也可以根据该方形模型片的四个端点,建立外接圆,设置外接圆覆盖区域或者其内部同心圆区域为角色的圆形阴影片区域。角色的阴影片形状及其生成过程可以有多种实现方式,在此不做限定。

步骤s303,渲染每个所述角色的阴影片,生成该角色的阴影。

依据上述步骤完成每个角色的阴影片设置后,即可进行角色阴影的渲染。优选地,考虑到渲染速度会影响渲染显示效果的因素,可以同时渲染骨骼模型内全部骨骼对应的全部所述角色的阴影片,生成每个角色的阴影,可以一次性实现全部角色的同时渲染,极大程度地提高渲染速度。

在一种实施方式中,角色阴影的生成过程可以通过贴图渲染的方式进行渲染。下面将结合图4,为本发明实施例步骤s303所示的过程进行具体说明。

步骤s401,获取所述角色所在的显示区域,将标准贴图匹配到所述显示区域上。

需要进行多个角色的阴影同步实时渲染,获取所述角色所在的当前显示区域。所述显示区域可以为应用程序运行时应用终端上显示该角色及其环境的全部显示区域,或者是用户所选的主要角色所在位置机器周边一定范围所构成的显示区域。阴影渲染装置内预设有标准贴图,用于在该标准贴图上对应所述显示区域的角色进行角色阴影渲染。获取所述角色所在的显示区域后,将标准贴图匹配到所述显示区域。

步骤是402,按照预设的因素值设置规则,根据所述显示区域内的所述角色的阴影状态,设置对应所述标准贴图上全部像素点的因素值。

将所述标准贴图覆盖到所述显示区域后,显示区域上的每个像素点对应所述标准贴图上的一个像素点。显示区域上的每个角色的特征点位置需要显示阴影,其他空白区域或者非角色的特征点位置不需要显示阴影,记录显示区域的每个像素点的阴影状态。标准贴图上的每个像素点对应显示区域上的像素点,根据显示区域上像素点的阴影状态,设置该对应标准区域的像素点的因素值,通过像素点的因素值的具体取值,判断是否需要进行阴影渲染。所述因素值包括对应无阴影状态的像素点的零因素值和对应有阴影状态的像素点的具体因素值。所述阴影渲染装置内预设有因素值设置规则,根据所述显示区域内的所述角色的阴影状态,设置对应所述标准贴图上全部像素点的因素值。标准贴图上像素点的因素值可以为像素点的alpha值,像素点的因素值设置方式可以参见图5,下面将对步骤s402的实施过程进行具体说明。

步骤s501,获取所述显示区域的全部所述像素点的阴影状态。

在进行标准贴图上的阴影渲染时,先要获取所述显示区域的每个像素点的阴影状态,所述阴影状态可以为:该像素点是否存在角色阴影,以及存在角色阴影的该像素点距离角色特征点的距离大小对应的阴影深浅等。不存在角色阴影的像素点的阴影状态为零阴影,存在角色阴影的像素点距离角色特征点越近,阴影越深,距离角色特征点越远,阴影越浅。可以将显示区域上的距离单元对应到像素点与角色特征点的具体距离值,将阴影深度进行量化。

步骤s502,判断每个所述像素点的阴影状态是否为无阴影状态。

如果所述像素点的阴影状态为无阴影状态,则执行步骤s503,将所述像素点对应所述标准贴图的像素点的alpha值设置为0。

如果所述像素点的阴影状态为有阴影状态,则执行步骤s504,根据该像素点与所述角色的相对距离,设置该像素点对应所述标准贴图的像素点的alpha值为1-255之间的取值,其中,所述像素点与所述角色的相对距离的大小,与对应alpha值的大小成正相关。

依据上述步骤获取显示区域上角色的阴影状态,进行标准贴图上像素点的因素值设置,进而根据标准像素上的各个像素点的因素值取值进行阴影渲染。在进行像素点渲染操作判断时,判断像素点的阴影状态是否为无阴影状态。如果所述像素点的阴影状态为无阴影状态,则证明显示区域的该像素点不存在角色阴影,则可以将所述像素点对应的所述标准贴图的像素点的alpha值设置为0,则表示该标准贴图上的像素点不需要进行渲染。

如果所述像素点的阴影状态为有阴影状态,则证明显示区域的该像素点存在角色阴影,根据该有阴影状态对应的与角色特征点的距离距离值的大小,设置该像素点在标准贴图上的具体alpha值。像素点的alpha表示像素点上图像的透明度,其取值范围为0-255,取值越大表示像素点的图像透明度越小。考虑到实际应用中,距离角色越远,阴影的透明度相对越大,显示颜色越浅,距离角色越近,阴影的透明度相对越小,显示颜色越深。将每个像素点的alpha值量化为具体因素值,有阴影的地方图片像素alpha值设为1到255的值,没有阴影的地方设为0,离角色越远的地方alpha值越接近0,离角色越近的地方alpha值越接近255。

步骤s403,根据所述标准贴图上全部所述像素点的因素值,渲染所述角色的阴影。

依据上述步骤获取标准贴图上像素点的因素值后,进行角色阴影的渲染。

在一种实施方式中,考虑到本实施例提供的阴影渲染方法中,将全部阴影画在整个的标准贴图的缓冲区上,缓冲区的大小可以根据应用终端的性能进行调整,以便调整合适精细程度的阴影。对于一些配置较低的门槛,为了运行更流畅,可以把缓冲区调小一些,一般尺寸不超过512*512。根据应用程序运行的实际情况,设置缓冲区尺寸为128,即可实现整个应用程序内阴影的贴图。

本实施例的圆片阴影是一个正交透视阴影,大小可以控制在128*128。在游戏世界中,周围128米以内的可见阴影是看不出任何锯齿的。因为根据项目经验,角色大小通常设定为1到2个长度单位,那么一般游戏中可以清晰看到画面细节的范围,也就是角色身边20到30的距离内,在这个距离内把128*128的贴图铺上去,那么每个单位距离地图块内,可以分得将近4个像素来渲染,几乎是足够表达出阴影这个元素的。用128*128的贴图覆盖到所述显示区域后,能对应渲染角色周围20到30长度单位为半径的区域内。

在上述实施例的基础上,标准贴图可以控制到极小,又由于需要的阴影信息仅仅一个alpha值,所以图片格式可以使用alpha8格式,即每个像素只占8位字节,对于内存的占用做到了极致。alpha8是一个优选方案,因为这里要保存8位alpha值,最节省空间的方法为alpha8,也可以包括其他图片格式。由于低端机尤其是安卓机器,gpu五花八门,对贴图格式的支持也是各式各样都有,难保有的gpu不支持alpha8这种格式贴图,那么就准备了以下一些贴图格式以供选择:rgb565,argb4444,如果以上格式都不支持的话,也可以使用最通用的argb32格式。

上述本发明实施例提供的阴影渲染方法,用于渲染应用程序中多个角色的阴影。首先获取所述应用程序中全部所述角色的第一数量,获取对应该应用程序的骨骼模型,使得所述骨骼模型包含的骨骼的第二数量与角色的第一数量保持一致,以使每个骨骼可以匹配至一个角色。建立第二数量的骨骼的骨骼模型后,进行骨骼角色匹配。查找每个所述角色的标志点,将一个骨骼匹配至一个角色的标志点,即可完成骨骼模型中每个骨骼与每个角色的匹配。完成匹配后,渲染所述骨骼模型中的全部所述骨骼,即可生成每个所述角色的阴影。通过骨骼渲染的方式,将骨骼模型中的每个骨骼匹配一个角色,作为该角色的阴影。通过渲染骨骼模型中全部骨骼即可实现对应用程序中多个角色的阴影渲染,在保证渲染体验的前提下,降低了阴影缓冲区渲染代价,提高了渲染速度。通过骨骼模型一批次渲染出来全部角色的阴影,提高了渲染速度,进而减少了对应用终端运行速度的影响。既保证了阴影的直观性,对阴影算法进行简化,对阴影的标准贴图占用应用终端的内存进行优化,且提升了阴影绘制效率。

请参见图6,为本发明第二实施例提供的阴影渲染装置的功能模块图。所述阴影渲染装置600用于渲染应用程序中多个角色的阴影,本实施例提供的应用渲染装置可以同上述实施例提供的阴影渲染装置101。所述阴影渲染装置600包括:角色数量获取模块601、模型建立模块602、骨骼匹配模块603和阴影生成模块604。

角色数量获取模块601,用于获取所述应用程序中全部所述角色的第一数量;

模型建立模块602,用于建立对应所述应用程序的骨骼模型,其中,所述骨骼模型中包含第二数量的骨骼,所述第一数量等于所述第二数量;

骨骼匹配模块603,用于查找每个所述角色的标志点,将每个所述骨骼匹配至多个所述角色中一个角色的标志点;

阴影生成模块604,用于渲染所述骨骼模型中的全部所述骨骼,生成每个所述角色的阴影。

在上述实施例的基础上,所述阴影生成模块604用于:

获取每个所述骨骼的模型;

根据每个所述模型生成阴影片;

渲染每个所述角色的阴影片,生成该角色的阴影。

上述本发明实施例提供的阴影渲染装置,用于渲染应用程序中多个角色的阴影。首先获取所述应用程序中全部所述角色的第一数量,获取对应该应用程序的骨骼模型,使得所述骨骼模型包含的骨骼的第二数量与角色的第一数量保持一致,以使每个骨骼可以匹配至一个角色。建立第二数量的骨骼的骨骼模型后,进行骨骼角色匹配。查找每个所述角色的标志点,将一个骨骼匹配至一个角色的标志点,即可完成骨骼模型中每个骨骼与每个角色的匹配。完成匹配后,渲染所述骨骼模型中的全部所述骨骼,即可生成每个所述角色的阴影。通过骨骼渲染的方式,将骨骼模型中的每个骨骼匹配一个角色,作为该角色的阴影。通过渲染骨骼模型中全部骨骼即可实现对应用程序中多个角色的阴影渲染,在保证渲染体验的前提下,降低了阴影缓冲区渲染代价,提高了渲染速度。通过骨骼模型一批次渲染出来全部角色的阴影,提高了渲染速度,进而减少了对应用终端运行速度的影响。既保证了阴影的直观性,对阴影算法进行简化,对阴影的标准贴图占用应用终端的内存进行优化,且提升了阴影绘制效率。本发明实施例提供的阴影渲染装置的具体实施过程请参见上述方法实施例,在此不再一一赘述。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1