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)

Wegox 12.02.2014 15:48

Ответ: [TrueHorror] - разработка
 
Меня не слышно!
Музыка и вообще все звуки очень громкие, ну зашкаливает аж...
Я уже писал про это...

Вот новый взгляд, ну тут её тоже не всегда слышно и да! она реально, поднимала мышь вверх над столом...:-D

mr.DIMAS 12.02.2014 17:24

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

Сообщение от ABTOMAT (Сообщение 274194)
Я где-то говорил, что меня беспокоит качество графики? Нет. Я вполне трезво понимаю, что один человек крузис не сделает (и сам такой же). Но можно избавить игрока от ненужных неудобств? Вроде и правда посветлее стало.



А ещё много где:







А почему? Вот ведь правда: там источника света нигде нет, а свет откуда-то есть. Нереалистично блин! Зато рука не тянется к регулировке яркости экрана.

Почему в (почти) всех играх за всю игру персонажи ни разу не посрали? Потому что это не улучшает игру. Почему в шутерах можно перезарядить полупустой магазин и положить остаток, соответственно, в рюкзак, а потом при перезарядке в загашнике только целые магазины (если только патронов достаточно на целый)? Нужно же было патроны пальцами досовать до целого в тот, который вынули! Почему аптечки в играх "съедаются" мгновенно, да ещё и лечат переломы и разрывы тканей (где вообще без хирурга не обойтись) ? Потому что это всё дополнительные неудобства, которые взамен ничего интересного не предлагают. Реализм и нудятина — это разные вещи.

А да кстати ГГ с зажигалкой не боится взрыва метана?



А вот нифига. DeadSpace, например. Отличный хоррор, но там всегда светло (видно, куда идёшь). Как же так? Этого добились хорошей атмосферой, грамотно расположенными припасами, построением битвы.

Так я не понял ты игру оцениваешь по скринам или все-таки скачал и вынес объективное мнение или опять болтаешь попусту?
Цитата:

А да кстати ГГ с зажигалкой не боится взрыва метана?
Метан скапливается обычно в угольных шахтах, но ни как не в шахтах с платиновой рудой - коей и является шахта в игре.

ARA 12.02.2014 17:30

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

mr.DIMAS 12.02.2014 17:42

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

Samodelkin 12.02.2014 23:12

Ответ: [TrueHorror] - разработка
 
Можешь попробовать использовать HDR+Bloom, он будет подгонять экспозицию под низкое освещение пещер, а лампочки на фоне будут выглядеть чрезмерно яркими. Таким образом будет ощущение что в пещере действительно темно, но глаза как будто привыкли, и их слепит яркий свет ламп. Например включил зажигалку, она осветила то что близко, но глаза уже не видят то что дальше 5 метров. Выключил и какое то время нужно для адаптации, затем становится светлее, но не слишком: нужно сбалансировать так чтобы было достаточно комфортно передвигаться, но не слишком ярко чтобы рассматривать детали, иначе функция зажигалки станет бесполезной. Также когда диапазон освещения смещается в самый низ (там где больше всего чувствительность) можно добавить зернистость как пост эффект, такое бывает когда снимаешь на дешевые камеры в темноте, к тому же такой эффект сопутствует хоррорам.

ЗЫ: Посмотри еще Alan Wake - отличный пример работы с объемным светом.

Samodelkin 13.02.2014 00:31

Ответ: [TrueHorror] - разработка
 
2mr.DIMAS
Теперь по игре:

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

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

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

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

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

Стену взорвал, но там еще стена...

На самом деле хорошо, потому что есть большой прогресс. Особо критиковать нет смысла потому что ты и сам видишь что нужно делать.

2Wegox
Да нужно громче, причём значительно, приглуши звук игры, обработай голос чтобы чётче было (дарт вейдера можешь оставить - нормально). И главное то что ты рассказывал и показывал в течении 18 минут можно сократить до 2-х, уважай время тех кто смотрит, иначе они не будут уважать тебя :)

ABTOMAT 13.02.2014 01:08

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

Сообщение от mr.DIMAS (Сообщение 274204)
Так я не понял ты игру оцениваешь по скринам или все-таки скачал и вынес объективное мнение или опять болтаешь попусту?

Я объясняю, почему я качать не стал. Этот вопро был задан в посте №181.
Ты такой смищьной: задаёшь вопросы, а потом тебе не нравятся "неудобные" ответы.

Wegox 13.02.2014 03:28

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

Сообщение от Samodelkin (Сообщение 274235)

2Wegox
Да нужно громче, причём значительно, приглуши звук игры, обработай голос чтобы чётче было (дарт вейдера можешь оставить - нормально). И главное то что ты рассказывал и показывал в течении 18 минут можно сократить до 2-х, уважай время тех кто смотрит, иначе они не будут уважать тебя :)

Вообще видео для автора делал, и не как не думал:4to: что кто-то другой начнёт смотреть(можно же уделить время реальному прохождению) даже нарочно сделал его доступным - только по прямой ссылке.:)

И Я не обзорщик! Не в коем случае, у меня на этом форуме другие цели...

Если уж так фанатеешь с моего творчества, отписывайся о нём там, где этой информации самое место, на моём канале естественно W.E.G.Ox.:crazy:

И не надо писать мне, о очевидном! если голос, не слышно, значит так оно и должно быть!..:-D

mr.DIMAS 13.02.2014 08:59

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

Кстати физические движки плохо работают с плоскими объектами, рекомендуется выставлять пропорциональные размеры по всем осям, или же делать составной объект. По крайне мере так рекомендовали в физиксе, у тебя буллет? - там незнаю есть проблемы с этим или нет. Кстати сам на днях опробовал буллет - хороший двиг, может быть заменю им физикс, потому что у того проблемы с некоторыми компиляторами и средствами разработки отличными от msvs...
С буллетом таких проблем нет. Единственное, что раздражает, так это очень очень долгая линковка release версии - около 20 секунд. И отсутствие динамической линковки( хотя может я криворук и не смог настроить компилер :-D )

mr.DIMAS 14.02.2014 23:48

Ответ: [TrueHorror] - разработка
 
Потихоньку рисую модельки. Модель прожектора - заместо уёбищной модели светильника из первой карты. Текстуры временные. Сразу вопрос к моделлерам - как затекстурить лучше: разверткой или отдельными текстурами на грани( как сейчас )?


Samodelkin 15.02.2014 00:16

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

Сообщение от mr.DIMAS (Сообщение 274366)
Сразу вопрос к моделлерам - как затекстурить лучше: разверткой или отдельными текстурами на грани( как сейчас )?

Отвечу как программер: развертка лучше потому что рисуется в один дроусабсет, без смены текстур.

Цитата:

Сообщение от mr.DIMAS
Единственное, что раздражает, так это очень очень долгая линковка release версии - около 20 секунд.

У меня на mingw линкуется в одну секунду. Сам буллет собирал через тамже через mingw-make, как статическая либа.

ЗЫЖ таршер крут!

mr.DIMAS 14.05.2014 16:19

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Ребятушки, я тут психанул и запилил Deferred Shading. Но вот в чем проблема - при маленьком разрешении все рисуется шустро, с увеличением разрешения начинаются тормоза причем они мало зависят от количества источников света. Для Render Target'ов использую текстуры с форматом D3DFMT_A16B16G16R16F. Причем если взять формат потолще типа D3DFMT_A32B32G32R32F тормозов еще больше - это впринципе понятно - больше прокачиваемый объем данных по шине и через видюху. Деферед делаю по тутору Борескова.

Вот простыня кода дефереда.

http://pastebin.com/TSirNkbe

Как используется

http://pastebin.com/qRXRDr7y

В аттаче демка.

Вопрос - как увеличить производительность?

Mr_F_ 14.05.2014 16:50

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

Для Render Target'ов использую текстуры с форматом D3DFMT_A16B16G16R16F.
жирно очень - в особенности для альбедо не нужно.
заценивай как пакуют гбуффер реалне пацаны: http://www.slideshare.net/TiagoAlexS...sis-3-gdc-2013

-----
в кратце:
positionMap не нужен - достаточно хранить глубину и потом в шейдере восстанавливать из неё позицию.
нормали жмутся в 2.5 8-битных канала.
на альбедо не нужно больше 8 бит - в крайенжине ещё и пакуют в 2 канала мутным способом (но это перебор уже имхо).
также тебе пригодятся reflectivity/glossiness.

у меня сейчас в рабочем проекте вот такой гбуфер:
RGBA8: normals, glossiness, reflectivity
RGBA8: albedo, IOR
R32F: depth
И R11G11B10 хдр текстура, в которую уже ведётся работа с гбуфером.
Из-за многопассовости (лайты складывать в РТ) дефер также может тормозить. Щас курю как круче сделать tiled deferred (ранее уже делал tiled forward с генерацией тайлов на цпу).

tirarex 14.05.2014 19:34

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

mr.DIMAS 14.05.2014 20:41

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Пока наколдовал вот такую штуку

http://pastebin.com/0MT4fJ2f

Глубина в D3DFMT_R32F, Нормали и Диффуз - D3DFMT_A8B8G8R8.

При разрешении 1366х768 было 12 кадров в секунду, сейчас 50. ( фрапс показывает )
При моем разрешении 2560х1440 было 1-2 кадра, стало 15. В общем пока не айс.

И да - на сцене 50 источников света.

В аттаче новая версия.

Как че дальше оптимизировать?

tirarex 14.05.2014 21:02

Ответ: [TrueHorror] - разработка
 
У меня 5-6 кадров при 1336х768 (Мой деферред выдает 35фпс если смотреть на весь свет одновременно при 25 лампах )

mr.DIMAS 14.05.2014 21:11

Ответ: [TrueHorror] - разработка
 
:''((Ну как же так то а? Блин научите меня делать все правильно. :-D

tirarex 14.05.2014 21:16

Ответ: [TrueHorror] - разработка
 
А хрен его знает как правильно , я поглядел разные игры и можно увидеть что в кадре динамического света очень мало (1-10) редко где больше 10 светильников было .

Arton 14.05.2014 22:44

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

Сообщение от tirarex (Сообщение 280757)
А хрен его знает как правильно , я поглядел разные игры и можно увидеть что в кадре динамического света очень мало (1-10) редко где больше 10 светильников было .

Даже меньше чем 10 и в зависимости от антуража.
Например на дневной локации будет только один источник света - солнце.

Те же пещеры (то что я замечал), делают с учётом того что бы в одной части не больше 2-3 источников, остальное скрыто. То бишь из просторной пещеры вошёл в "кишку", дальше опять большое пространство. В каждой такой части и будет не больше 2-3 источников. Свет активен только в той части где игрок, + совмещают с картами освещённости. И ещё дизайн локации, то есть две части пещеры не на одной линии, что бы из одной части нельзя было видеть что в следующей.
По большей части это мои предположения.

mr.DIMAS 15.05.2014 12:20

Ответ: [TrueHorror] - разработка
 
Народ ну чё за ботва. Подкиньте идеек по оптимизации.

Mr_F_ 15.05.2014 12:54

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


А, Ну дак у тебя на каждый лайт фулскрин квад рисуется!
Надо кваду ограничивать зону влияния, иначе тут в любом случае жутчайший овердро.
Известные способы (не мешающие друг другу):
1. Рисовать не фулскрин квад, а квад поменьше, в который вписывается зона влияния лайта. Часто лайты не влияют на весь экран.
2. Рисовать грубый меш по форме зоны влияния лайта (лоуполи сферу для поинта, конус для спота). Рисовать его только в стенсил (не в глубину, не в цвет). Юзать настройки стенсила, как со стенсильными тенями в Depth Fail методе (2 раза не надо только волум рисовать, есть хардварный two-sided stencil):
http://en.wikipedia.org/wiki/Shadow_volume
Это даст тебе помеченные в стенсиле пиксели, куда влияет лайт (где он пересекается со сценой). Дальше рисуешь экранный квад, но настраиваешь стенсил так, чтобы он проявлялся только в помеченых волумом местах. Стенсил тест идёт до выполнения шейдеров.
Это точнее, чем вариант 1, который не учитывает пересечение с збуфером, но вариант 1 тоже не помешает, чтобы сократить число пикселей квада, тестящих стенсил.


---
По мелочам из кода:
Цитата:

vertexShaderPassOne->GetConstantTable()->SetMatrix( g_device, v1View, &view );
vertexShaderPassOne->GetConstantTable()->SetMatrix( g_device, v1Proj, &proj );
vertexShaderPassOne->GetConstantTable()->SetMatrix( g_device, v1World, &world );
Цитата:

pixelShaderPassTwo->GetConstantTable()->SetFloatArray( g_device, p2LightPos, temp, 3 );
pixelShaderPassTwo->GetConstantTable()->SetFloat( g_device, p2LightRange, light->radius );
- многовато лишних действий. много за 1 вызов заливать все матрицы и за 1 все параметры лайта:
SetVertexShaderConstantF
SetPixelShaderConstantF
необязательно по имени брать константы из шейдера, можно замаппить их напрямую в нужные регистры типа
const float4x4 MatWorldViewProj : register(c0);
const float4x4 MatWorld : register(c4);

с# - номера констант, они измеряются в float4, это нативный формат видюшной константы (на самом деле флоаты и флоаты2/3, это все равно неполные флоаты4 или их части).

Но если у тебя там не тысячи объектов, это всё мелочи - просто так удобнее, быстрее, контроллируемее, имхо.

mr.DIMAS 15.05.2014 16:19

Ответ: [TrueHorror] - разработка
 
Спасибо ОГРОМНОЕ! Как сделаю, так сразу отпишусь о результате.

mr.DIMAS 16.05.2014 00:36

Ответ: [TrueHorror] - разработка
 
Вложений: 5
Раньше никогда не работал с буфером трафарета и вот наткнулся на грабли. Вроде все работает как надо - да вот только когда попадаешь в несколько ограничивающих сфер сразу( у меня точечные источники света ) - фпс падает в 2 раза. Причем если источники стоят не пересекаясь между собой - то все норм - фпс 60 ( при разрешении 2560х1440 ). Все норм и при взгляде на всю сцену.

Гляньте код( особенно где трафарет настраивается ) - Mr_F_ я взываю к тебе :-D

http://pastebin.com/FxUaau8D

Демка в аттаче - 60 источников света.

Комменты к скринам: 1 - камера в нескольких ограничивающих сферах одновременно. 2 - там же, взгляд в пол. 3 - вся сцена из далека. 4 - в сцене между источниками света( не попадаю ни в одну ограничивающую сферу )

Mr_F_ 16.05.2014 01:15

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

Гляньте код( особенно где трафарет настраивается ) - Mr_F_ я взываю к тебе
Цитата:

g_device->Clear( 0, 0, D3DCLEAR_STENCIL, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0, 0 );
Clear на каждый лайт не надо делать - это считай тот же фулскрин квад рисовать по филлрейту, медленно.
Вместо этого, когда рисуешь обрезаемый стенсилом квад с шейдингом лайта, ставь ему STENCILPASS = D3DSTENCILOP_ZERO, он тогда автоматически собой затрёт только в нужном месте.

Цитата:

g_device->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS );
g_device->SetRenderState( D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP );
g_device->SetRenderState( D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP );
g_device->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE );

// draw a sphere bounds light into stencil buffer
g_device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
g_device->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, icosphereVertexCount, 0, icosphereFaceCount );

// now stecil buffer contains bounding sphere of the light
g_device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
g_device->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP);
Не то делаешь. Ты, похоже, рисуешь в стенсил шарик и маркируешь его единицей. Естественно, когда ты внутри шарика, он занимает весь экран.
Так ты мог и без стенсила обойтись, а сразу рисовать шарик с шейдером лайта.

А идея со стенсилом в том, чтобы пометить только пиксели, с которыми соприкасается (!) шарик. В которые он въехал. Где intersection с z-буфером. Тогда неважно, если ты внутри шарика. По сути задача получить реальную 1-битную маску конкретно освещения от лайта.

Могу перепутать что-то местами (incr/decr), но вроде суть такова (псевдокод):

TwoSidedStencilMode = TRUE
CullMode = None

StencilFunc = Always
StencilZFail = D3DSTENCILOP_DECR

CCW_StencilFunc = Always
CCW_StencilZFail = D3DSTENCILOP_INCR

Представь, что рисуешь шарик, нанизанный на столб. Где внутри шарика не виден столб - там за фронтфейсами всегда видны бекфейсы.
Где фронтфейсы и бекфейсы не пересекаются с тем, что в збуфере - ничего не меняется (ZFail не вызывается).
Где и те и другие где-то под землёй/в стене - одни делают +1, другие -1, ничего не меняется.
А вот там, где у тебя в шарике столб, только бекфейсы вызовут ZFail, в результате столб внутри шара пометится чем-то отличным от 0.
Дальше рисуешь квад с шейдингом лайта с StencilFunc = NotEqual нулю, получается только этот столб осветится, а не целый шар на экране.

mr.DIMAS 16.05.2014 01:25

Ответ: [TrueHorror] - разработка
 
Тоесть Z-буфер не очищать после первого прохода, только запрещать в него запись. Затем для каждого источника света рисовать шарик и проверять, где он не прошел тест глубины, тогда получим силуэт реально освещенной части объекта, находящийся в буфере трафарета. А затем уже рисуем экранный квад с отсечением по трафарету. Так?

Arton 16.05.2014 01:39

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

Сообщение от Arton (Сообщение 280763)
Даже меньше чем 10 и в зависимости от антуража.
Например на дневной локации будет только один источник света - солнце.

Те же пещеры (то что я замечал), делают с учётом того что бы в одной части не больше 2-3 источников, остальное скрыто. То бишь из просторной пещеры вошёл в "кишку", дальше опять большое пространство. В каждой такой части и будет не больше 2-3 источников. Свет активен только в той части где игрок, + совмещают с картами освещённости. И ещё дизайн локации, то есть две части пещеры не на одной линии, что бы из одной части нельзя было видеть что в следующей.
По большей части это мои предположения.

Добавлю. Пример из Dark Souls 2. На первом скриншоте, несмотря на источник света в тёмном помещение, по логике от предметов должны быть тени, но их нет:


Но стоило зажечь факел, как главным источником света стал он и чудесным образом появились тени:


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

P. S. Судя по всему этот "закон" актуален для всех локаций. В DS нету смены дня и ночи, каждая локация статична, и как правило тёмная, или хотя бы закат :)

P. P. S. На одно локации, в маленькой пещере костёр, он главный источник света и теней, зажёг факел, стало два источника, но тени только от факела в руке персонажа.

mr.DIMAS 16.05.2014 01:39

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

Тоесть Z-буфер не очищать после первого прохода, только запрещать в него запись. Затем для каждого источника света рисовать шарик и проверять, где он не прошел тест глубины, тогда получим силуэт реально освещенной части объекта, находящийся в буфере трафарета. А затем уже рисуем экранный квад с отсечением по трафарету. Так?
Походу реально так.

Вот код
http://pastebin.com/3x732dwj

Работает все очень шустро - в любом месте 60 фпс.

Демка в аттаче ( 60 источников света )

2Mr_F_ Просто огромное спасибо за разъяснения. То чувство, когда пришло прозрение.

Mr_F_ 16.05.2014 01:51

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

Тоесть Z-буфер не очищать после первого прохода, только запрещать в него запись. Затем для каждого источника света рисовать шарик и проверять, где он не прошел тест глубины, тогда получим силуэт реально освещенной части объекта, находящийся в буфере трафарета. А затем уже рисуем экранный квад с отсечением по трафарету. Так?
типа того, только не просто где шарик не прошёл тест глубины, а именно где только одной стороной повернутые фейсы прошли, а другой не прошли - это будет часть именно внутри шарика.

Цитата:

Работает все очень шустро - в любом месте 60 фпс.
ура!

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

mr.DIMAS 16.05.2014 01:57

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

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

LLI.T.A.L.K.E.R. 16.05.2014 02:31

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

tirarex 16.05.2014 14:27

Ответ: [TrueHorror] - разработка
 
Хех , 60фпс , а как такого эффекта добиться ?
С моим деферредом 60 фпс при 10 светильниках :(

Mr_F_ 16.05.2014 14:37

Ответ: [TrueHorror] - разработка
 
на самом деле способ со стенсилом ещё далеко не самый быстрый ;)
на directcompute можно ещё круче наворотить (чем сейчас и занимаюсь)

tirarex 16.05.2014 14:58

Ответ: [TrueHorror] - разработка
 
Как я понимаю там сферы рендерятся ?

Mr_F_ 16.05.2014 15:16

Ответ: [TrueHorror] - разработка
 
выше всё описано.

tirarex 16.05.2014 15:46

Ответ: [TrueHorror] - разработка
 
Эх , често не знаю как нарисовать энтити в стенсл буфере .

Mr_F_ 16.05.2014 16:52

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

mr.DIMAS 17.05.2014 13:42

Ответ: [TrueHorror] - разработка
 
Решил немного оптимизировать рисование шариков света - рисовать своими шейдерами:

Вершинный
Код:

      "float4x4 g_worldViewProjection;\n"

      "float4 main( in float4 position : POSITION0 ) : POSITION0\n"
      "{\n"
      "  return mul( position, g_worldViewProjection );\n"
      "};\n";

Код:

      "float4 main( ) : COLOR0\n"     
      "{\n"
      "  return float4( 1.0, 1.0, 1.0, 1.0 );"
      "};\n";

Так вот если отрисовывать сцену дефолтными шейдерами( то бишь шедерами пайплайна ) - то все норм - освещение выполняется отлично. если же моими простешими - начинается шайтанамана - все пляшет скачет рвется.

Код рендеринга тот же самый - только заменил дефолтные шейдеры на свои и передал матрицу.
В тоже время если включить запись в буфер цвета - там все норм - шарики отрисовываются.
Я что-то упустил в шейдерах? Сижу уже полдня баг ищу.

Mr_F_ 17.05.2014 14:11

Ответ: [TrueHorror] - разработка
 
шейдеры как шейдеры, видимо где-то ещё косяк.

pax 17.05.2014 16:01

Ответ: [TrueHorror] - разработка
 
В буфер глубины пишут?

mr.DIMAS 17.05.2014 16:02

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

В буфер глубины пишут?
Нет, запись в буфер выключена. В буфере сидят данные с первого прохода

-----
ладно вернул как было - задобало разбираться - ибо есть чем заняться.

я так понял, на этот подход с использование буфера трафарета плохо ложаться тени - у нас рисуется область только ограниченная шариком света?

как быть с тенями вообще? если у меня мало поликов на сцене и много точечных источников света, имеет ли смысл использовать stencil shadow volumes?

Mr_F_ 17.05.2014 16:39

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

я так понял, на этот подход с использование буфера трафарета плохо ложаться тени
нет, они никак не связаны

Цитата:

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

тебе на самом деле надо кучу точечных источников с реалтайм тенями? что за игру ты делаешь?

mr.DIMAS 17.05.2014 16:49

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

А для игры, свет с тенями нужен будет только для spot-light'ов ( например фонарик ). Точечные источники прожорливые по теням( это если шадоумапы использовать ) - поэтому их буду использовать для освещения уровня, где тени особо не нужны.

Samodelkin 17.05.2014 17:23

Ответ: [TrueHorror] - разработка
 
Вот здесь есть еще несколько полезных примеров где можно deferred shading применять.

Mr_F_ 17.05.2014 19:59

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

А для игры, свет с тенями нужен будет только для spot-light'ов ( например фонарик ). Точечные источники прожорливые по теням( это если шадоумапы использовать ) - поэтому их буду использовать для освещения уровня, где тени особо не нужны.
ага, ну ты забей на стенсильные лучше - они реально почти нигде не нужны.
недавно я их использовал в проекте с требованиями, похожими на твои - очень простая сцена (мир из кубиков), но десятки лайтов - поинты, споты, и полная динамичность, при этом на сглаживание было пофиг (не реализм ни разу). вот выяснилось, что не так уж и мало даже стенсильные жрут (хоть на экране тени занимают немного, сами волумы реально довольно огромные, и они все дрочат стенсил), пришлось их для говнокомпов со встроенным гпу рендерить в 2 раза меньший РТ и потом через жопу апсемплить, чтобы не палилось.

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

mr.DIMAS 17.05.2014 20:56

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

Еще один затык пришел - как быть с системами частиц? У меня есть и туман - который подвержен освещению и огонь, на который свет не влияет. Как совместить деферед и системы частиц? ( с г-буфером дефереда можно сделать мягкие частицы, поэтому совместить нужно )

ARA 17.05.2014 21:45

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

Сообщение от mr.DIMAS (Сообщение 280993)
Лайтмапы хороши - но блин уже 2014 год на дворе - хочется разнообразия.

Интересно какую альтернативу лайтмапам ты предложишь.:)

pax 17.05.2014 22:23

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

Mr_F_ 17.05.2014 22:43

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

Еще один затык пришел - как быть с системами частиц? У меня есть и туман - который подвержен освещению и огонь, на который свет не влияет. Как совместить деферед и системы частиц? ( с г-буфером дефереда можно сделать мягкие частицы, поэтому совместить нужно )
дефер не совместим с ничем полупрозрачным =P

Цитата:

Лайтмапы хороши - но блин уже 2014 год на дворе
на дворе 2014 - а в плане качества для статики ничего лучше всё ещё не придумали =P

Samodelkin 17.05.2014 22:51

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

Сообщение от mr.DIMAS (Сообщение 280993)
Лайтмапы хороши - но блин уже 2014 год на дворе - хочется разнообразия.

http://www.gamedev.ru/code/articles/...agationVolumes
http://the-witness.net/news/2010/03/...uted-lighting/
и вообще весь раздел engine-tech посмотри.

mr.DIMAS 17.05.2014 23:26

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

дефер не совместим с ничем полупрозрачным =P
ахахах, совсем забыл, а ведь читал об этом и все равно забыл.

сделал отдельным проходом, как сказал pax

Mr_F_ 17.05.2014 23:50

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

LightPropagationVolumes
это годная тема, но:
- стоит дважды (а лучше и ещё несколько раз) подумать, прежде, чем приступать к этому, т.к. реализация непростая, и лайтмапы запечь тупо и быстрее и качественнее может выйти. нужно точно понять, насколько тебе нужно действительно динамическое ги.
- тени от индиректа добавляют нехилой нагрузки - насколько я помню, в релизе крайзиса 2 они отключены, а без них индирект светит сквозь всё.
- всего 4 РГБ коэфициента сферических гармоник юзают крайтеки - это маловато для точного описания дифуза - получается менее выраженная направленность отражённого света, он более со всех сторон лезёт. печь 9 ргб коэфов - непрактично.

дак тут тупо чуваки рендерят радиосити игровым рендером - из каждой точки лайтмапа камеры ставят и фигак.
вариант весёлый конечно, и я так пробовал: http://ndotl.files.wordpress.com/201...5-13-04-37.jpg
но работало оно не быстрее офлайновых запекателей, а то и медленее)
офлайновые запекатели умеют всякие хитрости делать, вроде адаптивности, или ноизом раскидать семплы а потом интерполировать, в упомянутом же случае мы просто херачим регулярной сеткой.
плюс надо учитывать всякие швы на развертке и. т. п... это куда больший гемор, чем кажется.

Samodelkin 18.05.2014 00:36

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

Сообщение от Mr_F_ (Сообщение 281007)
это годная тема, но:
- стоит дважды (а лучше и ещё несколько раз) подумать, прежде, чем приступать к этому, т.к. реализация непростая, и лайтмапы запечь тупо и быстрее и качественнее может выйти. нужно точно понять, насколько тебе нужно действительно динамическое ги.
- тени от индиректа добавляют нехилой нагрузки - насколько я помню, в релизе крайзиса 2 они отключены, а без них индирект светит сквозь всё.
- всего 4 РГБ коэфициента сферических гармоник юзают крайтеки - это маловато для точного описания дифуза - получается менее выраженная направленность отражённого света, он более со всех сторон лезёт. печь 9 ргб коэфов - непрактично.

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

Цитата:

Сообщение от Mr_F_ (Сообщение 281007)
дак тут тупо чуваки рендерят радиосити игровым рендером - из каждой точки лайтмапа камеры ставят и фигак.
вариант весёлый конечно, и я так пробовал: http://ndotl.files.wordpress.com/201...5-13-04-37.jpg
но работало оно не быстрее офлайновых запекателей, а то и медленее)
офлайновые запекатели умеют всякие хитрости делать, вроде адаптивности, или ноизом раскидать семплы а потом интерполировать, в упомянутом же случае мы просто херачим регулярной сеткой.
плюс надо учитывать всякие швы на развертке и. т. п... это куда больший гемор, чем кажется.

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

Вообще это проект Джоната Блоу, который всем известный Braid сделал.
Мне больше их дизайн нравится нежели программирование, но они подробно всё расписывают, что радует.

Mr_F_ 18.05.2014 01:25

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

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

Samodelkin 18.05.2014 01:54

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

Mr_F_ 18.05.2014 02:11

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

mr.DIMAS 18.05.2014 12:09

Ответ: [TrueHorror] - разработка
 
Решил запилить мягкие частицы так как после дефереда есть текстура с данными о глубине. И вот тут затык: как в пиксельном шейдере отрисовки частиц получить координаты текущего фрагмента для выборки из карты глубины? Ведь в D3D9 нет SV_Position - пищаль

Ах, да. Я знаю про семантику VPOS, но мне нужно уложиться в ps_2_0

Mr_F_ 18.05.2014 13:30

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

Ах, да. Я знаю про семантику VPOS, но мне нужно уложиться в ps_2_0
VPOS норм, зачем тебе 2_0? о_0

в любом случае, не забывай, что то, что ты выводишь из вертексного шейдера в POSITION - это не что иное, как позиция точки на экране в диапазоне [-1, 1].
Так что ты легко получаешь экранные текскоорды из них:
ScreenSpaceUV = OUT.Position.xy*0.5+0.5;


-----
также, смещение на пол-пикселя не забудь: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

mr.DIMAS 18.05.2014 18:19

Ответ: [TrueHorror] - разработка
 
Вложений: 2
Сделал. Не уверен что самым лучшим образом, но оно работает.

Вот код:
http://pastebin.com/CKABUej7

Скриншоты - обычные частицы и мягкие.

Mr_F_ 18.05.2014 18:33

Ответ: [TrueHorror] - разработка
 
нормально) хотя я тупо без distance и восстановления позиции делал, на разнице глубин партикла и дептхмапы.

mr.DIMAS 18.05.2014 20:54

Ответ: [TrueHorror] - разработка
 
объясните мне пожалуйста: почему, если не запаковать нормали в отрезок [0;1]( при записи в текстуру ) и не распаковать их впоследствии( второй проход ), свет считается отстойно? это как-то связано с тем что мы пишем в D3DFMT_A8B8G8R8 где на каждую компоненту приходится по 1 байту?

Mr_F_ 18.05.2014 22:20

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

если не запаковать нормали в отрезок [0;1]
Цитата:

и не распаковать их впоследствии
потому что ты тупо выбрасываешь все значения < 0?
в ргба8 хранится по байту на канал (0-255) (в шейдерах выглядит как флоаты 0-1)

mr.DIMAS 18.05.2014 23:28

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

и еще - тени ( шадоумапы ) рисовать отдельным проходом получается( тест трафарета мешает использовать в одном проходе)? использовать значения глубины для сравнения с глубиной шадоумапы из г-буфера?

Samodelkin 18.05.2014 23:36

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

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

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Там внизу расписано по категориям signed, unsigned и ieee (то бишь float) форматы.

Например аналог D3DFMT_A8R8G8B8 со знаком будет D3DFMT_Q8W8V8U8.
Однако не все из них поддерживает устройство - нужно проверять.

mr.DIMAS 19.05.2014 01:53

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

вот проверьте промежуточный графон в игре. добавил бамп.

https://www.dropbox.com/s/d8s3ps3ngkdgwip/release.rar


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

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