您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity Shader - Ray Marching - T5 - Shadow

Jave.Lin 发布时间:2020-04-25 17:41:01 ,浏览量:1

文章目录
  • 从碰撞点到光源点
  • 从光源点到碰撞点
  • Project
  • GGB
自学Raymarching汇总: Unity Shader - Ray Marching Study Summary - 学习汇总

判断是否在阴影比较简单

只要判断我们的碰撞点,往光源方向过程中是否有其他几何体挡住即可。

这里我们假设点光源是一个无体积的奇点

从碰撞点到光源点

用下面的图理解:只要我们的视野(或是相机:Eye)中的Raymarching几何体碰撞点HitPos,指向LightPos之间如果有几何体挡住了,那就认为是在阴影中,下图HitPos在指向LightPos再次Raymarching步进过程中又碰撞到了ShadowHitPos点,如果HitPos点就是在阴影中。

在这里插入图片描述

下面是不在阴影下的HitPos,可以看到HitPosLightPos之间是没有其他几何体的: 在这里插入图片描述 在这里插入图片描述

核心代码是:

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
    for (int it = 0; it             
关注
打赏
1664331872
查看更多评论
0.0492s