Войти
ПрограммированиеФорумОбщее

Разработка под VR (9 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 15 6 7 8 9 10 Следующая »
#120
15:14, 11 фев. 2021

std::cin
Крутота. Только с чужими названиями и товарными знаками поаккуратней, надо всё замазывать и изменять. К моделям автомобилей, если они будут слишком сильно детализированы, это тоже относится.

Виар тут будет где? От первого лица у земли?

#121
0:48, 12 фев. 2021

romanshuvalov
> Виар тут будет где? От первого лица у земли?
Да.

#122
(Правка: 18:40) 18:35, 12 фев. 2021

Извини, два дня не заходил и не видел твоего сообщения.
Сейчас попробовал под Index'ом - короче теперь контроллеры не работают ВООБЩЕ. "No bindings found" - сразу вылазит окно с просьбой настроить контроллер и отказаться невозможно, равно как и закрыть аппликацию поскольку нет реакции на нажатие кнопок. Пришлось снять хедсет у убить аппликацию вручную.

#123
18:43, 12 фев. 2021

san
Запятую пропустил :/ Исправлю в следующий раз. Но странно, что у одного чувака на Индексе сработало.

#124
18:49, 12 фев. 2021

romanshuvalov
Не думаю что сработало - или он не с Индексом или просто пишет тебе приятное или ты что-то не понял. Чудес нет. Старая аппликация работала, правда с глюками, новая вообще не находит настройку контроллера. С G2 не проверял, для этого надо отключать Индекс а я работаю. Так что с ним проверю когда время будет.

#125
19:35, 12 фев. 2021

> или ты что-то не понял. Чудес нет.
Ну не знаю, может, он сам вручную настроил конфиг.

#126
21:46, 21 фев. 2021

Обнаружил, что у Блендера из коробки есть аддон, позволяющий смотреть сцену в виаре. И даже переключаться между точками обзора (Landmark'ами), вот только контроллеры не поддерживаются, написал простенький аддон с двумя кнопками, на которые можно повесить горячую клавишу, а клавишу эмулировать геймпадом.

Вот, может, кому пригодится:

import bpy

bl_info = {
    "name": "Landmark Switcher for VR Scene",
    "author": "Roman Shuvalov",
    "version": (0, 1, 0),
    "blender": (2, 90, 0),
    "location": "3D View > Sidebar > VR",
    "description": ("Allows to navigate between landmarks in VR. "),
    "warning": "For early Viewport VR Scene versions",
    "doc_url": "",
    "category": "3D View",
}

class vr_landmark_switcher_next(bpy.types.Operator):
    bl_idname = "view3d.vr_landmark_switcher_next"
    bl_label = "Next Landmark"
    bl_options = {'REGISTER'}

    def execute(self, context):
        scene = context.scene
        landmarks = scene.vr_landmarks
        scene.vr_landmarks_active = (scene.vr_landmarks_active + 1) % (len(landmarks))
        return {'FINISHED'}
    
class vr_landmark_switcher_prev(bpy.types.Operator):
    bl_idname = "view3d.vr_landmark_switcher_prev"
    bl_label = "Prev Landmark"
    bl_options = {'REGISTER'}

    def execute(self, context):
        scene = context.scene
        landmarks = scene.vr_landmarks
        scene.vr_landmarks_active = (scene.vr_landmarks_active + len(landmarks) - 1) % (len(landmarks))
        return {'FINISHED'}

class vr_landmark_switcher_panel(bpy.types.Panel):
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "VR"
    bl_label = "Landmark Switcher"

    def draw(self, context):
        layout = self.layout

        row = layout.row()
        row.operator("view3d.vr_landmark_switcher_next")
        
        row = layout.row()
        row.operator("view3d.vr_landmark_switcher_prev")

def register():
    bpy.utils.register_class(vr_landmark_switcher_panel)
    bpy.utils.register_class(vr_landmark_switcher_next)
    bpy.utils.register_class(vr_landmark_switcher_prev)

def unregister():
    bpy.utils.unregister_class(vr_landmark_switcher_panel)
    bpy.utils.unregister_class(vr_landmark_switcher_next)
    bpy.utils.unregister_class(vr_landmark_switcher_prev)

if __name__ == "__main__":
    register()
#127
22:03, 4 мар. 2021

Не знаю, может будет полезно. Я реализовал однопроходный стереорендеринг, вот результаты:

Это обычный двухпроходный рендеринг, т.е. сначала левый глаз, потом правый:

.стереорендеринг | Разработка под VR

А это та же сцена, но с однопроходным рендерингом:

.однопроходный рендеринг | Разработка под VR

Хотя загрузка GPU не сильно изменилась - с 3.85 мс до 3.35, а CPU с 3.8 мс до 3.4 мс, но вся картинка ощутимо сдвинулась влево - общее время рендеринга упало с 8.8 мс до 6.4 мс. Две с половиной милисекунды это уже серьезно.
В движках (UE и Unity) однопроходный рендеринг уже реализован, но если движок делаешь сам то есть смысл это использовать.

#128
22:24, 4 мар. 2021

san
> однопроходный стереорендеринг
По запросу "Single-pass stereo" гуглится вот это: https://developer.nvidia.com/vrworks/graphics/singlepassstereo
И там даже на поясняющей картинке видно, что применяться такое может только для отдалённых объектов, параллакса-то нет.

Или речь про инстансинг/multiview?

#129
22:55, 4 мар. 2021

romanshuvalov
Это аппаратный однопроходный рендеринг, работает только на Nvidia и с некоторыми ограничениями. Параллакс там есть, но не суть важно.
Я сделал програмный рендеринг на DrawIndexedInstanced с двумя инстансами, т.е. все обьекты выводятся дважды, выбирая в вертексном шейдере матрицу в зависимости от номера инстанса. Матрицы разумеется нужно подавать обе - и для левого и для правого глаза. Рендер для каждого глаза идет в свою половину текстуры, потом я ее разбиваю на две независимые как требуется для API.

#130
23:14, 4 мар. 2021

А, ну так это то, о чём я писал ранее: https://gamedev.ru/code/forum/?id=258029&page=3&m=5325007#m30

Есть даже специальный функционал для этого, в OpenGL - расширение GL_OVR_multiview, для D3D вроде бы называется "View Instancing" (https://andrewcjp.wordpress.com/2019/07/09/view-instancing-in-directx-12/). Из плюсов готового решения - рендер идёт сразу в отдельные текстуры, которые можно сразу передавать в VR API.

#131
(Правка: 0:28) 0:16, 5 мар. 2021

romanshuvalov
Ну я на DX12 пишу, так что мне приходится все ручками делать. Но я и так использую инстансы, я же сразу это сказал. Кстати геометрический шейдер на современных картах не нужен. Там нет ничего особо сложного. В шейдер передаются две матрицы и два вьюпорта. В зависимости от индекса выбирается та или другая пара. Я читал что полезно еще выводить обьекты не  по порядку - т.е. левое, потом правое, потом опять левое и правое, а чередовать их. Т.е. левое, правое, правое, левое. При этом геометрия в половине случаев будет из кэша браться. Это я пока не сделал, сейчас я с зеркалами воюю. Там все немного сложнее, но суть та же.

Поначалу я считал что особой выгоды не будет (поскольку пиксельный уровень не затрагивается, т.е. GPU грузится одинаково), но решил попробовать чисто для интереса. Оказывается выгода есть и довольно существенная. Причем не из-за экономии CPU (как все считали) а в результате лучшей организации последовательности выполнения операций на уровне самой карты. Собственно это и видно на картинке.

#132
0:33, 5 мар. 2021

san
> Ну я на DX12 пишу, так что мне приходится все ручками делать.
Я дал ссылку на View Instancing - это то же самое, что у тебя, только не всё надо делать ручками, поэтому должно быть еще быстрее. Это фактически тот же самый инстансинг, но специально адаптированный под VR и решающий ряд тех проблем, которые ты сейчас решаешь вручную. (Если, конечно, я верно понял, что View Instancing это D3D12-аналог GL_OVR_multiview из OpenGL).

#133
(Правка: 2:28) 1:27, 5 мар. 2021

romanshuvalov
Я не очень понял о каком "специально адаптированном инстансинге" ты говоришь. По ссылке лежит довольно невнятное описание (без кода) стерео рендера в массив рендер-таргетов. По производительности это мало чем отличается от того что я сделал. Я от этого метода отказался из-за проблем с массивом дептов и некоторых архитектурных особенностей. А в остальном это то же самое. Просто один вьюпорт на массив таргетов вместо массива вьюпортов на один таргет. Другое дело, что Нвидиа сделала полноценную аппаратую реализацию стерео-рендера, но он работает только на картах RTX. https://developer.nvidia.com/vrworks/graphics/multiview

#134
12:52, 5 мар. 2021

romanshuvalov
> GL_OVR_multiview из OpenGL
Это из OpenGL ES, в десктопном нет мультивью. В Dx12 и Vulkan есть свои мультивью.

Страницы: 15 6 7 8 9 10 Следующая »
ПрограммированиеФорумОбщее