You need to enable JavaScript to run this app. JavaScript光线追踪示例:反射色全白、自阴影缺失与遮挡异常排查
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript光线追踪示例:反射色全白、自阴影缺失与遮挡异常排查

迷你JS光线追踪三类常见问题根源定位

镜面反射固定返回纯白[255,255,255](对应raytracingV2.js 114-124行)

  • 优先核对反射向量的计算逻辑:反射公式的点积符号写反是最高发的问题,计算错误会导致反射方向直接指向相机所在方向,第一次递归就会命中场景背景的纯白预设值,完全跳过实际的反射目标。
  • 检查递归终止判断条件:如果把反射追踪的深度判断逻辑写反(比如将depth >= maxReflectionDepth误写为depth <= maxReflectionDepth),会在第一次进入反射分支时直接触发终止逻辑,返回兜底的纯白返回值。
  • 排查specular属性的读取链路:确认物体的specular字段在计算时没有出现读取错误,导致反射计算分支被直接跳过,走了默认的纯白返回分支。
  • 确认反射光线的起点偏移:反射光线的计算起点必须从物体表面交点沿法线方向加1e-4量级的微小偏移,否则会因为浮点精度问题立刻和当前相交的球体自交,无法追踪到真实的反射目标。

球体可正常投射光源方向阴影,但无法生成两球之间的自阴影(重点排查isLightVisible函数,对应raytracingV2.js 89-98行)

  • 核对阴影射线的最大距离截断:函数内计算遮挡点时,必须将射线的有效相交距离限制在「表面交点到光源的直线距离」以内。如果缺失这个截断逻辑,任意在射线延长线上、位于光源另一侧的物体都会被判定为遮挡物;反过来如果比较距离时没有用单位方向向量做归一化计算,就会出现两球之间的遮挡判断完全失效的情况。
  • 检查阴影射线的起点偏移:从表面交点指向光源的阴影射线,必须加沿法线方向的微小偏移,否则会因为浮点精度问题,将当前所在的球体误判为自身的遮挡物。
  • 确认相交遍历的过滤逻辑:计算阴影射线相交时,必须排除当前交点所属的物体,避免自遮挡的干扰。

场景物体前后遮挡关系错乱

  • 核对主光线的最近距离保留逻辑:主光线遍历所有物体求交时,必须始终保留所有有效交点中距离相机最近的结果,如果错误保留了最远交点,就会出现靠前物体被靠后物体反向遮挡的问题。
  • 检查球体求交的有效根过滤:求解球体一元二次方程得到的两个t值,必须过滤掉t <= 0的无效交点(也就是射线反方向的交点),否则会把球体背面的位置纳入距离比较,直接打乱前后遮挡顺序。
  • 排查浮点精度带来的随机错位:所有二次发射的光线(阴影、反射)如果没有加微小的起点偏移,会出现无规律的遮挡错位,和实际的物体前后关系不匹配。

内容的提问来源于stack exchange,提问作者Piferrer Sagrera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 14:06:05