接上篇:杨超:houdini+unity河流(一)

视频封面

00:07

本篇说foam mask的生成。

我用foam mask标记哪里产生水沫,一般是石头和河岸周围,如图:

当然,手绘是可以的,如果艺术造诣高,可以得到很好的效果。但作为钛铬泥垢artist,我们希望procedural。

生成foam mask分两步:

第一步:生成foam源:

所谓foam源,就是foam从哪里产生,很显然,就是在水流被截住的地方产生,如果一处凸起的法线与水流方向点乘<0,就是被截住。这是最简单的思路,此思路就生成下图中右图那种foam源(效果上很像漫反射著色,只不过光源方向变成了水流方向,不妨称为:漫反射foam源)。如果稍加变化,用flow代替normal,则能生成下图中左图那种八字型foam源。当然也可再作变化生成更奇怪的foam源,随便发挥,开心就好。

第二步:

foam由foam源产生后随水流扩散,显然这个效果可由directional blur模拟--沿著flow方向进行blur。如下图中左图,就是八字型foam源blur的结果。而下图中右图为漫反射foam源blur(同时又加了curl)的结果。(directional blur演算法末尾补充)

上面左图适合表现foam受阻挡后散开的趋势,右图适合表现foam绕过障碍物后又在障碍物后方聚合的趋势,两种foam都有存在,所以我最终用的是两者叠加:

--

补充:

directional blur演算法:

如果是在图像上进行direcional blur,很容易,但现在是要在河面mesh的顶点上进行,其实也不难,只要用xyzdist+primuv组合即可,代码如下:

--

下一篇说wet mask和depthmap。

下一篇:杨超:houdini+unity河流(三)


推荐阅读:
相关文章