发明名称 利用可见性插值实现三维场景间接光照效果近似绘制的方法
摘要 本发明涉及一种利用可见性插值实现三维场景间接光照效果近似绘制的方法,其特征在于:首先利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合;然后用间接光源照射三维场景并对三维场景进行绘制;在绘制三维场景时,先对可视场景区域的可视场景点执行降采样操作来获得间接光照可见性评估采样点并计算采样点的可见性,其他未被采样的可视场景点的间接光照可见性通过插值计算得到。可以用较低的代价来实现考虑间接光照遮挡问题的三维场景间接光照效果绘制。
申请公布号 CN106447759A 申请公布日期 2017.02.22
申请号 CN201610909821.6 申请日期 2016.10.19
申请人 长春理工大学 发明人 陈纯毅;杨华民;蒋振刚;李华
分类号 G06T15/50(2011.01)I 主分类号 G06T15/50(2011.01)I
代理机构 吉林长春新纪元专利代理有限责任公司 22100 代理人 王薇
主权项 一种利用可见性插值实现三维场景间接光照效果近似绘制的方法, 其特征在于:首先利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;然后,把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;对二维数组A003进行降采样得到二维数组A004,对于间接光源集合A001中的每个间接光源A005,判断间接光源A005与二维数组A004中的每个空间位置A002之间是否直接可视,如果直接可视,把与之对应的可见性值设置为1,否则把与之对应的可见性值设置为0,把二维数组A004中的所有空间位置A002对应的可见性值保存在二维数组A006中;对于间接光源集合A001中的每个间接光源A005,计算在不考虑几何物体遮挡时的间接光源A005对二维数组A003中的每个空间位置A002的光照贡献A007,利用二维双线性插值技术根据二维数组A006的内容插值计算出间接光源A005与二维数组A003中的每个空间位置A002之间的可见性值VIS,间接光源A005对二维数组A003中的每个空间位置A002的实际光照贡献IndI等于光照贡献A007与可见性值VIS之乘积;对于二维数组A003中的每个空间位置A002,累加间接光源集合A001中的每个间接光源A005对空间位置A002的实际光照贡献IndI就得到空间位置A002的总间接光照结果;具体实现步骤如下:步骤S101:利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;步骤S102:把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;可视场景点就是从视点位置透过虚拟像素平面的像素能直接看到的场景点,二维数组A003的行数等于虚拟像素平面的像素行数<i>N</i><sub><i>r</i></sub>,二维数组A003的列数等于虚拟像素平面的像素列数<i>N</i><sub><i>c</i></sub>;二维数组A003的每个元素与虚拟像素平面的各个像素一一对应;步骤S103:在计算机系统的存储器中创建一个包含<img file="90002dest_path_image001.GIF" wi="77" he="33" />行、<img file="380169dest_path_image002.GIF" wi="79" he="35" />列的二维数组A004,其中<img file="322717dest_path_image003.GIF" wi="37" he="30" />表示对<i>x</i>进行向上取整,<i>n</i>为一个正奇数表示降采样倍数,<i>n</i> &lt; <i>N</i><sub><i>r</i></sub>且<i>n</i> &lt; <i>N</i><sub><i>c</i></sub>;把二维数组A003的第<img file="698335dest_path_image004.GIF" wi="175" he="33" />行、第<img file="118952dest_path_image005.GIF" wi="182" he="31" />列的元素赋值给二维数组A004的第<i>i</i>行、第<i>j</i>列的元素,其中<i>i</i> = 1, 2, ⋯,<img file="529204dest_path_image006.GIF" wi="74" he="34" />−1,<i>j</i> = 1, 2, ⋯,<img file="642654dest_path_image007.GIF" wi="77" he="33" />−1,<img file="505568dest_path_image008.GIF" wi="39" he="33" />表示对<i>x</i>进行向下取整;如果<img file="729876dest_path_image009.GIF" wi="291" he="31" />,则令Idr =<img file="729056dest_path_image010.GIF" wi="139" he="36" />+<img file="951090dest_path_image011.GIF" wi="63" he="33" />+1,否则令Idr = <i>N</i><sub><i>r</i></sub>;如果<img file="363616dest_path_image012.GIF" wi="289" he="33" />,则令<img file="329298dest_path_image013.GIF" wi="317" he="35" />,否则令Idc = <i>N</i><sub><i>c</i></sub>;把二维数组A003的第Idr行、第<img file="510881dest_path_image014.GIF" wi="181" he="31" />列的元素赋值给二维数组A004的第<img file="629448dest_path_image015.GIF" wi="77" he="34" />行、第<i>j</i>列的元素,其中<img file="529271dest_path_image016.GIF" wi="208" he="31" />;把二维数组A003的第<img file="33064dest_path_image017.GIF" wi="177" he="32" />行、第Idc列的元素赋值给二维数组A004的第<i>i</i>行、第<img file="334733dest_path_image018.GIF" wi="75" he="35" />列的元素,其中<img file="632990dest_path_image019.GIF" wi="200" he="33" />;把二维数组A003的第Idr行、第Idc列的元素赋值给二维数组A004的第<img file="20109dest_path_image020.GIF" wi="78" he="34" />行、第<img file="327594dest_path_image021.GIF" wi="72" he="29" />列的元素;步骤S104:在计算机系统的存储器中创建一个包含<i>N</i><sub><i>r</i></sub>行、<i>N</i><sub><i>c</i></sub>列的二维数组IndLS,把二维数组IndLS的每个元素赋值为0,二维数组IndLS的元素与二维数组A003的元素一一对应,二维数组IndLS用于保存二维数组A003中的元素对应的空间位置A002的总间接光照结果;对于间接光源集合A001中的每个间接光源A005,做如下操作:步骤S104‑1:在计算机系统的存储器中创建一个包含<img file="218189dest_path_image022.GIF" wi="75" he="34" />行、<img file="952927dest_path_image023.GIF" wi="75" he="29" />列的二维数组A006;二维数组A006的元素与二维数组A004的元素一一对应;对于二维数组A004中的每个元素B003,计算元素B003在二维数组A004中对应的行号row和列号col,做如下操作:① 连接元素B003对应的空间位置A002与间接光源A005对应的空间位置B004,确定一条线段B005,判断线段B005与三维场景中的几何物体之间是否有除线段B005的两个端点之外的交点,如果有,则把二维数组A006的第row行、第col列的元素赋值为0,否则把二维数组A006的第row行、第col列的元素赋值为1;② 计算元素B003对应的空间位置A002在视点坐标系中的坐标vCOR;视点坐标系由<i>u</i>、<i>v</i>、<i>w</i>三个正交的方向定义,视点坐标系的原点在视点位置,<i>w</i>方向为位于视点处的相机的正前方向,<i>v</i>方向为位于视点处的相机的竖直向上方向;步骤S104‑2:对于二维数组A003中的每个元素B006,做如下操作:① 计算在不考虑几何物体遮挡时的间接光源A005对元素B006对应的空间位置A002产生的光照贡献A007;② 二维数组A006的各个元素与二维数组A004的各个元素对应的空间位置A002的坐标vCOR的<i>u</i>和<i>v</i>分量共同定义了二维可见性函数<i>V</i>(<i>u</i>, <i>v</i>)的离散采样结果B007,二维数组A006的各个元素的值为二维可见性函数<i>V</i>(<i>u</i>, <i>v</i>)在特定的<i>u</i>和<i>v</i>位置处的采样值;计算元素B006对应的空间位置A002在视点坐标系中的坐标vCOR2;令<i>s</i><sub>2</sub>等于坐标vCOR2的<i>u</i>分量值,<i>t</i><sub>2</sub>等于坐标vCOR2的<i>v</i>分量值;根据离散采样结果B007,如果<i>s</i><sub>2</sub>和<i>t</i><sub>2</sub>在离散采样结果B007的<i>u</i>和<i>v</i>坐标的采样范围内,则利用二维双线性插值技术计算<i>V</i>(<i>u</i> =<i> s</i><sub>2</sub>, <i>v</i> = <i>t</i><sub>2</sub>)的值,否则在离散采样结果B007中搜索离(<i>u</i> =<i> s</i><sub>2</sub>, <i>v</i> = <i>t</i><sub>2</sub>)最近的采样点SP,把采样点SP对应的二维可见性函数<i>V</i>(<i>u</i>, <i>v</i>)的值作为<i>V</i>(<i>u</i> =<i> s</i><sub>2</sub>, <i>v</i> = <i>t</i><sub>2</sub>)的近似值;令变量DSI等于光照贡献A007与<i>V</i>(<i>u</i> =<i> s</i><sub>2</sub>, <i>v</i> = <i>t</i><sub>2</sub>)的值之乘积;③ 计算元素B006在二维数组A003中的行号<i>i</i><sub>2</sub>和列号<i>j</i><sub>2</sub>;先把变量BUF赋值为二维数组IndLS的第<i>i</i><sub>2</sub>行、第<i>j</i><sub>2</sub>列的元素的值,再把二维数组IndLS的第<i>i</i><sub>2</sub>行、第<i>j</i><sub>2</sub>列的元素赋值为变量BUF的值与变量DSI的值之和;步骤S105:用标准的阴影映射方法绘制三维场景的直接光照结果,把直接光照结果与二维数组IndLS中保存的总间接光照结果加在一起就得到全局光照结果,最后把全局光照结果转换成像素颜色值,输出到三维场景画面图像文件中。
地址 130022 吉林省长春市卫星路7089