======Ray======
//Ray 的功能是投影一个 Surface 到另一个 Surface 上//
\\ //Ver 19.5//
----
===工作原理及用途===
//Ray// 的工作流程是这样的:
- 从连接第一输入端的几何体开始
- 按照该几何体上每一个点的**法线方向**
- 将这些点往连接第二输入端的几何体移动
- 直到这些点“撞”上第二输入端的几何体后,移动结束。
==常见应用==
* 普通列表项目模拟一块布铺到了不规则的表面上,物体与物体之间的包裹
* 使用 ''reverse rays'' 选项可以实现类似印记的效果(脚印,车轱辘印等等)
* //Ray// 同样也适用于**点**的投影。
//Ray// 的理想应用条件是将小的面投影到大的面上。
//Ray// 使用的法线可以自定义(使用 vector 选项)。
===常用参数===
^Parameters^Usage^
|Method://Project Rays//| 源几何体上的 Points 按其法线方向投影,直到“撞上” 碰撞几何体(Intersecting)|
|Method://Minimum Distance//| 整个投影会直接寻找距离源几何体最近的碰撞点进行投影。不使用法线,做**包裹类型的应用**时推荐。|
|Transform Points| 碰撞几何体上与投影相交的点,都会移动相交的位置。这个选项勾选后,还有一些用于调整的参数可以使用:''Scale'':缩放,''Lift'':Offset,''Bias'':控制投影起点与相交位置的距离,可以用于控制投影的**起始点**。|
|Intersect Farthest Surface|改变相交的位置条件:从离碰撞几何体最近到最远,通常来说就是几何体的正面和背面。|
|Point Intersection Normal|投影点在相交处得到新的法线值。注意这个法线的值是来自于 Surface Normal,而不是对应相交处点的法线。如果需要得到上述的法线值,直接使用 ''get point attribute'' 选项,指定 ''@N''。|
|verse Rays| 向 normal 的**反方向**发射射线。|
|Max Distance| 选 MAX:投影只会找 MAX 值范围内的相交点。如果方法是 ''minimum distance'':直接删除掉所有 Min 范围外的点。|
==射线不止一条时如何计算投影的最终结果==
|Sample| 指定 Ray 的数量。大于一条的数量会应用 ‘’Ray Combiner‘’ 中的算法进行计算。|
|RayCombiner| 当射线不止一条时,如何计算投影的结果。其所有选项均会影响 ''Point Intersection Normal'' 的结果。|
|RayCombiner://Average ray//|统计所有与碰撞几何体有相交的 Rays,算出这些 Rays 与相交点之间的距离值,并将得到的结果作为最终投影点的位移。|
|RayCombiner://Median ray//| 按 ray 的长度为衡量标准,找出所有 ray 中的中间值,并作为最终的位移结果。|
|RayCombiner://Shortest ray//| 以最**短**的射线长度作为最终的位移结果。|
|RayCombiner://Longest ray//| 以最**长**的射线长度作为最终的位移结果。|
|Create Point Group| 将相交的所有点编组,可以使用 ''Ray Hit Group '' 命名。|
==处理相交区域属性的选项==
|Prim Num Attribute| 获得属性:相交所在位置的 Primitive 的**编号**。|
|Prim UVW Attribute| 获得属性:相交所在位置的**坐标**,以UV坐标的形式表现。|
|Get Point Attributes| 以插值的方式获取碰撞区域的点的属性(需要哪些属性通过下面的选项 Point Attributes 来决定 )。因为 Ray Combiner 控制了插值的方法,因此也会影响到该属性最后的结果。//该属性没有被 normalized//。|
|Prim Num Attribute| 指定要获取的点的属性。指定的属性可以不存在,节点会自动创建;也可以与源几何体上的属性同名,会直接覆盖。当指定获取的属性是 ''@N'',那么 '' Point Intersection Normal'' 将不再生效,最终的法线结果会通过对碰撞区域的点法线值进行插值来得到。|