Използване на мега смеси (megatexture, clipmaps)
1. запълване на площи с една текстура - облицовка и плочки;
2. алфа смесване на текстури;
3. показване на относително малка част от пейзажа близо до плейъра.
Професионалисти:
1. малко количество текстури (малко количество данни);
2. относителната лекота на текстуриране.
1. ограничен брой текстури (плочки) води до трудности при получаване на желания модел, възможните комбинации винаги са ограничени;
2. много повтарящи се модели в пейзажа;
3. ограничение в геометрията (например само обикновена решетка) или обратно, необходимостта от разделяне на геометрията за оформяне на плочки с различни плочки.
Какво се случва, ако решите да използвате една текстура за целия пейзаж?
1. няма да има облицовки и набори от плочки;
2. няма да е необходимо да се прави алфа смесване на различни текстури, за да се формира окончателното изображение по време на изпълнение;
3. художникът може просто да рисува всяка част от пейзажа;
4. визуалният реализъм на създадения пейзаж може да се увеличи значително;
5. геометрията на терена може да бъде представена като правилна мрежа или всяка мрежа;
6. няма да е необходимо да побеждавате геометрията за целите на текстурирането.
Минуси:
1. Обемът на текстурата за целия пейзаж ще отнеме много място;
2. за да го подготвите ще ви трябват специални инструменти и мощни компютри.
За да бъда честен, не съм сигурен дали това са очевидно недостатъци, тъй като текстурата може да се разклати и наличието на бързи компютри винаги е страхотно:)
Нека се опитаме да изобразим пейзаж с уникален модел.
За целта заредете текстура с висока разделителна способност на целия пейзаж в графичния процесор, разбира се, с всичките му нива на детайлност (mipmaps или lods) и покажете цялата геометрия на пейзажа. Самият графичен процесор ще избере правилния LOD за растеризиране на определен пиксел на екрана (или няколко Lods, в зависимост от настройките). Например за най-близкия до камерата пиксел ще бъде избран пиксел от подробния цикъл, за далечния - обратно.
4096 * 4096 * 4 = 64 MB (при 32 бита на пиксел)
При лодовете текстурата ще отнеме повече от 85 MB. Но какво, ако размерът на оригиналната текстура не е 4096, а 8192 на 8192 пиксела? Това вече е 341 MB с всички лодове. И ако повече? Например 1 кв. Км с разделителна способност 1 пиксел на 10 см ще бъде покрит от мега-текстура с разделителна способност 10 000 на 10 000 пиксела. Но 1 пиксел на 10 см далеч не е най-желаното качество.!
Съвсем ясно е, че с такива обеми GPU ще умре. Използването на компресия на текстура няма да реши проблема драстично, а само ще промени максимално възможната разделителна способност.
Общо: очевидно е, че този метод няма общо решение и може да се прилага само в специални случаи за малки пейзажи, а не за големи текстури.
Затова забравете за една подробна текстура за целия пейзаж.?
Нека помислим за това. Знаем, че графичният процесор за растеризиране на далечния пиксел ще отнеме по-опростена текстура, отколкото за близкия пиксел, но всички лодчета ще бъдат в паметта на графичния процесор!
Защо тогава да зареждате LOD с висока детайлност в графичния процесор, когато растеризирате отдалечен пиксел? Как да се уверите, че допълнителните лодове не са заредени? За това в следващата част на статията.
За по-пълно разбиране на същността на проблема, предлагам да изтеглите моя пример с помощта на мега текстура (изходни кодове в края на статията):