…а в стёбе про «ну вот, ты сделал реймаршер[1], теперь точно все технологии для 2д‐платформера основаны» ВНИЗАПНА оказалось рациональное зерно. потому что свет (и тени) в платформере я делаю как раз трассировкой лучей от лампочек. это, конечно, работает, но тени получаются как в третьедуме: чоткие, дерзкие и резкие. а рэймаршер, благодаря distance fields, умеет в мягкие тени, причём одним лучом — точно так же, как и жОсткие. так вот: есть мнение, что те же самые distance fields можно и в 2д спокойно использовать, получая из того же трэйсера красивые мягенькие penumbras. с регулируемым коэффициентом «мягкости». и всё ещё одним лучом.
как ни странно, в интернетах я на это ещё не натыкался. видимо, потому, что рэймаршеры пока что популярны только в демках, а сценерам насрать на двухмерные платформеры. поэтому предлагают делать радиальные размазни и подобное, но лучи всё равно трассируют.
считать, конечно, для луча понадобится чуть больше, но это можно амортизировать наложением на тайловую карту дополнительной сетки со служебной информацией. то есть, ничего такого, что и так не пришлось бы делать для быстрого трэйса. в итоге — всё равно меньше обсчётов, чем, например, предложение трассировать ещё шесть‐восемь «псевдосветильников» на каждый настоящий, рисуя тени от них не такими радикально чёрными.
в своё время ещё на коредвадуба, одним потоком, трассируя каждый луч попиксельно (да, на тайловой карте, попиксельно, потому что PoC), я спокойно рисовал 15‒20 лампочек, укладываясь где‐то в тридцать‐тридцать пять миллисекунд на кадр. то есть, вообще без какой‐либо оптимизации, да ещё и считая весь свет каждый раз заново. если же прыгать шагами побольше — хотя бы тупо по тайлу — то уже раз в восемь меньше работы… ну, плюс distance calculation (который можно делать постфактум, если луч не ударился в стену). да ещё и раскидать это на несколько потоков, чтобы камень не простаивал. есть, в общем, подозрение, что может получиться вполне годно.
надо как‐то себя уговорить такой PoC сделать, проверить. есть даже зайчатки идей, как заюзать для этого гпу, но я на гпу принципиально не хочу пока.