As funcionalidades de renderização e simulação de cabelo fornecem uma implementação minimamente viável de importação, renderização e simulação de cabelo com base em fios. Esta atualização não fornece uma solução para tratamento de cabelo. A modelagem, ou tratamento, do cabelo precisará ser feita em uma ferramenta criação de conteúdo digital externa, como o Maya, usando a ferramenta XGen ou o plugin Shave and a Haircut (Corte de barba e cabelo). Outras ferramentas, como o Ornatrix, o Yeti ou o Houdini, também podem ser usadas.
Este documento descreve um esquema casual para arquivos Alembic na tentativa de padronizar a importação de tratamento de cabelo e orienta as informações de cabelo na Unreal Engine para uso com as funcionalidades de renderização e simulação de cabelo. O objetivo é que, conforme você gera tratamentos de cabelo, a conformidade com esse esquema permita que a Unreal Engine importe esses tratamentos diretamente. Na importação, os atributos compatíveis com a UE4 para renderização e física serão mapeados para esses atributos no arquivo Alembic.
Metas
- Definir um esquema de metadados Alembic casual e específico para tratamento para facilitar a importação de cabelo na Unreal Engine.
- Examinar os atributos compatíveis com a Unreal Engine para cabelo e mapeá-los para o Alembic.
Curvas
O formato geral do cabelo é lido a partir do esquema padrão da curva Alembic:
Alembic::AbcGeom::ICurves
Largura
Os atributos de tratamento exportados usando essa especificação permitem que o importador os recupere e use ao criar o tratamento. No entanto, o atributo de largura tem um comportamento especial. Por exemplo, em um aplicativo de criação de conteúdo digital, como o Maya, os valores de largura são exportados diretamente nas curvas, portanto não há necessidade de exportar um atributo "groom_width" personalizado. O importador converterá os valores de largura do Maya no atributo "groom_width". Vale ressaltar que, se o atributo "groom_width" estiver presente no tratamento, ele não será substituído durante a importação. Se nenhum atributo "groom_width" for especificado, ou se não for possível converter um dos valores de largura, o construtor na Unreal Engine volta a usar um valor de 1 centímetro para o valor de largura.
A largura da curva pode ser armazenada por ICurve usando:
(GeometryScope::kConstantScope)
Ou ser armazenada por curva usando:
(GeometryScope::kUniformScope)
Ou pode ser armazenada por cv usando:
(GeometryScope::kVertexScope)
Observe que o importador é compatível com "kUniformScope", mas isso não foi testado.
Convenções de nomenclatura
Os nomes das propriedades devem estar em letras minúsculas, sem espaços ou caracteres especiais.
Todas as propriedades devem começar com o seguinte prefixo:
groom_<attr>
Por exemplo, "groom_id", "groom_color" ou "groom_width" usam a convenção de nomenclatura adequada.
Escopo e precedência
Neste documento, as propriedades têm um escopo atribuído. O escopo controla em que nível a propriedade de tratamento pode ser definida.
Os escopos disponíveis são:
| Escopo | Descrição |
|---|---|
| Constant | Esses parâmetros têm um valor único para todas as curvas com um objeto "AbcGeom::ICurves". |
| Uniform | Esses parâmetros têm um valor por curva em um objeto "AbcGeom::ICurves". |
| Vertex | Esses parâmetros têm um valor por curva por CV. |
Propriedades gerais
Esta seção descreve as propriedades que se aplicam ao tratamento como um todo. Adicione estas propriedades ao nó mais alto: IXForm ou ICurves.
| Nome | Tipo | Opcional | Descrição | Valor |
|---|---|---|---|---|
| "groom_version_major" | int16 | Não | Usada para identificar a versão principal do esquema de tratamento com a qual o arquivo está em conformidade. | 1 |
| "groom_version_minor" | int16 | Não | Usada para identificar a versão menor do esquema com a qual o arquivo está em conformidade. | 5 |
| "groom_tool" | string | Sim | O nome e a versão da ferramenta que gerou esse arquivo. Útil para depurar e rastrear problemas. | |
| "groom_properties" | string | Sim | String que descreve os parâmetros usados para gerar esse tratamento. São opções específicas da ferramenta usadas para depuração. |
Parâmetros de geometria
Todos os parâmetros de geometria são opcionais, mas têm um comportamento interno para o qual retornar caso não estejam presentes com o tratamento exportado.
| Nome | Tipo | Escopo | Opcional | Descrição | Alcance |
|---|---|---|---|---|---|
| "groom_ guide" | int8/16/32 | Constante/Uniforme | Sim | Guias são gerados a partir de fios importados e configurações de dizimação. | 0 = Not a guide / 1 = Guide |
| "groom_group_id" | int32 | Constante/Uniforme | Sim | Todos os fios serão agrupados. | [0, INT_MAX] |
| "groom_root_uv" | float32/64[2] | Uniforme | Sim | UV-raiz da superfície subjacente à qual as raízes estão vinculadas. Suporta coordenadas de textura UDIM. |
[-FLOAT_MAX, FLOAT_MAX] |
| "groom_id" | int32 | Uniforme | Sim | Os fios não têm ID. Destina-se ao uso em depuração e com o atributo "groom_closest_guides". | [0, INT_MAX] |
| "groom_color" | float32/64[3] | Vértice | Yes | Reverte para a cor preta. | [0, FLOAT_MAX] |
| "groom_roughness" | float32 | Vértice | Sim | Retorna à cor preta. | [0, FLOAT_MAX] |
| "groom_closest_guides" | int32[3] | Uniforme | Yes | Destina-se ao uso especializado em que os dados de interpolação são calculados fora da Unreal Engine. | [0, INT_MAX] |
| "groom_guide_weights" | float32[3] | Uniforme | Yes | Destina-se ao uso especializado em que os dados de interpolação são calculados fora da Unreal Engine. | |
| "groom_clumpid" | int32 | Uniforme | Sim | ID do grupo. | |
| "groom_group_name" | string | Constante/Uniforme | Sim | Nome do grupo. |