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_ 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


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

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