Я сделал скриншот под вайном, там ничего не замылено.
Chipmunk
> Я сделал скриншот под вайном, там ничего не замылено.
Скриншоты не помогают. Но замыливание очевидно есть? Почему в играх если и есть такой артефакт, то он не так очевиден???
Показывает чёрный экран. Рекомендую избавиться от огра и делать нормально.
NIXIUS
>Но замыливание очевидно есть?
Замыливания нет. Ни на видео, ни в демке.
Всё, что я увидел - дикий алиазинг, отсутствие текстурной фильтрации и (возможно) не самый красивый вариант реализации прозрачности.
По последнему пункту:
в материале демки
scene_blend alpha_blend alpha_rejection greater_equal 200
- возможно это ошибка демки, но использовать нужно либо первое, либо второе.
По поводу "призраков обьектов" (которые и правда призраки, т.к. кроме тебя их никто не видит) - это либо монитор, либо ты рисуешь обьекты по два раза на своем медленном компьютере (у нас быстрые, мы не успеваем увидеть). Если это монитор - запусти на другом (мы запустили на своих - призраков не видно). Если рисуешь несколько раз - запусти код под NVPerfHUD и посмотри, что именно выкидывается видеокартой на монитор.
Я запустил демку под NVPerfHUD'ом. Две вещи показались мне странными. У тебя сцена рисуется за два дипа, первый - один знак. Второй дип - все остальные одновременно (логика? не вижу). Второе - BBox'ы мешей спрайтов некорректные (тут не знаю, может косяк NVPerfHUD'а, а может ты перемудрил с инстансингом).
Под DX Pix результаты получить не удалось, ибо демка падает при выходе и не позволяет собрать информацию.
Итого: призраки не обнаружены. Разберись со своим рендером, альфа-блендингом и включи текстурную фильтрацию.
SNVampyre
> Показывает чёрный экран.
Что в логе?
SNVampyre
> Рекомендую избавиться от огра и делать нормально.
Поздно отказываться. Если считаете, что это артефакт огра, обоснуйте подробнее
SNVampyre
>Рекомендую избавиться от огра
Огр нормальный, его нужно правильно готовить. Я его много готовил, я знаю.
>и делать нормально.
Не все потянут.
0xdeadc0de
> возможно это ошибка демки, но использовать нужно либо первое, либо второе
Можете привести пример?
0xdeadc0de
> либо ты рисуешь обьекты по два раза на своем медленном компьютере
AMD Phenom II X4 945 Processor 3.00 GHz
RAM 4.00 Gb
GeForce GTS 450 (две - на три монитора), дрова 285.62
Медленный?
0xdeadc0de
> У тебя сцена рисуется за два дипа, первый - один знак. Второй дип - все
> остальные одновременно (логика? не вижу). Второе - BBox'ы мешей спрайтов
> некорректные (тут не знаю, может косяк NVPerfHUD'а, а может ты перемудрил с
> инстансингом)
Знаки объединены в одну StaticGeometry
Код инициализации сцены:
void init_scene() { Entity* ent = scene->createEntity( "roadsign.mesh"); ent->setMaterialName( "test_material"); StaticGeometry *sg = scene->createStaticGeometry( "test_sg"); for( int i = 0; i < 10; i++) { sg->addEntity( ent, Vector3( 15.0, 0.0, i * 2.0)); } sg->build( ); }
Код рисования:
void run_ogre() { const unsigned long int MIN_STEP = 16666; Timer* timer = Root::getSingleton( ).getTimer( ); unsigned long int before_time = 0; unsigned long int after_time = 0; unsigned long int delta_time = 0; bool f = true; before_time = timer->getMicroseconds( ); while ( f) { //before_time = timer->getMicroseconds(); kbrd->capture( ); WindowEventUtilities::messagePump( ); update_scene( delta_time / 1000000.0); f = mainRoot->renderOneFrame( ); after_time = timer->getMicroseconds( ); delta_time = after_time - before_time; while ( delta_time < MIN_STEP) { after_time = timer->getMicroseconds( ); delta_time = after_time - before_time; } before_time = after_time; f = ! kbrd->isKeyDown( OIS::KC_ESCAPE); } }
NIXIUS
>> возможно это ошибка демки, но использовать нужно либо первое, либо второе
>Можете привести пример?
Мне рассказывать, как работает прозрачность в DirectX и OpenGL? И рассказывать про разность прозрачности в 32-битной текстуре с альфой и 24-битной? Мне лень.
Но в кратце так:
1) 32bit, есть честный альфа-канал. Используешь scene_blend alpha_blend плюс нужная формула наложения цвета (больше - в гугле и directx manual)
2) 24bit, нет честного альфа-канала. Используешь alpha_rejection (больше в справке Ogre)
>Медленный?
Быстрый. Но я ошибки на экране не вижу всё равно.
>Знаки объединены в одну StaticGeometry
Оно может быть обьедино во что угодно, но факт остается. Там два дипа, один знак и остальные знаки. Могу только посоветовать почитать доки про entity, про их аттач к scene-node и как вообще рендер рисует.
>Код
Даже если бы это был полный код проги, мало кто стал бы в нем разбираться ради тебя.
Лучше скажи, в чем проблема то. Мы её не видим.
очепятки
0xdeadc0de
> Лучше скажи, в чем проблема то. Мы её не видим.
Проблема состоит эффекте замыливания при перемещении камеры. Т.е. при увеличении скорости камеры - происходит размытие знака - изображение черной кривой на белом поле становится очень мутным.
Я раньше тоже не замечал, пока заказчик не ткнул носом и глазом.
NIXIUS
Лично у меня ничего не замыливается.
Может ты что-то путаешь, и говоришь о прыгающих цветах пикселей на границах резкого изображения?
Попробуй включи текстурную фильтрацию.
Multiple ways:
Just before you load your textures you can set the anisotropy settings in the MaterialManager using MaterialManager::setDefaultTextureFiltering and MaterialManager::setDefaultAnisotropy. These settings are then applied automatically. See API docs for details.
You can set it in material scripts for individual materials using the max_anisotropy and filter attributes. See manual section 3 for details.
You can set it at runtime in the TextureUnitStage of the Material passes using TextureUnitState::setTextureAnisotropy and TextureUnitState::setTextureFiltering. Again see API docs for details.
0xdeadc0de
> Попробуй включи текстурную фильтрацию.
Попробовал - эффект нулевой
0xdeadc0de
> и говоришь о прыгающих цветах пикселей на границах резкого изображения?
Цвета не прыгают. Просто размывается все. Очень похоже на motion blur
0xdeadc0de
> 2 - поставь другие дрова (если стоят новые - попробуй старые. Если стоят старые
> - поставь новые)
Дрова стояли разные, проявляется не только у меня, но и как минимум на 5ти других машинах. Кроме того, одна оснащена ATIшной видеокартой.
0xdeadc0de
> 1 - запусти под дебажным режимом DirectX и исправь все ошибки
Это означает запустить мое приложение под отладкой, т.е. в конфигурации Debug - так я так и делаю - ни чего не вываливается.
NIXIUS
> Если считаете, что это артефакт огра, обоснуйте подробнее
А есть другие варианты?
NIXIUS
>Дрова стояли разные, проявляется не только у меня, но и как минимум на 5ти других машинах. Кроме того, одна оснащена ATIшной видеокартой.
Тогда я сдаюсь. У меня работает нормально.
>Это означает запустить мое приложение под отладкой, т.е. в конфигурации Debug
Нет. http://www.gamedev.ru/code/terms/DXDebug
0xdeadc0de
> 1 - запусти под дебажным режимом DirectX и исправь все ошибки
Запустил - все без эксцессов и ровно
Тема в архиве.