基于WebGL的半透明物体的渲染方法与流程

文档序号:33183682发布日期:2023-02-04 05:40阅读:来源:国知局

技术特征:
1.一种基于webgl的半透明物体的渲染方法,其特征在于,包括:对所有物体进行第一次渲染,以获取每个像素位的最大深度值和区间片元数;基于所述最大深度值和区间片元数计算深度区间的切分数;基于所述切分数和最大深度值计算深度区间的单位距离;创建区间片元缓存纹理和深度区间索引纹理;将所述深度区间的单位距离、区间片元缓存纹理和深度区间索引纹理输入到片元着色器中,对所有物体进行第二次渲染;输出最终像素。2.根据权利要求1所述的基于webgl的半透明物体的渲染方法,其特征在于,获取每个像素位的最大深度值和区间片元数,包括:在第一次渲染之前,调用webgl提供的方法depthfunc()来设置深度比较方式,其中,深度比较所采用的函数为greater;在第一次渲染中,设置混合模式的源混合因子和目标混合因子都为gl.one,且写入红色通道的值为1;当一个片元通过了片元着色器阶段,并进行到深度测试阶段时,如果该片元通过了深度测试以及后续渲染管线中的测试,则将该片元的深度写入深度缓冲区;当深度缓冲区已经存在某一片元的深度值时,则根据深度比较函数提供的策略来判断是否要覆盖当前已存在缓冲区中的深度值;当第一次渲染完成之后,深度缓冲区中将保存着每个像素位下所有片元的最大深度值,帧缓存的纹理红色通道中将存储当前像素位的区间片元数。3.根据权利要求1所述的基于webgl的半透明物体的渲染方法,其特征在于,所述切分数的计算公式为:c=c
b
+(1+(n-n
min
)
÷
(n
max-n
min
)
×
t),t∈[0,+∞),c
b
∈[1,+∞)其中,c为切分数,n
max
为最大区间片元数,n
min
为最小区间片元数,c
b
为由用户输入的区间切分基数,t为由用户输入的区间切分系数的常量值,n为输入数值区间片元数。4.根据权利要求3所述的基于webgl的半透明物体的渲染方法,其特征在于,所述深度区间的单位距离的计算公式为:d=d
max
÷
c,d
max
∈[0,1]其中,d为深度区间的单位距离,d
max
为像素位的最大深度值,c为切分数。5.根据权利要求1所述的基于webgl的半透明物体的渲染方法,其特征在于,所述区间片元缓存纹理包括第一纹理和第二纹理,其中,第一纹理用于储存区间片元缓存纹理中的颜色值,第二纹理用于储存区间片元缓存纹理中的深度值。6.根据权利要求5所述的基于webgl的半透明物体的渲染方法,其特征在于,所述第一纹理的创建包括:调用webgl提供的函数createtexture()创建第一纹理;将纹理格式设置为rgba8;将纹理类型设置为unsigned_byte;调用teximage2d()函数初始化像素,其中,pixels参数设置为javascript的arraybuffer实例,即完成第一纹理的创建。
7.根据权利要求5所述的基于webgl的半透明物体的渲染方法,其特征在于,所述第二纹理的创建包括:调用webgl提供的函数createtexture()创建第二纹理;将纹理格式设置为r16ui;将纹理类型设置为unsigned_int;调用teximage2d()函数初始化像素,其中,pixels参数设置为javascript的arraybuffer实例,即完成第二纹理的创建。8.根据权利要求1所述的基于webgl的半透明物体的渲染方法,其特征在于,所述深度区间索引纹理的创建包括:调用webgl提供的函数createtexture()创建深度区间索引纹理;将纹理格式设置为rg16f;将纹理类型设置为float;调用teximage2d()函数初始化像素,其中,pixels参数设置为javascript的arraybuffer实例,即完成深度区间索引纹理。9.根据权利要求1所述的基于webgl的半透明物体的渲染方法,其特征在于,所述第二次渲染包括:根据屏幕坐标以及深度区间索引纹理获取深度区间开始的索引;根据片元深度值,以及深度区间单位距离,映射到相应深度区间,向下取整计算出相对于深度区间的开始索引偏移值,以获取区间片元缓存纹理上的实际存储位置;将rgba以及深度值写入区间片元缓存纹理上的实际存储位置,以完成一个区间片元缓存的写入;基于相应的混合模式完成所有区间片元缓存的写入,以完成第二次渲染。10.根据权利要求9所述的基于webgl的半透明物体的渲染方法,其特征在于,所述最终像素的输出包括:调用屏幕后处理过程,对区间片元缓存纹理逐像素进行所有区间片元的排序;根据混合模式依次混合所有片元;输出屏幕所有alpha混合过的像素。

技术总结
本申请涉及3D图形渲染技术领域,公开了一种基于WebGL的半透明物体的渲染方法,包括:对所有物体进行第一次渲染,以获取每个像素位的最大深度值和区间片元数;基于所述最大深度值和区间片元数计算深度区间的切分数;基于所述切分数和最大深度值计算深度区间的单位距离;创建区间片元缓存纹理和深度区间索引纹理;将所述深度区间的单位距离、区间片元缓存纹理和深度区间索引纹理输入到片元着色器中,对所有物体进行第二次渲染;输出最终像素,本申请通过使用两个渲染过程和两侧屏幕后处理,完了顺序无关的半透明物体渲染,与深度剥离、逐像素链表算法相比,由于划分了区间,预先合并了一部分片元,相对更节省显存,并且性能要比深度剥离高。剥离高。剥离高。


技术研发人员:谢传金
受保护的技术使用者:杭州易知微科技有限公司
技术研发日:2022.11.09
技术公布日:2023/2/3
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1