forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Уроки (http://forum.boolean.name/forumdisplay.php?f=145)
-   -   Рендерим оружие (First Persom Shooter) (http://forum.boolean.name/showthread.php?t=13810)

Nuprahtor 01.12.2010 22:45

Рендерим оружие (First Persom Shooter)
 
Можно заметить, что если просто прикрепить модель оружия к камере, то эта модель будет входить в другие модели (clipping), что очень портит картинку. Чтобы этого избежать, нужно создать слой для отрисовки hud`а оружия (заходим Edit -> Project Settings -> Tags)
Назовем его fps_weapon
Всем моделям оружия назначаем этот слой
Затем копируем основную камеру, называем ее fps_camera (ее координаты должны совпадать с основной), меняем ее depth на 1 (в основной камере параметр depth равен 0)
Параметр fps_camera Clear Flags - Depth Only
В Culling Mask fps_camera нужно оставить тот слой, на котором находятся все модели оружия (в нашем случае это fps_weapon)

Теперь оружие будет рендерится отдельной камерой и оно никогда не будет заходить в другие модели :)

pax 01.12.2010 23:19

Ответ: Рендерим оружие (First Persom Shooter)
 
Тема перемещена в подраздел "FAQ и уроки". Думаю ей место здесь.

UPD Я бы еще посоветовал вторую камеру прикрепить к основной.


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

Zer0n 02.12.2010 08:55

Ответ: Рендерим оружие (First Persom Shooter)
 
А вот я юзал вместо тегов Layer'ы :)

Randomize 02.12.2010 09:10

Ответ: Рендерим оружие (First Persom Shooter)
 
Зачем вторую камеру? Какие слои? В юнити что нельзя задать приоритет рендера для определённого объекта?

Zer0n 02.12.2010 09:26

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Randomize (Сообщение 170565)
Зачем вторую камеру? Какие слои? В юнити что нельзя задать приоритет рендера для определённого объекта?

Может на низком уровне и можно. А так - это единственный простой способ. Есть еще способ сдвижения камеры ГГ назад, его практикует Левша с Unity3D.ru - меньше дравколов. Но с ним бывают глюки.. Этот лучше.. :cool:

Randomize 02.12.2010 09:31

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Nuprahtor (Сообщение 170520)
Теперь оружие будет рендерится отдельной камерой и оно никогда не будет заходить в другие модели :)

Я всё правильно понял? То есть источники света не будут взаимодействовать с оружием?

viper86 02.12.2010 11:05

Ответ: Рендерим оружие (First Persom Shooter)
 
Моё мнение, что нужно просто обабатывать поведение оружия и перса, например, когда подходит близко к стене - поднимает оружие. А то получиться, что оружие прошло сквозь забор, а игрок этого даже не заметит.

Zer0n 02.12.2010 11:53

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от viper86 (Сообщение 170571)
Моё мнение, что нужно просто обабатывать поведение оружия и перса, например, когда подходит близко к стене - поднимает оружие. А то получиться, что оружие прошло сквозь забор, а игрок этого даже не заметит.

А если игрок носит оччченнннььь длинную снайперскую винтовку? +, нужно делать дополнительные анимы. Или просто повернуть модель?

viper86 02.12.2010 12:11

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Zer0n (Сообщение 170574)
А если игрок носит оччченнннььь длинную снайперскую винтовку? +, нужно делать дополнительные анимы. Или просто повернуть модель?

Дополнительную аниму поднимания оружия сделать несложно. Я лишь предложил свой способ ;). А у противников как ты будешь рендерить второй камерой оружие? А по моему способу, и ты и противники будут реалистично поднимать оружие если ему что-то мешает.

h1dd3n 02.12.2010 12:14

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Randomize (Сообщение 170565)
Зачем вторую камеру? Какие слои? В юнити что нельзя задать приоритет рендера для определённого объекта?

Цитата:

Сообщение от pax
Есть еще способ - коррекция шейдера оружия, в котором надо указать очередь прорисовки после всей геометрии и прозрачных тел и отключить DepthTest.

имхо самый правильный способ - шейдером.

Zer0n 02.12.2010 12:31

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от viper86 (Сообщение 170576)
Дополнительную аниму поднимания оружия сделать несложно. Я лишь предложил свой способ ;). А у противников как ты будешь рендерить второй камерой оружие? А по моему способу, и ты и противники будут реалистично поднимать оружие если ему что-то мешает.

Ну, тебе легко. А мой максимум - 3Д квадрат Малевича :-D Я программист >>:(
Цитата:

Сообщение от h1dd3n (Сообщение 170577)
имхо самый правильный способ - шейдером.

Полностью согласен

pax 02.12.2010 13:02

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Zer0n (Сообщение 170563)
А вот я юзал вместо тегов Layer'ы :)

Как бы...
Цитата:

Сообщение от Nuprahtor (Сообщение 170520)
Чтобы этого избежать, нужно создать слой для отрисовки hud`а оружия


Randomize 02.12.2010 13:33

Ответ: Рендерим оружие (First Persom Shooter)
 
2 сцены! На саму игру и оружие в руках. Этож надо! Может вы ещё отвёрткой шнурки зашнуровываете? Без обид, но 2 сцены это слишком.

Zer0n 02.12.2010 13:39

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Randomize (Сообщение 170596)
2 сцены! На саму игру и оружие в руках. Этож надо! Может вы ещё отвёрткой шнурки зашнуровываете? Без обид, но 2 сцены это слишком.

o_O Какие еще 2 сцены? Она одна. Всего лишь моделька оружия - не сцена, считается там же

Randomize 02.12.2010 14:46

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Zer0n (Сообщение 170597)
o_O Какие еще 2 сцены? Она одна. Всего лишь моделька оружия - не сцена, считается там же

http://forum.boolean.name/showpost.p...20&postcount=1
2 Камеры едрён батон! 2 раза рендерить надо.

.Squid 02.12.2010 14:49

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Randomize (Сообщение 170606)
http://forum.boolean.name/showpost.p...20&postcount=1
2 Камеры едрён батон! 2 раза рендерить надо.

Вторая камера будет только оружие рендерить. Падение производительности будет ничтожно мало.

Nuprahtor 02.12.2010 14:51

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Я всё правильно понял? То есть источники света не будут взаимодействовать с оружием?
Будут.
Цитата:

Зачем вторую камеру? Какие слои? В юнити что нельзя задать приоритет рендера для определённого объекта?
Слои - специфика юнити. Приоритет рендера наверное в GL задается, в free версии это недоступно.
Этот вариант - самый простой.

Цитата:

Моё мнение, что нужно просто обабатывать поведение оружия и перса, например, когда подходит близко к стене - поднимает оружие. А то получиться, что оружие прошло сквозь забор, а игрок этого даже не заметит.
Все равно оружие не должно проникать в другие модели, без специального рендеринга такое может случится.
Цитата:

имхо самый правильный способ - шейдером.
Наверное да, но я нигде не нашел такого шейдера. Было бы неплохо им поделиться:)

Цитата:

Вторая камера будет только оружие рендерить. Падение производительности будет ничтожно мало.
И это все благодаря слоям
P.S.
Когда я задавал вопрос на юнити.ру о клиппинге оружия, мне посоветовали сделать коллайдер персонажа побольше 0_o
Надеюсь этот способ будет полезен новичкам.

h1dd3n 02.12.2010 18:33

Ответ: Рендерим оружие (First Persom Shooter)
 
Цитата:

Сообщение от Nuprahtor (Сообщение 170608)
Наверное да, но я нигде не нашел такого шейдера. Было бы неплохо им поделиться:).

Цитата:

Сообщение от Nuprahtor (Сообщение 170608)
игде не нашел такого шейдера. Было бы неплохо им поделиться:)

Код:

Shader "Overlay Ex" {
    SubShader {
        Tags {"Queue" = "Overlay" }
        Pass {
         
        }
    }
}

Вместо Overlay может стоять Background, Geometry, Transparent.
Вообщето это просто константы, поэтому можно написать
Код:

Shader "Overlay Ex" {
    SubShader {
        Tags {"Queue" = "Geometry+1" }
        Pass {
           
        }
    }
}

И объект будет отрисовыватья после всех непрозрачных объектов, но перед прозрачными.
Константы такие:
Цитата:

Background is 1000, Geometry is 2000, Transparent is 3000 and Overlay is 4000.

pax 02.12.2010 19:06

Ответ: Рендерим оружие (First Persom Shooter)
 
Еще бы depth test отключить и готовый шейдер для оружия ;)
Цитата:

Сообщение от h1dd3n (Сообщение 170621)
Код:

Shader "Overlay Ex" {
    SubShader {
        Tags {"Queue" = "Geometry+1" }
        ZWrite Off
        ZTest Always
        Pass {
           
        }
    }
}



pie 05.11.2011 11:49

Ответ: Рендерим оружие (First Persom Shooter)
 
А данный шейдер к чему присваивать?

pax 05.11.2011 16:50

Ответ: Рендерим оружие (First Persom Shooter)
 
Применять надо не конкретно данный шейдер, а приведенные настройки шейдера. Выбирай любой подходящий шейдер и измени его для своих целей.
Стандартные шейдеры скачать можно отсюда.


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

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