首页> 中国专利> 基于图像映射空间的动态场景实时双面折射绘制方法

基于图像映射空间的动态场景实时双面折射绘制方法

摘要

基于图像映射空间的动态场景实时双面折射绘制方法:以透明物体的中心作为视点,将除透明物体本身外的周围其他物体的表面颜色信息和深度信息绘制到一张立方图纹理上;以透明物体的中心作为视点,将透明物的外表面法线及透明物体表面顶点到透明物体中心的距离绘制到一张立方图纹理;在透明物体表面将发生第一次折射,计算该次折射光线方向,并将立方图纹理作为输入,在图形硬件上通过折半查找的方式近似计算光线下一次与透明物表面相交点的位置;若发生全反射则查找下一个交点,若没有发生全发射,则在此交点发生第2次折射,光线穿出透明物体;在图形硬件上计算出射折射光线对周围其他物体的折射,并沿折射光线找到第一个与折射光线相交的物体表面位置的光照颜色作为该条折射光线所对应的屏幕像素颜色。本发明能够满足帧率实时性要求,同时可得到十分逼真的光折射绘制效果。

著录项

  • 公开/公告号CN101441774A

    专利类型发明专利

  • 公开/公告日2009-05-27

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN200810241170.3

  • 发明设计人 赵沁平;李帅;郝爱民;赵永涛;

    申请日2008-12-26

  • 分类号G06T15/00;G06T15/50;

  • 代理机构北京科迪生专利代理有限责任公司;

  • 代理人成金玉

  • 地址 100083 北京市海淀区学院路37号

  • 入库时间 2023-12-17 22:01:59

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-02-18

    未缴年费专利权终止 IPC(主分类):G06T15/00 授权公告日:20110629 终止日期:20131226 申请日:20081226

    专利权的终止

  • 2011-06-29

    授权

    授权

  • 2010-03-24

    实质审查的生效

    实质审查的生效

  • 2009-05-27

    公开

    公开

说明书

技术领域

本发明涉及一种基于图像映射空间的动态场景实时双面折射绘制方法,主要用于计算机三维场景绘制。

背景技术

折射是日常生活中较为常见的一种物理现象,如光线在水、玻璃、冰块以及钻石等材质中传播时均会发生折射。折射现象的实时真实感绘制对提升虚拟场景的沉浸感具有极其重要的意义,因而这也是三维图形实时逼真绘制领域的一个研究热点。当光线从透明物体的前表面进入后,它首先会在前表面处发生一次折射,在光线从物体后表面射出时又会发生第二次折射,因此要逼真的绘制光线穿过透明物体的折射现象必须精确计算光线在物体前、后两个表面所发生的二次折射。此外,在某些特殊的情况下,光线在透明物体内部还会发生一次或多次全反射,这也是真实感绘制算法必须考虑的问题。

较为简单的折射绘制算法是只计算光线在透明物体前表面所发生的折射(参见文献1—Lindholm,E.,Kligard,M.J.,and Moreton,H.,A user programmable vertex engine,proceedings of SIGGRAPH,ACM,Erik Lindholm,2001,PP.149-158.;文献2—Schmidt,C.M.,Simulating Refraction Using Geometric Transforms,master’s thesis ofComputer Science Department,University of Utah,2003.;文献3—Ofek,E.,andRappoport,A.,Interactive reflections on curved objects,proceedings of SIGGRAPH,1999,pp.333-342.)这类算法一般在GPU上计算出第一次折射光线的方向后,直接用这个方向访问环境图纹理,然后将取得的纹元颜色作为折射光线起点所对应的像素颜色绘制到屏幕上。这类算法毫无物理真实性可言,无法表现曲率较大的透明物体在折射其后面的物体时会发生景物上下或左右倒转的现象。由于该类算法计算量小,并且其绘制效果可以满足一些真实感要求不高的应用,因而目前这类算法还有一定的生存空间。

近期出现的基于图像映射空间的算法可以较为精确的对双面折射现象进行实时模拟。这类算法(参见文献4—Kay,D.S.,and Greenberg,D.,Transparency for computersynthesized images,proceedings of SIGGRAPH,1979,pp.158-164.;文献5—Diefenbach,P.and Badler,N.,Multi-pass pipeline rendering:Realism for dynamic environments,proceedings of the Symposium on Interactive 3D Graphics,1997,pp.59-70.;文献6—Ohbuchi,E.,A real-time refraction render for volume objects using apolygon-rendering scheme,proceedings of Computer Graphics International,2003,pp.190-195.和文献7—[7]Wyman Chris,An approximate image-space approach forinteractive refraction,ACM Transactions on Graphics,24,3,2005,pp.1050-1053.)在预计算模型前表面沿法向量反方向到模型后表面的距离的前提下,通过多遍绘制生成模型后表面的法向量浮点纹理以及前、后表面的深度浮点纹理,从而实现了透明物体基于图像映射空间的近似双面折射效果,但这类算法由于预计算而无法处理可变形模型,也无法处理全反射。后来的一些算法虽然在处理可变形物体及对周围物体折射方面以及在处理全反射方面进行了改进,但是,目前还没有一种全面的实时双面折射算法可以同时处理可变形物体、可运动刚体、多次全反射以及透明物体后表面的出射光线对周围物体的折射。

众所周知,光线追踪算法可以精确的模拟光的反射与折射现象,但是由于在光线与多边形之间存在大量的运算,它不能满足实时渲染的要求。为了达到实时渲染的目的,许多学者在这方面做了很多研究,提出了一些基于并行渲染及硬件加速的技术。一些代表性的论文(参见文献8—Wald,I.,Kollig,T.,Benthin,C.,Keller,A.,and Slusallek,P.,Interactive global illumination using fast ray tracing,Proceedings of theEurographics Rendering Workshop,2002,pp.15-24.;文献9—Purcell T,Buck I,MarkW R.,Ray tracing on programmable graphics hardware,ACM Transactions on Graphics,21,3,2002,pp.703-712.和文献10—Szirmay-Kalos L.,Aszodi B,Lazanyi I.,Approximate ray-tracing on the GPU with distance impostors,Computer Graphics Forum24,3,2005,pp.171-176.)都关注光线追踪算法,基于GPU的光线追踪,反射及基本的折射。目前这些方法都需要预计算,然而现在的许多应用程序诸如计算机游戏,虚拟漫游系统等,场景中的物体都是可移动的或可变形的,所以预计算也将在这些应用当中失效。

发明内容

本发明的技术解决的问题:克服现有技术的不足,提供一种基于图像映射空间的动态场景实时双面折射绘制方法,该方法可以实时模拟动态场景的全反射现象,时间复杂度与场景规模耦合度低,计算速度更快,能够满足帧率实时性要求,同时可以得到十分逼真的光折射绘制效果。

本发明的技术解决方案:基于图像映射空间的动态场景实时双面折射方法,步骤如下:

(1)以透明物体的中心作为视点进行绘制,将除透明物体本身外的周围其他物体的表面颜色信息和深度信息绘制到一张立方图纹理上;

(2)以透明物体的中心作为视点进行绘制,将透明物体的外表面法线及透明物表面顶点到透明物体中心的距离绘制到一张立方图纹理上;

(3)光线射入透明物体时,在透明物表面将发生第一次折射,计算该次折射光线方向,并将步骤(2)的立方图纹理作为输入,在图形硬件上通过折半查找的方式近似计算光线下一次与透明物体表面相交点的位置;

(4)根据透明物体本身的折射率,判断光线是否在步骤(3)所求得的光线与透明物体的交点处发生了全反射现象,若发生全反射则返回步骤(3)查找下一个交点,若没有发生全发射,则在此交点发生第2次折射,光线穿出透明物体,继续执行步骤(5);

(5)将步骤(1)中得到的立方图纹理作为输入,在图形硬件上计算出射折射光线对周围其他物体的折射,并沿折射光线找到第一个与折射光线相交的环境物表面位置的光照颜色作为该条折射光线所对应的屏幕像素颜色。

所述的步骤(2)中的以透明物体的中心作为视点进行绘制,将透明物的外表面法线及透表物体表面顶点到透明物体中心的距离绘制到一张立方图纹理的过程如下:

a.首先将摄像机移动到物体的中心,以90度的视野角,使得视线分别沿X正,负半轴,Y的正,负半轴,Z的正,负半轴来投射透明物体表面法线,最终建立立方图纹理,并将投射的透明物体表面每个点的法线保存到该纹理中;

b.利用GPU计算物体上每个点到其中心点的距离,将此距离保存在上步建立的立方图纹理中。

所述步骤(3)光线射入透明物体时,在透明物体表面将发生第一次折射,计算该次折射光线方向,并将步骤(2)的立方图纹理作为输入,在图形硬件上通过折半查找的方式近似计算光线下一次与透明物体表面相交点的位置的具体过程如下:

a.根据光线的入射方向,入射点P的法线及透明物体的折射率,首先计算出光线第一次穿过透明物体表面时的折射光线的方向T1;

b.由步骤a计算得出的折射光线方向T1及入射点,根据射线方程公式可以确定光线射出透明物发生第2次折射时的点必然在射线P1=P+tT1上,t为待求参数,找出两个常数a,b,分别令t=a,t=b代入上述射线方程,得到P1’,P2’两个点,P1’=P1+aT1,P2’=P1+bT1,使P1’点在物体之内,P2’点在物体之外;

c.进入折半查找循环,先找到P1’与P2’中点Pm=P1+T1*(a+b)/2,然后求出O到的距离,O是透明物体的中心点,与前述步骤(2)中立方图纹理的第4个通道保存的距离值做比较,循环利用折半查找,当O到的距离与前述步骤(2)的立方体贴图的第4个通道保存的距离值相等时,即为二次折射光线的出射点。

本发明与现有技术相比的优点在于:

(1)本发明利用立方图纹理保存透明物表面顶点的法线方向和顶点距透明物中心的距离,这样就可以利用图形处理器来提高折射渲染的速度。

(2)本发明利用折半查找的方法,降低了查找光线出射点的时间复杂度,从而提高了绘制效率。

(3)本发明考虑了光线可能在透明体内部发生全反射,从而提高了绘制的真实感。

(4)本发明所述的方法可同时适用于可变形柔体和可运动刚体,同时可以实时模拟动态场景的全反射现象,适用范围广泛。

附图说明

图1为本发明采用的流程图;

图2为施奈尔定理说明图;

图3为本发明立方图纹理如何保存定点信息的示意图;其中O点是物体的中心点,同时也是摄像机所在的位置,P点是沿Y的正半轴投射到立方图纹理上,保存了单位化的法线和OV距离的像素点;

图4为两张保存了透明物各点法线信息及距中心点距离信息的立方图纹理,其中a是Venus的立方图纹理,b是Buddha的立方图纹理;

图5为本发明的双面折射示意图;

图6为本发明的在全反射中的折射示意图;

图7为单面折射方法和Wyman的方法与本发明所述方法的效果比较图,最左边是环境贴图纹理,其中a,b,c表示来源于单面折射的效果截图,d,e,f,g和h是用了本发明所述方法图;a,e,g是光线只穿过一次表面发生一次折射的效果;b是用了Wyman的方法的效果,c是用光线追踪的效果。该图试验中物体折射率为1.5;

图8为单次折射与本发明所述双面折射的效果比较图,其中最左边是环境贴图纹理,a,c,e是单次折射的效果,b,d,f是本发明所述双面折射的效果;

图9上面一排是采用了本发明所述的双面折射的方法所模拟的可变形物体的效果,下面一排是单次折射方法处理此物体的结果,环境贴图纹理和图8左图一样;

图10为采用两种折射计算的效果对比,左图显示的是立方体环境贴图,右图是单次折射与本文所述方法的效果对比,a,c是只通过一次折射计算的效果。b,d是用本发明所述技术得到的结果,该图试验中透明物体的折射率为2.4。

具体实施方式

常用的单面折射绘制技术虽然绘制速度快、实现简单,但存在着绘制效果与物理规律相悖,绘制效果不够真实的缺陷,本发明基于GPU的双面折射技术根据光的物理传播规律,给出了在图像空间的二次折射的模拟方法,实现了动态透明场景更为逼真的实时绘制。同时,本发明也可很好地实现了对动态场景中全反射现象的模拟计算。当处理刚性物体时,在进入绘制循环之前,首先将物体的法线映射到立方图纹理(Cube Map)上。对于可变形的物体,在绘制每一帧前,都要将物体的法线映射到立方图纹理上。这样就可以在片元着色器(fragmentshader)里通过折半查找的方法,找到光线发生第二次折射时的入射点。用第二次折射光的方向访问环境图纹理,然后将取得的纹元颜色作为折射光线起点所对应的像素颜色绘制到屏幕上。本发明所述方法可以充分利用GPU的性能,在基于消费级PC平台绘制较为复杂的场景时,能够满足帧率实时性要求,同时可得到十分逼真的光折射绘制效果。

下面首先介绍光折射中的一些重要的物理定理。在本发明中主要用到了施奈尔定理和菲涅耳定理。施奈尔定理定义了光线从一种介质传播到另一种介质时,入射角和折射角的关系。在图2当中,ni是介质i的折射率,nt是介质t的折射率,当入射光线以θi的入射角从介质i穿过介质t时,折射角θt是可以通过施奈尔定理确定的。公式如下:

ni*sinθi=nt*sinθt                      (1)

如图2所示,只有一部分入射光线会发生折射,而其他一部分光当到达透明体表面时将发生反射。菲涅耳定理可以用以下公式描述:

R(θ)=(R(θ))/2+(R(θ))/2              (2)

R(θ)是偏振光线垂直入射面的反射系数,R(θ)是偏振光线平行入射面的反射系数,因为计算R(θ)的消耗太大,已知估算的数值与精确数值差距很小,因此通常用下面的公式进行估算。

R(θ)≈Ra(θ)=R(O)+(1-R(0))(1-cosθ)5      (3)

R(θ)=sin2(θ-θt)/sin2(θ+θt)             (4)

R(θ)=tan2(θ-θt)/tan2(θ+θt)             (5)

如图1所示,本发明的具体实施步骤如下:

(1)以透明物体的中心作为视点进行绘制,将除透明物体本身外的周围其他物体的表面颜色信息和深度信息绘制到一张立方图纹理上。此立方图纹理的作用是:当光线最终穿出透明物时,跟据光的方向和此立方图纹理中的深度信息找到所对应的颜色值,将此颜色值作为光线与透明物体相交点的颜色信息。

(2)以透明物体的中心作为视点进行绘制,将透明物体的外表面法线及透明物体表面顶点到透明物体中心的距离绘制到一张立方图纹理。

在创建法线立方图纹理时,首先将立方图纹理的表面分辨率设置为256*256,然后将摄像机移动到物体的中心,以90度的视野角,使得视线分别沿X的正半轴,X的负半轴,Y的正半轴,Y的负半轴,Z的正半轴,Z的负半轴来投射物体表面法线,分别得到六张法线纹理图,最终建立法线立方图纹理,如图3,其中O点是透明物体的中心点,同时也是摄像机所在的位置,P点是沿Y的正半轴投射到立方图纹理上,保存了单位化的法线和OV距离的像素点。

最后利用GPU计算物体上每个点到其中心点的距离。在GPU Shader编程中,本发明将帧缓存中原有的RGB三个通道转而保存物体每个点的三个法线分量XYZ,并且将第四个有关Alpha的通道转而保存物体上的点到中心点的距离。因为帧缓存中四个通道的值都是非负的,而经过单位化的法线方向的三个分量值的范围是[-1,1],所以在填充帧缓存之前,需要利用下面的公式将三个分量的数值范围从[-1,1]映射到[0,1]。

Nc=(Nn+float3(1.0,1.0,1.0))/2       (6)

Nc为最后所得的向量,Nn为单位化的物体每个点的法线向量,float3(1.0,1.0,1.0)是一个常向量。对于距离这个分量,需将它除以一个很大的常量,使得它也保持在[0,1]之内。

对于一个刚性的物体来说,在进入渲染循环之前都将物体每个点的法线和距中心点的距离映射到立方图纹理上,这是因为刚体的每个点的法线和其距中心点的距离在物体的坐标系中都是固定不变的。而可变形物体的形状可以在任何时候发生变化。所以在处理可变形物体时,在每一帧渲染前都要计算生成立方图纹理,这样的代价将会稍高一点。幸运的是第4代GPU的可编程特性较前一代有了本质的改进,新一代GPU引入了几何着色器,使之可以在渲染管线中生成新的附加图元。在Direct10中,通过应用两个新特性(渲染目标数组和图形shader),可以使得立方图纹理的6个面一起计算出来,并且Nvidia GeForce8800的OpenGL扩展技术也可应用到一次渲染而得到立方图纹理6个面。图4显示的是两张保存了透明物各点法线信息及距中心点距离信息的立方图纹理。

(3)光线射入透明物体时,在透明物表面将发生第一次折射,计算该次折射光线方向,并将步骤(2)的立方图纹理作为输入,在图形硬件上通过折半查找的方式近似计算光线下一次与透明物表面相交点的位置。

在光栅化之后会立刻获得每个片段的相关信息,如图5所示,D1为入射光线,前表面的入射点为P1,并且入射点的P1的法线方向为N1。有了这些信息,发生第一次折射的光线方向T1根据施奈尔定理很容易的得出。折射光线可以用下面的参数方程表示:P=P1+tT1,所以要想得到第2次折射时的入射点P2,只要求出参数t即可。用折半查找的方法来求出点P2。首先找到一个参数a,经参数方程P1’=P1+aT1,得出P1’点在物体之内,再找到另一个参数b,P2’=P1+bT1,使得P2’点在物体之外。之后进入折半查找循环,先找到P1’与P2’中点PM’,Pm=P1+T1*(a+b)/2.然后求出O到的距离,与第三部分求出的立方体贴图的第4个通道保存的距离值做比较,循环利用折半查找,当O到的距离,与前述得出的立方体贴图的第4个通道保存的距离值相等时,即为二次折射光线的出射点。a,b两参数通过下面的判断循环调整:

a=(a+b)/2,                                           (7)

ifTextureCube(normalcube,Normlize(Pm-O))a*cst>Distance(Pm,O),

b=(a+b)/2,

ifTextureCube(normalcube,Normlize(Pm-O))a*cst<Distance(Pm,O)

常量cst将作为O点到P点距离的除数,从而立方体贴图中的Alpha通道里储存的值将被映射到[0,1]的范围。折半查找循环直到下面的条件得到满足才会终止。TextureCube(normalcube,Normlize(Pm-O))a*cst-Distance(Pm,O)<ϵ,其中ε是一个无穷小的数值。如图5,找到P2的邻近点P,这样可以利用P的法线向量来近似求出P2的法线向量,计算公式如下:

N2Np=Normalize(2*TextureCube(normalcube,Normlize(Pm-O))·rgh-float3(1,1,1))---(8)

最后P1点的颜色值可以通过后表面折射光线所对应的环境纹理以及P1点处反射光线所对应的环境纹理融合得出,融合方法可根据第2部分所述的菲涅耳定理得出。

Cp1=Lerp(TextureCube(environmentcube,Refract(N2,N1)),

TextureCube(environmentcube,Rp1),---(9)

fresnelcof)

(4)根据透明物体本身的折射率,判断光线是否在步骤(3)所求得的光线与透明物的交点处发生了全反射现象,若发生全反射则返回步骤(3),若没有发生全发射,则在此交点发生第2次折射,光线穿出透明物体,继续执行步骤(5)。

当光线从较密的介质中进入较疏的介质时,会发生折射角比入射角大的现象。所以随着入射角的增大折射角有可能大于90度,这种现象叫做全反射。当全反射发生时,光线会在较密介质中多次反射后才会进入较疏的介质中。

本发明所述的方法通过片元着色器额外利用一小部分资源,就可以很容易的处理双面折射中的全反射问题。假设找到近似的后表面光线的出射点P,以及第2次折射的入射点法线方向T2如图6,可以通过以下公式来判断此处是否发生全反射。

ftif=TRUE,ifDotMultiply(T2,N2)>0FALSE,ifDotMultiply(T2,N2)<=0---(10)

如果发生了全反射,可将参数方程从P=P1+tT1替换成P’=P1+tT2,之后将递归调用步骤(3)中所述的折半查找方法,直到全反射现象消失时。如图6,可以利用T2和N3来计算出最终折射光线的方向T3。

(5)将步骤(1)中得到的立方图纹理作为输入,沿步骤(4)中计算出的最终折射光线方向T3,并沿这一方向找到第一个与折射光线相交的物体的表面位置的光照颜色作为该条折射光线所对应的屏幕像素颜色。

本发明的试验结果:使用OpenGL的Cg着色语言在显存为256M的NVIDIA7800的显卡上进行了对本发明所述方法的测试。本发明需要将物体每个点的法线方向保存到立方图纹理中。刚性立方图纹理只需要在进入绘制循环前构建一次,而可变形物体的立方图纹理却需要在每一帧的渲染前都要重新生成。在内存为512M,CPU为3.0GHz的Pentium电脑上图8和图10是本发明所述方法与单次折射方法的效果比较,很显然本发明所述方法所绘制的结果更加真实,单次折射看起来更加的透明,而且后表面的弯曲也很剧烈(如图10中的a,c,图7中的e,g,图8中的a,c,e)。图7中的b,c,d分别为Wyman的方法,光线追踪方法,和本发明所述方法的效果对比。图9为利用本发明所述的双面折射对可变形物体的模拟。b,d,f,h,j是对变形物体Biggy在第0,15,30,45,60帧所得的折射效果截图。最后获得了图像为1280*1024大小时的渲染帧率,如表1。对于刚性物体,即使其形状很复杂,本发明的渲染也达到了很高的帧率。尽管在此测试环境下对于复杂的可变形物体的渲染帧率并不太高,但是NV8系显卡新特性(可以一遍计算得出立方图纹理)可以弥补每帧计算立方图纹理的时间消耗。

表1 帧率对比

 

多变形个数单次折射本发明方法球体20480951366茶壶25600672186Venus40000471168Buddha6400028181Bigguy290096524

本发明未详细阐述的部分属本领域技术人员公知技术。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号