Войти
ПрограммированиеФорумГрафика

[Unity3d] GPU Line Renderer (9 стр)

Страницы: 18 9 10 1114 Следующая »
#120
(Правка: 22:08) 22:03, 24 авг. 2019

Aroch
хорошо, я понял, но упаковка данных это следующий этап.
Сейчас у меня есть некий менеджер рисующий линии.
Исходим из того что колличество рисуемых линий динамично и может меняться от нуля до десятков тысяч непредсказуемо.
Я решил пока сделать так -  буфер с данными меняет свой размер когда колличество линий
превышает  тысячные числа, то есть, например -  в одном кадре рисуем 900 линий - буфер 1000 элементов, в следующем кадре мы рисуем 1001 линию - буфер пересоздается с размером 2000 и так далее. Это приводит к аллоцированию памяти, но зато мы не  будем заливать пустой буфер (точнее его максимальная пустота будет не более 50%).

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



#121
22:27, 24 авг. 2019

Polyflow3d
> Подозреваю, что я велосипедю сейчас динамический массив или что то типа того.
> Как вообще такие задачи правильно решаются? Интуиция подсказывает, что должен
> быть какой то умный алгоритм подгонки длины буффера
Не, найди просто оптимальный размер буффера на один drawcall, у меня как я сказал ранее это был 1мб. И заливай в него пока есть место, после чего рисуешь что влезло, что не влезло во второй буффер с таким же размером. Если все влезло в первый, то на след. раз всё равно имеет смысл сделать swap на второй буффер. Специально делать малюсинькие буфферы ради экономии памяти, ну так себе занятие. 2-3мб (2-3 буффера) под рендер вообще всех линий не так и много. Даже если тебе нужно будет нарисовать всего 1 сегмент за весь кадр, от того что буффер будет таким "огромным" ты ничего не потеряешь, заливать все равно через sub (1 sub на буффер всегда не зависимо от кол-ва сегментов в кадре) будешь только то что нужно.

#122
20:23, 25 авг. 2019

Aroch
что такое суб?

#123
21:42, 25 авг. 2019

Polyflow3d
> что такое суб?
glBufferSubData

#124
22:01, 25 авг. 2019

Aroch

glBufferSubData

а тебя не смущает что тема про Юнити?
#125
(Правка: 22:13) 22:08, 25 авг. 2019

Polyflow3d
> а тебя не смущает что тема про Юнити?
если там нет прямого доступа к апи, то хотя бы лок/апдейт части буфера имеется?
https://docs.unity3d.com/ScriptReference/Mesh.GetNativeVertexBufferPtr.html
Хотя вот же можно получить спокойно id на vbo и работать с ним используя нужный api напрямую.

#126
(Правка: 8:11) 8:09, 26 авг. 2019

Aroch
всякие нативные плагины я пока не рассматриваю.

В юнити есть Graphics.DrawProcedural который позволяет рисовать мешь с заданной длиной. Но я от него отказался по причине того что он медленный почему-то и не интегрирован в рендер пайплан.

По этому я создаю меш + геометрический шейдер в котором есть StructuredBuffer с информацией о цвете, толщине и позициями сегментов.
Из меша в шейдер передается только индексы точек

         
v2g vert (  uint id:SV_VertexID ){
        v2g o;
        o.id = id;
        return o;
}



все остальное из буфера.

Под "изменением длины буфера" у меня подразумевается изменение длины как StructuredBuffer так и меша одновременно. 
Если эту длину не менять, то будет рисоваться весь меш, не смотря на то что фактически рисуется пару линий.
По этому его длину нужно обязательно динамически менять.
Тут задача не про ogl или графику, тут скорее логическая задача - как менять размер буффера как можно реже, и при этом подгонять его длину под размер рисуемого контента как можно точнее.

#127
(Правка: 15:03) 14:57, 26 авг. 2019

Polyflow3d
по мне так смешная ситуация выходит, выбирать юнити чтобы упрощать разработку и при этом делать простые вещи через жопу предлагаемой юнити. Извини но я с юнити не работаю поэтому как тут оптимизировать используя те инструменты что предлагает юнити я тебе не посоветую.
Polyflow3d
> По этому его длину нужно обязательно динамически менять.
а задать сколько ты хочешь отрисовать нельзя никак иначе? Изменение длины дорогая операция? Если на оба вопроса ответ утвердительный, то это какая-то censored.

Можно конечно воспользоваться совсем уж отвратительным способом и просто генерировать лишние вырожденные сегменты за пределами экрана добивая под нужный размер "буфера" плюс создать сразу их штук 10, размерами 16 32 64 128 256 512 1024 2048 и т.д. и выбирать нужный в зависимости от кол-ва сегментов в данный момент, к примеру если нужно отрисовать 4578, заполняем буфер с 4096 до упора и остаток в буфер с размером 512. При таком подходе менять размеры не придется, но это если эта операция действительно дорогая.

#128
10:31, 27 авг. 2019

Aroch
Мне кажется, вы не понимаете субъекта. Пацан к успеху идёт, его интересует заработок на плагине, а скорость загрузки его интересует постольку поскольку он деятельный, и делать что-то надо, и находится в иллюзии, где заработок как-то существенно связан с качеством выполненной работы.

#129
10:37, 27 авг. 2019

NyakNyakProduction

находится в иллюзии, где заработок как-то существенно связан с качеством выполненной работы.

есть еще другие мотивации кроме как заработок, но тебе , ...., этого не понять

#130
10:40, 27 авг. 2019

Aroch

Можно конечно воспользоваться совсем уж отвратительным способом

а какие твои критерии "отвратительности"?

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

#131
(Правка: 13:00) 13:00, 27 авг. 2019

Polyflow3d
критерий отвратительности когда есть нормальный способ, но вынужден использовать через жопный из-за ограничений навязанными на более верхнем уровне.
> Например когда мипмапы создаются для текстуры - это отвратительно?
нет.

#132
15:10, 27 авг. 2019
> критерий отвратительности когда есть нормальный способ, но вынужден использовать через жопный из-за ограничений навязанными на более верхнем уровне.
> Например когда мипмапы создаются для текстуры - это отвратительно?
нет.

странная логика. глупый GAPI не умеет фильтровать текстуры и по этому приходится создавать их уменьшиенные дубликаты и хранить их -  это не отвратительно.

Тот же самый GAPI не умеет рендерить буффера с динамической длиной, и приходится изгаляться - а это уже отвратительно, потому что юнити.

#133
(Правка: 16:11) 16:10, 27 авг. 2019

Polyflow3d
> глупый GAPI не умеет фильтровать текстуры
умеет.
> и по этому приходится создавать их уменьшиенные дубликаты и хранить их
можешь делать в x4 выборок в шейдере и фильтровать сам. Mip'ы были придуманы еще до того как видюхи умели в них аппаратно.
> Тот же самый GAPI не умеет рендерить буффера с динамической длиной
в момент рендера нет никакой динамической длины, есть буфер определенного размера и gapi тебе позволяет рисовать только ту часть которая тебе нужна в данный момент. Менять размер буферам перед тем как класть в них данные ты можешь тоже сколько влезет если сильно нужно, но так никто не делает по понятным причинам.
> а это уже отвратительно, потому что юнити.
потому что нельзя (с твоих слов, вполне может оказаться что всё там можно) рисовать только ту часть которая нужна в конкретный момент.

#134
(Правка: 21:51) 21:45, 27 авг. 2019

Aroch

Mip'ы были придуманы еще до того как видюхи умели в них аппаратно.

а сейчас зачем делают отвратительные мипы?
Менять размер буферам перед тем как класть в них данные ты можешь тоже сколько влезет если сильно нужно, .

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

но так никто не делает по понятным причинам

кто эти все - никто? Ты и твой партнер по написанию движка и просмотру аниме? 

И как эти никто рендерят динамическую геометрию? Или они по понятным причинам ее не рендерят ? Загрузили спонзу, полетали камерой и пошли дальше смотреть аниме и давать советы на форумах?

Я вообще не пойму - движкописцам что ли мало места где можно пофлеймить?

Страницы: 18 9 10 1114 Следующая »
ПрограммированиеФорумГрафика