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

Попытка перевести Quake 3 Arena Shader на GLSL.

Страницы: 1 2 3 Следующая »
#0
(Правка: 1:08) 1:05, 21 ноя. 2019

Немного предыстории...

В свое время для своего самописного небольшого движка я позаимствовал систему материалов от игры Quake 3 Arena. Собственно я ими пользуюсь до сих пор. Очень удобно. Очень доволен. Как никак - это Кармак. Великий человек. Про GLSL слыхал... но в силу ненадобности не подходил близко. И вот на днях начал его изучать... появилась идея перевести FFP материалы на GLSL.

Возможно глупый вопрос... но все же...

псевдокод из Quake 3 shader system:

textures\window\city {
  {
    map glass.jpg
    blendfunc filter
  }
  {
    map glass_env.tga
    blendfunc GL_ONE GL_ONE
    tcMod environment
  }
  {
    map window_frame.tga
    blendfunc filter
  }
  {
    map $lightmap
    tcMod lightmap
    blendfunc lightmap
  }
}

Первой строкой обьявляется имя материала. Далее 4 блока это описание слоев маиериала. Отрисовка сверху вниз. 1) Рисуем стекло по первым текстурным координатам. 2) Рисуем блеск стекла. Текстурные координаты высчитываем для каждой вершины в зависимости от положения камеры наблюдателя. 3) Рисуем рамку окна опять же по первым текстурным координатам. 4) Рисуем лайтмапу по вторым текстурным координатам. На самом деле 3 и 4 пункты объединятся в один пасс мультитекстурированием. Итого имеем 3 рендер-пасса.

А что будет при использовании шэйдеров? Можно ли это уложить в один пасс? Или также потребуется три?


#1
1:07, 21 ноя. 2019

mingw
> Можно ли это уложить в один пасс?

да

#2
1:20, 21 ноя. 2019

innuendo
> да

Ведь на одну вершину дозволено только 2 текстурные координаты. Куда класть третью?

#3
1:37, 21 ноя. 2019

mingw
> Ведь на одну вершину дозволено только 2 текстурные координаты
это где это такое написано?

#4
1:57, 21 ноя. 2019

https://qexpo2016.com/idtech3-mods-by-berserker/
А вообще тебе нужно портировать на GL 3.0 и выше. Еще как-то индексы доставать из моделей.

#5
(Правка: 2:23) 2:22, 21 ноя. 2019

mingw
> Ведь на одну вершину дозволено только 2 текстурные координаты.
понятие вершины в шейдерах довольно гибкое и данные может иметь такие какие ты захочешь, единственное на выходе вершинного шейдера ты должен задать позицию и цвет на выходе пиксельного шейдера. А какие тебе для этого понадобятся данные решаешь только ты, если тебе надо 10 текстурных координат на вершину? Нет проблем. Надо 5 нормалей? Да ради бога. Хочешь мешать 50 текстур? Ок.

#6
(Правка: 9:11) 9:03, 21 ноя. 2019

mingw
> Куда класть третью
В атрибуты. К слову, gl_Vertex, gl_TexCoord0 - тоже легаси "мусор", как сказал бы какой нибудь innuendo, в современных гапи модно самому определять формат вертекса.

> Можно ли это уложить в один пасс
Можно. Хотя непонятно, почему нельзя было с arb_texture_combine это уложить в один пасс, он же вроде на манер SetTextureStageState последовательно считает цвет фрагмента.

#7
(Правка: 12:51) 12:50, 21 ноя. 2019

выкини этот мусор(что щас есть), у тебя щас OpenGL1.1 рендер
и копипасть актуальный порт движка квейка на ОГЛ3+ или вулкан

#8
(Правка: 13:07) 13:06, 21 ноя. 2019
Я один ждал от темы ссылку на шейдертой с демкой ку3?
#9
(Правка: 13:33) 13:32, 21 ноя. 2019

NyakNyakProduction
> Я один ждал от темы ссылку на шейдертой с демкой ку3?
Наверное)

#10
13:33, 21 ноя. 2019

mingw
> В свое время для своего самописного небольшого движка я позаимствовал систему
> материалов от игры Quake 3 Arena.
https://gamedev.ru/users/?id=50764
вот пообщайся с человеком, он ку3 под глсл полностью переписал

#11
14:42, 21 ноя. 2019

NyakNyakProduction
я тоже :)

Aroch
> Хочешь мешать 50 текстур? Ок.
Зависит от версии OpenGL всё таки. Есть же ограничения. По этому стоит сначала свериться с документацией.

Но вообще да, огромная свобода в структурах передаваемых данных.

#12
15:24, 21 ноя. 2019

GLoom
> Зависит от версии OpenGL всё таки
Не от версии, а от конкретного железа.

Там вроде есть минимальные требования в спеке, но все же в основном это самодеятельность вендоров

#13
15:35, 21 ноя. 2019

Misanthrope

это где это такое написано?

В этой теме такое написано :)
#14
(Правка: 15:41) 15:40, 21 ноя. 2019

GLoom
это намек ТСу что в целом жестких ограничений нет, и если железо позволяет то пока он влезает в рамки разумного то свободен передавать сколько сможет. Чтобы он не думал что все ещё 2-3 текстурных юнита да 8 текстурных координат :)

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика