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_ 26.10.2014 17:08

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

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

mr.DIMAS 26.10.2014 17:14

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

http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx

тебе конечно все очевидно, мне не очень - ибо опыта и знаний маловато

Mr_F_ 26.10.2014 17:33

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

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

mr.DIMAS 26.10.2014 17:35

Ответ: [TrueHorror] - разработка
 
да пока-что такого же

mr.DIMAS 26.10.2014 18:15

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

Mr_F_ 26.10.2014 18:27

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

1. рендеришь глубину относительно фонарика в РТ фонарика.
2. рендеришь свой гбуфер игровой камерой.
3. восстанавливаешь мировую позицию из глубины гбуфера.
4. множишь её на матрицу фонарика - получаешь глубину в том же пространстве, что у него и проекционные коорды в XY.
5. семплишь шадоумапу и сравниваешь глубину из неё с projectedCoords.z

mr.DIMAS 26.10.2014 18:48

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

Mr_F_ 26.10.2014 19:07

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

mr.DIMAS 26.10.2014 19:13

Ответ: [TrueHorror] - разработка
 
кубики немного подняты от земли, поэтому такой обман зрения

mr.DIMAS 26.10.2014 19:47

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

Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно?

tirarex 26.10.2014 20:32

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

Сообщение от mr.DIMAS (Сообщение 288594)
В аттаче скрин из игры

Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно?


Верно , а еще можно так сгдладить


PHP код:

inline float rand(float3 seedint i
{
    
float4 seed4 float4(seedi);
    
float dot_product dot(seed4float4(12.989878.23345.16494.673));
    return 
frac(sin(dot_product) * 43758.5453);
}

#define NUM_SAMP 4
#define SPREAD 0.01

        
float vShadowSample texCUBE(sCubeShadow, -vLightDir + (float3(rand(vWorldPosi), rand(vWorldPos1), rand(vWorldPos2)) * SPREAD)).r;
        
fShadow += ((fLength-2.5) < vShadowSample) ? 1.0f 0.0f




Mr_F_ 26.10.2014 20:43

Ответ: [TrueHorror] - разработка
 
я на днях кстати делал PCF3x3 для кубмапных шадоумап (без шума), это не лучшее что можно делать с тенями, но просто для справки. могут быть косяки на стыках фейсов кубмапы, но это сложно заметить.
http://geom.io/pc4/demoShadersPoint.html
(можно зажать RMB и летать WASDом)
http://geom.io/pc4/src/graphics/prog...unks/shadow.ps
(код WIPовый)

mr.DIMAS 27.10.2014 19:24

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

и кстати так никто и не ответил на:

Цитата:

Сообщение от mr.DIMAS (Сообщение 288415)
будет ли прирост производительности если все шейдерные константы замапить напрямую в регистры и потом устанавливать их через вызовы setvertexshaderconstant/setpixelshaderconstant? и как быть например с таким:

Код:

float4x4 worldViewProjection;
float opacity;
float brightness;

например я делаю так

Код:

float4x4 worldViewProjection : register( c0 );
float opacity : register( c5 );
float brightness : register( c6 );

но каждый регистр может содержать четыре флоата, таким образом впустую пропадают куски регистров с5,с6.

кароч расскажите че да как.


Mr_F_ 27.10.2014 19:37

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

все верно?
да

Цитата:

и кстати так никто и не ответил на:
проверь, замерь, когда-то сам заморачивался с этим тоже, но особо сравнений не производил

вообще, стараюсь по возможности юзать везде флоаты4 и напихивать в компоненты всё. так, например, на геоме большинство параметров материала хранится:
Цитата:

uniform vec4 params; /* glossiness, reflectivity, fresnelEmission,isMetalOpacity

fresnelEmission:
fresnel = frac(fresnelEmission)*10.0;
emission = floor(fresnelEmission/100.0);

isMetalOpacity:
isMetal = isMetalOpacity>0;
opacity = abs(isMetalOpacity);
*/
*оправданность этих махинаций под сомнением

mr.DIMAS 01.11.2014 02:46

Ответ: [TrueHorror] - разработка
 
Делаю HDR. Возник вопрос по поводу источников света. Допустим фонарик светит с яркостью 1,0. А прожектор с яркостью 10,0. При рендере в хдртексу( A16B16G16R16 ) шейдером лайта, я просто домножаю цвет на яркость источника света. Дальше я делаю тон маппинг так( брал отсюда http://filmicgames.com/archives/75 ):
Код:

            "sampler hdrTexture : register( s0 );\n"
            "float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0\n"
            "{\n"
            "    float3 texColor = tex2D( hdrTexture, texCoord );\n"
            "    texColor *= 16;\n" \\ exposure
            "    texColor = texColor/(1+texColor);\n"
            "    float3 retColor = pow(texColor,1/2.2);\n"
            "    return float4(retColor,1);\n"
            "};\n";

В итоге на выходе просто обесцвеченная засвеченная картинка. игрался с exposure толку ноль.

Кароч у меня как обычно ниче не выходит. Че как оно правильно делается?

Mr_F_ 01.11.2014 13:07

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

float3 retColor = pow(texColor,1/2.2)
это sRGB коррекция, которая там для референса.
на деле тебе надо вместо этого просто включить SRGBWRITEENABLE, будет делать то же самое, но бесплатно, и рисовать в ргба8 тонмаппенный результат с этим.
альбедо текстуры при этом надо читать с SRGBTEXTURE стейтом, иначе получится обесцвеченная херня.

mr.DIMAS 01.11.2014 13:23

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

делаю так, при тонмапе
g_device->SetSamplerState( 0, D3DSAMP_SRGBTEXTURE, TRUE );
g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, TRUE );

при рендере сцены в хдртекстуру

g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, FALSE );

и я выкинул из кода шейдера float3 retColor = pow(texColor,1/2.2)
и кароч все равно засветка и обесцвечивание.

объясни поподробнее, пжлста.

Mr_F_ 01.11.2014 13:35

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

g_device->SetSamplerState( 0, D3DSAMP_SRGBTEXTURE, TRUE );
это надо делать диффузным текстурам короче, ещё до освещения их.

Цитата:

g_device->SetRenderState( D3DRS_SRGBWRITEENABLE, FALSE );
это можно делать только в ргба8 текстуру, хдр текстуры не умеют юзать этот стейт. в дх10+ стейт и вовсе убрали и сделали для понятности форматы текстур с приставкой _SRGB в названии.
результат тонмапа ты же уже в лдр текстуру рисуешь? там и ставь стейт тогда.

про гамму в очередной раз запосчу
http://http.developer.nvidia.com/GPU...ems3_ch24.html
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
http://www.aversis.be/tutorials/vray...orkflow_01.htm
http://filmicgames.com/archives/299

---
пофиксил первую цитату

mr.DIMAS 01.11.2014 13:50

Ответ: [TrueHorror] - разработка
 
Вложений: 4
Не знаю то ли получилось что должно, вот скрины ( на них позорные не сглаженные тени :-D )

Без хдр

С хдр - exposure 0.4

С хдр - exposure 2.2

С хдр - exposure 6.2


и да, код тонмапа такой

Код:

        "sampler hdrTexture : register( s0 );\n"
        "float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0{\n"
        "    float3 texColor = tex2D( hdrTexture, texCoord );\n"
        "    float exposure = 0.4f;\n"
        "    float3 retColor = 1 - exp( -exposure * texColor );\n"
        "    return float4(retColor,1);\n"
        "};\n";


Mr_F_ 01.11.2014 14:25

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

Без хдр
в смысле с хдр светом, но без тонмапа?
ну судя по тому, что белое пятно света стало более вменяемым - вроде тонмап работает.

mr.DIMAS 01.11.2014 14:27

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

и еще можно ли скормить результат тонмапа шейдеру FXAA? не появятся ли артефакты?

Mr_F_ 01.11.2014 14:58

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

ну да без тонмапа, теперь нужно вычислять среднюю яркость сцены, чтобы посчитать выдержку, как это проще сделать?
проще - задаунсемплить картинку в 1 пиксель (тупо нарисовать весь экран в однопиксельный РТ не выйдет, надо несколько пассов с уменьшением в 2-4 раза), исходя из средней яркости крутить экспозицию.
сложнее - считать гистрограмму яркости за несколько кадров, Вэлв очень хитро это делали, считая кол-во слишком ярких/тёмных пикселей occlusion query.
http://www.valvesoftware.com/publica...urceEngine.pdf

Цитата:

результат тонмапа шейдеру FXAA?
должно быть норм
более того, обычно как раз считать любое АА лучше именно ПОСЛЕ тонмапа, иначе если ты сглаживаешь переход между цветом с яркостью 1 и яркостью 100, у тебя просто вся плавность перехода "съестся" яркостью второго, и по прежнему будет выглядеть как без АА.

mr.DIMAS 01.11.2014 15:07

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

Цитата:

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

И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то?

Mr_F_ 01.11.2014 16:08

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

А размазывать при записи нужно при этом?
просто находишь средний цвет.
берёшь снимок экрана (по идее хдрный, но может имеет смысл и после тонмапа) и рисуешь квад с ним в текстуру в 2 раза меньшего разрешения, при этом в каждый пиксель находя среднее арифметическое 2х2 блока большой картинки.
необязательно начинать даунсемплить от фуллреса - можно начать от 512х512 версии (тупо хайрес нарисовать в неё, будет алиасинг, но тут не шибко важно) и дальше 256, 128, 64, 32, 16, 8, 4, 2, 1.
Можно в шейдере читать и 4х4 блок, тогда выйдет 128, 32, 8, 2, 1 (из 2 в 1 уже снова 2х2 фильтр нужен).

Цитата:

И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то?
по формуле какой-то. тут уже не подскажу, мало этим занимался, хватало фиксировать экспозицию руками по триггерам.

mr.DIMAS 03.11.2014 18:21

Ответ: [TrueHorror] - разработка
 
Посчитал среднюю яркость. Теперь как мне лучше считать экспозицию? Единственное что приходит на ум: GetRenderTargetData для тексы 1х1 и вытащить из нее яркость. И затем по яркости делать интерполяцию экспозиции. Но везде пишут что GetRenderTargetData тормозная. Че как там ГПУ можно заставить все считать?

Mr_F_ 03.11.2014 18:40

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

GetRenderTargetData для тексы 1х1 и вытащить из нее яркость.
Nooo, это медленно.
Можешь читать 1х1 текстуру и писать в другую текстуру, да хоть рисовать цвет текущей текстуры слабо полупрозрачным квадом поверх текущего используемого значения экспозиции каждый кадр, альфу множить ещё на дельтатайм, или ещё как.
Кстати, сегодня на глаза попалась старая статейка про разбор рендера обливиона, там ппц конечно полный, но с адаптацией вполне обычно всё сделано, можешь читнуть http://www.gamedev.ru/community/game...?id=718&page=2

mr.DIMAS 03.11.2014 19:36

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

Mr_F_ 03.11.2014 19:54

Ответ: [TrueHorror] - разработка
 
ну типа как-то:
Инит:
1. создаёшь цепь для 4х даунсемплинга, сойдёт в принципе наверное 256х256, 64х64, 16х16, 4х4, 1х1.
2. создаёшь 1х1 текстуру с интерполированной накопленной яркостью, R32F. Назовём её Х.
Рендер:
3. Рендеришь содержимое экрана в 256х256 текстуру.
4. Усредняешь 4х4 пикселя её, рендеришь в 64х64 и т. д. до 1х1. Получается средняя яркость за кадр.
5. Рисуешь её в текстуру Х. Не стираешь прошлое содержимое. Ставишь обычный альфабленд и альфу = (скорость адаптации * дельтатайм). Скорость адаптации маленькое число, гораздо меньше 1. Рендертаргет флоатовый, чтобы альфа < 1/255 сработала.
6. Юзаешь текстуру Х в тонмаппинге. Как её нормально в экспозицию преобразовать - точно не скажу.
В любом случае, получаем плавную смену средней яркости.

mr.DIMAS 03.11.2014 23:34

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

1) Тени от спотлайтов ( без PCF - да я ленивая жопа )
2) Кривые жручие тени от поинтов - не рекомендую их включать, ибо я их еще не допилил как следует.
3) HDR с адаптацией.
4) Отвязал многие действия от ФПС.
5) Сохранения\загрузка - кое-где работает криво но в целом играбельно. Автосохранений пока что нет( хотя при запуске говорится обратное :-D )
6) Мелочи

Клавиши действий можно настроить в меню. Там же настраивается графоний. Разрешение из игры не сменить - его можно поменять в файле mine.cfg

СКАЧАТЬ

ARA 03.11.2014 23:42

Ответ: [TrueHorror] - разработка
 
Довольно прикольные эффекты! Молоцца.
Единственное, тонемаппинг странно работает. Все пересвеченные белые места превратились в серые. Так не должно быть. Такое ощущение что ты тонемапишь LDR. Либо адаптивно затемняешь картинку после тонемаппинга, т.е уже после того как изображение превратилось в лдр.

tirarex 03.11.2014 23:55

Ответ: [TrueHorror] - разработка
 
https://www.dropbox.com/s/qi5z3wr9vm...52.53.png?dl=0

2 Раза проходил и все одно и тоже , в воздухе за километр.

mr.DIMAS 04.11.2014 00:01

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

Цитата:

Такое ощущение что ты тонемапишь LDR
Просто тонмап видимо кривой.

Код:

        "sampler hdrTexture : register( s0 );\n"
        "sampler avgLum : register( s7 );\n"

        "float4 main( float2 texCoord : TEXCOORD0 ) : COLOR0{\n"
        "    float exposure = tex2D( avgLum, float2( 0.5f, 0.5f )).r;\n"
        "    float3 texColor = tex2D( hdrTexture, texCoord );\n"
        "    float key = 0.1f;\n"
        "    texColor *=  key / ( exposure + 0.034f );\n"
        "    texColor /= ( 1.0f + texColor );\n"
        "    return float4(texColor,1);\n"
        "};\n";


Mr_F_ 04.11.2014 00:27

Ответ: [TrueHorror] - разработка
 
чёто не могу поиграть в игру. говорит - MSVCP110.DLL не найден, хотя он у меня лежит в system32. положил в папку с игрой - unable to start correctly. попробовал поставить последний редист 2012 - говорит уже всё и так свежее, не ставится.
протупил - стоял х64 редист, нужен был х86

Mr_F_ 04.11.2014 00:47

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

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

меню выглядит криво, возможно потому что у меня квадратный монитор.

быстро нажимая пробел, можно спокойно улетать в небо, игнорируя гравитацию.

в пещере фонарик вообще практически не светит, всё чёрное. и где ж адаптация?

тонмаппинг херовый - всё и правда серое. заюзай анчартовый, например.

от фонарика в моей руке падает тень, и это довольно смешно, т.к. от меня самого её нет.

статический источник света темнее, чем сам свет от него - это довольно бредово

mr.DIMAS 04.11.2014 00:57

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

я заспавнился где-то за пределами коридоров в небе и стремительно упал вниз.
Цитата:

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

Попробуй хотя бы до третьего уровня дойти.

Mr_F_ 04.11.2014 01:38

Ответ: [TrueHorror] - разработка
 
Испугался мигающего красного экрана и убежал из игры

mr.DIMAS 04.11.2014 01:49

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

На третьем уровне за тобой еще и бегать будут. А ты будешь убегать роняя кирпичи.

Хотя слиться от того товарища довольно просто и у него анимация глюченая :-D.

Mr_F_ 04.11.2014 01:52

Ответ: [TrueHorror] - разработка
 
Не люблю такие игры, сорри =/

mr.DIMAS 04.11.2014 01:58

Ответ: [TrueHorror] - разработка
 
Я понимаю. Жанр на любителей пощекотать нервы.

tirarex 04.11.2014 12:58

Ответ: [TrueHorror] - разработка
 
Решил пойти на 3 лвл , при втыкании 4 провода вылет.

mr.DIMAS 04.11.2014 13:25

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

mr.DIMAS 06.11.2014 19:06

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

Mr_F_ 06.11.2014 19:46

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

Почему тормозит блендинг, когда рисую частицы? Особенно когда камера попадает в пучок частиц
всё верно - блендинг дело небыстрое. надо честно выполнить PS на все перекрывающие друг друга частицы многократно, многократно прочитать значения рендертаргета и многократно записать бленденый результат в них обратно.
такое называется overdraw и по сей день медленно.

варианты:
- делай discard там где альфа меньше ~5%, в этих местах блендинг откинется.
- наслаивай меньше полигонов друг на друга.

если этого недостаточно, дальше есть разные хитрые варианты, как то рендерить партиклы в лоуресе и хитро апсемплить и т. д.
https://developer.nvidia.com/content...ency-rendering

mr.DIMAS 07.11.2014 02:13

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

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

Минусы - надо считать волюм. Хз че делать когда камера будет внутри волюма, и как это будет смотреться.

Mr_F_ 07.11.2014 03:45

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

St_AnGer 07.11.2014 11:42

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

mr.DIMAS 07.11.2014 12:13

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

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

Цитата:

А у меня печаль :mad: сколько бы раз не запускал/загружался/перезагружался, всегда на первом уровне вылетаю то в небо, то под землю... При этом героя ооооочень сильно колбасит вверх/вниз (он как будто быстро приседает-подпрыгивает)
А че с ФПС? Иногда при низком фпс физика упарывается и начинает колбасить. А вообще последняя версия не очень удачная - делал движок в основном, игру просто скомпилировал с новым движком - даже не потестив, скинул сюда. А потом выяснилось что у большинства какая-то херота творится на экране вместо игры.

pax 07.11.2014 15:20

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

St_AnGer 07.11.2014 15:29

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

Сообщение от mr.DIMAS (Сообщение 289036)
А че с ФПС? Иногда при низком фпс физика упарывается и начинает колбасить.

Фпс при старте уровня 8-10, после 2-х секунд 15-18 и держится. Расколбас физики идёт жёсткий, пока ГГ не взлетит до вирия или не провалится в глубины тартара

ПыСы у меня комп со втроеной видяхой сейчас только под рукой, на нём и запускал.

mr.DIMAS 08.11.2014 02:21

Ответ: [TrueHorror] - разработка
 
Поправил несколько серьезных багов:

1) Баг с рывками и подпрыгиваниями - откат на старый булет( Bullet Physics 2.78 )
2) Баг с улетанием в ебеня - ограничением максимального dt на уровне 1.0/15.0
3) Тормоза физики - обрисовка геометрии уровня лоуполи мешом и использованием его в качестве модели столкновений - таким образом убран оверхед в расчетах физики
4) Баги с вылетами
5) Баг с прыжком персонажа - теперь без рывков
6) Баг с анимацией убийцы на 3 уровне

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

СКАЧАТЬ

impersonalis 08.11.2014 02:33

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

Сообщение от pax (Сообщение 289039)
Обычно же физику делают не зависимо от FPS с фиксированным шагом. Например если всего два кадра в секунду рендерит, то за эти два кадра физика например должна сделать по 25 апдейтов с шагом 0,02 секунды. Тогда с физикой проблем не должно быть.

ну... я бы не стал всё сводить к универсальному решению (алгоритму): тут и про стабилизацию можно поговорить, и про особенности измерения времени, и про чувствительность моделей к шагу и частоте, и про потоки...
http://engbul.bmstu.ru/doc/628235.html
Но то, что фпс должен быть отделён от физики (вообще говоря, логика и визуализация не обязаны иметь единых ограничений на частоту вызова) - факт.

tirarex 08.11.2014 14:55

Ответ: [TrueHorror] - разработка
 
Последний падейт -
1 Теперь прыжок на 1см
2 игрок скачет
3 игрок вылетает с уровня когда скачет
4 тени от поинтлайтов отсутствуют
5 фпс стал ниже

mr.DIMAS 08.11.2014 15:42

Ответ: [TrueHorror] - разработка
 
Сколько фпс в среднем?

Тени от поинтов выключены вообще, их не врубить из игры.

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

tirarex 08.11.2014 15:45

Ответ: [TrueHorror] - разработка
 
фпс -15-30 (Radeon4650) Запускаю каждый раз из новой папки и убераю опен ал длл.

mr.DIMAS 08.11.2014 15:46

Ответ: [TrueHorror] - разработка
 
А если графоний выключить - убрать FXAA, HDR и тени сколько тогда кадров?

Вообще во всем виноват сраный дельта тайминг. Он реально упарывает всю игру. Хотя его цель как-раз таки сделать фпс-независимым игровой процесс.

tirarex 08.11.2014 16:09

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

Сообщение от mr.DIMAS (Сообщение 289074)
А если графоний выключить - убрать FXAA, HDR и тени сколько тогда кадров?

Вообще во всем виноват сраный дельта тайминг. Он реально упарывает всю игру. Хотя его цель как-раз таки сделать фпс-независимым игровой процесс.

Без эффектов , без всех теней фпс 25-50. Но бег с рывками.

mr.DIMAS 08.11.2014 16:12

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

Samodelkin 09.11.2014 02:17

Ответ: [TrueHorror] - разработка
 
Везде 60 FPS с любыми настройками.

* Нужно сделать покачивание фонарика, сделать его чуть дальше от камеры, потому что тени не видно, зачем её делал тогда?
* Ну с точечными тенями ты сам видишь что напутал, там свет/тень перепутано.
* Теперь я на одной зарядке фонарика могу все три уровня пробежать. Я бы вот что сделал: на первом уровне фонарик сделал бы бесконечный, что-бы не отвлекать, а на втором начал-бы его быстро сажать, чтобы это как мини игра "найди батарейки" была, а на третьем уровне уже можно было бы найти неразряжающийся фонарик, что-бы опять же не отвлекал от основных событий.
* Адаптация яркости плохо настроена -- ощущение что на старом ЭЛТ мониторе играешь с севшей трубкой, нужно ярче, добавить блум, эффекты линзы (зацени демки в стиме игр Caffeine Demo и REVERSE SIDE Demo -- поделки так себе, но UE4 делает хорошие эффекты).
* Кстати перед входом в шахту раньше справа была канистра для фонаря, сейчас я её уже не могу найти.
* Один из детонаторов чуть не провалился, я его уже под землёй успел подхватить!
* Движение перса стало лучше, но на третьем уровне опять началось прыгание и застревание.
* Цель на третьем уровне не обновляется (всё время нужно взорвать стену).
* Вообще на 2 и 3 уровнях скайбокс уже можно не рисовать.

mr.DIMAS 09.11.2014 02:24

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

Один из детонаторов чуть не провалился, я его уже под землёй успел подхватить!
Подумываю над тем чтобы сделать предметы "несдвигаемыми", чтоб не проваливались - я не понимаю, как кодят физ. движки - они все страдают проваливанием маленьких объектов сквозь большие фейсы.
Цитата:

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

Вообще на 2 и 3 уровнях скайбокс уже можно не рисовать.
Да, уберу.
Цитата:

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

Адаптация яркости плохо настроена -- ощущение что на старом ЭЛТ мониторе играешь с севшей трубкой,
Так тонмап и не поменял, ща игру делаю - и в графику не буду соваться.
Цитата:

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

pax 09.11.2014 12:00

Ответ: [TrueHorror] - разработка
 
Для мелких быстро двигающихся предметов в физ движках есть вроде Continuous Collision Detection, плюс чем больше шаг физики по времени, тем хуже ведет себя физика. Я бы не делал шаг физики больше 1/30. В Unity по умолчанию 1/50 фиксированный шаг. Т.е. он всегда 1/50, не больше и не меньше. Ограничивается время обработки физики за кадр. Например не более 0,3с. Если физ движок не успевает сделать нужное количество итераций за это время, то физика просто замедляется.

Далее на точность физики влияет количество итераций решателя. Обычно по умолчанию где-то 6-8 итераций. Для игр этого хватает.

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

Хз как в булете статическая геометрия, в Unity например она не должна иметь компонента твердого тела, что указывает, что она не двигается. Она имеет только коллайдер. По сути физика не нагружает процессор, когда все тела спят.

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

mr.DIMAS 10.11.2014 19:58

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

У меня есть единственная мысль - сделать движение по вейпоинтам. На карте расставить вейпоинты и группировать их в пути. А потом для поиска игрока брать ближайший путь и идти в нужную сторону по нему, и дойдя до конца\начала пути идти по следующему, ведущему к игроку. Должно работать нормально для моего случая - одни коридоры, никаких свободных пространств. Но может есть че круче?

ARA 10.11.2014 20:07

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

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

Mr_F_ 10.11.2014 20:23

Ответ: [TrueHorror] - разработка
 
Но я думаю, вейпоинты самое ок для коридоров)

pax 10.11.2014 22:14

Ответ: [TrueHorror] - разработка
 
В Unity вроде рекаст https://github.com/memononen/recastnavigation


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

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