Search Unity

Работаем с физически точным шейдером: практический подход

, Февраль 18, 2015

В процессе разработки Unity 5 мы использовали наш проект Viking Village, чтобы тестировать работу с тенями и светом.

Если вы используете бета-версию Unity 5, вы можете загрузить проект Viking Village из Asset Store, чтобы понять, как можно собрать и осветить сцену в Unity 5. Мы также представляем некоторые из наших уроков ниже.

Создание шаблона окружения

Для того чтобы ваши настройки текстурирования и шейдинга давали правильный эффект, мы рекомендуем использовать простую сцену с разными настройками освещения. В это может входить разные скайбоксы, свет и т.д. – все, что способствует освещению модели.

Когда вы откроете Unity 5, вы заметите, что в любой новой пустой сцене есть процедурное небо, а также настройки по умолчанию для окружающей среды и отражений. Это является подходящей отправной точкой.

lightcond5fr640x480loop.1

Для нашего шаблона окружения мы использовали:

Камеру с HDR рендерингом.

  • Несколько Reflection Probe в разных местах (для локальных отражений на объектах).
  • Группу Light Probe.
  • Набор HDR текстур и материалов неба, а также процедурное небо. Небо, которое поставляется с этим проектом. было специально создано для Unity Бобом Гроотхуисом (Bob Groothuis), автором Dutch Skies 360.
  • Направленные источники света с подходящей интенсивностью и цветом HDR неба.

Настройка текстуры неба

Большинство текстур неба включают в себя солнце (наряду со вспышками и т.д.). Таким образом, свет от солнца отражается поверхностями. Это вызывает три проблемы:

1) Directional Light, который используется для представления солнца, должен соответствовать точному направлению солнца, нарисованному на небе, иначе будет несколько отражений солнца на материале.

2) Отражения солнца и спекуляр перекрываются, в результате чего получаются интенсивные блики.

3) Запеченное отражение солнца не перекрывается, когда поверхность находится в тени, и она становится чрезмерно блестящей в темноте.

image11

Солнце удалено с текстуры неба и повторно добавлено при помощи направленного света и бликов.

В результате, солнце, вспышки, солнечные лучи и значения HDR необходимо удалить с текстуры неба и повторно использовать Directional Light.

Материалы с физически точным шейдером

Чтобы избежать гаданий при создании реальных материалов, будет полезно следовать надежному и известному эталону. Стандартный шейдер поддерживает как цвет блеска, так и металлический цвет. Они оба определяют цвет отражений на поверхности. Цвет блеска указывается непосредственно, в то время как металлический цвет рассчитывается с учетом диффузного цвета и настроек металла в стандартном шейдере.

Для проекта Viking Village мы использовали стандартные шейдеры с блеском. Наша сцена для настройки, которую вы можете скачать из Asset Store, включает в себя несколько полезных графиков настройки. Мы всегда обращаемся к диаграммам при создании материалов.

При создании материала вы можете выбрать между блеском и металлом, каждый со своим собственным набором значений и справочной диаграммой. В блестящем материале нужно выбрать цвет отраженного света непосредственно, в металлическом же вы выбираете, если материал ведет себя как металл, когда он освещается.

График значений для блеска:

UnitySpecularChart

График значений для металла:

UnityMetallicChart

Выбор между блеском или металлом в основном зависит от личных предпочтений, обычно вы можете получить одинаковый результат независимо от типа материала, который вы решите использовать.

Помимо графиков и значений, будет очень полезным сбор образцов реальных поверхностей. Это будет большим подспорьем, чтобы найти тип поверхности, которой вы пытаетесь подражать, и попробовать понять, как она реагирует на свет.

Настройка материала

Вначале часто бывает полезно создать простое, но настраиваемое представление материалов с использованием цвета, значений и слайдеров, полученные в результате подгонки графиков. Затем вы можете применять текстуры, сохраняя при этом исходный материал в качестве эталона для подтверждения того, что характеристики сохраняются.

materialcompare_refl.1

Верхний ряд: без текстур. Нижний ряд: с текстурами. Слева направо: камень, дерево, кость, металл.

Традиционный подход к созданию текстур

В Viking Village использовались текстуры как созданные вручную, традиционными методами (фотографии + тонкая настройка), так и с помощью изображений Diffuse/albedo, specular-, gloss и normal map, которые нам предоставили Quixel.

Будьте осторожны при добавлении текстуры деталей в материал. Например, как правило, нежелательно, чтобы в них было что-то связанное с освещением (Ambient Occlusion, тени и т.д.): помните, что физически точный шейдер обрабатывает все освещение, в котором вы нуждаетесь.

Естественно, ретуширование фотографий сложнее, чем использование отсканированных данных, особенно когда дело доходит до PBS значений. Есть инструменты, которые помогают облегчить процесс, такие как Quixel Suite и Allegorithmic Substance Painter.

Сканированные данные

Отсканированные для PBS текстуры требуют меньше редактирования, поскольку данные уже разделены на каналы и содержат значения albedo, specular и smoothness. Лучше всего если программное обеспечение, в котором настраиваются данные для PBS, содержит профиль для экспорта в Unity. Вы всегда можете использовать эталонные графики для проверки отсутствия ошибок или в качестве руководства, если вам нужно настраивать значения, используя Photoshop или другой инструмент.

Примеры материала

Сцена Viking Village содержит большое количество контента, пытаясь не превысить разумное потребление памяти для текстур. Давайте в качестве примера рассмотрим, как мы создали 10-метровый деревянный кран.

Обратите внимание, что многие текстуры, особенно specular и diffuse, однородны и требуют разные разрешения.

image10

Пример 1: кран имеет 2 материала: 2 diffuse, 1 specular-smoothness, 2 occlusion и 2 detailed текстуры.

image06

Пример 2: щит имеет 1 материал: 1 diffuse, 1 specular-smoothness, 1 occlusion текстуры, без детальной текстуры.

Screen Shot 2015-02-17 at 17.12.23

Слева: 2 материала крана в окне Inspector. Справа: материал щита.

  • Текстура albedo: в случае использования specular представляет собой цвет рассеянного света, который отражается от поверхности. Текстура необязательно должна быть очень детализированной, как видно на картинке слева (кран), в то время как текстура справа (щит) включает в себя уникальную деталь.

vv albedo texture

Карта diffuse крана содержит простой деревянный цвет и интенсивность. Умеренное количество деталей. Изображение справа: diffuse текстура щита с уникальной деталью.

image09

Значение diffuse (без текстуры) для материала крана.

  • Specular: неметаллы (изоляторы) являются сравнительно темными и в оттенках серого, в то время как металлы – яркие и могут быть цветными (напомним, что ржавчина, масло и грязь на металле неметаллические). Интенсивный блеск на дереве из-за текстуры specular будет выглядеть странно, так что лучше использовать значение вместо установки текстуры.

image07

Значение specular для материала крана.

Screen Shot 2015-02-17 at 17.40.23

Карта specular для металлической части крана (без использования шейдера металла). Справа: текстура specular для материала щита.

  • Smoothness – это ключевой элемент для материалов PBS. Он позволяет создавать разные варианты и детали поверхностей и помогает отразить их состояние и возрасти.
    В случае с краном, smoothness помог создать правильную текстуру и сохранять ее, то есть добиться разумной памяти текстуры.

image05

Значение  Smoothness для дерева крана.  Никаких текстур не требуется!

Screen Shot 2015-02-17 at 17.40.23

Карта smoothness для металла крана  (без использования металлического шейдера). Справа: карта smoothness  для щита с металлическими и деревяными поверхностями.

  • Occlusion показывает, как сильно свет из окружающей среды попадает на разные выступающие точки поверхности. Ambient Occlusion раскрывает детали и глубину поверхности путем приглушения окружающего и отраженного света в районах с небольшим количеством непрямого света.
    Имейте в виду, что есть также вариант использования в сцене SSAO (Screen Space Ambient Occlusion). Использование SSAO и АО может привести к двойному потемнению в некоторых областях, в этом случае вы, возможно, захотите рассмотреть использование карты АО в качестве карты полости.
    Карта AO для подчеркивания глубоких трещин и складок может быть лучшим вариантом, если игра использует SSAO и/или Lightmapped Ambient Occlusion.

image01

1 Lightmapped AO. 2: текстура occlusion. 3: occlusion в Diffuse. 4: эффект SSAO.

Вторичные текстуры и разрешения

Вторичные текстуры могут быть использованы для повышения уровня детализации или обеспечения изменений в материале. Они могут быть скрыты с помощью свойства Detail Mask.

Так как у первичной diffuse текстуры древесины крана низкое разрешение, вторичная текстура имеет решающее значение. Она добавляет мелкие детали на поверхности. В этом случае карта детализации тайлится и имеет достаточно низкое разрешение. Они повторяются на многих других деревянных поверхностях, таким образом, обеспечивая значительную экономию текстурной памяти.

image20

Вторичные albedo- и normal map компенсируют низкое разрешение основных diffuse и normal map. Обе текстуры снижают общую текстурную память, так как тайлятся и широко «накладываются» на деревянных поверхностях по всей деревне. Будьте осторожны при предоставлении информации освещения для подробной карты diffuse, будет такой же эффект, если добавить эту информацию в первичную карту diffuse.

image16

Деревянная поверхность крана с использованием вторичных текстур (слева) и без них (справа).

 Эти шейдеры, безусловно, помогли нам при разработке проекта Viking Village. Мы надеемся, что для вас они тоже окажутся полезными, и с нетерпением ждем ваши комментарии!

Благодарности

Проект Viking Village был создан в партнерстве с творческим коллективом Quixel, разработчиком технологии захвата HDR поверхности и библиотеки Quixel Megascans PBS-готовых текстур.

Большое спасибо очень талантливым Эммануэлю и Пламен (Emmanuel “Manu” Tavares и Plamen “Paco” Tamnev).

Загрузите проект из Asset Store. Помните, что он оптимизирован для Unity 5.0.0 RC2. Сделавшие предзаказ и подписчики могут загрузить бета-версию Unity: для Mac и Windows.

Комментарии закрыты.

  1. nice asset!!! can we use these objects in our project freely?

  2. Lusvardi Gianmarco

    Март 26, 2015 в 3:08 пп

    Great article: I need just a little information:

    You have written:

    The baked-in sun reflection is not occluded when the surface is in shadow and it becomes overly shiny in darkness.

    I have this issue in one of my project where I want to make use of both indoor and outdoor environments. I can clearly see that, on some really shiny materials, such as Glass, the skybox is reflected on them, but they are occluded inside a solidified box (made with Blender). I partially solved this by disabling reflections, but how can I make glasses reflect the indoor environment without disabling skybox reflection (this way I can make external items reflect the skybox)?

    Thanks!

  3. Hey there,

    the secondary details maps are very cool.
    However, I saw that
    — if you apply them, they «add» to the general Albedo map in a certain way but I cannot figure out how exactly. Is that a colour-add or an overlay (e.g. similar to a certain blend mode in Photoshop)?
    — you did the project in cooperation with Quixel. I’d love to fully edit my Unity 5 materials with Quixel but so far could not spot a possibility to add a «secondary albedo x2 detail» channel there. Is there a way to do that?

  4. Excelent post, ty for references

  5. Claudio M. E. Bastos Iorio

    Март 5, 2015 в 3:20 дп

    I keep getting an error while trying to download this package from the Asset Store, using Unity 5. Anyone else is experiencing the same?

    1. I have the same problem :-(

      1. We had problems materializing some Asset Store packages. The download should work now.

        1. Thanks, now it works!

  6. Can you explain why you have used washed-out textures as in «prop_fish_01_d.tif»?

  7. Can you explain your object’s materials? For example, the fish texture «prop_fish_01_d.tif» is really washed out. I am sure that you did that for a reason, but it is not clear to me yet, and I would really to understand it. Thank you.

  8. I wonder why no Unity terrain is used.

  9. I was kind of indifferent to PBR, I didn’t really get it until a few nights ago when i seriously tried it out. It’s amazing what you can achieve, the variety of textures with just a diffuse and normal map even. It’s much more realistic and feels based in nature. Great work. I’m sure there will be a lot of beautiful projects that take advantage of it.

  10. Hi Erland, very nice work. Could the teleporter demo you worked on last year be made available in the asset store as well?

  11. One thing I don’t get is the use of light probes. I thought they were only used for lighting dynamic objects? But this is mostly a static scene.

    1. Lightmapping small prop objects like rocks, grass etc is overkill and can be very bad for both baking performance and runtime performance due to larger lightmaps. This is especially important for realtime GI & realtime lightmaps but it is equally applicable to baked lightmaps.

      So it is a good idea to use lightprobes to light these small props for performance reasons. You will notice that all shields, grass, fences, barrels and other smaller objects are lit via lightprobes.

      Houses & terrain is marked static. This also means that light bounces off of terrain & houses only, which when you want to do realtime GI is a very reasonable tradeoff. I think it would make a quite unnoticable difference to bounce lighting if the fences, barrels, leaves were fully lightmapped (and thus light also bouncing off it)

      1. Thanks for the explanation. Makes sense. Shouldn’t this be in the Unity manual as well though?
        http://docs.unity3d.com/Manual/LightProbes.html

  12. hello friends
    Wow, I’m shocked the trailer , really exciting , all the Unity exciting.

  13. There is a problem with the mat_terrain_near material in this package. I get a pink surface. Anyone know how to fix this?

    1. RC2 had some changes to the builtin cginclude files which conflicted with a shader in the project. Please update the package on the asset store. It is fixed now.

      1. There is a problem with the asset store package updater. It keeps downloading the old package. To reproduce (Win 7):

        -Close Unity 5 RC2.
        -Delete downloaded file «Viking Village.unitypackage» from the AppData folder.
        -Open the asset store inside Unity and download the viking village. It will show version 1.0.1758, which is the latest version.
        -Once downloaded, extract the package into a new project.
        -You will see that the ground shader still has an error (pink).
        -Restart Unity.
        -Open the asset store inside Unity and notice that the viking village package version number has changed to 1.0.1755, which is the old version. It also states that there is an update available, but I just downloaded the latest version (or so I thought).

  14. You forgot to mention how important it is to set the colour space to linear. If you don’t then it throws the smoothness/specular values way off (overly shiny). You can deal with that in sRGB space by doing a sRGB to linear conversion, or simply a corrective gamma curve in Photoshop, but it begins to break down the ‘simple to use’ ethos behind physical rendering. I think this kind of thing should be handled automatically: Substance Designer and other apps can handle it, I hope Unity will in the future.

    Aside from that, thank you — it looks wonderful, and thanks for the breakdown and great charts.

  15. Impressive project and really well done sharing it on the asset store. Personally I would recommend doing this with every testing scenes Unity is making. For example: That sci-fi room shown earlier about realtime global illumination, the doll, the transporter scene, sci-fi engine scene. Everyone can learn so much about it, and I enjoy stripping those scenes down and learn from it.

    Anyways, last little comment. The name «Groothuis» is spelled wrong, it’s now written down as «Groothius» Just a little comment ;)

    1. Thank you, fixed Bob Groothuis’ name.

      Sharing demo projects on the AssetStore is something we at Demo team have been wanting to do for a long time. What has been stopping us, is that it comes with a cost to the project: considerably limited possibility to:
      1) use third-party content (because of copyright reasons), and
      2) develop our own tools and custom solutions on top of Unity (because of increased maintenance complexity).
      This situation is quite restrictive, and the result would be, that we would be holding back from using the full potential of Unity.

      This being said, we still wanted to do it for at least some of our projects, so… here is one :)

      1. Hello JDMULTI & Silvia,

        Many thanks !

        Bob

        1. Couldn’t resist reply on that name typo as a dutch person ;)

  16. Justin from Unity3d.Expert

    Февраль 19, 2015 в 5:18 дп

    Thank-you so much for the charts! It’s always much easier to have a reference where you can use the work which people have done before, to make your design choices a lot more accurate and quicker! :D

  17. Thank you very much for this post. As Jashan said similar posts are super useful to give us overview about where you go and how you think in the process of bringing all these feature to life. Thank you again. Thanks to Unity and your team we can bring education to whole world. Enjoy your day and look forward to 5.0 release. Marek.

  18. Quite impressive project. I was wondering if we can re-use some of Viking Village textures and/or materials in our own assets (at Unity Asset Store) when Unity 5.0 will come out?

    1. Definately! That is the purpose of this demo. Link is at the very top of this blog post :)

      1. That’s very nice to hear, as today there are various issues with getting even simple textures (due to licenses) on the web, and putting texture in the asset is usually treated as redistribution. I am very excited about this project.

      2. That’s very generous. I was wondering about something related to this. I’m hoping to publish some assets in the store soon and it is Sci-Fi. So I was wondering if it was okay to use some of the Angry Bots sounds in my demo level (provided I give due credit, of course). From your answer can I assume that the same applies to all previous UT content?

        1. Yes, the usual Asset Store license applies. Dig into details here: http://unity3d.com/legal/as_terms, but long story short, as long as you use the assets «as incorporated and embedded components of electronic games and interactive media and distribute such electronic game and interactive media», you’re fine.

  19. Blog postings like this are super-useful and make it much easier to get into the flow with PBS/PBR! You might even consider linking some of those from the main documentation for some more details / examples than what you’d usually put into the manual.

  20. HeliosDoubleSix of Shadowood

    Февраль 18, 2015 в 3:27 пп

    Really nice work, it is all coming together with Unity 5 at last, my thanks to all the women and men that have must have died bringing PBR and realtime GI to the masses, it will soon be in the hands of the people, and hopefully not violently explode so much as it has during the beta ;-)