forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Объемный свет (http://forum.boolean.name/showthread.php?t=15691)

pax 21.10.2011 11:15

Объемный свет
 
На видео на 1:55 есть источники света, как такие делаются в теории?
http://video.unity3d.com/video/36707...y-recoil-games

.Squid 21.10.2011 12:42

Ответ: Объемный свет
 
Ну, то, что видно на видео, можно обычным конусом сделать, как мне кажется. Края сделать плавно затухающими с помощью шойдера. Типа такого (HLSL):
Код:

cameraPos                  = normalize(cameraPos - IN.worldPosition);
float        fallOff                  = saturate (dot( cameraPos, IN.normal ));
float4        color                  = tex1D(lightColorLUT, fallOff));

В lightColorLUT лежит текстура в виде градиента (очевидно, нелинейного).
Правда, если камера может попадать в этот конус, то нужно еще что-то придумать. Вероятно, вывернуть конус наизнанку.

PS. Забавная игруля. На Хорсе нечто подобное (в плане механики) сейчас делают. Жаль, что медленно : (

pax 21.10.2011 13:30

Ответ: Объемный свет
 
Спасибо

Randomize 21.10.2011 13:33

Ответ: Объемный свет
 
Напомнило: http://www.youtube.com/user/RezenovEgor?blend=2&ob=5

moka 21.10.2011 14:04

Ответ: Объемный свет
 
Клёвое видео.

Сделать можно несколькими способами. Для такой игры сойдёт и вариант который предложил Squid.
Можно получше - Volumetric Fog. Вот делал давно:


С подобным эффектом будет выглядеть что это на самом деле туманчик, и всё что в нём также будет корректно смотреться в отличии от простого конуса.
Также и когда внутри него, будет всё ок, будет просто как туман, который кончается в определённом месте.

Какова суть тут:
1. Рендерим всю сцену с фронт фейсами, а для Volumentric Geometry (геометрия, в твоём случае цилиндры), с backface'ми. Рендерим это в depth карту в R канал (можно F32 формат текстуры заюзать). Cls цвет ставим на белый.
2. Рендерим всю сцену снова, но уже только Volume Geometry frontface'ы. Также в дептх карту, в канал R. Cls цвет ставим чёрным.
Получается у нас будут две depth карты, вычисляя данные из первой от второй, мы получим разницу дистанции. Эта разность - и есть длина луча проходящего через Volume Geometry, таким образом в пост обработке можно смело исходя из полученного данного, это дело отрисовывать.

Эффект не сложны, простой достаточно, единственное, это доп рендеры но не тяжёлые (в дептх карту).
Минус в этом простом подходе, это то что волум геометрия не может перекрываться, либо будут артефакты, для этого нужно будет сильнее извратиться, в интернете есть по этому поводу инфа :)


Часовой пояс GMT +4, время: 09:21.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot