RayMarching 体积云
-
RayMarching 是一种处理体积物体的方法
-
RayMarching 体积云的制作是基于屏幕后处理
-
如何在需要渲染的物体或者场景中使用RayMarching?
-
使用包围盒
常见的包围盒算法
-
Axis-Aligned bounding Box 轴对齐包围盒
-
OBB(OrientedboundingBox) 方向包围盒
-
nvdia 改进后的算法
-
简述AABB和OBB的区别
-
碰撞检测之 AABB 包围盒
-
-
使用包围盒的目的
-
判断 光线 与复杂的物体相交是一个比较费时的计算,当我们用一个包围盒取包围它时,盒子的计算就会降低很多时间
-
同时还可以处理不同深度物体的遮挡问题(透明物体?)
-
碰撞算法会返回 相机到容器的距离 和 返回光线是否在容器中
-
-
-
噪声采样
-
Perline噪声:雾状层云,但它无法描述积云中的圆形、波浪状,也无法给它们一种隐隐的运动感
-
Worley噪声:用于渲染焦散和水的效果
-
3D 纹理 - Unity 手册
-
3D纹理的采样坐标的原点一般是左下后方
-
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.体积云形状控制与动画
8. 优化方案
参考链接:
RayMarching实时体积云渲染入门(上) - 知乎 (zhihu.com)
A Ray-Box Intersection Algorithm and Efficient Dynamic Voxel Rendering (JCGT)
Ray Marching for Dummies
GPU Pro 7——实时体积云(翻译,附Unity工程)-CSDN博客
Unity 官方