Я только что видел видео о том, что издатели называют «следующим важным шагом после изобретения 3D». По словам человека, говорящего на нем, они используют огромное количество атомов, сгруппированных в облака вместо полигонов, чтобы достичь уровня неограниченной детализации .
Они изо всех сил старались сделать видео понятным для людей, не знакомых с методами рендеринга, и, следовательно, или в других целях не указали все детали работы их движка.
Уровень детализации в их видео выглядит довольно впечатляюще для меня.
- Как можно визуализировать сцены с использованием пользовательских атомов вместо полигонов на текущем оборудовании? (Скорость памяти)
- Если это реально, почему никто еще даже не думал об этом до сих пор?
Я, как разработчик OpenGL, очень озадачен этим и очень хотел бы услышать, что говорят эксперты. Поэтому я также не хочу, чтобы это выглядело как дешевая реклама и будет включать ссылку на видео только по запросу в разделе комментариев.
Ответы:
Это легко сделать. Используя Octtree, вы просто делите мир на постепенно уменьшающиеся части, пока не достигнете необходимого уровня детализации. Это может быть размер песчинки, например. Думаю, Майнкрафт доведен до крайности.
Что вы делаете тогда? Если детали достаточно малы, вы можете рассмотреть рендеринг блоков - листовых узлов октодерева. Другие варианты включают сферы или даже геометрические примитивы. Цвет и нормаль могут быть сохранены в каждом узле, а для уменьшенного LOD можно хранить составную информацию на более высоких уровнях дерева.
Как вы можете управлять таким количеством данных? Если дерево является фактической структурой данных, вы можете иметь несколько указателей, ссылающихся на одни и те же поддеревья, подобно повторному использованию текстуры, но она также включает геометрию. Хитрость заключается в том, чтобы получить как можно больше повторного использования на всех уровнях. Например, если вы соединяете все четыре октанта в тетраэдрическом расположении с одним и тем же дочерним узлом на всех уровнях, вы можете создать очень большой 3d-серпинский фрактал, почти не используя памяти. Реальная сцена будет намного больше, конечно.
Проблема в том, что он будет работать только для статической геометрии, потому что настоящая анимация потребует манипулирования всеми этими данными в каждом кадре. Однако рендеринг, особенно с переменным LOD, не является проблемой.
Как сделать такую вещь? Я большой поклонник трассировки лучей, и он отлично справляется с подобными вещами как с графическим процессором, так и без него.
Все это, конечно, спекуляция. У меня нет конкретной информации по делу, о котором вы говорите. А теперь о чем-то связанном, но другом:
Огромное количество данных отображается
РЕДАКТИРОВАТЬ И вот что я сделал, но я намеренно изменил нормы, чтобы сделать коробки более очевидными:
Стэнфордский кролик в вокселях
Эта частота кадров была на одном ядре IIRC. Удвоение глубины дерева, как правило, сокращает частоту кадров вдвое, в то время как использование нескольких ядер хорошо масштабируется. Обычно я держу примитивы (треугольники и тому подобное) в своем октавном дереве, но для ухмылки я решил визуализировать листовые узлы самого дерева в этом случае. Лучшая производительность может быть достигнута, если вы, конечно, оптимизируете определенный метод.
Где-то на ompf есть машина с вокселями, которая действительно фантастическая - за исключением того, что она статична. Не могу найти это сейчас ...
источник
От просмотра видео ничего не указывает мне на то, что использовалось какое-либо специальное оборудование. Фактически, заявлено, что это работает в программном обеспечении в 20fps, если я что-то пропустил.
Возможно, вы будете удивлены, узнав, что в рендеринге в реальном времени было довольно много разработок с использованием различных технологий, таких как трассировка лучей, рендеринг вокселей и разбрызгивание поверхности. Трудно сказать, что использовалось в этом случае. (Если вам интересно, загляните на http://igad2.nhtv.nl/ompf2/ для большого форума по трассировке лучей в реальном времени или http://www.atomontage.com/ для интересного механизма вокселей. Google "всплеск поверхности" для некоторых отличных ссылок на эту тему)
Если вы посмотрите фильм, вы заметите, что вся геометрия статична, и, хотя она детализирована, существует довольно много повторений объектов, которые могут указывать на экземпляры.
И, скорее всего, будет много агрессивного отбора, уровней детализации и разделения пространства.
Если вы посмотрите на визуальное качество (а не на геометрическую сложность), оно не выглядит столь впечатляющим. На самом деле это выглядит довольно плоско. Показанное затенение может быть встроено в данные и не оцениваться в режиме реального времени.
Я хотел бы увидеть демонстрацию с анимированной геометрией и динамическим освещением.
Если я полностью не ошибаюсь (и это будет не первый раз), мой первый ответ будет предполагать (возможно, очень умное) использование существующей технологии, возможно, оптимизированной и расширенной для создания этой демонстрации. Однако превращение его в настоящий игровой движок со всеми остальными задачами, помимо рендеринга статической геометрии, - это совершенно другая игра с мячом.
Конечно, все это чистые домыслы (что делает меня очень веселым). Все, что я говорю, это то, что это не обязательно подделка (на самом деле я не думаю, что это так, и все еще впечатлен), но, вероятно, не настолько революционно, как они это звучат.
источник
Эти атомы на самом деле не так волшебны / особенные / чужды текущему графическому оборудованию. Это просто вид облака точек или рендеринг на основе вокселей. Таким образом, вместо треугольников они отображают точки или прямоугольники, ничего невозможного с нынешним оборудованием.
Это было и уже сделано, и это не супер изобретение, но, возможно, они придумали более эффективный способ памяти и времени. Хотя это выглядит и звучит довольно интересно, вы должны взять это видео с частичкой соли. Рендеринг 100 000 точек вместо полностью текстурированного многоугольника (который уже занимает всего несколько пикселей на экране) не улучшает качество графики в 100 000 раз.
И, кстати, я слышал, что программное обеспечение id также пытается ускорить рендеринг вокселей с помощью GPU, но я больше доверяю Джону Кармаку, чем спикеру этого видео :)
источник
Это была инвестиционная афера.
Что касается идеи, она неосуществима на текущем невыделенном оборудовании. Количество очков, которое вам нужно будет избегать, когда вы смотрите на что-то крупным планом, намного превышает количество баллов, которое вы можете получить в современной оперативной памяти. Даже если я не знаю каких-либо структур данных или алгоритмов поиска, которые позволили бы получить что-то близкое к производительности, показанной в демоверсии. И даже если бы можно было как-то искать эти точки в режиме реального времени, ошибки кеша и пропускная способность памяти гарантировали бы, что вы не сможете.
Я не сомневаюсь в том, что такие изображения не могут быть получены в режиме реального времени, просто не с помощью представленного метода. Я предполагаю, что демонстрации были выполнены с использованием вокселей, которые использовались десятилетиями и уже могут производить довольно высокую детализацию в реальном времени: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / часы? v = VpEpAFGplnI
источник
Из того, что я видел, кажется, что они используют параметрические фигуры вместо простых многоугольников - другими словами, они изменяют геометрию в соответствии с требуемым разрешением.
Это можно сделать, используя такие методы, как геометрические шейдеры и шум Перлина.
Другая возможность - использовать GPGPU (например, CUDA) для рендеринга сцены, включающей не полигоны, и для трассировки лучей (для z-порядка и теней). Другая возможность - пользовательское оборудование, которое отображает формулы вместо треугольников.
источник
Я думаю обо всех их утверждениях: сжатие памяти кажется преувеличением, я могу понять что-то вроде сжатия RLE, оказывающего большое влияние. В конце концов, я думаю, что у этой системы будет много «плюсов», но много «минусов», очень похоже на трассировку лучей или рендеринг изоповерхности с помощью движущихся кубов.
Что касается рендеринга «триллионов» атомов; Я не думаю, что они говорят это. Вместо этого они ищут W * H-атомы, то есть один атом на пиксель на экране. Это может быть достигнуто многими медленными и сложными способами. Некоторыми способами ускорить это являются KD Trees, BSP Trees, Octrees и т. Д. В конце концов, большое количество данных сортируется, и тот факт, что их демонстрация, по-видимому, сортирует 1440x720 атомов, более одного раза за кадр, из-за теней / отражений в их демонстрации, это удивительно. Так что похвала!
источник
то, как это работает, намного проще, чем вы думаете, вместо предварительной загрузки, скажем, игрового уровня, он загружает только один экран, один или несколько атомов на пиксель на вашем экране, и ничего более, игра / движок затем предсказывает, что Следующие кадры, и это единственное, что загружается, отображается только часть видимого объекта, а не весь объект. ПРОГРАММА: как много определения и разрешения ваш монитор может обрабатывать, низкое использование памяти. CONS: скорость чтения с диска достаточно велика и может привести к низкой частоте кадров.
источник