unity-shader-体积光VolumetricLighting
unity-shader-体积光VolumetricLighting
前篇
[unity asset store 中搜索 god rays 可以看到很多插件]([https://assetstore.unity.com/packages/tools/camera/ultimate-screenshot-tool-119675?q=god%20rays&orderBy=0](https://assetstore.unity.com/packages/tools/camera/ultimate-screenshot-tool-119675?q=god rays&orderBy=0))
后处理实现的 体积光 - https://github.com/MaxwellGengYF/Unity-Volumetric-Light
Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching) - https://blog.csdn.net/puppet_master/article/details/79859678
游戏开发相关实时渲染技术之体积光 - https://zhuanlan.zhihu.com/p/21425792
RayMarching
Raidal Blur Postprocessing 径向模糊后处理
这种方式的实现和 Bloom 效果很相像, Bloon 是把 高亮 部分进行 高斯模糊 一下叠加
而 体积光 则是把 高亮 部分进行 镜像模糊
原理 :
- 提交高亮部分 RT1
- RT1 做几次 径向模糊 - RT2
- RT2 再与原图叠加起来
原图
经过提取高亮=>径向模糊=>增大模糊半径再次径向模糊=>与原图叠加的效果分别如下图:
挤出顶点
参考: https://blog.csdn.net/puppet_master/article/details/79859678
原理 :
顶点阶段, 计算出哪些是背光, 哪些是受光, 让受光的部分的顶点沿着光的方向挤出. (为啥是受光? 因为受光部分离光比较近, 比较早衰减). 背光部分的顶点则不处理. 这样在光栅化后就能差值形成一个沿光方向延伸的模型.
BillBoard 公告板
ShadowGun 中的 体积光 的实现方式 - GodRays.
这里也有个分析 : ShadowGun 的学习笔记 - GodRays, 比较古老的仓库 : https://github.com/rainbow23/shadowgun_sample
原理 :
参考代码
1 | float3 viewPos = mul(UNITY_MATRIX_MV,v.vertex); |
将顶点变换到 视空间, viewPos 的 length 就是 该顶点到 视点 的距离
定义在 近视点, 远视点, 根据这两个视点的距离作比较进行插值计算