forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

Mr_F_ 14.09.2014 18:54

Ответ: [TrueHorror] - разработка
 
Цитата:

* Вот на 12 слайде, я правильно понимаю что слева - формула упаковывания, а справа распаковывания нормалей?
там такой же стереографик, как и здесь:
http://aras-p.info/texts/CompactNormalStorage.html

алсо: на самом деле не высшего качества паковка. в том же юнити даже белая сфера с директ лайтом даёт артифакты. когда всё затекстурено и сложная геометрия, не так очевидно.
но если нужно гуд качество, я б выбрал best-fit normals, их в крайзисе2 юзали.

Samodelkin 14.09.2014 18:59

Ответ: [TrueHorror] - разработка
 
mr.DIMAS, а у тебя как?

mr.DIMAS 14.09.2014 19:09

Ответ: [TrueHorror] - разработка
 
А я как обычно леплю как хочу.

RGBA8 диффуз, собственнаясветимость( тупо яркость 0..1 для амбиент пасса )
RGBA8 нормали
RGBA8 глубина

Поясню почему глубина в таком говне. Потому что на даче я сидел с ноутом в котором GMA 3150( только хдр текстуры( A2R10G10B10 ) и RGBA8 ) ну вот так вот. В первом проходе запаковываю глубину в 4 байта. Во вторых проходах распаковываю глубину из 4 байтов( код есть у... Борескова :-D )
С макросом USE_R32F_DEPTH можно перекомплить под флоат текстуру. Кароч все через жопу и целый 1 байт не используется.

Mr_F_ 14.09.2014 19:16

Ответ: [TrueHorror] - разработка
 
Цитата:

RGBA8 нормали
вот прям тупо normal*0.5+0.5 в RGB сейвишь? убого же будет, на спекуляре так особенно

Samodelkin 14.09.2014 19:21

Ответ: [TrueHorror] - разработка
 
Суть best-fit normals в том что они все возможные значения умещающиеся в объем куба распределили по площади сферы и записали в кубмэпу?
Если там качество в более чем в 50 раз лучше, зачем тогда в Crysis 3 обратно стереографик вернули?

mr.DIMAS 14.09.2014 19:23

Ответ: [TrueHorror] - разработка
 
Цитата:

вот прям тупо normal*0.5+0.5 в RGB сейвишь? убого же будет, на спекуляре так особенно
да так, я не замечал каких то багов на спекуляре. а че вообще не так? как ты знаешь я в графонии не спец, так что поясни

Samodelkin 14.09.2014 19:30

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286639)
да так, я не замечал каких то багов на спекуляре. а че вообще не так? как ты знаешь я в графонии не спец, так что поясни

Вот тут разница показана -- там это квантизацией называется.

mr.DIMAS 14.09.2014 19:44

Ответ: [TrueHorror] - разработка
 
А мне норм, я не кукурузис делаю.

Mr_F_ 14.09.2014 19:49

Ответ: [TrueHorror] - разработка
 
Цитата:

Суть best-fit normals в том что они все возможные значения умещающиеся в объем куба распределили по площади сферы и записали в кубмэпу?
суть в том, что одни лишь нормализованные значения при сувании в 3 байта не охватывают весь спектр возможных комбинаций, и они хитро денормализуют в разной степени нормали (ну да, типа как в кубе), чтобы занять всю точность.
вместо кубмапы 2д текстурой можно обходиться, т.к. кубмапа там имеет повторы/симметрию.

Цитата:

а че вообще не так?
мелкие узкие блики попробуй на шарик накинуть

Samodelkin 14.09.2014 20:41

Ответ: [TrueHorror] - разработка
 
Ок.
Короче, чтобы было ещё понятнее, если ещё кто-то будет читать данный тред:
RGB - это 3 канала по 8 бит.
8 бит могут принимать 256 различных значений.
3 канала по 8 бит это 256х256х256=16777216 различных комбинаций.
Нормализованная нормаль - это 3d вектор длиной 1.0f.
Если принять во внимание всё множество положений такого вектора в пространстве, получится сфера с радиусом 1.0f.
Если такую сферу вставить в куб такого же размера, например из вокселей, которых 256х256х256 в кубе, и превратить абстрактную сферу в дискретную сферу из вокселей, то мы обнаружим что используется ~289880 вокселей, что составляет всего 1.73% от всех возможных значений.
И в общем все эти техники упаковки нормалей сделаны для того чтобы по максимуму использовать все возможные значения умещающихся в 24 бита.

Mr_F_ 14.09.2014 20:50

Ответ: [TrueHorror] - разработка
 
ну не все, стереографик и прочее что у Араса на страничке они вообще про впихивание аж в 2 байта, ну а про бестфит всё правильно сказал.

Samodelkin 15.09.2014 23:54

Ответ: [TrueHorror] - разработка
 
А в каком пространстве лучше сохранять нормали в G-Buffer и в каком дальше считать, например SSAO?
В доках Crytek в world space делают, а в других примерах через view space.
Или тут больше от упаковки зависит, а дальше уже переводить для расчёта как удобней?

//=============================

D3DXCreateEffectFromFile создаёт буфер только в случае ошибки, а иногда там и предупреждения есть, которые в случае отсутствия ошибок не выводятся. Можно буфер другим способом получить?

Mr_F_ 16.09.2014 00:11

Ответ: [TrueHorror] - разработка
 
я делаю в ворлдспейс и бестфита на него хватает, но по идее вью спейс должен лучше точность распределять вроде.

Samodelkin 16.09.2014 18:13

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Прошлый вариант SSAO оказался не очень удачный - чтобы обходиться одним буфером глубины требуется ставить пару костылей, связанных с самозатенением поверхности. Возможно если еще поиграть с настройками, можно сделать что-то более менее вменяемое.
С другой стороны, раз сейчас всюду стали использовать G-Buffer и там обычно всегда есть нормали, то можно их использовать и для SSAO.

Поэтому я добавил G-Buffer.
Пока использую обычные regular normals в world space, которые помещаются в A2R10G10B10, на самом деле для SSAO этого достаточно, но мне понравился способ упаковки best fit normals и думаю затем его сделать и использовать A8R8G8B8, где альфа уже будет свободна для чего-нибудь другого, тем более что в составе полноценного рендера нормали пригодятся для тех же бликов и отражений, где точность более критична.
Еще, как выше указал Mr_F_, надо попробовать посчитать во view space и сравнить оба варианта.
Для глубины сейчас используется R32F.

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

Вложение 20902

На скрине видно что вокруг носа чайника чуть более светлый ореол. Видимо связано с тем, что формула, которая должна уменьшать эффект затенения с расстоянием, начинает его чрезмерно уменьшать в сторону увеличения яркости - тут нужно посмотреть какие есть варианты в реализациях SSAO из других источников.

Кстати, на скрине можно видеть 527 FPS, для 1080p вроде неплохо. Последующее сглаживание снизит этот показатель, но остаётся возможность оптимизации самого SSAO шейдера и G-Buffer'а, которые надеюсь смогут компенсировать потери на сглаживании.


Ну и ещё стоит упомянуть что от кодов Борескова тут практически ничего не осталось, если бы у меня не было некоторого опыта в шейдерах (а статья рассчитана на новичков), шейдер по статье невозможно было бы повторить.

mr.DIMAS 16.09.2014 20:45

Ответ: [TrueHorror] - разработка
 
Слух, поделишься шейдером? А то если я опять в графоний уйду то там и останусь на месяц другой.

По игре. На втором уровне в шахте сделал первую "головоломку" - придется самому собирать взрывное устройство чтобы взорвать стену. На третьем уровне нужно найти 3 предохранителя чтобы запитать всю электронику. В итоге инвентарь используется по полной. Также фонарик теперь разряжается( воу, воу я знаю что это банально ), а так как он работает от топливного элемента то заряжается либо спиртягой либо водкой :-D. Клюква во всей красе, но я не стал добавлять "банальные" батарейки ибо откуда им взяться в... ну спойлерить я не буду.

Сейчас много времени уходит на ̶у̶н̶и̶в̶е̶р̶ медию, модельки в основном( а к ним развертки, текстуры ) а так как опыта просто мало то пока сделал какой-то сраный стеллаж и коробку :-D.

Samodelkin 16.09.2014 21:14

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286745)
Слух, поделишься шейдером? А то если я опять в графоний уйду то там и останусь на месяц другой.

Да. Надо только доделать и прокомментировать его.

tirarex 16.09.2014 21:17

Ответ: [TrueHorror] - разработка
 
Как и где (по каким туториалам) делал карту ? Нравится мне твой стиль если честно !

mr.DIMAS 16.09.2014 21:48

Ответ: [TrueHorror] - разработка
 
По мне так карты не айс. Делал по впечатлениям от фоток здесь и фоток заброшенных зданий. Из туторов прочел только тутор ARENSHI по моделированию ландшафта. Текстурировал вообще по тупому. Сначала по фейсам накладывал материалы и затем UVWMap -> Box и там изменял размеры бокса в итоге текстуры накладываются довольно прилично, главное сохранять этот модификатор в стеке и тогда текстуры всегда( ну почти ) будут хорошо ложиться.

Если кто подскажет метод текстурирования лучше то буду премного благодарен.

Samodelkin 17.09.2014 00:47

Ответ: [TrueHorror] - разработка
 
Вложений: 3
Когда делал размытие по глубине, абсолютно случайно получился мультяшный шейдер :)

Вложение 20903

Как уже можно догадаться по скрину, в размытии я просто тестирую разницу глубины (переведенную в world space, чтобы от положений zfar znear clip planes'ов результат не изменялся) и если глубина меньше порогового значения -- пиксели размываются.
Алгоритм взял из головы, опять же нужно посмотреть -- наверняка есть более быстрые варианты.

Вот что в итоге получилось. Также вокруг носика чайника уже нет белого ореола.

Вложение 20904Вложение 20905

Теперь нужно приводить коды в порядок.

ARA 17.09.2014 02:12

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286749)
Если кто подскажет метод текстурирования лучше то буду премного благодарен.

Unwrap UVW -> Peel

mr.DIMAS 17.09.2014 19:20

Ответ: [TrueHorror] - разработка
 
2ARENSHI, у меня в максе( 2012 ) для меша уровня включен бэкфейскуллинг( Direct3D ), но когда вьюпорт передвигаешь( или любой объект ) то куллинг как бы исчезает и нелицевые грани черными становятся и непрозрачными, но все нормально когда вьюпорт не трогаешь. это баг или что? меня заебало это мельтяшение перед глазами. как это лечить?

ARA 17.09.2014 20:37

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286782)
2ARENSHI, у меня в максе( 2012 ) для меша уровня включен бэкфейскуллинг( Direct3D ), но когда вьюпорт передвигаешь( или любой объект ) то куллинг как бы исчезает и нелицевые грани черными становятся и непрозрачными, но все нормально когда вьюпорт не трогаешь. это баг или что? меня заебало это мельтяшение перед глазами. как это лечить?

Можно попробовать врубить шейдед вьюпорт.
http://f5.s.qip.ru/18HME8JBQ.jpg

Можно попробовать установить сервиспак для 2012 макса отсудава
http://knowledge.autodesk.com/suppor...t=score&page=1

А можно поставить 2014 версию. Работаю в ней. Вроде стабильнячок.

mr.DIMAS 17.09.2014 20:56

Ответ: [TrueHorror] - разработка
 
Попробовал сменить рендер на Nitrous и все этот баг исчез. Но сервис пак поставлю обязательно.

mr.DIMAS 17.09.2014 22:05

Ответ: [TrueHorror] - разработка
 
И еще вопрос про Peel. Сегодня сделал несколько объектов( в основном трубы ) и развертки к ним делал Pelt'ом, получилось годно, но как я понял, для статичной геометрии( ну сам меш уровня ) этот метод не годится?

ARA 17.09.2014 22:43

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286794)
И еще вопрос про Peel. Сегодня сделал несколько объектов( в основном трубы ) и развертки к ним делал Pelt'ом, получилось годно, но как я понял, для статичной геометрии( ну сам меш уровня ) этот метод не годится?

Очень даже годится для всяких пещер и террайнов.
Процесс будет приблизительно такой:
Отмечаем шов на дне пещеры http://f6.s.qip.ru/18HME8JBX.jpg
выделяем все полигоны и жмакаем на квик пил http://f5.s.qip.ru/18HME8JBY.jpg
Кстати, если результат пила не удовлетворит, можно пробовать разные виды релаксов.http://f6.s.qip.ru/18HME8JBZ.jpg (спасибо АВТОМАТу за находку)
Все эти релаксы и пилы идеальны для органики. А бокс, планар и цилиндрик маппинг для хардэджевых объектов :)

mr.DIMAS 17.09.2014 23:00

Ответ: [TrueHorror] - разработка
 
А как труЪ пацаны делают такие объекты как протянутые по стенкам провода и прочую длинную мишуру? Сейчас я делаю так: создаю цилиндр лоуполи, обрубаю верхушки и начинаю тягать контур( 3 ) торца перемещением\вращением с зажатым шифтом, то бишь просто тяну и там где надо поворачиваю. Получается довольно быстро но может есть какой-то секрет?

mr.DIMAS 17.09.2014 23:21

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Буду выкладывать скриншоты с уровней над которыми работаю. Третий уровень.


Samodelkin 17.09.2014 23:22

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286799)
А как труЪ пацаны делают такие объекты как протянутые по стенкам провода и прочую длинную мишуру? Сейчас я делаю так: создаю цилиндр лоуполи, обрубаю верхушки и начинаю тягать контур( 3 ) торца перемещением\вращением с зажатым шифтом, то бишь просто тяну и там где надо поворачиваю. Получается довольно быстро но может есть какой-то секрет?

Тонкие провода (по рекомендации Mr_F_) можно рисовать шейдером.
http://forum.boolean.name/showpost.p...6&postcount=20

ARA 17.09.2014 23:37

Ответ: [TrueHorror] - разработка
 
Трубы и провода рисую сплайнами. В настройках сплайна ставлю галочку для для генерации ювв и отображения сплайна в виде трубы.

tirarex 17.09.2014 23:59

Ответ: [TrueHorror] - разработка
 
Где такие нормали делал ?

mr.DIMAS 18.09.2014 00:05

Ответ: [TrueHorror] - разработка
 
NVidia Texture Tools

Samodelkin 18.09.2014 01:50

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от tirarex (Сообщение 286809)
Где такие нормали делал ?

Вот тут ещё есть всякие.

2mr.DIMAS, а у тебя шейдеры в коде прямо? У тебя отдельные шейдеры или эффекты?

mr.DIMAS 18.09.2014 02:02

Ответ: [TrueHorror] - разработка
 
Прямо в коде, когда буду точно уверен что не буду изменять шейдеры,то откомпилю в натив и положу в соответствующую папку. А пока компилятся при запуске.

Samodelkin 18.09.2014 02:14

Ответ: [TrueHorror] - разработка
 
Ну я SSAO в эффекте делаю, так что распарсишь там по шейдерам сам тогда.

mr.DIMAS 18.09.2014 02:26

Ответ: [TrueHorror] - разработка
 
Ага, без проблем.

mr.DIMAS 18.09.2014 23:10

Ответ: [TrueHorror] - разработка
 
В графонии вылез какой-то трудно уловимый баг.

Кароч суть в том что сильно тормозит

IDirect3DDevice9->Present(0,0,0,0)

я погуглил с чем это может быть связано, но так и не нашел ответа. Причем тормоза Present'a прямо пропорциональны разрешению - чем больше тем больше тормоза. Я вообще не могу вкурить в чем косяк. Есть мысли?

Samodelkin 19.09.2014 00:17

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 286894)
В графонии вылез какой-то трудно уловимый баг.

Кароч суть в том что сильно тормозит

IDirect3DDevice9->Present(0,0,0,0)

я погуглил с чем это может быть связано, но так и не нашел ответа. Причем тормоза Present'a прямо пропорциональны разрешению - чем больше тем больше тормоза. Я вообще не могу вкурить в чем косяк. Есть мысли?

Может видеопамять кончилась?

//=============================================

У меня тоже вопрос по шейдеру:

Допустим если я упаковываю глубину таким образом:
(Здесь input.z - это координата во view space)
Код:

output.depth = float4( ( input.z - nearZPlane ) / ( farZPlane - nearZPlane ), 1.0f, 1.0f, 1.0f );
То восстановить координаты точки во view space можно таким образом:
(texCoord - это текстурные координаты экранного квада)
Код:

const float vz = tex2D( smpDepth, texCoord ).r * ( farZPlane - nearZPlane ) + nearZPlane;
const float vx = ( texCoord.x * 2.0f - 1.0f ) * tan( scrFovX / 2.0f ) * vz;
const float vy = -( texCoord.y * 2.0f - 1.0f ) * tan( scrFovY / 2.0f ) * vz;

То есть таким образом я не использую умножение на матрицу проекции и обратную матрицу проекции при извлечении.
Все верно?

mr.DIMAS 19.09.2014 01:24

Ответ: [TrueHorror] - разработка
 
Ну вроде да. Но два тангенса разве не будут жрать столько же сколько умножение на матрицу?

Насчет моего вопроса - я сам дурак, забыл выключить альфатест перед вторым проходом дефереда( и все из-за рефакторинга ).

Samodelkin 19.09.2014 01:46

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Цитата:

Сообщение от mr.DIMAS (Сообщение 286898)
Ну вроде да. Но два тангенса разве не будут жрать столько же сколько умножение на матрицу?

Видимо будут. Но всё-равно важно понять, правильно считает или нет. Потому что после изменения SSAO стал немного другим, я вот ищу на что ещё могли повлиять эти изменения.

Из последних изменений:
* Поменял упаковку в G-Buffer с world space на view space, и последующие вычисления во view space'е идут.
* Раньше характер затенения зависел от расстановки Z плоскостей, теперь не зависит, но вот чуть-чуть качество испортилось. С матрицами тогда тоже попробую.

Вот видно что затенения какие то полосатые стали :crazy:

Вложение 20910

radiobutton 19.09.2014 10:48

Ответ: [TrueHorror] - разработка
 
А че по сюжету?)

mr.DIMAS 19.09.2014 17:01

Ответ: [TrueHorror] - разработка
 
А где-то позади был пост про сюжет. Я его и не менял.

Вкратце:

Играем за бывшего шахтера. Он с компашкой занимается разведкой заброшенных шахт на наличие драгоценных металлов. В одну из таких они и отправились. В силу обстоятельств главный герой прибывает на место на неделю позже остальных. Ну и дальше все в игре раскрывается по запискам.

Менять сюжет не вижу смысла, ибо под него все и заточено.

tirarex 19.09.2014 18:27

Ответ: [TrueHorror] - разработка
 

Samodelkin 19.09.2014 22:16

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin
С матрицами тогда тоже попробую.

Попробовал - работает.
Исправил полосатость.
Добавил ограничения по дистанции -- теперь вблизи пятно затенения не будет разрастаться, а в далеке затенение будет исчезать.
Немного оптимизировал.

ssao_v01.zip

fx/ssao.fx - сам эффект.
src/* - исходники той штуки на которой тестируется эффект.
bin - там рабочие *.exe debug и release сборки.
bat - батники для сборки (я использовал gcc).
x/rot_texture.jpg - нужная для эффекта текстура, которая рэндомно отклоняет лучи.

В эффекте 4 прохода: G-Buffer, SSAO и два gauss-blur'а по горизонтали и вертикали.

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

mr.DIMAS 19.09.2014 23:17

Ответ: [TrueHorror] - разработка
 
На самом деле я уже пожалел о своем выборе. Но мне ничего не мешает прикрутить сасао через эффект. Сейчас я в основном занимаюсь ̶у̶н̶и̶в̶е̶р̶о̶м̶ моделированием и текстурированием, так что в движок пока не лезу. Второй уровень( шахта ) и третий уровень( заброшенный подземный научный центр ) стали больше на 50%. Второй доделан полностью, третий на 90%. Четвертый ( канализация :-D) сделал геометрию на 50 процентов. Пятый( снова шахта, но больше ) только на бумаге, и последний( лес ) еще даже не зарисовал. Кароч вот как-то так.

Samodelkin 23.09.2014 00:33

Ответ: [TrueHorror] - разработка
 
А что лучше делать DirectInput или XInput?
Чуток почитал MSDN, в целом суть такая что XBox 360 контроллеры и другие новые имеют лучшую совместимость с XInput, но остались еще legacy устройства, которым нужен DirectInput.
Сам я пока пользовался только DirectInput, и в случае клавиатуры и мыши, которые представляются как виртуальные унифицированные устройства, ещё ничего, но вот когда дело доходит до геймпадов и других устройств, с которыми нужно напрямую работать -- в коде какой то ужас начинается: чтобы изменить один параметр, нужно запускать перебор объектов, передавать в функцию перебора каллбек, в каллбек передавать указатели с контектом и параметрами и т.д. и т.п.
В XInput же обещают всё намного удобней и проще.
Вот.

mr.DIMAS 23.09.2014 01:35

Ответ: [TrueHorror] - разработка
 
Я на сосноли\соснольщиков с геймпадами не ориентируюсь поэтому DirectInput'a хватает. хз вообще что взять, надо XInput поковырять и тогда поймешь.

Samodelkin 23.09.2014 02:40

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 287162)
Я на сосноли\соснольщиков с геймпадами не ориентируюсь поэтому DirectInput'a хватает. хз вообще что взять, надо XInput поковырять и тогда поймешь.

У меня геймпад на ПК есть.
На самом деле он удобен не только для игр со сложным управлением, а просто хотя бы чтобы сидеть на диване или в кресле.
Даже та же консоль -- это просто железка: тебе никто не мешает делать для неё такие же игры как для ПК.
Тем более что скоро Стим-Машины и их аналоги появятся.

Samodelkin 23.09.2014 18:48

Ответ: [TrueHorror] - разработка
 
Посмотрел XInput -- он сделан для Xbox 360 контроллеров и прочих совместимых штук. Клавиатуры и мыши там нет. Но работа с контроллером действительно намного удобней. Так же поддерживаются дополнительные возможности, такие как вибрация, управление гарнитурами подключёнными к контроллеру, управление беспроводными контроллерами и т.д. Остаётся выяснить какое количество несовместимых с XInput контроллеров сейчас существует и делать вывод о целесообразности использовать DirectInput рядом с XInput (а так делать можно).

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

Ещё я видел что в Windows 8 (которая поддерживает концепцию "одна система на всех окнах") используют другие методы ввода, учитывающие как мышь, так и сенсорный экран и другие устройства ввода.

Nuprahtor 24.09.2014 01:03

Ответ: [TrueHorror] - разработка
 
Делай для XInput, для директинпута есть тулзы типа https://code.google.com/p/x360ce/ , которые позволяют назначить кнопки и оси любого джойстика так, чтобы игра думала что это XInput устройство

Samodelkin 24.09.2014 01:25

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Nuprahtor (Сообщение 287201)
Делай для XInput, для директинпута есть тулзы типа https://code.google.com/p/x360ce/ , которые позволяют назначить кнопки и оси любого джойстика так, чтобы игра думала что это XInput устройство

А как обстоят дела с контроллерами в Linux?

mr.DIMAS 24.09.2014 15:24

Ответ: [TrueHorror] - разработка
 
Вложений: 1
У себя в движке использую свою корявую библу. Тащит мышь, клаву. Есть поддержка KeyUp, KeyDown, KeyHit, MouseDown, MouseUp, MouseHit, позиция мыши относительно начала клиентской области окна. Мне хватает с головой.

Samodelkin 24.09.2014 19:56

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 287211)
У себя в движке использую свою корявую библу. Тащит мышь, клаву. Есть поддержка KeyUp, KeyDown, KeyHit, MouseDown, MouseUp, MouseHit, позиция мыши относительно начала клиентской области окна. Мне хватает с головой.

И ты это делал поверх DirectInput? А как дела обстоят с языками? Например если я русский текст ввожу мне самому нужно преобразовывать? Всё тоже самое есть в сообщениях Windows, в том числе и языковые локализации. Короче мне кажется это велосипед, DirectInput и XInput нужны для аналоговых устройств, типа джойстиков, рулей, педалей, возможно мыши.
Хотя я сам тоже через DirectInput всё сделал, но вот сейчас буду переделывать.

//================================================== ======

К тому же у тебя в MagicInput обращение к клавиатуре через GetDeviceState -- при низком FPS у тебя нажатия будут выпадать или будет неправильная очередность при быстром наборе текста. Через состояние устройства можно опрашивать только аналоговые устройства (мышь, рули, контроллеры и т.п.)

mr.DIMAS 30.09.2014 19:32

Ответ: [TrueHorror] - разработка
 
Долго отдыхал от игродела. Играл в дарксоулс 2. Но настало время вернуться.

Прошел свою игрушку с не затуманенными мозгами и понял, что очень мало интерактива в игре. Поэтому добавил разные интерактивные объекты:
1) Лестницы
2) Двери( есть и запертые двери, но ко всем есть ключи - ибо это не сайлент хилл :-D )
3) Вентиляционные ходы( общее название, на самом деле можно будет ползать и в узких проходах - например в трещине в скале )

По лестницами можно лазать вверх-вниз. По вентиляционным ходам можно ползать туда-сюда.

Вообще полезно отдыхать от геймдева - сразу свежие мысли в голову приходят.

mr.DIMAS 02.10.2014 16:13

Ответ: [TrueHorror] - разработка
 
Как на ваш взгляд: стоит ли делать видимым тело персонажа, и соответственно анимировать его для разных действий - типа того, как сделано в Outlast?

P.S. Переехал на C++11 и Bullet Physics 2.81. Сделал в движке строгую типизацию - до этого все хендлы объектов из движка передавались в виде указателя на объект reinterpret_cast к int. В итоге появлялись трудно уловимые баги.

Samodelkin 02.10.2014 21:05

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 287580)
Как на ваш взгляд: стоит ли делать видимым тело персонажа, и соответственно анимировать его для разных действий - типа того, как сделано в Outlast?

Достаточно анимировать руки и движения камеры для разных действий.
Я думаю пока лучше экономить.

Цитата:

P.S. Переехал на C++11 и Bullet Physics 2.81. Сделал в движке строгую типизацию - до этого все хендлы объектов из движка передавались в виде указателя на объект reinterpret_cast к int. В итоге появлялись трудно уловимые баги.
MSVS 2013 не до конца совместим, но кодить на С++11 в целом можно.
Еще там какие-то расхождения со стандартом в ексепшонах, там нет ключевого слова noexcept, вместо него throw(), хотя в стандарте 98 throw() означает любое исключение, а в С++11 писать throw считается устаревшим -- достаточно только noexcept, таким образом компилятор не будет генерировать дополнительный код для перехвата и сделает программу быстрей, однако в std есть много того что кидает исключения, поэтому где попало noexcept ставить нельзя.

mr.DIMAS 03.10.2014 14:32

Ответ: [TrueHorror] - разработка
 
Цитата:

MSVS 2013 не до конца совместим
Ну я вообще на 2012 студии. Но поддерживаемых фич мне достаточно. Чего только стоит for( auto smth : something ) { } .

Samodelkin 03.10.2014 18:25

Ответ: [TrueHorror] - разработка
 
Да С++11 это почти новый язык, если будешь только фичи добавлять с существующий код -- не раскроешь весь потенциал.
Страуструп в 4 издании говорит что нужно архитектурно новые подходы делать, тогда новые фичи будут как можно лучше ложиться в общий контекст задуманного.

Вообще из своей практики еще могу добавить:
override -- удобно помечать виртуальные функции, чтобы случайно при опечатке не создать похожую, но не виртуальную функцию. Компилятор скажет что такой функции в базовом классе нет.
final -- помечать класс что он финальный, в этом случае можно не делать деструктор virtual (обычно делали, чтобы не забыть когда начнешь наследовать), теперь если попытаешься наследовать то нужно будет убрать final, и сразу автоматически это напоминает проверить деструктор на virtual.
списки инициализации -- теперь переменные рекомендуется инициализировать вот так:
int a { 10 };
потому что у списков инициализации более строгая типизация, и например в данном случае:
char a { 257 };
будет ошибка, и ты не накосячишь с переполнением значения.
К тому же списки инициализаций напрямую инициализируют переменную без промежуточных присваиваний.
Тоже относиться к классам.
Также полезны variadic templates -- они заменяют собой функции с переменным числом аргументов. Не часто, но кое-где я нашел им применение.
Ексепшены стали удобней и быстрее.
Например можно оформить конструктор так:
B::B( void ) try : A() { //code } catch ( const except& ex ) { //deinit throw; }
Таким образом мы в случае неудачи восстанавливаем состояние объекта локально, затем передаем ексепшен вызывающему коду, для более глобальных действий. Под try попадает также и конструктор базового класса.

Еще в классах можно создавать конструкторы перемещения и операторы присваивания с перемещением -- однако я пока не нашел им широкого применения.
Ещё, раньше чтобы скрыть конструктор копирования и оператор присваивания (обычные) не писали их тело, таким образом компилятор выдавал ошибку компиляции, теперь же можно помечать такие функции A( const A& a ) = delete;
Лямбда местами удобно использовать, например при обобщении кода внутри функций.

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

Вот но в общем если относиться к С++11 только как к дополнительным фичам, не получится раскрыть его возможности полностью.

mr.DIMAS 03.10.2014 20:44

Ответ: [TrueHorror] - разработка
 
Эх, открыл бы я для себя C++11 раньше, в начале написания движка, то архитектурно он был бы другим нежели сейчас. А так мне только фичи можно использовать, ибо архитектура уже есть и каждое ее изменение проходит болезненно. Когда доделаю игру, тогда вполне возможно начнется глобальный рефакторинг движка с учетом нового стандарта.

Samodelkin 03.10.2014 22:14

Ответ: [TrueHorror] - разработка
 
Можно разделить движок на отдельные модули, так чтобы циклически производить рефакторинг и модернизацию каждого, в относительно короткий по времени цикл.

Стараться держать общий объем кода в пределах своих возможностей, чтобы не терять контроля и гибкости разработки.
Одним словом не делать "на века", а с вероятностью что может через месяц-два придется заменить/переписать/модернизировать.
Таким образом стараться минимизировать кол-во своего кода, пользоваться функционалом других библиотек, убирать устаревшие или "запасные" возможности, которыми на вряд ли будут пользоваться.

Я например задаю себе вопрос, если гипотетически сурцы исчезнут, за сколько я могу с нуля восстановить коды движка.
Если в пределах 2-3 месяцев, значит объем кодов движка в целом удовлетворяет моим возможностям.

В целом есть много способов улучшать и увеличивать возможности движка, без увеличения объёма исходного кода.

mr.DIMAS 05.10.2014 17:33

Ответ: [TrueHorror] - разработка
 
Вложений: 4
Улучшаю существующие уровни. На сей раз это шахта. Добавил крепь на своды и дощатый пол.

mr.DIMAS 06.10.2014 22:23

Ответ: [TrueHorror] - разработка
 
Промежуточная версия. Потестируйте на баги.

http://tempfile.ru/file/3095859

tirarex 07.10.2014 00:03

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Поругалась что OpenAL32 не юзабельна и вылетела.

Upd Удалил и заработало

В общем после начала напряг вид руки и все еще звук зажигалки.
Пошел в тоннель там меня завалило и появилось задание проверить вход , после того как сходил ко входу оно не исчезло.
Вошел в пещеры - фпс как рукой сняло.
Вседозволенность перемещения это не очень крутая фича без подсказок куда идти.
Полез по лестнице - пролез через нее и цеплялся не знай чем (скрины).
После лестницы остались звуки топанья по металу.
Зарядил фонарик керосином.
Добрался до детонатора но он не взрывается ( предполагаю что бомбу надо сделать)

Запустил игру в окне а его двигать нельзя :4to:

ARA 07.10.2014 00:07

Ответ: [TrueHorror] - разработка
 
Энжой йор свой движок :(

mr.DIMAS 07.10.2014 00:44

Ответ: [TrueHorror] - разработка
 
Блин я на восьмерке не тестировал. Вообще хз че может быть. Может поможет удаление OpenAL32.dll?

upd. Поиск сказал что это из-за перемешивания 32 битных и 64 битных библиотек. Хотя я компилировал всё в 32 бита.

И еще - поставь http://www.microsoft.com/ru-ru/downl....aspx?id=30679

Цитата:

Добрался до детонатора но он не взрывается ( предполагаю что бомбу надо сделать)
Да, надо собрать по четыре штуки - детонаторов, взрывчатки и проводов закрепить их на стене и потом взорвать.


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

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