Author Topic: Примеры с BSP картами, Q3-шейдерами и проч.  (Read 891 times)

0 Members and 1 Guest are viewing this topic.

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Всем привет!
Думаю, что будет полезно иметь отдельную тему по bsp-картам со 100%-рабочими примерами реализации того или иного эффекта (-ов).

Как вступление.
Использование bsp-карт значительно упрощает жизнь для разработчиков игр как на Irrlicht, так и на WS3D, естественно. Потому что есть удобные редакторы этих самых карт + развитое коммьюнити. Лично мне приглянулся редактор Jackhammer, ибо начинал я делать игры с модов для HL1 (GoldSrc), а JH явно сделан в духе Hammer (WorldCraft). К тому же в нём прямо в редакторе вы можете увидеть действие некоторых шейдеров "вживую", есть встроенный редактор шейдеров и прочее...
С недавних пор мы получили поддержку Q3-шейдеров в WS3D и это открывает новый горизонт возможностей уже прямо сейчас (с версии > 0.9.2, я полагаю)!
Возможно, разработчики WS3D внедрят фичи с подменой Q3-шейдеров на GLSL-шейдеры, например, и расстановку ентитей прямо из карты... ух, тогда будет просто шикарно. Ну а пока будем плясать от того, что имеем. К тому же в плане производительности, скорее всего, "родные" эффекты Quake3 быстрее. Уж bump-эффект точно.
Crudux Cruo!

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #1 on: October 07, 2015, 01:34:09 PM »
Первое, о чем я бы хотел рассказать, это создание bump маппинга на вашей карте. Это не совсем относится к WS3D, однако может использоваться в нём.
Эффект получается статический, не реагирующий на источники освещения в WS3D, но иногда этого достаточно для создания более реалистичных сцен.
Итак, нам понадобится:
1. Редактор bsp-карт
2. Компилятор q3map2 (который в JH есть по умолчанию)
3. Текстура + текстура normal map
4. Блокнот для написания шейдера (либо редактор эффектов в JH)
Для начала посмотрите на lightmap, без использования normal map и то, как выглядит наша сцена (все картинки кликабельны):

Не очень-то впечатляет...
1. Для создания эффекта нам понадобится две текстуры, например:

2. Дополним шейдер простого материала буквально парой строк (их я выделил):
Quote
textures/walls/brick
{
   qer_editorimage textures/walls/brick.jpg
   q3map_lightmapsamplesize 1x1
   q3map_normalimage textures/walls/brick_normal.jpg

   {
      map $lightmap
   }
   {
      map textures/walls/brick.jpg
      blendfunc gl_dst_color gl_zero
   }
}
3. Затем нам нужно выставить Lightmap Scale 0.1 в свойствах worldspawn. В JH для этого переходим в Map/Map properties.
4. Компиляция с ключами:
для BSP
q3map2 -meta
для освещения
q3map2 -light -super 2
(чем выше значение super, тем лучше, но при этом дольше расчет...)
Вы можете добавить ключ -filter в расчет освещения для смазывания линий освещения. Экспериментируйте!
5. Запускаем и вот что мы видим:
Crudux Cruo!

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #2 on: October 07, 2015, 01:50:43 PM »
Шейдер "решетка" + освещение.
Взгляните на скриншот:

Здесь мы имеем альфа-канал + детальные тени. Источник освещения находится ВНУТРИ блока.
Итак, нам понадобится текстура вида:

И шейдер:
Code: [Select]
textures/walls/ecel_metgrate
{
surfaceparm trans
surfaceparm alphashadow
cull none
nopicmip
{
map textures/walls/ecel_metgrate.tga
blendFunc GL_ONE GL_ZERO
alphaFunc GE128
depthWrite
rgbGen identity
}
{
map $lightmap
rgbGen identity
blendFunc GL_DST_COLOR GL_ZERO
depthFunc equal
}
}
Если вам не нужны детальные тени, то закомментируйте строку surfaceparm alphashadow.
Компиляция с ключами:
для BSP
q3map2 -meta
для освещения
q3map2 -light -super 2
Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 910
  • Reputation 36
  • Game making is my hobby for life!
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #3 on: October 07, 2015, 01:59:49 PM »
Хороший пример. Или даже скорее целый урок! Спасибо.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #4 on: October 07, 2015, 02:07:12 PM »
Рад стараться. Да и для себя самого тоже неплохо иметь записи о том, как что-то делается ;D

Шейдер "стекло":

Code: [Select]
textures/walls/glass
{
surfaceparm nolightmap
cull none
{
map textures/walls/glass.jpg
blendfunc filter
}
}
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 888
  • Reputation 63
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #5 on: October 07, 2015, 02:52:41 PM »
Весьма интересно. И познавательно.
Под подменой шейдера имеется ввиду что-то вроде описанного здесь?
http://openarena.wikia.com/wiki/GLSL#On_to_using_GLSL_programs_within_the_Q3_shader_files
Над расстановкой энтити из карты уже работаем.
Не знаю, имеет ли это большое значение но все же:
Функция, возвращающая имена энтити из bsp-карты, возвращает пути к ресурсам  в коротких именах:
Code: [Select]
misc_model{
classname misc_model
model models/mapobj~1/gratel~1/gratet~1.md3
angle 360
origin 1742 1344 272
}
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Re: Примеры с BSP картами, Q3-шейдерами и проч.
« Reply #6 on: October 07, 2015, 03:36:11 PM »
Quote
Под подменой шейдера имеется ввиду что-то вроде описанного здесь?
Не знал, что в ОА такое есть... Ну да, что-то подобное я и имею ввиду.
Зная класс объекта, его угол и позицию, можно уже расставлять свои ноды. А новый класс всегда можно самому добавить в *.fgd
А модели можно и через irrEdit расставить😊 Хотя... если можно минимизировать количество редакторов и загружаемых файлов, то почему бы и нет.
Crudux Cruo!