文章目录
自学Raymarching汇总:
Unity Shader - Ray Marching Study Summary - 学习汇总
- Differences in Hard and Soft - 硬软阴影区别
- Soft Shadow - 软阴影
- 软阴影的球体追踪
- Soft Shadow Improvements - 软阴影改进
- Add controlling Light Size - 添加用于控制的灯光大小
- Project
- GGB
- Excel
- 总结
- References
搜索了一下资料:软阴影
也可以参考我之后翻译的一篇: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
关注
打赏
热门博文
- 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