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

Призраки объектов в Ogre (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
23:54, 17 ноя 2011

Я сделал скриншот под вайном, там ничего не замылено.

#31
0:06, 18 ноя 2011

Chipmunk
> Я сделал скриншот под вайном, там ничего не замылено.
Скриншоты не помогают. Но замыливание очевидно есть? Почему в играх если и есть такой артефакт, то он не так очевиден???

#32
1:53, 18 ноя 2011

Показывает чёрный экран. Рекомендую избавиться от огра и делать нормально.

#33
2:04, 18 ноя 2011

NIXIUS
>Но замыливание очевидно есть?
Замыливания нет. Ни на видео, ни в демке.
 
Всё, что я увидел - дикий алиазинг, отсутствие текстурной фильтрации и (возможно) не самый красивый вариант реализации прозрачности.
 
По последнему пункту:
в материале демки

scene_blend alpha_blend
alpha_rejection greater_equal 200

- возможно это ошибка демки, но использовать нужно либо первое, либо второе.
 
По поводу "призраков обьектов" (которые и правда призраки, т.к. кроме тебя их никто не видит) - это либо монитор, либо ты рисуешь обьекты по два раза на своем медленном компьютере (у нас быстрые, мы не успеваем увидеть). Если это монитор - запусти на другом (мы запустили на своих - призраков не видно). Если рисуешь несколько раз - запусти код под NVPerfHUD и посмотри, что именно выкидывается видеокартой на монитор.
Я запустил демку под NVPerfHUD'ом. Две вещи показались мне странными. У тебя сцена рисуется за два дипа, первый - один знак. Второй дип - все остальные одновременно (логика? не вижу). Второе - BBox'ы мешей спрайтов некорректные (тут не знаю, может косяк NVPerfHUD'а, а может ты перемудрил с инстансингом).
 
Под DX Pix результаты получить не удалось, ибо демка падает при выходе и не позволяет собрать информацию.
 
Итого: призраки не обнаружены. Разберись со своим рендером, альфа-блендингом и включи текстурную фильтрацию.

#34
2:05, 18 ноя 2011

SNVampyre
> Показывает чёрный экран.
Что в логе?
SNVampyre
> Рекомендую избавиться от огра и делать нормально.
Поздно отказываться. Если считаете, что это артефакт огра, обоснуйте подробнее

#35
2:06, 18 ноя 2011

SNVampyre
>Рекомендую избавиться от огра
Огр нормальный, его нужно правильно готовить. Я его много готовил, я знаю.
 
>и делать нормально.
Не все потянут.

#36
2:14, 18 ноя 2011

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);
  }

}
#37
2:29, 18 ноя 2011

NIXIUS
>> возможно это ошибка демки, но использовать нужно либо первое, либо второе
>Можете привести пример?
Мне рассказывать, как работает прозрачность в DirectX и OpenGL? И рассказывать про разность прозрачности в 32-битной текстуре с альфой и 24-битной? Мне лень.
Но в кратце так:
1) 32bit, есть честный альфа-канал. Используешь scene_blend alpha_blend плюс нужная формула наложения цвета (больше - в гугле и directx manual)
2) 24bit, нет честного альфа-канала. Используешь alpha_rejection (больше в справке Ogre)
 
>Медленный?
Быстрый. Но я ошибки на экране не вижу всё равно.
 
>Знаки объединены в одну StaticGeometry
Оно может быть обьедино во что угодно, но факт остается. Там два дипа, один знак и остальные знаки. Могу только посоветовать почитать доки про entity, про их аттач к scene-node и как вообще рендер рисует.
 
>Код
Даже если бы это был полный код проги, мало кто стал бы в нем разбираться ради тебя.
Лучше скажи, в чем проблема то. Мы её не видим.
 
очепятки

#38
2:40, 18 ноя 2011

0xdeadc0de
> Лучше скажи, в чем проблема то. Мы её не видим.
Проблема состоит эффекте замыливания при перемещении камеры. Т.е. при увеличении скорости камеры - происходит размытие знака - изображение черной кривой на белом поле становится очень мутным.
Я раньше тоже не замечал, пока заказчик не ткнул носом и глазом.

#39
2:48, 18 ноя 2011

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.


 
Кроме этой проблемы других критичных я не вижу.
 
Ну и еще выстрел вслепую:
1 - запусти под дебажным режимом DirectX и исправь все ошибки
2 - поставь другие дрова (если стоят новые - попробуй старые. Если стоят старые - поставь новые)

#40
2:58, 18 ноя 2011

0xdeadc0de
> Попробуй включи текстурную фильтрацию.
Попробовал - эффект нулевой

0xdeadc0de
> и говоришь о прыгающих цветах пикселей на границах резкого изображения?
Цвета не прыгают. Просто размывается все. Очень похоже на motion blur

#41
3:01, 18 ноя 2011

0xdeadc0de
> 2 - поставь другие дрова (если стоят новые - попробуй старые. Если стоят старые
> - поставь новые)
Дрова стояли разные, проявляется не только у меня, но и как минимум на 5ти других машинах. Кроме того, одна оснащена ATIшной видеокартой.
0xdeadc0de
> 1 - запусти под дебажным режимом DirectX и исправь все ошибки
Это означает запустить мое приложение под отладкой, т.е. в конфигурации Debug - так я так и делаю - ни чего не вываливается.

#42
3:04, 18 ноя 2011

NIXIUS
> Если считаете, что это артефакт огра, обоснуйте подробнее
А есть другие варианты?

#43
3:05, 18 ноя 2011

NIXIUS
>Дрова стояли разные, проявляется не только у меня, но и как минимум на 5ти других машинах. Кроме того, одна оснащена ATIшной видеокартой.
Тогда я сдаюсь. У меня работает нормально.
 
>Это означает запустить мое приложение под отладкой, т.е. в конфигурации Debug
Нет. http://www.gamedev.ru/code/terms/DXDebug

#44
3:11, 18 ноя 2011

0xdeadc0de
> 1 - запусти под дебажным режимом DirectX и исправь все ошибки
Запустил - все без эксцессов и ровно

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

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