文章目录
- 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
关注
打赏
热门博文
- 3D Assets (Textures & Model & Animations) & Game Design Ideas & DCC Tutorials & TA
- LearnGL - 学习笔记目录
- Unity - Timeline 知识汇总
- Unity Graphics - 知识点目录 - 停止翻译,因为发现官方有中文文档了
- Graphic资料
- Unity Lightmap&LightProbe局部动态加载(亲测2020以及以上版本官方修复了)
- Unity - 踩坑日志 - 低版本线性颜色空间渲染异常的 “BUG”
- Unity Shader - PBR 渲染 SP 导出的素材
- 什么是 3A 游戏?
- Photosohp - 实现 2D MetaBall、MetaFont