Рендеринг только части экрана с высокой детализацией

11

Если графика отображается для большого угла обзора (например, очень большой телевизор или гарнитура VR), зритель не может сфокусироваться на всем изображении, только на его части. (На самом деле, это относится и к экранам обычного размера.)

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

Есть ли какие-либо методы для этого доступны или находятся в стадии разработки сегодня?

Барт ван Хейкелом
источник
Это интересная идея, но я полагаю, что она нежизнеспособна, потому что большинство дисплеев не снабжены устройством отслеживания движений глаз. Я также думаю, что переключение геометрии со скоростью движения глаз может негативно повлиять на производительность. Конечно, вы могли бы спроектировать свой уровень / сцены таким образом, чтобы побудить игрока взглянуть на определенные объекты интереса и предоставить там подробные меши, в то время как вы используете ресурсы более низкого качества для окружения ...
bummzack
1
Проверьте этот документ Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . У меня не было времени, чтобы прочитать его, но он описывает способ затенения изображения при выполнении менее чем «1x фрагментный шейдер на пиксель» и при этом получение приемлемого изображения. Возможно, любой алгоритм или идеи, которые они наметят, могут быть использованы для уменьшения частоты дискретизации по краям экрана и повышения производительности.
TravisG
Еще одна интересная статья: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
Теперь это называется Foveted Rendering. roadtovr.com/…
Барт ван Хейкелом

Ответы:

7

Есть примеры таких эффектов, о которых вы говорите во многих играх. Во-первых, есть глубина резкости , при которой объект на расстоянии выглядит размытым, точно так же, как если бы камера фокусировалась на вещах, расположенных только близко к ней, как в этом примере. Вы можете изучить другие примеры, связанные с этим, в пакете DirectX SDK - там тоже есть примеры кода. Для OpenGL вы получите их в сети, если будете искать.

введите описание изображения здесь

Второе, что вы можете захотеть увидеть, это то, что может быть известно как Geometry MipMaping или Progressive Meshes, что, как следует из названия, похоже на mip-mapping текстуры, но для геометрии. Количество полигонов в сетке уменьшается по мере удаления объекта от камеры. Это помогает в повышении производительности. В D3D существует функция, которая поможет автоматически генерировать прогрессивные сетки. Вот:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

Вот пример этого:

введите описание изображения здесь

РЕДАКТИРОВАТЬ: рассмотреть следующее изображение введите описание изображения здесь

Это усечение камеры. Линия, проходящая прямо через середину, является вектором LookAt. Теперь, предполагая, что игрок всегда захочет сфокусироваться в центре экрана, вы определяете угол x. Любой объект, который будет расположен под углом больше, чем определенный х, будет иметь рендеринг с низким разрешением, а те, которые находятся в пределах угла, будут отображаться с деталями. Таким образом, объекты в центре экрана будут более детальными, чем объекты по бокам. Если игрок не смотрит в центр, просто отрегулируйте эту центральную линию в направлении, в котором смотрит игрок. (или, возможно, повернуть всю камеру в этом направлении).

Легкая искра
источник
Хотя я сомневаюсь, что вы могли бы повысить производительность, внедрив dof
Badweasel
@badweasel Ну, это правда. DOF не обеспечивает улучшения производительности, но этот эффект стоит упомянуть. Позволяет скрыть низкую детализацию, объемную геометрию, которая иногда может появляться на расстоянии.
Легкая искра
Я проголосовал за ваш ответ. Это хороший ответ. Я просто хотел указать на это, так как это было частью его вопроса.
Badweasel
Эти методы используют расстояние z от камеры, но я имею в виду расстояние x / y от точки на экране, на которую смотрит пользователь. Я полагаю, что они могут быть адаптированы как таковые, хотя.
Барт ван Хейкелом
1
@BartvanHeukelom Почему, если игрок не фокусируется на центре, вы поворачиваете камеру, чтобы сделать то, что он фокусирует в центре. Звучит смешно.
Легкая искра
2

Да, Foveted Rendering использует отслеживание глаз, чтобы визуализировать только то, на что смотрит пользователь с высокой детализацией. Все остальное можно представить более подробно.

введите описание изображения здесь

Хотя это довольно очевидно, если посмотреть на такой снимок экрана, как сообщается, он невидим для пользователя в виртуальной реальности.

Существующие основные гарнитуры не включают отслеживание глаз (пока), но есть несколько решений сторонних производителей для добавления отслеживания глаз. Кроме того, для процесса рендеринга требуется небольшая дополнительная обработка. Однако преимущества являются значительными. С внедрением рендеринга рендеринга требуется лишь небольшая процентная доля поля зрения с высокой детализацией, что может привести к значительному увеличению частоты кадров. Точные цифры зависят от реализации.

Кроме того, это даже не ограничивается VR-гарнитурами. Его можно использовать и на настольных мониторах (с добавлением отслеживания глаз и более ограниченным эффектом).

MichaelHouse
источник
1

Если продолжить ответ Byte56, то да, такие вещи развиваются в отрасли. Fixed Foveated Rendering - это техника, используемая Valve в демонстрации по ремонту роботов ( https://youtu.be/DdL3WC_oBO4?t=769 ) и в некоторых коммерческих играх (вспоминается Resident Evil VII для PSVR). В фиксированном рендеринге рендеринга не используется отслеживание глаз, но это означает, что он хорошо работает с текущими версиями гарнитур VR, которые в настоящее время не имеют каких-либо возможностей отслеживания глаз. Хотя прямо сейчас Vive должен получить набор обновлений для отслеживания взглядов, так что вы можете увидеть, что некоторые версии AAA VR используют это.

Вы не найдете много доступных примеров кода, связанных с такого рода вещами, но у Nvidia есть некоторые аппаратные расширения, которые хорошо документированы. Multi-разрешение довольно хорошо объяснено, но это особенность, связанная с их оборудованием.

Honeybunch
источник