一种基于IBL的兼容处理方法与流程

文档序号:16120864发布日期:2018-11-30 23:11阅读:161来源:国知局

本发明涉及计算机图形技术领域,更具体地说,涉及一种三维渲染中ibl在硬件不支持某种特性时的兼容处理方法。



背景技术:

(ibl)是一种3d渲染技术,它通过捕捉现实世界中的光影信息,并把这些光影信息保存在图片上,通常这个图片是一个由6个2维图片包围成的立方体,这个图片中通常储存着高动态的光影信息。几乎所有的现代渲染引擎都提供了基于图像的照明,在ibl技术中,当在一个视角来观察一个物体时,所渲染物体的粗糙度决定它所需要反射的入射光线的锥的范围,例如在一个绝对光滑的物体上所反射的入射光线应该是一条直线(入射锥趋近一条直线),当一个绝对粗糙的物体时,所反射的入射光线锥就会为一个半球椎体。所以越粗糙的物体需要采样的入射锥范围越大。为了提高运算效率,通常会根据粗糙度生成好很多等级的预处理立方体图,这样在实时运算过程中就不需要做锥采样(大量运算开销),但是粗糙度是可以无限细分的,通常为了速度与数据上的平衡,只对粗糙度分为6个等级来做预处理,并把这些图片以不同的mipmap等级存储在一个立方体纹理中,当一个粗糙度处于2个相邻等级之间时,gpu可以使用texturecubelod的函数来在两个相邻的mipmap数据中进行线性差值,来取得当前粗糙度所对应的插之后近似的数据。

但不是每个gpu都支持这个texturecubelod扩展,或者是由于平台的原因导致不支持此扩展。那么对于任意粗糙度如何在不支持此扩展的情况下来实现ibl技术就成了一个关键问题。



技术实现要素:

为了解决上述问题,本发明提供一种基于ibl的兼容处理方法,根据待处理物体的粗糙程度生成若干预处理立方体图,将粗糙度分为6个等级来做预处理,所述基于ibl的兼容处理方法包括如下步骤:

s1、根据6个等级的粗糙程度生成6个等级的立方体图数据;

s2、将6个等级的立方体图数据以mipmaplevel为0的方式分别存放在6个立方体纹理中;

s3、计算粗糙度数值r(0到1之间)的ibl反射信息,依次对1至6号立方体纹理进行采样,采样值分别记为c0、c1、c2、c3、c4、c5,将该立方体纹理采样值存入到一个6个长度的数组中c数组;

s4、将r值乘以5得到r5,用r5进行取整运算得到r起始,用r起始加1得到r结束;

s5、用步骤s4中的r起始作为下标取得c起始=c数组【r起始】,用步骤s4中的r结束作为下标取得c结束=c数组【r结束】,计算差值比例值alpha=(r5-r起始)/(r结束-r起始);

s6、用步骤s5中的差值比例alpha计算插值后的最终数据c,c=c起始*(1-alpha)+c结束*alpha;

s7、重复步骤s3至s6,计算每一粗糙度数据的ibl反射信息,得到所有粗糙度数据对应的插值后的最终数据。

本发明的基于ibl的兼容处理方法能够在gpu不支持texturecubelod扩展的情况下来实现ibl技术的处理,极大的提高了3d图形渲染效果和通用性。

具体实施方式

为了更好的理解本发明,下面详细介绍本发明。

一种基于ibl的兼容处理方法,根据待处理物体的粗糙程度生成若干预处理立方体图,将粗糙度分为6个等级来做预处理,所述基于ibl的兼容处理方法包括如下步骤:

s1、根据6个等级的粗糙程度生成6个等级的立方体图数据;

s2、将6个等级的立方体图数据以mipmaplevel为0的方式分别存放在6个立方体纹理中;

s3、计算粗糙度数值r(0到1之间)的ibl反射信息,依次对1至6号立方体纹理进行采样,采样值分别记为c0、c1、c2、c3、c4、c5,将该立方体纹理采样值存入到一个6个长度的数组中c数组;

s4、将r值乘以5得到r5,用r5进行取整运算得到r起始,用r起始加1得到r结束;

s5、用步骤s4中的r起始作为下标取得c起始=c数组【r起始】,用步骤s4中的r结束作为下标取得c结束=c数组【r结束】,计算差值比例值alpha=(r5-r起始)/(r结束-r起始);

s6、用步骤s5中的差值比例alpha计算插值后的最终数据c,c=c起始*(1-alpha)+c结束*alpha;

s7、重复步骤s3至s6,计算每一粗糙度数据的ibl反射信息,得到所有粗糙度数据对应的插值后的最终数据。

本发明的基于ibl的兼容处理方法能够在gpu不支持texturecubelod扩展的情况下来实现ibl技术的处理,极大的提高了3d图形渲染效果和通用性。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。



技术特征:

技术总结
本发明公开了一种基于IBL的兼容处理方法,根据6个等级的粗糙程度生成6个等级的立方体图数据;将立方体图数据存放在6个立方体纹理中;计算粗糙度数值R(0到1之间)的IBL反射信息,依次对1至6号立方体纹理进行采样,采样值分别记为C0、C1、C2、C3、C4、C5,并存入到一个6个长度的数组中C数组;将R值乘以5得到R5,用R5进行取整运算得到R起始,用R起始加1得到R结束;用R起始作为下标取得C起始=C数组【R起始】,用R结束作为下标取得C结束=C数组【R结束】,计算差值比例值alpha=(R5‑R起始)/(R结束‑R起始);插值后的最终数据C=C起始*(1‑alpha)+C结束*alpha。本发明的方法能够在GPU不支持texturecubelod扩展的情况下来实现IBL技术的处理,极大的提高了3D图形渲染效果和通用性。

技术研发人员:程正
受保护的技术使用者:成都明镜视觉科技有限公司
技术研发日:2018.04.30
技术公布日:2018.11.30
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1