美术工作者如何点亮TA的技术（Technical ）技能树？
AO是什么，我上大学的时候没人跟我说清楚过。老师只说这是AO贴图，贴到模型上能够增加体积感。我是美术出身，面对背后的数学原理，本篇只希望讲得浅显易懂些，并将过程可视化出来。 举个例子，就好比一个人站在阳光下为什么腋下给人感觉会更暗一点？除去阴影的影响，还有一部分原因是，胸腔，大臂，腋窝这三者之间结构形态，导致了光线在反弹时被遮挡的概率增大，从而形成遮蔽。 Ambient Occlusion 全称环境光遮蔽，用于描述模型自身几何的遮蔽信息，也是绘画里常说的阴影，结构卡点。其算法有几种，而本篇讲的是顶点投射光线AO，即模贴制作中需要预计算烘焙的部分。如果你有幸看过相关文章，多少听说过AO计算的过程是半球面上对可见性函数的积分。 综上，概括几点，并基于houdini实现： 通过Sample_direction_cone的方法，可以在给定圆锥角的锥面上生成点，并返回单位向量，是实现半球射线积分的方法其一。当锥形最大角度为90度时，采样范围即半球状。 Center 输入中心点的方向, 不需要归一化, 计算时获取当前顶点的法向. 即center = v@N; Maxangle 输入是弧度制，可以通过角度来转换. 重点是，只要u在[0,1]区间, 采样样本都落在圆锥最大角度内。即圆锥角度为90度时, 就是在半球内进行采样。 u（u.x, u.y） 输入[0,1]之间一组数字,  设置采样点在单位锥面上的位置，个人觉得与俯仰角和偏转角类似。 随机采样：即rand(u), 正好返回一个区间为[0,1]的随机值，即保证了样本都落在锥角以内。 Return 返回一个单位向量, 你也可以认为是某个采样点的位置或方向。 2. 射线求交 orig 射线的起始点。orig = @P * (@N * 0.001)。 dir 射线的方向和最大距离，此处不需要归一化。 &p,&uvw 若射线和图元相交，则返回世界空间中的点的位置，以及相交处的图元参数。 return 击中返回1，否则-1。 由于返回的rayDir是单位向量(O,P1)，即采样点为P1，假设射线发射的起始点是模型上任意一点P，为了确保射线能朝顶点法线正方向发射，得令单位向量rayDir乘以一个缩放量，使dist(o,p2)>dist(o,p)即可。 即 rayDir= rayDir * maxDist; 该步骤通过发射大量的射线样本，求交，返回标识符。即可见性函数，积分。 回到那句话，计算AO的过程本质上是半球面上对可见性函数的积分。 3. 遮挡概率 假设，从某个顶点处发射200条射线求交，后将每条射线的击中的结果相加再除以采样个数，这样我们通过这200个样本就能大致评估该点被周围物体遮挡的概率。 所以，最后积分的结果 / 采样的次数 = 概率。 通常积分标识的是射线相交，所以最终用作遮蔽颜色还需反相一下。 最终代码如下： 