终于写出了一个能看的效果,来讲讲我是怎么做的

首先,参考了一下阴影绘制的过程,以灯光为参考中心,绘制出一个模型的z-buffer图,储存了到灯光最近的点的距离,并储存为一个贴图

然后,回到眼睛为参考中心,将模型上的每一点还原到之前那个以灯光为参考中心的坐标世界中,求出其坐标,将它的x, y坐标由 [-1, 1] 放缩为 [0, 1] ,因为在贴图中坐标范围是 [0, 1]。然后将两个z值相减,就能得到从灯光看过去,模型每个面片的“厚度”。

厚度的不同决定了光线在皮肤中的衰减程度。加上一张一维的深度颜色贴图,就能得到一个比较好的结果啦,可以从下图中看到,耳朵以及皮肤的边缘处都是红色的

然后将这个效果叠加到原来的贴图上

对比一下原图,看上去红润了许多

再换个角度看看-鼻子周围比较薄的皮肤出现了红红的效果

对比原图