[发明专利]一种基于空间预探索的真实过渡阴影实现方法有效
申请号: | 202010057152.0 | 申请日: | 2020-01-17 |
公开(公告)号: | CN111243077B | 公开(公告)日: | 2022-08-12 |
发明(设计)人: | 陈旋;周海;王立森 | 申请(专利权)人: | 江苏艾佳家居用品有限公司 |
主分类号: | G06T15/80 | 分类号: | G06T15/80 |
代理公司: | 南京新慧恒诚知识产权代理有限公司 32424 | 代理人: | 邓唯 |
地址: | 211100 江苏省南京市江宁区*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 空间 探索 真实 过渡 阴影 实现 方法 | ||
1.一种基于空间预探索的真实过渡阴影实现方法,其特征在于,具体包括以下步骤:
步骤1,将网格物体的三角形存入kDopTree,其中,kDopTree是一种基于方差分割的树结构;
步骤2,将网格物体的空间均匀分割成空间块,进而对每个空间块进行空间的预探索获得场景物体的位置信息;
步骤3,在空间块内生成采样射线,对于步骤2得到的每一个空间块Box,其边界分别为块最小值Box.Min,块最大值Box.Max,空间块的中心位置Box.Center=(Box.Min+Box.Max)/2,从中心位置均匀发射出M条射线,射线的方向记为Ray.Dir,每条射线和步骤1中的kDopTree中的三角形求交点P,得到块中心到网格物体的最小长度;计算每个块到网格物体的最小长度;
其中,P=Intersect(Ray.Dir,Mesh.Triangles),P为交点,Ray.Dir为射线的方向,Mesh.Triangles是网格物体内的三角形;
步骤4,获取空间块内射线探索和网格三角形的交点,得到最小长度,逐级判断射线和树子节点范围的位置关系;
步骤5,将空间块的最小长度存入3D纹理;
步骤6,建立网格物体和3D纹理内数据的对应关系,根据步骤2中得到的空间块,创建3D纹理,且每一个纹理的像素对应一个空间块,像素值对应空间块到网格物体的最小距离;
步骤7,步进像素并读取3D纹理数据计算阴影。
2.根据权利要求1所述的一种基于空间预探索的真实过渡阴影实现方法,其特征在于:在步骤2中,将网格物体的空间均匀分割成空间块,具体如下:网格物体内一个三角形的顶点位置坐标记为Vertex(x,y,z),循环网格物体的所有三角形的顶点比较得到最大值Max、最小值Min,网格物体的空间范围即Max-Min,把这个范围在x,y,z方向均分为N等分,得到N的3次方个空间块。
3.根据权利要求1所述的一种基于空间预探索的真实过渡阴影实现方法,其特征在于:所述步骤4具体如下:根据步骤3中产生的各个射线方向,计算出各个空间块和网格物体的最小长度的交点,计算交点需要通过步骤1中的kDopTree对遍历射线和三角形相交加速,从树的根节点开始,判断射线Ray和根节点的Box是否相交,依次计算Ray和Box六个面的交点坐标并判断交点是否在Box内,如果有一个交点在Box内,退出循环,进入下一级子节点的相同判断,如果子节点也相交并且为叶子节点,射线Ray依次判断和叶子节点内三角形的交点方法同步骤3,计算出长度后保存,开始下一个射线Ray的相同计算过程,比较前后交点的长度,最后得到最小长度,逐级判断射线和树子节点范围的位置关系。
4.根据权利要求2所述的一种基于空间预探索的真实过渡阴影实现方法,其特征在于:所述步骤5具体如下:根据步骤4得到每个空间块到网格物体最小长度的射线方向和长度,将长度信息写入3D纹理,用于步进像素射线Ray计算像素的阴影Shadow,具体如下:
其中,Ray.StepVolume为步进过程中第i步的阴影体积,根据当前位置从3D纹理中双线性采样得到;ConeVolume为像素步进圆锥体的总体积等于底面积乘以高除以3。
5.根据权利要求4所述的一种基于空间预探索的真实过渡阴影实现方法,其特征在于:所述步骤6具体如下:在得到单个网格物体的空间预探索信息写入3D纹理之后,把网格物体和3D纹理中的长度信息进行对应,创建网格对象的空间范围信息ObjectBoundsBuffer和对象空间里的位置信息ObjectsTransformData,建立网格对象的信息和3D纹理数据信息的对应关系:
ObjectsTransformData=ObjectBoundsBuffer/N,N为步骤2中的N。
6.根据权利要求5所述的一种基于空间预探索的真实过渡阴影实现方法,其特征在于:所述步骤7具体如下:
步骤7.1,根据步骤6建立的3D纹理数据,在像素位置发出沿着光线方向的射线,从像素的世界位置开始迭代步进出新的世界位置;
步骤7.2,步进每次迭代沿着光线方向逐级增加,在步进位置创建球体和场景空间预计算的范围信息进行相交判断,步进位置记为StepPosition,采样3D纹理判断是否在与探索范围内,如果在预探索范围内,记录位置为MinPosition,计算得到球体的最小半径为MinRadius=MinPosition-StepPosition,累加到步进长度后,继续下次迭代读取网格对象的空间范围和位置信息;
步骤7.3,根据步进位置StepPosition和网格对象空间范围ObjectBoundsBuffer,判断步进位置位于哪个网格对象的范围内,根据网格对象从3D纹理读取空间预探索信息计算对应位置的球体体积,根据步骤7.2中得到的最小半径为MinRadius,
球体体积
累计遮挡体积,除以总的像素射线空间体积得到真实过渡阴影;
Shadow=(∑Volume)/TotalVolume;
其中,TotalVolume等同于上述的ConeVolume。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏艾佳家居用品有限公司,未经江苏艾佳家居用品有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010057152.0/1.html,转载请声明来源钻瓜专利网。