您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity Shader - Ray Marching - T6 - SoftShadow/PenumbraShadow

Jave.Lin 发布时间:2020-04-28 13:43:11 ,浏览量:1

文章目录
  • Differences in Hard and Soft - 硬软阴影区别
  • Soft Shadow - 软阴影
    • 软阴影的球体追踪
  • Soft Shadow Improvements - 软阴影改进
  • Add controlling Light Size - 添加用于控制的灯光大小
  • Project
  • GGB
  • Excel
  • 总结
  • References
自学Raymarching汇总: Unity Shader - Ray Marching Study Summary - 学习汇总

搜索了一下资料:软阴影

也可以参考我之后翻译的一篇:penumbra shadows in raymarched SDFs - 光线步进中使用有向距离场实现软阴影

总结为下图

在这里插入图片描述

图中的:

  • umbra 英 [ˈʌmbrə] 美 [ˈʌmbrə] ,本影 ==> 影子中光源完全照射不到的部分
  • penumbra 英 [pəˈnʌmbrə] 美 [pəˈnʌmbrə] 半影 ==> 黑暗与光明之间的

这是比较理想、真实的软阴影的方式。

但是我们这里Raymarching的是另一种模拟方式: 如下图: 在这里插入图片描述

核心代码:

float getShadow(float3 p, float3 p2l, float distWithL) { // 获取当前碰撞点是否在阴影中,返回光衰减值
    float3 ori = p;                     // 射线起点
    float3 dir = p2l;                   // 射线方向
    float3 pos;                         // 当前步进到的位置
    float dist;                         // 当前步进到的最近距离
    float d;                            // 当前最近距离
    pos = p + dir * EPSILON;            // 先将起点偏移一点点,防止本身在几何体表面距离太小而认为是在阴影
    
    UNITY_LOOP
    float minD = distWithL;
    for (int it = 0; it             
关注
打赏
1664331872
查看更多评论
0.0413s