Об’єми – Volumes

Volume rendering is used to render various effects that cannot be represented by hard surfaces alone.

  • Smoke, fire or clouds are set up using a volume object or fluid simulation, with only a volume shader.

  • Meshes can also be used to create such shapes by removing the default surface shader and using a volume shader with the mesh shape defining the volume bounds and textures defining the volume density.

  • Mist is created with a volume shader for the world, or with a large mesh object encompassing the scene.

  • Absorption in glass is simulated by combining a glass surface shader with refraction and a volume absorption shader for the interior of the object.

Відтінювання – Shading

Принциповий Об’єм – Principled Volume

Principled Volume – «Принциповий Об’єм» – це фізично базований шейдер об’ємів, що може використовуватися для створення широкого діапазону матеріалів об’єму. Він підтримує розсіювання, поглинання та емісію в одному, легкому для використання, вузлі. Вогонь може бути рендерено за допомогою емісії чорного тіла – blackbody emission.

../../../_images/render_materials_components_volume_principled.jpg

Дим та вогонь, рендерені за допомогою шейдера Principled Volume.

Компоненти Об’єму – Volume Components

Для більшого керування компоненти відтінювання об’єму можуть вручну комбінуватися у власний уклад шейдера.

  • Volume Absorption – «Поглинання Об’ємом» буде поглинати частину світла, як воно проходитиме через об’єм. Це може використовуватися для відтінення, наприклад, чорного диму або забарвлених скляних об’єктів, чи змішуватися з вузлом Volume Scatter. Цей вузол подібний до вузла Transparent BSDF у тому, що він блокує частину світла та дозволяє іншому світлу проходити прямо крізь.

  • Volume Scatter – «Розсіювання Об’ємом» дозволяє світлу розсіюватися в інших напрямках, як воно потраплятиме на частинки в об’ємі. Анізотропія – anisotropy визначає, в якому напрямку світло більш ймовірно буде розсіюватися. Значення 0 буде давати рівномірне розсіювання у всіх напрямках (дещо подібно як вузол Diffuse BSDF), від’ємні значення дозволяють світлу розсіюватися здебільшого назад, а додатні значення дозволяють світлу розсіюватися здебільшого уперед. Це може використовуватися для відтінення білого диму або хмар, наприклад.

  • Emission – «Емісія» буде емітувати світло з об’єму, наприклад, для вогню.

../../../_images/render_materials_components_volume_node.jpg

Поглинання Об’ємом, Розсіювання Об’ємом та Емісія

Атрибути – Attributes

При рендерингу диму та вогню атрибути об’єму використовуються для визначення форми та відтінювання об’єму. Шейдер Principled Volume буде використовувати їх стандартно, тоді як кастомні шейдери об’ємів можуть використовувати вузол «Атрибут» – Attribute для отримання таких атрибутів, як щільність, колір та температура.

Щільність – Density

Усі шейдери об’ємів мають увід щільності Density. Щільність визначає, наскільки світло буде взаємодіяти з об’ємом, поглинаючись або розсіюючись, та наскільки воно проходитиме прямо крізь об’єм. Для ефектів, таких як дим, ви маєте визначити поле Density для вказування, де в об’ємі є дим і скільки (щільність більша за 0) та де дим відсутній (щільність дорівнює 0).

Об’єми у реальному житті складаються з частинок, вища щільність означає місця, де є більше частинок на одиницю об’єму. Більше частинок означає, що є вищий шанс для світла зіткнутися з частинкою та поглинутися чи розсіятися, а не пройти прямо крізь об’єм.

Об’єми Сітей – Mesh Volumes

Сіті, використовувані для рендера об’єму, повинні бути закритими та розгортними – manifold. Це означає, що у сіті повинні бути відсутні отвори. Кожне ребро повинно бути з’єднане точно з двома гранями, так щоб не було жодних отворів та Т-подібних граней, де три або більше граней з’єднані з ребром.

Нормалі повинні вказувати назовні поверхні для коректних результатів. Ці нормалі використовуються для визначення того, чи промінь проходить чи виходить з об’єму і, якщо вони вказують у неправильному напрямку або у сіті є отвір, то рендерер буде не здатний вирішити, що є всередині, а що є назовні об’єму.

Ці правила такі ж, як для коректного рендерингу заломлення світла склом.

Об’єм Світу – World Volume

Шейдер об’ємів може застосовуватися для всього світу, заповнюючи простір повністю.

Наразі це найбільш корисно для нічних сцен та інших темних сцен, оскільки шейдер поверхонь світу або сонцеві освітлювачі не даватимуть жодного ефекту, якщо використовується шейдер об’ємів. Це через припущення, що фон світу є безкінечно віддаленим, котре є достатньо точним для Сонця, наприклад. Проте, для моделювальних ефектів, таких як туман або розсіювання атмосферою, це не є добрим припущенням, що цей об’єм заповнює увесь простір, оскільки більшість відстані між Сонцем і Землею займає порожній космос. Для таких ефектів краще створювати об’єкт об’єму, що оточує сцену. Розмір такого об’єкта буде визначати, наскільки світло буде розсіюватися чи поглинатися.

Багато Розсіювання – Multiple Scattering

Ефекти реального світу, такі як розсіювання у хмарах або підповерхневе розсіювання вимагають багато відскоків розсіювання. Проте, безупереджений рендеринг таких ефектів може бути шумним, а тому стандартно ця кількість відскоків є нульовою для Cycles, і жодна підтримка не доступна для Eevee. Ефект, що ви отримуєте при рендерингу з нульовою кількістю відскоків для об’єму, відомий як «одиничне розсіювання» – «single scattering», а ефект з більшою кількістю відскоків називається «багато розсіювання» – «multiple scattering».

Для рендерингу матеріалів, як шкіра або молоко, що вимагають багато розсіювання, шейдер підповерхневого розсіювання Subsurface Scattering є більш ефективним та легшим для керування. Зокрема, метод «випадкового ходу» – random walk може точно рендерити такі матеріали.

Для матеріалів, таких як хмари або дим, що не мають добре визначеної поверхні, вимагається рендеринг об’єму. Вони виглядають найкраще з багатьма відскоками розсіювання, але на практиці, можливо, доведеться лімітувати кількість цих відскоків для підтримання часу рендерингу у прийнятних межах.