一种三维虚拟现实引擎对目标渲染清晰化的方法

文档序号:6481123阅读:193来源:国知局
专利名称:一种三维虚拟现实引擎对目标渲染清晰化的方法
技术领域
本发明涉及一种渲染方法,特别是一种三维虚拟现实引擎对目标渲染清晰化的方法。

背景技术
在虚拟现实引擎处理边缘清晰的某些特定目标的时候,现有的标准的纹理化方法不能很好的利用清晰特征来处理图像,例如在渲染交通标志、路标、广告牌或者标签上的文字时,都会随着观察者靠近而逐渐模糊、失真。
标准纹理的模糊度在于位图格式图像的性质,在一定放大比例下,不管纹理图像的分辨率有多高,它的像素(即纹理像素)是可分辨的,现有的图形硬件中普遍使用的双线性插值法可以避免这种情况下的像素阶跃,但是,这种方法也有存在一个严重的缺陷,那就是它总是消除那些原本应该很清晰的边,比如文字符号的轮廓线,因此不能很好的使得图像轮廓在各种视角下保持清晰。
如果纹理仅仅包含纯黑和纯白两种颜色,现有的处理方法是使用像素着色器对双线性插值纹理进行阈值划分,也就是,如果取得的灰度级别高于中度灰度,则将其转变为全黑色反之则转变为全白色。因此,所有的灰色像素都会消除,而黑白区域之间将会建立明显的分界线。但是此方法生成的轮廓线不仅失真,呈现锯齿,并且从一定距离观看,演变成一块盐、胡椒状的奇怪云块。
此外,现有技术是利用同等效率的像素着色器来构建三次曲线所界定的形状,这种方法依赖于沿着边界曲线放置三角形,这对于复杂的字体而言,可能需要成百上千的三角形。这对于当今的用户级显卡而言不是很好的选择,因为这些显卡对纹理的支持明显优于几何。


发明内容
本发明要解决的问题是提供一种三维虚拟现实引擎对目标渲染清晰化的方法,该方法采用优化的反走样阈值划分纹理,使得边缘渲染更加清晰 为了解决上述技术问题,本发明的三维虚拟现实引擎对目标渲染清晰化的方法,包括以下具体步骤 第一步,对目标纹理像素进行软阈值划分,像素分为三个区域,分别为黑色像素区域,灰色像素区域和白色像素区域; 第二步,通过高级着色语言中的二维向量,计算纹理像素与屏幕之间的空间距离,然后根据空间距离的不同,由像素着色器实现对像素颜色的调整; 第三步,对灰色像素区域的像素进行Mip-Mapping转换,将中等灰度级别的像素区分出来。
本发明的三维虚拟现实引擎对目标渲染清晰化的方法,还包括一个原始纹理轮廓线再生优化处理步骤,即对较高级别的Mip-Mapping实行普通的box-filtering填充,对于低级别的Mip-Mapping,采用错误度量法进行优化。
本发明取得的有益效果是 (1)对目标纹理像素进行软阈值划分,因而使得边缘渲染更加清晰; (2)执行效率高,资源占用小,可以生成与矢量图形相媲美的照片质量级的特效。



图1是本发明的流程图
具体实施例方式 如图1所示,本发明的三维虚拟现实引擎对目标渲染清晰化的方法,包括以下具体步骤 第一步,对目标纹理像素进行软阈值划分,像素分为三个区域,分别为黑色像素区域,灰色像素区域和白色像素区域; 现有的阈值划分方法,由于不具备能够柔化黑白像素梯度的灰度像素,阈值划分马上导致锯齿现象。对付这种问题的一种简单的方法就是放弃纯阈值划分,但是会更加增大对比度。这种情况下,通过双线性插值得到的灰度值t不会进行插值划分 float c=0.0; if(t>0.5) C=1.0; 而是提高对比度 float c=clamp(0.5+a*(t-0.5),0.0,1.0); 其中a控制放大数量数,量1重新产生输入;随着a趋向无穷,强对比度逐渐淡化为阈值划分。通常clamp指令会被忽略,因为图形硬件将会自己钳制颜色。
a的数值控制了边的清晰度。目的是以一种消除锯齿的方式来设置a,但始终保持高清晰度。因此,无论什么比例,黑色与白色之间的转换总是在屏幕空间有相同的宽度。在上述方法的试验中,1/3像素的宽度最后在锯齿度和清晰度之间的做出了最优的权衡。
黑白变化开始于一个纹理像素过渡到另一个时,如果视点靠近纹理,纹理就被放大。这两个纹理像素可能被映射到其所位于的像素上,比如10个分开的屏幕空间像素。将a设置为1将会导致扩展到10个像素上的黑白转变。不过,我们所希望的是4又5/6个像素是黑色,1/3个像素是转变区域,4又5/6个像素是白色。因此,a必须设置为10*3∶4又5/6个像素后,t=29/60,灰度值在黑色那边开始增长。通常,这意味着将a设置为3*s,其中s是像素的屏幕空间大小。
第二步,通过高级着色语言中的二维向量,计算纹理像素与屏幕之间的空间距离,然后根据空间距离的不同,由像素着色器实现对像素颜色的调整。
为了正确地调节颜色,需要在运行时决定相邻纹理像素的屏幕空间距离。像素着色器提供了特殊的辅助指令。在HLSL(High Level Shading Language,高级着色语言)中,这些指令叫做ddx和ddy,用于为相关的参数计算分别关于屏幕空间x和y的导数。为了在设置中使用这些指令,可以用额外的纹理坐标来装备对象。这些纹理坐标不是位于1*1的范围内,而是宽*高。除此之外,还可以用标准纹理坐标uv加一次额外的二维向量乘法,来形成uv*float2(宽,高)。
二维向量ddx和ddy横跨了某个屏幕空间像素在纹理空间的椭圆形轨迹。在斜视图或者变形纹理坐标中,轨迹可以变成强力拉长的椭圆形;该椭圆沿主坐标轴方向比次坐标轴方向横跨更多的纹理像素。
为了计算放大系数a,需要每个纹理像素的屏幕像素数目,也就是必须知道每个纹理像素在屏幕空间的轨迹。出于方便,我们称ddx的分量为e,f;ddy的分量为g,h。因此,将x-y屏幕坐标空间的本地变化转换为量化纹理坐标空间的变化的矩阵是 纹理像素可以近似为uvScaled纹理空间内的半径为1/2的圆盘,而其在屏幕空间内的轨迹可以近似为椭圆盘。该圆盘由所有偏离中心(Δx,Δy)的点组成,也就是 可以写作 该特征值表示为 沿着x-y屏幕空间内的两个主要坐标轴之一的某个向量将会与相应的λ相乘。从椭圆的中心岛边界扩展出一条主要坐标轴,而假设v是沿该轴的向量,其长度|v|等于椭圆的主板经或次半径。根据等式1得出 因此 因此,椭圆的主直径和次直径则是|v|的两倍,分别是


等式2中的平方根项在第一个解中以加号出现,在第二个解中则以减号出现,因此,为了给出纹理像素大小的简单的近似公式,我们一并忽略了上述平方根项 上述等式可以快速地通过4维向量计算求得,因此我们如下设置 float s=1.4/length(float4(dddx(uvScaled),ddy(uvScaled))); 不过,如果因为偏爱清晰度而使用算数平均或者主直径的话,会招致长时间地计算等式2中的平方根项。
第三步,对灰色像素区域的像素进行Mip-Mapping转换,将中等灰度级别的像素区出来。
如果离开一定距离观察纹理,其将会转变或大量的灰色像素,就像试用标准mip-mapping一样。如果坚持基于可控对比度增强的主要思想,其将由如下方法实现 foat c=clamp(0.5+a*(t-0.5),0.0,1.0); 通过mip-mapped纹理,可以取得t,而a则取1.0(屏幕空间的纹理像素远比像素本身小时),从而容易地求出上述等式的值。
给定前面计算得到的s,可以简单地设置 a=max(1.0,3.0*s); 因此,纹理像素大小缩小到1/3像素水平之下时,像素着色器的结果等价于标准mip-map。图5显示了s和a之间的依赖性。
综上所述(加上一些优化手段后),像素着色器如下 half4 t=tex2D(mySampler,IN.uv); float2 ef=ddx(IN.uvScaled); float2 gh=ddy(IN.uvScaled); half sInv=length(float4(ef,gh); half a=max(1.0,(3*1.4)/sInv); half c=0.5+a*(t.r-0.5); OUT.color=half4(c,c,c,1.0); return OUT; 上述程序编译成11条ps_2_x版本像素着色器的汇编指令。为了在放大率的阈值划分和缩小率的标准mip-mapping之间实现一个干净的转换,控制放大率是远远不够的。在转换范围内,a等价于1.0,因此纹理中的中等灰度级别的像素变化不大。这种效果导致靠近黑白分界处,出现令人讨厌的灰色斑点。
如果mip-mapping的最优级别不包含中等灰度级别,上述问题可以迎刃而解。实验表明,标准8位数格式可以禁止掉256个级别的中间32个(即
区间中的[112~143]子区间)。
下面小节中要讨论的填充mip-map级别0的优化过程,正是考虑了这一点。
第四步,对原始纹理轮廓线再生优化处理,即对较高级别的Mip-Mapping实行普通的box-filtering填充,对于低级别的Mip-Mapping,采用错误度量法进行优化。
纹理通常都通过矢量图形生成,例如通过图像软件的位图导出功能。但是采用阈值划分技术的话,这些位图会导致轮廓线上的凹凸不平。可以将产生不同的纹理图像这一特性作为自己的优势。
我们期望由阈值划分双线性插值纹理所形成的形状由不规则的连续的线界定线性操作应该产生什么?然而,这对于三角形网格而言是成立的;对于标准纹理贴图中使用的方形网格而言是不成立的。
如果a、b、c、分别是三角形的内角,双线性插值导致 (1-u-v)a+ub+vc, 其中u、v、(1-u-v)是三角形的重心坐标。然而,如果a、b、c、d是正方形的内角,双线性插值导致 (1-u)(1-v)a+u(1-v)b+uvc+(1-u)vd, 可以整理成 a+u(-a+b)+v(-a+d)+uv(a-b+c-d). 注意公式中出现的乘式uv,其会将公式转变成非线性表达式。
阈值划分纹理的轮廓线经过点(u,v),此点处上述表达式的值等于1/2。对于这个曲线,我们可以为v找到关于u的有理函数关系 如果上述等式的分母不为0 我们可以解压出关于几何的精确数据。假设轮廓线与b值纹理像素和a值纹理像素之间的边相交。这意味着要么b小于1/2,a大于1/2;或者反之亦然。轮廓线与边相交于点(u,v), 其中 通过等式3对u求导数,可以计算出轮廓线与边相交点的角度。导函数值等于曲线与水平方向交角的正切函数。u=1时的导函数值 与其他边相交点的等式与上述类似。
由于轮廓线是有理曲线,因此不容易控制。我们为任务提供了两组参数;第一组,轮廓线与纹理像素网格边的交点位置;第二组,交点处的轮廓线曲线方向。两种类型的参数扣可以很容易地按照前面描述的方法计算出来。同样的数据从原始矢量图形中读取出来作为比较的依据。为此,我们可以对高分辨率位图版本的原始图形采用标准的图像处理技术。
目的是以这样一种方式计算纹理,以便原始图像的位置和角度数据可以再阈值划分后很好地再生。由于轮廓线的细节信息只对放大视图有意义,因此,较高(即较粗糙)的mip-map级别可以照常用box filtering填充。只有最优级别(即mip-map级别0)会发生改变。
结果是只有在异常情况下,无法以这种方式构建纹理,以至于实现了对所有位置和角度的约束。如果轮廓线与纹理像素网格的n条内边相交,就会产生n个位置与n各角度条件。相邻纹理像素的灰度值可以有效地进行调整。如果轮廓线没有很急的转弯,纹理像素的数目是2n;否则,这个数目就有点低了。由于当所有的灰度值定量为1/2左右时,阈值划分图像不会发生变化,因此,我们会损失更多的自由度。
这些图示表明约束条件通常都是不会被完全遵循的。我们需要适当地使用一种错误度量法来指导优化过程。这种优化过程速度非常快,因为它仅仅影响与轮廓线相邻的纹理像素。绝大部分的纹理像素可以保持纯黑色或者纯白色。
更为显著的是,优化导致更尖锐的内角,它会自动地用抵衡纹理像素来处理内角。
权利要求
1.一种电动机扒轮器,其特征在于包括底卡盘(2)、与底卡盘(2)平行放置的顶卡盘(4)、垂直于底卡盘(2)和顶卡盘(4)且用于固定连接底卡盘(2)和顶卡盘(4)的螺杆(3)、丝杠(6)和固定在丝杠(6)上的把手(7),所述底卡盘(2)上设有一个卡槽(10),所述顶卡盘(4)上固定有一个调节螺母(8),所述丝杠(6)插入于所述调节螺母(8)中,所述螺杆(3)上设有紧固用的螺母(5)。
2.根据权利要求1所述的电动机扒轮器,其特征在于所述底卡盘(2)和顶卡盘(4)均为三角形,每一个角上均设有一个螺杆孔(9),所述螺杆(3)为三根,所述紧固用的螺母(5)为六个。
全文摘要
本发明公开了一种三维虚拟现实引擎对目标渲染清晰化的方法,主要包括以下具体步骤对目标纹理像素进行软阈值划分,像素分为三个区域,分别为黑色像素区域,灰色像素区域和白色像素区域;通过高级着色语言中的二维向量,计算纹理像素与屏幕之间的空间距离,然后根据空间距离的不同,由像素着色器实现对像素颜色的调整;对灰色像素区域的像素进行Mip-Mapping转换,将中等灰度级别的像素区分出来。本发明取得的有益效果是(1)对目标纹理像素进行软阈值划分,因而使得边缘渲染更加清晰;(2)执行效率高,资源占用小,可以生成与矢量图形相媲美的照片质量级的特效。
文档编号G06T15/10GK101567091SQ20091001540
公开日2009年10月28日 申请日期2009年5月18日 优先权日2009年5月18日
发明者科 彭, 强 石, 刘乐天, 刘文春 申请人:青岛高歌网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1