DbIMok писал(а):SARJ писал(а):а то она размывается
видимо лучше показать на картинках, что вы имеете в виду. насчет своих mipmap - можно использовать .dds со своими подготовленными или в Postprocess при импорте менять через
http://docs.unity3d.com/ScriptReference ... ixels.html для каждого из уровней мипмапа. но судя по вашим вопросам, ничего путевого из этого не выйдет. вот есть у вас 4 пикселя, мипмап делает из них один усредняя и соответственно "размывая". как вы собираетесь проделать то же самое лучше?
Итак, попытаюсь целиком описать задачу.
Если коротко, но нужно формировать карту как в майнкрафте, там это реализовано отдельными текстурами 16х16 (т.е. никаких атласов), с мипмапами и т.п. Количество текстур таких на карте несколько сотен (300-500).
А теперь подробно вся суть...
Подразумевается использование в шейдере CGPROGRAM vert+frag.
Использование текстур 16х16 в режиме Point без мипмапов дает такой результат
minmap1.png
Если мипмапы включить, то мы видим такую лесенку резких переходов (по сути переходов и нет) между уровнями мипмапов
minmap2.png
lines.png
Это можно исправить, если установить вместо режима Point поставить Bilinear, но тогда текстуры размываются.
minmap4.png
Опять же решение есть, если установить размер текстур в 256 или 512. Но в том же майнкрафте при 16х16 четкость луче чем с 512х512 в Юнити. Предположим что в майнкрафте просто в начале загрузки берется эта текстурка, приводится к размеру 512х512 (что делается запросто) и формируются текстуры с мипмапами.
Теперь надо как-то а шейдере использовать много текстур. Используется DX9 дабы была совместимость со слабыми карточками.
Предел для шейдера это 16 штук sampler2D. Поэтому надо искать другие решения.
Атласы зло! В режиме билинейной фильтрации текстур ужас что творится на расстоянии, все изза того, что при генерации мипмапов берется информация из соседних текстур атласа. Но опять же, всего 16 sampler2D, дже используя атлас 2048х2048 и текстуры 256х256 + продублировать бордеры по 128 по краям, получим 16 тестур на атлас, 16х16 = 256. Все, предел 256 текстур, и помяти куча расходуется. Но этот вариант я оставил на самый последний безвыходный момент.
В режиме Point c мипмапами вроде как эта проблема не наблюдается, скрина нет к сожалению.
Но присутствует проблема с уровнями мипмапов, опять посмотрите на 2 скрин с лесенкой из мипмапов.
С атласами без мипмапов вообще глаза вылезут
minmap5.png
Идея была такой...
Раз в шейдер нельзя поместить больше 16 sampler2D, то поместить сразу в код шейдера информацию от текстурах в массив например float4[200][16][16]. Это к примеру, в реальности можно сжать данные, потом распаковывать в ходе работы шейдера для экономии памяти. Обратите внимание, что текстуры размером больше 16х16 уже проблематично будет использовать.
Второй момент, это то, что у текстуры формируемой из массива, мипмапов попросту нет. Их надо генерировать в шейдере. И насчет билинейной фильтрации еще даже не знаю как правильно реализовать в таком случае.
Почему нужны были уровни мипмапов, потому что я думал установить одну главную текстуру, и уже в ходе работы шейдера подменять ее значения на свои. Т.к. для нее будут изначально сформированы мипмапы, то достаточно определить какой уровень используется. Мипмапы придется заранее подготовить, и также запаковать, и поместить в массивы меньшего размера. В итоге получим в шейдере что-то типа того...
float4[200][16][16];
float4[200][8][8];
float4[200][4][4];
float4[200][2][2];
float4[200][1][1];
Что еще сделать я не знаю. Давайте получаем вместе как реализовать это. Атласы (мультитекстура) самый крайний вариант, виду того, что захватываются пиксели с соседних текстур. Идеальный вариант был бы использования отдельных png текстур 16х16, или же 256-512 если не получится с 16х16.
Какие есть мысли у кого?
У вас нет доступа для просмотра вложений в этом сообщении.