当前位置: 华文星空 > 心灵

如何通过想象画出水?

2020-10-13心灵

其实也很简单,我们都知道水正常情况下是一种透明的流体,那么就可以开始了:

第一步 我们要想清楚水是什么样的 形状 ,如果是一坨立方形的水,那看起来肯定不像水。为了简化问题,我们不妨为要画的水设置一个初始形态,然后把这一滩水分解成很多小颗粒。对每一个小颗粒套用纳维斯托克 (Navier–Stokes)方程:

\frac{\partial \textbf{u}}{\partial t}=-(u\cdot \triangledown)\textbf{u}+v\triangledown^{2} \textbf{u}-\frac{1}{d}\triangledown p+f

其中u为速度场、p为压力场、v为速度、d为密度、f为外力、倒三角Del代表

\left( \frac{\partial}{\partial x}, \frac{\partial}{\partial y}, \frac{\partial}{\partial z} \right)

重复想象几十几百次就可以知道水的外形是什么样了,颗粒细分越多,结果就越贴近生活!

第二步 开始 上色 。首先我们要想清楚主光源在哪里,以确定大致受光。同时因为水是非常光滑的,会反射周边环境,我们也需要考虑周围是什么样。我们可以把周围的环境浓缩在一起想象成一个球,然后想象这个球发射的光照射到我们那一摊水上是什么样子。

我们首先要想象光到达水面时的衰减程度,即有多少亮度在传播过程中损失了。这个问题可以方便的通过平方反比定律得出:

\text{intensity}\propto \frac{1}{{\text{distance}}^{2}}

当光到达水面时,一部分被反射,一部分被折射。所以我们需要考虑有多少光是反射,多少是折射。一般来说,入射角度越大,反射越多;入射角度越小,折射越多。但具体是多少呢?这里我们可以使用菲涅尔等式 (Fresnel equation),但更容易想象的是双向反射分布函数 (Bidirectional reflectance distribution function),即:

f_{\text{r}}(\omega _{\text{i}},\,\omega _{\text{r}})\,=\,{\frac {\operatorname {d} L_{\text{r}}(\omega _{\text{r}})}{\operatorname {d} E_{\text{i}}(\omega _{\text{i}})}}\,=\,{\frac {\operatorname {d} L_{\text{r}}(\omega _{\text{r}})}{L_{\text{i}}(\omega _{\text{i}})\cos \theta _{\text{i}}\,\operatorname {d} \omega _{\text{i}}}}

其中 \omega _{\text{r}} 是面对眼睛的向量, \omega _{\text{i}} 是面对光源的向量。和第一步一样,只要把水面分成很多小块,逐一处理就能想象出整体的水会是什么样子。

这样想象出来的结果还是单一的光强,为了把水画的色彩斑斓,只需要把上述过程重复两遍,得到 \left( R,G,B \right) 的格式就可以啦!

怎么样,很简单吧!

上边虽然大多是玩笑,但想把水画像,不清楚反射折射是很困难的。当然水在卡通化、风格化或漫画作品中的处理还是有套路可循的,只要不是零基础小白或是「绘圈太太」,稍加临摹都能掌握。