System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及图形渲染,特别是一种移动端的体积光渲染方法及系统。
技术介绍
1、现有的体积光渲染方案主要有:根据深度贴图的像素世界位置步进采样阴影贴图判断可见性从而叠加光照颜色;利用渲染一种特定3d模型对立体区域投射到屏幕空间的像素进行光线步进计算光线在其间传播的光照信息。
2、现有技术在渲染体积光时,一方面需要进行光线步进的操作,从而在gpu运算中产生大量的for循环指令,而移动端的gpu性能有限,处理大量for循环会导致用户画面卡顿,帧率下降;另一方面,渲染特定3d模型时有可能会出现模型被相机裁剪而完全消失或者在模型边缘体积光效果出现渲染断层的视觉差异,导致效果不好的问题。
3、针对现有体积光渲染的性能和效果问题,本专利提出一种移动端的体积光渲染方法及系统。
技术实现思路
1、为克服上述问题,本专利技术的目的是提供一种移动端的体积光渲染方法,能够高效、真实地实现移动端体积光渲染效果。
2、本专利技术采用以下方案实现:一种移动端的体积光渲染方法,所述方法包括如下步骤:
3、步骤s1、在通用渲染管线中添加渲染流程并设置后续渲染需要用到的参数;
4、步骤s2、利用深度图和unity的rendertexture对太阳周围高亮区域提取贴图;
5、步骤s3、对提取出高亮区域的贴图进行径向模糊产生体积光的光效;
6、步骤s4、将模糊后的体积光的光效与所述的rendertexture进行叠加得到最终体积光渲染效
7、进一步的,所述步骤s1进一步具体为:在unity的通用渲染管线的前向渲染管线中,在不透明物件、半透明物件都渲染完成之后添加体积光渲染流程renderfeature;在cpu中将unity中太阳坐标通过相机视角矩阵变换、相机裁剪矩阵变换、屏幕空间矩阵变换转换为屏幕坐标_sunposition,判断_sunposition.xy是否在0-1范围内,即确定是否在渲染屏幕中,否,则超出渲染屏幕范围无需后续体积光绘制,是,则在渲染屏幕范围内要绘制体积光。
8、进一步的,所述步骤s2进一步具体为:在渲染管线中,gpu会将物体信息绘制到一张rendertexture上,称为原始rendertexture;当不透明物件、半透明物件都绘制结束后,额外创建一张rendertexture,称为prepassrt,记录太阳所在位置的高亮区域像素;首先需要设置prepassrt的像素大小为原始rendertexture像素的1/4以优化移动端性能;通过顶点着色器、光栅化阶段将整个屏幕栅格化并得到每个栅格的uv坐标;利用uv坐标采样相机的线性深度图,若深度图的深度值小于0.9999,则该像素颜色值直接为0,否则采样原始rendertexture贴图得到像素颜色,并对像素与太阳位置做距离衰减dist=saturate(1-length(_sunposition.xy-uv)),其中saturate方法是将括号里的值限定在0和1之间,length方法是计算矢量的模;outcolor=tex2d(_maintex,uv)*dist,其中outcolor是最后输出的prepassrt中的像素颜色,_maintex就是原始rendertexture传到shader中的变量名称,tex2d是图形api,用于采样贴图。
9、进一步的,所述步骤s3进一步具体为:创建两张模糊渲染贴图rendertexture,即两张模糊渲染贴图分别为:blurtextures0、blurtexture1,设置两张模糊渲染贴图的分辨率与prepassrt的分辨率相同,将得到的结果prepassrt的像素颜色作为当前步骤的第一次输入;获取屏幕空间uv,并且额外计算一个由当前uv指向_sunposition的方向uv1:output.uv1=(_sunposition.xy-output.uv)*_sunblurradius4;其中_sunblurradius4是与模糊范围成正比的参数,利用uv和uv1就能对第一次输入的prepassrt、之后创建的blurtexture0或blurtexture1做模糊操作;移动端选择每个像素循环6次,用i计数,计算uv=uv+i*uv1对输入的图像进行采样,6次采样结果叠加求平均输出:col.rgb=saturate(col.rgb'*_suncolor.xyz*_sunweight/6.0f),其中等号右边的col.rgb'是累加的颜色,_suncolor.xyz是预设的体积光颜色,_sunweight是体积光强度;至此一个模糊渲染blurpass结束,将最终输出的图像作为下一次blurpass的输入进行多次模糊,最后模糊的结果就是体积光的光效,称为sunshaftrt。
10、进一步的,所述步骤s4进一步具体为:利用屏幕空间四边形对整个相机屏幕进行渲染,shader中混合模式设置为"blend one one",将模糊后得到的sunshaftrt作为输入,uv采样后直接输出即可将sunshaftrt与渲染管线中的原始rendertexture进行叠加。
11、本专利技术还提供了一种移动端的体积光渲染系统,所述系统包括:渲染流程设置模块、高亮区域提取模块、模糊操作模块、以及叠加渲染模块;
12、所述渲染流程设置模块,在通用渲染管线中添加渲染流程并设置后续渲染需要用到的参数;
13、所述高亮区域提取模块,利用深度图和unity的rendertexture对太阳周围高亮区域提取贴图;
14、所述模糊操作模块,对提取出高亮区域的贴图进行径向模糊产生体积光的光效;
15、所述叠加渲染模块,将模糊后的体积光的光效与所述的rendertexture进行叠加得到最终体积光渲染效果。
16、进一步的,所述渲染流程设置模块的实现方式进一步具体为:在unity的通用渲染管线的前向渲染管线中,在不透明物件、半透明物件都渲染完成之后添加体积光渲染流程renderfeature;在cpu中将unity中太阳坐标通过相机视角矩阵变换、相机裁剪矩阵变换、屏幕空间矩阵变换转换为屏幕坐标_sunposition,判断_sunposition.xy是否在0-1范围内,即确定是否在渲染屏幕中,否,则超出渲染屏幕范围无需后续体积光绘制,是,则在渲染屏幕范围内要绘制体积光。
17、进一步的,所述高亮区域提取模块的实现方式进一步具体为:在渲染管线中,gpu会将物体信息绘制到一张rendertexture上,称为原始rendertexture;当不透明物件、半透明物件都绘制结束后,额外创建一张rendertexture,称为prepassrt,记录太阳所在位置的高亮区域像素;首先需要设置prepassrt的像素大小为原始rendertexture像素的1/4以优化移动端性能;通过顶点着色器、光栅化阶段将整个屏幕栅格化并得到每个栅格的uv坐标;利用uv坐标采样相机的线性深度图,若深度本文档来自技高网...
【技术保护点】
1.一种移动端的体积光渲染方法,其特征在于:所述方法包括如下步骤:
2.根据权利要求1所述的一种移动端的体积光渲染方法,其特征在于:所述步骤S1进一步具体为:在Unity的通用渲染管线的前向渲染管线中,在不透明物件、半透明物件都渲染完成之后添加体积光渲染流程RenderFeature;在CPU中将Unity中太阳坐标通过相机视角矩阵变换、相机裁剪矩阵变换、屏幕空间矩阵变换转换为屏幕坐标_SunPosition,判断_SunPosition.xy是否在0-1范围内,即确定是否在渲染屏幕中,否,则超出渲染屏幕范围无需后续体积光绘制,是,则在渲染屏幕范围内要绘制体积光。
3.根据权利要求1所述的一种移动端的体积光渲染方法,其特征在于:所述步骤S2进一步具体为:在渲染管线中,GPU会将物体信息绘制到一张RenderTexture上,称为原始RenderTexture;当不透明物件、半透明物件都绘制结束后,额外创建一张RenderTexture,称为PrePassRT,记录太阳所在位置的高亮区域像素;首先需要设置PrePassRT的像素大小为原始RenderText
4.根据权利要求3所述的一种移动端的体积光渲染方法,其特征在于:所述步骤S3进一步具体为:创建两张模糊渲染贴图RenderTexture,即两张模糊渲染贴图分别为:BlurTextures0、BlurTexture1,设置两张模糊渲染贴图的分辨率与PrePassRT的分辨率相同,将得到的结果PrePassRT的像素颜色作为当前步骤的第一次输入;获取屏幕空间uv,并且额外计算一个由当前uv指向_SunPosition的方向uv1:output.uv1=(_SunPosition.xy-output.uv)*_SunBlurRadius4;其中_SunBlurRadius4是与模糊范围成正比的参数,利用uv和uv1就能对第一次输入的PrePassRT、之后创建的BlurTexture0或BlurTexture1做模糊操作;移动端选择每个像素循环6次,用i计数,计算uv=uv+i*uv1对输入的图像进行采样,6次采样结果叠加求平均输出:col.rgb=saturate(col.rgb'*_SunColor.xyz*_SunWeight/6.0f),其中等号右边的col.rgb'是累加的颜色,_SunColor.xyz是预设的体积光颜色,_SunWeight是体积光强度;至此一个模糊渲染BlurPass结束,将最终输出的图像作为下一次BlurPass的输入进行多次模糊,最后模糊的结果就是体积光的光效,称为SunShaftRT。
5.根据权利要求4所述的一种移动端的体积光渲染方法,其特征在于:所述步骤S4进一步具体为:利用屏幕空间四边形对整个相机屏幕进行渲染,Shader中混合模式设置为"Blend One One",将模糊后得到的SunShaftRT作为输入,uv采样后直接输出即可将SunShaftRT与渲染管线中的原始Rendertexture进行叠加。
6.一种移动端的体积光渲染系统,其特征在于:所述系统包括:渲染流程设置模块、高亮区域提取模块、模糊操作模块、以及叠加渲染模块;
7.根据权利要求6所述的一种移动端的体积光渲染系统,其特征在于:所述渲染流程设置模块的实现方式进一步具体为:在Unity的通用渲染管线的前向渲染管线中,在不透明物件、半透明物件都渲染完成之后添加体积光渲染流程RenderFeature;在CPU中将Unity中太阳坐标通过相机视角矩阵变换、相机裁剪矩阵变换、屏幕空间矩阵变换转换为屏幕坐标_SunPosition,判断_SunPosition.xy是否在0-1范围内,即确定是否在渲染屏幕中,否,则超出渲染屏幕范围无需后续体积光绘制,是,则在渲染屏幕范围内要绘制体积光。
8.根据...
【技术特征摘要】
1.一种移动端的体积光渲染方法,其特征在于:所述方法包括如下步骤:
2.根据权利要求1所述的一种移动端的体积光渲染方法,其特征在于:所述步骤s1进一步具体为:在unity的通用渲染管线的前向渲染管线中,在不透明物件、半透明物件都渲染完成之后添加体积光渲染流程renderfeature;在cpu中将unity中太阳坐标通过相机视角矩阵变换、相机裁剪矩阵变换、屏幕空间矩阵变换转换为屏幕坐标_sunposition,判断_sunposition.xy是否在0-1范围内,即确定是否在渲染屏幕中,否,则超出渲染屏幕范围无需后续体积光绘制,是,则在渲染屏幕范围内要绘制体积光。
3.根据权利要求1所述的一种移动端的体积光渲染方法,其特征在于:所述步骤s2进一步具体为:在渲染管线中,gpu会将物体信息绘制到一张rendertexture上,称为原始rendertexture;当不透明物件、半透明物件都绘制结束后,额外创建一张rendertexture,称为prepassrt,记录太阳所在位置的高亮区域像素;首先需要设置prepassrt的像素大小为原始rendertexture像素的1/4以优化移动端性能;通过顶点着色器、光栅化阶段将整个屏幕栅格化并得到每个栅格的uv坐标;利用uv坐标采样相机的线性深度图,若深度图的深度值小于0.9999,则该像素颜色值直接为0,否则采样原始rendertexture贴图得到像素颜色,并对像素与太阳位置做距离衰减dist=saturate(1-length(_sunposition.xy-uv)),其中saturate方法是将括号里的值限定在0和1之间,length方法是计算矢量的模;outcolor=tex2d(_maintex,uv)*dist,其中outcolor是最后输出的prepassrt中的像素颜色,_maintex就是原始rendertexture传到shader中的变量名称,tex2d是图形api,用于采样贴图。
4.根据权利要求3所述的一种移动端的体积光渲染方法,其特征在于:所述步骤s3进一步具体为:创建两张模糊渲染贴图rendertexture,即两张模糊渲染贴图分别为:blurtextures0、blurtexture1,设置两张模糊渲染贴图的分辨率与prepassrt的分辨率相同,将得到的结果prepassrt的像素颜色作为当前步骤的第一次输入;获取屏幕空间uv,并且额外计算一个由当前uv指向_sunposition的方向uv1:output.uv1=(_sunposition.xy-output.uv)*_sunblurradius4;其中_sunblurradius4是与模糊范围成正比的参数,利用uv和uv1就能对第一次输入的prepassrt、之后创建的blurtexture0或blurtexture1做模糊操作;移动端选择每个像素循环6次,用i计数,计算uv=uv+i*uv1对输入的图像进行采样,6次采样结果叠加求平均输出:col.rgb=saturate(col.rgb'*_suncolor.xyz*_sunweight/6.0f),其中等号右边的col.rgb'是累加的颜色,_suncolor.xyz是预设的体积光颜色,_sunweight是体积光强度;至此一个模糊渲染blurpass结束,将最终输出的图像作为下一次blurpass的输入进行多次模糊,最后模糊的结果就是体积光的光效,称为sunshaftrt。
5.根据权利要求4所述的一种移动端的体积光渲染方法,其特征在于:所述步骤s4进一步具体为:利用屏幕空间四边形对整个相机屏幕进行渲染,shader中混合模式设置为"blend one one",将模糊后得到的sunshaftrt作为输入,uv采样后直接输出即可将sunshaftrt与渲染管线中的原始rendertexture进行叠加。
6.一种移动端的体积光渲染系统,其特征在于:所述系统包括...
【专利技术属性】
技术研发人员:刘德建,张超,涂智业,李佳,
申请(专利权)人:福建天晴数码有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。