![]() |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
ну получается по умолчанию используется общий буфер, я так понял его нужно создавать отдельно для каждого рендертаргета?
http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx тебе конечно все очевидно, мне не очень - ибо опыта и знаний маловато |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
да пока-что такого же
|
Ответ: [TrueHorror] - разработка
еще один косяк, при рендере глубины в гбуфер, она зависит от положения камеры, и поэтому сравнивать с глубиной из шадоумапы ее нельзя. че делать?
|
Ответ: [TrueHorror] - разработка
не понял вопрос.
суть такова: 1. рендеришь глубину относительно фонарика в РТ фонарика. 2. рендеришь свой гбуфер игровой камерой. 3. восстанавливаешь мировую позицию из глубины гбуфера. 4. множишь её на матрицу фонарика - получаешь глубину в том же пространстве, что у него и проекционные коорды в XY. 5. семплишь шадоумапу и сравниваешь глубину из неё с projectedCoords.z |
Ответ: [TrueHorror] - разработка
Вложений: 1
Ну наконец-то я сделал это. Теперь PCF надо хотя бы 2х2. И оптимизацию по объектам которые рисуются в шадоумапу. А чтобы дырки в текстурах учитывались, нужно передать в шейдер, который пишет шадоумапу еще и диффуз текструру с альфаканалом и там отсекать через clip.
|
Ответ: [TrueHorror] - разработка
Вложений: 1
как-то коряво выглядит, или меня глючит. мне кажется, в обозначенных местах должны быть тени, а их нет.
|
Ответ: [TrueHorror] - разработка
кубики немного подняты от земли, поэтому такой обман зрения
|
Ответ: [TrueHorror] - разработка
Вложений: 1
В аттаче скрин из игры
Теперь нужно сделать тени для поинт лайтов. я думаю сделать так: для каждой грани куба рендерим сцену с матрицей проекции с fov = 90. для выборки из кубшадоумапы используем направление от света до освещаемой точки. Все верно? |
Ответ: [TrueHorror] - разработка
Цитата:
Верно , а еще можно так сгдладить |
Ответ: [TrueHorror] - разработка
я на днях кстати делал PCF3x3 для кубмапных шадоумап (без шума), это не лучшее что можно делать с тенями, но просто для справки. могут быть косяки на стыках фейсов кубмапы, но это сложно заметить.
http://geom.io/pc4/demoShadersPoint.html (можно зажать RMB и летать WASDом) http://geom.io/pc4/src/graphics/prog...unks/shadow.ps (код WIPовый) |
Ответ: [TrueHorror] - разработка
немного про оптимизации. для спота можно отсекать объекты не создающие тени фрустумом построенном для спота, для поинта - по ограничивающей сфере вокруг него с радиусом освещения. все верно?
и кстати так никто и не ответил на: Цитата:
|
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
вообще, стараюсь по возможности юзать везде флоаты4 и напихивать в компоненты всё. так, например, на геоме большинство параметров материала хранится: Цитата:
|
Ответ: [TrueHorror] - разработка
Делаю HDR. Возник вопрос по поводу источников света. Допустим фонарик светит с яркостью 1,0. А прожектор с яркостью 10,0. При рендере в хдртексу( A16B16G16R16 ) шейдером лайта, я просто домножаю цвет на яркость источника света. Дальше я делаю тон маппинг так( брал отсюда http://filmicgames.com/archives/75 ):
Код:
"sampler hdrTexture : register( s0 );\n"Кароч у меня как обычно ниче не выходит. Че как оно правильно делается? |
Ответ: [TrueHorror] - разработка
Цитата:
на деле тебе надо вместо этого просто включить SRGBWRITEENABLE, будет делать то же самое, но бесплатно, и рисовать в ргба8 тонмаппенный результат с этим. альбедо текстуры при этом надо читать с SRGBTEXTURE стейтом, иначе получится обесцвеченная херня. |
Ответ: [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) и кароч все равно засветка и обесцвечивание. объясни поподробнее, пжлста. |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
результат тонмапа ты же уже в лдр текстуру рисуешь? там и ставь стейт тогда. про гамму в очередной раз запосчу 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 --- пофиксил первую цитату |
Ответ: [TrueHorror] - разработка
Вложений: 4
Не знаю то ли получилось что должно, вот скрины ( на них позорные не сглаженные тени :-D )
Без хдр С хдр - exposure 0.4 С хдр - exposure 2.2 С хдр - exposure 6.2 и да, код тонмапа такой Код:
"sampler hdrTexture : register( s0 );\n" |
Ответ: [TrueHorror] - разработка
Цитата:
ну судя по тому, что белое пятно света стало более вменяемым - вроде тонмап работает. |
Ответ: [TrueHorror] - разработка
ну да без тонмапа, теперь нужно вычислять среднюю яркость сцены, чтобы посчитать выдержку, как это проще сделать?
и еще можно ли скормить результат тонмапа шейдеру FXAA? не появятся ли артефакты? |
Ответ: [TrueHorror] - разработка
Цитата:
сложнее - считать гистрограмму яркости за несколько кадров, Вэлв очень хитро это делали, считая кол-во слишком ярких/тёмных пикселей occlusion query. http://www.valvesoftware.com/publica...urceEngine.pdf Цитата:
более того, обычно как раз считать любое АА лучше именно ПОСЛЕ тонмапа, иначе если ты сглаживаешь переход между цветом с яркостью 1 и яркостью 100, у тебя просто вся плавность перехода "съестся" яркостью второго, и по прежнему будет выглядеть как без АА. |
Ответ: [TrueHorror] - разработка
Тоесть мне нужно создать несколько текстур вплоть до 1х1. Затем в несколько проходов: заливать картинку с текущего прохода в текстуру поменьше, и т.д до 1х1? А размазывать при записи нужно при этом?
Цитата:
И как исходя из средней яркости крутить экспозицию? просто exposure = luminance? Или по формуле какой-то? |
Ответ: [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 фильтр нужен). Цитата:
|
Ответ: [TrueHorror] - разработка
Посчитал среднюю яркость. Теперь как мне лучше считать экспозицию? Единственное что приходит на ум: GetRenderTargetData для тексы 1х1 и вытащить из нее яркость. И затем по яркости делать интерполяцию экспозиции. Но везде пишут что GetRenderTargetData тормозная. Че как там ГПУ можно заставить все считать?
|
Ответ: [TrueHorror] - разработка
Цитата:
Можешь читать 1х1 текстуру и писать в другую текстуру, да хоть рисовать цвет текущей текстуры слабо полупрозрачным квадом поверх текущего используемого значения экспозиции каждый кадр, альфу множить ещё на дельтатайм, или ещё как. Кстати, сегодня на глаза попалась старая статейка про разбор рендера обливиона, там ппц конечно полный, но с адаптацией вполне обычно всё сделано, можешь читнуть http://www.gamedev.ru/community/game...?id=718&page=2 |
Ответ: [TrueHorror] - разработка
Не допер немного. Вот есть после тонмапа у меня текстура со средней яркостью - 1х1. Я создаю еще одну текстуру такого же размера, затем перед тонмапом делаю выборку из текстуры со средней яркостью за прошлый кадр и эту выборку домножаю на альфу и записываю в новую тексу 1х1. Затем при тонмапе я передаю эту текстуру в шейдер тонмапа и вычисляю там экспозицию по яркости полученной ранее. Чет я запутался. Можно все по пунктам пжлста.
|
Ответ: [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. Юзаешь текстуру Х в тонмаппинге. Как её нормально в экспозицию преобразовать - точно не скажу. В любом случае, получаем плавную смену средней яркости. |
Ответ: [TrueHorror] - разработка
В общем сделал. Видео записывать не буду ибо уже есть демка в которой весь новый графоний. Почти им только и занимался. Что изменил\добавил.
1) Тени от спотлайтов ( без PCF - да я ленивая жопа ) 2) Кривые жручие тени от поинтов - не рекомендую их включать, ибо я их еще не допилил как следует. 3) HDR с адаптацией. 4) Отвязал многие действия от ФПС. 5) Сохранения\загрузка - кое-где работает криво но в целом играбельно. Автосохранений пока что нет( хотя при запуске говорится обратное :-D ) 6) Мелочи Клавиши действий можно настроить в меню. Там же настраивается графоний. Разрешение из игры не сменить - его можно поменять в файле mine.cfg СКАЧАТЬ |
Ответ: [TrueHorror] - разработка
Довольно прикольные эффекты! Молоцца.
Единственное, тонемаппинг странно работает. Все пересвеченные белые места превратились в серые. Так не должно быть. Такое ощущение что ты тонемапишь LDR. Либо адаптивно затемняешь картинку после тонемаппинга, т.е уже после того как изображение превратилось в лдр. |
Ответ: [TrueHorror] - разработка
https://www.dropbox.com/s/qi5z3wr9vm...52.53.png?dl=0
2 Раза проходил и все одно и тоже , в воздухе за километр. |
Ответ: [TrueHorror] - разработка
баг не углядел. нажми кароч F9( быстрая загрузка ). и будешь там где надо
Цитата:
Код:
"sampler hdrTexture : register( s0 );\n" |
Ответ: [TrueHorror] - разработка
протупил - стоял х64 редист, нужен был х86 |
Ответ: [TrueHorror] - разработка
Вложений: 3
недурно для игры на своём двиге.
после того, как шахта обвалилась, и пошла загрузка, я заспавнился где-то за пределами коридоров в небе и стремительно упал вниз. текст в начале не успел прочитать - думал, что он не исчезнет, пока я кнопку не нажму, и расслабился, отвлёкся пару раз. меню выглядит криво, возможно потому что у меня квадратный монитор. быстро нажимая пробел, можно спокойно улетать в небо, игнорируя гравитацию. в пещере фонарик вообще практически не светит, всё чёрное. и где ж адаптация? тонмаппинг херовый - всё и правда серое. заюзай анчартовый, например. от фонарика в моей руке падает тень, и это довольно смешно, т.к. от меня самого её нет. статический источник света темнее, чем сам свет от него - это довольно бредово |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
да тонмаппинг корявый ибо я его не настроил толком, и вообще да возьму другой. Попробуй хотя бы до третьего уровня дойти. |
Ответ: [TrueHorror] - разработка
Испугался мигающего красного экрана и убежал из игры
|
Ответ: [TrueHorror] - разработка
:-D
На третьем уровне за тобой еще и бегать будут. А ты будешь убегать роняя кирпичи. Хотя слиться от того товарища довольно просто и у него анимация глюченая :-D. |
Ответ: [TrueHorror] - разработка
Не люблю такие игры, сорри =/
|
Ответ: [TrueHorror] - разработка
Я понимаю. Жанр на любителей пощекотать нервы.
|
Ответ: [TrueHorror] - разработка
Решил пойти на 3 лвл , при втыкании 4 провода вылет.
|
Ответ: [TrueHorror] - разработка
Кароч, графон заценили - пора и игрой заняться - а то баги пропускаю. Теперь буду только игрой заниматься.
|
Ответ: [TrueHorror] - разработка
Почему тормозит блендинг, когда рисую частицы? Особенно когда камера попадает в пучок частиц. Для всех частиц у меня один буфер вершин и индексов. Он заполняется каждый кадр на цпу - довольно шустро, если учесть что у еще на цпу идет сортировка частиц по глубине. Нельзя ли как-нибудь вытащить блендинг в шейдер?
|
Ответ: [TrueHorror] - разработка
Цитата:
такое называется overdraw и по сей день медленно. варианты: - делай discard там где альфа меньше ~5%, в этих местах блендинг откинется. - наслаивай меньше полигонов друг на друга. если этого недостаточно, дальше есть разные хитрые варианты, как то рендерить партиклы в лоуресе и хитро апсемплить и т. д. https://developer.nvidia.com/content...ency-rendering |
Ответ: [TrueHorror] - разработка
Чет меня опять в графоний понесло. Есть такая идея как сделать лучи света видимыми: делаем шадоуволюм, для объекта через который проходит свет( например, решетка перед лампой ), рендерим его полупрозрачным просто как меш, без трафарета. Есть ли в таком случае возможность размыть края волюма, чтобы не так резко проявлялись грани? Насколько этот метод хорош, и как делают труЪ-пацаны?
Плюсы очевидны - графонию придается больше реализма. Можно на волюм натянуть текстуру пыли, и медленно изменять текстурные координаты - будет типа перемещения подсвеченной пыли, хотя тут возникают траблы с текстурными координатами. Минусы - надо считать волюм. Хз че делать когда камера будет внутри волюма, и как это будет смотреться. |
Ответ: [TrueHorror] - разработка
достаточно экранной глубины и шадоумапы и получаешь то же самое, но дешевле.
трейсишь несколько шагов - читаешь на каждом тень. |
Ответ: [TrueHorror] - разработка
А у меня печаль :( сколько бы раз не запускал/загружался/перезагружался, всегда на первом уровне вылетаю то в небо, то под землю... При этом героя ооооочень сильно колбасит вверх/вниз (он как будто быстро приседает-подпрыгивает)
|
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
|
Ответ: [TrueHorror] - разработка
Обычно же физику делают не зависимо от FPS с фиксированным шагом. Например если всего два кадра в секунду рендерит, то за эти два кадра физика например должна сделать по 25 апдейтов с шагом 0,02 секунды. Тогда с физикой проблем не должно быть.
|
Ответ: [TrueHorror] - разработка
Цитата:
ПыСы у меня комп со втроеной видяхой сейчас только под рукой, на нём и запускал. |
Ответ: [TrueHorror] - разработка
Поправил несколько серьезных багов:
1) Баг с рывками и подпрыгиваниями - откат на старый булет( Bullet Physics 2.78 ) 2) Баг с улетанием в ебеня - ограничением максимального dt на уровне 1.0/15.0 3) Тормоза физики - обрисовка геометрии уровня лоуполи мешом и использованием его в качестве модели столкновений - таким образом убран оверхед в расчетах физики 4) Баги с вылетами 5) Баг с прыжком персонажа - теперь без рывков 6) Баг с анимацией убийцы на 3 уровне Может что еще не доглядел, но в основном занимался именно поиском и устранением багов. СКАЧАТЬ |
Ответ: [TrueHorror] - разработка
Цитата:
http://engbul.bmstu.ru/doc/628235.html Но то, что фпс должен быть отделён от физики (вообще говоря, логика и визуализация не обязаны иметь единых ограничений на частоту вызова) - факт. |
Ответ: [TrueHorror] - разработка
Последний падейт -
1 Теперь прыжок на 1см 2 игрок скачет 3 игрок вылетает с уровня когда скачет 4 тени от поинтлайтов отсутствуют 5 фпс стал ниже |
Ответ: [TrueHorror] - разработка
Сколько фпс в среднем?
Тени от поинтов выключены вообще, их не врубить из игры. Надеюсь что-ты каждый раз запускашь из новой папки( ну или на крайняк из архива ). Странные у тебя баги, я тестировал очень долго и ничего подобного не было. |
Ответ: [TrueHorror] - разработка
фпс -15-30 (Radeon4650) Запускаю каждый раз из новой папки и убераю опен ал длл.
|
Ответ: [TrueHorror] - разработка
А если графоний выключить - убрать FXAA, HDR и тени сколько тогда кадров?
Вообще во всем виноват сраный дельта тайминг. Он реально упарывает всю игру. Хотя его цель как-раз таки сделать фпс-независимым игровой процесс. |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Кароч буду искать пути улучшения производительности.
|
Ответ: [TrueHorror] - разработка
Везде 60 FPS с любыми настройками.
* Нужно сделать покачивание фонарика, сделать его чуть дальше от камеры, потому что тени не видно, зачем её делал тогда? * Ну с точечными тенями ты сам видишь что напутал, там свет/тень перепутано. * Теперь я на одной зарядке фонарика могу все три уровня пробежать. Я бы вот что сделал: на первом уровне фонарик сделал бы бесконечный, что-бы не отвлекать, а на втором начал-бы его быстро сажать, чтобы это как мини игра "найди батарейки" была, а на третьем уровне уже можно было бы найти неразряжающийся фонарик, что-бы опять же не отвлекал от основных событий. * Адаптация яркости плохо настроена -- ощущение что на старом ЭЛТ мониторе играешь с севшей трубкой, нужно ярче, добавить блум, эффекты линзы (зацени демки в стиме игр Caffeine Demo и REVERSE SIDE Demo -- поделки так себе, но UE4 делает хорошие эффекты). * Кстати перед входом в шахту раньше справа была канистра для фонаря, сейчас я её уже не могу найти. * Один из детонаторов чуть не провалился, я его уже под землёй успел подхватить! * Движение перса стало лучше, но на третьем уровне опять началось прыгание и застревание. * Цель на третьем уровне не обновляется (всё время нужно взорвать стену). * Вообще на 2 и 3 уровнях скайбокс уже можно не рисовать. |
Ответ: [TrueHorror] - разработка
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Ответ: [TrueHorror] - разработка
Для мелких быстро двигающихся предметов в физ движках есть вроде Continuous Collision Detection, плюс чем больше шаг физики по времени, тем хуже ведет себя физика. Я бы не делал шаг физики больше 1/30. В Unity по умолчанию 1/50 фиксированный шаг. Т.е. он всегда 1/50, не больше и не меньше. Ограничивается время обработки физики за кадр. Например не более 0,3с. Если физ движок не успевает сделать нужное количество итераций за это время, то физика просто замедляется.
Далее на точность физики влияет количество итераций решателя. Обычно по умолчанию где-то 6-8 итераций. Для игр этого хватает. Оптимизируют физику включением состояния сна у объектов. Бывают в некоторых движках даже "острова", когда много физических тел соприкасаются друг с другом и в определенный момент весь остров засыпает, когда скорости движения и вращения опускаются ниже какого-то уровня. Хз как в булете статическая геометрия, в Unity например она не должна иметь компонента твердого тела, что указывает, что она не двигается. Она имеет только коллайдер. По сути физика не нагружает процессор, когда все тела спят. Я вообще хз как все это в булете, просто вспоминаю свои теоретические сведения, когда касался этого вопроса. Может где-то не прав. |
Ответ: [TrueHorror] - разработка
Кто че посоветует по поиску пути? У меня главный злодей пока что тупой как пробка, ходит по прямой за игроком и утыкается в стенки.
У меня есть единственная мысль - сделать движение по вейпоинтам. На карте расставить вейпоинты и группировать их в пути. А потом для поиска игрока брать ближайший путь и идти в нужную сторону по нему, и дойдя до конца\начала пути идти по следующему, ведущему к игроку. Должно работать нормально для моего случая - одни коридоры, никаких свободных пространств. Но может есть че круче? |
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Но я думаю, вейпоинты самое ок для коридоров)
|
Ответ: [TrueHorror] - разработка
В Unity вроде рекаст https://github.com/memononen/recastnavigation
|
| Часовой пояс GMT +4, время: 22:23. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot