体积雾的一种简单实现

 

场景里面一开始加的是默认的opengl雾效,效果不太好,看起来立体感不强,然后打算加个体积雾效果,搜了一些体积雾的实现方式,发现略复杂,就想了种比较简单的实现方式;

1、在场景的垂直高度上,一般是Z轴,创建若干个水平的平面,大小要比场景大,叠在一起之后看起来效果类似一个立方体;我是从Z的-5到20,创建了25个平面;

2、在片元着色器里,根据gl_FragCoord.z的大小,计算雾的浓度,进而计算雾的颜色,如:

float fogFactor = pow(gl_FragCoord.z, 1000);
fogFactor = min(fogFactor, 0.7);				
FragColor = vec4(fogColor, fogFactor);

3、这时候雾的远端看起来比较生硬,没有一个过渡的效果,如

4、在场景的远端四周,创建4个垂直的面,在片元着色器里根据对应面中片元的高度值在雾颜色和全透明颜色之间做一个线性插值,如:

FragColor = mix(vec4(fogColor, 1.0), vec4(0.0), worldPos.z / 200);

5、这是算出来的雾的颜色,之后显卡再将雾颜色和片元的颜色blend之后,就是最上面的图的效果了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值