【Unity】RayMarching体积云理论学习

RayMarching 体积云

  1. RayMarching 是一种处理体积物体的方法
  2. RayMarching 体积云的制作是基于屏幕后处理

  1. 屏幕空间重建世界坐标
    • 目的是把屏幕坐标的每一个像素点转化成Unity世界坐标,可以得到射线的方向

  1. 如何在需要渲染的物体或者场景中使用RayMarching?
    • 使用包围盒
      常见的包围盒算法
    • 使用包围盒的目的
      • 判断 光线 与复杂的物体相交是一个比较费时的计算,当我们用一个包围盒取包围它时,盒子的计算就会降低很多时间
      • 同时还可以处理不同深度物体的遮挡问题(透明物体?)
      • 碰撞算法会返回 相机到容器的距离返回光线是否在容器中
        • 此时我们就可以获得基础的步长,每次步进都是密度叠加。

  1. 噪声采样
    • Perline噪声:雾状层云,但它无法描述积云中的圆形、波浪状,也无法给它们一种隐隐的运动感
    • Worley噪声:用于渲染焦散和水的效果
    • 3D 纹理 - Unity 手册

    • 3D纹理的采样坐标的原点一般是左下后方
    • 入门图形学:Texture3D-CSDN博客

    • 3D贴图采样贴图传入的是Ray 接触点,但其是世界坐标,需要转换到包围盒的相对位置上去

4,步进
简而言之就是在接触点不断往前,采样密度叠加,直到脱离包围盒或者超出最大步长距离
float  sumDensity  = 0;
 for (int j = 0; j <32; j++)
  {
    if (_dstTravelled < dstLimit)
       {
          rayPos = entryPoint + (worldViewDir * _dstTravelled);
          sumDensity += pow(sampleDensity(rayPos),5);
       }
 _dstTravelled += _rayStep; //向前步进
}
return col + sumDensity ;


5.体积云的光照计算
6.体积云形状控制与动画
  • 可以参考 GPU Pro 7里面的理论

8. 优化方案
  • 分帧渲染
    • 低分辨率上做raymarch计算,然后通过多帧来重建。

参考链接:

RayMarching实时体积云渲染入门(上) - 知乎 (zhihu.com)

A Ray-Box Intersection Algorithm and Efficient Dynamic Voxel Rendering (JCGT)

Ray Marching for Dummies

GPU Pro 7——实时体积云(翻译,附Unity工程)-CSDN博客

Unity 官方

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值