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.DIMAS 01.09.2014 15:12

Ответ: [TrueHorror] - разработка
 
Я вообще хз че планировать. Сейчас мой движок искаропки тащит:

1) Deferred Shading
2) FXAA
3) Лайтмапы
4) Кривой скиннинг :-D
5) Экспорт сцены из макса, причем максовские источники света работают в движке
6) Звук с учетом окружения
7) Мелкие плюшки и т.п.
8 ) Физика( Bullet )
9 ) Оптимизация Octree'ями

При современных реалиях отсутствие кроссплатформенности это жирный минус.

Скоро добавлю сасао ( SSAO )

Ну и АПИ простое - типа как хорсовское.

При небольших затратах можно даже враппер под б3д написать.

вот только мой движок на хер ни кому не нужен, кроме меня.

Samodelkin 01.09.2014 15:43

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

Izunad 01.09.2014 19:17

Ответ: [TrueHorror] - разработка
 
Так выглядит TrueHorror

mr.DIMAS 04.09.2014 22:27

Ответ: [TrueHorror] - разработка
 
У меня опять вопросы по скелетке. Сейчас я рассчитываю вершины таким макаром:

Код:

newPosition += ( ( boneNode->globalTransform * boneNode->invBoneBindTransform )
* globalTransform ) * initialPosition * bone.weight;

как видно, вершины получаются в глобальной системе координат, и поэтому перед отрисовкой я передаю в шейдер единичную мировую матрицу. Меня это не устраивает. По логике нужно рассчитывать вершины в локальных координатах, но если так сделать, т.е:

Код:

newPosition += ( ( boneNode->globalTransform * boneNode->invBoneBindTransform ) )
* initialPosition * bone.weight;

А в шейдер передать мировую матрицу, то анимация благополучно превратится в говно. В чем косяк?


boneNode->globalTransform * boneNode->invBoneBindTransform

Эта строчка позволяет получить относительную трансформацию относительно первого кадра? Или трансформацию в локальных координатах?

Пжлста разъясните, а то криповый момент в игру не добавить :-D

Mr_F_ 05.09.2014 00:14

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

Меня это не устраивает
а возможно это ок? бывает удобно ставить кости в ворлд позиции, не зависимые от рута, регдолл например.

mr.DIMAS 05.09.2014 00:24

Ответ: [TrueHorror] - разработка
 
То есть получение вершин в мировых координатах это нормально?

Mr_F_ 05.09.2014 00:29

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

mr.DIMAS 05.09.2014 00:43

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

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

Mr_F_ 05.09.2014 02:12

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

но если несколько, то приходится за корневую кость таскать\вертеть объект, вот такая хуня.
можно запихать кости в иерархию, собственно, меша заскиненного и таскать за него, видел такое в некоторых играх.

mr.DIMAS 06.09.2014 17:38

Ответ: [TrueHorror] - разработка
 
Так как игра сделана на 60 % как и говорил выкладываю демку. Пока в игре 3 уровня из 5 задуманных.

Сюжет немного подправлен, убрал зажигалку и добавил фонарик( банально, я знаю ).

В меню можно покрутить общие настройки( сенса мыши, громкость звуков и музыки ) и одна настройка графона :-D вкл\выкл FXAA

Кирпичи в наличии.

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

КАЧАТЬ ТУТ

Samodelkin 06.09.2014 19:10

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

Ну явно не 60%, иначе итоговый вариант игры будет весьма убогим.

* Короче первым делом нужно обратить внимание на физику персонажа - перемещение очень неудобное, перс постоянно цепляется за камни, шпалы, крышу (нету приседания?) и другие предметы.
* Сенса странно высокая, с большим шагом, я выбирал между 5.0 и 7.5 и удобный вариант должен был быть где-то посередине.
* Настройки не сохраняются, причем из главного меню, если не начал новую игру, сенса тоже не сохраняется - нужно начать и потом настраивать.
* В целом по дизайну освещения видно что иногда использовался ниже описанный подход, но почему-то не всегда, например дорога до шахты - очень плохое место.
Цитата:

Сообщение от Samodelkin (Сообщение 266564)
Насчет дизайна карты: есть моменты когда настолько темно, особенно когда поворот или угол загораживает освещенную часть, что вообще не видно куда идти и поварачивать. Я думаю нужно сделать больше освещенных участков, и главное чтобы часть пола тоже освещалось. Как бы игрок всегда должен видеть впереди себя участок света куда ему надо идти через тьму. Также важно освещать повороты за которыми не видно освещенных участков. Вобщем одним словом на экране должно что то присутствовать по чему можно ориентироваться в пространстве, за что глаз может зацепиться, иначе просто неприятно управлять становится. Для примера хотябы тот же doom3 взять - там всегда есть огоньки и лампочки вокруг - они не дают реального света но достаточно иноформации о положении игрока в пространстве. К тому же можно подсветить фонарем если что.

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

mr.DIMAS 07.09.2014 16:00

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

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

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

Цитата:

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

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

Управление сделаю поудобнее. И настраиваемое - ну там переназначение кнопок и все такое.

Про HDR. Тут такая же ситуевина как и с деферредом, думал что сложно сделать а в реальности сделал за один вечер( без оптимизаций ). Надо только начать. + сасао надо начать делать.

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

Samodelkin 07.09.2014 16:57

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

Сообщение от mr.DIMAS (Сообщение 286209)
К тому же никак не используется инвентарь.

Нужно добавить головоломки->появятся предметы для решения этих головоломок->их нужно будет собирать и применять->будет толк от инвентаря.

Цитата:

Сообщение от mr.DIMAS (Сообщение 286209)
Вообще я выбрал очень сложный путь - и движок пишу и игру. Причем движок без игры писать не получается - не понятно что вообще нужно будет в движке, поэтому они развиваются параллельно - из-за этого так медленно разработка идет. К тому же я "и швец, и жнец и на дуде игрец" - модели, карты, сюжет, текстурки, движок и прочее прочее лежит на мне. Таким образом я плетусь как черепаха. В принципе, если бы я взял юнити в качестве движка, то 60 процентов было бы уже готово.

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

Цитата:

Сообщение от mr.DIMAS (Сообщение 286209)
Насчет света я согласен, но в то же время встречный вопрос: ты бывал ночью в лесу? Где нибудь в сентябре-октябре, когда охуенно темные ночи. Так вот это пздц, вообще нереально понять куда идешь даже с фонарем.

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

Цитата:

Сообщение от mr.DIMAS (Сообщение 286209)
Странные баги с физикой постараюсь убрать. Я сам не понял после чего появились эти залипания - буду искать причину.

Ну либо малый радиус капсуля/сферы (что ты там используешь), либо высокий коэффициент трения. Я когда делал физику перса, я трение убрал вообще, а замедление делал компенсирующими силами, прикладываемыми в противоположном движению направлении.
Просто попробуй сделать лестницу и посмотри сможет ли перс на неё подняться.

Цитата:

Сообщение от mr.DIMAS (Сообщение 286209)
Про HDR. Тут такая же ситуевина как и с деферредом, думал что сложно сделать а в реальности сделал за один вечер( без оптимизаций ). Надо только начать. + сасао надо начать делать.

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

Цитата:

Сообщение от mr.DIMAS (Сообщение 286209)
Из-за этого пропадает желание что-либо делать.

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

mr.DIMAS 07.09.2014 21:07

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Сделал сасао. Лепил по статье Борескова. Взял предпоследний шейдер и перевел на HLSL.

Код:

    texture depthTexture;

  sampler depthSampler : register(s0) = sampler_state
  {
    texture = <depthTexture>;
  };

  texture rotateTexture;

  sampler rotateSampler : register(s1) = sampler_state
  {
    texture = <rotateTexture>;
  };

  float4x4 invViewProj;

  float screenWidth;
  float screenHeight;

  float rotateMapWidth;
  float rotateMapHeight;

  float radius;
  float distScale;
  float bias;

  float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0
  {

    float4    rndTable[8];

    rndTable[0] = float4 ( -0.5, -0.5, -0.5, 0.0 );
    rndTable[1] = float4 (  0.5, -0.5, -0.5, 0.0 );
    rndTable[2] = float4 ( -0.5,  0.5, -0.5, 0.0 );
    rndTable[3] = float4 (  0.5,  0.5, -0.5, 0.0 );
    rndTable[4] = float4 ( -0.5, -0.5,  0.5, 0.0 );
    rndTable[5] = float4 (  0.5, -0.5,  0.5, 0.0 );
    rndTable[6] = float4 ( -0.5,  0.5,  0.5, 0.0 );
    rndTable[7] = float4 (  0.5,  0.5,  0.5, 0.0 );

    float depth = tex2D( depthSampler, texCoord ).r;

    float4 screenPosition;
    screenPosition.x =    texCoord.x * 2.0f - 1.0f ;
    screenPosition.y = -( texCoord.y * 2.0f - 1.0f);
    screenPosition.z = depth;
    screenPosition.w = 1.0f;

    float4 position = mul( screenPosition, invViewProj );
    position /= position.w; 

    float2 rotateMapCoord = float2( texCoord.x * screenWidth / rotateMapWidth, texCoord.y * screenHeight / rotateMapHeight );
    float3 plane = tex2D( rotateSampler, rotateMapCoord ).xyz;

    float attenuation = 0.0;

    for( int i = 0; i < 8; i++ )
    {
      float3 sample = reflect( rndTable[ i ].xyz, plane );

      float2 zSampleTexCoord = texCoord + ( radius * sample.xy ) / position.z;
      float    zSample = tex2D( depthSampler, zSampleTexCoord ).r;

      screenPosition.x =    zSampleTexCoord.x * 2.0f - 1.0f ;
      screenPosition.y = -( zSampleTexCoord.y * 2.0f - 1.0f);
      screenPosition.z = zSample;
      screenPosition.w = 1.0f;

      float4 iPosition = mul( screenPosition, invViewProj );
      iPosition /= iPosition.w;

      float    dist = max ( iPosition.z - position.z, 0.0 ) / distScale;   
      float    occl = 15 * max ( dist * (2.0 - dist), 0.0 );

      attenuation += 1.0 / ( 1.0 + occl*occl );
    }

    attenuation = clamp ( attenuation / 8.0 + bias, 0.0, 1.0 );

    return float4( attenuation, attenuation, attenuation, 1.0f );
  };

Было несколько непонятных магических чисел, но порыскав по сурсам я понял что откуда идет.

Но результат как-то не очень ( картинка в аттаче результат AO ).

Киньте шейдер AO, который можно перевести ( или уже на HLSL ) без плясок с бубном.

Mr_F_ 07.09.2014 23:04

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

mr.DIMAS 07.09.2014 23:33

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Ну хз. Подправил шейдер. В аттаче результат.

Вообще меня как-то не впечатляет графоний вместе с сасао. Жрет много( при 2560х1440 ( на скрине фпс с этим разрешением ) ) а толку как то совсем немного.

Mr_F_ 07.09.2014 23:58

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

impersonalis 08.09.2014 13:46

Ответ: [TrueHorror] - разработка
 
оффтоп переехал

Samodelkin 08.09.2014 22:28

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

Я видимо что-то упустил в свое время:
Может кто-нибудь уточнить как именно расcчитывается значение w при записи в буфер, например:
gl_FragColor = vec4( x, y, z, w );

Mr_F_ 08.09.2014 22:53

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

gl_FragColor
? ну сюда ты обычно цвет и альфу пишешь

Samodelkin 08.09.2014 23:35

Ответ: [TrueHorror] - разработка
 
вот gl_FragColor = vec4 ( val, 1, 1, val );
когда я беру в следующем проходе из фраментного texture2D().x - будет одно значение, а texture2D().w уже другое.

Mr_F_ 08.09.2014 23:42

Ответ: [TrueHorror] - разработка
 
ну тут я только одну причину знаю - это если у тебя включена sRGB гамма коррекция при записи цвета.
тогда да, цвет будет аппаратно проходить через быстрый pow(rgb, 0.45), а альфа не будет меняться.

Samodelkin 08.09.2014 23:48

Ответ: [TrueHorror] - разработка
 
А где она может быть включена? Я ничего не писал - открыл пустой шейдер и начал кодить ( в RenderMonkey)

Mr_F_ 08.09.2014 23:50

Ответ: [TrueHorror] - разработка
 
хз, могу только по d3d сказать

Samodelkin 09.09.2014 00:38

Ответ: [TrueHorror] - разработка
 
переписал на d3d9 - там точно также =)
ты точно уверен что там w записывается не как-нибудь 1/w или 1-(1/w)? =)
я вообще A16B16G16R16F использую, на неё распространяется гамма коррекция?
----
upd:
всё я разобрался - надо было фон в белый цвет очищать просто :-)

Mr_F_ 09.09.2014 01:00

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

переписал на d3d9 - там точно также =)
там стейты надо менять
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Цитата:

ты точно уверен что там w записывается не как-нибудь
нет, такого быть не может

Цитата:

я вообще A16B16G16R16F использую, на неё распространяется гамма коррекция?
вроде нет. значит что-то ещё не так делаешь.
пишешь в ту же текстуру, из которой читаешь, может?
какие именно различия наблюдаются в R/A?

Samodelkin 09.09.2014 02:08

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

Сообщение от Samodelkin (Сообщение 286280)
upd:
всё я разобрался - надо было фон в белый цвет очищать просто :-)

Решил ssao повторить и там в рендер таргете по умолчанию альфа в белый цвет очищалась, а rgb в черный. Когда в следующем проходе я брал rgb значения чёрный цвет по краям объекта считался за препятствие, а если брал альфу то там белый цвет как и положено считался бесконечно далеким.
Кстати в общем и без нормалей получается неплохой ssao, только нужно еще размывать его немного - там алиасинг сильный, завтра доделаю.
Я еще в RenderMonkey не могу MRT найти как сделать - приходится лишний проход делать, и сложно оценить производительность. Нужно потом уже на d3d еще раз собрать.

Mr_F_ 09.09.2014 02:36

Ответ: [TrueHorror] - разработка
 
а, это ж: блендинг выключай и ZEnable = false

mr.DIMAS 09.09.2014 15:48

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

И да поправил чувствительность мыши - теперь норм настраивается.

2Mr_F_ как ты вытаскивал нормали из макса через максскрипт? а то в ручную вычисленные нормали кал - я уже понял :-D.

Mr_F_ 09.09.2014 16:47

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

2Mr_F_ как ты вытаскивал нормали из макса через максскрипт?
getFaceRNormals даёт правильные нормали

mr.DIMAS 09.09.2014 17:29

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

Mr_F_ 09.09.2014 17:37

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

mr.DIMAS 09.09.2014 17:41

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

Samodelkin 09.09.2014 18:31

Ответ: [TrueHorror] - разработка
 
А размер SSAO должен быть относительный? Вот если поверхность находится на расстоянии 10 метров и затемнение распространяется на 1 метр от угла, то если подойти ближе то затемнение тоже изменяется в меньшую сторону? По идее в реале распространение света не зависит от положения камеры, с другой стороны, если камера приближается то будут появляться мелкие объекты детализации и их тоже нужно затенять, а таким большим ssao уже не затенить - всё будет монотонным.

Mr_F_ 09.09.2014 18:38

Ответ: [TrueHorror] - разработка
 
нужно стараться чтобы радиус выгдядел ворлдспейсным и не зависел от экрана.
к сожалению, не очень реально сделать ссао с гигантским радиусом на пол экрана (огромные промахи кеша, недостаток семплов), так что будет фейково уменьшаться оно при приближении камеры вблизи.
есть такая тема как multi-resolution ssao, когда в нескольких разрешениях эффект рендерят разной частоты, помимо этого ещё слыхал о юзании мипов (автогенерированных с глубины) в зависимости от радиуса лучей в экране, вроде как последнее должно шустрее всего работать, я думаю попробовать.

Samodelkin 09.09.2014 20:49

Ответ: [TrueHorror] - разработка
 
Mr_F_ еще сопутствующий вопрос, вот раньше делал блюр, пинг-понг и гаусс горизонтальный/вертикальный, так вот в обоих случаях возникала пикселизация на ровных вертикальных/горизонтальных объектах, разрешение текстур для блюра практически не влияло на результат, но ставить выше 512 как-то медленно - нужно большое ядро для блюра. Билинейную фильтрацию ставил. Хотя вот на естественных объектах типа листвы, травы ничего так выглядело.

Mr_F_ 09.09.2014 21:03

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

Samodelkin 09.09.2014 21:16

Ответ: [TrueHorror] - разработка
 
А вот например если есть две текстуры 128 и 256 и исходное изображение 1080p, первый проход делает 1080p->128 или 1080p->256 и в этот момент фильтрация может некорректно сгладить. Может попробовать так: 1080p->512->( 256<->128 )->256->512->1080p.

Mr_F_ 09.09.2014 21:31

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

mr.DIMAS 09.09.2014 22:46

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

Вот кусок кода экспорта нормалей.

Код:

        fn WriteVector3 vec3 =
        (
            -- write vertex according to X - right, Y - up, Z - forward
            cacheWriteFloat file ( vec3.x)
            cacheWriteFloat file ( vec3.z)
            cacheWriteFloat file (-vec3.y)
        )

      ...

      -- write faces
        for f = 1 to mesh.numfaces do
        (
            local face = polyop_getFace mesh f
         
            WriteFace face
           
            if ( numTVerts != 0 ) then
                WriteFace ( polyop_getTVFace mesh f )
            else
                WriteFace face   
         
            if (textures.count > 1) then
                writeLong file ((polyop_getFaceMatID mesh f) - 1)
            else
                writeLong file 0   
               
            if( getFaceSmoothGroup mesh f != 0 ) then
            (
                local normals = meshop.getFaceRNormals mesh f
               
                WriteVector3 normals[1]
                WriteVector3 normals[2]
                WriteVector3 normals[3]
            )
            else
            (
                local faceNormal = getFaceNormal mesh f
               
                WriteVector3 faceNormal[1]
                WriteVector3 faceNormal[2]
                WriteVector3 faceNormal[3]
            )
        )

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

Но в меню какая-то наркомания. Мне больше нраицца первый вариант с рассчитанными нормалями, но оставлю максовские - там их изменить хотя бы можно.

P.S. А я смотрю вы тут без меня не скучаете :-D

Mr_F_ 09.09.2014 22:59

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

cacheWriteFloat
а это что делает?
а на скрине у тебя TBN сломался

Цитата:

if( getFaceSmoothGroup mesh f != 0 ) then
это делать, кстати, не обязательно, getFaceRNormals даёт нормали с учётом всех смусгруп

mr.DIMAS 09.09.2014 23:15

Ответ: [TrueHorror] - разработка
 
cacheWriteFloat - пишет в файл. вообще это костыль

Код:

global cacheWriteFloat = WriteFloat
просто в максхелпе была такая фигня написана что типа можно функции "закэшировать" для быстрого доступа, в итоге оказалось что я лох и такой костыль не дает прироста в скорости работы скрипта. он действует например в таком случае
Код:

global cacheGFaceRNormals = meshop.GetFaceRNormals
В общем не важно.

Как TBN сломался, я ж тангенты вычисляю нормально( ты как-то кидал ссылку ).
Как лечить?

Цитата:

это делать, кстати, не обязательно, getFaceRNormals даёт нормали с учётом всех смусгруп
Учту, на гамедеве.ру запутали

Mr_F_ 09.09.2014 23:24

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

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

mr.DIMAS 09.09.2014 23:27

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Самое интересное что в игре, на третьем уровне на том же месте( меш в этом месте копипаста ) все норм. Пруф в аттаче. А разница только в масштабе, в игре масштаб маленький - чтоб физика хорошо работатала( не как на луне ). А в меню масштаб огромный - потому что там игрок не шастает.

Upd:
Цитата:

скажи какие значения нормали у неё были и какие стали
это долго

Samodelkin 09.09.2014 23:42

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

Сообщение от mr.DIMAS (Сообщение 286321)
Но в меню какая-то наркомания. Мне больше нраицца первый вариант с рассчитанными нормалями, но оставлю максовские - там их изменить хотя бы можно.

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

Я в общем немного SSAO поделал - он у меня помягче и по больше радиус. Я вообще считаю что естественный SSAO должен быть незаметный, если его видно - значит переборщили.
Но там ещё я хочу над бросанием лучей поработать и с размерами радиуса в зависимости от расстояния, так как выглядит не очень пока.
Я вообще по минимуму инструкций использую и возможно его получиться упаковать в 96 инструкций, то есть в версию 2.0.
Вложение 20855
Вложение 20856

Mr_F_ 09.09.2014 23:45

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

имхо хороший пример depth-only SSAO это Mafia 2.

Samodelkin 09.09.2014 23:54

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

Сообщение от Mr_F_ (Сообщение 286329)
ну у тебя его вообще не видно - смысла в таком нет.

Ну это я настрою.

Цитата:

Сообщение от Mr_F_ (Сообщение 286329)
на нижней картинке сплошной блюр - не забывай с учётом глубины блюрить, чтоб чёткие границы объектов оставались.

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

Цитата:

Сообщение от Mr_F_ (Сообщение 286329)
имхо хороший пример depth-only SSAO это Mafia 2.

Ну у меня то бюджетный.

mr.DIMAS 09.09.2014 23:55

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

Мне кажется у тебя просто нормали сломались ещё в максе, когда ты видимо булевой операцией проём в стене делал (даже видно над проёмом). Их можно визуально отобразить в максе - проверь.
Походу так. Скрины в аттаче.

Первый в игре, второй в меню. Видно что в игре нормалей по три штуки на вершину - то есть как надо, в меню по одной. Поправлю

И еще видны ужасно наложенные текстуры :-D

mr.DIMAS 10.09.2014 01:56

Ответ: [TrueHorror] - разработка
 
Чуваки, открыл для себя Object Paint в максе - можно рисовать объектами по объекту. До этого расставлял деревца и траву в ручную( первый уровень ). Я впичали, ну почему я не нашел эту мегафичу раньше? Столько времени проебал.

Samodelkin 11.09.2014 21:01

Ответ: [TrueHorror] - разработка
 
Я уже не в восторге от RenderMonkey, оно уже пару раз зависало, а один раз зависло вместе с видеодрайвером - естественно вся не сохранённая работа терялась. Сам по себе RM вещь неплохая, но у него давно закончился жизненный цикл и AMD его предоставляет без какой либо поддержки и обновлений, видимо от сюда и проблемы на новых системах.

Сейчас попробую найти альтернативы.

mr.DIMAS 12.09.2014 01:00

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Настало время сделать HDR. Кароч внизу скрин, как я понял суть методы в том чтобы в спец текстуру( например R32F ) отрисовать только HDR объекты( на скрине это лампа и отражатель прожектора ), затем размазать ее и замешать с уже отрисованным графонием. Поправьте если что не правильно сказал.

Samodelkin 12.09.2014 01:18

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

Сообщение от mr.DIMAS (Сообщение 286452)
Настало время сделать HDR. Кароч внизу скрин, как я понял суть методы в том чтобы в спец текстуру( например R32F ) отрисовать только HDR объекты( на скрине это лампа и отражатель прожектора ), затем размазать ее и замешать с уже отрисованным графонием. Поправьте если что не правильно сказал.

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

Скинь ссыль на статью по которой делаешь.

mr.DIMAS 12.09.2014 01:37

Ответ: [TrueHorror] - разработка
 
Вот первое попавшееся что читканул.

http://www.realistic3d.com/Documents/hdr.pdf

Mr_F_ 12.09.2014 01:41

Ответ: [TrueHorror] - разработка
 
хдр это когда всё хдр.
когда источники света в более-менее реальных физ диапазонах, а не от балды 0-255.
глоу это уже доп эффект.

по твоей ссылке у них тоже кубмапы содержат значения в широком диапазоне.
то бишь там окошки в кубмапе не 1.0 яркости, а хоть 8, хоть 16, хоть 200.
затемняешь такую хдрку, одни окошки остаются - такое же и в реале видишь на объектах с невысоким коэфом отражательности, вроде как зеркало не выглядят, а источники света отражают, будто спекуляр. тупо потому что он яркий дофига, и умножение на маленький коэф не убивает его до конца.

mr.DIMAS 12.09.2014 01:58

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

Вообще я уже налепил эффектов, что видеопамяти много отжирает:
Гбуфер - 3 текстуры A8R8G8B8,
сасао( пока пылится на задворках ) - еще 1 A8R8G8B8
FXAA - еще 1 A8R8G8B8
Глоу - будет еще одна.

Ну а если сюда добавить мое большое разрешение экрана( 2560х1440 ) то памяти на текстуры маловато остается( хотя DDS решит эту проблему ).

Кароч, эффекты эффектами, а память не резиновая( у меня 512 Мб видеопамяти ).

Samodelkin 12.09.2014 02:24

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

Сообщение от mr.DIMAS (Сообщение 286456)
Вот первое попавшееся что читканул.

http://www.realistic3d.com/Documents/hdr.pdf

DX7? Это какого года презенташка?

http://http.download.nvidia.com/deve...eagues_HDR.pdf
http://www.uraldev.ru/articles/id/23/page/3#hdr
По возможности посмотри еще у Crytek что-нибудь - там всегда хорошие презентации есть, а также GPU Gems и на AMD ATI тоже есть статьи разные.

Кстати в двух словах HDR это когда диапазон яркости монитора 0-255 меньше чем диапазон яркости рендерящегося изображения и диапазон монитора как-бы плавает внутри большего диапазона отрендеренного изображения (это легко представить), таким образом подбирая наиболее хорошо сбалансированное по свету/цвету изображение (примерно также как ты в звуковом движке пытался большую амплитуду втиснуть в возможности звукового выхода).

Mr_F_ 12.09.2014 03:19

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

сасао( пока пылится на задворках ) - еще 1 A8R8G8B8
а чего не 1 канал?

Цитата:

FXAA - еще 1 A8R8G8B8
Глоу - будет еще одна.
а чего не реюз?

mr.DIMAS 12.09.2014 11:44

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

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

Samodelkin 13.09.2014 18:03

Ответ: [TrueHorror] - разработка
 
Если я не пользуюсь msvs, то где можно смотреть информацию, которая будет выводить при включении отладочного режима в dx control panel?

mr.DIMAS 13.09.2014 18:21

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

http://technet.microsoft.com/en-us/s...rnals/bb896647

Но он на самом деле как-то коряво работает, ну например студия ловит сообщения раньше этой проги и она вообще какая-то слоупочная.

Samodelkin 13.09.2014 19:03

Ответ: [TrueHorror] - разработка
 
Да надо просто на дх11 переходить - там всё намного лучше, в том числе и отладка. А у меня тоже под дх9 много кода понаписано.

mr.DIMAS 13.09.2014 19:52

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

Samodelkin 13.09.2014 19:57

Ответ: [TrueHorror] - разработка
 
Нет я делаю движок (очередной). Игру на нём делать пока рано.
Хотя кое что отдельно пытаюсь собирать, но играбельной демки еще нет.

Samodelkin 14.09.2014 18:46

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

Сообщение от Mr_F_ (Сообщение 280745)
жирно очень - в особенности для альбедо не нужно.
заценивай как пакуют гбуффер реалне пацаны: 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 с генерацией тайлов на цпу).

* Вот на 12 слайде, я правильно понимаю что слева - формула упаковывания, а справа распаковывания нормалей?
* А есть гарантия что нормали перед упаковкой будут нормализованы (там в формуле в знаменателе 1 - x предполагает что нормали нормализованы) или лучше вызывать нормализацию перед упаковыванием?
* И вот насчёт знака значения z, он нужен для того чтобы восстановить потерю знака x, y когда они отсекаются по [ 0, 1 ] во время записи в G-Buffer? Ведь если бы они записывались со знаком, то можно было бы восстановить z целиком из x, y.


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

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