文章目录
自学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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【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脚手架写一个简单的页面?