01 Май
Allegorithmic бесплатное PBR руководство обновлено
Компания Allegorithmic TA Wes McDermott обновила свои два бесплатных руководства по физическим материалам и рендерингу.
Вы можете прочитать их в Substance Academy: Volume 1 | Volume 2.
CGTELEGRAM
3DJOBS.RU
Tutorial 3djobs.ru
Последние новости о CG-индустрии, 3D-программном обеспечении, уроках, видеороликах, анимации, обзорах, продуктах VFX и многом другом.
Уэс МакДермотт | PBR руководство от Allegorithmic / The PBR Guide by Allegorithmic [2 части] (2018) [PDF] [Ru/En] —
Автор: Уэс МакДермотт / Wes McDermott
Издательство: Самиздат (Allegorithmic)
Жанр: 3D графика, Текстурирование
Язык: Русский, Английский
Формат: PDF
Качество: Изначально электронное (ebook)
Иллюстрации: Цветные
Описание:
Allegorithmic — лидер отрасли в области технологий 3D-текстурирования с его отмеченным наградами набором программ Substance.
Эта книга, написанная Уэсом МакДермоттом и перепроверенная экспертами в этой области, описывает принципы физически корректного рендеринга (PBR) и содержит практические рекомендации по текстурированию PBR.
В первой части книги рассматриваются принципы, лежащие в основе рендеринга на физической основе, начиная со светового луча и заканчивая определением ключевых факторов для правильного PBR. Эта часть очень важна для художников по текстурам, чтобы понять, как свет взаимодействует с объектами.
Вторая часть предлагает практические рекомендации по текстурированию PBR, которые базируются на основах, описанных в первой части: переопределение PBR с художественной точки зрения; обсуждение рабочих процессов металл/шероховатость и зеркальность/глянцевитость, а также рекомендации по созданию физически точных текстурных карт.
Список книг:
PBR руководство от Allegorithmic:
— Том 1 — Свет и материя: Теория физически корректного рендеринга и затенения
— Том 2 — Практические принципы создания PBR текстур
Содержание
Том 1 — Свет и материя: Теория физически корректного рендеринга и затенения
— Световые лучи
— Поглощение и рассеивание – Прозрачность и полупрозрачность
— Диффузное и зеркальное отражения – Теория микроповерхностей
— Цвет
— BRDF
— Сохранение энергии
— Эффект Френеля — F0 (Коэффициент отражения Френеля при 0 градусах)
— Проводники и диэлектрики – Металлы и неметаллы
— Рендеринг в линейном пространстве
— Ключевые характеристики PBR
Том 2 — Практические принципы создания PBR текстур
— Что такое PBR? Каковы его преимущества? Что он значит для художников?
— Подход Metal/Roughness: Диэлектрик F0 / Базовый цвет / Металл /
— Шероховатость / Разрешение и плотность текселя / Достоинства и недостатки
— Подход Specular/Glossiness: Диффузность / Зеркальность / Глянцевость / Разрешение и плотность текселя / Достоинства и недостатки
— Общие карты: Ambient Occlusion / Высоты / Нормалей
— PBR программы Substance: Substance Designer / Substance Painter / Вывод материалов Substance и рендеринг
— Дополнение – таблицы “Поверхность металлическая?” / Значения отражаемости / Сравнение правильных/неправильных текстур
Дополнительная информация:
Книга на английском языке содержит в себе обе части.
Онлайн-версия на английском языке:
Part 1
,
Part 2
Перевод: Леонид Садеков (Специально для XYZ School)
Скриншоты:
Скачать .torrent
Чтобы скачать торрент-файл
Уэс МакДермотт — PBR руководство от Allegorithmic / The PBR Guide by Allegorithmic [2 части] (2018)
Вам нужно Авторизоваться на сайте под своим логином. Если у Вы ещё не зарегистрированы, тогда Вам нужно пройти Регистрацию
PBR_Guide_Vol.1
PBR_Guide_Vol.1
PBR_Guide_Vol.1
PBR_Guide_Vol.1
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 13
The Comprehensive PBR Guide
by Allegorithmic — vol. 1
Light and Matter : The theory of Physically—Based Rendering and Shading
Cover by Gaëtan Lassagne, written by Wes McDermott
vol. 1 — The theory of Physically—Based Rendering and Shading
• Light Rays — 2
• Absorption and Scattering (Transparency and Translucency) — 3
• Diffuse and Specular Reflection — 4
Microfacet Theory — 5
• Color — 6
• BRDF — 6
• Energy Conservation — 7
• Fresnel Effect — 7
F0 (Fresnel Reflectance at 0 Degrees) — 8
• Conductors and Insulators (Metals and Non Metal) — 9
Metals — 9
Non-Metals — 10
• Linear Space Rendering — 11
• The Key Factors — 11
• References — 12
Technical edit by: Cyrille Damez and Nicolas Wirrmann
vol.1 — The theory of Physically—Based Rendering and Shading
Light and Matter
The theory of Physically—Based Rendering and Shading
The Light Ray Model states that a light ray has the
trajectory of a straight line in homogeneous transparent
media such as air. The Light Ray Model also says that the
ray will behave in a predictable manner when
encountering surfaces such as opaque objects or passing
through a different medium such as air to water. This
makes it possible to visualize the path the light ray will
follow as it moves from a starting point to where it
eventually changes into another form of energy such as
heat.
The light ray that hits a surface is called the Incident Ray
and the angle that at which it hits is called the Angle of
Incidence as shown in figure 01.
A light ray is incident on a plane interface between two
media.
When a light ray hits a surface, either or possibly both of
these things can happen:
1. The light ray is reflected off the surface and travels
in a different direction. It follows the Law of Reflection,
which states that the Angle of Reflection is equal to the
Angle of Incidence (Reflected Light).
2. The light ray passes from one medium to another in
the trajectory of a straight line (Refracted Light).
At this point, we can state that light rays split into two
directions: reflection and refraction. At the surface, the
ray is either reflected or refracted and it can be
eventually absorbed by either medium. However,
absorption doesn’t occur at the surface.
Light is a complex phenomenon as it can exhibit properties of both a wave and a particle. As a result, different models
have been created to describe the behavior of light. As texture artists, we are interested in the Light Ray Model as it
describes the interaction of light and matter. It’s important for us to understand how light rays interact with surface
matter because our job is to create textures that describe a surface. The textures and materials we author interact
with light in our virtual worlds and the more we understand about how light behaves, the better our textures will look.
In this guide, we will discuss the theory behind the physics through which physically-based rendering models are
based upon. We will start with a light ray and work up to defining the key factors for PBR.
vol. 1 — The theory of Physically—Based Rendering and Shading
When traveling in an inhomogeneous medium or
translucent material, light can be absorbed or scattered:
1. With absorption, the light intensity decreases as it is
changed into another form of energy (usually heat), and
its color changes as the amount of light absorbed
depends on the wavelength, but the direction of the ray
doesn’t change.
2. With scattering, the ray direction is changed randomly,
the amount of deviation depending on the material.
Scattering randomizes light direction but the intensity
doesn’t change. An ear is a good example. The ear is thin
(absorption is low), so you can see the scattered light
penetrating out of the back of the ear. If there is no
scattering and the absorption is low, rays can pass
directly through the surface such as with glass. For
example, if you are swimming in a pool, which is
hopefully clean, you can open your eyes and see at a
fairly good distance through the clear water. However,
let’s imagine that same pool hasn’t been cleaned in a
while and the water is dirty. The dirt particles scatter the
light and thus make the clarity of the water much lower.
The further light travels in such a medium/material, the
more it is absorbed and/or scattered. Therefore, object
thickness plays a large role in how much the light is
absorbed or scattered. A thickness map can be used to
describe object thickness to the shader as shown in figure
02.
Absorption and Scattering (Transparency and Translucency)
Specular reflection is light that has been reflected at the
surface, as we discussed above in the Light Ray section.
The light ray is reflected off the surface and travels in a
different direction. It follows the Law of Reflection, which
states that on a perfectly planar surface the Angle of
Reflection is equal to the Angle of Incidence. However, it
is important to note that most surfaces are irregular and
that the reflected direction will therefore vary randomly
based on the surface roughness. This changes light
direction, but the light intensity remains constant.
Rougher surfaces will have larger and dimmer looking
highlights. Smoother surfaces will keep specular
reflections focused, which can appear to look brighter or
more intense when looked at from the proper angle.
However, the same total amount of light is reflected in
both cases as shown in figure 03.
Diffuse reflection is light that has been refracted. The
light ray passes from one medium to another and is
scattered multiple times inside the object. Then it is
Diffuse and Specular Reflection
Object thickness plays a large role
in how much the light is absorbed
or scattered
vol.1 — The theory of Physically—Based Rendering and Shading
refracted again out of the object making its way back to
the original medium at approximately the same point
where it went through the first time as shown in figure
04.
Diffuse materials are fairly absorbent, meaning that if the
refracted light travels for too long in that material, it has
a good chance of being completely absorbed. This means
that if the light ever comes out of that material, it has
probably not traveled very far from the point of entry.
That’s why the distance between the entry and exit
points can be neglected. The Lambertian model, which is
usually used for diffuse reflection in a traditional shading
sense, does not take surface roughness into account, but
there are diffuse reflection models that do such as Oren-
Nayar.
Materials that have both high scattering but low
absorption are sometimes referred to as «participating
media» or «translucent materials». Examples of these are
smoke, milk, skin, jade and marble. Rendering of the
latter three may be possible with the additional modeling
of subsurface scattering where the difference between
the ingoing and outgoing point of the light ray is no
longer neglected. Accurate rendering of medium with
highly varying and very low scattering and absorption like
smoke or fog may require even more
expensive methods such as Monte Carlo
simulations.
Rougher surfaces will
have larger and dimmer
looking highlights
vol. 1 — The theory of Physically—Based Rendering and Shading
In theory, both diffuse and
specular reflection are dependent
on the surface irregularities
where the light rays intersect. In
practice though, the effect of
roughness on diffuse reflection is
much less visible because of the
scattering happening inside the
material. As a result, the
outgoing direction of the ray is
fairly independent of surface
roughness and the incident
direction. The most common
model for diffuse reflection
(Lambertian) completely neglects
it.
In this document, we have
referred to these surface
irregularities as surface
roughness. Actually, it is often
referred to by several names
such as roughness, smoothness, glossiness or micro-
surface, depending on the PBR workflow in use, but they
describe the same aspect of a surface, which is sub-texel
geometric detail.
These surface irregularities are authored in the roughness
or glossiness map depending on the workflow you are
using. A physically-based BRDF is based on the
microfacet theory which supposes that a surface is
composed of small-scaled planar detail surfaces of
varying orientation called microfacets. Each of these
small planes reflects light in a single direction based on
its normal as shown in figure 05.
Micro-facets whose surface normal is oriented exactly
halfway between the light direction and view direction will
reflect visible light. However, not all microfacets where
the microsurface normal and the half normal are equal
will contribute as some will be blocked by shadowing
(light direction) or masking (view direction) as is
illustrated in figure 05.
The surface irregularities at a microscopic level cause
light diffusion. For example, blurred reflections are due
to scattered light rays. The rays are not reflected in
parallel so we perceive the specular reflection as blurred
as shown in figure 06.
The surface irregularities at a
microscopic level cause light
diffusion
vol.1 — The theory of Physically—Based Rendering and Shading
The color of a surface
(which is to say the color
that we see) is due to
which wavelengths are
emitted by the light source,
which are absorbed by the
object and which others
are reflected both
specularly and diffusely.
The remaining reflected
wavelengths are what we
see as color.
For example, the skin of an
apple mostly reflects red
light. Only the red
wavelengths are scattered
back outside the apple skin
and the others are
absorbed by it as shown in figure 07.
It also has bright specular highlights the same color as
the light source because with materials like the skin of an
apple that are not electrical conductors (dielectrics),
specular reflection is almost independent of wavelength.
Therefore, for such materials the specular reflection is
never colored. We will discuss more about the different
type of materials (metals and dielectrics) in later sections.
A Bidirectional Reflectance Distribution Function (BRDF)
simply put is a function that describes the reflectance
properties of a surface. In computer graphics, there are
different BRDF models some of which are not physically
plausible. For a BRDF to be physically plausible, it must
be energy conserving and exhibit reciprocity. For
reciprocity, I am referring to the Helmholtz Reciprocity
principle, which states that incoming and outgoing light
rays can be considered as reversals of each other without
affecting the outcome of the BRDF.
The BRDF used by Substance’s PBR shaders is based on
Disney’s «principled» reflectance model, which is based on
the GGX microfacet distribution. GGX provides one of the
better solutions in terms of specular distribution in that it
has a shorter peak in the highlight and a longer tail in the
falloff, which is to say that it looks
more realistic as shown in figure 08.
Object GGX provides
one of the better
solutions in terms of
specular distribution
Substance PBR shaders use the
GGX microfacet distribution
vol. 1 — The theory of Physically—Based Rendering and Shading
Energy Conservation plays a vital role in physically-based rendering solutions. It states that the total amount of light
re-emitted by a surface (reflected and scattered back) is less than the total amount it received. In other words, the
light reflected off the surface will never be more intense than it was before it hit the surface. As artists, we don’t have
to worry about controlling Energy Conservation. This is one of the nice aspects of PBR in that energy conservation is
always enforced by the shader. It’s part of the physically-based model and it allows us to focus more on art rather
than physics.
The Fresnel reflection factor also plays a vital role in
physically-based shading as a coefficient of the BRDF.
The Fresnel Effect as observed by French physicist
Augustin-Jean Fresnel states that the amount of light you
see reflected from a surface depends on the viewing
angle at which you perceive it.
For example, think of a pool of water. If you look straight
down, perpendicular to the water surface, you can see
down to the bottom. Viewing the water surface in this
manner would be at zero degrees or normal incidence,
normal being the surface normal. Now, if you look at the
pool of water at a grazing incidence, more parallel to the
water surface, you will see that the specular reflections
on the water surface become more intense and you may
not be able to see below the surface of the water at all.
Fresnel is not something that we control in PBR as we did
in traditional shading. Again, this is another physics
aspect that is handled for us by the PBR shader. When it
comes to viewing a surface at a grazing incidence, all
smoothed surfaces will become a nearly 100% reflector
at a 90 degree angle of incidence.
For rough surfaces, reflectance will become increasingly
specular but we won’t approach 100% specular
reflection. What matters then is the angle between the
normal of each microfacet and the light, not the angle
between the normal of the «macrosurface» and the light.
Because the light rays are dispersed into different
directions, the reflection appears softer or dimmer. What
you get at a macroscopic level is a bit like the average of
all the Fresnel effect you would have for the microfacets.
For rough surfaces, reflectance will become increasingly
specular but we won’t approach 100% specular reflection
vol.1 — The theory of Physically—Based Rendering and Shading
F0 (Fresnel Reflectance at 0 Degrees)
When light hits a surface straight on or perpendicularly (0
degree angle), there is a percentage of that light that is
reflected back as specular. Using the Index of Refraction
(IOR) for a surface, you can derive the amount that is
reflected back and this is referred to as
F0 (Fresnel 0) as shown in figure 09.
The amount of light that is refracted
into the surface is referred to a 1-F0.
The F0 range for most common
dielectrics will be from 0.02 — 0.05 and
for conductors the F0 range will be
0.5-1.0. Thus, the reflectivity of a
surface is determined by the refractive
index as shown in the following
equation from Sebastien Lagarde’s
«Feeding a Physically-based Shading
Model» blog post as shown in figure 10.
It is the F0 reflectance value that we
are concerned with in regards to
authoring our textures. Non-metals
(dielectrics/insulators) will have a
greyscale value and metals (conductors)
will have an RGB value. With regards to
PBR and from an artistic interpretation
of reflectance, we can state that for a
common smooth dielectric surface, F0 will reflect
between 2% and 5% of light and 100% at grazing angles
as was shown in figure 09.
The dielectric (non-metal) reflectance values don’t
actually change very drastically. In fact, when altered by
roughness the actual changes in value can be hard to
see. However, there is a difference in the values. In
figure 11, you can see a chart that shows the F0 ranges
for both metal and non-metal materials.
Notice that the ranges for non-metals do not deviate
from each other drastically. Gemstones are an exception
as they have higher values. We will discuss F0 as it
specifically relates to conductors and insulators a bit later.
vol. 1 — The theory of Physically—Based Rendering and Shading
When creating materials for PBR, I find it helpful to think in terms of metal or non-metal. I simply ask myself if the
surface is metal or not. If it is, I follow one set of guidelines and if it’s not, I follow another. This can be a rather
simplistic approach as some materials may not fall into these categories such as metalloids, but in the overall process
of creating materials, distinguishing between metal and non-metal is a good approach and metalloids are an exception.
To set up guidelines for materials, we first must understand what we are trying to create. With PBR, we can look at
the properties of metals (conductors) and non-metals (insulators) to derive this set of guidelines.
Conductors and Insulators (Metals and Non-Metals)
Metals (conductors) are good conductors of heat and
electricity. Simply put, the electric field in conducting
metals is zero and when an incoming light wave made of
electric and magnetic fields hits the surface, it is partially
reflected and all the refracted
light is absorbed. The reflectance
value for polished metal is going
to be high at a range of about
70-100% reflective as shown in
figure 12.
Some metals absorb light at
different wavelengths. For
example, gold absorbs blue light
at the high-frequency end of the
visible spectrum so it appears
yellow as a result. However,
since the refracted light is
absorbed, the color tint of
metals come from the reflected
light and thus in our maps, we
don’t give metals a diffuse color.
For example, in the specular/
gloss workflow, raw metal is set
to black in the diffuse map and
the reflectance value is a tinted
color value in the specular map.
With metals, the reflectance
value will be RGB and can be tinted. Since we are
working within a physically-based model, we need to use
real-world measured values for the metal reflectance in
our maps.
Another important aspect with metals in terms of
texturing is that metal can corrode. This means that
weathering elements can play a large role in the
reflective state of metal. If the metal rusts for example,
this changes the reflective state of the metal and the
corroded areas are then treated as a dielectric material as
shown in figure 13.
Also, metal that is painted is not treated like a metal but
rather a dielectric as well. The paint acts as a layer on
top of the raw metal. Only the raw metal exposed from
chipped away paint is treated as metal. The same goes
for dirt on the metal or any matter that obscures the raw
metal.
I stated above that I always ask myself if a material is a
metal or not. However, to be more precise, the question
should also inquire the state of the metal such as is it
painted, rusted or covered in dirt/grease. The material
will be treated as dielectric if it is not raw metal and there
could be some blending between metal and non-metal
depending on the weathering.
Refracted light is absorbed, the color tint of metals come from
the reflected light and thus in our maps, we don’t give metals a
diffuse color
Weathering elements can play a
large role in the reflective state of
metal
vol.1 — The theory of Physically—Based Rendering and Shading
Non-metals (insulators/dielectrics)
are poor conductors of electricity.
The refracted light is scattered and/
or absorbed (often re-emerging from
the surface) and thus they reflect a
much smaller amount of light than
metals and will have an albedo color.
We stated earlier that the value for
common dielectrics would be around
2-5% based on the F0 as computed
by the index of refraction. These
values are contained within the
linear range of 0.017-0.067 (40-75
sRGB) as shown in figure 14. With
the exception of gemstones, most
dielectrics will not be greater than
4%.
Just as with metals, we need to use real-world measured
values, but it can be difficult to find an IOR for other
materials that are not transparent. However, the value
between most common dielectric materials doesn’t
change drastically, so we can utilize a few guidelines to
follow in terms of reflectance values, which we will cover
in volume two.
The value for common dielectrics is
around 2-5% based on the F0 as
computed by the Index of
Refraction (IOR)
vol. 1 — The theory of Physically—Based Rendering and Shading
Linear space rendering can take up an entire article all on its own. So, we won’t go in-depth into the specifics.
However, the important takeaway is that computations are calculated in linear space.
Simply put, linear space rendering provides correct math for lighting calculations. It’s about creating an environment
that allows light to behave as it does in the real world. In linear space, the gamma is 1.0. However, for this to look
correct to our eyes, the linear gamma needs to be shifted. Gamma-encoded space (sRGB) compensates for images
that are displayed on a computer screen. The value of the image is adjusted for display.
When computing color values and performing operations on colors, all computations should be performed in linear
space. A simple way to look at it is that if an image is to be displayed in the render such as base color or diffuse, then
these maps need to be set as sRGB. What happens in Substance is that if the image is tagged as sRGB, it will be
converted to linear for calculations and then set back to sRGB for display. However, when you store mathematical
values that purely denote surface attributes in a texture such as roughness or metallic, then these maps must be set
as linear.
Substance handles the conversion between linear/sRGB space for inputs automatically as well gamma-correction on
the computed result in the rendered viewport. As the artist, you don’t need to worry about the internal working of
linear-space computations and conversions in the Substance pipeline. When using Substance materials via the
Substance Integration plugin, the conversions for linear space are also handled automatically.
However, it’s important to understand the process, as when Substance maps are utilized as exported bitmaps and not
Substance materials, you may need to manually handle the conversions depending on the renderer you are using. You
need to know that base color/diffuse maps are sRGB and the rest are linear.
Now that we have explored the basic theory behind the physics, we can derive some key factors for PBR.
1. Energy Conservation. A reflected ray is never brighter than the value it had when it first hit
the surface. Energy Conservation is handled by the shader.
2. Fresnel. The BRDF is handled by the shader. The F0 reflectance value has minimal change
for most common dielectrics and falls within a range of 2% — 5%. The F0 for metals is a high
value ranging from 70-100%.
3. Specular intensity is controlled through the BRDF, roughness or glossiness map and the F0
reflectance value.
4. Lighting calculations are computed in linear space. All maps that have gamma-encoded
values such as base color or diffuse are usually converted by the shader to linear, but you may
have to make sure that the conversion is properly done by checking the appropriate option
when importing the image in your game engine or renderer. Maps that describe surface
attributes such as roughness, glossiness, metallic and height should be set to be interpreted as
linear.
When using Substance materials via the Substance Integration
plugin, the conversions for linear space are also handled
automatically.
vol.1 — The theory of Physically—Based Rendering and Shading
1. Physically-Based Shading at Disney Brent Burley, Walt Disney Animation Studios.
https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf
2. Microfacet Models for Refraction through Rough Surfaces
http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf
3. Feeding a Physically-Based Shading Model by Sebastien Lagarde
Feeding a physically based shading model
4. An Introduction to BRDF Models by Daniël Jimenez Kwast
http://hmi.ewi.utwente.nl/verslagen/capita-selecta/CS-Jimenez-Kwast-Daniel.pdf
Allegorithmic develops the new generation of 3D texturing software: Substance Painter, Substance
Designer and Bitmap2Material. With most AAA game studios using these tools, Substance has become the
standard for creating next-generation PBR (Physically Based Rendering) assets.
For more information on Substance, please visit our website at
www.allegorithmic.com
Продолжаем серию уроков о том, как стать художником по поверхностям.
Hello there! Моё имя Денис Кузнецов. Я — программист =)
- Часть 1. Пиксель. Здесь.
- Часть 2. Маски и текстуры. Здесь.
- Часть 3. PBR и материалы. Вы ее читаете.
- Часть 4. Модели, нормали и развертка. Здесь.
- Часть 5. Система материалов. Здесь.
- Часть 6. Погружение в систему материалов. Здесь.
Итак, котятки, погнали! =)
PBR
Расшифровывается эта аббревиатура так: Physically Based Rendering. Что в переводе значит «Основанный на физике рендер». Это важно, так как очень многие переводят PBR как «Физически корректный» — но это не так. Очень много физических явлений света не учитывается при обработке текстур в PBR, поэтому это именно «основанный на физике», а не точные расчеты.
Как мы все знаем, мы не могли бы видеть ни один объект, если бы объекты не отражали свет, который на них падает. Все это работает очень просто — луч света падает на стол, отражается и попадает вам на сетчатку глаза.
В зависимости от поверхности, от ее состояния (отражает ли оно, как зеркало, или имеет шероховатость, есть ли капли грязи / воды / кофе на поверхности, кусок дерева) вам в глаз приходит уже видоизмененный луч (или волна?).
Суть одна — то, как мы видим мир, выстраивается из того, как свет отражается от поверхности объектов. И стандарт PBR описывает то, какие какие физические явления должны учитываться, чтобы свет выглядел максимально кинематографично.
Ниже список статей о том, как работает свет, и как это перенесено в PBR:
- Статья по основам от создателей Substance Painter / Designer здесь. И ее перевод от 2015 года здесь . Ссылка на вторую часть перевода есть на той же странице.
- Статья от Google по их разработке PBR (те же яйки, только в профиль с другими формулами) здесь.
- Статья от MrShoor, который рассмотрел PBR на низкоуровневом программировании шейдеров здесь.
Параметры. Или как настраивается PBR.
Мы рассмотрим PBR с точки зрения общей концепции. Так же рассмотрим детально каждый параметр и то, как формируется PBR.
Из прошлой части статьи мы помним, что PBR на самом деле создается с помощью комбинаций параметров, которые в свою очередь могут состоять из 1-го или нескольких каналов. То есть, PBR состоит из набора параметров:
- Color (Base Color / Albedo). Использует комбинацию из 3 каналов.
- Metallic. Использует 1 канал.
- Specular. Использует 1 канал / 3 канала в зависимости от реализации рендера. об этом будет чуть ниже.
- Roughness. Использует 1 канал.
- Glossiness. Использует 1 канал.
- Ambient Occlusion (далее AO). Использует 1 канал.
- Height. Использует 1 канал.
- Normal map. Использует комбинацию из 3 каналов.
Все параметры, кроме Color и Normal map, используют по 1 каналу, а Color и Normal map — по 3 канала каждый:
- Color использует 3 канала — RGB, чтобы формировать цвет пикселя.
- Normal map использует 3 канала, чтобы сымитировать наклон поверхности. Каждый канал отвечает за наклон по вертикали, горизонтали и глубину соответственно, а значения в этих каналах определяют силу наклона.
Итого, конечный результат картинки состоит из наложения параметров в одном пикселе:
То есть, PBR — это комплекс параметров, которые игровой движок учитывает, чтобы отобразить конечный результат — то, как будет выглядеть объект при освещении, затенении с указанными параметрами через текстуру.
Пиксель и PBR.
В качестве параметров для PBR чаще всего используют текстуры (в серьезных шейдерах и математические расчеты, но об этом в другой главе).
Теперь вернемся к пикселям и объекту. Чтобы объект мог отобразиться на вашем мониторе, его видимую поверхность нужно просчитать. Для этого движок берет видимую поверхность объекта и определяет, какие пиксели на мониторе будет занимать этот объект.
Важно. Игровые движки не особо заморачиваются над тем, какой у вас стоит монитор. Я бы сказал, что они вовсе не знают о вашем мониторе практически ничего. Движку при отображении объекта важно знать, какое разрешение выбрано в вашей игре. И он будет рассчитывать то, как должны выглядеть пиксели, исходя из выставленного разрешения, а не реального положения пикселя на мониторе.
То есть, если вы выставили разрешение 640х480, а у монитора 1920х1080, то движок будет отображать объект в том случае, если он попадает в пиксели при разрешении 640х480. А уже ваш монитор потом попробует расширить получившуюся картинку на все свое рабочее пространство. Или вы можете настроить в мониторе так, чтобы он показывал только используемые пиксели, и тогда картинка окажется маленькой в центре экрана, а незанятые пиксели будут черными.
Когда движок определился с тем, какая часть объекта видна, он начинает каждый пиксель экрана просчитывать.
То есть, движок начинает на каждый пиксель суммировать все параметры PBR текстуры в этом месте объекта, учитывать свет, затенение, отражение и так далее. И результатом расчетов будет то, как выглядит объект на вашем экране.
Именно здесь у людей часто происходит непонимание — почему при одних и тех же параметрах иногда движок может сильно тормозить, а иногда — нет. Дело в том, что видимый объем объекта на экране играет важнейшую роль. Если объект занимает весь экран, а сложность просчета его параметров очень высокая, то всего один объект может сожрать всю производительность, так как каждый пиксель экрана будет обрабатываться под этот объект снова и снова (это касается в большей степени шейдеров, и к ним мы вернемся в другой раз).
Что касается Normal Map, то ее техническая реализация (какие каналы за какой наклон отвечают) разнится от настроек рендера. Так, например, в Unreal Engine 4 канал G отвечает за отрицательное значение наклона по вертикали, а в Unity — за положительное.
Более подробную информацию можно прочитать здесь.
Еще есть огромная всеобъемлющая статья о том, как запекать Normal Map и как с ней вообще работать, на сайте render.ru здесь. Крайне рекомендую прочитывать ее раз в неделю, чтобы усвоить весь материал.
Вот еще один замечательный цикл статей о картах нормалей, который подробно расписывает то, зачем они нужны, какие виды их существуют, и как ими пользоваться правильно. Статья разделена на 4 части: 1 часть. 2 часть. 3 часть. 4 часть.
Ее перевод: 1 часть. 2 часть. 3 часть. 4 часть.
Ссылка на форум обсуждения карт нормалей и высот (параметр Height) здесь.
И википедийное описание рельефного текстурирования здесь.
Теперь стоит отметить, что PBR имеет несколько различных реализаций. Все они схожи между собой и пользуются все теми же каналами пикселей для корректировки конечного результата. Разница лишь в формулах и в конечном результате. Обычно разделяют 2 типа реализации:
В первом типе учитываются параметры Color-Metal-Roughness, во втором — Diffuse-Specular-Glossiness. Именно во втором случае параметр Specular имеет 3 канала.
Оба типа реализации используют одинаково 3 параметра — АО, Normal map, Height.
Мы будем использовать первый вариант, так как в дальнейшем перенесем наше обучение на Unreal Engine 4, а этот движок использует первый вариант комбинаций + имеет дополнительно параметр Specular из одного канала.
Хотя при создании текстур в Substance Painter параметр Height и вынесен отдельно, при запекании текстур он вшивается в карту нормали. Но его все еще можно его выделить в отдельный канал.
Давайте рассмотрим теперь то, как это работает в Substance Painter. Для этого мы снова создаем новый проект с обычным плейном и стандартными настройками (о них я рассказывал во второй части статьи). И создадим новый слой заливки:
Теперь рассмотрим стандартную текстуру нормалей из набора Substance Painter «Niche Rectangle Top Wide», которая располагается под тегом Hard Surface:
Далее мы перенесем эту карту нормалей в параметр слоя Base Color (из предыдущего урока мы должны помнить, как это делать). Так выглядит карта нормалей, если воспринимать ее, как изображение (изображение выше). Но теперь удалим ее из параметра BaseColor (мы это сделали для общего ознакомления), нажав на крестик в параметре:
И перенесем ее в параметр Normal:
Ваш конечный результат сразу обновился?
Теперь, если зажать Alt и ЛКМ во viewport’е— можно крутить камерой и смотреть на плейн под разными углами. Свет, отраженный от пикселей, начнет переливаться, создавая иллюзию глубины. Как будто на плейне действительно есть какие-то впадины и выпуклости. Все это заметно под углом от 90 до 140-150 градусов. И чем больше угол наклона, тем больше становится понятно, что это расчет видеокарты, который определяет, как должен отражать свет каждый пиксель, чтобы создавать эту иллюзию. В качестве исходных значений мы передаем в видеокарту 3 параметра в виде каналов пикселя (иначе говоря, текстуру Normal map):
Теперь давайте извращаться. Удалим из параметра Normal эту карту и укажем ее в Metallic.
Но для параметра Metallic используется только один канал, а карта нормалей имеет 3 канала, соответственно, вставляя карту нормалей в этот параметр, Substance Painter обрежет 2 лишних канала (GB — второй и третий по очередности) и оставит только один для расчетов:
И результат:
В конечном результате видно теперь, что больше нет никаких выпуклостей и впадин, но сама поверхность стала походить на какую-то металлическую плату. Вы так же можете посмотреть, как будет выглядеть параметр Metallic в градациях серого без остальных параметров (BaseColor и прочих), переключив режим отображения на 1 канал Metallic (если вы ничего не меняли, то во вьюпорте справа сверху есть возможность переключения отображения):
Выбираем металлик и получаем следующий результат:
Как видим, это один канал в градациях серого, который определяет, какие пиксели должны выглядеть как металл, какие — как нечто среднее, а какие — не металл. 0 — не металлический. 1 — металлический.
Аналогично и с параметром Roughness (1 канал) — любая текстура подойдет для работы с ним. В зависит от того, какой конечный результат вам потребуется. Можете попробовать самостоятельно воткнуть в параметр Roughness любую доступную вам текстуру и посмотреть на результат.
Помните, если выставляете текстуру с 2 и более каналами в параметры с одним каналом, то будет использоваться только самый первый канал текстуры.
Так как считается стандартом наименование последовательности каналов RGBA, то первым каналом будет всегда R.
В дальнейшем, при использовании других ПО можно будет указывать, из какого именно канала брать данные. И мы это обязательно рассмотрим в следующих статьях.
Сложные материалы
Под словом «материал», обычно подразумевается коллекция готовых параметров, совокупность которых дает кинематографичный результат — материал (иначе говоря, фактуру, поверхность). Возьмем, к примеру, вот это кожаное кресло:
Визуально, кресло состоит из 3 материалов:
- Кожа.
- Металлические клепки.
- Пластиковые (возможно, деревянные) ножки.
Каждый материал имеет свои параметры:
- Color. (например, кожа — это близкий к черному цвет с крапинками трещин, а клепки — это золотистый цвет с какими-то пятнами грязи ).
- Metallic (в коже практически равен 0, а в клепках близок к 1).
- Roughness (в коже он ближе к 1, а в клепках ближе к 0).
- Normal Map (В коже карта нормалей отображает трещинки и их глубину, а в клепках — технические углубления/выступления).
- AO (в коже будет отображать корректность затенения трещин, а в клепках — углублений).
И вот так параметры кожи выглядят визуально:
Подведем промежуточный итог:
Сейчас мы знаем:
- Принцип работы PBR — все параметры настраиваются через каналы.
- Каналы — набор параметров пикселей в текстурах.
- Как работают все параметры PBR, и как мы можем на них влиять через текстуры.
- Принцип построения сложных материалов.
- Как смешивать материалы с помощью масок (Маски мы проходили еще во второй части).
Исходя из всего этого, мы можем теперь представить, как можно создать мокрый грязный асфальт со следами шин. Можем ведь? Да, конечно, можем. Иначе мы не котятки =)
Практика
Перед тем, как начать, нам нужно определиться с количеством материалов, которые будут использоваться в нашем практическом туторе:
- Асфальт.
- Грязь.
- Следы шин (проще говоря, резина).
Их нужно где-то найти, а потом добавить в проект Substance Painter =)
Встал вопрос — где брать эти материалы?
Можно немного помучиться и создать коллекцию параметров для каждого материала вручную. Например, найти изображение асфальта. Обрезать его до квадрата и сделать его в качестве BaseColor. Потом, через специальные программы (например, xNormal) по этому изображению создать карту нормали. Через карту нормали отрегулировать Metallic и Roughness (можно и по BaseColor). В итоге, потратить несколько часов на создание идеального материала асфальта, выверяя корректные параметры для металла и шероховатости.
А можно сделать все проще.
Как я уже сказал выше, большинство материалов уже заготовлены давно за вас. Не думаете же вы, что вы первые, кто создает свой материал? =) Ваша задача лишь найти готовые решения, которые отвечают вашим требованиям, скачать их и установить. Если вы пользуетесь Substance Painter, то у компании allegorithmic (теперь уже у Adobe) есть специализированное хранилище готовых материалов, которые можно скачать. Доступ к ним есть как платный, так и бесплатный.
Если вы пользуетесь Quixel Mixer, то в этой программе уже заложены сотни различных материалов, которые были отсканированы с реальных объектов со всего мира и представляют собой огромную базу реалистичных материалов. А вам достаточно лишь указать их и начать работать.
Вот здесь (Ссылка) я подготовил текстуры для материалов, которые мы будем использовать в нашей практике. Скачивайте, не стесняйтесь.
Наша цель сейчас не создавать очень качественные текстуры, а познакомиться с тем, как можно с помощью параметров PBR и масок (всего того, что мы узнали) создать нечто интересное. Поэтому на данном этапе мы не будем пользоваться генераторами масок или грязи, а все будем делать вручную, чтобы понять суть.
Всегда изучайте правила и условия игры. Когда вы знаете правила игры от и до — у вас появляется понимание сути игры и то, как можно нарушать правила без последствий, а как их можно модернизировать, чтобы быть максимально эффективным.
А если вы будете играть в игру, не понимая правил — вы так и будете получать штрафные баллы «ни за что», а судья кикнет вас с поля спустя 3 предупреждения. Задумайтесь.
Если вы уже посмотрели файлы, то, наверное, обратили внимание на маску для шин. Она подготовлена отдельно, так как я не смогу ее сгенерировать на ходу в Substance Painter, поэтому я воспользовался рисунком шин, найденным в интернете и подготовил его через Photoshop для работы в Substance Painter:
Теперь создадим новый проект и добавим все наши файлы в него. Для этого мы выбираем стандартные настройки, но теперь нам нужно при создании проекта еще указать наши текстурные карты:
В проекте создадим 3 папки под каждый материал и проименуем их, чтобы не путаться:
В нашем случае очень важна иерархия папок (да и не только в нашем — она всегда важна). Иерархия определяет уровень материала, иначе говоря — что на чем лежит. Асфальт в нашем примере — это дно, самый низкий объект. На нем остаются следы от шин. А вот грязь может быть и на следах шин, и на асфальте. Поэтому грязь будет выше всех.Теперь давайте сразу спрячем все, что должно быть спрятано, и оставим только асфальт. То есть, создадим черные маски на папках Rubber и Dirt:
Теперь создадим в каждой папке по 1-ому слою. А точнее, создадим слои и распределим их в папки. Не забываем о нейминге, чтобы потом не путаться (не смотря на то, что визуально не совсем понятно, что слои находятся в папках — поверьте, они в папках):
Все новые слои имеют базовые средние параметры. Поэтому Base Color серый, нормаль не отображает выпуклостей (все ее каналы по-умолчанию), а Metallic и Roughness не создают впечатления какого-либо материала.
И сейчас нам нужно это исправить, указав в каждый параметр соответствующую текстуру (на примере асфальта):
Ваша задача сейчас распределить все текстуры материалов в нужные параметры слоев.
После того, как вы все это проделаете, назначим маску для резины и создадим эффект следов. Так как у нас уже есть черная маска у папки, то нам нужно просто подключить файл со следами колесиков к этой маске. Для этого кликаем ПКМ по маске и выбираем Add Fill:
И в параметрах GrayScale указываем маску:
В результате на асфальте появятся следы резины, но их будет достаточно сложно разглядеть, так как это все таки PBR и кинематографичность (!!!). Чтобы их увидеть, нужно Plane повернуть под определенным углом:
Сейчас эти два слоя (асфальт и резина) находятся на одном уровне. Но мы-то знаем, что резина находится НА асфальте, а значит, слой с резиной должен быть физически выше. И вот теперь мы воспользуемся тем самым параметром Height.
Найдите его в параметрах слоя Rubber и выкрутите его на максимум, чтобы прочувствовать, как он работает. Покрутите камерой, чтобы увидеть, как свет начал обрабатывать пиксели, которые вы настроили своими руками. Прочувствуйте свою мощь! =)
Ну а теперь выровняйте параметр на 0.1, чтобы это было не так явно и более правдоподобно:
Мы могли бы выкрутить в -0.1, чтобы у нас проявились ямки, как после машин на грязи, но это асфальт, и он не проваливается так легко.
Теперь настроим грязь. Исходя из реальности, можно предположить, что грязь должна забиваться в трещины асфальта в первую очередь. Но у нас нет маски, чтобы мы могли проявить слой грязи в трещинах. Однако решение есть — мы можем взять BaseColor асфальта и на его основе сделать маску для грязи.
Как это работает? Если посмотреть на BaseColor асфальта, то можно обратить внимание, что чем темнее пиксель, тем больше он похож на трещину. То есть, в этом изображении все темное — это трещины, а все светлое — это поверхность. И если мы хотим воспользоваться изображением, как маской, то нам достаточно было бы инвертировать цвета (темное сделать светлым и наоборот) пикселей, и у нас получилась маска для грязи.
Для этого отключим отображение слоя с асфальтом (нажав на глазик у папки с асфальтом), чтобы было проще воспринимать то, что мы делаем.
Далее, укажем, что в маске грязи должен быть файл и присоединим к ней файл Asphalt_BaseColor:
Как я и писал выше — светлым был асфальт, а темным — трещины. Соответственно, на больших поверхностях начала проявляться грязь, а в трещинах доминирует базовый серый цвет (базовые параметры / фон).
Теперь наша задача заставить эту текстуру восприниматься иначе — инвертировать цвета и усилить их, чтобы маска проявила грязь в трещинах. Проще всего это сделать с помощью дополнительного эффекта «Уровни» (Levels). Добавляем к маске дополнительный фильтр «Levels» так же, как мы добавляли Fill (ПКМ — Add Levels). И выкручиваем параметры примерно, как на картинке ниже:
И нажимаем на кнопку ниже «Invert» для инвертирования уровней интенсивности канала:
Теперь грязь располагается именно там, где нам нужно — в трещинах асфальта:
Включаем асфальт и присматриваемся к нашим трудам:
Заметьте, как мы ловко смогли немного оптимизировать работу генерации текстуры — мы не стали загружать в проект еще 100500 текстур, а воспользовались той же текстурой, что и использовалась для окраски асфальта. Мы стали на шаг ближе, чтобы быть художником по поверхностям.
Но это слишком просто. Поэтому, давайте теперь добавим на наш асфальт оранжевую разметку. Для этого нам необходимо будет:
- Создать новую папку и назвать ее Road_Line.
- Добавить черную маску папке.
- Добавить в папку новый слой и назвать его Layer_RoadLine.
- У слоя в параметрах BaseColor указать оранжевый цвет напрямую:
Вы так же можете отрегулировать параметры Metallic и Roughness на свой вкус, чтобы создать реалистичную краску. Я не стал этого делать, чтобы сократить размеры тутора.
Теперь, вспоминая правила иерархии слоев, расположим папку с дорожной линией между асфальтом и резиной.
Перед тем, как что-то красить и определять иерархию слоев, художники порекомендуют вам подумать над тем, какая была история у объекта. Сначала покрасили асфальт, а потом он стал грязным, и по нему проехала машина, или краску наложили после, просто не мыли асфальт (прям, как в жизни). История объекта всегда определяет его внешний вид.
Настало время ручного рисования. Выделите маску папки RoadLine и начертите на плейне (прям на асфальте) полосу разметки. У меня получился примерно такой результат:
Теперь стоит добавить еще одну маску на сам слой с краской, чтобы создать ощущение отвалившейся краски. Для этого мы не будем создавать папку, а создадим маску прямо на слое и добавим любую стандартную маску Substance Painter. Чтобы сделать это — добавьте маску, а потом добавьте заливку (ПКМ по маске и Add Fill). В заливке укажите Текстуру Dirt 4, которая находится под тегом Procedural:
И смотрим результат:
Не забываем, что у слоя с краской нужно так же указать высоту. Предлагаю указать 0.05 — среднее между резиной и асфальтом.
Будьте внимательны, так как для этого нужно выделить именно слой, а не маску. Указать вручную значение можно, кликнув по цифре справа сверху от ползунка.
Ну и какой асфальт без воды?
Для этого создайте самостоятельно папку вместе со слоем. Пока НЕ добавляйте никаких масок.
Установите папку в иерархии на самый верх. Ведь вода же сверху, правильно? У слоя выкрутите на максимум Metallic, а Roughness на минимум. Далее укажите высоту воды, равную 0.15.
И теперь отключите канал Color, нажав на кнопку, выделенную синей рамочкой. Ведь у воды нет цвета:
Что произошло? Произошло смешение все нижних слоев согласно маскам и слоя с водой. Но у воды теперь нет канала цвета, а значит, она не может красить в нужные ей цвета пиксели. За то все другие параметры верхнего слоя воды влияют на параметры нижних слов, и асфальт стал максимально мокрым и неприятным, как будто и вовсе не асфальт.
Когда мы смешиваем несколько слоев без масок, то само смешение определяется заданными правилами, и по умолчанию, это таким правилом является суммирование значений в каналах.
Теперь домашнее задание:
- наложите маски так, чтобы асфальт был не полностью мокрым, а с небольшими лужами. Помните, что лужи не имеют неровностей на поверхности — подумайте, как нужно смешать слои так, чтобы лужи были гладкими. И что для этого нужно еще сделать? Я уверен, вы справитесь =)
- Так же попробуйте найти, где в параметрах слоев указываются правила смешения. Попробуйте их изменить. Поиграйтесь с ними, прочувствуйте то, как они работают. Все это нам пригодится в будущем, когда мы станем Художниками по поверхностям.
Итог
- В этой статье мы разобрали, как создавать классические текстуры. В целом, правильно применяя параметры, вы уже можете начинать текстурировать и даже смело можете назвать себя джуниор-художником по текстурам.
- Мы узнали, как работает PBR.
- Параметры в PBR необязательно должны быть уникальны. Это все еще обычные параметры, которые мы можем указывать через каналы пикселей.
- Одни и те же текстуры мы можем использовать по разному. Это дает нам преимущество — нам не нужно загружать память лишними файлами с большим количеством пикселей, а достаточно загрузить один файл и подсказать программе, как его рассчитать.
- Мы познакомились с материалами и тем, как они собираются. Теперь вы знаете, что не обязательно быть супер-крутым фотошоп-мастером, а достаточно найти готовые параметры, чтобы программа смогла из них представить корректно материал.
В следующих частях мы затронем такие темы, как развертка, плотность текселя (и что такое тексель), и подойдем, наконец, к самому интересному — созданию собственных шейдеров в UE4.
Программы Quixel и Substance Painter
В предыдущей версии статьи я рекомендовал работать новичкам с Quixel Suite. Однако данная программа более не существует, и на ее место встала вторая версия программы текстурирования от Quixel (а теперь и от Epic Games) Mixer 2020. В целом, новое ПО сохранило традицию простоты и работы с готовыми прессетами. Что можно рассудить, как очень быстро осваиваемую программу для создания текстур и материалов.
Что касается Substance Painter, то его сила начинает проявляться, когда в работу подключается третья программа Substance Designer. Designer позволяет создавать свои материалы путем генерации нужных нам поверхностей. Designer крут тем, что вы можете создать «умные материалы», которые будут иметь настройки внутренних масок, которые будут контролировать количество и качество внутренних материалов. То есть, «умные материалы» в данном случае — это контейнер, который содержит в себе несколько материалов и предустановленные маски, которые регулируются формулами и алгоритмами, которые художник прописывает в Designer.
Потом этот контейнер экспортируется в Painter, где происходит его тонкая настройка. Например, наш мокрый асфальт мы создали в Painter. Но могли бы собрать в Designer и подключить кучу дополнительных настроек, которые бы позволили нам изменять результат налету, в одном месте, а не переключаться среди кучи масок, как в Painter.
Substance Designer так же нужен и важен для работы над созданием сложных бесшовных материалов, которые в дальнейшем можно использовать в качестве текстур для объектов. Пример_1, Пример_2, Пример_3.
Именно это ПО является первым ПО, которое необходимо знать любому художнику по поверхностям. Но, как всегда — об этом позже =)
Ну а пока вы отдыхаете перед продолжением — подписывайтесь на меня и не забывайте включить колокольчик, чтобы вам упало уведомление. Вдруг что-то новое напишу =)
Ссылка на предыдущую часть здесь.
The Comprehensive PBR Guide
by Allegorithmic — vol. 1
vol. 1 — The theory of Physically-Based Page 1 Rendering and Shading
Light and Matter : The theory of Physically-Based Rendering and Shading
Cover by Gaëtan Lassagne, written by Wes McDermott, Technical edit by: Cyrille Damez and Nicolas Wirrmann
Light Rays
Absorption and Scattering (Transparency and Translucency)
Diffuse and Specular Reflection
Microfacet Theory
Color
BRDF
Energy Conservation
Fresnel Effect
F0 (Fresnel Reflectance at 0 Degrees)
Conductors and Insulators (Metals and Non Metal)
Metals
Non-Metals
Linear Space Rendering
The Key Factors