Cesium进阶教程-阴影贴图-视频融合-优化
视频裁剪
在实际应用中,有时候为了让视频与场景能够更好地进行融合,可能需要手动裁剪掉某些区域的视频内容,比如当视频主要是指向道路的画面时,由于相机角度较大,导致旁边行道树也在画面内,因为模型中行道树是凸起来的,所以会导致融合后的视频画面被拉伸,导致效果不理想,并且行道树的部分其实没有什么用,这是就可以将这部分裁剪视频裁剪掉,从而得到一个更好的融合效果。
规则裁剪
有些裁剪区域可能比较规则,比如裁剪掉视频的上半部分/下半部分/左半部分/右半部分等,此时就可以直接通过判断纹理坐标的方式进行裁剪,因为纹理坐标的区间是[0,0]-[1,1],并且坐标原点位于左下角,所以判断上下左右只需按照坐标关系判断即可,以裁剪视频上半部分为例
if(shadowPosition.y>0.5)return;
示例效果可到 xt3d 官网 运行查看
不规则裁剪
如果是不规则的视频区域裁剪,可以借助一张纹理图来实现,先将区域信息存储到一张纹理中,把纹理传入后处理程序的着色器中,然后在着色器中读取区域信息。 这里通过一个固定的区域来进行演示,如果要实现动态绘制区域,只需通过canvas来绘制即可。

vec3 clipColor;
if(clipColor.r<.5)return;
示例效果可到 xt3d 官网 运行查看
视频羽化
有时候视频边界可能看起来比较生硬,可以通过羽化来使其和场景更好的进行融合,羽化效果一种方式是通过设置透明度来实现,原理图如下

实现代码如下
vec4 videoColor = texture(videoTexture, shadowPosition.xy);
out_FragColor = mix(color, vec4(videoColor.xyz, 1.), videoColor.a);//color为原场景的颜色
//设置羽化
...

可自行对比有羽化和无羽化的效果差异
示例效果可到 xt3d 官网 运行查看
更多内容见 Cesium进阶教程-教程简介

1867

被折叠的 条评论
为什么被折叠?



