Search Unity

Durante o desenvolvimento da Unity 5, utilizamos internamente o projeto Viking Village para testes dos workflows de shading e iluminação.

Se você está utilizando a versão beta da Unity 5, você pode baixar o projeto Viking Villa da Asset Store

Criando um ambiente de testes

Para garantir que as configurações de shader e texturas estão se comportando corretamente, recomendamos que você utilize uma cena simples com diversas configurações de iluminação. Isto é, com diferentes skyboxes, luzes, etc. – qualquer coisa que contribua para a iluminação do seu modelo.

Quando você abrir a Unity 5, você irá notar que as novas cenas já tem um céu procedural, além de configurações padrão de ambiente e reflexão. Esse já é um ponto de partida ideal.

lightcond5fr640x480loop.1

Para nosso ambiente de testes utilizamos:

  • HDR camera rendering

  • Alguns reflection probes (para reflexões localizadas em objetos)

  • Um grupo de light probes

  • Um conjuntos de texturas e materiais de céu, além do céu procedural. O céu que vem incluso no projeto Viking Village foi criado especificamente para a Unity por Bob Groothius, criador do Dutch Skies 360.

  • Luzes direcionais “off-white” com intesidade e HDR iguais a cor do céu.

Ajustando as texturas panorâmicas do céu

A maioria das texturas do céu incluem o sol (além de flares, etc.), portanto, a luz do sol é refletida por superfícies. Potencialmente, isso pode causar três problemas:

1) A Directional Light que você está utlizando para representar o sol precisa ter exatamente a mesma direção do sol pintado no skybox ou então haverão múltiplos “hotspots” especulares no material.

2) O reflexo do sol e o “specular hotspot” se sobrepõem, causando uma iluminação especular intensa.

3) O reflexo do sol é “baked” na superfície e portanto não sofre oclusão quando a superfície está na sombra.

image11

O sol foi apagado da textura do céu e re-adicionado utilizando uma Directional Light e lens flare.

Como resultado, a iluminação do sol, flares, raios solares e os valores de HDR devem ser removidos da textura do céu e recriados usando Directional Light.

Editando materiais que utilizam physically-based shading

Para evitar o trabalho de adivinhação necessário para emular materiais do mundo real, é útil seguir uma referência conhecida. O Standard Shader da Unity 5 suporta tanto Specular Color quanto Metallic workflow. Ambos definem a cor dos reflexos que saem da superfície. No Specular workflow, a cor é especificada diretamente, já no Metallic workflow a cor é derivada de uma combinação da cor e do valor do parâmetro “metallic” configurado no Standard Shader.

Para o projeto Viking Village, utilizamos o Specular Color Workflow do Standard Shader. Nossa cena de calibragem, que pode ser baixada da Asset Store, inclue algumas tabelas de calibragem úteis. Nós referenciamos as tabelas regularmente quando criamos nossos materiais.

Ao criar materiais voce pode escolher entre o que chamamos de Specular ou Metallic workflows, cada um com seus conjuntos de configurações e tabela de referência. No Specular workflow voce escolhe diretamente a cor da luz especular refletida, no Metallic workflow você configura se o material irá se comportar como um metal quando iluminado.

A tabela de valores especulares:

UnitySpecularChart

A tabela de valores metálicos:

UnityMetallicChartEscolher entre os workflows Specular ou Metallic é, em boa parte, uma questão de gosto pessoal, você pode normalmente conseguir o mesmo resultado independente do workflow escolhido

Além das tabelas e valores, coletar amostras de superfícies do mundo real é muito útil. Ajuda bastante encontrar o tipo de superfície que você está tentando imitar e tentar entender como esse material reage a luz.

Configurando o material

No começo, normalmente é útil criar uma representação simples porém configurável dos materiais usando cores, valores e sliders derivados das tabelas. Depois você pode aplicar texturas mantendo o material original como referência para confirmar que as características foram preservadas.

materialcompare_refl.1

Linha superior: Sem texturas. Linha inferior: Com texturas. Da esquerda para a direita: Pedra, Madeira, Osso, metal

A processo tradicional de criação de texturas

 Texturas no projeto Viking Village foram criadas usando tanto métodos tradicionais manuais (fotos + ajustes) quanto usando imagens difusa e albedo, além de normal map, specular map e gloss map, todos fornecidos pela  Quixel.

Cuidado ao adicionar detalhes nos canais de textura do material. Por exemplo, normalmente é melhor evitar colocar iluminação (Ambient Occlusion, sombras, etc.) nas suas texturas: Lembre-se que o physically-based rendering provê toda a iluminação que você precisa.

Fotografias retocadas são mais difíceis de usar que informação escaneada, especialmente em relação a physically-based shading. Há ferramentas que lhe ajudam nesse processo, como o Quixel Suite e o Allegorithmic Substance Painter.

Dados escaneados

Texturas escaneadas calibradas para Physically-Based Shading diminuem a necessidade de edição, já que os dados já estão separados em canais e contem valores para albedo, specular e smoothness. O ideal é que o software que fornece os dados calibrados para Physically-Based Shading contenha um perfil de exportação específico da Unity. Você pode sempre utilizar as tabelas de referência para verificação e como um guia caso você precise calibrar os valores usando outra ferramenta, como Photoshop.

Exemplos de materiais

A cena do projeto Viking Village oferece uma grande quantidade de conteúdo enquanto mantém o consumo de memória com texturas numa quantidade razoável. Vejamos como um guindates de madeira de 10 metros de altura foi criado.

Repare que várias texturas, especialmente specular e diffuse, são homogêneas e exigem resoluções diferentes.

image10Exemplo 1: O guindaste tem dois materiais: Dois diffuse, um specular-smoothness, dois occulsion e duas detailed textures.

image06Exemplo 2: O escudo tem um material: Um diffuse, um specular-smoothness, um occlusion e zero detailed textures.

Screen Shot 2015-02-17 at 17.12.23Os dois primeiros Inspectors da esquerda são do guindaste, o da direita é do escudo.

  • Textura Albedo: No specular workflow essa textura representa a cor da luz difusa que reflete da superfície, não é necessário que seja altamente detalhada como visto na imagem da esquerda (guindaste), enquanto na textura da direita (escudo) a textura inclui detalhes únicos.

vv albedo textureEsquerda: Diffuse Map do guindaste, com cores e intensidade normais de madeira. Contém uma quantidade pequena de detalhes. Direita: Diffuse map do escudo com maior (ppi) quantidade de detalhes únicos.
image09Valor Diffuse (sem textura) do material do guindaste

  • Specular: Não metais são comparativamente mais escuros e na escala de cinza enquanto metais são mais brilhantes e podem ser coloridos (lembre-se que ferrugem, óleo e sujeira num metal NÃO são metálicos). Specular para a superfície de madeira não se beneficia muito de uma textura specular, então apenas é configurado um valor ao invés de incluir um specular map.

image07Valor Specular da madeira do guindaste.

Screen Shot 2015-02-17 at 17.40.23Esquerda: Specular map mostrando o metal do guindaste (não usando o metallic shader). Direita: Specular texture do escudo.

  •  Smoothness é um elemento chave dos materiais que usam o Physically-Based Shading. Ele contribui com variações, imperfeições e detalhes a superfície, ajudando a representar seu estado e sua idade. Para o guindaste, o valor de smoothness é bastante constante em toda a superfície, portanto utilizamos somente um valor, o que ajuda bastante no consumo de memória.

image05Valor de Smoothness para o guindaste. Não foi necessária uma textura!

Screen Shot 2015-02-17 at 17.51.13Esquerda: Smoothness map para o metal do guindaste (não usando o metallic shader). Direita: Smoothness map do escudo, contendo as superfícies de metal e madeira.

  • Occlusion indica quão expostos a luz do ambiente estão pontos diferentes da superfície. Ambient Occlusion (AO) ressalta detalhes e profundidade da superfície eliminando iluminação ambiente e reflexo de áreas que recebem pouca luz indireta. É importante lembrar que é possível usar também Screen Space Ambient Occlusion (SSAO) em sua cena. Usando SSAO e AO pode tornar certas áreas muito escuras, nesse caso é melhor usar o AO como um cavity map. Um AO map que destaca rachaduras e dobras pode ser a melhor opção se o jogo usa SSAO e/ou AO lightmapped.

image01

1 Lightmapped AO, 2: Occlusion texture, 3: Occlusion in Diffuse, 4: Image effect SSAO

Texturas secundárias e resolução

Texturas secundárias podem ser utilizadas para aumentar o nível de detalhe ou trazer variação dentro do material. Elas podem utilizar a propriedade Detail Mask para configuração.

Devido a baixa resolução da textura primária de madeira do guindaste, a textura secundária é crucial pois adiciona os detalhes a superfície final. Nesse caso, os detail-maps são tiled, em uma resolução baixa e são repetidos em diversas outras superfícies de madeira, causando uma economia crucial de memória com texturas.

image20Secondary albedo e normal maps compensam a baixa resolução das texturas main diffuse e normal map. Ambas texturas diminuem o consumo de memória com texturas por serem utilizadas em todas as superfícies de madeira da cena. Cuidado ao fornecer informação de iluminação para um diffuse detail map, pois o efeito é similar a adicionar esta informação ao primary diffuse.

image16Superfície de madeira do guindaste com (esquerda) e sem (direita) secondary texture maps.

Estes workflows certamente ajudaram na criação do projeto Viking Village. Esperamos que eles também sejam úteis a vocês, e queremos saber sua opinião!

Agradecimentos

O projeto Viking Village foi criado em parceria com a equipe de criação da Quixel, desenvolvedora de captura de superfícies em HDR e da Quixel Megascans, uma biblioteca de texturas prontas para o uso de Physically-Based Shading.

Muito obrigado aos extremamente talentosos Emmanuel “Manu” Tavares e Plamen “Paco” Tamney por criar esta cena.

Baixe o projeto na Asset Store. Tenha em mente que o projeto é otimizado para a Unity 5.0.0 RC2. Clientes que fizeram a pré-compra e assinantes já podem baixar a versão beta da Unity aqui, para Mac e Windows.

Comentários encerrados.

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

  2. Lusvardi Gianmarco

    março 26, 2015 às 3:08 pm

    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

    março 5, 2015 às 3:20 am

    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

    fevereiro 19, 2015 às 5:18 am

    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

    fevereiro 18, 2015 às 3:27 pm

    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 ;-)