文章目录
自学Raymarching汇总:
Unity Shader - Ray Marching Study Summary - 学习汇总
- 从碰撞点到光源点
- 从光源点到碰撞点
- Project
- GGB
判断是否在阴影比较简单
只要判断我们的碰撞点,往光源方向过程中是否有其他几何体挡住即可。
这里我们假设点光源是一个无体积的奇点
从碰撞点到光源点用下面的图理解:只要我们的视野(或是相机:Eye)中的Raymarching几何体碰撞点HitPos
,指向LightPos
之间如果有几何体挡住了,那就认为是在阴影中,下图HitPos
在指向LightPos
再次Raymarching步进过程中又碰撞到了ShadowHitPos
点,如果HitPos
点就是在阴影中。
下面是不在阴影下的HitPos
,可以看到HitPos
与LightPos
之间是没有其他几何体的:
核心代码是:
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
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脚手架写一个简单的页面?