Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Newbie.DirectX (3 стр)

Newbie.DirectX (3 стр)

Страницы: 1 2 3
MrShoorУчастникwww10 янв. 201820:29#30
восставший из праха
Судя по картинке - нет mip уровней.
Надо чтобы были mip уровни + надо включить mip фильтрацию.
Чтобы были mip уровни надо:
1. Либо хранить mip уровни в dds текстуре
2. Либо генерить их при загрузке: https://msdn.microsoft.com/en-us/library/windows/desktop/bb172340(v=vs.85).aspx

Чтобы включить фильтрацию надо вызывать:
m_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

monobogdanЗабаненwww10 янв. 201821:06#31
MrShoor
А чем мипмапы помогут? Или ты о том артефакте, когда камера удаляется от поверхности без мипмап и поверхность начинает выглядеть рябо?

Правка: 10 янв. 2018 21:07

MrShoorУчастникwww10 янв. 201821:22#32
monobogdan
> А чем мипмапы помогут? Или ты о том артефакте, когда камера удаляется от
> поверхности без мипмап и поверхность начинает выглядеть рябо?
Тем, что D3DSAMP_MINFILTER в случае с D3DTEXF_LINEAR умеет интерполировать только 4 соседних пикселя (2*2 кусочек). А когда ты сжимаешь картинку так, что на один пиксель на экране у тебя приходится 5*5 из текстуры, то D3DSAMP_MINFILTER справиться уже не может, и лезут вот такие алиазинговые артефакты. Поэтому если планируешь сильно сжимать картинку - всегда генерируй MIP уровни и ставь D3DSAMP_MIPFILTER фильтрацию.

Правка: 10 янв. 2018 21:24

восставший из прахаПользовательwww10 янв. 201821:31#33
MrShoor
были мипы. Потом уже удалил - ибо подумал, может он неправильно уровень берёт поэтому изображение растягивает.... Вот вернул - с алиасингом выглядит получше(чем без мипмапы и без алиасинга). Это с мипмапой анизатропной фильтрацией
Mip anisotropic | Newbie.DirectX

это с линейной
Mip linear | Newbie.DirectX

Правка: 10 янв. 2018 21:33

восставший из прахаПользовательwww10 янв. 201821:37#34
MrShoor
+ Показать

Благодарствую за объяснение.
MrShoorУчастникwww10 янв. 201821:38#35
восставший из праха
Не стоит заливать картинки в jpg, особенно если хочешь показать такую мелкую деталь как алиазинг. Ты сам то по этим скринам можешь отличить где гладкий текст, а где с алиазингом?
}:+()___ [Smile]Постоялецwww10 янв. 201821:51#36
MrShoor
> Не стоит заливать картинки в jpg, особенно если хочешь показать такую мелкую деталь как алиазинг.
+1

восставший из праха
Еще похоже что фильтрация некорректная — alpha не premultiplied.
Какие D3DRS_SRCBLEND/D3DRS_DESTBLEND?

восставший из прахаПользовательwww10 янв. 201822:02#37
MrShoor
Согласен, но тут что jpg, что PNG даёт одну картинку. (Или речь о другом формате?)
anisotropic
+ Показать

Linear

+ Показать

Без Mip maps

+ Показать

}:+()___ [Smile]

      D3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);     
      D3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

Правка: 10 янв. 2018 22:03

}:+()___ [Smile]Постоялецwww10 янв. 201822:17#38
восставший из праха
> D3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Должно быть D3DBLEND_ONE, а сама исходная текстура с premultiplied alpha.
И мипы надо генерировать по premultiplied.
MrShoorУчастникwww10 янв. 201822:23#39
восставший из праха
> Согласен, но тут что jpg, что PNG даёт одну картинку.
А вот и нет. По png видно, что у тебя еще и premultiplied не сделан. Так что smile прав.
восставший из прахаПользовательwww10 янв. 201822:50#40
}:+()___ [Smile]
> premultiplied alpha.
а вы случайно paint.net не юзали? "Weight color by alfa" это не то же самое? Что такое premultiplied alpha  я понял. Но под рукой пока только Paint.net.(
Если это оно, то так и делал.
Для примера, переделал в формат DXT5+MipMaps+"Weight color by alfa" впрочем, оную опцию я никогда и не менял, в отличии от mipmaps. + поставил
   D3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); 

вышло вот это.

+ Показать

Страницы: 1 2 3

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр