产生油性/污染性水?


19

那里的所有着色器向导都具有如何实现油性/污染水效果的想法,类似于以下内容:

油性水

理想情况下,水不是均匀油性的,而是可以从某些来源(例如化工厂的排污口)中产生油,然后扩散到整个水体中。对于这部分,我的想法是保留“油图”作为2D纹理,该纹理确定水面上每个点的油密度。它会随着水的倾斜而自然扩散并移动;此时,卵性(我对动态波进行了波粒模拟,并且已经在水面上进行了类似的泡沫处理)。但是,由于油可能不会以与水相同的速度运动,因此我不确定这在物理上的正确性。

而且我不知道如何制作所有那些令人迷惑的颜色:-)。有什么想法吗?


使用纹理..?色度的径向渐变,请施加一些变形
。.– bobobobo

@bobobobo-您看的方向会影响显示的颜色,但是... youtube.com/watch?v=NRtUoMG16ZU
罗伯特·弗雷泽

1
您将要基于en.wikipedia.org/wiki/Thin-film_interference应用着色器,但是我不知道如何编写一个着色器。
jzx

2
gamedev.net/page/resources/_/technical/…)我无法提一个答案,因为我不知道这个话题
horatio

Answers:


25

浮油颜色的物理基础是虹彩,并且还与牛顿环有关。具体地,油层的厚度约为光的波长。由于光在任何给定波长下都从油的顶面和底面反射,因此在某些角度上两次反射将异相并相互抵消。在其他角度,反射将同相并加在一起。对于每种波长,这都以不同的角度发生,因此用白光照射油会产生所有这些颜色。如果以单个频率(例如激光)照亮,则只会看到一系列明暗环。

如果您忽略了油层中的折射,只是弄清楚了情况的几何形状,您会发现对于任何给定波长,反射光的亮度都应像

sin(2.0 * pi * oilThickness / (dot(L, H) * wavelength)) * 0.5 + 0.5

从理论上讲,应该在所有波长上进行积分,但实际上,您可以只对红色,绿色和蓝色进行操作-分别说700、550和400 nm。改变油的厚度将改变彩色环的表观半径。我可能会将其包装2.0 * pi * oilThickness / wavelength为提供给着色器的单个RGB值,作为统一值。如果需要,您可以将其乘以纹理以模拟不同厚度的油-这可能就是上面图像中提供大多数有趣纹理的原因。

这将产生RGB颜色值,您可以将其乘以BRDF。该dot(L, H)因子将用于点/定向光,您也可以dot(N, V)在其中替代以将其应用于环境贴图反射。

免责声明:我没有在着色器中尝试过此操作,只是绘制了一些图表并说服自己“应该工作” ...因此,如果您尝试尝试,请告诉我结果!:)


酷的东西。顶部和底部油表面反射的原因是,有些波在顶部反射,而另一些则被折射。这些折射波前进到波顿表面,在那里它们可以再次被折射或反射。
dsilva.vinicius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.