[发明专利]一种面向资源受限移动设备的实时软阴影生成方法及装置有效
申请号: | 201811174911.0 | 申请日: | 2018-10-09 |
公开(公告)号: | CN109360263B | 公开(公告)日: | 2019-07-19 |
发明(设计)人: | 赵汉理;陈伟斌;胡明晓 | 申请(专利权)人: | 温州大学 |
主分类号: | G06T15/60 | 分类号: | G06T15/60;G06T17/00 |
代理公司: | 杭州昱呈专利代理事务所(普通合伙) 33303 | 代理人: | 吴建锋 |
地址: | 325000 浙江省温州市瓯海*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种面向资源受限移动设备的实时软阴影生成方法及装置,包括在移动设备中配置三维场景及其所需要的各项输入信息并创建阴影图和深度纹理;采用第一GPU可编程绘制流水线绘制三维场景,将编码后的离光源最近的三维模型表面的深度信息保存到阴影图中;采用第二GPU可编程绘制流水线对其进行高斯模糊滤波操作,将编码后的模糊深度信息更新到阴影图中,得到模糊后的阴影图;采用第三GPU可编程绘制流水线绘制三维场景,将模糊后的阴影图中所包含的软阴影信息绘制到显示窗口,得到所求的第三GPU可编程绘制流水线的GPU像素着色器中的软阴影结果。实施本发明,不仅能在资源受限移动设备上绘制出逼真的三维场景软阴影效果,还提高了实时生成效率。 | ||
搜索关键词: | 绘制 阴影图 三维场景 移动设备 可编程 流水线 资源受限 模糊 深度信息 阴影生成 像素着色器 滤波操作 三维模型 深度纹理 实时生成 输入信息 显示窗口 阴影效果 阴影信息 高斯 光源 阴影 保存 更新 配置 创建 | ||
【主权项】:
1.一种面向资源受限移动设备的实时软阴影生成方法,其特征在于,所述方法包括:步骤S1、在移动设备中配置三维场景及其所需要的各项输入信息,并创建阴影图和深度纹理,其中,所述阴影图为包含RGBA四个8位浮点数颜色分量的二维阴影图,所述深度纹理为与该阴影图分辨率相同的二维深度纹理;步骤S2、对步骤S1创建的阴影图和深度纹理进行像素初始化;步骤S3、采用第一GPU可编程绘制流水线绘制三维场景中的所有三维模型,将编码后的离光源最近的三维模型表面的深度信息保存到阴影图中;步骤S4、根据步骤S3获取的深度信息,采用第二GPU可编程绘制流水线对深度信息进行高斯模糊滤波操作,将编码后的模糊深度信息更新到阴影图中,得到模糊后的阴影图;步骤S5、采用第三GPU可编程绘制流水线绘制三维场景中的所有三维模型,将模糊后的阴影图中所包含的软阴影信息绘制到显示窗口,使绘制的三维场景呈现逼真的软阴影效果;在所述步骤S1中,输入信息至少包括三维场景的观察点的位置和观察方向、显示窗口的颜色缓冲和深度缓冲、显示窗口的分辨率、光源的位置和光源的光照方向、光源视域深度最小值和光源视域深度最大值、三维场景中所有三维模型的摆放位置以及阴影图的分辨率;所述步骤S3进一步包括以下步骤:步骤S31、以阴影图为颜色绘制缓冲,以深度纹理为深度绘制缓冲;以步骤S1给定的光源的位置作为第一GPU绘制流水线的摄像机观察点,以步骤S1给定的光源的光照方向为摄像机观察方向确定视域变换矩阵,三维场景中的每个三维模型根据步骤S1给定的摆放位置确定各自的世界坐标变换矩阵;步骤S32、在第一GPU可编程绘制流水线的GPU顶点着色器中,对三维模型的当前顶点坐标p1进行处理并获得视域坐标系下的四维齐次坐标p3作为GPU顶点着色器顶点坐标的输出;步骤S33、在第一GPU可编程绘制流水线的GPU像素着色器中,对阴影图的像素颜色进行处理以获得编码后的四维深度信息d2作为GPU像素着色器的颜色输出;其中,对阴影图的像素颜色进行处理进一步包括以下步骤:根据步骤S32中所述的视域坐标系下的四维齐次坐标p3,将像素深度信息p3.w归一化到0~1之间,获得归一化后的深度信息d1;将归一化后的深度信息d1进行编码转换获得编码后的四维深度信息d2,编码转换计算公式为:x1=fraction(d1);x2=fraction(d1*255);x3=fraction(d1*255*255);x4=fraction(d1*255*255*255);d2.R=x1‑x2/255;d2.G=x2‑x3/255;d2.B=x3‑x4/255;d2.A=x4;式中,函数fraction表示去掉浮点数的整数部分后获得小数部分的数值,d2为四维颜色向量,d2.R、d2.G、d2.B、d2.A分别表示d2的R(红)、G(绿)、B(蓝)、A(透明度)四个颜色分量的颜色值;步骤S32进一步包括以下步骤:步骤S321:计算p1的初始四维齐次坐标p2:p2.x=p1.x;p2.y=p1.y;p2.z=p1.z;p2.w=1;其中,p1.x、p1.y、p1.z分别表示p1的x轴、y轴、z轴的坐标值;p2.x、p2.y、p2.z、p2.w分别表示p2的x轴、y轴、z轴、w轴的坐标值;步骤S322:根据步骤S31的三维模型的世界坐标变换矩阵和视域变换矩阵,对初始四维齐次坐标p2进行坐标变换,获得视域坐标系下的四维齐次坐标p3,坐标变换计算公式为:p3=V*W*p2,其中V为视域变换矩阵,W为世界坐标变换矩阵;步骤S33中将像素深度信息进行归一化的步骤进一步包括:根据步骤S1给定的光源视域深度最小值d_min和光源视域深度最大值d_max、步骤S32中所计算的视域坐标系下的四维齐次坐标p3,将像素深度信息p3.w归一化到0~1之间获得归一化后的深度信息d1,计算公式为:d1=(p3.w‑d_min)/(d_max‑d_min);所述步骤S4进一步包括以下步骤:步骤S41、创建一张包含RGBA四个8位浮点数颜色分量的二维临时纹理,临时纹理分辨率大小与阴影图相同;并以临时纹理为颜色绘制缓冲,以阴影图作为输入纹理;步骤S42、在第二GPU可编程绘制流水线的GPU顶点着色器中,输出阴影图的四个顶点坐标以及同时输出其纹理坐标;步骤S43、在第二GPU可编程绘制流水线的GPU像素着色器中,根据当前像素的纹理坐标,从阴影图中读取当前像素周围邻域的编码后的四维深度信息d2并对其进行解码转换得到归一化后的深度信息d1,其中解码转换计算公式为:d1=d2.R+d2.G/255+d2.B/(255*255)+d2.A/(255*255*255);对当前像素周围邻域的归一化后的深度信息执行高斯模糊操作得到当前像素的模糊深度信息,然后对模糊深度信息再次采用步骤S33中所述的编码转换,得到编码后的模糊深度信息d3作为GPU像素着色器的颜色输出;步骤S44、将步骤S43所计算的临时纹理中的编码后的模糊深度信息更新到阴影图中,得到模糊后的阴影图;所述步骤S5进一步包括以下步骤:步骤S51、以步骤S1给定的显示窗口的颜色缓冲为颜色绘制缓冲,以显示窗口的深度缓冲为深度绘制缓冲,以模糊后的阴影图作为输入纹理,以三维场景的观察点作为第三GPU绘制流水线的摄像机观察点,以三维场景的观察方向为摄像机观察方向确定观察点视域变换矩阵,三维场景中的每个三维模型根据步骤S1给定的摆放位置确定各自的世界坐标变换矩阵,将绘制窗口大小设置为显示窗口的分辨率大小;步骤S52、在第三GPU可编程绘制流水线的GPU顶点着色器中,根据步骤S51中所述的摄像机观察点、观察点视域变换矩阵、世界坐标变换矩阵,获得三维场景的观察点视域坐标系下的四维齐次坐标,作为GPU顶点着色器的顶点坐标输出;根据步骤S1给定的光源的位置和光照方向,根据步骤S32的计算方法计算光源视域坐标系下的四维齐次坐标,作为GPU顶点着色器的阴影坐标输出;步骤S53、在第三GPU可编程绘制流水线的GPU像素着色器中,将步骤S52中所述的光源视域坐标系下的四维齐次坐标进行归一化操作获得当前像素在光源视域坐标系下的归一化后的深度信息d;从模糊后的阴影图中分别读取当前像素、水平方向右方邻居像素、垂直方向下方邻居像素的编码后的模糊深度信息,根据步骤S43所述的解码转换方法获得这3个像素的解码后的模糊深度信息分别为ref、rx、ry;计算出当前像素的阴影值s作为第三GPU可编程绘制流水线的GPU像素着色器中的软阴影,计算公式为:var=max(0.000001,0.25*((rx‑ref)*(rx‑ref)+(ry‑ref)*(ry‑ref)));s=max(0,min(1,var/(var+(d‑ref)*(d‑ref))));式中,max和min分别表示取最大值和取最小值的函数。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于温州大学,未经温州大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201811174911.0/,转载请声明来源钻瓜专利网。