您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

penumbra shadows in raymarched SDFs - 光线步进中使用有向距离场实现软阴影

Jave.Lin 发布时间:2020-04-29 10:40:32 ,浏览量:1

文章目录
  • Intro - 介绍
  • The trick - 技巧
  • An improvement - 改进
  • GGB

原文:penumbra shadows in raymarched SDFs

Intro - 介绍

许多步进用的距离场(distance fields)函数,他们都是本身提供了全局信息。这意味着,当要着色着色某一点时,它可以使用距离场函数(distance function)很简单就探索出周围几何体。这不像传统的光栅器,它得使用一个预先烘焙好的全局全局光照数据给后续的使用(如shadowmap阴影图,depthmap深度图,pointcloud点云图),或是在一个光线追踪要查找全局信息就必须通过光线投射来采样几何体信息,而在distance field距离场中是着色期间就可以取到的,这简直就是免费的(“免费”是加了双引号)。这意味着许多逼真的着色器和光照技术使用距离场都是很简单就可以实现的。并且raymarcher射线步进器在采样/渲染时会更真实。此文将运用光线步进的这些良好的特性来免费渲染半影的软阴影。 在这里插入图片描述 免费的计算软阴影与半影

在这里插入图片描述 经典的光线投射阴影

The trick - 技巧

那么,假设你有一个距离场编码函数 float map(vec3 p)。你可以在这里 查看构建一些基础的距离函数。为了简便起见,假设 map() 函数包含了场景中所有需要渲染的对象,并且所有对象都允许投射阴影给其他对象。那么,在着色一个点的阴影计算是很简单的,沿着光方向的向量来射线步进,直到从光源到着色点的距离有碰撞到东西就好了。你可能需要处理类似这样的代码:

float shadow( in vec3 ro, in vec3 rd, float mint, float maxt )
{
    for( float t=mint; t            
关注
打赏
1664331872
查看更多评论
0.0402s