一种产生体积阴影的方法及系统技术方案

技术编号:2952464 阅读:273 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种产生体积阴影的方法,该方法包括:为物体三维模型的每个顶点添加一个辅助顶点;利用与背景颜色不同的颜色渲染所述物体三维模型,并将渲染后的物体三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;分别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并依据采样的纹理的颜色值确定属于物体轮廓边的顶点;将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。采用该方法,不仅降低了对物体三维模型的顶点数据的处理量,提高了产生体积阴影的效率,而且降低了系统开销。本发明专利技术同时公开了一种产生体积阴影的系统。

【技术实现步骤摘要】

本专利技术涉及计算机
,尤其涉及一种产生体积阴影的方法及其系统。
技术介绍
当在一个物体和光源之间存在障碍物时,该物体将会处在阴影中。障碍物 产生的阴影区域称为体积阴影。体积阴影可以由轮廓边扩展到 一 定距离以外或 者无穷远处得到。轮廓边的确定方法有很多种,基本方法为确定出被朝向相反 (一个面向光源,另一个背向光源)的两个三角形所共享的边,因为只有这样的 边会最终成为轮廓边,其他的边在光源看来都在物体投影的内部而不是边缘。图1A所示为轮廓边示意图,该图中ab边为面V0和面VI的^^共边,n0和nl 分别为V0和V1的法线,V0面向光源,而V1背向光源,则ab边为轮廓边。 图1B所示为非轮廓边示意图,该图中的ab边为面VO和面VI的公共边,n0 和nl分别为VO和VI的法线,V0和V1都面向光源,则ab边为非轮廓边。 图2所示为体积阴影的示意图,点L为光源,ABCD为产生阴影的物体,在底 板上形成的阴影为EFGH,体积阴影指AEFB, BFGC, CGHD, DHEA所组成 的一个区域。只要获得AEFB, BFGC, CGHD, DHEA,并将它们绘制出来, 即可绘制出阴影EFGH。现有技术中,产生体积阴影时需要在中央处理器CPU中对物体三维模型 的各顶点添加辅助的顶点,判断出该物体三维模型的轮廓边顶点,根据光源的 方向,将轮廓边顶点对应的辅助顶点在反向光源的方向进行偏移,产生体积阴 影,然后CPU将该体积阴影的数据传送给图像处理器(GPU, Graph Processing Unit),由GPU对体积阴影进行渲染,绘制出体积阴影。参阅图3所示,CPU中的预处理过程如下步骤301、用三角形网格建立物体的三维模型,对该才莫型中的每个面的每 个边的两个顶点A和B添加上共用该边的两个面的法线,添加两个辅助顶点 Al和B1分别与原本两个顶点数据A和B相同(顶点位置,两个法线均相同), 并在A和B添加上一项为1的数据,在Al和B1添加上一项为0的数据以示 区别。步骤302、遍历三维^f莫型的所有三角形,根据各三角形的法线方向和光源 的方向计算函数dot3 (light_direction, triangle—normal)的取4直,用该函数4直判 断各三角形是面向光源还是背向光源,当函数dot3 ( light_direction , triangle_normal )的取值大于零时,三角形为面向光源;当函数dot3<0 (light_direction, triangle—normal)的取值小于零时,三角形为背向光源。对于 面向光源的三角形,将该三角形的三条边压入栈内并与该栈中的其他边进行比 较,如果存在重复的边,则将该边删除;对三维模型的所有三角形的所有边进 行处理后,栈中的边则为轮廓边。步骤303、根据光源的方向,将轮廓边上的各顶点对应的辅助顶点分别在 反向光源的方向进行偏移,获得体积阴影。进行完上述预处理,CPU将处理得到的体积阴影数据传送给GPU, GPU 对体积阴影进行渲染,绘制出体积阴影。采用上述方法,若轮廓边数目为n,在CPU中获得体积阴影时,需要动态 生产2n个三角形,当光源产生运动时,轮廓边需要动态重新生成,而这些都 需要由CPU进行预处理后获得体积阴影的数据,然后将体积阴影的数据传送 给GPU,不仅耗时,同时增大了系统的开销。并且,采用该方法,当三维模 型有n个顶点,平均每个顶点有m个面共有时,则该三维模型一共有mn/3个 面需要进行处理,在预处理时会产生4mn个顶点,渲染体积阴影时需要处理 4mn个顶点,通常m大于等于3,使得渲染时GPU资源开销进一步增大。
技术实现思路
本专利技术提供一种体积阴影的实现方法及系统,用以解决现有技术中存在的产生体积阴影时cpu进行预处理后获得的顶点数量较大,cpu和gpu间传输 体积阴影数据时存在大量的数据交互,不仅耗时,也增大了系统开销的问题。本专利技术提供以下技术方案一种产生体积阴影的方法,包括如下步骤为物体的三维模型的每个顶点添加一个辅助顶点;利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体 的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;分别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后 得到的紋理进行采样,并依据采样的紋理的颜色值确定属于物体轮廓边的顶 点;将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。 其中,在中央处理器中为顶点的凄t据项中添加标识区分辅助顶点,并将添 加了辅助顶点的物体的三维模型数据传送给图形处理器gpu,由gpu完成后续的步骤。较佳的,将紋理中背景颜色值取值为第一值,渲染所述物体的三维模型的 颜色值取值为第二值,判断采样的多个像素的颜色值中是否包含第一值;若 是,则确定顶点不是轮廓边顶点,若否,则确定顶点为轮廓边顶点。其中,对所述物体的三维模型的各顶点的屏幕位置所对应的像素点的周围 8个像素位置对紋理进行采样。进一步,还包括在像素着色器中输入标识各顶点是否为轮廓边顶点的项, 并根据该项显示轮廓边顶点所产生的像素。 一种体积阴影发生装置,包括接收单元,用于接收添加了辅助顶点的物体的三维模型的数据; 紋理生产单元,用于利用与背景颜色不同的颜色渲染物体的三维模型,获得该物体的三维模型的紋理,并将该紋理传送给处理单元;处理单元,用于将渲染后的物体的三维模型的顶点转换到屏幕空间,并分 别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的 紋理进行采样,并依据采样的紋理的颜色值确定属于物体轮廓边的顶点,以及 将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。较佳的,所述装置还包括像素着色器,用于根据标识各顶点是否为轮廓边顶点的项显示轮廓边顶点 所产生的像素。一种产生体积阴影的系统,包括中央处理器CPU,用于对物体的三维模型的每个顶点添加辅助顶点,并输 出添加了辅助顶点的物体的三维模型数据;图形处理器GPU,用于接收添加了辅助顶点的物体的三维模型数据,并利 用与背景颜色不同的颜色渲染该物体的三维模型,通过采样渲染后得到的紋 理确定属于物体轮廓边的顶点,以及将属于物体轮廓边顶点的辅助顶点进行 偏移产生体积阴影。较佳的,所述中央处理器CPU包括顶点添加单元,用于对物体的三维模型的各顶点添加辅助顶点J 输出单元,用于输出添加了辅助顶点的物体的三维模型数据。 所述图形处理器GPU包括接收单元,用于接收添加了辅助顶点的物体的三维模型数据; 紋理生产单元,用于利用与背景颜色不同的颜色渲染物体的三维模型,获 得该物体三维模型的紋理;处理单元,用于将渲染后的物体的三维模型的顶点转换到屏幕空间,并分 别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的 紋理进行采样,并依据采样的紋理的颜色值确定属于物体轮廓边的顶点,以 及将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影;像素着色器,用于根据标识各顶点是否为轮廓边顶点的项显示轮廓边顶点 所产生的像素。本专利技术有益效果如下采用本专利技术实现体积阴影时,在CPU中进行预处理时,只需要对物体的 三维模型的各顶点分别添加一个辅助顶点,不需要添加三维模型中各面的法 线,减少了 CPU的资源开销;同时,产生体积阴影在GPU中进行,减少了本文档来自技高网
...

【技术保护点】
一种产生体积阴影的方法,其特征在于,包括如下步骤:为物体的三维模型的每个顶点添加一个辅助顶点;利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;分别在 各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并依据采样的纹理的颜色值确定属于物体轮廓边的顶点;将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘皓
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:94[中国|深圳]

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

1