воскресенье, 16 июня 2019 г.

Документация MegaSplat 1.6

    Известные проблемы:
    Unity версий от 5.6 до 5.6.1p2 ломает Массивы Текстур(Texture Arrays). Если вы используете 5.6, пожалуйста, убедитесь, что версия Unity выше, чем 5.6.1p2.
    Существуют сложные проблемы с использованием Metal API в OSX, для получения дополнительной информации об этих проблемах см. Нижнюю часть этого документа.

Обзор

   MegaSplat - это усовершенствованная система Splat Mapping для Unity, которая позволяет нарисовать до 256 текстур на Мешах или Terrains(Ландшафтах), используя один материал и визуализируя их за один проход на основе карты высот используя смешивание(blending). Традиционные методы отображения сплатов ограничены четырьмя или пятью текстурами за проход, а стоимость эффекта пропорциональна количеству используемых текстур. MegaSplat имеет постоянную стоимость пиксельного шейдера независимо от того, сколько текстур используется. MegaSplat основан на стандартном рабочем потоке Unity Metallic, что означает, что он поддерживает все функции освещения, которые поддерживает Unity.
    MegaSplat работает и с мешами, и с Unity Terrains. Шейдеры и набор инструментов доступны для обоих рабочих процессов. 

Требования

    MegaSplat требует поддержки Texture Array и Unity версии 5.6.1p2 или выше. Texture Array доступны на большинстве платформ, за исключением DX9 и openGLES2.0. Если при открытии примера сцены вы видите черный ландшафт, вероятно, это связано с тем, что Unity работает в режиме эмуляции или в DX9. Чтобы это исправить, убедитесь, что в настройках Edit>Graphics Emulation установлено значение «No Emulation»:


    Также убедитесь, что ваш редактор работает в режиме DX9 или OpenGL/Metal. Текущий используемый API указан в верхней части окна Unity:


    Иногда Unity возвращается к использованию эмуляции или запуску в DX9 или DX11 в режиме DX9, если используется более старая встроенная видеокарта. Когда это происходит, ландшафт отображается как черный.
    Обратите внимание, что при сборке для OSX Unity версии 5.6 и выше, по умолчанию, используется значение Metal, но в редакторе используется OpenGL. Пожалуйста, обратитесь к разделу в конце этого документа для получения дополнительной информации о рендеринге в MegaSplat: Metal и OpenGL.

 Быстрый старт

     Лучший способ понять, как работает MegaSplat, - запустить игру в приведенных примерах. В MegaSplat есть ДВА рабочих процесса, один для работы с мешами (с использованием Vertex Painter) и другой для работы с Ландшафтами(Terrains) Unity (с использованием Terrain Painter). В следующем руководстве используется набор инструментов Vertex, поэтому убедитесь, что вы открываете правильные сцены и набор инструментов.

- Откройте сцену MegaSplat/Examples/Scenes/Mesh.unity или MegaSplat/Examples/Scenes/MeshTessellation.unity
- Выберите меши GameObject. Выбрав корневой игровой объект, вы можете одновременно разрисовать все остальные игровые объекты, связанные с ним.
- Убедитесь, что свойство Active является true
- Перейдите на вкладку Custom
- Нажмите на свойство селектора объекта «Brush» и выберите «MegaSplat_Example» в качестве кисти.
- Выберите текстуру из меню и начинайте рисовать

    Обратите внимание, что все рисование с помощью шейдеров MegaSplat должно выполняться на вкладке «Custom» или «Flow», если направление рисования идет в рисовании вершин. Рисование цвета вершин или UV-каналов может иметь нежелательные эффекты, так как эти данные используют шейдеры.


Окно Vertex Painting
    В первом разделе этого окна вы можете включить или отключить Vertex Painter, показать данные, нарисованные на вершинах, используя шейдер предварительного просмотра, изменить вид кисти(brush visualization) и переключаться, если нужно отобразить каркас выбранных мешей.
     Вы можете отменить любые изменения на любых вершинных каналах, нажав на кнопку в полосе «Clear Channel». Все редактирование в рисовании вершин неразрушаемо, но отменяемо.
     Следующая область содержит различные настройки кисти, такие как размер(Size), течение(Flow) и спад(Falloff). Рисование вершин поддерживает давление планшета. Вы также можете заполнить все выбранные меши с помощью кнопки Fill(Заливка).
     Наконец, вы можете изменить режим кисти и выбрать кисти для рисования.

    Режим кисти позволяет рисовать, используя разные слои и умные кисти. При использовании двухслойного шейдера вы можете рисовать на верхнем или нижнем слое. Вы можете рисовать отдельные текстуры за раз(Single), кластеры текстур(Claster), которые выбираются из набора текстур на основе функций шума, значений угла или высоты или с помощью смешанной кисти.
    Параметр «Blended (Смешанная) кисть» рисует сразу на обоих слоях, позволяя выбрать верхнюю и нижнюю текстуры и использовать шум для наложения между ними. Ее можно использовать для создания очень сложных кистей.
    Стратегия, которую я обычно использую при рисовании, состоит в том, чтобы заполнить нижний слой одним набором текстур, затем переключиться на верхний слой и смешать другой набор текстур, а затем переключиться обратно на нижний слой, чтобы смешать третий набор. Хотя в каждой вершине на каждом слое может существовать только одна текстура, подобная работа в обоих направлениях позволяет мне создавать богатую и сложную поверхность естественным образом.
    Как только вы закончите играть с примером сцены, остальная часть этой документации поможет вам настроить ваши собственные меши и текстуры для использования с системой, а также понять все инструменты и функции MegaSplat.

Работа с вашими собственными данными 

Обработайте ваши меши

    Если вы работаете с мешами, MegaSplat требует определенных данных каждой вершины для работы. Этот процесс может потребовать разделения некоторых вершин, что приведет к немного большему числу вершин, в зависимости от топологии вашего меша. Чтобы преобразовать меш, откройте конвертер в Window-> MegaSplat Mesh Converter и перетащите игровой объект из окна проекта в поле «Game Object», и все меши, содержащиеся в этом ассете, будут преобразованы. Ваш меш должен быть настроена на чтение/запись в настройках средства импорта, чтобы данные меша были доступны для обработки. Нажмите кнопку, и рядом с вашим исходным ассетом будет создан новый ассет с добавлением «_splat» на имя.
    Обратите внимание, что если вы планируете использовать статическую оптимизацию меша или отключите чтение-запись, вы захотите запечь свои меши, когда закончите их рисовать. Это обсуждается позже в этом документе.

Создание текстурных массивов

    MegaSplat основан на массивах текстур, которые являются новой функцией текстурирования, представленной в Unity 5.4. не предоставляет инструментов для управления массивами текстур, поэтому MegaSplat предоставляет их для вас. Массив текстур - это, в основном, длинный список текстур, которые действуют как единый ресурс для графического процессора. Массивы текстур в MegaSplat управляются объектом TextureArrayConfig, который автоматически упаковывает и преобразует исходные текстуры в несколько массивов текстур.

Создание текстуры массива

    Щелкните правой кнопкой мыши в представлении проекта внутри этой папки и перейдите в «Create->MegaSplat->Texture Array Config»
Выберите созданный конфиг и дайте ему имя.

    После того, как вы создадите Texture Array Config, вы будете управлять всеми текстурами для ваших материалов из этого интерфейса.

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

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




    В списке текстур вы можете управлять исходными данными для каждой текстуры. Для каждой записи вы можете указать вещество или список исходных текстур для каждого компонента поверхности PBR. Если вам не хватает одной из этих текстур, упаковщик текстур создаст недостающие данные из предоставленных вами карт (сгенерирует карту нормалей из вашей карты высот и т. Д.), Когда он упакует данные в массивы.
     Текстуры diffuse, normal, height, smoothness и ao упакованы в два массива текстур. Если используется металлическая или эмиссионная карта, будет создан другой массив для хранения этих данных. Если назначена альфа-текстура , будет создан отдельный альфа-массив.
     После создания вы можете назначить эти массивы вашим материалам так же, как вы бы назначили обычную текстуру.


Нажатие «Update» скомпилирует ваш массив. Это может занять несколько минут, так как необходимо упаковать текстуры вместе и сгенерировать все недостающие текстуры, которые ему нужны.
    Также есть возможность сортировать ваши текстуры по имени.

Библиотека кластеров текстур (необязательно)

    Каждый Texture Array Config также содержит библиотеку кластеров текстур. Кластер текстур - это группа текстур, которая должна рассматриваться как одна при рисовании. Например, у вас может быть три варианта текстуры грязи и камня, и вы хотите нарисовать их в случайных вариациях. Это может быть огромной визуальной победой, поскольку это сломает любой тайлинг. Используя эту технику, вы можете предпочесть меньшие текстуры с большим количеством вариаций, которые могут выглядеть намного лучше, чем одна текстура с высоким разрешением.
    MegaSplat может автоматически генерировать эти кластеры для вас на основе соглашений об именах. Например, если вы назовете свои текстуры mud_01, mud_02, mud_03 и нажмете «Auto Generate Clusters» в редакторе конфигурации массива текстур, он автоматически создаст кластеры этих текстур. Вы также можете добавить их вручную с помощью кнопки «Create New Entry».
    Если вы откроете один из сгенерированных кластеров, вы увидите список всех текстур, которые он использует, и систему смешивания, которую он использует, под ними.


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

При рисовании, какая текстура будет выбрана, будет основываться на одной из трех функций:

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

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

Height
`Используйте локальную высоту вершины

Редактор Noise(Шума)


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

Angle(Угол)



    Опция угла позволяет выбирать текстуры на основе угла вершины нормали. Это выражается в виде кривой анимации, отображающей угол от -1 (вниз) до 1 (вверх) нормали вершины к значению от 0 до 1, представляющему положение в кластере. Если бы у нас было три текстуры в нашем кластере и нарисованы по всей поверхности, используя кривую по умолчанию, первая текстура в массиве была бы применена к вершинам, которые в основном направлены вниз, вторая текстура была бы применена к нормалям вершин, указывающим в основном вбок, и третье будет применено к нормали вершин, направленной в основном вверх.

Height(Высота)


`Параметр высоты аналогичен параметру угла, за исключением того, что он отображает значение высоты 0-1 вместо нормального угла вершины. В этом режиме текстуры ранее в кластере будут применены к нижней части объекта, а текстуры позже в верхней части. Вы можете использовать кривую, чтобы настроить это отображение.

Настройка ландшафта

    Чтобы начать работу с Unity Terrain в MegaSplat, просто выберите ландшафт и откройте инструмент рисования ландшафта. Окно рисования ландшафта заметит, что ваш ландшафт не в формате MegaSplat, и спросит вас, хотите ли вы преобразовать его. Когда вы конвертируете ландшафт, он сгенерирует материал и шейдер, создаст текстуры подложки, необходимые для хранения данных сплата, и назначит их ландшафту. Как только это будет сделано, вам нужно настроить материал и шейдер. Вы можете нажать кнопку «Выбрать материал» в Terrain Painter, настроить параметры шейдера и назначить массивы текстур. Когда вы вернетесь в Terrain Painter с выбранным ландшафтом, выберите в меню конфигурацию массива текстур, и появятся инструменты рисования.
    MegaSplat также содержит систему для синхронизации настроек материала и шейдера на многих территориях. Если вы выберете несколько ландшафтов одновременно, он добавит компонент к каждому ландшафту, который содержит ссылку на материал шаблона. Изменения в материале шаблона будут автоматически распространяться на все территории, которые его используют.
    Если ваша местность ранее была текстурирована с помощью другой программы, вы можете преобразовать это текстурирование в формат MegaSplat с помощью преобразователя местности, описанного ниже.
Генератор шейдеров
    MegaSplat стал слишком большим, чтобы использовать встроенные в Unity опции shader_feature и multi_compile для своих шейдеров. Теперь он имеет генератор шейдеров, который записывает новые версии шейдеров, когда вы меняете в них настройки. Это позволяет MegaSplat иметь гораздо больше опций, чем традиционный шейдер, повышает мою способность оптимизировать систему и позволяет избежать десятков шейдеров на выбор с произвольно выбранными комбинациями функций. Скорее, почти все функции могут быть смешаны и сопоставлены с тем шейдером, который вам нужен.
    Чтобы создать новый шейдер MegaSplat, щелкните правой кнопкой мыши в представлении своего проекта и выберите «Создать-> MegaSplat-> MegaSplat Shader».
    Затем создайте материал и назначьте созданный шейдер. Вам также нужно будет присвоить массивы текстур, созданные с помощью Конфигурации массива текстур, для рассеянного и нормального слотов, так же, как вы бы назначали текстуры обычным материалам. Выберите ваш материал, и первый раздел интерфейса - это Shader Compiler:


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

Опции:
    - Name
        - Это путь к материалу в выбранном шейдере
    - Тип шейдера
        - Меш или Terrain
    - Alpha Mode
        - Доступны режимы Альфа или Альфа Тест . Выставляет свойство для альфа-массива.
          См. Альфа-режим для получения дополнительной информации ниже.
    - Tessellation
        - Доступны None, Edge, или Distance на основе Tessellation .
        - Phong Curve. Когда включено, используется Phong Tessellation для полного сглаживания сетки.
        - Tessellate Shadow Pass
            - Нужно ли запустить тесселяцию на shadow pass?
        - Generate Fallback Shader
            - Вызывает создание второго запасного шейдера для устройств, которые не поддерживают тесселяцию.
        - Displace From Center
            - При значении false смещенные вершины перемещаются только вверх вдоль нормалей от исходной поверхности. Когда true, смещение центрируется вокруг исходной вершины, двигаясь как вверх, так и вниз.
    - Per Texture Tessellation Params
        - Позволяет контролировать количество и Up Bias на текстуру
    - Splat UVMode
        - Управляет UV выделением меша.
            - UV берет координату UV из первого набора UV меша
            - UV2 берет координаты UV из второго набора UV меша
            - UV Project использует плоскую проекцию для генерации UV
                - Вы можете выбрать локальное или мировое пространство
                - Доступны Top, Front, или Side проекции
                - Вы можете выбрать использование спроецированных касательных или касательных моделей. Обратите внимание, что модель может иметь только один набор касательных, поэтому выравнивание карты нормалей может быть основано только на проекции или на модели, но не на обоих.
                - Triplanar  использует трипланарные UV, которые смешивают текстуры, проецируемые с верхних, передних и боковых проекций локального пространства. Трипланар может быть ресурсоемким, потому что ему нужно в 3 раза больше образцов.
    - Add Second UV
        - Это позволяет вам иметь дополнительный набор UV для макротекстуры. По умолчанию макроструктура берет UV из первого набора UV меша. Однако, добавив второй набор UV, вы можете использовать проекцию для макротекстуры, второй набор UV или даже использовать трипланарное текстурирование для карт сплат и координаты UV для вашей макротекстуры.
Включение этой опции повышает минимальную модель шейдера до 4.0 из-за количества текстурных интерполяторов, необходимых для прохождения дополнительного набора UV.
    - Lighting mode
        - Текущие варианты: StandardPBR и Ramp. При линейном освещении для представления реакции рассеянного освещения используется 2-мерная текстура. Это полезно для нефотореалистичного рендеринга и устраняет необходимость в ресурсоемких расчетах освещения.
    - Layer Mode
        - Single Layer: один слой данных MegaSplat на контрольную точку
        - Two Layer: два слоя с коэффициентом смешения между ними
        - Detail Texture: один слой MegaSplat, но с детальной текстурой, отобранной для второго слоя
        - Alpha Layer: позволяет наложению второго слоя в смешивающем режиме на макротекстуру (первый слой действует как функция стирания). Полезно, когда вы хотите смешать наложения с традиционными объектами текстуры, например: смешивание песка с основанием здания или нанесение грязи на крышу.
    - Bottom Layer Texturing
        - Painting: режим по умолчанию, позволяет рисовать на этом слое, с выбором текстуры
        - Project 3 way: использует метод процедурной проекции вместо рисования
            - Когда эта опция включена, предоставляется выбор, будет ли эта проекция происходить в мировом или локальном пространстве.
     - Top Layer Texturing
        - Painting: режим по умолчанию, позволяет рисовать на этом слое, с выбором текстуры
        - Project 3 way: использует метод процедурной проекции вместо рисования
            - Когда эта опция включена, предоставляется выбор, будет ли эта проекция происходить в мировом или локальном пространстве.
    - Per Tex Flow Mode
        - None: нет отображения потока
        - Flow: отображение потока включено
        - Flow: отображение потока с преломлением (только двухслойный шейдер)
    - Per Tex Scale
        - Позволяет управлять масштабированием uv текстуры
    - Per Tex Material
        - Позволяет контролировать металлический, гладкость и пористость текстуры. Обратите внимание, что металлик и гладкость используются только в том случае, если вы не предоставляете версию для каждого пикселя. Пористость контролирует, как материал реагирует на влажность, материалы с более низкими значениями пористости темнеет альбедо во влажном состоянии.
    - Per Tex Contrast
        - При использовании PerTextureProperties вы можете при желании установить контраст смешивания для карт на каждой текстуре. Обратите внимание, что смешение слоев по-прежнему контролируется стандартным ползунком контраста.
    - Per Tex Glitter
        - Включает функцию блеска и предоставляет ползунок для силы блеска на текстуру
    - MacroTexture
        - Использовать макрос текстуры по всему мешу или ландшафту?
    - Splats Fade To Macro
        - Устанавливает факторы смешивания, чтобы карт splat показывались близко и и постепенно исчезали в макротекстуре и скрывали следующие два свойства.
    - Layering
        - При смешивании, сверху макротекстура или сплат карты?
    - Blend Mode
        - Как смешать макротекстуру с картами сплат
    - Detail Noise Texture
        - Добавляет возможность иметь единую текстуру деталей для всех данных карт сплат.
Это очень дешево, намного дешевле, чем режим текстурирования деталей, и все равно выглядит великолепно..
    - Per Texture Detail Strength
        - Позволяет контролировать уровень шума детали на текстуре
    - Distance Noise Texture
        - В основном та же методика, что и в Detail Noise Texture, но вместо того, чтобы смешиваться близко, сливается, когда объект удаляется дальше. Это можно использовать с низкими значениями шкалы, чтобы поместить «макро» шум объектов на расстоянии.
    - Parallax Map
        - Следует ли использовать параллактическое отображение? Это создает образцы диффузных текстур во второй раз, чтобы создать эффект глубины. Также работает с тесселяцией для создания еще лучшего эффекта глубины (который может позволить вам снизить факторы тесселяции)..
    - Emission Map
        - Следует ли использовать Emission splat map?
    - Distance Resampling
        - Ресэмплинг всех сплат карт на второй UV шкале и смешивание их с исходными образцами. Это может быть использовано, чтобы помочь уменьшить тайлинг на расстоянии (хотя я лично предпочитаю хорошо спроектированные кластеры текстур, которые намного менее ресурсоемкие).
    - Puddles
         - Позволяет рисовать в  UV3.y тобы на поверхности появлялись лужи. В инструменте Terrain Painter предусмотрена отдельная вкладка Puddles для рисования луж.
        - Доступны несколько режимов луж:
            - Puddles
                - Основная лужа стоячей воды
            - PuddleFlow
                - Стоячая лужи, но вода с мэппингом потока
            - PuddleRefractive
                - Преломляющая вода, которая искажает ландшафт под ней
            - Lava
                - Для рисование поверхностей лавы
                - Существует также опция (“Push Terrain Down”) для управления тем, как лужи взаимодействуют с картой высот. Когда false, рисование луж накапливает воду на текущей поверхности. Когда true, ланшафт сдвигается вниз, как будто она сдвинулась ниже уровня воды. Во многих случаях это тривиальное различие, но если вы анимируете сбор воды в области, вам не нужно, чтобы камни двигались, но лучше, чтобы вода накапливалась. Однако, если вы имеете дело в основном со статичным рельефом ландшафта, то, когда камни выталкиваются, когда вы рисуете воду в область, эта область остается плоской с ровной плоскостью воды..
                - Puddle Foam доступна при использовании режимов PuddleFlow или PuddleRefractive, что позволяет упаковывать текстуру пены в канал B карты нормалей. Пена появится вокруг камней и по всей поверхности воды.
                - Puddle Refraction Depth Dampen, доступная при использовании режима PuddleRefractive, добавляет ползунок, который контролирует степень ослабления рефракции в глубоких областях местности. Идея здесь похожа на пену в том смысле, что мы хотим, чтобы участки воды, которые глубже, имели более спокойное, более широкое преломление, а участки вокруг камней, которые были более мелкими, имели более турбулентное преломление.
                - Доступна опция glitter чтобы добавить блеск в лужи
            - Rain Drops
                - Позволяет анимированные капли дождя в лужах. Дождь может увеличиваться и уменьшаться по мере изменения вашей погоды.
                - No Rain On Walls позволяет фильтровать капли дождя на основе угла нормалей, чтобы они не появлялись на стенах.
            - Wetness
                - Влажность позволяет вам рисовать, насколько влажна данная поверхность. Это может быть очень полезно в сочетании с лужами или как отдельный эффект на стены пещеры и тому подобное.
Влажность рисуется в канале UV1.w или с помощью вкладки terrain painter’s wetness при работе с Terrains.
            - Snow
                - Снег позволяет использовать глобальную текстуру снега для всей сцены. Текстура карты нормалей всегда в формате NormalSAO. Снег предназначен для взаимодействия с лужами, позволяя вам растопить снег в лужи или потоки, открывая скалу под ним.
                - Опция “snow over macro texture” будет применять снег после применения макро-текстуры, позволяя динамическому снегу покрывать текстуру на расстоянии.
                - Опция snow glitter, чтобы включить блеск для снега
            - Disable Bottom Layer Blend
                - Отключить смешивание по высоте в нижнем слое карты сплат, выбрав только одну текстуру для каждого треугольника. Это полезная оптимизация при текстурировании неорганических поверхностей с помощью MegaSplat. Представьте, что у вас есть дом с текстурой стены, крыши и пола. Вы можете назначить все вершины на крыше одной текстуре, все вершины на полу - другой и т. д., Чтобы полностью текстурировать дом, избегая необходимости упаковывать текстуры в список текстур. Это бы хорошо работало, но у вас возникла бы проблема, состоящая в том, что текстура отбиралась 3 раза и смешивалась на полигоне. Включение этой опции сделает так, что для каждого треугольника будет выбрана только одна текстура, а смешение не используется.
             - Low Poly Look
                - Вызывает геометрический шейдер, чтобы придать каждому треугольнику твердый край. Доступен второй вариант, который позволяет смешивать жесткие и мягкие края.
             - Process Mesh
                - Осуществляет ли процесс преобразования меша в геометрический шейдер. Настоятельно рекомендуется выполнять предварительную обработку данных меша вместо использования этой опции, но если вы абсолютно не можете предварительно его обработать или построить свой меш в соответствии с требованиями MegaSplat (или просто хотите увидеть результаты до этого), эта опция делает эту работу в геометрическом шейдере. Однако это намного медленнее.
             - Curved World
                - Если ассет Curved World установлен, эта опция будет генерировать шейдеры с поддержкой Curved World (дополнительная информация Curved World в asset store).
             - Custom Code
                - При включении MegaSplat сгенерирует несколько специальных файлов для вашего шейдера, которые позволят вам вставить собственный код шейдера в различные части конвейера, что позволит вам настроить MegaSplat сверх того, что предусмотрено в пакете.
             - Shader Level Override
                - Позволяет увеличить уровень шейдера в скомпилированном шейдере. Это может быть полезно, если вы хотите явно форсировать совместимость с конкретной платформой или вам нужны дополнительные образцы текстур для вашего пользовательского кода. Обратите внимание, что если MegaSplat необходимо увеличить модель шейдера (скажем, до 4,6 при включении тесселяции), он увеличит ее выше этого значения, чтобы шейдер работал.
             - Debug Options
                - Позволяет просматривать выходные данные каждого канала (альбедо, высота, нормали и т. Д.). Это используется Render Baker для запекания текстур, но также полезно для отладки.

Shader Options

     Остальные настройки материала являются традиционными для шейдера. Ниже объясняется, но параметры, которые вы увидите, будут зависеть от настроек вашего шейдера:


Макротекстурирование позволяет назначить текстуру для всего объекта или ландшафта. В разделе генерации шейдеров представлен ряд опций того, как макроструктура смешивается с картами сплатов. Самым распространенным методом является смешивание данных карты сплат и макротекстуры, которая действует как оптимизация на расстоянии, позволяя вам прекратить выполнение функций отображения сплатов и выполнять только выборку макротекстуры. Тем не менее, макротекстурирование может использоваться другими способами, такими как global tint, или в качестве горизонтальной полосатой текстуры для полосатого ландшафта (используйте второй набор UV для проецирования текстуры горизонтально по ландшафту).




    Раздел Splat Map шейдера. Interpolation contrast контролирует, насколько резким является переход между текстурами. По мере того, как вы понижаете значения, переход становится более мягким, а когда вы повышаетесь, становится намного более четким. Этот параметр будет иметь огромное влияние на сочетание текстур! Вы также можете контролировать это для каждой текстуры с помощью опции PerTexContrast.
     Свойство Texture Scale позволяет масштабировать размер текстур карты сплат по сравнению с основными UV  (или трипланарными UV ).
     Parallax height (показывается, когда включен Parallax) позволяет создавать эффект увеличения глубины за счет повторной выборки диффузных текстур. Слишком высокие значения могут показывать небольшие артефакты, а значение 0 не будет иметь никакого эффекта. Расстояние затухания параллакса указывает расстояние, на котором эффект параллакса начнет затухать. При 2-кратном увеличении этого расстояния эффект параллакса перестанет вычисляться, что сделает шейдер менее ресурсоемким на расстоянии.


    Displacement - это общее расстояние от исходной поверхности, на которое может быть сдвинута тесселяционная вершина.
    Mip Bias позволяет вам ссылаться на более низкий уровень карты MIP при выполнении смещения. Это и немного быстрее, и обычно обеспечивает визуальное повышение качества, не позволяя смещению создавать как можно больше шипов из мелких деталей на карте высот.
    Shaping - это отдельный контроль контраста того, как слои Splat Mapping смешиваются вместе.
    Up Bias позволяет смещать displacement в сторону восходящего вектора, а не по нормали. На таких поверхностях, как галька и небольшие камни, их выступание со стороны склона выглядит неправильно.
    Up Bias и Displacement может быть скорректировано для каждой текстуры, если включены свойства для каждой текстуры.
    В тесселяции на основе Distance у вас есть коэффициент тесселяции (сколько раз делить данный треугольник), а также минимальное и максимальное расстояние, на котором это значение интерполируется.
    В тесселяции на основе Edge у вас есть максимальный размер экрана, который получит ребро до его разделения.
    Значения min/max также используются для уменьшения смещения, скрывая переход.
    Тесселяция может быть очень ресурсоемкой функцией, поэтому рекомендуется сохранять коэффициент тесселяции или длину ребра как можно более консервативными.

Работа с Тесселяционными Мешами

    Трещины могут появляться в мешах при использовании тесселяции. Это может быть вызвано тем, что вершина имеет одинаковую позицию, но не одну и ту же нормаль (жесткое ребро) или координату UV. Вы можете нарисовать демпфирование смещения в канале UV3.z вершин, чтобы подавить смещение в этих точках. Чтобы сделать это, переключитесь на вкладку Paint в Vertex Painter и выберите UV3_z в качестве целевого канала. Установите значение кисти на 1 и нарисуйте вершины. Вы также можете использовать это, чтобы контролировать величину смещения на вершину. Значение 0 будет иметь максимальное смещение, а значение 1 не будет иметь смещения.
 

Detail Texturing


    При использовании режима Detail Texture, детальные текстуры можно смешивать по мере приближения к поверхности, обеспечивая улучшенное чувство разрешения. Обратите внимание, что для детальных текстур в этом режиме требуется массив текстур, и для них используется тот же индекс, что и для основных текстур сплата. В противном случае параметры масштабирования, наложения и затухания аналогичны параметрам макротекстуры. Для многих случаев использования Detail Noise является более предпочтительным вариантом, так как он не требует полного массива текстур деталей и не использует второй слой MegaSplat для текстурирования деталей.


Параметр «Detail Noise» - это гораздо менее ресурсоемкая форма текстурирования деталей, которая работает со всеми другими режимами слоя и режимами UV. Если эта опция включена, у вас есть одна детальная текстура для всего ландшафта, и вам не нужно иметь отдельный массив текстур для детальных текстур. Это делает его намного менее ресурсоемкой, чем в режиме Detail Texture, и при этом может выглядеть потрясающе, предотвращая расплывчатость объектов из-за отсутствия текстурного разрешения.

Без Detail Noise обратите внимание на размытые текстуры, когда камера находится слишком близко
 С Detail Noise размытые пиксели остались в прошлом

Каналы Blue текстуры используются для модуляции альбедо, при котором каналы Red / Green модифицируют нормаль, а канал Green вносит субтрактивный шум в гладкость. Вы можете думать о них как о карте норм + яркость в синем канале, но, честно говоря, это не имеет большого значения, если шум сосредоточен на 0,5 вокруг изображения, а текстура линейна. Вы можете включить Per Texture Noise Strength в шейдерном генераторе, чтобы контролировать, насколько эта деталь отображается на каждой текстуре.

Текстура DIstance Noise 




Текстурирование Distance Noise является той же базовой техникой, что и Detail Noise, но начинает постепенно исчезать на начальном расстоянии и полностью исчезает на конечном расстоянии. Это может позволить вам ввести текстуру шума в стиле «макро», на расстоянии. 


Без Distance Noise

 С использованием Distance Noise


Flow Mapping


     Текстура Flow Mapping позволяет создавать движущиеся поверхности. Пользователи могут рисовать направление потока, используя набор инструментов рисования, для мешей или ландшафтов. Когда этот параметр включен, отображаются общие настройки скорости и интенсивности, хотя пользователь может регулировать скорость потока для каждой текстуры в следующем блоке. По умолчанию отображение потоков не применяется к каждой текстуре; Вы должны установить значение скорости для текстур, которые вы хотите отобразить на карте.
     Направление потока отображается в каналах UV2 zw или через вкладку «Flow» в инструменте Terrain Painter. Чтобы нарисовать направления потока на мешах, переключитесь на вкладку «Flow», выберите каналы UV2_ZW и нарисуйте текстуру, в которой вы увеличили скорость потока. Вы также можете включить режим предварительного просмотра в окне Vertex Painter и просмотреть направления потока на текстуре воды или в виде стрелок на поверхности.

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



     Если вы используете многослойный шейдер, отображение потока применяется только к верхнему слою. Доступны значения альфа и преломления, позволяющие создавать эффекты, подобные воде, которые показывают и искажают текстуру первого слоя. Когда преломление включено, вместо этого используются свойства металла для текстуры и гладкости для масштабирования значений альфа и преломления каждой текстуры. Это позволяет вам иметь воду (прозрачную/преломляющую) и лаву (непрозрачную/преломляющую) в одном и том же шейдере. Чтобы это работало, убедитесь, что глобальная  Flow Alpha установлена в 1, а затем установите  Flow Alpha для каждой текстуры.


    Часто бывает полезно иметь настройки для каждой текстуры в массиве; однако Unity не обеспечивает поддержку свойств массива. Чтобы обойти эту проблему, когда в генераторе шейдеров включено какое-либо свойство для каждой текстуры или когда включено отображение потока, текстура 256x4 записывается для хранения различных значений для каждой текстуры.
     В этом окне будут показаны только те свойства, которые вы включили. Выберите текстуру с помощью ползунка индекса и настройте любые свойства для этой текстуры. Если вы хотите установить все текстуры в массиве для использования этого значения, нажмите кнопку All, и текущее значение будет применено ко всем текстурам.


   Система луж в MegaSplat способна создавать стоячие лужи, подобные тем, которые видны на городской улице, а также потоки, которые текут по ландшафту вместе с пеной, которая взаимодействует с поверхностью. Основным преимуществом использования системы луж по сравнению с системой картирования потока является то, что она взаимодействует с местностью более правдоподобным образом и обычно менее ресурсоемко, чем расположение потока на карте.
    Когда режим лужи включен, вы можете смешивать маленькие лужи, рисуя в канале UV3.y или используя вкладку луж в Terrain Painter. Значение 0 не будет отображать лужу, а значение 1 будет полностью загружено.
    Лужи и влажность вводят некоторые новые материальные понятия, с которыми вы, возможно, не знакомы, такие как пористость. Оно представляет, насколько пористый материал - очень пористые материалы будут собирать больше воды, чем остальные материалы, и, таким образом, будут иметь более блестящую и темную поверхность во влажном состоянии. Поскольку пористость имеет много общего с шероховатостью, пористость на пиксель рассчитывается на основе карт гладкости, а затем модулируется на уровне текстуры или глобальной пористости.
    Функция «Puddles» содержит несколько режимов: от наименее ресурсоемких до самых требовательных к мощности компьютеров.
    - Puddles
        - Полезен, если вам нужны просто стоячие лужи воды.
    - PuddleFlow
        - За немного большую ресурсоемкость, вы можете карту нормалей flowmap передать поверхности лужи.
    - PuddleRefractive
        - Это позволяет карте нормалей лужи преломлять поверхность под ней
    - Lava
Это отдельная система, которая использует входные данные лужи для рисования потоков лавы .

    В режимах PuddleFlow или PuddleRefractive доступна опция Foam (Пена). Текстура пены упакована в канал В карты нормалей, используемый для луж. Пена будет наиболее заметна вокруг скал, которые пересекаются с водой.
    Слайдер Normal Blend позволяет вам контролировать влияние воды на нормаль. Если бы вы смотрели на стоячую лужу, поверхность воды была бы совершенно плоской. Когда NormalBlend установлен в 1, области воды имеют абсолютно плоские нормали. При значении 0 используется нормаль исходной поверхности. Это значение должно быть установлено близко к 1 для стоячей воды и ближе к 0,5 для чего-то вроде текущей воды.
    Водный оттенок может придать воде тонкий оттенок. Значение 0,5, 0,5, 0,5 не имеет никакого эффекта. Наконец, настройки потока доступны для управления скоростью и интенсивностью отображения потока.

Raindrops(Капли Дождя)

 

    Когда включены капли дождя, в лужах появляются анимированные капли дождя. Капли дождя требуют специально сконструированной текстуры, которая включена в MegaSplat (water_ripple, в каталоге examples / texture). Rain Intensity  контролирует, насколько видны лужи. Rain UV Scale позволяет масштабировать дождь относительно текстуры на лужах.

 Lava


    Когда вы устанавливаете тип лужи на Lava, для настройки параметров лавы доступен отдельный интерфейс. Лава окрашивается точно так же, как лужи, поэтому материал может иметь лаву или лужи, но не оба.


    Текстура, используемая для Lava, использует собственный формат упаковки. Красный и зеленый каналы карты нормалей упакованы в красный и зеленый каналы текстуры лавы. Синий канал содержит своего рода карту высот, используемую для окрашивания поверхности. Альфа-канал контролирует высыхание лавы; значение 0 будет чисто жидким, а значение 1 будет высушенной затемненной лавой. Две папки с примерами (lava_flow и lava_flow2) включены в папку примеров.
    Свойство UV Scale можно использовать для масштабирования текстуры лавы. Ширина смеси определяет, как быстро происходит переход между лавой и подстилающей поверхностью. Максимальное значение позволяет вам уменьшить максимальное количество лавы, удаляя лаву из всей сцены. Скорость и интенсивность контролируют скорость и время цикла отображения потока на лаве; скорость воспринимается как постоянное движение, а интенсивность - как количество вращения в эффекте карты потока.
    Сушка контролирует степень охлаждения лавы. Когда сушка установлена ​​на высокое значение, в текстуре появятся большие области охлажденной лавы. Обратите внимание, что это основано на альфа-канале текстуры лавы.
    Размер искажения, скорость и масштаб влияют на величину искажения, скорость эффекта искажения и размер текстуры искажения. Обратите внимание, что все 4 канала текстуры Лаваля используются в качестве входов для функции искажения.
    Градиент в синем канале текстуры лавы используется для смешивания основного цвета лавы с цветом подсветки. Цвет кромки очерчивает область лавы, ползет вверх по скалам.

Снег


    Когда снег включен, вы можете использовать фильтры высоты и количества, чтобы контролировать, сколько снега появляется в вашем ландшафте. Snow использует текстуру карты альбедо + высота и текстуру NormalSAO (Normal RG в каналах RG, плавность в B, AO в альфа-канале). Ультрафиолетовая шкала основана на макроструктуре и соответственно масштабируется. Количество контролирует общее количество снега по местности. Диапазон высоты определяет начальную точку появления снега и количество единиц, которые нужно смешать до полного снежного покрова. Влияние карты высот определяет, сколько исходных значений высоты местности используется для определения места сбора снега. Положительные значения эрозии приводят к таянию снега на высоких участках поверхности, в то время как отрицательные значения приводят к его таянию на нижних участках поверхности. Значение кристаллов контролирует зеркальную реакцию снега - более высокие значения выглядят более ледяными, а более низкие значения выглядят более пушистыми. Наконец, таяние влияет на BDRF по краям снега, делая его более влажным.
    Вы можете контролировать «вектор вверх» снега. По умолчанию он указывает вверх, но изменение значений может позволить снегу накапливаться на одной стороне горы больше, чем на другой.
    Лужи и тесселяция все взаимодействуют со снегом. Если вы нарисуете лужи на снегу, используя низкое значение смешивания на лужах, они сначала растопят снег, обнажая поверхность под ним, а затем вода будет скапливаться на мелководье поверхности. По мере того, как снег заполняет трещины, поверхность поднимается, становится более гладкой и принимает на себя аспекты смещения карты высот в текстуре снега.
    При анимации снега, который будет добавлен или удален со сцены, лучше всего настроить несколько значений одновременно. Снег должен накапливаться с влиянием карты низкой высоты, эрозии, кристаллов и факторов таяния. Как только показ закончится, эти значения должны увеличиться, чтобы превратить существующий снег в лед (кристалл), удалить снег с верхушек скал (влияние карты эрозии / высоты), добавить влажность по краям снега (таяние) и, наконец, уменьшить общее количество количество снега Существует пример компонента для анимации этих значений, и примером анимации может быть сцена, включив компонент в тестовых сценах и сдвинув ползунок времени.

Wetness(Влажность)


    Влажность также можно покрасить. На сетках это сохраняется в канале UV1.w или на вкладке Wetness в инструменте Terrain Painter. Влажность окраски затемняет альбедо и увеличивает гладкость поверхности в зависимости от пористости и шероховатости основной текстуры. Пористость может быть установлена ​​как свойство для каждой текстуры или глобально. Когда поверхности пористые и шероховатые, вода собирается в этих областях и вызывает потемнение альбедо и повышенную отражательную способность.



Мокрый камень с высокой пористостью в природе. Обратите внимание на потемнение и усиление зеркальности.

Glitter(Блеск)



    Блеск добавляет небольшие блестки на поверхности и доступен для снега, луж или на основе текстуры. Небольшая текстура используется с блестками в красном канале (пример текстуры - glitter_noise) и текстурой шума в зеленом канале, которая используется для того, чтобы блеск мерцал. Эта текстура должна использовать опцию fade mips.
Для текстуры блеска доступна ультрафиолетовая шкала, а также отражающая способность, чтобы контролировать, насколько сильный блеск. Снег и лужи также имеют значение блеска, которое контролирует ширину области блеска.

Alpha Режим


Когда включен альфа-режим установлен на Transparent или Cutout, дополнительный массив текстур выставляется для хранения альфа-значения каждой текстуры сплата, и материал рисуется соответствующим образом. В качестве альтернативы, если все, что вы хотите сделать, это вырезать отверстия в местности, вы можете включить опцию «Alpha Hole», которая позволяет вам указать индекс текстуры для отверстий. Например, если вы установите индекс на 0, то везде, где вы рисуете первую текстуру в массиве текстур, будет образовываться отверстие.

Debug


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

Рисование на Меше

Учебное видео:
https://www.youtube.com/watch?v=RNT94fruCl0&t=20s

- Перетащите сконвертированный меш на сцену.
- Назначьте материал для него
- Откройте окно Vertex Painter в Window-> Vertex Painter Pro
- Убедитесь, что меш выбран
- Перейдите на вкладку «Custom»
- Назначьте Texture Array Config, используя поле «Brush»
- Измените режим кисти на «Single Bottom»
- Убедитесь, что переключатель «Active» отмечен в окне Vertex Painter.
- Выберите текстуру в интерфейсе кисти и начните рисовать


Режим кисти «Single» позволяет вам выбирать и рисовать одну текстуру на вашем меше.


Режим кисти «Cluster» позволяет вам рисовать текстуры  на меше, выбранные из кластера текстур.


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

    Ниже приведен пример типов богатых поверхностей, которые могут быть созданы с помощью этой техники. Смешиваются два кластера текстур, каждый из которых выбирается из нескольких исходных текстур.



    Первый кластер смешивает 3 текстуры грязи с шумовой функцией, в то время как второй кластер смешивает 5 текстур породы вместе, и эти две микшируются с помощью третьей шумовой функции. Выложенный плиткой на большой площади, видимых повторов нет, и деталь держится даже при близком расстоянии.
При работе с двухслойным шейдером также есть опция «Auto» для режима слоя. Это будет смотреть на текущую информацию и рисовать на том, какой слой имеет наименьший вес.

Рисование на Unity Terrains


    MegaSplat работает со стандартными Unity Terrains. Создайте новый ландшафт и откройте набор инструментов рисования ландшафта из Windows/Terrain Painter. Выберите ландшафт, и вам будет предложено окно с объяснением шагов, которые необходимо выполнить для ее настройки . Тем не менее, вы можете просто нажать «Set Everything up for me», и Terrain Painter создаст требуемый шейдер и материал и настроит ландшафт для их использования. Как только это будет сделано, вам нужно будет выбрать материал в меню настроек местности и отредактировать его, как минимум вам нужно будет назначить массив диффузной текстуры.
    Unity не позволяет разработчикам получать доступ к данным вершин низкого уровня, и, поскольку Unity использует систему LOD для рельефа, данные вершин в любом случае не согласованы. Поэтому при работе с ландшафтами Unity система будет записывать все данные ландшафта в текстуру рядом с вашим объектом ландшафта. Вы должны нажать SAVE, когда закончите рисование, чтобы сохранить эти данные на диск!

Преобразование существующих территорий Unity 


Оригинальное учебное видео (довольно старое, но все еще актуальное):
https://www.youtube.com/watch?v=ykFWlhwX2_0&t=23s

    Если у вас есть ландшафт Unity, возможно, созданный вами вручную или сгенерированный из системы создания ландшафта, вы можете легко преобразовать этот ландшафт в шейдерную систему MegaSplat. Для этого выберите ландшафт и откройте окно Terrain Painter и используйте кнопку автоматической настройки, чтобы настроить материал, шейдер и ландшафт. Вам нужно будет выбрать сгенерированный материал, настроить параметры шейдера и назначить массив диффузной текстуры.

    С выбранным ландшафтом, перейдите на вкладку Utility и откройте инструмент Terrain Converter. Выберите ваш массив диффузных текстур.


    Этот интерфейс показывает вам текущие текстуры Unity Terrain слева. Справа вы можете выбрать кластер текстуры, который соответствует этой местности. Когда вы сопоставили все исходные текстуры с кластерами, нажмите «Convert», чтобы преобразовать текущие данные отображения сплат в формат MegaSplat.
    Обратите внимание на настройки в верхней части, над texture->cluster mappings. Шкала шума кластера позволяет вам установить глобальную шкалу шума кластера, основной метод защиты от мозаики, предлагаемый в MegaSplat.
    Blend Biasing позволяет смещать смесь между двумя слоями к центральной точке, так что две текстуры смешиваются в большем количестве областей над областью наложения.
    Blend Blur размывает исходное изображение карты сплат. Это создаст более широкие области смешивания между слоями.
    Каждое отображение кластера текстур также имеет ползунок Contrast - это позволяет вам сместить смесь, чтобы сделать одну текстуру более преобладающей, чем другую в преобразовании.
    Обратите внимание, что Blend Biasing, Blend Blur и Contrast полезны только с двухслойным шейдером.


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


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

Некоторые советы:

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

Render Baking

     Одна из оптимизаций, которая возможна с MegaSplat, заключается в плавном исчезновении макротекстуры мешей или ландшафтов, которые находятся далеко. В некоторых случаях желательно визуализировать эту текстуру на нарисованных данных MegaSplat. MegaSplat включает в себя инструмент Render Baking, который запекает нарисованное на ряде мешей или ландшафтов с набором текстур.
    Чтобы использовать эту функцию, выберите ландшафты или меши, которые вы хотите запечь для одного набора текстур. Обратите внимание, что если вы запекаете несколько мешей для одного набора текстур, то у них не должно быть перекрывающихся UV, иначе данные, отображаемые в этом разделе текстуры, будут отображаться в зависимости от того, какой меш был нарисован последним.
    Откройте панель «Utilities» в наборе инструментов «Terrain» или «Vertex». Выберите выходной путь и разрешение. Затем выберите, какие «features» вы хотите экспортировать, и нажмите «Export Selected».
    Если выбраны все функции, то MegaSplat будет отображать карты диффуза, нормали, ambient occlusion, emissive, height, metallic, и roughness всех выделенных мешей (или для вашеего ландшафта). Затем вы можете упаковать их для своей любимой программы  редактирования изображений и использовать их в качестве макротекстур.

Режим Alpha Layer


    Режим Альфа-слоя шейдера можно использовать для рисования карт сплатов поверх текстурированных объектов.


В этом режиме макротекстура используется для текстурирования объекта, а вес верхнего слоя слияния используется для смешивания с данными слияния. Рисование на нижнем слое выступает в качестве инструмента стирания для удаления отображения сплат.
    Чтобы настроить это, создайте новый шейдер MegaSplat и материал с Layer Mode, установленным на AlphaLayer, поместив исходные текстуры в область Macro Texture. Затем откройте vertex painter, установите кисть на нижний слой и нажмите fill. Это заставит объект появляться без карт сплат. Установите кисть на второй слой, выберите текстуру или кластер для рисования и нарисуйте карты сплат на вашем меше.
    По умолчанию шейдер будет использовать одинаковые UV-координаты как для макротекстуры, так и для данных карты сплат. Однако в настройках шейдера есть опция, которая вызывает использование второго набора UV для вашей макротекстуры.

Проблемы с тангенсами


    При работе с несколькими наборами UV, имейте в виду, что меш имеет только один доступный набор тангенсов, и большинство программ моделирования (а также параметры импорта Unity) всегда генерируют эти тангенсы на основе первого набора UV. С практической точки зрения это означает, что если в вашей модели отражены и повернуты UV, то тангенс пространство будет зеркально отражено или повернуто для всех UV относительно нормального отображаемого освещения. Если ваш второй набор UV не вращается и не отражается одинаково, то он будет отображать нормальное отображенное освещение, которое кажется перевернутым или прерывистым. По умолчанию тангенсы берутся из модели, но есть возможность при использовании проецируемых UV генерировать тангенсы вместе с проекцией.

Альтернатива режиму альфа-слоя


    Другой вариант текстурирования множества объектов в сцене с использованием MegaSplat - использование системы массивов текстур, чтобы избежать использования нескольких материалов для множества различных объектов. Чтобы использовать их на неорганических поверхностях, таких как дома, вы можете упаковать множество текстур в массив текстур и раскрасить каждый подобъект нужной текстурой. Опцию «disable bottom layer blend» можно затем использовать для отключения из расчетов экстрасэмплов и блендинга, необходимых для отображения сплатов. Обратите внимание, что вы все еще можете использовать двухслойный шейдер, чтобы смешать другую текстуру поверх традиционной текстуры аналогично тому, как работает смешивание Alpha Layer. Это может быть мощной техникой, которая позволяет вам значительно сократить количество draw calls в сцене.

Вопросы производительности


    Производительность шейдеров - сложная тема, но на большинстве аппаратных средств эти шейдеры будут зависеть от сэмплинга текстур и пропускной способности памяти, а не от арифметических расчетов. Тем не менее, не все образцы текстур равны. Например, сэмпл текстуры несколько раз в одной и той же области может быть намного быстрее, чем сэмпл нескольких текстур. С учетом вышесказанного, развертывание Debug на этих шейдерах покажет вам точное количество выполненных сэмплов на пиксель с включенным текущим набором параметров. Хотя он и не идеальный эталон, и, конечно, не линейный (12 сэмплов не в 6 раз медленнее, чем, например, 2 сэмпла), тем не менее, является разумным ориентиром для снижения производительности.
    В качестве примера, вот как счетчики выборок разбиты по функциям для нескольких заданных шейдеров. Обратите внимание, что стандартный Terrain Shader с 8 текстурами собирается нарисовать два прохода объекта, что требует дополнительных затрат в сравнении только сэмплинга текстур.


Shader
Unity Terrain Shader
w/ 4 textures
Unity Terrain Shader 
w/ 8 textures
MegaSplat 
(Single Layer)
MegaSplat
 (Two Layer)
Diffuse Only
5 samples per pixel
10 samples per pixel
3 samples per pixel
6 samples per pixel
Diffuse + Normal
9 samples per pixel
18 samples per pixel
6 samples per pixel
12 samples per pixel
Diffuse + Normal + Specular + AO
13 samples per pixel
26 samples per pixel
9 samples
12 samples

    Здесь мы видим, что эта техника более эффективна, чем стандартные Terrain Unity, с гораздо лучшим качеством. Однако MegaSplat поддерживает множество методов, недоступных ни в Terrain Shader Unity, ни даже в стандартном Shader Unity. Довольно просто создать шейдер, который может иметь 30 или более текстурных сэмплов на пиксель.

Вот пример того, как некоторые функции влияют на сэмплы:
  • Parallax mapping
    • - Требуется еще один сэмплинг диффузных текстур, так что еще 3 или 6 сэмплов, в зависимости от того, какой шейдер MegaSplat используется.
  • Flow Mapping
    • Flow Mapping требует прямого удвоения всех образцов текстуры в области, где активна карта потока. Условное ветвление используется в областях, где карта потока не активна, чтобы уменьшить количество сэмплов на пиксель.
    • Flow mapping также создает зависимое считывание текстуры, которое медленнее, поскольку графический процессор должен ждать считывания одного значения, прежде чем он сможет вычислить UV для следующего сэмпла.
  • Per Texture Properties
    • Поскольку Unity 5.4 не поддерживает свойства массива для материалов, мы сохраняем свойства каждой текстуры в текстуре 256x4. Каждый пиксель, который должен быть выбран (в зависимости от набора функций), добавляет 3 дополнительных сэмпла (на слой). Хотя стоит отметить, что из-за небольшого размера текстуры, это, вероятно, намного быстрее, чем другие сэмплы в системе.
    •  Однако, поскольку это чтение текстуры должно произойти до того, как сэмплы массивов будут выполнены, это может привести к остановке графического процессора (это называется зависимым чтением текстуры), поэтому подумайте, действительно ли вам нужны per-texture properties или нет, прежде чем включать их.
  • Triplanar Texturing
    • Трипланарное текстурирование требует сэмплинга один раз для каждой проекции, поэтому умножьте общее количество сэмплов на 3. При использовании трипланарного режима вы захотите свести к минимуму другие функции
  • Macro Texturing
    • Макротекстурирование добавляет 1-2 сэмпла для основной текстуры в зависимости от режима упаковки. Тем не менее, если вы полностью перейдете к макротекстуре, шейдер начнёт работу без какого-либо отображения сплата. Это позволяет вам иметь дистанционную текстуру, которая является чрезвычайно эффективной.
  • Tessellation
    • Тесселяция может легко поставить любой графический процессор на колени. Правильная настройка параметров имеет жизненно важное значение. На некоторых графических процессорах стоимость включения тесселяции, даже если вы не генерируете много вершин, может быть высокой - поэтому рекомендуется переключаться на резервный шейдер, когда объект находится вне диапазона тесселяции.
    •  Edge Length (при использовании режима edge) и свойства тесселяции управляют максимальным количеством тесселяции. Когда длина edge мала или тесселяция высока, генерируется больше треугольников.
    • Регулировка min/max расстояния для тесселяции уменьшит общую тесселяцию на расстоянии в режиме «Distance». Однако они используются только для затухания смещения, когда в режиме edge, так как в этом режиме размер пространства экрана edge используется для определения коэффициента тесселяции.
  • Resample Distance
    • Удваивает количество образцов карты сплат; предпочитаю кластеры текстур, чтобы победить тайлинг по этой технике.
  • Low Poly Look
    • Использует геометрический шейдер для генерации треугольников с жесткими краями. Использование геометрического шейдера обычно медленное, и в этом случае выдает больше вершин, чем было у меша.
  • Puddles
    • Простые лужи очень дешевы на мешах, не требуют текстурных сэмплов. На Terrains производится сэмплинг второй контрольной текстуры для данных о том, куда уходят лужи. Лужи с потоком требуют 2 стандартных образца текстуры на пиксель, поэтому они все еще дешевы. Лужи с пеной и преломлением стоят дополнительных сэмплов текстуры.
  • Snow
    • Снег требует 2 сэмпла текстуры на пиксель. Когда тесселяция включена, эти сэмплы также должны быть сделаны на стадии дисплейсмента.
  • Per Texture Properties
    • Хранятся в небольшой текстуре 256х4. Несмотря на то, что они быстро отбираются из-за размера текстуры, в некоторых случаях они могут ввести небольшое зависимое считывание текстуры, когда графический процессор должен ждать завершения этих отсчетов, прежде чем начинать следующие.

    Обратите внимание, что шейдер terrain выполняет дополнительные 3 сэмпла для контрольной текстуры на слой и должен дождаться окончания этих сэмплов, чтобы выполнить следующий набор сэмплов. Эта текстура хранит информацию, которая будет отпечатана в вершинах меш-шейдеров. Из-за этого рендеринг ландшафта может быть медленнее, чем рендеринг регулярных мешей. Может помочь использование более мелкой управляющей текстуры, повышающей вероятность того, что необходимые тексели находятся в кеше. Displacement Dampening, Flow Mapping или Puddles также требуют сэмплинга дополнительной управляющей текстуры для их данных.

Collision Response

     MegaSplat включает в себя компоненты, которые помогут вам определить, какую текстуру вы ударили с помощью raycast, а также смещения для работы с физикой и tessellated/displaced поверхностями. Когда вы нажмете кнопку воспроизведения в примерах сцен, вы увидите текстуру, над которой вы сейчас находитесь, отображается в правом верхнем углу экрана.
    Чтобы настроить Collision Response, выберите массив диффузных текстур и включите «Export Texture List». Это позволит экспортировать объект сценариев со списком имен текстур, которые будут использоваться во время выполнения.
    Затем на любом ланшафте или меше, из которого вы хотите получить эту информацию, добавьте компонент MegaSplat Collision Info и назначьте список текстур свойству Texture List компонента. Если ваш шейдер представляет собой двухслойный шейдер, включите two layer, и наиболее доминирующая текстура будет возвращаемой.
    Наконец, вам нужно включить «Keep Runtime Data» в Vertex Instance Stream. Это обеспечит сохранение данных меша в CPU во время игры.
    Камера имеет компонент «DisplayTextureName», который является хорошим примером того, как использовать систему для извлечения информации о текстуре из raycast или collision.

Физика и Тесселяция


    Тесселяция с дисплейсментом выглядит потрясающе; но есть проблема, которая вынуждает многих разработчиков идти в обратном направлении, и это физическая интеграция. Наиболее очевидным решением было бы тесселяция и дисплейсмент физического меша, однако это сделало бы физические меши чрезвычайно большими и неуправляемыми. Таким образом, MegaSplat включает в себя уникальный набор инструментов, которые позволяют интегрировать физику с дисплейсментом для получения точных результатов, а также простые примеры использования этих инструментов.
    Основная идея заключается в том, чтобы сохранить текстуру с низким разрешением для каждой поверхности и выполнить дисплейсмент точки столкновения на CPU. Если вы установите Physics Data Size в массиве диффузных текстур, MegaSplat автоматически сгенерирует эти данные. Для большинства потребностей достаточно данных размером 32 (пикселя), хотя доступны большие размеры, если вам нужно, чтобы что-то пролезало через небольшие трещины в данных дисплейсмента.

Статические Меши


    Для работы vertex painter необходимо сохранить копию меша на CPU с помощью флагов read-write(чтения-записи) в средстве импорта мешей. Когда игра запускается, она применяет изменения к мешам с помощью дополнительной функции VertexStream. Однако это несовместимо с Статический батчингом(Static batching) и некоторыми функциями освещения, которые требуют, чтобы меши были помечены как статические. Чтобы это исправить, на панели «Utility» в Vertex Painter есть инструменты, которые позволяют вам выпекать копии ваших мешей с внесенными в них модификациями вершин. Однако, делать это по одному мешу за раз может быть утомительно, если вы рисуете их много на сцене. Существует также инструмент под названием «Bake Scene to Mesh Cache», который будет выполнять эту операцию для всей сцены, сохраняя все меши, которые были нарисованы, в папку кэша ассетов и заменяя ими используемые в вашей сцене.
    Хотя вы можете использовать это вручную, идеальным рабочим процессом является вставка в build machines build steps. Перед созданием и запеканием lightmaps выполните функцию SaveMeshCache.Bake, передав соответствующую информацию, сохраните сцену, затем вычислите освещение и создайте свой проект и отмените изменения сцены, используя вашу систему контроля версий.

Использование инструментов Vertex Painting


    Система Vertex Painting, включенная в MegaSplat, представляет собой полнофункциональный набор инструментов, способный рисовать цвета вершин, направления потока, редактировать геометрию меша, запекать ambient occlusion или информацию освещения в вершинах и многое другое. Более подробную документацию по его использованию, а также видеоуроки можно найти в моей учетной записи GitHub по адресу:
https://github.com/slipster216/VertexPaint
    Также доступны дополнительные инструменты и пользовательские кисти для выполнения операций, таких как смешивание нормалей между объектами и вставка различной информации в данные вершин.

Terrain Painting


    Система Terrain Painting основана на том же самом коде и принципах рабочего процесса, которые использовались и в Vertex Painter. Однако он рисует только на ландшафтах Unity и не добавляет никаких дополнительных компонентов на сцену, поскольку данные хранятся в текстурах.

Процедурное Текстурирование



Пример меша, текстурированной процедурно, без рисования, в реальном времени

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

    Основная идея аналогична другим трипланарным проекционным шейдерам - текстура автоматически накладывается на Верхнюю(Top), Боковую(Side) и Нижнюю(Bottom) части геометрии. Однако, поскольку MegaSplat работает не так, как традиционные шейдеры, используется специальная версия этого метода, которая использует уникальные возможности MegaSplat.
    Для каждой проекции (Сверху, Сбоку, Снизу) вы можете выбрать 3 текстуры, которые смешиваются друг с другом аналогично использованию кластеров текстур. Важно правильно установить значение шкалы кластера - слишком высокие значения приведут к появлению зашумленных шаблонов, а слишком низкие значения не приведут к значительным изменениям. Наконец, вы можете использовать threshold slide, чтобы определить, какие углы считаются «side» проекцией.
    Это очень мощный инструмент, потому что он позволяет вам отфильтровать выбор top/side/bottom по трем произвольным углам. Вы можете, например, использовать его для текстурирования всей геометрии, обращенной вверх, чтобы быть верхней, всей геометрии с небольшим наклоном, чтобы быть боковой проекцией, и всей геометрии, обращенной вбок или вниз, чтобы быть нижней проекцией.

    Если вы используете двухслойный шейдер, а второй слой настроен на использование 3-сторонней проекции, тогда доступен дополнительный набор вариантов текстурирования и набор вариантов наложения для двух слоев:


    Частоту шума(Noise Frequency), Амплитуду шума(Noice Amplitude) и min/max можно использовать для управления смешиванием двух процедурно-слоистых текстур. Опять же, правильная шкала шума является ключом к тому, чтобы выглядеть потрясающе. Регулировка амплитуды приведет к более быстрому смешиванию между двумя слоями или сведет на нет смешивание при значении ниже 0.
     Ползунок min / max можно использовать для контроля минимального и максимального количества смешивания между двумя слоями.
     Таким образом, вместо простого проецирования 3-х текстур, по одной сверху/сбоку/снизу и их наложения, MegaSplat позволяет проецировать 3 произвольных проекции на два слоя, в общей сложности 19 текстур смешиваются вместе для создания ландшафта. Это обеспечивает гораздо больше разнообразия, устраняет текстуру и делает сцену намного более интересной.


    Наконец, в нижней части интерфейса вы найдете кнопку «Bake to Vertex Stream on selected Meshes». При нажатии любые выделенные меши, которые настроены для использования материала и для окрашивания вершин, будут иметь процедурное текстурирование, запеченное в вершинах. На этом этапе вы можете переключить шейдер обратно в режим рисования, и текстурирование останется, что позволит вам дополнительно изменять меш через интерфейс рисования.
    Этот метод позволяет использовать процедурное текстурирование в реальном времени как способ нанесения быстрого базового слоя на меш перед рисованием. Уловка заключается в том, чтобы сохранить копию материала/шейдера для такого использования, применить его к новым мешам, запечь текстуру обратно в меш, а затем переключиться на версию шейдера с отключенным процедурным текстурированием, так как данные теперь запечены в вершинах, сохраняя вычисления вершин, требуемые процедурной техникой.
    Демонстрация этой функции сделана в MegaSplat Dev Log 15 на канале YouTube.

График Процедурной Текстуры



    По сути, это специфичный для домена шейдерный график для создания процедурных систем текстурирования ландшафта с помощью MegaSplat.
    В отличие от традиционного графа шейдеров, где у вас есть входные данные для уравнения освещения на мастер ноде, который содержит входные данные для выбора текстуры каждого слоя MegaSplat и значения наложения между ними. Этот формат обсуждается ниже.
    Ноды на графике работают с одним из двух типов данных; Индексы текстуры (красный) или значения с плавающей точкой (серый). Ноды 3d-шума, угла нормалей и высоты будут выводить свой результат в виде значения от 0 до 1. Селекторы могут использоваться для выбора между несколькими индексами текстуры на основе одного из этих значений. Кластеры текстур также доступны для использования на графике, и вы можете легко переназначить значения с плавающей точкой с помощью элементов управления кривой.
    Если вы хотите поэкспериментировать с этой функцией, я предлагаю посмотреть MegaSplat Dev Log 16 на канале YouTube, процесс создания графика и текстурирования ландшафта с его помощью. Дополнительная документация находится рядом с этим документом в папке MegaSplat.

Текстурирование Больших Ландшафтов от Внешних Программ


    Многие программы генерации ландшафта могут выводить какое-либо руководящее изображение или диффузную карту для вашей ландшафта. Вы можете использовать эти изображения, чтобы быстро наложить текстуру на весь ландшафт, используя инструмент Splat from Color Map на панели Utilities.


    Этот инструмент берет цветное изображение и файл конфигурации. Пример включен в пакет и может использоваться с изображением t03_guide, находящимся в папке «Examples/Terrain».
     Вы можете создать свою собственную конфигурацию, щелкнув правой кнопкой мыши в окне проекта и выбрав Create/MegaSplat/ColorToSplatConfig.


    Это один мэппинг с этим файлом конфигурации. У вас может быть столько мэппингов, сколько вам нужно. Каждый мэппинг от исходного цвета на вашем изображении до кисти, которая будет применена к этой области изображения. В этом примере мы используем смешанную кисть, которая собирается применить текстуру из текстуры кластера shore_sand к верхнему слою, а текстуру из кластера текстуры песка - к нижнему слою. Функция шума используется для выбора между этими двумя кластерами, а сфера предварительного просмотра обновляется в реальном времени по мере настройки параметров.
     Вы также можете создавать мэппинги, используя индексы, хранящиеся в текстурах, или традиционное изображение текстуры сплат.

Смешивание Объектов



    Пример смешивания объектов меша, на основе ландшафта, включен в каталог примеров. Если вы приблизите объекты к валунам, вы увидите, что они плавно переходят в ландшафт. Это сделано:
  • Необходимо, чтобы координаты UV, используемые для Splat Mapping, были одинаковыми в области смешивания
  • Убедитесь, что картина одинакова на обоих объектах.
  • Было обеспечено выравнивания нормалей и касательных в области наложения.

    В этом примере первое требование выполняется с использованием трехплоскостной проекции мирового пространства для координат UV на обоих объектах.
    Для второго требования просто выберите оба объекта и закрасьте пересечение одним и тем же кластером или текстурой Megasplat.
    Для третьего требования в программе Vertex Painter доступна кисть Normal Blend Brush. Чтобы использовать ее, перейдите на вкладку Custom и выберите NormalBlendBrush в качестве пользовательской кисти (так же, как вы выбираете кисть для MegaSplat). Выберите валун для рисования и ландшафт под ним в качестве «Target object» в настройках кисти. Затем нарисуйте вдоль пересечения, и нормали и касательные отрегулируются, чтобы получить значение, похожее на целевой меш.
    Обратите внимание, что, поскольку положения вершин редко выстраиваются между двумя объектами, нормали и касательные могут немного отличаться. Однако нормаль/касательная, выбранные для выравнивания, основаны на интерполированной нормали в данной позиции, поэтому вы можете обычно немного отрегулируйте угол, пока они не подойдут достаточно хорошо.

Перенос Paint Jobs


    Иногда вы тратите кучу времени на рисование меша, чтобы все выглядело отлично, но потом понимаете, что вам его нужно каким-то образом изменить. Это может быть проблематично, поскольку данные запекаются в меш. Однако MegaSplat включает в себя две утилиты, которые могут помочь решить эти проблемы.
    Первый - это Render Baker, который был рассмотрен ранее в этом документе. Он может отображать текстуру «SplatData» в том же формате, что и система ландшафта. Обратите внимание, что для правильной работы у ваших мешей не должно быть перекрывающихся UV-координат.
    Вторая утилита - это инструмент Splat Data to Vertex Data, который находится на вкладке «Utility» в Vertex Painter. Он может прочитать текстуру Splat Data и применить ее к данным вершины. Его также можно использовать для переноса работ по рисованию из ландшафта Unity в меши.
    Используя эти два инструмента, можно сохранить paint job, изменить геометрию меша и повторно применить этот же paint job. Пример этого делается в MegaSplat Dev Log 16 на  канале YouTube.

Интеграция с другими vertex painters или процедурной геометрией


    Шейдеры MegaSplat могут использоваться с другими vertex painters или процедурной геометрией. Расположение данных для информации о вершине выглядит следующим образом:

Color RGB    =   Vertex Weights
Color Alpha   =   индекс bottom текстурного слоя (с шагом 1/255)
UV1.w            = Wetness
UV2.zw          = Flow Direction
UV3.X           =   смесь между слоями (только слой шейдера)
UV3.Y           = Displacement Dampening с использовании Tessellation
UV3.Z           = Puddle количество
UV3.W          = индекс top текстурного слоя (с шагом 1/255, только шейдер слоя)


Структура данных управляющей текстуры (для использования с ландшафтами Unity):

Color.R = индекс bottom слоя (с шагом 1/255)
Color.G = индекс top слоя (с шагом 1/255)
Color.B = смесь между слоями
Color.A = демпфирование смещения (1 = без демпфирования, 0 = максимальное демпфирование)

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

Color.RG = направление потока(flow)
Color.B = влажность(wetness) (0 = нет влажности, 1 = насыщенная)
Color.A = лужи(puddles) (0 = нет луж, 1 = полное погружение)

    Если вы хотите применить текстуру во время выполнения, просто отрегулируйте цвет вершины или UV-канал соответствующим образом или отрегулируйте пиксели управляющей текстуры при работе с ландшафтами Unity.
    Если вы генерируете процедурную геометрию, то вам необходимо настроить эту геометрию в соответствии с требованиями шейдера. Каждый полигон должно иметь одну красную, одну зеленую и одну синюю вершину, причем только один. Для этого может потребоваться создание дополнительных вершин, но для большинства геометрий количество добавляемых вершин довольно мало.
    Неважно, какой цвет у каждой вершины, до тех пор, пока у каждой вершины на данной грани есть только один из каждого присутствующего цвета. Эти весовые коэффициенты используются для фильтрации данных индекса текстуры, позволяя каждой грани знать три текстуры, которые она должна выбрать для данной грани.

Рисование в Реальном Времени


    Примеры компонентов включены и используются в демонстрационных сценах, чтобы показать, как эффективно рисовать в режиме реального времени. Эти скрипты подробно прокомментированы, особенно в рабочих процессах меша, поскольку кэширование и развертывание используемой математики может обеспечить ускорение на порядок по сравнению с более простой версией. Я предлагаю вам использовать их в качестве шаблона.
    Чтобы они работали с мешами, необходимо включить свойство «Keep runtime data» в VertexInstanceStream меша. Terrains должны перепрыгнуть через несколько обручей, чтобы восстановить текстурные данные в состояние неигрового режима в режиме редактора. Это также задокументировано в компонентах.
    Некоторые из примеров сцен показывают шары, катящиеся по ландшафту, некоторые из них будут рисовать выбранную текстуру на местности.

Расширение Шейдеров MegaSplat Вашим Собственным Кодом


    Удобно ли писать шейдерный код? Когда MegaSplat генерирует шейдер, он делает это из ряда файлов фрагментов, которые можно легко изменить. Однако, если вы обновите MegaSplat, эти изменения будут потеряны. Таким образом, MegaSplat предоставляет вам возможность написать собственный код, который будет включен в определенные точки шейдера, что позволит вам настроить работу MegaSplat в неразрушающем рабочем процессе.
    Параметр пользовательского кода описан в Development Log #20 на YouTube. Когда вы включаете опцию Custom Code, MegaSplat напишет файлы .prop и .cginc для вашей настройки. Эти файлы должны оставаться рядом с шейдером и материалом MegaSplat, и все шейдеры MegaSplat в каталоге с опцией нестандартного кода будут использовать одни и те же файлы .props и .cginc, что позволяет легко иметь несколько шейдеров с одинаковыми модификациями.
    Файл .props можно использовать для объявления новых свойств материала. Они должны иметь префикс с именем _Custom_, чтобы отображаться в редакторе шейдеров MegaSplat. Написанный файл .cginc содержит несколько функций, а также документацию по этим функциям и структурам, которые они используют. Вы можете настроить эти функции таким образом, чтобы изменять положение вершин, изменять входные данные для уравнения освещения (Albedo, Normal и т. Д.) И корректировать результаты тесселяции / смещения. Пожалуйста, обратитесь к .cginc файлу и видео YouTube для получения дополнительной информации.

 Интеграция с Amplify Shader Editor


    Для Amplify Shader Editor были добавлены две ноды, которые позволяют вам создавать свои собственные шейдеры, используя технику MegaSplat.

    MegaSplatSamplerNode работает как сэмплер текстуры, но принимает массив текстур вместо текстуры. Он также принимает параметр Texture Choice (хранится в color.a или UV3.w в макете вершины MegaSplat) и контраст, используемый для смешивания. В настоящее время нода ожидает, что карта высот находится в альфа-канале, выполняет смешивание и выводит окончательный цвет вместе с «Resample Data», который может быть подключен ко второму MegaSplatSamplerNode для выборки карты нормалей или дополнительных карт с использованием та же самая полученная смесь.

    Режим смешивания(Blend) MegaSplat позволяет смешивать несколько слоев данных megasplat, как это видно в двухслойном шейдере MegaSplat. Вы бы вставили полученное значение высоты из ноды сэмплера каждого слоя во входы высоты (A / B), а смешанный вес (нарисованный в UV3.x кистями MegaSplat) в значение наклона.
    Используя эти две ноды, вы можете создавать свои собственные шейдеры в стиле MegaSplat.

Дополнительно


    Набор инструментов Vertex Painting поставляется с набором традиционных шейдеров карт сплат-карт, которые позволяют создать до 5-ти слоев карт сплат-карт с потоковым картографированием. Поскольку шейдерам требуется несколько минут для импорта, они были заархивированы в zip-файле вместе с другими примерами для пакета Vertex Painter.

Примечание о Поддержке OSX и Metal API от Apple

     Ситуация с графическим API на OSX немного беспорядочная. Для максимальной совместимости я рекомендую использовать OpenGL, пока эти проблемы не будут решены Apple и Unity. Обратите внимание, что в Unity 5.6 Metal является API-интерфейсом по умолчанию для сборок в OSX, и начиная с 2017.1 они ожидают сделать Metal API-интерфейсом по умолчанию для редактора. Однако вы можете переключить настройки сборки и редактора для использования OpenGL.
    Apple решила не поддерживать использование Geometry shaders на Metal. Это потому, что шейдеры Geometry действительно медленные, и их, как правило, следует избегать. MegaSplat использует геометрические шейдеры для опций «Low Poly Look» и «Preprocess in Shader», поэтому они не будут работать в OSX при использовании Metal API.
    Тесселяция в настоящее время недоступна в Metal в Unity, поэтому шейдеры тесселяции также не будут работать при использовании Metal API в OSX.
    Некоторые функции MegaSplat, такие как Snow и Wetness, используют слишком много интерполяторов для работы под шейдерной моделью 3.5. Когда эти функции включены, MegaSplat увеличит модель шейдера до модели 4.0 шейдера. Однако, поскольку использование шейдерной модели 4.0 также требует наличия геометрических шейдеров, эти функции отключаются при включении при работе в Metal. Вы можете использовать уровень переопределения шейдеров, чтобы поднять модель шейдера до 4.5, и шейдеры будут работать под Metal, но тогда шейдеры больше не будут работать под OpenGL в OSX, которая не поддерживает модель шейдеров 4.5.
    Итак, как я уже сказал, это беспорядок, и я бы порекомендовал отключить Metal в OSX для редактора и использовать сборку для максимальной совместимости. Однако, если вы хотите использовать Metal в OSX, вы можете создать запасную цепочку шейдеров, создав несколько версий каждого шейдера (4.5 для металла, 4.0 для openGL).

Устранение Неполадок и Часто Задаваемые Вопросы


В: Текстуры сплатов в примере сцены чёрные, что не так?
A: Эмуляция графики включена? Unity часто переключает мой Mac для эмуляции устройств openGLES2.0, на этих устройствах данные карты сплат всегда возвращаются черными, потому что массивы текстур не поддерживаются. Я также добавил цвета отладки для неподдерживаемых типов шейдеров на устройстве.

SHADER_API_D3D9: возвращает зеленый
SHADER_API_GLES (openGLES2.0): возвращает желтый
SHADER_API_D3D11_9X: возвращает синий цвет
Неизвестный: возвращает синий

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

Q: Я не вижу движущихся карт
О: Убедитесь, что анимационные материалы включены, и что вы нарисовали направления потока в каналах UV2.ZW. Убедитесь, что скорость и интенсивность потока увеличены, а затем выберите текстуру в свойствах для каждой текстуры и убедитесь, что ее скорость также увеличена. Наконец, если вы используете двухслойный шейдер, помните, что карта потоков применяется только к верхнему слою, поэтому она должна быть видимой, чтобы увидеть эффект.

Q: Текстуры интерполируются по лицу - я вижу 20 текстур на одном треугольнике.
A: Вам необходимо предварительно обработать ваш меш с помощью конвертера в формат, используемый MegaSplat. Если вы процедурно генерируете геометрию, вам нужно правильно пометить цвета вершин, чтобы у каждой грани было ровно одно красное, одно зеленое и одно синее значение. Если вы используете меши, возможно также, что вы случайно закрасили в цветовые каналы - MegaSplat использует данные в цветовых каналах вершин для фильтрации выбора текстуры, поэтому, если эти данные будут случайно изменены, это может вызвать эту проблему.


Q: Когда я нажимаю кнопку воспроизведения, я получаю сообщение об ошибке, похожее на это, и меш выглядит так, как будто не нарисован!

Не разрешен доступ к цветам в меше 'Combined Mesh (root: scene) 2'
UnityEngine.Mesh: get_colors ()
JBooth.VertexPainterPro.VertexInstanceStream: EnforceOriginalMeshHasColors (Mesh) (в активах / MegaSplat / VertexPaint / VertexInstanceStream.cs: 128)

A: Настройки импорта в вашей меше не установлены на чтение/запись(Read/Write), или вы установили статический меш. Это означает, что ЦПУ не имеет доступа к данным вершин и не может применить задание рисования. Если вам нужно, чтобы ваш меш была статически упакован, или по какой-то причине вам необходимо отключить чтение/запись, вы можете запечь копию готового меша, используя параметры запекания на панели «Utility» инструмента вершин.

Q: Я рисовал ландшафт, но когда я перезагружал свою сцену, она исчезла.
A: В отличие от vertex painter, вам нужно нажать сохранить в terrain painter, иначе изменения не будут сохранены.

Q: Мой ландшафт/меш белый
A: Назначьте массивы текстур вашим материалам в разделе SplatData редактора материалов.

Q: Превью моих текстур в инструментах рисования очень темное!
A: Это ошибка в коде редактора Unity при работе с линейным пространством, и мне еще предстоит найти хороший способ обойти это.


Особая благодарность:
  • Хенрик Холмдат за информацию о минимальной окраске вершин
  • Seneral за свою среду редактора нодов с открытым исходным кодом (используется Texture Graph). Получите здесь: https://github.com/Seneral/Node_Editor

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.