{{notification.text}}

MirGames

17.10.07 14:54
0
Во многих играх (в том же фаллауте) если герой заходит за строение появляется как-бы круглая или другой формы дырка в строении, в которой видно что делается вокруг героя. Как реализовать такую фичу?

У меня траббла - в лесу за кронами деревьев не видно что делают на земле с героем. Тока слышны ахи и вздохи протяжные :))
#1
17.10.07 14:57
0
Woolf
Выставить alpha<1 закрывающему объекту?
#2
17.10.07 15:11
0
Не.. Объект например большой.. Целиком его альфой делать не есть гуд. Да и определить еще нужно, что именно закрывает както
#3
17.10.07 15:13
0
Спроси автора Total Influence как он делает :) Еще можно определить, какую область нужно делать полупрозрачной и делать ее таковой в фрагментном шейдере.
Отредактировано: 17.10.07 15:14
#4
17.10.07 15:22
0
Ну-с предполагаю, что рендеришь место, где находится герой в текстурку без верхних слоев (без деревьев\стен и т.п.) и рисуешь потом поверх деревьев эту текстурку с маской (ну шарообразной формы например, как в фалауте) :)
Отредактировано: 17.10.07 15:26
#5
Mirage
17.10.07 15:39
0
В Dungeon Siege просто объекты, близкие к камере рисовались полупрозрачными. Дешево и сердито.
Если с фрагментным шейдером, то можно глубину отрисовываемого пикселя сравнивать с z игрока и если меньше, то использовать блендинг. Это упрощенно. На практике понадобится круг вокруг игрока рисовать, пост процессинг делать и может еще что.
#6
17.10.07 15:51
0
Хм.. А буфер трафарета если под это дело приспособить?
Получается следующая последовательность действий..

1. Рисуем грунт.
2. Рисуем тени, отметки юнитов и тд.
3. Рисуем юнитов.
4. Рисуем в буфере трафарета круги там, где стоят юниты.
5. Рисуем строения, деревья и тд.

Такое получится?
Отредактировано: 17.10.07 16:06
#7
Mirage
17.10.07 16:05
0
Тогда дважды рендерить надо. Первый раз рендерим сцену (можно только то, что может закрывать игрока), затем рендерим круг вокруг игрока (и с Z игрока) с STENCILZFAIL установленным в REPLACE. Тогда в стенсиле там, где должна быть дырка будет значение stencil reference.

Хотя можно этот стенсил на след. кадре юзать, тогда дырка будет на кадр запаздывать.:)
Отредактировано: 17.10.07 16:07
#8
17.10.07 17:02
0
Хмм.. а как делают например панельки для игрового интерфейса. Т.е. некая область на экране не рендерится? Гдето я такой пример видел, но не могу найти. Смысл вот в чем, после рендерки юнитов в некоторых метсах не рендерить окружение..
#9
Limited Edition
17.10.07 17:10
0
Цитата(Vga @ Сегодня, 13:13)
[snapback]68080[/snapback]
Спроси автора Total Influence как он делает

у него 2д. здания разбиты на прямоугольные спрайты, у которых альфа рёбер меняется если игрок стоит рядом с ними.
#10
Mirage
17.10.07 17:44
0
Ну чтобы совсем не рендерить тут проблем нет даже без трафарета - нарисовал объект нужной формы в Z перед рендером сцены и z-тест не даст чему-то нарисоваться поверх. Так отражения делали раньше (и я в том числе).
Проблема в том, чтобы не рисовалось именно то, что закрывает игрока, а то, что позади него при этом рисовалось.
#11
17.10.07 17:58
0
Ну допустим после отрисовки юнитов я знаю их координаты в 3д и в 2д (на экране). Существует какаянить возможность больше не рендерить в определенной области в 3д или БОЛЬШЕ не рендерить в определенной области в 2д? Кроме шейдеров. Не очень хочется их сюда приплетать..

Т.е. я имею ввиду что после рендерки юнитов я могу сделать некую маску на весь экран с указанием где прорисовывать последующую рендерку а где нет.
Отредактировано: 17.10.07 18:00
#12
Mirage
17.10.07 19:01
0
Собственно для этого буфер трафарета и существует.
Ну и трюк с z-тестом тоже сработает.
Только дырка-то сквозная получится, если с одним проходом.
#13
17.10.07 20:08
0
Да.. сквозная.. Вот чорт :)

Короче, щас придёт дедушка XProger и всех научит
Отредактировано: 17.10.07 20:55
#14
Dan
The One
18.10.07 04:38
0
Проэцируй текстуру с альфа каналом на все объекты которые ближе к камере чем игрок, легко, без шейдеров и бдет работать идеально.
#15
18.10.07 13:36
0
Цитата
Проэцируй текстуру с альфа каналом на все объекты которые ближе к камере чем игрок, легко, без шейдеров и бдет работать идеально.

Не совсем понял..
#16
Dan
The One
18.10.07 15:52
0
ну я полагаю ты знаешь как проэцировать текстурные координаты, так?
нужно всего лишь умножить альфа канал этой текстуры на альфа канал объекта в котором нужно сделать дырку (это в том случае если у объекта есть прозрачные места, иначе можно просто присвоить ему альфа канал проэцированой текстуры), вот собственно и всё.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}