Войти
ПрограммированиеФорумГрафика

Newbie.DirectX (3 стр)

Страницы: 1 2 3
#30
20:29, 10 янв 2018

восставший из праха
Судя по картинке - нет 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);

#31
21:06, 10 янв 2018

MrShoor
А чем мипмапы помогут? Или ты о том артефакте, когда камера удаляется от поверхности без мипмап и поверхность начинает выглядеть рябо?

#32
21:22, 10 янв 2018

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

#33
21:31, 10 янв 2018

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

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

#34
21:37, 10 янв 2018

MrShoor

+ Показать

Благодарствую за объяснение.

#35
21:38, 10 янв 2018

восставший из праха
Не стоит заливать картинки в jpg, особенно если хочешь показать такую мелкую деталь как алиазинг. Ты сам то по этим скринам можешь отличить где гладкий текст, а где с алиазингом?

#36
21:51, 10 янв 2018

MrShoor
> Не стоит заливать картинки в jpg, особенно если хочешь показать такую мелкую деталь как алиазинг.
+1

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

#37
22:02, 10 янв 2018

MrShoor
Согласен, но тут что jpg, что PNG даёт одну картинку. (Или речь о другом формате?)
anisotropic

+ Показать

Linear

+ Показать

Без Mip maps

+ Показать

}:+()___ [Smile]

      D3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);     
      D3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
#38
22:17, 10 янв 2018

восставший из праха
> D3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Должно быть D3DBLEND_ONE, а сама исходная текстура с premultiplied alpha.
И мипы надо генерировать по premultiplied.

#39
22:23, 10 янв 2018

восставший из праха
> Согласен, но тут что jpg, что PNG даёт одну картинку.
А вот и нет. По png видно, что у тебя еще и premultiplied не сделан. Так что smile прав.

#40
22:50, 10 янв 2018

}:+()___ [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
ПрограммированиеФорумГрафика

Тема в архиве.