Eksportowanie zaawansowanych formatów tekstur przy użyciu potoku zawartości obrazu w programie Visual Studio

W tym artykule opisano sposób używania potoku zawartości obrazu do eksportowania tekstur, takich jak te, które zawierają mipmapy lub premultiplied alfa, a nawet te, które mogą być używane z aplikacjami Direct2D lub JavaScript.

Eksportowanie tekstury zawierającej mipmapy

Potok zawartości obrazu może generować mipmapy na podstawie obrazu źródłowego w ramach fazy kompilacji projektu. Aby osiągnąć określone efekty, czasami trzeba ręcznie określić zawartość obrazu poszczególnych poziomów MIP. Jeśli nie musisz ręcznie określać zawartości obrazu każdego poziomu miP, generowanie map mipmap w czasie kompilacji gwarantuje, że zawartość mipmap nigdy nie stanie się nieaktualna. Eliminuje również koszt wydajności generowania map mipmap w czasie wykonywania.

Ten artykuł dotyczy:

  • Konfigurowanie obrazu źródłowego do przetworzenia przez potok zawartości obrazu.

  • Konfigurowanie potoku zawartości obrazu w celu wygenerowania map mipmap.

Eksportowanie map mipmap

Mipmapping zapewnia automatyczne miejsce na ekranie Level-of-Detail dla teksturowanych powierzchni w grze lub aplikacji 3D. Zwiększa wydajność renderowania gry lub aplikacji przez wstępne obliczanie przykładowych wersji tekstury. Wstępne obliczanie próbek w dół oznacza, że cała tekstura nie musi być próbkowana przy każdym próbkowaniu.

Aby wyeksportować teksturę zawierającą mipmapy

  1. Zacznij od tekstury podstawowej. Załaduj istniejący plik obrazu lub utwórz go. Aby obsługiwać mipmapy, określ teksturę o szerokości i wysokości, które mają taką samą moc dwóch rozmiarów, na przykład 64x64, 256x256 lub 512x512.

  2. Skonfiguruj właśnie utworzony plik tekstury, aby był przetwarzany przez potok zawartości obrazu. W Eksplorator rozwiązań otwórz menu skrótów dla utworzonego pliku tekstury, a następnie wybierz pozycję Właściwości. Na stronie Właściwości>konfiguracji Ogólne ustaw właściwość Typ elementu na Potok zawartości obrazu. Upewnij się, że właściwość Content jest ustawiona na Wartość Tak , a opcja Wyklucz z kompilacji ma wartość Nie. Wybierz Zastosuj.

    Zostanie wyświetlona strona właściwości konfiguracji potoku zawartości obrazu.

  3. Skonfiguruj potok zawartości obrazu, aby wygenerować mipmapy. Na stronie Ogólne potoku>zawartości obrazów właściwości>konfiguracji ustaw właściwość Generuj mips na Tak (/generatemips).

  4. Wybierz przycisk OK.

Podczas kompilowania projektu potok zawartości obrazu konwertuje obraz źródłowy z formatu roboczego na określony format wyjściowy, w tym poziomy MIP. Wynik jest kopiowany do katalogu wyjściowego projektu.

Eksportowanie tekstury wykorzystującej wstępnie przemnożony kanał alfa

Potok zawartości obrazu może generować wstępnie sformatowane tekstury alfa na podstawie obrazu źródłowego. Mogą one być prostsze w użyciu i bardziej niezawodne niż tekstury, które nie zawierają premultiplied alfa.

W tym dokumencie przedstawiono następujące działania:

  • Konfigurowanie obrazu źródłowego do przetworzenia przez potok zawartości obrazu.

  • Konfigurowanie potoku zawartości obrazu w celu wygenerowania wstępnie ułożonej alfa.

Premultiplied alfa

Premultiplied alfa oferuje kilka zalet w porównaniu z konwencjonalnymi, niewstępnie utrwałymi alfa, ponieważ lepiej reprezentuje rzeczywistą interakcję światła z materiałami fizycznymi, oddzielając wkład koloru texela (kolor, który dodaje do sceny) z przezroczystości (ilość bazowego koloru, który pozwala). Niektóre zalety korzystania z premultiplied alfa to:

  • Połączenie z premultiplied alfa jest operacją asocjacyjną; wynik mieszania wielu przezroczystych tekstur jest taki sam, niezależnie od kolejności, w jakiej tekstury są mieszane.

  • Ze względu na asocjacyjny charakter mieszania z premultiplied alfa, renderowanie wieloprzepustowe obiektów przezroczystych jest uproszczone.

  • Dzięki zastosowaniu wstępnie utrwalonej alfa, zarówno czystej mieszanki addytywnej (poprzez ustawienie alfa na zero) i połączenie interpolowane liniowo można osiągnąć jednocześnie. Na przykład w układzie cząstek cząstka z dodatkiem mieszanym może stać się przezroczystą cząstką dymu, która jest mieszana przy użyciu interpolacji liniowej. Bez premultiplied alfa, trzeba by wyciągnąć cząstki ognia oddzielnie od cząstek dymu i zmodyfikować stan renderowania między wywołaniami rysowania.

  • Tekstury używające premultiplied kompresu alfa o wyższej jakości niż te, które nie mają, i nie wykazują przebarwionych krawędzi — ani "efekt halo" — może to spowodować, gdy mieszasz tekstury, które nie używają premultiplied alfa.

Aby utworzyć teksturę używającą premultiplied alfa

  1. Zacznij od tekstury podstawowej. Załaduj istniejący plik obrazu lub utwórz go.

  2. Skonfiguruj plik tekstury, aby był przetwarzany przez potok zawartości obrazu. W Eksplorator rozwiązań otwórz menu skrótów dla pliku tekstury, a następnie wybierz pozycję Właściwości. Na stronie Właściwości>konfiguracji Ogólne ustaw właściwość Typ elementu na Potok zawartości obrazu. Upewnij się, że właściwość Content jest ustawiona na Wartość Tak , a opcja Wyklucz z kompilacji ma wartość Nie, a następnie wybierz przycisk Zastosuj . Zostanie wyświetlona strona właściwości konfiguracji potoku zawartości obrazu.

  3. Skonfiguruj potok zawartości obrazu, aby wygenerować premultiplied alfa. Na stronie Ogólne potoku>zawartości obrazów właściwości>konfiguracji ustaw właściwość Konwertuj na wstępnie pomnożona format alfa na Tak (/generatepremultipliedalpha).

  4. Wybierz przycisk OK.

    Podczas kompilowania projektu potok zawartości obrazu konwertuje obraz źródłowy z formatu roboczego na określony format wyjściowy — obejmuje to konwersję obrazu na wstępnie sformatowany alfa, a wynik jest kopiowany do katalogu wyjściowego projektu.

Eksportowanie tekstury do użycia z Direct2D lub aplikacjami JavaScript

Potok zawartości obrazu może generować tekstury zgodne z wewnętrznymi konwencjami renderowania Direct2D. Tekstury tego rodzaju są odpowiednie do użycia w aplikacjach korzystających z funkcji Direct2D i w aplikacjach platformy UWP utworzonych przy użyciu języka JavaScript.

W tym dokumencie przedstawiono następujące działania:

  • Konfigurowanie obrazu źródłowego do przetworzenia przez potok zawartości obrazu.

  • Skonfigurowanie potoku zawartości obrazu w celu wygenerowania tekstury, której można użyć w aplikacji Direct2D lub JavaScript.

    • Wygeneruj plik dds skompresowany blokowo.

    • Wygeneruj premultiplied alfa.

    • Wyłącz generowanie mipmap.

Konwencje renderowania w trybie Direct2D

Tekstury używane w kontekście direct2D muszą być zgodne z tymi wewnętrznymi konwencjami renderowania Direct2D:

  • Funkcja Direct2D implementuje przezroczystość i przezroczystość przy użyciu premultiplied alfa. Tekstury używane z funkcją Direct2D muszą zawierać premultiplied alfa, nawet jeśli tekstura nie używa przezroczystości ani przezroczystości.

  • Teksturę należy podać w formacie dds przy użyciu jednego z tych formatów kompresji blokowej:

    • kompresja BC1_UNORM

    • kompresja BC2_UNORM

    • kompresja BC3_UNORM

  • Mapy mip nie są obsługiwane.

Aby utworzyć teksturę zgodną z konwencjami renderowania Direct2D

  1. Zacznij od tekstury podstawowej. Załaduj istniejący obraz lub utwórz nowy. Aby obsługiwać kompresję blokową w formacie dds , określ teksturę o szerokości i wysokości, która ma wielokrotność czterech rozmiarów, na przykład 100x100, 128x128 lub 256x192. Ponieważ mipmapping nie jest obsługiwany, tekstura nie musi być kwadratowa i nie musi być mocą dwóch rozmiarów.

  2. Skonfiguruj plik tekstury, aby był przetwarzany przez potok zawartości obrazu. W Eksplorator rozwiązań otwórz menu skrótów dla utworzonego pliku tekstury, a następnie wybierz pozycję Właściwości. Na stronie Właściwości>konfiguracji Ogólne ustaw właściwość Typ elementu na Potok zawartości obrazu. Upewnij się, że właściwość Content jest ustawiona na Wartość Tak , a opcja Wyklucz z kompilacji ma wartość Nie, a następnie wybierz przycisk Zastosuj . Zostanie wyświetlona strona właściwości konfiguracji potoku zawartości obrazu.

  3. Ustaw format danych wyjściowych na jeden z formatów skompresowanych blokowo. Na stronie Ogólne potoku>zawartości obrazów właściwości>konfiguracji ustaw właściwość Kompresujna BC3_UNORM kompresję (/compress:BC3_UNORM). W zależności od wymagań można wybrać dowolny z innych formatów BC1, BC2 lub BC3. Funkcja Direct2D nie obsługuje obecnie tekstur BC4, BC5, BC6 ani BC7. Aby uzyskać więcej informacji na temat różnych formatów BC, zobacz Block compression (Direct3D 10).

    Uwaga

    Określony format kompresji określa format pliku utworzonego przez potok zawartości obrazu. Różni się to od właściwości Format obrazu źródłowego w Edytorze obrazów, która określa format pliku obrazu źródłowego przechowywany na dysku — czyli format roboczy. Zazwyczaj nie chcesz mieć skompresowanego formatu roboczego.

  4. Skonfiguruj potok zawartości obrazu, aby wygenerować dane wyjściowe korzystające z wstępnie ułożonej alfa. Na stronie Ogólne potoku>zawartości obrazów właściwości>konfiguracji ustaw właściwość Konwertuj na wstępnie pomnożona format alfa na Tak (/generatepremultipliedalpha).

  5. Skonfiguruj potok zawartości obrazu, aby nie generować map mipmap. Na stronie Ogólne potoku>zawartości obrazów właściwości>konfiguracji ustaw właściwość Generuj mips na Nie.

  6. Wybierz przycisk OK.

    Podczas kompilowania projektu potok zawartości obrazu konwertuje obraz źródłowy z formatu roboczego na określony format wyjściowy — konwersja obejmuje generowanie premultiplied alfa — a wynik jest kopiowany do katalogu wyjściowego projektu.

Odwiedź stronę Praca z teksturami i obrazami, aby dowiedzieć się więcej o sposobie używania Edytora obrazów w programie Visual Studio do tworzenia lub modyfikowania tekstur i obrazów używanych w programach aplikacji DirectX.