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

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

Хотя флаг находится перед игроком, отражения на оси перчатки выглядят так, будто флаг сзади.

Изначально все нужные утилиты я думал писать самостоятельно, но потом наткнулся на этот прекрасный туториал Эндрю Кремера.

Для этого нужно будет снять сцену три раза:

  1. Так, как она должна выглядеть после обработки.
  2. Только оружие с наложенным на него Object-Space Normal Map: по нему будут построены отражения.
  3. Сцена без оружия и с большим (170) fov: этот проход, наложенный на предыдущий, дадут в результате отражения на пушке.

Сделать Tangent Space Normal Map не составляет труда, но перестроить его на Object Space Normal Map мне не удавалось до тех пор, пока я не наткнулся на эту замечательную утилиту.

2rocketl

Получив нужную карту нормалей, накладываем её на оружие, переписав шейдер ракетницы:

models/weapons2/rocketl/rocketl
{
cull disable
nopicmip
{
map models/weapons2/rocketl/rocketl_normal.tga
rgbGen vertex
}
}

Чистим сцену от всего ненужного:

/clientoverride all t 3
/r_fastSky 1
/r_fastSkyColor 0
/r_drawWorld 0
/cg_fxfile "no.fx"
player/gibbed { }
player/teleportIn { }
player/teleportOut { }
weapon/gauntlet/flash { }
weapon/gauntlet/impactflesh { }
weapon/machinegun/flash { }
weapon/machinegun/impact { }
weapon/shotgun/flash { }
weapon/shotgun/impact { }
weapon/grenade/trail { }
weapon/grenade/fire { }
weapon/grenade/flash { }
weapon/grenade/impact { }
weapon/grenade/projectile { }
weapon/rocket/trail { }
weapon/rocket/fire { }
weapon/rocket/flash { }
weapon/rocket/impact { }
weapon/rocket/projectile { }
weapon/lightning/impactflesh { }
weapon/lightning/flash { }
weapon/lightning/impact { }
weapon/lightning/trail { }
weapon/rail/fire { }
weapon/rail/impact { }
weapon/rail/trail { }
weapon/plasma/projectile {}
weapon/plasma/trail { }
weapon/plasma/impact { }
weapon/bfg/projectile { }
weapon/bfg/fire { }
weapon/bfg/trail { }
weapon/bfg/impact { }

И рендерим второй проход. Получаем клоунской раскраски ракетницу на черном фоне. Всё ненужное обрезается маской уже потом.

Третий проход рендерится точно так же, как и первый, за исключением /cg_drawGun 0 и /cg_fov 170.

Получаем такое:

1 2 3

Это, как ни странно, уже 75% пути.

Остаётся вырезать только оружие из карты нормалей, поколдовать с картой отражений и скомпоновать это всё.

5 11 4 6