Вопрос - ответ

13 апреля 2016 10:44
Спасибо, Иван. Добрался до машины. Результаты такие.

Слева на зеленом фоне результаты при выключенных тенях,
справа результаты при включенных тенях.
Сверху результаты при статичной сцене (статичная камера, нет никакой анимации)
Снизу результаты при клике мыши, по которому идет пикинг.
Действительно похоже, что сам пикинг не зависимо включены тени или нет отрабатывает за одинаковое время 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

Ответ на сообщение пользователя дилетант
Доброе утро, при загрузке сцены в верхнем правом углу изменяются цифры, что они значат?

Если вы про цифры чёрного цвета то это fps
Менеджер и 3D художник Blend4Web
Запекайте Ambient Occlusion!!!
mikhail@blend4web.com
18 апреля 2016 19:43
Как вы в примере morphing сделали так, что одежда изменяется ключами формы вместе с формой человека, и даже, если одежду сделать новым материалом, она всё равно будет изменяться?
18 апреля 2016 23:00
Я хочу сделать мини сайт, где подстраиваешь персонажа под себя и затем меняешь одежду, так вот не знаю как сделать так, чтобы одежда, которая будет меняться подстраивалась под изменения внесённые пользователем над персонажем…
19 апреля 2016 13:49
И, если можно, с примером
19 апреля 2016 14:13

Как вы в примере morphing сделали так, что одежда изменяется ключами формы вместе с формой человека, и даже, если одежду сделать новым материалом, она всё равно будет изменяться?

Ключи привязываются к мешу, вне зависимости от материала. В той сцене - весь объект один меш, на котором несколько материалов. Да, если сделать одежду новым материалом, то геометрия всё равно будет изменяться
19 апреля 2016 14:48
А чтобы одежда, которая сразу не на меше, приняла его форму, как сделать?
19 апреля 2016 15:52

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

У вас новая одежда это другая геометрия или просто новый материал? Если другая геометрия, то надо для неё создавать shape key, если материал - его можно просто подменить
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.