发明名称 用于近似绘制三维场景柔和阴影的方法
摘要 本发明提供了一种用于近似绘制三维场景柔和阴影的方法。本方法通过对平面面光源的随机采样来估计可视场景区域内的平面面光源可见性,并利用空间卷积平滑去噪滤波来减小随机采样引入的平面面光源可见性噪声;利用光线投射技术,根据获得的可视场景点的平面面光源可见性数据,计算出平面面光源对可视场景点的光照贡献,以此为依据最终计算出可视场景点的颜色值,绘制出包含柔和阴影的三维场景画面。本方法能在保证三维场景画面绘制质量的同时,提高绘制速度。
申请公布号 CN104346831A 申请公布日期 2015.02.11
申请号 CN201410636705.2 申请日期 2014.11.01
申请人 长春理工大学 发明人 陈纯毅;杨华民;李华;蒋振刚;曲福恒;李岩芳
分类号 G06T17/00(2006.01)I 主分类号 G06T17/00(2006.01)I
代理机构 代理人
主权项 用于近似绘制三维场景柔和阴影的方法,其特征在于,所需的设备、数据结构以及实现步骤如下:提供一种用于近似绘制三维场景柔和阴影的方法;本方法要求三维场景的所有几何对象的表面都是郎伯漫反射类型的表面;平面面光源上的任意一点p<sub>s</sub>向平面面光源所在平面的法向量指向的半空间内的各个方向均匀地发射光照,平面面光源上的各点的发光特性相同;三维场景柔和阴影绘制的关键是,高效地计算每个可视场景点的平面面光源可见性;本方法使用光线投射技术,从视点向虚拟屏幕中的各个像素发射光线A001,判断光线A001是否与三维场景中的几何对象相交,如果光线A001与三维场景中的几何对象相交,则利用计算机系统求解交点A002处的平面面光源可见性,并计算平面面光源对交点A002的光照贡献A003,再根据光照贡献A003计算与光线A001相对应的像素的颜色值,否则将与光线A001相对应的像素的颜色值设置为背景颜色值;在光线投射过程中,平面面光源不作为几何对象处理;本方法的第一部分在计算机系统中计算三维场景可视区域内的各个可视场景点的平面面光源可见性,并将计算结果保存在计算机系统的内存中,具体实现步骤如下:Step001:在计算机系统的内存中创建一个M行N列的数组V,其中M为虚拟屏幕的像素总行数,N为虚拟屏幕的像素总列数;Step002:对虚拟屏幕中的每个像素B001,做如下操作:Step002‑1:从视点发射一条穿过像素B001中心的光线B002;Step002‑2:判断光线B002是否与三维场景中的几何对象相交,如果不相交,则令vis=‑1,转步骤Step002‑8;Step002‑3:计算光线B002与三维场景中的几何对象之间的离视点最近的交点B003;Step002‑4:在平面面光源上任选一点p<sub>s</sub>,创建一个从点p<sub>s</sub>指向交点B003的向量Vec1;如果向量Vec1和平面面光源所在平面的法向量的夹角大于或者等于90度,令vis=0,转步骤Step002‑8;Step002‑5:令SUM=0;Step002‑6:在平面面光源上,按均匀分布随机地选取NUM个采样点,NUM≥1,对每个采样点B004,做如下操作:Step002‑6‑1:连接交点B003和采样点B004,得到一条线段B005;判断线段B005与三维场景中的几何对象之间是否还有除线段B005的端点外的交点,如果有,则转步骤Step002‑6‑3;Step002‑6‑2:SUM=SUM+1;Step002‑6‑3:针对采样点B004的操作结束;Step002‑7:令vis=SL×SUM/NUM,SL表示平面面光源的面积;Step002‑8:计算像素B001在虚拟屏幕中所处的行序号i和列序号j;Step002‑9:将数组V的第i行、第j列元素赋值为vis;本方法的第二部分对本方法的第一部分产生的数组V中的数据进行滤波处理,降低随机采样引入的噪声,具体实现步骤如下:Step101:在计算机系统的内存中创建一个M行N列的数组V<sub>2</sub>,其中M为虚拟屏幕的像素总行数,N为虚拟屏幕的像素总列数;令i=1;Step102:令j=1;Step103:如果i+1>M或者i‑1<1或者j+1>N或者j‑1<1,则将数组V<sub>2</sub>的第i行、第j列元素赋值为数组V的第i行、第j列元素的值,转步骤Step106;Step104:如果数组V的从第i‑1到i+1行、从第j‑1到j+1列的9个元素中的某个元素的值为‑1,则将数组V<sub>2</sub>的第i行、第j列元素赋值为数组V的第i行、第j列元素的值,转步骤Step106;Step105:用3行3列的空间卷积模板与数组V的从第i‑1到i+1行、从第j‑1到j+1列的9个元素做空间卷积,c<sub>mn</sub>为空间卷积模板的第m行、第n列元素,即:将数组V的第i‑1行、第j‑1列的元素的值与c11之积赋值给S<sub>11</sub>,将数组V的第i‑1行、第j列的元素的值与c<sub>12</sub>之积赋值给S<sub>12</sub>,将数组V的第i‑1行、第j+1列的元素的值与c<sub>13</sub>之积赋值给S<sub>13</sub>,将数组V的第i行、第j‑1列的元素的值与c<sub>21</sub>之积赋值给S<sub>21</sub>,将数组V的第i行、第j列的元素的值与c<sub>22</sub>之积赋值给S<sub>22</sub>,将数组V的第i行、第j+1列的元素的值与c<sub>23</sub>之积赋值给S<sub>23</sub>,将数组V的第i+1行、第j‑1列的元素的值与c<sub>31</sub>之积赋值给S<sub>31</sub>,将数组V的第i+1行、第j列的元素的值与c<sub>32</sub>之积赋值给S<sub>32</sub>,将数组V的第i+1行、第j+1列的元素的值与c<sub>33</sub>之积赋值给S<sub>33</sub>,将数组V<sub>2</sub>的第i行、第j列元素赋值为S<sub>11</sub>+S<sub>12</sub>+S<sub>13</sub>+S<sub>21</sub>+S<sub>22</sub>+S<sub>23</sub>+S<sub>31</sub>+S<sub>32</sub>+S<sub>33</sub>;Step106:j=j+1;如果j≤N,转步骤Step103;Step107:i=i+1;如果i≤M,转步骤Step102;在步骤Step105中需要用到空间卷积模板,其用来实现平滑去噪,以减小随机采样引入的噪声;图像处理技术领域中有许多不同的平滑去噪空间卷积模板可以应用在本方法中;例如,可以使用平滑去噪空间卷积模板SF,空间卷积模板SF的各个元素取值为:c<sub>11</sub>=c<sub>12</sub>=c<sub>13</sub>=c<sub>21</sub>=c<sub>22</sub>=c<sub>23</sub>=c<sub>31</sub>=c<sub>32</sub>=c<sub>33</sub>=1/9;本方法的第三部分在本方法的前两部分产生的结果基础上,绘制包含柔和阴影的三维场景画面,具体实现步骤如下:Step201:对虚拟屏幕中的每个像素C001,做如下操作:Step201‑1:从视点发射一条穿过像素C001中心的光线C002;Step201‑2:判断光线C002是否与三维场景中的几何对象相交,如果不相交,转步骤Step201‑7;Step201‑3:计算光线C002与三维场景中的几何对象之间的离视点最近的交点C003;Step201‑4:将∫<sub>L</sub>G(p<sub>o</sub>,q)dq赋值给MG,其中p<sub>o</sub>表示交点C003对应的位置向量,q为平面面光源上的某点对应的位置向量,G(p<sub>o</sub>,q)=cos(θ<sub>1</sub>)·cos(θ<sub>2</sub>)·|p<sub>o</sub>‑q|<sup>‑2</sup>,θ<sub>1</sub>表示交点C003处的法向量与由交点C003指向q对应的点的向量之间的夹角,θ<sub>2</sub>表示q对应的点的法向量与由q对应的点指向交点C003的向量之间的夹角,|p<sub>o</sub>‑q|表示交点C003到q对应的点的距离,L表示平面面光源;可用蒙特卡洛方法计算∫<sub>L</sub>G(p<sub>o</sub>,q)dq,也可用<img file="FSA0000110195200000033.GIF" wi="205" he="50" />和Hanrahan发表在1993年的Siggraph会议论文集上的方法计算∫<sub>L</sub>G(p<sub>o</sub>,q)dq;Step201‑5:计算像素C001在虚拟屏幕中所处的行序号i和列序号j;将MV赋值为数组V<sub>2</sub>的第i行、第j列元素的值与<img file="FSA0000110195200000031.GIF" wi="59" he="77" />之积,其中<img file="FSA0000110195200000032.GIF" wi="54" he="77" />为平面面光源的发射光亮度;Step201‑6:将CP赋值为MG×MV×ρ/π,其中ρ为交点C003处的反射率;根据CP的值计算像素C001的颜色值;转步骤Step201‑8;Step201‑7:将像素C001的颜色值赋值为背景色;Step201‑8:针对像素C001的操作结束;Step202:将虚拟屏幕中的所有像素的颜色值保存为图片,存放到计算机系统的磁盘文件中。
地址 130022 吉林省长春市卫星路7089号