Donate with PayPal button New New

+ Ответить в теме
Страница 1 из 5 1 2 3 ... ПоследняяПоследняя
Показано с 1 по 10 из 43

Тема: о LOD'ах

  1. #1
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию о LOD'ах

    LOD (Levels Of Detail - уровни детализации) - способ увеличения производительности просчёта сцены путём изменения полигональности мешей, находящихся на разном расстоянии. Это изменение полигональности вообще может быть автоматическим (если вы выкрутили на минимум настройки графики), но, как правило, результат неудовлетворителен - то крыша у тепловоза пропадает, то вагон раздаливается как после падения в него бомбы...

    Вывод - надо заранее сделать дополнительные малополигональные меши, и указать компьютеру, когда какую использовать. Пример - на расстоянии 600 м воздухораспределитель вагона занимает максимум 2 пикселя экрана, а все 500 полигон, из которых он состоит, должны просчитываться графическим процессором. Это же нерационально - 2 пикселя можно вообще убрать, либо (если охота придраться) поставить вместо воздухораспределителя вертикальную плоскость из 2 полигон (если 2-сторонняя, то 4 полигона).

    В trainz алгоритм выбора такой меши из списка доступных связан с вычислением некого числа, характеризующего видимость данной меши (т.е. площадью, занимаемой ею на экране) и одним из 3 дополнительных алгоритмов (наиболее часто используется "расстояние до центра экрана"). Учтите, что для рассчёта этого числа треуется время, необходимое для 100-200 полигон, поэтому лодированные меши с самой детализированной моделью <300 полигон трейнз не обрабатывает
    и делать ЛОДы на меши менее 1000 полигон вообще необязательно (прироста практически не будет). А вот для 2000 и более - желательно .
    Меши прописываются в специальном файле, имеющем расширение .lm.txt , в специальном порядке (а в конфиге, в mesh-table идёт ссылка на этот файл, но "***.lm" (.txt тут не прописывается))

    Итак, начинать надо с создания малодетализированных вариантов своей модели. Сделать вы их можете сколько угодно, то учтите, что для каждой требуется место в оперативной памяти .
    Если меши имеют одинаковую текстуру, то имена этой текстуры во всех мешах должны совпадать. Кроме того, для наименее детализированных мешей можете создать ещё 1 текстуру, как минимум в 16 раз раз меньше основной (т.е. для основной 1024х1024 можно сделать ЛОДовую 256х256).

    Далее, о точках привязки. Они во всех мешах должны совпадать с точностью до миллиметра и иметь одни и те же имена во всех мешах.
    Сделать это можно так

    1) берётся сцена с моделью и установленными точками привязки
    2) модель удаляется, точки привязки оставляем, и сцену перезаписываем с новым именем
    3) открываем сцену менее детализированной модели, и File->merege-> указываем нашу сцену с точками привязки -> в открывшемся списке выделяем все точки привязки и нажимаем кнопку merege
    4) проделываем то же самое с остальными сценами малополигональных моделей

    (тут следует отметить, что если мы хотим сделать отцепление аттачентов, необхоимо в 3d max к названиям точек дописать ":Cull". Например, точку привязки тележки можно назвать "a.bog0:Cull", а сцепки - "a.front_couple:Cull")
    обращаю внимание, что точки привязки должны иметь одни и те же имена во всех мешах. Т.Е. и в самом детализированном ЛОДе точка привязки тележки тоже должна называться "a.bog0:Cull", если вы хотите чтобы тележка отцеплялась.

    Меши конверите. Далее идёт настройка " .lm.txt" - файла. Лучше его скопировать из какой-либо существующей модели с ЛОДами, чтобы не разбираться с кодировками.
    Приимер - часть ЛОДа полувагона Volk'а

    version 1.0
    offset = 0.00;
    calcPoint = center;
    multiplier = 1.0;
    animationCutOff = 0.00;
    renderCutOff = 0.00;
    attachmentCutOff = 0.15;

    mesh("0.15")
    {
    name="poluvagon 12-119 lod6.IM";
    }
    mesh("0.25")
    {
    name="poluvagon 12-119 lod5.IM";
    }
    mesh("0.70")
    {
    name="poluvagon 12-119 lod2.IM";
    }
    mesh("1.0")
    {
    name="poluvagon 12-119.IM";
    }





    Итак, первый тег version определяет только весию - т.е. никак не влияет. Но обязателен.

    Второй тег, offset. Определяет задержку на переход к следущему ЛОДу (необходим, если ваша мешь начинает мигать, перехотя от одного лода к другому и назад).

    calcPoint - определяет, какой дополнительный алгоритм использовать при рассчёте ЛОДового числа (на самом деле такого термина нету - по другому можно называть "численное значение степени детализации", но его долго писать )

    center - считать расстояние до центра экрана (чем ближе к центру, тем более детализированный выбирать)
    near - считать от ближней зоны
    far - считать от дальней зоны

    Чем больше ЛОДовое число, тем более она виднее.

    multiplier - коэффициент для ЛОДового числа

    animationCutOff - ЛОДовое число, начиная с которого прекращается анимация меши (я честно не знаю, как делать ЛОДированную анимированную мешь, но вообще это можно)
    renderCutOff - ЛОДовое число, начиная с которого мешь полностью пропадает (хотя её рассчёт всё ещё ведётся).

    Пример применения этих 2 тегов. Я сделал отдельную анимированную мешь люков полувагонах Volk'a,
    но вышла она на 2000 полигон. В результате при при 2 составах, стоящих рядом, она давала fps 12 (комп слабый, трс 2006).
    Затем я сделал на эту мешь отдельный ЛОД, в котором указал renderCutOff (чтобы на большом расстоянии прорисовывались люки ЛОДов основной модели, а не анимированные высокодетализированные),
    и чуть больший renderCutOff (всё равно за дымами высыпающегося груза никто закрытых люков не увидит ). Результат - fps 25.

    attachmentCutOff - ЛОДовое число, отцепляющее все меши на токах привязки с окончанием ":Cull" , от данной.

    Внимание! Если вы сделали отцепку от точек привязки тележек и тормозных рукавов, то отцепка тормозных рукавов РАНЬШЕ или ПОЗЖЕ тележек произойти не сможет! Только ОДНОВРЕМЕННО! Даже если вы не прописали ":Cull" в точке привязки в одном из ЛОДов, или ещё что-то с этими точками мутили.


    Далее идёт список ваших мешей. Причём mesh("0.15") означает, что прорисовка будет вестись этой мешью от горизонта до ЛОДового числа в 0.15.
    Если вы схранили multiplier = 1.0; то максимальное значение ЛОДового числа 1.0

    В списке ЛОДовые числа должны убывать.


    Если Вы не допустили никаких ошибок (контент мененджер их обязан показать), то должны заметить изменение своей модели при удалении от неё
    Последний раз редактировалось TRam_; 11.03.2010 в 02:46.

  2. Сказали спасибо: (4)


  3. #Trainz
    Реклама
    Регистрация
    Постоянная
    Возраст
    2010
    Сообщений
    Много

    Donate with PayPal button N3v New New

     

  4. #2
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432
    Автор

    По умолчанию

    >(хотя её рассчёт всё ещё ведётся)
    (хотя её ЛОДа рассчёт всё ещё ведётся). Подправте, пожалуйста

    >В списке ЛОДовые числа должны ВОЗРАСТАТЬ.
    Последний раз редактировалось TRam_; 11.03.2010 в 02:54.

  5. #3
    Пользователь Аватар для amd103
    Регистрация
    09.01.2010
    Страна
    Адрес
    Ульяновск
    Возраст
    32
    Сообщений
    1,022

    По умолчанию

    А mesh-table lod-levels кто-нибудь заставил работать? Я пробовал, но не вышло. По идее эта техника предназначена для ЛОДов на скенери.

  6. #4
    Пользователь Аватар для AlexanderGn
    Регистрация
    08.12.2009
    Возраст
    32
    Сообщений
    751

    По умолчанию

    Учтите, что для рассчёта этого числа треуется время, необходимое для 100-200 полигон
    Начали за здравие, кончили за упокой. Расчет, я думаю, занимает не больше двух тактов процессора, т.к. это просто деление ширины Bounding Box на ширину дисплея. Время, аналогичное отрисовке 300...500 полигонов, затрачивается на подготовку вертексного буфера\стрипа, настройку стейтов, текстур и шейдеров, выполнение Draw Call.

    Насчет чисел. Насколько я помню, выбор ЛОД осуществляется по ширине экранного пространства, которую он занимает. Т.е. строка mesh("0.15") означает, что данный ЛОД будет отображаться если модель занимает 15% экрана по ширине.

  7. #5
    Заблокирован Аватар для dvigatel
    Регистрация
    24.01.2010
    Адрес
    -
    Возраст
    32
    Сообщений
    1,195

    По умолчанию

    ООО, буду изучать.

  8. #6
    Пользователь Аватар для Kirov
    Регистрация
    20.01.2010
    Сообщений
    10

    Effect

    Цитата Сообщение от AlexanderGn Посмотреть сообщение
    Насколько я помню, выбор ЛОД осуществляется по ширине экранного пространства, которую он занимает. Т.е. строка mesh("0.15") означает, что данный ЛОД будет отображаться если модель занимает 15% экрана по ширине.
    Есть конкретные инструкции от Ауран, сможешь предоставить, на чем все таки основываеться твое утверждение.

  9. #7
    Пользователь Аватар для AlexanderGn
    Регистрация
    08.12.2009
    Возраст
    32
    Сообщений
    751

    По умолчанию

    CCG есть.

  10. #8
    Заблокирован Аватар для dvigatel
    Регистрация
    24.01.2010
    Адрес
    -
    Возраст
    32
    Сообщений
    1,195

    По умолчанию

    Там по англиски

  11. #9
    VADO
    Гость

    По умолчанию

    Цитата Сообщение от dvigatel Посмотреть сообщение
    Там по англиски

  12. #10
    Пользователь Аватар для Max
    Регистрация
    26.09.2009
    Страна
    Сообщений
    188

    По умолчанию

    Tram_, 2010 считает формат *LM устаревшим и, вроде бы, не поддерживает ЛОДирование приаттаченных мешей (заметно по линзам z7). Что с этим делать?

+ Ответить в теме
Страница 1 из 5 1 2 3 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения