【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 官方

相关推荐

  1. 【Unity】RayMarching体积理论学习

    2024-01-23 11:04:01       37 阅读
  2. 理论学习 消融实验

    2024-01-23 11:04:01       25 阅读
  3. 理论学习-自动控制

    2024-01-23 11:04:01       7 阅读
  4. Python 点体积计算(网格积分法)

    2024-01-23 11:04:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 11:04:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 11:04:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 11:04:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 11:04:01       20 阅读

热门阅读

  1. 什么是DDoS

    2024-01-23 11:04:01       29 阅读
  2. LeetCode59 螺旋矩阵 II

    2024-01-23 11:04:01       34 阅读
  3. LeetCode 46. 全排列

    2024-01-23 11:04:01       38 阅读
  4. Hive 数仓及数仓设计方案

    2024-01-23 11:04:01       33 阅读
  5. openssl3.2/test/certs - 006 - trust variants: +anyEKU -anyEKU

    2024-01-23 11:04:01       34 阅读
  6. Rust 智能指针

    2024-01-23 11:04:01       30 阅读
  7. 深入理解Rust语句和表达式

    2024-01-23 11:04:01       37 阅读
  8. 【MySQL】了解索引的第一步

    2024-01-23 11:04:01       32 阅读
  9. IDEA的快捷键

    2024-01-23 11:04:01       34 阅读