发明名称 三维场景中由透明几何对象产生的面焦散效果的近似绘制方法
摘要 本发明公开一种三维场景中由透明几何对象产生的面焦散效果的近似绘制方法。本方法将三维场景中的几何对象分为透明几何对象和非透明几何对象,分别用不同的场景图进行组织;通过先测试光源采样光线是否与透明几何对象相交,来减少对光源采样光线进行处理操作的计算量。对于由透明几何对象被点光源直接照射而产生的面焦散效果,利用本方法可以明显提高三维场景面焦散效果的绘制速度。
申请公布号 CN105096371A 申请公布日期 2015.11.25
申请号 CN201510425208.2 申请日期 2015.07.14
申请人 长春理工大学 发明人 陈纯毅;杨华民;李华;蒋振刚;曲福恒;李岩芳
分类号 G06T15/06(2011.01)I 主分类号 G06T15/06(2011.01)I
代理机构 代理人
主权项 三维场景中由透明几何对象产生的面焦散效果的近似绘制方法,其特征在于,技术解决方案和所需的实现步骤如下:本方法涉及一种数据结构PHOTON,数据结构PHOTON包括位置P0、法向量nv、入射向量Vi、亮度Φi共四个成员变量;本方法涉及一种数据结构SPOINT,数据结构SPOINT包括位置P0、法向量nv、漫反射系数kd共三个成员变量;本方法的技术解决方案:将三维场景中的所有几何对象分为透明几何对象和非透明几何对象;透明几何对象就是光可以透过的几何对象,非透明几何对象就是光完全不能透过的几何对象;将所有透明几何对象用一个场景图SGT来进行组织,将所有非透明几何对象用一个场景图SGF来进行组织;将场景图SGT和场景图SGF都保存在计算机系统的内存中;在计算机系统中执行如下操作:Step001:设置列表LPHOTON为空;根据点光源PS的光照发射强度的空间角度分布,对点光源的光照发射方向进行重要性采样,得到N个采样方向,每个采样方向对应一条从点光源PS发射的光线,从而得到N条从点光源PS发射的光线,对其中的每条光线A001,做如下操作:Step001‑1:判断光线A001是否与场景图SGT中的几何对象相交,如果不相交则转步骤Step001‑9;Step001‑2:计算光线A001与场景图SGT中的几何对象的离点光源PS最近的交点A002;Step001‑3:判断光线A001是否与场景图SGF中的几何对象相交,如果不相交则转步骤Step001‑6;Step001‑4:计算光线A001与场景图SGF中的几何对象的离点光源PS最近的交点A003;Step001‑5:如果交点A002到点光源PS的距离大于交点A003到点光源PS的距离,则转步骤Step001‑9;Step001‑6:基于光线跟踪原理,对光线A001在由场景图SGT和场景图SGF中的所有几何对象组成的三维场景中的传播过程进行跟踪,依次计算光线A001对应的传播路径与三维场景中的几何对象的交点A004,只要发现交点A004所在的几何对象的表面的材质为非透明材质,就立即停止光线跟踪计算,并转步骤Step001‑7;如果对光线A001对应的传播路径跟踪完毕后,未发现所在表面的材质为非透明材质的交点,则转步骤Step001‑9;Step001‑7:如果交点A004所在的几何对象的表面为非漫反射材质,则转步骤Step001‑9;Step001‑8:在计算机系统的内存中创建一个数据结构PHOTON类型的变量A005;把变量A005的位置P0成员变量赋值为交点A004所在的位置;把变量A005的法向量nv成员变量赋值为交点A004所在的位置的表面法向量;把变量A005的入射向量Vi成员变量赋值为光线A001对应的传播路径在交点A004处的单位化后的入射方向向量;根据点光源PS的光照发射功率及光照发射空间角度范围,计算点光源PS发射的光照经光线A001对应的传播路径传输后,入射到交点A004所在的位置的光亮度A006,把变量A005的亮度Φi成员变量赋值为光亮度A006;把变量A005加入到列表LPHOTON中;Step001‑9:针对光线A001的操作结束;Step002:创建一个Nr行、Nc列的二维数组Arr,用于存放数据结构SPOINT类型的变量,Nr是虚拟相机的总像素行数,Nc是虚拟相机的总像素列数,数组Arr的元素与虚拟相机的像素一一对应;创建一个Nr行、Nc列的二维数组IMAG,用于存放虚拟相机的每个像素对应的入射光亮度值,Nr是虚拟相机的总像素行数,Nc是虚拟相机的总像素列数,数组IMAG的元素与虚拟相机的像素一一对应;把场景图SGT和场景图SGF合并为一个场景图SGA;在计算机系统中,利用光线跟踪技术绘制由场景图SGA中的所有几何对象组成的三维场景A007,得到虚拟相机的每个像素A008对应的入射光亮度值Lrt,将每个像素A008对应的数组IMAG的元素赋值为光亮度值Lrt;在光线跟踪过程中,对每条相机光线A009,即从虚拟相机位置出发穿过像素A008的中心位置的光线,除正常的光线跟踪操作外,额外做如下操作:Step002‑1:如果光线A009与三维场景A007中的几何对象不相交,则转步骤Step002‑3;Step002‑2:计算光线A009与三维场景A007中的几何对象的离虚拟相机位置最近的交点A010;创建一个数据结构SPOINT类型的变量A011;将变量A011的位置P0成员变量赋值为交点A010所在的位置,将变量A011的法向量nv成员变量赋值为交点A010所在的位置的表面法向量;如果交点A010所在的位置对应的表面为漫反射材质,则将该表面的漫反射系数赋值给变量A011的漫反射系数kd成员变量,否则将变量A011的漫反射系数kd成员变量赋值为‑1;将光线A009对应的像素A008对应的数组Arr的元素赋值为变量A011的值;转步骤Step002‑4;Step002‑3:创建一个数据结构SPOINT类型的变量A012,将变量A012的位置P0成员变量赋值为位置(0,0,0),将变量A012的法向量nv成员变量赋值为向量(1,0,0),将变量A012的漫反射系数kd成员变量赋值为‑1;将光线A009对应的像素A008对应的数组Arr的元素赋值为变量A012的值;Step002‑4:针对光线A009的操作结束;Step003:对列表LPHOTON中的每个数据结构PHOTON类型的变量B001,做如下操作:Step003‑1:以变量B001的位置P0成员变量表示的位置为球心,确定一个半径为R的球B002;判断数组Arr中是否存在满足如下条件的元素B003:条件COND1:元素B003对应的数据结构SPOINT类型的变量的漫反射系数kd成员变量的值不等于‑1,且元素B003对应的数据结构SPOINT类型的变量的位置P0成员变量表示的位置处于球B002内;如果数组Arr中不存在满足条件COND1的元素,转步骤Step003‑2,否则对数组Arr中满足条件COND1的每个元素B005,做如下操作:①令D等于从元素B005对应的数据结构SPOINT类型的变量的位置P0成员变量表示的位置到变量B001的位置P0成员变量表示的位置的距离;如果R等于0,则令t=2,否则令t=D/R;令<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>C</mi><mi>&kappa;</mi></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>exp</mi><mrow><mo>(</mo><mo>-</mo><mn>3</mn><msup><mi>t</mi><mn>2</mn></msup><mo>)</mo></mrow><mo>,</mo></mtd><mtd><mn>0</mn><mo>&le;</mo><mi>t</mi><mo>&le;</mo><mn>1</mn></mtd></mtr><mtr><mtd><mn>0</mn><mo>,</mo></mtd><mtd><mi>t</mi><mo>></mo><mn>1</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow>]]></math><img file="FSA0000119274410000031.GIF" wi="634" he="141" /></maths>令Φ<sub>p</sub>等于变量B001的亮度Φi成员变量的值;令ω<sub>i</sub>等于变量B001的入射向量Vi成员变量的值;令n<sub>p</sub>等于元素B005对应的数据结构SPOINT类型的变量的法向量nv成员变量的值;令ω<sub>o</sub>为从元素B005对应的数据结构SPOINT类型的变量的位置P0成员变量表示的位置指向虚拟相机位置的单位向量;令ρ等于元素B005对应的数据结构SPOINT类型的变量的漫反射系数kd成员变量的值;根据漫反射定律计算从ω<sub>i</sub>表示的方向入射的、亮度为Φ<sub>p</sub>的光经漫反射系数为ρ的漫反射表面反射后,沿ω<sub>o</sub>表示的方向入射到虚拟相机中的光亮度Lc;令LW等于光亮度Lc与C<sub>κ</sub>之乘积;②把元素B005对应的虚拟相机像素对应的数组IMAG的元素赋值为元素B005对应的虚拟相机像素对应的数组IMAG的元素的值与LW之和;③针对元素B005的操作结束;Step003‑2:针对变量B001的操作结束;Step004:把数组IMAG中保存的光亮度值转换成虚拟相机像素的颜色值,并以图像文件的形式输出到计算机系统的磁盘中。
地址 130022 吉林省长春市卫星路7089号