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

08 марта 2016 10:46
Может быть у вас есть возможность использовать ray_test?
Если речь о примере raytest, который идет в SDK, то там пока не понял, как именно можно достать объект не через pick_objcet. (Возможно, было бы неплохо, сделать саму функцию pick_object используя этот самый ray_test или например, отдельным вх. параметром, который бы задавал либо пик будет через сабрендеринг сцены, либо через ray_test?). Позже постараюсь разобрать пример ray_test подробнее в меру понимания ).
И еще. У меня простая сцена: ортогональная статическая камера смотрит строго сверху на плоскость, по которой ползают объекты. Т.е. практически 2D приложение. И мне было бы достаточно в данном случае просто иметь функцию преобразования координат экрана в координаты сцены. (хотя наверно, она все равно будет построена на базе util.line_plane_intersect)
08 марта 2016 12:03

Если речь о примере raytest, который идет в SDK, то там пока не понял, как именно можно достать объект не через pick_objcet. (Возможно, было бы неплохо, сделать саму функцию pick_object используя этот самый ray_test или например, отдельным вх. параметром, который бы задавал либо пик будет через сабрендеринг сцены, либо через ray_test?). Позже постараюсь разобрать пример ray_test подробнее в меру понимания ).
И еще. У меня простая сцена: ортогональная статическая камера смотрит строго сверху на плоскость, по которой ползают объекты. Т.е. практически 2D приложение. И мне было бы достаточно в данном случае просто иметь функцию преобразования координат экрана в координаты сцены. (хотя наверно, она все равно будет построена на базе util.line_plane_intersect)

В ray_test_cb приходит объект, который пересёк луч
08 марта 2016 12:26
Можно перейти из одной сцены в другую при помощи нод логики? (имею в виду сцены внутри одного бленд файла)
08 марта 2016 14:59

Можно перейти из одной сцены в другую при помощи нод логики? (имею в виду сцены внутри одного бленд файла)
Такой возможности на данный момент не предусмотрено
Команда Blend4Web - разработчик
Twitter
LinkedIn
08 марта 2016 18:10
В ray_test_cb приходит объект, который пересёк луч
Спасибо, Роман, но пока помогло не до конца.
Попробовал ray_test. Смотрю время таким образом:

var ray_test_cb = function(id, hit_fract, obj_hit, hit_time, hit_pos, hit_norm) {
console.log("Time for [append_ray_test_ext]: "+ (new Date().getTime() - start));

start = new Date().getTime();
m_scenes.set_outline_intensity(obj_hit, 1);
console.log("Time for [set_outline_intensity]: "+ (new Date().getTime() - start));
}

function main_canvas_mousedown(e) {
_drag_mode = true;

var x = e.clientX;
var y = e.clientY;

start = new Date().getTime();
m_cam.calc_ray(m_scenes.get_active_camera(), x, y, to);
console.log("Time for [calc_ray]: "+ (new Date().getTime() - start));

start = new Date().getTime();
m_vec3.scale(to, 100, to);
console.log("Time for [scale]: "+ (new Date().getTime() - start));

start = new Date().getTime();
var obj_src = m_scenes.get_active_camera();
console.log("Time for [get_active_camera]: "+(new Date().getTime() - start));

start = new Date().getTime();
var id = m_phy.append_ray_test_ext(obj_src, from, to, "ANY", ray_test_cb, true, false, true, true);
}
….

Вывод:
Time for [calc_ray]: 0
Time for [scale]: 0
Time for [get_active_camera]: 0
Time for [append_ray_test_ext]: 29
Time for [set_outline_intensity]: 0

Т.е. вроде бы теперь код отрабатывает быстро.
Но визуализация при этом все равно имеет такую же задержку, как и при pick_object, т.е.:
- клик на меше
- думает пол секунды
- мигом отрабатывает сам код main_canvas_mousedown и калбэк ray_test_cb, с выделением объекта, Но что он делает пол секунды до возникновения main_canvas_mousedown не ясно.
При этом, если отключить тени, то работает тоже на порядок быстрее, аналогично как и pick_object.
09 марта 2016 16:51

Т.е. вроде бы теперь код отрабатывает быстро.
Но визуализация при этом все равно имеет такую же задержку, как и при pick_object, т.е.:
- клик на меше
- думает пол секунды
- мигом отрабатывает сам код main_canvas_mousedown и калбэк ray_test_cb, с выделением объекта, Но что он делает пол секунды до возникновения main_canvas_mousedown не ясно.
При этом, если отключить тени, то работает тоже на порядок быстрее, аналогично как и pick_object.

Добрый день.
Не могли бы вы напомнить, какой при этом FPS?

А есть ли задержка при отсутствии main_canvas_mousedown? И еще, как вы определяете срабатывание main_canvas_mousedown? По консольному логу или по перемещению объекта?
Тени действительно требуют дополнительных просчётов.
09 марта 2016 16:53
Всем привет!
Правильно понимаю, что нодовые материалы не копируются (material.inherit_material)?
Т.е. есть несколько разных объектов, они копируются и могут принимать на себя разные материалы, для чего созданы "прокси-меши" с материалами, с которых и идет копирование. Но с нодовыми это не проходит.
Т.е. придется создавать набор мешей с каждым материалом, что ощутимо увеличивает объем загружаемых данных.
Планируется ли реализовать это в дальнейшем и если да, то примерно когда (в ближайшие три месяца например или год или в более далекой перспективе)?
09 марта 2016 16:59

Ответ на сообщение пользователя Grohot
Всем привет!
Правильно понимаю, что нодовые материалы не копируются (material.inherit_material)?
Т.е. есть несколько разных объектов, они копируются и могут принимать на себя разные материалы, для чего созданы "прокси-меши" с материалами, с которых и идет копирование. Но с нодовыми это не проходит.
Т.е. придется создавать набор мешей с каждым материалом, что ощутимо увеличивает объем загружаемых данных.
Планируется ли реализовать это в дальнейшем и если да, то примерно когда (в ближайшие три месяца например или год или в более далекой перспективе)?

Верно, копируются стековые материлы. В будущем планируем копировать и нодовые
09 марта 2016 17:18
- Не могли бы вы напомнить, какой при этом FPS?
- А есть ли задержка при отсутствии main_canvas_mousedown?
- И еще, как вы определяете срабатывание main_canvas_mousedown? По консольному логу или по перемещению объекта?
- Тени действительно требуют дополнительных просчётов.
- С включенными тенями меньше 10
- Не понял, что значит при отсутствии main_canvas_mousedown? Я же и изменяю задержку от клика до получения результата, без него никак. Единственное, можно попробовать посмотреть main_canvas_mousedown не на канве, а на каком-нибудь html-элементе страницы, но скорее всего, что задержки там не будет.
- Сейчас вообще не смотрю на перемещение объекта, пока просто клик по объекту и он должен выделиться аутлайном. Раньше пробовал через pick_object и именно он, как выяснил, стабильно давал задержку 0.5сек.
Попробовал через ray_test, теперь судя по выводу в консоль, код отрабатывает быстро, но будто бы пошла задержка до прихода в main_canvas_mousedown (т.е. кликнул на меш, 0.5сек задержка, потом моментально вывод в консоль времени отработавших процедур и выделение объекта). Или я не корректно засекаю время в коде.
- досадно, что в том же pick_object и т.п., где важна только геометрия участвуют тени, которые тормозят все практически на порядок.
И в этой связи вопрос: я не запекаю нормали, т.к. меши не имеют сложного мелкого рельефа вроде как. Каждый меш ~1000 полигонов. ~50 мешей на сцене.
Но может все-таки стоит научиться их запекать? (если это точно должно дать ощутимый эффект конечно).
09 марта 2016 18:10
Если мы делаем нодовый материал, на который кладем кубомапу окружения, для генерации бликов.
При этом меш с таким материалом перестает принимать тени и давать блики и отражения?

Т.е. получается, что на меше отображается только текстура карты окружения без учета доп. источников освещения? И еще получается много серого из-за карты, будто бы шар зеркальный практически и полностью отражает "стены" и "пол", а хотелось бы получить что-то вроде черного бильярдного шара, пробовал добавить mixRGB и больше черного в процентах, шар становится чернее, но тогда и блики тоже тускнеют. Попробую еще сделать карту только с бликами, а остальное просто альфа-канал, если так возможно вообще. Или уж коли мы используем карту окружения, то надо так же использовать и карту дифуза и спекуляра и нормалей?
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.