CN100476880C - 一种产生体积阴影的方法及系统 - Google Patents

一种产生体积阴影的方法及系统 Download PDF

Info

Publication number
CN100476880C
CN100476880C CNB2006101275740A CN200610127574A CN100476880C CN 100476880 C CN100476880 C CN 100476880C CN B2006101275740 A CNB2006101275740 A CN B2006101275740A CN 200610127574 A CN200610127574 A CN 200610127574A CN 100476880 C CN100476880 C CN 100476880C
Authority
CN
China
Prior art keywords
summit
dimensional model
silhouette edge
auxiliary
pixel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2006101275740A
Other languages
English (en)
Other versions
CN101145246A (zh
Inventor
刘皓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CNB2006101275740A priority Critical patent/CN100476880C/zh
Publication of CN101145246A publication Critical patent/CN101145246A/zh
Application granted granted Critical
Publication of CN100476880C publication Critical patent/CN100476880C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

本发明公开了一种产生体积阴影的方法及系统,该方法包括:为物体三维模型的每个顶点添加一个辅助顶点,每个辅助顶点与该辅助顶点对应的物体的三维模型的顶点的位置相同;利用与背景颜色不同的颜色渲染物体三维模型,并将渲染后的物体三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;分别在每个顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并判断采样的多个像素的颜色值中是否包含纹理中背景颜色值的取值;若是,则确定该顶点是轮廓边顶点,若否,则确定该顶点不是轮廓边顶点;将属于物体轮廓边顶点的辅助顶点按反向光源的方向进行偏移产生体积阴影。采用该方法,能降低数据处理量,提高产生体积阴影的效率。

Description

一种产生体积阴影的方法及系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种产生体积阴影的方法及其系统。
背景技术
当在一个物体和光源之间存在障碍物时,该物体将会处在阴影中。障碍物产生的阴影区域称为体积阴影。体积阴影可以由轮廓边扩展到一定距离以外或者无穷远处得到。轮廓边的确定方法有很多种,基本方法为确定出被朝向相反(一个面向光源,另一个背向光源)的两个三角形所共享的边,因为只有这样的边会最终成为轮廓边,其他的边在光源看来都在物体投影的内部而不是边缘。图1A所示为轮廓边示意图,该图中ab边为面V0和面V1的公共边,n0和n1分别为V0和V1的法线,V0面向光源,而V1背向光源,则ab边为轮廓边。图1B所示为非轮廓边示意图,该图中的ab边为面V0和面V1的公共边,n0和n1分别为V0和V1的法线,V0和V1都面向光源,则ab边为非轮廓边。图2所示为体积阴影的示意图,点L为光源,ABCD为产生阴影的物体,在底板上形成的阴影为EFGH,体积阴影指AEFB,BFGC,CGHD,DHEA所组成的一个区域。只要获得AEFB,BFGC,CGHD,DHEA,并将它们绘制出来,即可绘制出阴影EFGH。
现有技术中,产生体积阴影时需要在中央处理器CPU中对物体三维模型的各顶点添加辅助的顶点,判断出该物体三维模型的轮廓边顶点,根据光源的方向,将轮廓边顶点对应的辅助顶点在反向光源的方向进行偏移,产生体积阴影,然后CPU将该体积阴影的数据传送给图像处理器(GPU,Graph ProcessingUnit),由GPU对体积阴影进行渲染,绘制出体积阴影。参阅图3所示,CPU中的预处理过程如下:
步骤301、用三角形网格建立物体的三维模型,对该模型中的每个面的每个边的两个顶点A和B添加上共用该边的两个面的法线,添加两个辅助顶点A1和B1分别与原本两个顶点数据A和B相同(顶点位置,两个法线均相同),并在A和B添加上一项为1的数据,在A1和B1添加上一项为0的数据以示区别。
步骤302、遍历三维模型的所有三角形,根据各三角形的法线方向和光源的方向计算函数dot3(light_direction,triangle_normal)的取值,用该函数值判断各三角形是面向光源还是背向光源,当函数dot3(light_direction,triangle_normal)的取值大于零时,三角形为面向光源;当函数dot3(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间传输体积阴影数据时存在大量的数据交互,不仅耗时,也增大了系统开销的问题。
本发明提供以下技术方案:一种产生体积阴影的方法,包括如下步骤:为物体的三维模型的每个顶点添加一个辅助顶点,每个辅助顶点与该辅助顶点对应的物体的三维模型的顶点的位置相同;利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;分别在每个顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并判断采样的多个像素的颜色值中是否包含纹理中背景颜色值的取值;若是,则确定该顶点是轮廓边的顶点,若否,则确定该顶点不是轮廓边的顶点;将属于物体轮廓边的顶点的辅助顶点按反向光源的方向进行偏移产生体积阴影。
其中,在中央处理器中为顶点的数据项中添加标识区分辅助顶点,并将添加了辅助顶点的物体的三维模型数据传送给图形处理器GPU,由GPU完成所述利用与背景颜色不同的颜色渲染物体的三维模型的步骤及该步骤之后的步骤。其中,对所述物体的三维模型的各顶点的屏幕位置所对应的像素点的周围8个像素位置对纹理进行采样。进一步,还包括:在像素着色器中输入标识各顶点是否为轮廓边顶点的项,并根据该项显示轮廓边顶点所产生的像素。
一种产生体积阴影的系统,包括:辅助顶点添加单元,用于为物体的三维模型的每个顶点添加一个辅助顶点,每个辅助顶点与该辅助顶点对应的物体的三维模型的顶点的位置相同;渲染及转换单元,用于利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;轮廓边顶点确定单元,用于分别在每个顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并判断采样的多个像素的颜色值中是否包含纹理中背景颜色值的取值;若是,则确定该顶点是轮廓边的顶点,若否,则确定该顶点不是轮廓边的顶点;体积阴影产生单元,用于将属于物体轮廓边的顶点的辅助顶点按反向光源的方向进行偏移产生体积阴影。
较佳地,所述轮廓边顶点确定单元对所述物体的三维模型的各顶点的屏幕位置所对应的像素点的周围8个像素位置对纹理进行采样。
较佳的,所述系统还包括:轮廓边顶点显示单元,用于输入标识各顶点是否为轮廓边顶点的项,并根据该项显示轮廓边顶点所产生的像素。
本发明有益效果如下:
采用本发明实现体积阴影时,在CPU中进行预处理时,只需要对物体的三维模型的各顶点分别添加一个辅助顶点,不需要添加三维模型中各面的法线,减少了CPU的资源开销;同时,产生体积阴影在GPU中进行,减少了GPU与CPU之间的数据交互,同时降低了CPU的开销;而且,采用本发明进行预处理后生产的顶点数量较少,进一步降低了GPU的资源开销。
附图说明
图1A、图1B分别为现有技术中轮廓边和非轮廓边的示意图;
图2为现有技术中的体积阴影示意图;
图3为现有技术中产生体积阴影的预处理流程图;
图4为本发明实施例中的系统结构示意图;
图5为本发明实施例中产生体积阴影的处理流程图;
图6为本发明实施例中轮廓边顶点上的辅助顶点进行偏移产生体积阴影的示意图;
图7A为本发明实施例中圆球物体的示意图;
图7B为本发明实施例中圆球物体的空间模型示意图;
图8为本发明实施例中圆球模型的纹理示意图;
图9为本发明实施例中对纹理采样后获得的轮廓边的示意图。
具体实施方式
本实施例中CPU对物体的三维模型的每个顶点添加辅助顶点,并将添加了辅助顶点的物体的三维模型数据传送给GPU;GPU利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置,然后在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并依据采样的纹理的颜色值确定属于物体轮廓边的顶点;将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。进一步,在像素着色器中添加标识各顶点是否为轮廓边顶点的项,根据该项显示轮廓边顶点所产生的像素。
参阅图4所示,产生体积阴影的系统包括:CPU410和GPU420。其中CPU410包括顶点添加单元4101和输出单元4102;GPU420包括接收单元4201、纹理生产单元4202、处理单元4203和像素着色器4204。
顶点添加单元4101用于对物体的三维模型的各顶点添加辅助顶点;输出单元4102用于将添加了辅助顶点的物体的三维模型数据传送给GPU420中的接收单元4201。
接收单元4201用于接收添加了辅助顶点的物体的三维模型数据,并将该数据传送给纹理生产单元4202;纹理生产单元4202用于利用与背景颜色不同的颜色渲染物体的三维模型,获得该物体的三维模型的纹理,并将该纹理传送给处理单元4203;处理单元4203用于将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置,分别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并依据采样的纹理的颜色值确定属于物体轮廓边的顶点,以及将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影,并在像素着色器4204中输入标识各顶点是否为轮廓边顶点的项;像素着色器4204用于根据所述项显示轮廓边顶点的像素,绘制出体积阴影。
利用与背景颜色不同的颜色渲染物体的三维模型,获得该物体的三维模型的纹理时,将纹理中背景颜色值取值为第一值,渲染所述物体的三维模型的颜色值取值为第二值,判断采样的多个像素的颜色值中是否包含第一值;如果包含第一值,则确定顶点是轮廓边顶点,若否,则确定顶点不是轮廓边顶点。本实施例以第一值取为1,第二值取为0进行说明。
参阅图5所示,产生体积阴影的处理过程包括如下步骤:
步骤501、CPU对物体的三维模型的每个顶点添加一个辅助顶点,并将添加了辅助顶点的物体的三维模型数据传送给GPU。
步骤502、GPU获得物体的三维模型数据后,渲染所述物体的三维模型时,以白色为背景,黑色为颜色渲染该物体,得到该物体模型的纹理,该纹理中白色取值为1,黑色取值为0。
步骤503、将渲染后的物体的三维模型的顶点转换到屏幕空间得到顶点的屏幕位置,以顶点屏幕位置所对应的像素点的周围8个像素位置对纹理进行采样,并对采样值求和。
步骤504、判断采样值是否为0,如果为0,执行步骤506,否则,继续步骤505。
步骤505、当采样值不为零时,将该像素对应的辅助顶点在反向光源的方向进行偏移,产生体积阴影,并在像素着色器中输入一个为0的项,标识该像素为轮廓边顶点对应的像素,然后执行步骤507。
步骤506、在像素着色器中输入一个-1的项,标识像素为非轮廓边对应的像素,然后继续步骤507。
步骤507、像素着色器根据各像素的标识项绘制出体积阴影。
图6所示为与轮廓边顶点数据相同的辅助顶点进行偏移产生体积阴影的示意图。在CPU中进行预处理时,对应于每个顶点分别添加了数据相同的辅助顶点,并添加不同的项用于区分原顶点和添加的顶点。在图中轮廓边AB的顶点A和B对应的辅助顶点分别为A1和B1,A1和B1分别从原顶点A和B位置出发,反向光源的方向进行偏移,得到A-A1-B1,A-B1-B的顺序三角形;对轮廓边BC、CD和DA的顶点对应的辅助顶点进行类似的处理,即可获得体积阴影。
本实施例中利用物体三维模型的顶点纹理,直接探测轮廓边顶点,并使用像素剔除非轮廓边顶点像素,以一个很小的消耗获得了体积阴影。
以下以一个圆球物体为例子进一步进行说明。
图7A所示为一个圆球物体;图7B所示为采用三角形网格建立的圆球物体的三维模型。
在CPU中进行预处理时,对圆球的三维模型的每个顶点添加上辅助顶点,为了便于进行区分,对原顶点添加一项为1的数据,对添加的顶点添加一项为0的数据。将添加完辅助顶点的圆球的三维模型数据传送给GPU。
在GPU中,以白色为背景,黑色为颜色渲染圆球的三维模型,得到纹理1。图8所示为该纹理的示意图。
获得圆球三维模型的纹理后,将圆球三维模型各顶点转换到屏幕空间得到各顶点的屏幕位置,并以各顶点屏幕位置所对应的像素点的周围8个像素位置对纹理1进行采样,纹理1中黑色的采样值为0,白色的采样值为1,将8个采样值累加得到sum。判断sum的取值,如果sum>0,说明该顶点的屏幕空间周围8个像素中有白色的像素,该顶点在边缘上,该顶点为轮廓边顶点,则将该顶点对应的新增顶点在反向光源的方向进行偏移,产生体积阴影,并向像素着色器输入一个为0的项。如果sum=0,则向像素着色器输入一个为-1的项。像素着色器根据这个项对像素进行删除,以剔除不是轮廓边顶点所产生的像素,然后根据轮廓边顶点绘制出体积阴影。采样处理后获得的轮廓边如图9所示。
本实施例中对物体的三维模型进行预处理时,只需要添加辅助顶点,不需要添加各面的法线,而且如果原模型有n个顶点,平均每个顶点由m个面共有,则共有mn/3个面,预处理后得到的顶点为2n个,顶点数据输入减少了很多倍,降低了CPU的资源开销,同时,在GPU中生产体积阴影,对纹理的像素处理时不渲染非轮廓边顶点产生的像素,处理效率进一步提升。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (7)

1、一种产生体积阴影的方法,其特征在于,包括如下步骤:
为物体的三维模型的每个顶点添加一个辅助顶点,每个辅助顶点与该辅助顶点对应的物体的三维模型的顶点的位置相同;
利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;
分别在每个顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并判断采样的多个像素的颜色值中是否包含纹理中背景颜色值的取值;若是,则确定该顶点是轮廓边的顶点,若否,则确定该顶点不是轮廓边的顶点;
将属于物体轮廓边的顶点的辅助顶点按反向光源的方向进行偏移产生体积阴影。
2、如权利要求1所述的方法,其特征在于,在中央处理器中为顶点的数据项中添加标识区分辅助顶点,并将添加了辅助顶点的物体的三维模型数据传送给图形处理器,由图形处理器完成所述利用与背景颜色不同的颜色渲染物体的三维模型的步骤及该步骤之后的步骤。
3、如权利要求1所述的方法,其特征在于,对所述物体的三维模型的各顶点的屏幕位置所对应的像素点的周围8个像素位置对纹理进行采样。
4、如权利要求1-3任一项所述的方法,其特征在于,还包括:在像素着色器中输入标识各顶点是否为轮廓边顶点的项,并根据该项显示轮廓边顶点所产生的像素。
5、一种产生体积阴影的系统,其特征在于,包括:
辅助顶点添加单元,用于为物体的三维模型的每个顶点添加一个辅助顶点,每个辅助顶点与该辅助顶点对应的物体的三维模型的顶点的位置相同;
渲染及转换单元,用于利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;
轮廓边顶点确定单元,用于分别在每个顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并判断采样的多个像素的颜色值中是否包含纹理中背景颜色值的取值;若是,则确定该顶点是轮廓边的顶点,若否,则确定该顶点不是轮廓边的顶点;
体积阴影产生单元,用于将属于物体轮廓边的顶点的辅助顶点按反向光源的方向进行偏移产生体积阴影。
6、如权利要求5所述的系统,其特征在于,所述轮廓边顶点确定单元对所述物体的三维模型的各顶点的屏幕位置所对应的像素点的周围8个像素位置对纹理进行采样。
7、如权利要求5或6所述的系统,其特征在于,还包括:
轮廓边顶点显示单元,用于输入标识各顶点是否为轮廓边顶点的项,并根据该项显示轮廓边顶点所产生的像素。
CNB2006101275740A 2006-09-14 2006-09-14 一种产生体积阴影的方法及系统 Active CN100476880C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101275740A CN100476880C (zh) 2006-09-14 2006-09-14 一种产生体积阴影的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101275740A CN100476880C (zh) 2006-09-14 2006-09-14 一种产生体积阴影的方法及系统

Publications (2)

Publication Number Publication Date
CN101145246A CN101145246A (zh) 2008-03-19
CN100476880C true CN100476880C (zh) 2009-04-08

Family

ID=39207763

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101275740A Active CN100476880C (zh) 2006-09-14 2006-09-14 一种产生体积阴影的方法及系统

Country Status (1)

Country Link
CN (1) CN100476880C (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102737404B (zh) * 2011-05-06 2017-03-01 新奥特(北京)视频技术有限公司 一种实现透明三维物体渲染的方法
CN102254340B (zh) * 2011-07-29 2013-01-09 北京麒麟网文化股份有限公司 一种基于gpu加速的环境光遮挡图像绘制方法及系统
CN105513122B (zh) * 2014-09-24 2019-01-25 中兴通讯股份有限公司 阴影体的建立方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
开放的3D API-解读OpenGL. 满水长虹.技术前沿. 2005
开放的3D API-解读OpenGL. 满水长虹.技术前沿. 2005 *

Also Published As

Publication number Publication date
CN101145246A (zh) 2008-03-19

Similar Documents

Publication Publication Date Title
CN109427088B (zh) 一种模拟光照的渲染方法及终端
CN102157008B (zh) 一种大规模虚拟人群实时绘制方法
CN114283231A (zh) 基于lod的bim模型轻量化构建与显示方法
US8988446B2 (en) 2D animation from a 3D mesh
CN105718420B (zh) 数据处理装置及其操作方法
Brabec et al. Shadow volumes on programmable graphics hardware
CN106683189B (zh) 一种在三维场景中渲染文字的方法
CN105556565A (zh) 片段着色器执行顶点着色器计算
CN1741066A (zh) 在图形硬件中细分几何图像
CN103559374A (zh) 一种多子网格模型上进行面分裂型曲面细分的方法
CN1655191A (zh) 基于可编程图形硬件的多边形网格模型的快速体素化方法
CN112530005B (zh) 一种三维模型直线结构识别与自动修复方法
CN105574808A (zh) 一种流水线纹理贴图单元体系结构
CN112070909A (zh) 一种基于3D Tiles的工程三维模型LOD输出方法
CN114693851A (zh) 基于gpu的实时网格轮廓向量化与渲染系统
CN114241151A (zh) 三维模型简化方法、装置、计算机设备和计算机存储介质
CN103116897B (zh) 一种基于图像空间的三维动态数据压缩和平滑方法
CN100476880C (zh) 一种产生体积阴影的方法及系统
WO2022161319A1 (zh) 一种阴影贴图的处理方法、装置、设备及计算机可读存储介质、程序产品
CN114375464A (zh) 使用边界体积表示对虚拟空间中的动态单元进行光线追踪
CN111583378A (zh) 一种虚拟资产处理的方法及装置、电子设备、存储介质
CN102117491A (zh) 一种三维建模中纹理数据的绘制方法及装置
CN109829962B (zh) 一种利用opengl的物体空间消隐线计算加速方法
CN114820904A (zh) 支持光照的伪室内渲染方法、装置、介质和设备
CN115880127A (zh) 一种渲染格式选择方法及其相关设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant