crypt of decay - шутки шутками... [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

шутки шутками... [Jan. 27th, 2016|01:05 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
…а в стёбе про «ну вот, ты сделал реймаршер[1], теперь точно все технологии для 2д‐платформера основаны» ВНИЗАПНА оказалось рациональное зерно. потому что свет (и тени) в платформере я делаю как раз трассировкой лучей от лампочек. это, конечно, работает, но тени получаются как в третьедуме: чоткие, дерзкие и резкие. а рэймаршер, благодаря distance fields, умеет в мягкие тени, причём одним лучом — точно так же, как и жОсткие. так вот: есть мнение, что те же самые distance fields можно и в 2д спокойно использовать, получая из того же трэйсера красивые мягенькие penumbras. с регулируемым коэффициентом «мягкости». и всё ещё одним лучом.

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

считать, конечно, для луча понадобится чуть больше, но это можно амортизировать наложением на тайловую карту дополнительной сетки со служебной информацией. то есть, ничего такого, что и так не пришлось бы делать для быстрого трэйса. в итоге — всё равно меньше обсчётов, чем, например, предложение трассировать ещё шесть‐восемь «псевдосветильников» на каждый настоящий, рисуя тени от них не такими радикально чёрными.

в своё время ещё на коредвадуба, одним потоком, трассируя каждый луч попиксельно (да, на тайловой карте, попиксельно, потому что PoC), я спокойно рисовал 15‒20 лампочек, укладываясь где‐то в тридцать‐тридцать пять миллисекунд на кадр. то есть, вообще без какой‐либо оптимизации, да ещё и считая весь свет каждый раз заново. если же прыгать шагами побольше — хотя бы тупо по тайлу — то уже раз в восемь меньше работы… ну, плюс distance calculation (который можно делать постфактум, если луч не ударился в стену). да ещё и раскидать это на несколько потоков, чтобы камень не простаивал. есть, в общем, подозрение, что может получиться вполне годно.

надо как‐то себя уговорить такой PoC сделать, проверить. есть даже зайчатки идей, как заюзать для этого гпу, но я на гпу принципиально не хочу пока.

[1] это такой рэйтрэйсер, только рэймаршер.
Linkmeow!

Comments:
From:(Anonymous)
Date:January 28th, 2016 - 11:57 pm
(Link)
Исходники где-то можно глянуть? Было бы интересно.
Я когда-то писал свой простой рекурсивный трассировщик с освещением по Фонгу и Ламберту.
[User Picture]
From:[info]ketmar
Date:January 29th, 2016 - 10:07 am
(Link)
смотри на здоровье, пугайся.

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

свет тоже не совсем доделан.

и да: это не рэйтрэйсер, а рэймаршер, с distance fields.
From:(Anonymous)
Date:January 31st, 2016 - 01:07 am
(Link)
Спасибо.