国内有什么网站,建设新网站,临沂网站建设临沂,二维码图片生成器在线制作RayMarching 体积云 RayMarching 是一种处理体积物体的方法 RayMarching 体积云的制作是基于屏幕后处理 屏幕空间重建世界坐标 目的是把屏幕坐标的每一个像素点转化成Unity世界坐标#xff0c;可以得到射线的方向 如何在需要渲染的物体或者场景中使用RayMarching#xff…RayMarching 体积云 RayMarching 是一种处理体积物体的方法 RayMarching 体积云的制作是基于屏幕后处理 屏幕空间重建世界坐标 目的是把屏幕坐标的每一个像素点转化成Unity世界坐标可以得到射线的方向 如何在需要渲染的物体或者场景中使用RayMarching 使用包围盒 常见的包围盒算法 Axis-Aligned bounding Box 轴对齐包围盒 OBBOrientedboundingBox 方向包围盒 nvdia 改进后的算法 简述AABB和OBB的区别 碰撞检测之 AABB 包围盒 使用包围盒的目的 判断 光线 与复杂的物体相交是一个比较费时的计算当我们用一个包围盒取包围它时盒子的计算就会降低很多时间 同时还可以处理不同深度物体的遮挡问题透明物体 碰撞算法会返回 相机到容器的距离 和 返回光线是否在容器中 此时我们就可以获得基础的步长每次步进都是密度叠加。 噪声采样 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 官方