Текущий архив: 2007.05.20;
Скачать: CL | DM;
Вниз
Повышение качества текстуры Найти похожие ветки
← →
Kobik.. (2006-06-09 09:08) [0]Суть проблемы:
есть маленькая текстурка (ну например 32х32). Ее надо натянуть на квадрат 128х128.
Естественно все получается квадратным, что не красиво.
вроде специально для этого придумана фильрация
FD3DDevice.SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTEXF_GAUSSIANCUBIC);
FD3DDevice.SetTextureStageState(0,D3DTSS_MINFILTER, D3DTEXF_GAUSSIANCUBIC);
И на сплошных текстурах она работает хорошо. Но если на текстуре, например, нарисован юнит на прозрачном фоне, то на краях квадрата появляются полосы (непрозрачного цвета прозрачности).
Ну т.е если прозрачный цвет был $00A0A0A0, то полосы будут серыми.
Можно ли как-то это исправить?
← →
tButton © (2006-06-09 09:37) [1]
> И на сплошных текстурах она работает хорошо. Но если на
> текстуре, например, нарисован юнит на прозрачном фоне, то
> на краях квадрата появляются полосы (непрозрачного цвета
> прозрачности).
> Ну т.е если прозрачный цвет был $00A0A0A0, то полосы будут
> серыми.
>
> Можно ли как-то это исправить?
использовать 32битные текстуры
с прозрачностью в отдельном канале
← →
Kobik.. (2006-06-09 10:17) [2]>использовать 32битные текстуры
>с прозрачностью в отдельном канале
формат текстуры D3DFMT_A8R8G8B8
это разве не 32 битная?
← →
tButton © (2006-06-09 10:53) [3]
> формат текстуры D3DFMT_A8R8G8B8
> это разве не 32 битная?
пардон, не видел этого в сабже.
это 32битная =) с альфой в отдельном канале =)
это нужно с исходной текстурой работать
в частности с граничными пикселями
суть сводится к тому, чтобы сделать цвет граничных полностью прозрачных пикселей адекватным цвету граничных полупрозрачных пикселей.
тогда сглаживание будет происходить не с серым цветом, а с адекватным цветом.
как это сделать я примерно представляю. но объяснить будет тяжело =)
← →
Kobik.. (2006-06-09 12:25) [4]2tButton
спс, но вопрос в основном не об этом.
Касяк возникает не на границе юнита, а на границе квадрата, т.е. рамке текстуры, причем там, где нет соприкосновения с юнитом.
Сейчас только заметил - косяк только если юнит соприкачается с границей, а он у меня как раз вписывается в 32*32. эээ опять криво объясняю :) На скриншоте будет плохо видно, поэтому попытаюсь изобразить так:
0 - прозрачность
1 - нужный цвет
2 - нужный размазанный цвет
3 - глюк
вот картинка до фильтрации
00011000
00011000
00010000
01111110
после фильтрации
00211233
00211203
02212003
21111112
Ну это так, грубо говоря :) Собственно вопрос - откуда бурутся 3, если они даже не соприкасаются с 1.
← →
Kobik.. (2006-06-09 12:35) [5]поэксперементировав с разными текстурами понял закономерность: низ картинки переносится наверх, но изначальная текстура нормальная. Т.е. баг исключительно после фильтрации
до:
000000
000000
001100
010110
после:
030330
000000
001100
010110
← →
Sapersky (2006-06-09 12:49) [6]D3DTEXF_GAUSSIANCUBIC
Интересно, что за видеокарта? Я думал, это чудо вообще нигде не реализовано.
Может, она на самом деле анизотропную (в случае 2D фактически обычную билинейную) делает :)
низ картинки переносится наверх
Подобные эффекты обсуждались здесь:
http://delphimaster.net/view/9-1134361287/
← →
a22 © (2006-06-09 15:49) [7]можно попробовать сместить текстурные координаты к центру (как в ветке [6] обсуждалось), но думается мне, это не поможет. попробуй картинку увеличить (все же вчетверо растягивается) или фильтрацию отключить. по-другому, думаю, делу не помочь
← →
MeF Dei Corvi © (2006-06-09 18:59) [8]Какой смысл? Дополнительную информацию всё-равно взять негде... Ну будет текстура не квадратная, а размытая, всё-равно же ничего не различить на ней, особенно в случае с юнитом.
← →
Kobik.. (2006-06-09 19:21) [9]>Какой смысл?
Суть такая - делаю ремейк MSX игры 1985 года.
Графику я не хочу менять принципиально, а вот сгладить было бы не лишним, т.к. то, что в оригинале при разрешении 256*192 да еще на телевизоре выглядело линией под 45 градусов сейчас на большом мониторе похоже на лесенку. =)
Спрайты там 32х32.
Пока нашел единственный выход - делать текстуры 64х64, помещая картинку в центр...
PS. Отличий между GAUSSIANCUBIC и даже просто D3DTEXF_LINEAR я не заметил (ну скорее всего т.к. у меня видяха старая)
← →
Kobik.. (2006-06-09 19:26) [10]ага. Идею понял. Спасибо.
Пошел испытывать
← →
Kobik.. (2006-06-09 19:52) [11]Смещение текстурных координат чуть больше чем на пол пикселя (т.е. в моем случае на 0.016 с каждой стороны) помогло.
Всем спасибо за скорую помощь ;)
← →
ViK © (2006-06-11 14:12) [12]На GameDev.ru есть статья "Алгоритм сглаживания Smart Filtering"
С помощью данного алгоритма можно существенно увеличить размеры текстуры без образования "квадратов". Единственный недостаток метода - он полностью программный.
http://www.gamedev.ru/articles/?id=30101
Ссылка может быть устаревшей, но можно поискать по названии статьи.
Страницы: 1 вся ветка
Текущий архив: 2007.05.20;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.044 c