Вопрос - ответ
13 апреля 2016 10:44
Спасибо, Иван. Добрался до машины. Результаты такие.
Слева на зеленом фоне результаты при выключенных тенях,
справа результаты при включенных тенях.
Сверху результаты при статичной сцене (статичная камера, нет никакой анимации)
Снизу результаты при клике мыши, по которому идет пикинг.
Действительно похоже, что сам пикинг не зависимо включены тени или нет отрабатывает за одинаковое время COLOR_PICKING + разные постпроцессинги видимо, вот и складывается 0.3-0.5сек. Когда же тени включены, то накладывается видимо еще задержка от отрисовки основной сцены.
Не скажу, что 0.2-0.3сек это быстро для пикинга. Но кроме того, хотелось бы понять куда копать, чтобы найти причину в целом тормозов сцены при включенных тенях. То есть хотелось бы из этой информации научиться доставать суть проблемы )
Хотя наверно самый простой вариант - это упростить сцену, уменьшить количество объектов, полигонов и снова посмотреть на цифры. Опытным путем так сказать )
Слева на зеленом фоне результаты при выключенных тенях,
справа результаты при включенных тенях.
Сверху результаты при статичной сцене (статичная камера, нет никакой анимации)
Снизу результаты при клике мыши, по которому идет пикинг.
Действительно похоже, что сам пикинг не зависимо включены тени или нет отрабатывает за одинаковое время COLOR_PICKING + разные постпроцессинги видимо, вот и складывается 0.3-0.5сек. Когда же тени включены, то накладывается видимо еще задержка от отрисовки основной сцены.
Не скажу, что 0.2-0.3сек это быстро для пикинга. Но кроме того, хотелось бы понять куда копать, чтобы найти причину в целом тормозов сцены при включенных тенях. То есть хотелось бы из этой информации научиться доставать суть проблемы )
Хотя наверно самый простой вариант - это упростить сцену, уменьшить количество объектов, полигонов и снова посмотреть на цифры. Опытным путем так сказать )
14 апреля 2016 12:38
Действительно похоже, что сам пикинг не зависимо включены тени или нет отрабатывает за одинаковое время COLOR_PICKING + разные постпроцессинги видимо, вот и складывается 0.3-0.5сек.Ну, там сейчас для самого COLOR_PICKING выводится нулевое время, поэтому получается не так наглядно, как хотелось бы. Просто эта сцена - особенная, для неё (и для SKY, например) мы не подсчитываем время рендеринга. Я в принципе сейчас в движке это поправил. Ниже патч для dev-версии. Если хотите, можете у себя изменить следующие строчки в файле src/hud.js
diff --git a/src/hud.js b/src/hud.js
index 747a525..bbefb87 100644
— a/src/hud.js
+++ b/src/hud.js
@@ -121,10 +121,15 @@ function show_debug_info_scene(scene) {
bundles *= 6;
// active/passive
- var is_active = subs.enqueue && subs.do_render;
+ var is_active = subs.do_render;
var render_time = is_active ? subs.debug_render_time : 0;
+ // NOTE: clear render time for non-enqueued subscenes, BTW they
+ // shouldn't be active if they're not rendered
+ if (!subs.enqueue)
+ subs.debug_render_time = 0;
+
var activity_prefix = is_active ? " (A)" : " (P)";
print(activity_prefix, type, subs.num_lights, size, rcalls, "of",
bundles, " ", render_time.toFixed(3));
COLOR_PICKING + разные постпроцессинги видимо, вот и складывается 0.3-0.5секДа, если используется подсветка объектов, то дополнительно включаются сабсцены COLOR_PICKING + OUTLINE_MASK + 4 POSTPROCESSING.
Когда же тени включены, то накладывается видимо еще задержка от отрисовки основной сцены.На слабых машинах это приводит к падению FPS, а от этого и все остальные тормоза, в том числе и отклик мыши при нажатии - получается все упрется в GPU и пока кадр не отрендерится CPU будет простаивать.
Тут ещё важно заметить, что HUD показывает результаты, измеренные только для GPU, а так в общее время ещё добавятся затраты CPU на исполнение javascript-кода.
Не скажу, что 0.2-0.3сек это быстро для пикинга. Но кроме того, хотелось бы понять куда копать, чтобы найти причину в целом тормозов сцены при включенных тенях.Механизм пикинга в целом такой:
- рендеринг сабсцены со всеми видимыми объектами
- считывание цвета пикселя под курсором в типизированный массив
- пробег по объектам для сравнения цвета
Также, в этот момент выбранный объект получит анимацию подсветки, и на последующих кадрах добавится рендеринг постпроц. сабсцен.
Для того, чтобы подебажить весь процесс целиком, лучше использовать профайлер, например, в хроме - это консоль->Profiles->Collect Javascript CPU Profile.
Вот мои результаты на демке c фермой во вьюере (запустил профайлер, нажал один раз, остановил):
pick_object занимает 23мс, интересно, сколько у вас
17 апреля 2016 08:31
17 апреля 2016 18:21
18 апреля 2016 19:43
18 апреля 2016 23:00
19 апреля 2016 14:13
Как вы в примере morphing сделали так, что одежда изменяется ключами формы вместе с формой человека, и даже, если одежду сделать новым материалом, она всё равно будет изменяться?
Ключи привязываются к мешу, вне зависимости от материала. В той сцене - весь объект один меш, на котором несколько материалов. Да, если сделать одежду новым материалом, то геометрия всё равно будет изменяться
19 апреля 2016 14:48
19 апреля 2016 15:52