包含由镜面反射产生的面焦散效果的3d虚拟场景的近似绘制方法

文档序号:6430198阅读:232来源:国知局
专利名称:包含由镜面反射产生的面焦散效果的3d虚拟场景的近似绘制方法
技术领域
本发明属于真实感3D虚拟场景绘制技术领域,涉及一种包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法。
背景技术
目前,真实感3D虚拟场景绘制技术在数字娱乐、影视特效、建筑CAD、广告动画等领域得到广泛应用。从光源发出的光线经镜而反射物体表而反射后,再入射到漫反射物体表面上,会在漫反射物体表面上形成面焦散效果。传统上,使用光子映射方法绘制面焦散效果,然而其计算效果通常不高。在现有技术中,申请号为201010597769. 8的一件中国发明专利申请通过计算镜面反射面片顶点处的镜面反射光线来创建焦散照明体,进而实现面焦散效果的绘制;该方法绘制精度较高,但绘制时间仍然较长。在3D虚拟场景建模时,经常需要预览场景设计结果;此时,往往不需要非常精确的绘制结果,但是却要求较快的绘制速度。本发明提出一种由镜面反射产生的面焦散效果的近似绘制方法,可大大提高面焦散效果的绘制速度。

发明内容
本发明方法的目的在于提高3D虚拟场景中由镜面反射产生的面焦散效果的绘制速度,减少在影视特效、游戏、视景仿真等应用中设计3D虚拟场景时的预览时间开销。本发明方法的技术解决方案包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法,首先将虚拟相机放置在点光源S的位置上,利用光栅化技术绘制3D虚拟场景中的所有镜面反射物体表面,记录所有片段的空间位置及表面法线,然后根据记录的片段的空间位置及表面法线数据创建虚拟聚光灯列表,用虚拟聚光灯列表中的所有聚光灯照射3D虚拟场景,再将虚拟相机放置在眼睛位置处,利用光栅化技术绘制3D虚拟场景中的所有漫反射物体表面,将像素缓存中的绘制结果保存在变量PIXl中;将虚拟相机放置在眼睛位置处,用点光源S照射3D虚拟场景,利用光栅化技术绘制3D虚拟场景中的所有物体表面,将像素缓存中的绘制结果保存在变量PIX2中;合并变量PIXl和变量PIX2的绘制结果, 即得到最终的包含面焦散效果的绘制结果,如图1所示。本发明方法的具体步骤如下StepOOl 创建一个中心位于点光源S的位置的正立方体,且该正立方体将3D虚拟场景完全包裹;从正立方体的各个顶点向光源S的位置连线,将整个正立方体空间等分为6 份,每份等分空间形成一个正四棱锥,记为正四棱锥Q1、正四棱锥Q2、正四棱锥Q3、正四棱锥 Q4、正四棱锥Q5和正四棱锥Q6;St印002 创建一个空的虚拟聚光灯列表L ;St印003 对于第i个正四棱锥Qi, i = 1,2,...,6,做如下计算①将虚拟相机放置在点光源S的位置上,根据正四棱锥Qi的几何参数来设置虚拟相机的透视投影视域体参数,使虚拟相机的透视投影视域体与正四棱锥Qi重叠;打开深度测试,绘制3D虚拟场景中的所有镜面反射物体表面;在片段着色程序中,对于所有通过深度测试的片段(A001),将片段(A001)的空间位置(A002)及表而法线(A003)记录在像素缓存(A004)中;②对于像素缓存(A004)中记录的每个片段(A001)的空间位置(A002)及表面法线(A003)数据,做如下计算首先,根据片段(A001)的表面法线(A003)和从片段(A001) 的空间位置(A002)向点光源S的位置的连线,确定光线的入射角,按照理想镜面反射定律, 计算反射光线方向(A005);然后,创建一个虚拟聚光灯(A006),虚拟聚光灯(A006)的位置设置在片段(A001)的空间位置(A002)处,虚拟聚光灯(A006)的中线方向设置为反射光线方向(A005),虚拟聚光灯(A006)的发散角设置为n/2n+1弧度,其中为镜面反射的汇聚度;最后,将虚拟聚光灯(A006)添加到虚拟聚光灯列表L中;St印004 关闭点光源S,使用虚拟聚光灯列表L中的所有虚拟聚光灯照射3D虚拟场景;将虚拟相机放置在眼睛位置处,打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有漫反射物体表面,获得虚拟聚光灯列表L中的所有虚拟聚光灯对各漫反射物体表面的光照贡献,将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量 PIXl 中;St印005 仅以点光源S照射3D虚拟场景,将虚拟相机放置在眼睛位置处,打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有物体表面,获得点光源S对3D虚拟场景中的物体表面的光照贡献,将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量PIX2中;St印006 合并变量PIXl和变量PIX2中的绘制结果,得到最终的包含面焦散效果的绘制结果。有益效果本发明提供了一种包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法。首先从光源处绘制3D虚拟场景中的所有镜面反射物体表面,以获得所有镜面反射片段的空间位置及表面法线,进而通过创建虚拟聚光灯来模拟镜面反射光线产生的二次光照,再从眼睛处绘制虚拟聚光灯照射下的3D虚拟场景的漫反射物体表面,得到而焦散绘制结果。合并面焦散绘制结果和正常光源照射下的从眼睛处对3D虚拟场景进行绘制的结果, 得到最终的包含面焦散效果的3D虚拟场景的绘制结果。本发明方法的绘制时间仅相当于光子映射方法的10% 15%。


图1是3D虚拟场景的包含面焦散效果的近似绘制流程图。
具体实施例方式为了使本发明方法的特征和优点更加清楚明白,下面参照附图结合具体实施例对本发明方法作进一步描述。本发明方法的技术解决方案包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法,首先将虚拟相机放置在点光源S的位置上,利用光栅化技术绘制3D虚拟场景中的所有镜面反射物体表面,记录所有片段的空间位置及表面法线,然后根据记录的片段的空间位置及表面法线数据创建虚拟聚光灯列表,用虚拟聚光灯列表中的所有聚光灯照射3D虚拟场景,再将虚拟相机放置在眼睛位置处,利用光栅化技术绘制3D虚拟场景中的所有漫反射物体表面,将像素缓存中的绘制结果保存在变量PIXl中;将虚拟相机放置在眼睛位置处,用点光源S照射3D虚拟场景,利用光栅化技术绘制3D虚拟场景中的所有物体表面,将像素缓存中的绘制结果保存在变量PIX2中;合并变量PIXl和变量PIX2的绘制结果, 即得到最终的包含面焦散效果的绘制结果,如图1所示。本发明的技术方案中包括三个绘制操作步骤,本发明方法使用OpenGL和GLSL着色语言来编程实现,并使用nVidia公司的 GeForce GTX 280图形处理器来加速程序的执行。本发明方法的具体步骤如下StepOOl 创建一个中心位于点光源S的位置处的正立方体,且该正立方体将3D虚拟场景完全包裹;从正立方体的各个顶点向光源S的位置连线,将整个正立方体空间等分为6份,每份等分空间形成一个正四棱锥,记为正四棱锥Q1、正四棱锥Q2、正四棱锥Q3、正四棱锥Q4、正四棱锥Q5和正四棱锥Q6 ;St印002 创建一个空的虚拟聚光灯列表L ;St印003 对于第i个正四棱锥Qi, i = 1,2,...,6,做如下计算①将虚拟相机放置在点光源S的位置上,根据正四棱锥Qi的几何参数来设置虚拟相机的透视投影视域体参数,使虚拟相机的透视投影视域体与正四棱锥Qi重叠;打开深度测试,绘制3D虚拟场景中的所有镜面反射物体表面;在片段着色程序中,对于所有通过深度测试的片段(A001),将片段(A001)的空间位置(A002)及表面法线(A003)记录在像素缓存(A004)中;②对于像素缓存(A004)中记录的每个片段(A001)的空间位置(A002)及表面法线(A003)数据,在片段着色程序中做如下计算首先,根据片段(A001)的表面法线(A003) 和从片段(A001)的空间位置(A002)向点光源S的位置的连线,确定光线的入射角,按照理想镜面反射定律,计算反射光线方向(A005);然后,创建一个虚拟聚光灯(A006),虚拟聚光灯(A006)的位置设置在片段(A001)的空间位置(A002)处,虚拟聚光灯(A006)的中线方向设置为反射光线方向(A005),虚拟聚光灯(A006)的发散角设置为π/2η+1弧度,其中为镜面反射的汇聚度;最后,将虚拟聚光灯(A006)添加到虚拟聚光灯列表L中;St印004 关闭点光源S,使用虚拟聚光灯列表L中的所有虚拟聚光灯照射3D虚拟场景;将虚拟聚光灯列表L放在图形处理器的纹理内存中;将虚拟相机放置在眼睛位置处, 打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有漫反射物体表面,编写片段着色程序计算虚拟聚光灯列表L中的所有虚拟聚光灯对各漫反射物体表面的光照贡献, 将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量PIXl中;St印005 仅以点光源S照射3D虚拟场景,将虚拟相机放置在眼睛位置处,打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有物体表面,获得点光源S对3D虚拟场景中的物体表面的光照贡献,将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量PIX2中;St印006 合并变量PIXl和变量PIX2中的绘制结果,得到最终的包含面焦散效果的绘制结果;合并操作可以使用累积缓存来实现,也可以分别为变量PIXl和变量PIX2赋予不同的权值,再将二者相加来实现。
权利要求
1.包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法,其特征在于,技术解决方案和具体步骤如下本发明方法的目的在于提高3D虚拟场景中由镜面反射产生的面焦散效果的绘制速度,减少在影视特效、游戏、视景仿真等应用中设计3D虚拟场景时的预览时间开销;本发明方法的技术解决方案包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法,首先将虚拟相机放置在点光源S的位置上,利用光栅化技术绘制3D虚拟场景中的所有镜面反射物体表面,记录所有片段的空间位置及表面法线,然后根据记录的片段的空间位置及表面法线数据创建虚拟聚光灯列表,用虚拟聚光灯列表中的所有聚光灯照射 3D虚拟场景,再将虚拟相机放置在眼睛位置处,利用光栅化技术绘制3D虚拟场景中的所有漫反射物体表面,将像素缓存中的绘制结果保存在变量PIXl中;将虚拟相机放置在眼睛位置处,用点光源S照射3D虚拟场景,利用光栅化技术绘制3D虚拟场景中的所有物体表面, 将像素缓存中的绘制结果保存在变量PIX2中;合并变量PIXl和变量PIX2的绘制结果,即得到最终的包含面焦散效果的绘制结果;本发明方法的具体步骤如下StepOOl 创建一个中心位于点光源S的位置的正立方体,且该正立方体将3D虚拟场景完全包裹;从正立方体的各个顶点向光源S的位置连线,将整个正立方体空间等分为6份, 每份等分空间形成一个正四棱锥,记为正四棱锥Q1、正四棱锥Q2、正四棱锥Q3、正四棱锥Q4、 正四棱锥Q5和正四棱锥Q6;St印002 创建一个空的虚拟聚光灯列表L ;St印003 对于第i个正四棱锥Qi, i = 1,2,...,6,做如下计算①将虚拟相机放置在点光源S的位置上,根据正四棱锥Qi的几何参数来设置虚拟相机的透视投影视域体参数,使虚拟相机的透视投影视域体与正四棱锥Qi重叠;打开深度测试, 绘制3D虚拟场景中的所有镜面反射物体表面;在片段着色程序中,对于所有通过深度测试的片段(A001),将片段(A001)的空间位置(A002)及表面法线(A003)记录在像素缓存 (A004)中;②对于像素缓存(A004)中记录的每个片段(A001)的空间位置(A002)及表面法线 (A003)数据,做如下计算首先,根据片段(A001)的表面法线(A003)和从片段(A001)的空间位置(A002)向点光源S的位置的连线,确定光线的入射角,按照理想镜面反射定律,计算反射光线方向(A005);然后,创建一个虚拟聚光灯(A006),虚拟聚光灯(A006)的位置设置在片段(A001)的空间位置(A002)处,虚拟聚光灯(A006)的中线方向设置为反射光线方向(A005),虚拟聚光灯(A006)的发散角设置为n/2n+1弧度,其中η彡0为镜面反射的汇聚度;最后,将虚拟聚光灯(Α006)添加到虚拟聚光灯列表L中;St印004 关闭点光源S,使用虚拟聚光灯列表L中的所有虚拟聚光灯照射3D虚拟场景;将虚拟相机放置在眼睛位置处,打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有漫反射物体表面,获得虚拟聚光灯列表L中的所有虚拟聚光灯对各漫反射物体表面的光照贡献,将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量PIXl 中;St印005 仅以点光源S照射3D虚拟场景,将虚拟相机放置在眼睛位置处,打开深度测试,按照正常的绘制流程,绘制3D虚拟场景中的所有物体表面,获得点光源S对3D虚拟场景中的物体表面的光照贡献,将绘制结果保存在像素缓存中;将像素缓存中的绘制结果保存在变量PIX2中;St印006 合并变量PIXl和变量PIX2中的绘制结果,得到最终的包含面焦散效果的绘制结果。
全文摘要
本发明公开一种包含由镜面反射产生的面焦散效果的3D虚拟场景的近似绘制方法,属于真实感三维虚拟场景绘制技术领域。本方法通过三个绘制操作步骤来完成包含面焦散效果的3D虚拟场景的绘制。第一步将虚拟相机放置在点光源处,绘制3D虚拟场景中的镜面反射物体表面,创建虚拟聚光灯来模拟镜面反射光线产生的二次光照;第二步将虚拟相机放置在眼睛处,绘制所有虚拟聚光灯照射下的3D虚拟场景的漫反射物体表面,得到面焦散绘制结果;第三步将虚拟相机放置在眼睛处,绘制点光源照射下的3D虚拟场景的所有物体表面。合并第二和第三步的绘制结果,得到最终的3D虚拟场景的绘制结果。本发明方法的绘制时间仅相当于光子映射方法的10%~15%。
文档编号G06T15/50GK102298792SQ20111022528
公开日2011年12月28日 申请日期2011年8月8日 优先权日2011年8月8日
发明者丁莹, 冯欣, 底晓强, 李华, 李奇, 李岩芳, 杨华民, 范静涛, 蒋振刚, 陈占芳, 陈纯毅, 韩成 申请人:长春理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1