文章目录
- Intro - 介绍
- The trick - 技巧
- An improvement - 改进
- GGB
原文:penumbra shadows in raymarched SDFs
Intro - 介绍许多步进用的距离场(distance fields)函数,他们都是本身提供了全局信息。这意味着,当要着色着色某一点时,它可以使用距离场函数(distance function)很简单就探索出周围几何体。这不像传统的光栅器,它得使用一个预先烘焙好的全局全局光照数据给后续的使用(如shadowmap阴影图,depthmap深度图,pointcloud点云图),或是在一个光线追踪要查找全局信息就必须通过光线投射来采样几何体信息,而在distance field距离场中是着色期间就可以取到的,这简直就是免费的(“免费”是加了双引号)。这意味着许多逼真的着色器和光照技术使用距离场都是很简单就可以实现的。并且raymarcher射线步进器在采样/渲染时会更真实。此文将运用光线步进的这些良好的特性来免费渲染半影的软阴影。 免费的计算软阴影与半影
经典的光线投射阴影
那么,假设你有一个距离场编码函数 float map(vec3 p)
。你可以在这里 查看构建一些基础的距离函数。为了简便起见,假设 map()
函数包含了场景中所有需要渲染的对象,并且所有对象都允许投射阴影给其他对象。那么,在着色一个点的阴影计算是很简单的,沿着光方向的向量来射线步进,直到从光源到着色点的距离有碰撞到东西就好了。你可能需要处理类似这样的代码:
float shadow( in vec3 ro, in vec3 rd, float mint, float maxt )
{
for( float t=mint; t
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?