首页 / 镜头光晕模拟方法、镜头光晕模拟装置及终端设备

镜头光晕模拟方法、镜头光晕模拟装置及终端设备无效专利 发明

技术领域

[0001] 本发明涉及镜头光晕模拟技术领域,具体而言,涉及一种镜头光晕模拟方法、镜头光晕模拟装置及终端设备。

相关背景技术

[0002] 在当今的三维游戏场景中,模拟出太阳已是很平常的事,而当摄像机对着太阳时,能呈现出逼真迷人的镜头光晕效果,则可以给游戏场景添加更多一点的气氛。我们知道镜头往往是由很多片镜片组成的镜片组,每个镜片虽然通透性很高但是难免会有一部分是反射和散射,而这些没有与其他入射光保持方向一致的光线就造成了光晕的出现。经发明人研究发现,现有镜头光晕模拟技术中存在着模拟计算复杂的问题。

具体实施方式

[0050] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
[0051] 因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0052] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为只是或暗示相对重要性。
[0053] 在本发明的描述中,除非另有明确的规定和限定,术语“设置”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0054] 如图1所示,本发明实施例提供了一种终端设备10,包括存储器12、处理器14和镜头光晕模拟装置100。
[0055] 其中,所述终端设备10可以包括,但不限于是智能手机、个人电脑(personal computer,PC)、平板电脑、个人数字助理(personal digital assistant,PDA)、移动上网设备(mobile Internet device,MID)等。在本实施例中,所述终端设备10优选为可移动终端设备,例如手机。通过所述镜头光晕模拟装置100,可以解决现有镜头光晕模拟技术中由于计算量大而导致可移动终端设备耗电量大的问题,进而增加可移动终端设备的有效使用时间。
[0056] 进一步地,在本实施实例中,所述存储器12和处理器14之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述镜头光晕模拟装置100包括至少一个可以软件或固件(firmware)的形式存储于所述存储器12中的软件功能模块。所述处理器14用于执行所述存储器12中存储的可执行模块,例如所述镜头光晕模拟装置100所包括的软件功能模块及计算机程序等,以实现镜头光晕模拟方法。
[0057] 其中,所述存储器12可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器12用于存储程序,所述处理器14在接收到执行指令后,执行所述程序。
[0058] 所述处理器14可能是一种集成电路芯片,具有信号的处理能力。上述的处理器14可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0059] 可以理解,图1所示的结构仅为示意,所述终端设备10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置,例如,还可以包括用于与服务器进行数据交互的通信单元。图1中所示的各组件可以采用硬件、软件或其组合实现。
[0060] 结合图2,本发明实施例还提供一种可应用于上述终端设备10的镜头光晕模拟方法,所述方法有关的流程所定义的方法步骤可以由所述处理器14实现。下面将对图2所示的具体流程进行详细阐述。
[0061] 步骤S110,根据预设的深度图和太阳的当前位置判断太阳是否被遮挡。若太阳没有被遮挡,则执行步骤S120。
[0062] 详细地,所述深度图包含渲染场景中的各个物体与摄像机镜头的深度信息,该深度信息的值根据各个物体与摄像机镜头的远近关系在0-1之间变化,例如,物体与摄像机镜头越远,深度信息的值就越大,物体与摄像机镜头越近,深度信息的值就越小。在摄像机镜头到各个物体的延伸方向上,根据远近关系记录各个物体的深度信息,在同一延伸方向上,深度图只会保留数值最小的深度信息的值。例如,由于太阳距离所述摄像机镜头比较远,将太阳渲染完成后,若太阳没有被遮挡,太阳所在的位置在对应的深度图上的数值为1,在摄像机镜头到太阳的延伸方向上深度信息为1;若太阳被遮挡,遮挡物体的深度信息小于1,在摄像机镜头到太阳的延伸方向上深度信息小于1。因此,根据预设的深度图和太阳的当前位置,可以通过摄像机镜头到太阳的延伸方向上的深度信息判断太阳是否被遮挡。
[0063] 其中,由于太阳不是一个点,而是有面积的,所以可以对太阳周围的3个点进行采样,最后求平均值。然后,根据该平均值判断太阳是否被遮挡的公式可以是:
[0064] float ocllusion=tex2D(S_Depth,SunUV.xy).r;
[0065] ocllusion+=tex2D(S_Depth,SunUV.xy+SunRadius*(0.5,0.5));
[0066] ocllusion+=tex2D(S_Depth,SunUV.xy+SunRadius*(0.5,-0.5));
[0067] ocllusion+=tex2D(S_Depth,SunUV.xy+SunRadius*(-0.5,-0.5));
[0068] ocllusion=ocllusion/4。
[0069] 其中,ocllusion为深度信息的值,S_Depth为预设的深度图的深度信息,SunUV.xy为太阳的坐标,SunRadius为太阳周围的点的坐标。
[0070] 详细地,if(ocllusion>=0.9f),那么太阳没有被遮挡;否则太阳被遮挡。
[0071] 步骤S120,构造光晕模型,其中,所述光晕模型包括多个光斑模型。
[0072] 在本实施例中,所述光晕模型可以包括多个光斑模型。其中,各所述光斑模型的形状大小不受限制,可以根据实际需求进行设置,例如,可以根据应用中的环境需求或时间信息进行设置。在本实施例中,每一个光斑模型由多个矩形构成,其中,每个矩形由四个顶点连接的两个三角形构成,以使光栅器通过将顶点组装为三角形以形成矩形。
[0073] 步骤S130,针对每一个光斑模型,按照预设规则对该光斑模型进行渲染,以完成光晕的模拟。
[0074] 通过以上设置,对预设的深度图进行采样以判断太阳是否被遮挡,提高了镜头光晕模拟方法的渲染效率。
[0075] 可选地,按照预设规则对光斑模型进行渲染的方式不受限制,可以根据实际应用进行设置,例如,是否需要模拟出的光晕模型在太阳周边移动时可以旋转进行变化。在本实施例中,结合图3,步骤S130可以包括步骤S131、步骤S132以及步骤S133,以对光斑模型进行渲染处理。
[0076] 步骤S131,根据预设的太阳朝向和摄像机朝向计算得到参考点的坐标。
[0077] 详细地,得到参考点的坐标的公式可以是:
[0078] rayDir.xyz=cameraDir.xyz-sunDir.xyz;
[0079] rayDir.xyz=normalise(rayDir.xyz);
[0080] centerPos.xyz=cameraPos.xyz+rayDir.xyz*100。
[0081] 其中,cameraDir表示摄像机朝向,cameraPos表示摄像机位置,sunDir表示太阳朝向,normalise(rayDir.xyz)表示单位化rayDir向量,centerPos就是我们得到的参考点。光斑模型将以参考点centerPos为起始点,沿rayDir这个朝向进行分布。
[0082] 步骤S132,根据参考点的坐标计算得到所述光斑模型绕摄像机的旋转角度。
[0083] 详细地,计算光斑模型绕摄像机的旋转角度的公式可以是:
[0084] float cosVal=rayDir.xyz*(0.0,1.0,1.0);
[0085] float radian=acos(cosVal);
[0086] Quaternion qua(radian,cameraDir);
[0087] cameraRotateRight=qua*cameraRight;
[0088] cameraRotateRight=qua*cameraRight。
[0089] 其中,rayDir.xyz是光斑分布朝向,cameraRight是摄像机的右向量,cameraUp是摄像机的上向量,cameraRotateRight表示旋转后的摄像机的右向量,cameraRotateUp表示旋转后的摄像机的上向量。
[0090] 步骤S133,根据所述参考点的坐标和所述旋转角度对所述光斑模型进行旋转,以完成对该光斑模型的渲染。
[0091] 进一步地,每一个光斑模型由多个矩形构成,其中,每个矩形由四个顶点构成,为了将光斑模型的顶点信息进行转换,结合图4,步骤S130还可以包括步骤S134、步骤S135、步骤S136及步骤S137。
[0092] 步骤S134,通过顶点着色器对该光斑模型的各个顶点的参数信息进行转换处理。
[0093] 在本实施例中,为保证模拟出的光晕显示效果更具有真实性,可以在多个光斑模型的各顶点分别贴合对应的纹理坐标。因此,所述参数信息可以在包括每一个顶点的顶点坐标的基础上,还包括纹理坐标。在本实施例中,可以将光斑模型的各个顶点的参数信息输入图形处理器的顶点着色器中,以对个顶点的参数信息进行转换处理。其中,转换处理的方式可以根据顶点的参数信息的具体内容进行设置。
[0094] 可选地,进行转换处理的方式不受限制,可以根据实际应用需求进行设置,例如,在一种可以替代的示例中,针对光斑模型的每一个顶点,可以将该顶点的顶点坐标依次通过世界转换矩阵、视见转换矩阵和投影转换矩阵进行转换,以得到该顶点的裁剪坐标。
[0095] 详细地,针对每一个顶点,该顶点的顶点坐标属于构造的光晕模型所在的模型空间,通过世界转换矩阵可以将该顶点的顶点坐标转换至世界空间以得到世界坐标posWorld(x,y,z),通过视见转换矩将得到的世界坐标转换至相机空间以得到视见坐标,并通过投影转换矩阵将得到的视见坐标转换至裁剪空间以得到裁剪坐标clipsPos(x,y,z)。
[0096] 步骤S135,通过光栅器对经过转换处理的参数信息进行插值处理。
[0097] 详细地,在本实施例中,为便于片元着色器计算光斑模型的颜色透明度,可以通过光栅器对参数信息进行插值处理。
[0098] 可选地,进行插值处理的方式不受限制,可以根据实际应用需求进行设置,例如,在一种可以替代的示例中,针对该光斑模型的每一个顶点,对该顶点的纹理坐标进行插值处理,以得到该顶点的插值纹理坐标。
[0099] 可选地,所述纹理坐标既可以是通过顶点着色器输入所述光栅器,也可以是直接输入所述光栅器,根据实际需求进行设置即可。在本实施例中,将所述纹理坐标与所述裁剪坐标分别保存至图形处理器指定的寄存器中,光栅器可以通过寄存器获取该顶点的裁剪坐标和纹理坐标,以进行插值处理,并将得到的该顶点的插值纹理坐标uv2(x,y)输入至片元着色器中。
[0100] 步骤S136,通过片元着色器根据经过插值处理的参数信息计算该光斑模型的颜色透明度。
[0101] 在本实施例中,可以根据模拟的光晕的效果不同,片元着色器计算得到光斑模型的颜色透明度可以有不同的选择。
[0102] 可选地,计算光斑模型的颜色透明度的方式不受限制,可以根据实际应用需求进行设置,例如,在一种可以替代的示例中,针对该光斑模型的每一个顶点,对该顶点的插值纹理坐标和预设的颜色透明度进行计算,以得到该顶点的最终颜色透明度。
[0103] 详细地,计算该顶点的最终颜色透明度的公式可以是:
[0104] outColor.rgba=tex2D(S_Diffuse,uv2.xy);
[0105] fragColor.rgba=outColor.rgba*color.rgba。
[0106] 其中,uv2(x,y)为插值纹理坐标,color(r,g,b,alpha)为预设的颜色透明度,rgb为颜色,alpha为透明度。
[0107] 步骤S137,根据所述参考点的坐标、所述旋转角度、所述颜色透明度以及所述经过转换处理的参数信息对所述光斑模型进行旋转和颜色处理,以完成对该光斑模型的渲染。
[0108] 详细地,所述经过转换处理的参数信息为裁剪坐标,将该光斑模型通过对应的颜色透明度渲染至屏幕,可以实现光晕的模拟。
[0109] 结合图5,本发明实施例还提供一种可应用于上述终端设备10的镜头光晕模拟装置100。其中,所述镜头光晕模拟装置100可以包括判断模块110、光晕模型构造模块120及光斑模型渲染模块130。
[0110] 所述判断模块110,用于根据预设的深度图和太阳的当前位置判断太阳是否被遮挡。在本实施例中,所述判断模块110可用于执行图2所示的步骤S110,关于所述判断模块110的具体描述可以参照前文对步骤S110的描述。
[0111] 所述光晕模型构造模块120,用于构造光晕模型,其中,所述光晕模型包括多个光斑模型。在本实施例中,所述光晕模型构造模块120可用于执行图2所示的步骤S120,关于所述光晕模型构造模块120的具体描述可以参照前文对步骤S120的描述。
[0112] 所述光斑模型渲染模块130,用于针对每一个光斑模型,按照预设规则对该光斑模型进行渲染,以完成光晕的模拟。在本实施例中,所述光斑模型渲染模块130可用于执行图2所示的步骤S130,关于所述光斑模型渲染模块130的具体描述可以参照前文对步骤S130的描述。
[0113] 结合图6,每一个光斑模型由多个矩形构成,其中,每个矩形由四个顶点构成,所述光斑模型渲染模块130可以包括参考点计算子模块131、旋转角度计算子模块132、旋转子模块133、信息转换子模块134、信息插值子模块135、透明度计算子模块136及模型渲染子模块137。
[0114] 所述参考点计算子模块131,用于根据预设的太阳朝向和摄像机朝向计算得到参考点的坐标。在本实施例中,所述参考点计算子模块131可用于执行图3所示的步骤S131,关于所述参考点计算子模块131的具体描述可以参照前文对步骤S131的描述。
[0115] 所述旋转角度计算子模块132,用于根据参考点的坐标计算得到所述光斑模型绕摄像机的旋转角度。在本实施例中,所述旋转角度计算子模块132可用于执行图3所示的步骤S132,关于所述旋转角度计算子模块132的具体描述可以参照前文对步骤S132的描述。
[0116] 所述旋转子模块133,用于根据所述参考点的坐标和所述旋转角度对所述光斑模型进行旋转,以完成对该光斑模型的渲染。在本实施例中,所述旋转子模块133可用于执行图3所示的步骤S133,关于所述旋转子模块133的具体描述可以参照前文对步骤S133的描述。
[0117] 所述信息转换子模块134,用于通过顶点着色器对该光斑模型的各个顶点的参数信息进行转换处理。在本实施例中,所述信息转换子模块134可用于执行图4所示的步骤S134,关于所述信息转换子模块134的具体描述可以参照前文对步骤S134的描述。
[0118] 所述信息插值子模块135,用于通过光栅器对经过转换处理的参数信息进行插值处理。在本实施例中,所述信息插值子模块135可用于执行图4所示的步骤S135,关于所述信息插值子模块135的具体描述可以参照前文对步骤S135的描述。
[0119] 所述透明度计算子模块136,用于通过片元着色器根据经过插值处理的参数信息计算该光斑模型的颜色透明度。在本实施例中,所述透明度计算子模块136可用于执行图4所示的步骤S136,关于所述透明度计算子模块136的具体描述可以参照前文对步骤S136的描述。
[0120] 所述模型渲染子模块137,用于根据所述参考点的坐标、所述旋转角度、所述颜色透明度以及所述经过转换处理的参数信息对所述光斑模型进行旋转和颜色处理,以完成对该光斑模型的渲染。在本实施例中,所述模型渲染子模块137可用于执行图4所示的步骤S137,关于所述模型渲染子模块137的具体描述可以参照前文对步骤S137的描述。
[0121] 本发明提供的镜头光晕模拟方法、镜头光晕模拟装置100及终端设备10,通过对预设的深度图进行采样以判断太阳是否被遮挡,提高了镜头光晕模拟方法和镜头光晕模拟装置100的渲染效率。
[0122] 进一步地,通过多个光斑模型模拟镜头光晕,模拟出的镜头光晕随镜头在太阳周边移动时可以旋转,提高了镜头光晕模拟方法和镜头光晕模拟装置100的实用性。
[0123] 在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0124] 另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0125] 所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0126] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页