Gamedev

Ответить в тред Ответить в тред
OpenGL thread 7 Аноним 27/06/20 Суб 09:02:43 6789451
image.png 134Кб, 1296x758
1296x758
Рисуй треугольник!
Треугольник сам себя не нарисует!

Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси.
Читаем шапку перед тем как задать очередной тупорылый вопрос.

Добро пожаловать. Снова.

Шапка треда:
https://gist.github.com/2ch-gd-opengl/26b94fc6f16100af730d84a3d8bbd557
Аноним 27/06/20 Суб 09:11:41 6789462
Перекатил чтобы задать вопрос.
Пишу ray casting игру на sdl2, но увы, она не тянет 7к полигонов даже на этапе поиска пересечений. Посмотрел на glsl и это то, что мне нужно - описываешь входные вектора, что-то с ними делаешь и возвращаешь выходные. Но проблема в том, что все гайды, которые я видел, рисуют треугольники а не проводят вычисления на видеокарте.
Я бы хотел загрузить все полигоны в видеопамять и когда нужно, запускать glsl код, который будет принимать лучи, а возвращать координаты пересечений лучей с полигонами, чтобы я через sdl2 наложил текстурки. Как это сделать?
Аноним 27/06/20 Суб 16:05:53 6789873
>>678946
> Я бы хотел загрузить все полигоны в видеопамять и когда нужно, запускать glsl код, который будет принимать лучи, а возвращать координаты пересечений лучей с полигонами, чтобы я через sdl2 наложил текстурки. Как это сделать?

Тебе скорее всего надо надо треугольниками оперировать, а мешами (наборами треугольников). Лучи пересекают меш - записываешь в какой-нибудь массив baseVertex этого меша, а потом glDrawElementBaseVertex где последний аргумент и есть тот baseVertex

Хотя это уже не рейкастинг совсем
Короче, проще найти готовый пример
Аноним 27/06/20 Суб 16:35:11 6789944
Аноним 28/06/20 Вск 12:32:35 6791175
Аноним 29/06/20 Пнд 19:54:36 6794136
>>679117
OpenGL сам за тебя выбирает, куда писать данные. А static/dynamic draw — просто подсказки для OpenGL.
Аноним 23/07/20 Чтв 19:31:58 6846667
>>678945 (OP)
Ты почему о перекате в предыдущем треде не сообщил?

...хотел задать вопрос, но пофиг уже
Аноним 23/07/20 Чтв 21:50:54 6847248
Аноним 24/07/20 Птн 07:54:58 6848679
Аноним 24/07/20 Птн 07:56:10 68486810
>>678946
>Перекатил чтобы задать вопрос
Долбоеб, а в предыдущем треде объявить не мог?
Аноним 24/07/20 Птн 15:23:56 68495711
>>684868
Кстати двачую - была идея переименовать в тред графических технологий (сразу для всех opengl/directx и других api), и чтобы тут же разбирались детали реализации всяких теней/отражений. Тред отдельно по opengl не нужен.
Аноним 27/07/20 Пнд 15:06:27 68586812
Для Opengl pipelines (glGenProgramPipelines) можно задавать отдельно стейты вроде блендинга, куллинга и т.д., как в вулкане или эта шняга только для шейдерных стадий. Рендер стейт по прежнему один и глобальный?
Аноним 28/07/20 Втр 11:29:45 68615613
>>678946
Вычисления на видеокартах с помощью шейдеров называется GPGPU. Гугли opengl gpgpu example или типа того.
А вообще для вычислений на картах нормальные люди используют openCL или cuda если поддерживается.
Аноним 28/07/20 Втр 12:08:36 68616914
>>686156
>openCL
Выдаёт на 30% меньшую производительность, чем вычислительный шейдер. Можно просто один в один скопировать код и размеры всяких рабочих групп. Это было на древней нвидия-карточке десятилетней давности, и я думал что это просто потому что opencl был в новинку - но даже на свежей карточке прошлого года со свежим драйвером такой же результат.
Аноним 28/07/20 Втр 12:18:49 68617015
Антуаны, а где почитать по пайплайну?
Мне нужен форвард/деверенд, шобы заебись было, но я в душе не ебу где про это читать. А может кто-то за меня написал отдельную либу пайплайна? Или нужно воровать код у существующих движков?
Аноним 28/07/20 Втр 12:28:20 68617316
>>686169
Ну, зависит от задачи, и одинаковый код не факт что будет хорошо работать и там и там. Для СЛ-я мб эффективнее юзать какие-то встроенные функции.
Аноним 28/07/20 Втр 12:49:55 68618317
>>686173
Было бы интересно посмотреть хоть на одну задачу, где cl выдаст более хорошие результаты. Там даже матриц вроде как нет и нужно вручную их делать.
Аноним 28/07/20 Втр 16:27:21 68625718
Аноним 02/09/20 Срд 00:19:29 69679519
Как установить это говно на шинду? Я проебался с линковкой 4 часа.
Аноним 02/09/20 Срд 01:50:31 69680720
>>696795
Разобрался. Завтра ждите от меня движок нового поколения.
Аноним 02/09/20 Срд 22:57:27 69693921
Аноним 03/09/20 Чтв 00:37:48 69696422
>>696939
Так, пока можно задавать цвет бекграунда.
Завтра буду писать обертки под draw линий и меши. А потом учить прогу их грузить с файлов.
Аноним 04/09/20 Птн 16:20:31 69724623
Посоветуйте литературу по линейной алгебре.
05/09/20 Суб 14:04:27 69733524
>>697246
Нашёл из прошлого треда.
Аноним 02/10/20 Птн 16:32:26 70184925
Ну что, треугольниковёрты? Нашли уже работу мечты? Разрабатываете ли моднейший кластерный рендерер на вулкане? Пишите ли будоражащие вайтпаперы для сигграфа? Похвастайте хоть.
Аноним 02/10/20 Птн 21:02:06 70190726
>>701849
Освоил опенгл достаточно чтобы делать свою говно-игру без обёрток в виде движков.
Аноним 25/10/20 Вск 23:57:49 70632927
Reticulating Splines...
Аноним 28/10/20 Срд 22:43:43 70685128
>>701849
Мне вообще не доставляет, забил хуй на это говно
Аноним 29/10/20 Чтв 14:43:02 70691429
>>706851
How dare you!
CG - вообще единственная смывов, оправдывающая кодинг.
Аноним 29/10/20 Чтв 16:27:41 70693030
>>706914
> смывов
Нихуя я косой, сразу не заметил, а теперь и не знаю, что за слово должно было быть.
Короче - только cg и оправдывает унылое байтоёбство.
Аноним 29/10/20 Чтв 16:53:47 70693431
>>706851
Сам ты говно. Что ты тут делаешь, раз забил?
Аноним 30/10/20 Птн 12:50:00 70704232
>>706914
Что оправдывающая? Тебе нравится смотреть на вращающийся кубы? Оргазм получаешь? Или тебе нравится делать свой велосипедный движок и смотреть как коряво он работает? Тоже наслаждение внеземное получаешь ? (ты ведь сам его сделал! Какой ты молодец! И совсем не говно получилось!)
Аноним 30/10/20 Птн 14:52:35 70707633
изображение.png 103Кб, 1020x795
1020x795
заебумбыч
Аноним 30/10/20 Птн 16:21:06 70708434
>>707076
Ты новичок? Теперь учи как делать карты теней. Сам же видишь, что свет попадает туда где его не должно быть.
Аноним 31/10/20 Суб 14:40:28 70719035
>>707084
Нет, я не семейство фторфосфорорганических азоторганических отравляющих веществ нервно-паралитического действия
Аноним 12/11/20 Чтв 18:58:24 70931036
>>707042
Всё так: люблю вращать кубы и руками собирать сраные икосаэдры, покрывать их жырным слоем кривых шейдеров с циклами и динамическими ветвления ми. Густо поливать подливой теней с алиасингом и акне, медленным ссао и шумными фейковыми отражениями.
А разве вы не любите?
Аноним 13/11/20 Птн 18:23:30 70950837
Аноним 13/11/20 Птн 18:47:06 70951938
Аноним 13/11/20 Птн 18:50:24 70952139
>>709310

> руками собирать сраные икосаэдры

Тебе кроносы дали glTF, пердоль!, Пердоль, блядь, нет не хотим, хотим руками из байтов флотами сладкий хлеб набирать.
Аноним 14/11/20 Суб 10:54:03 70963840
>>709519
Как раз хотел вебгл начать изучать. Разобрался с основами шейдеров тут thebookofshaders.com
Аноним 14/11/20 Суб 14:14:37 70966541
>>709638
> thebookofshaders.com
Хуита недописанная.
Аноним 14/11/20 Суб 15:35:38 70967742
Аноним 14/11/20 Суб 17:01:20 70970543
Аноним 17/11/20 Втр 12:04:21 71015644
>>709705
Неплохо! Наверное. А что нибудь в нормальном, текстовом виде есть?
Аноним 17/11/20 Втр 12:06:45 71015845
Пишу по туториалу, там у чувака не GLFW, а у меня GLFW. Он начал писать профайлер, у него время кадра меньше миллисекунды, а у меня - 16 мс. Этот фреймлок в ОпенГЛе выставляется или в GLFW?
Аноним 17/11/20 Втр 13:17:35 71018346
Аноним 17/11/20 Втр 13:18:17 71018447
>>710158
Похоже у тебя vsync включается по дефолту. glfwSwapInterval(0) поставь в месте, где контекст настраиваешь.
Аноним 18/11/20 Срд 23:52:35 71037748
kal.mp4 20781Кб, 640x640, 00:00:43
640x640
Бампану своим шейдером
Аноним 22/11/20 Вск 17:04:25 71098249
Управление ресурсами.
Кто как задумывался над этим? Самый простой способ это делать классы текстур, буферов, шейдеров и тд.
Но потом придётся думать над копированием и уничтожением объектов.
А тут как-то раз решил почитать исходники месы (драйвер свободный для графики) и натолкнулся на мысль, что управление ресурсами можно попробовать не раздавать разным классам, а делать всё в одной (GLContext или типа того). Он же может и следить также за учётом ссылок.
Аноним 24/11/20 Втр 18:11:03 71131950
Аноним 24/11/20 Втр 18:14:17 71132051
Аноним 24/11/20 Втр 19:05:56 71132852
>>711320
Нет. Для этого нужна DirectStorage API (часть DirectX), и то она будет доступна только в следующем году.
Аноним 24/11/20 Втр 19:13:29 71132953
>>711319
Ты ослеп или одурел?
Аноним 24/11/20 Втр 19:49:31 71133054
>>711320
RTX видяха и PCIE4 материнка под ССД
Аноним 24/11/20 Втр 19:57:55 71133255
>>710982
У меня в графическом движке есть просто структуры (классы) для текстур, которые содержат указатель на данные и их формат (ширина, высота, байт/флоат). Когда используется опенгл-бекенд, он на лету подхватывает текстурки и если у них нет GLuint текстуры, то генерирует и юзает её. При удалении текстурки вызывается коллбек опенгл-бекенда, удаляющий GLuint имя текстуры.
Аноним 24/11/20 Втр 20:27:36 71133656
>>711332
ты умеешь смотреть сколько памяти на видяхе юзается?
Аноним 24/11/20 Втр 21:58:05 71135857
>>711328
Это из-за того, что у нвидии проприетарные драйвера?
Аноним 24/11/20 Втр 22:53:47 71136058
>>711358
>Это из-за того, что у нвидии проприетарные драйвера?

Это из-за того что МС сама башляет бабки вендорам, сама продвигает и контролирует.

А кронос - это джентельменский клуб для попиздеть и изобразить антимонопольную альтернативу.
Аноним 30/11/20 Пнд 15:15:32 71225459
Аноним 30/11/20 Пнд 22:12:16 71234560
Как вкотиться из дженерик байтоёбство в пиксельебство?
Написать свой разудалый говнофреймворк с парой тройкой модных технологий и форсить на собесах гитхабом? Дрочить теорию и надеяться, что проскочишь, а там какнить втянешься?
Аноним 01/12/20 Втр 00:16:56 71235961
Аноним 01/12/20 Втр 08:48:55 71239562
>>712359
Пушто некоторым тяжело работать в столь абстрактной сфере, как программинг без визуализации своих трудов.
Кому-то норм херачить в банках и перекладывать цифири в бездонных бэкэндах. Кому-то прельстиво, если их код имеет визуальный результат.
Если персонально: работал над десктопными приложениями для отображения инфы аля убогий ГИС. И в бекенде работал. Второе невероятно печальнее, хоть и понимаешь, что дело может и даже более полезное, чем первый случай.
Такие дела, байтаны.
Аноним 01/12/20 Втр 10:53:13 71240663
>>712395
Ты хочешь поменять одно низкоуровневое говно на другое. Сказано же, что в вулкане надо 1000 строчек, чтобы треугольник нарисовать. По-твоему это весело?
Аноним 01/12/20 Втр 11:08:31 71240764
>>712406
>Сказано же, что в вулкане надо 1000 строчек, чтобы треугольник нарисовать
Только это не правда.
1к строк кода - создают устройство, проверяют технические фичи, создают слои, и т.д. и т.д. То есть не имеют никакого отношения к выводу треугольника
Аноним 01/12/20 Втр 13:28:50 71241165
>>712407
Тем не менее, человеку с опытом в бэке (востребованном и хорошо оплачиваемом) вкатываться с нуля в область сложную и не нуждающуюся в большом количестве кватывальщиков, как-то не разумно.
Аноним 01/12/20 Втр 17:22:32 71242966
>>712411
Если хочешь не сойти с ума от выжигания глазонек, то в один непрекрасный момент придётся задуматься о выборе денежка vs уровень радости от работы.
Зря чтоль об этом вашем выгорании столько написано.
Аноним 01/12/20 Втр 18:57:30 71244167
>>712429
Я считаю, что выгорание происходит не от того, чем ты занимаешься, а от того, насколько интенсивно ты этим занимаешься, и таким образом выгореть можно от чего угодно, хоть от байтоебства, хоть от типа "творческой" 3д графики.
>Зря чтоль об этом вашем выгорании столько написано.
А сколько еще написано о рабах геймдев индустрии, перерабатывающих сверх нормы за несопоставимо низкую зарплату.
Аноним 01/12/20 Втр 21:58:13 71247968
>>712441
Так за гейдев я и не радею. Есть более практичные сферы, связанные с визуалом типа тренажёрных систем. Проблема, что таких продуктов на порядок меньше перекладывания чиселок.
Аноним 02/12/20 Срд 01:26:29 71250169
Аноним 02/12/20 Срд 01:36:30 71250370
>>712479
Работаю в таком, задачи действительно интересные, как по мне. Единственное что раздражает это требования по поддержке довольно древнего железа.

Бтв насчёт того что визуальный результат приятнее не согласен. Базы данных/распределенные хранилища(и другая байтоебля) тоже очень классно, хотя опыта у меня в этом у меня меньше. Мне кажется в бекенде скучно делать какую-нибудь бизнес логику, бесконечное прокидывание всякого от бека к фронту.
Ещё у меня ненависть к парсерам, но кому-то вроде нравится...
Аноним 02/12/20 Срд 11:47:47 71254871
>>712503
Так дай совет по вкату.
Аноним 17/12/20 Чтв 02:47:49 71532872
>>712548
Хз, изучаешь то что интересно, подаешься на вакансии куда интересно, если нет привычки решать задачки на время может быть полезен литкод или аналоги
Аноним 18/12/20 Птн 05:18:06 71550873
Пилю скелетную анимацию, возникли проблемы с моделями для теста. У меня нет пока загрузчика, а писать свой крайне лениво до момента, пока не получу рабочий код постановки меша в позу

Где можно взять простую заскиненную модельку + скелет из пары костей в читабельном для человека виде для отладки?
Аноним 18/12/20 Птн 05:27:55 71550974
>>715508
Ладно похуй возьму из головы/напишу экспортер для блендера
Аноним 18/12/20 Птн 06:07:16 71551175
>>715508
sketchfab например, отфильтруй по бесплатным моделям

>>715509
Прикрути assimp или fbx sdk, это не сложно. У fbx sdk громоздкий api, но в комплекте есть пример как прочитать из файла все что в нем есть.
Аноним 04/01/21 Пнд 12:22:20 71838776
Допустим я рисую одну картинку просто треугольниками, а вторую генерирую фрагментым шейдером при помощи реймаршинга, вместе с depth буффером.
Как мне наложить вторую картинку на первую, используя её depth-буфер?
Аноним 05/01/21 Втр 11:30:18 71854477
>>718387
Как ты пишешь в depth buffer? Это условный буффер, то есть просто текстура или АПИшный depth buffer?

>Как мне наложить вторую картинку на первую, используя её depth-буфер?
Просто рисуй дополнительным проходом и используй в нем картинку реймарчинга в качестве текстуры и сэмплевай с нее. Я не знаю на сколько у тебя там сложная сцена, но вообще ты это можешь одним проходом рендерить. После того как отрисовал основную сцену, следует дравкалл квада для реймарчинга. В этом случае не надо к нему текстуру привязывать, а можешь сразу в фрагмент шейдере реймарчить. При этом читай актуальную глубину пикселя из до этого отрисованой сцены и сравнивай ее с глубиной куда попал реймарч. Если глубина меньше, заначит рисуешь пиксель реймарчинга, а если нет, то просто пропускаешь пиксель с discard;
Аноним 05/01/21 Втр 12:08:34 71855178
>>718387
Еще забыл добавить: Перед дравкаллам квада для реймарчинга отключи тест глубины с glDisable(GL_DEPTH_TEST), чтобы не было проблем с рисованием поверх. Глубину ты и так сам в фрагмент шейдере тестишь. Потом в цикле перед основной сценой не забудь снова включить glEnable(GL_DEPTH_TEST).
Аноним 05/01/21 Втр 19:32:44 71865179
16094023778260.png 2Кб, 64x32
64x32
У меня вопрос, допустим нужно нарисовать тайл пикрил без сглаживания. Если его рисовать методом обычного спрайта в виде квадратной сетки вершин, то он рисуется нормально, если же сетка вершин будет подогнана под форму, то на краях образуется сглаживание краёв. Вопрос как сделать чтобы нормально он рисовался без сглаживания? Сделать сетку на 1 пиксель больше? И вообще интересно насколько оптимизация по форме спрайта влияет на производительность?
Аноним 06/01/21 Срд 02:29:28 71874080
>>718387
Во фрагментном шейдере стреляния лучами, просто запиши глубину в gl_FragDepth.
Аноним 06/01/21 Срд 09:44:04 71876481
>>718387
Ты уже разобрался? Напиши хоть, что конкретно ты делаешь или скриншот выложи.
Аноним 06/01/21 Срд 13:18:43 71880282
>>718651
Что у тебя там сглаживается? MSAA что ли включил? Или ты хочешь типа пиксель-арт стайл? Тогда в функцие glTexParameteri() поставь у мин и маг фильтра последний параметр на GL_NEAREST вместо GL_LINEAR. Сделай скриншот, так будет понятнее, что у тебя там не так.
Аноним 06/01/21 Срд 13:20:47 71880383
>>718764
Пока не занимался этим. Я просто не сразу подумал, что можно сразу в реймаршинг-шейдере глубину проверять. Через gl_FragDepth или юниформить текстуру с глубиной в шейдер, потом разберусь и, может, скриншот выложу.

Вообще я хотел для своей следующей игры вокруг некоторых объектов сделать полупрозрачные сферы и другие объекты, между которыми происходит smooth union и они слипаются.
Аноним 09/01/21 Суб 13:10:33 71949784
out.mp4 17375Кб, 1460x860, 00:00:33
1460x860
>>718764
Сделал. Конечно, офигел от этого всего, джва часа разбирался куда что прикрепить. В связи с особенностями моих графического и ГУИ движков сделал так: рендерю в квадрат, закрывающий весь экран реймаршинг сцену, при этом передаю ей текстуру, в которую срендерил depth buffer основной сцены.
Зато теперь можно сделать красивые эффекты. И вообще, я раньше не думал о том, что можно вот так миксить быструю опенгл-сцену и красивую реймаршинг-сцену.
Аноним 10/01/21 Вск 19:25:20 71981685
>>719497
Прикольно смотрится. Можешь еще немного фонга на эти сферы добавить. Нормали сферы в реймарчинге легко высчитываются: точка поверхности - центр сферы = вектор нормали. А дальше фонг шейдинг как в обычном шейдере.

>И вообще, я раньше не думал о том, что можно вот так миксить быструю опенгл-сцену и красивую реймаршинг-сцену.
Ну собственно еще есть компьют шейдеры, в которых можно сложные эффекты просчитывать, а потом совмещать с обычным фреймбуфером, в том числе реймарчинг и рейтрейсинг.
Аноним 11/01/21 Пнд 14:13:53 72001686
out0.mp4 3289Кб, 1460x860, 00:00:07
1460x860
out1.mp4 3726Кб, 1460x860, 00:00:08
1460x860
>>719816
Да, фонг это хорошо, но для моего эффекта не подходит, слишком перегруженным кажется.
И в реймаршинг же нормали вычисляются одинаково для всей сцены:
vec3 SceneNormal(vec3 ori) {
return normalize(vec3(SceneSDF(vec3(ori.x + NORM_EPSILON,ori.y,ori.z),vec3(0,1,0)).d - SceneSDF(vec3(ori.x - NORM_EPSILON,ori.y,ori.z),vec3(0,1,0)).d,
SceneSDF(vec3(ori.x,ori.y + NORM_EPSILON,ori.z),vec3(0,1,0)).d - SceneSDF(vec3(ori.x,ori.y - NORM_EPSILON,ori.z),vec3(0,1,0)).d,
SceneSDF(vec3(ori.x,ori.y,ori.z + NORM_EPSILON),vec3(0,1,0)).d - SceneSDF(vec3(ori.x,ori.y,ori.z - NORM_EPSILON),vec3(0,1,0)).d));
}
Аноним 11/01/21 Пнд 20:01:09 72008787
>>720016
>И в реймаршинг же нормали вычисляются одинаково для всей сцены
То что я панисал, это быстрое решение для обычной сферы. А твоя жирная функция с шестью сэмплами высчитывает нормаль с помощью градиента. Ну для сложной геометрии только так, да.

Не по теме: у тебя камера дерганая из-за резких движений мышки. На видео это не приятно смотрится в качестве презентации. Для плавного передвижения камеры ты можешь добавить управление аналог-стиками геймпада. Или для клавомыши захуячить свой алгоритм сглаживания движения камеры. Мы же любим свои велосипеды писать, правильно? :)
Аноним 12/01/21 Втр 09:22:21 72018688
Изучаю Batch Rendering
и у меня вопрос по поводу функций:
glGenVertexArrays и glCreateVertexArrays
какие в них различия?
Аноним 12/01/21 Втр 12:24:19 72022589
Аноним 13/01/21 Срд 10:45:10 72041990
Вопрос по поводу матриц, где их лучше считать? Просто у меня вычисления в коде и в шейдер передаётся уже итоговая матрица, у других же наоборот, в шейдер передаются несколько матриц и они там считаются.
Аноним 13/01/21 Срд 13:04:49 72045991
>>720419
Твой вариант лучше, т.к. видеокарта не считает n раз одну и ту же матрицу, берет готовую. Обычно у других матрицы комбинируются по всякому и их для этого передают раздельно
Аноним 14/01/21 Чтв 10:42:56 72063892
Изучаю Cherno и у него там есть пример
https://www.youtube.com/watch?v=bw6JsLnx5Jg&list=PLlrATfBNZ98f5vZ8nJ6UengEkZUMC4fy5&index=3
шейдер вида:
uniform sampler2D colorTexture[2];
Код:
glBindTextureUnit(0, texture1);
glBindTextureUnit(1, texture2);
Но как я понял это под 4.5 версию работает, у меня же 4.3.
Как биндить текстуру в нужный текстурный слот на моей версии?
Аноним 14/01/21 Чтв 10:52:55 72064293
>>720638
Кажется разобрался как надо:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
Аноним 14/01/21 Чтв 19:34:14 72073594
>>720638
>Cherno
Наш человек кстати.
Аноним 16/01/21 Суб 19:55:37 72150195
>>720735
Персонаж фильма "вратарь галактики"?
Аноним 17/01/21 Вск 01:18:15 72165296
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов