Cinema 4D / 材质 / 灯光

【OC】使用OC创建雾 – 翻译文章

已经过作者授权。

原文链接:https://inlifethrill.com/fog-octanerender-cinema-4d/

Knock-knock motherfuckers!

冬天来了!没错,你知道的,迷人的雾也随之而来。我收到了不少邮件问我关于我的一些渲染中的雾化效果。这篇文章我们将会尝试使用“Environment”标签中“Medium”参数制作一些场景,希望最终能得到一些好看的东西。

注意,完成这篇文章所需要的一些信息要么很难找到,要么根本不存在。考虑到这一点,因为物理或科学的精度而哭泣将被视为“meh”一样。只是说一下而已。(应该是什么梗,可惜没get到)

那么到底什么是雾呢?最主流的回答是“低空的云”,这是正确的。水蒸气凝结成非常小的液滴时会形成雾,悬浮在空气中。但是OC渲染器认为,没有“低空的云”这种东西存在,只有能够吸收和(或)散射光的“Medium(介质)”。来看下我们的场景案例。

大气层雾/默认状态

一个非常简单的场景 — 一个平面,几棵树和一个用来照亮场景的HDR图片。或许对于雾来说最重要的是距离。你需要一个开阔的区域。这个场景中的地形是250m x 250m,用在这里足够了。我们感兴趣的参数就在“Environment”标签下。注意,标签的模式必须为“Primary Environment”。

大气层雾/C4D场景搭建
大气层雾/环境介质

看呐!一个“Add Fog(添加雾)”的按钮!听起来很方便。我们来试一下,没准这就是我们想要的。

大气层雾/空白

唔…这个并不是很有用对吧?不管怎么说,“Add Fog”是一个预设,我们不想用预设。为什么?因为我们想自己创建,这样才可以理解其中的原理。所以撤销一下,并手动的在“Medium”框中导入“Scattering Medium”节点。

很好,现在我们有了一个简单的开头。虽然渲染还是黑色。让我们深入“Medium”来探索为什么。

“Scattering Medium”没有什么新东西,重要的是它的参数意义于大气层雾的对应关系。

“Absorption”控制着光被“Medium”吸收的有多快,在这里就是雾的区域。0值表示没有吸收。光子进出“Medium”将不会有能量损失。渲染结果也不会有任何改变。1值表示最强的吸收,将不会有光子穿过,并且“Medium”将会被渲染为黑色。

让我们更进一步。根据吸收的定义,我们应该能够解释为什么会渲染是黑色。“但是等一下,Absorption中并没有导入任何节点,它是怎么影响渲染的呢?”这是个好问题。一个假设是空的Absorption意味着值为0,没有吸收。唔…或许真的是0,但是Invert选择框将它转成了1.听起来很符合逻辑,我们把Invert取消勾选然后再渲染一次。

大气层雾/空白

这没道理啊!看起来似乎在Absorption域为空的时候有一个硬编码(或许是0.5或者50%灰色)。所以即使我们Invert它,我们最后还是得到同样的值。不过这个重要吗?¯\_(ツ)_/¯

“但是这里是一个硬编码值,比如0.5,我们至少也应该能看到一些树不是吗?”是的,这就是Density参与的地方,它对于其他参数扮演着一个倍增器的作用。它的默认值为100乘以任何其他的参数,“吸收”、“散射”和“发射”通道等等。这就解释了为什么我们在LV窗口中渲染的仍然是纯黑。

好,受够了这么多废话了。导入一个FloatTexture节点,设置为0.确保Invert没有被勾选。最终看起来应该是这个样子,尤其是使用浮点值时。

这是我们使用Absorption所有的相关功能了。它应该设置为0,让光子可以全部穿过,希望现在一切都好,渲染一下…

接下来就是有意思的部分了-Scattering。重申一次,不管你在这里输入什么值,都会被被上面的Density乘以(缩放)。现在你有两个选择:锁住Scattering调整Density,反之亦然。不管哪种方式,都可以得到相同的结果。个人来说我倾向于第一种,锁住参数是什么意思呢?就是为其定义一个常量然后再也不去改变它。所以我们先设置Scattering为0.1。这就是这部分的全部内容了。

基于上面提到的,让Density作为我们的主要操控点,这很好。而且很明显,默认值100对于雾来说太厚重了,我们什么都看不到。降低Density直到我们能够看到前景为止。不用担心背景还是太朦胧。先让前面的树看起来美观清晰就好。大多数情况下0.1就能得到一个很好的效果。

如果一切都在计划之内,你应该可以在我们的树林中看到微微的薄雾了。

现在如果你手动拖拽滑动条,而不是直接键入0.1,你或许注意到一个有趣的事情。没有一个值能够让我们得到后面的图的效果。嗯…确实是这样,为什么呢?因为这里有一个有意思的部分,据我们所知,雾是在Medium中的,我们一直没有提过,Medium也是有体积并且能缩放的。理想情况下,它应该与我们创建的场景的边界框想匹配,或者非常接近。因此,我们知道Medium的尺寸应该是多少吗?是的,我们是知道的,跳出Scattering节点,检查Thickness后面的值。

它的默认值为10.我能想象出这代表10m。希望确实是这样,这很有意义。回想一下,之前我们说过这个场景是250m宽/长。因此,10相比250,并没有匹配我们的场景对吗?进一步思考,Medium使用的值的范围仅仅是Scattering节点传递的信息的4%。我们把Thickness设置为250然后重新渲染。

终于!我们得到了一个清晰的前景和一个雾化的背景。此外,我们已经缩小了唯一的控制参数 — Denstiny。随便调节它来让雾离摄像机更远或更近吧!Thickness现在的功能有点类似不透明度参数,它只是让所有的东西更多或更少。此外,它可以作为Medium的扩展机制。大多数情况下,我们只需要调节Density。

下面是两张渲染图,低Density和高Density。Talk again Internet 🙂

打赏

Leave a Reply

Your email address will not be published. Required fields are marked *