Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
1

Что не так с тенями и как это лечить? ( без понятия с чем может быть связано)

27.05.2017, 23:43. Просмотров 646. Ответов 22
Метки нет (Все метки)

Проблема на картинке.
Вопрос и статус в шапке.
Единственная догадка, возможно связано с фильтрами текстур, а то почти все текстуры хотят превратиться лесенки.
Эта лесинка сильно зависит от угла обзора на тень (см первый и второй скрин)
0
Миниатюры
Что не так с тенями и как это лечить? ( без понятия с чем может быть связано)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2017, 23:43
Ответы с готовыми решениями:

С чем это может быть связано, а то я таких ошибок не знаю. :)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

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

Компрессор Атлант СК-140, С чем может быть связано?
Доброго всем времени суток,подскажите пожалуйста с чем может быть связана непонятная работа...

Declaration syntax error с чем может быть связано?
#include <iostream> #include <string.h> Unicodestring port(Unicodestring b) { int i =...

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

22
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,232
Записей в блоге: 5
29.05.2017, 20:03 2
vindast, нужно делать "мягкие тени". Тогда эффект лесенки будет менее заметен.
0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
29.05.2017, 20:26  [ТС] 3
snake32, это они и есть (на основе фильра, поправьте если не прав). Скрин с другого ракурса грузиться не хочет.
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,232
Записей в блоге: 5
29.05.2017, 20:30 4
vindast, а сколько выборок из текстуры тени делается?
0
29.05.2017, 20:30
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
30.05.2017, 01:37  [ТС] 5
пробовал с разными значениями (до 64)
деффект не уходит

Добавлено через 1 минуту
разрешение тени 8000 * 8000
при этом камера ( тени ) подвешена прямо над машиной.
то есть дело не в разрешении тени или выборок у фильтра.
не могу понять где еще может появиться такой дефект лесенки.
0
Excalibur921
809 / 495 / 88
Регистрация: 12.10.2013
Сообщений: 3,255
30.05.2017, 17:30 6
Может быть примерно так:
Отключить сглаживание всему.
Рендерить картинку разрешения x4.
Сделать обычный суперсемплинг всему кадру.
0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
31.05.2017, 02:09  [ТС] 7
Excalibur921, попробую, посмотрю что будет.
0
Igor3D
1228 / 595 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
31.05.2017, 11:55 8
AA этот эффект не уберет, тени нужно самплить отдельно.
Цитата Сообщение от vindast Посмотреть сообщение
то есть дело не в разрешении тени или выборок у фильтра.
Именно в этом - тень должна размазываться если самплы подобраны верно. Для начала поставьте совсем бедное разрешение тени (хоть 100х100) и убедитесь что эффект есть. Потом увеличивайте расстояние до самплов (по-хорошему его надо считать)

Не по теме:

Цитата Сообщение от snake32 Посмотреть сообщение
нужно делать "мягкие тени".
Ну вообще-то термин "soft shadows" значит совсем другое

0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,232
Записей в блоге: 5
31.05.2017, 12:12 9
Цитата Сообщение от Igor3D Посмотреть сообщение
Ну вообще-то термин "soft shadows" значит совсем другое
А какое - я не скажу.
Цитата Сообщение от Igor3D Посмотреть сообщение
AA этот эффект не уберет
Частично уберёт.
0
Igor3D
31.05.2017, 12:30
  #10

Не по теме:

Цитата Сообщение от snake32 Посмотреть сообщение
А какое - я не скажу.
Это не секрет, просто не относится к теме:) "Soft shadow(s)" - это честный (т.е. физически корректный) расчет raytrace теней методом Монте-Карло, т.е. в роли самплов не пиксели текстуры а лучи (обычно сотни). Переход свет/тень (penumbra) существует из-за того что источник не "точка" а имеет площадь/объем. Напр солнце - диск (это знали еще древние :)). Однако такой расчет - удовольствие дорогое, поэтому в OpenGL не популярен (ну может где-то в загажникаx Nvidia...)

0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
01.06.2017, 10:08  [ТС] 11
тень рисует еще до АА ...

Добавлено через 9 часов 5 минут
Igor3D, фильтр работает как идолжен.
почему то тень идет ленеской только при больших углах обзора.
0
Igor3D
1228 / 595 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
01.06.2017, 11:21 12
Цитата Сообщение от vindast Посмотреть сообщение
Igor3D, фильтр работает как идолжен.
почему то тень идет ленеской только при больших углах обзора.
Т.е. тень размазывается без проблем, как положено, но Вы хотите сделать четкую/контрастную но без "зубов"? И в одних местах все как хотелось (напр правая красная рамка), а в других нет (напр зубы слева). Верно ли я Вас понял? Если да - показывайте как самплятся тени

Не по теме:

На досуге подумайте как сформулировать вопрос так чтобы отвечающим пришлось задавать как можно меньше вопросов :)

0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
01.06.2017, 11:48  [ТС] 13
Igor3D, вы меня вообще не поняли.

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

Добавлено через 49 секунд
Цитата Сообщение от Igor3D Посмотреть сообщение
Если да - показывайте как самплятся тени
Поясните.

Добавлено через 12 минут
Картинка с более наглядной демонстрацией дефекта.

Добавлено через 31 секунду
В текстуре у тени нет мипмапов.
0
Igor3D
1228 / 595 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
01.06.2017, 14:14 14
Цитата Сообщение от vindast Посмотреть сообщение
вы меня вообще не поняли.
Я говорю что тень ползет лесенкой при больших углах обзора, сколько выборок в фильтре не делай, какое разрешение не ставь.
Т.е. тень "не размазывается"?
Цитата Сообщение от vindast Посмотреть сообщение
И да, фильтр работает как должен.
Да как же так? Наверное я тут не к месту со своими неуклюжими советами. Понял, умолкаю
0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
01.06.2017, 21:04  [ТС] 15
Igor3D, ой все.
Я сам не понимаю как это происходит.
0
Excalibur921
809 / 495 / 88
Регистрация: 12.10.2013
Сообщений: 3,255
02.06.2017, 15:07 16
Цитата Сообщение от vindast Посмотреть сообщение
попробую, посмотрю что будет.
Получилось?

Добавлено через 15 секунд
Цитата Сообщение от vindast Посмотреть сообщение
попробую, посмотрю что будет.
Получилось?
0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
03.06.2017, 11:21  [ТС] 17
Excalibur921, деффект остается, что при рендере в бОльшем разрешении с последующим сжатием, что при помощи мультисеплинга.

Добавлено через 43 секунды
Выложу код функции тени, надеюсь что я просто опять в упор не вижу у себя ошибку.

Добавлено через 11 минут
Код функции тени.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
float ShadowCalculation(vec3 normal) // возвращает 1 если не затенено, меньше одного - указывает на степень затенения
{
 
vec4 fragPosLightSpace =  ligthmat * vec4(pos,1);  // pos - позиция фрагмента в мировой системе координат, ligthmat  - матрица проекции света.
    vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w;
 
    if (abs(fragPosLightSpace.x) > 1 || abs(fragPosLightSpace.y) > 1) return 1; //отсечение если вышли за пределы карты тени
 
    projCoords = projCoords * 0.5 + 0.5;
 
 
    float ligthXnormalAngle = dot(normalize(normal), normalize(vec3( ambientligth_vec))); // угол между нормалью фрагмента и углом падения свет
 
    vec2 texelSize = textureSize(shadowMap, 0);
 
    float closestDepth = texture(shadowMap, projCoords.xy).r; 
    float currentDepth = projCoords.z;
    float biasarg =   17 / texelSize.r  *  ligthXnormalAngle;
 
    float bias =  biasarg * ligthXnormalAngle;
   bias = min(biasarg, bias);
 
     
    float shadow = 0.0f;
    int a = 2;
 
    for(int x = -a; x <= a; ++x)
    {
        for(int y = -a; y <= a; ++y)
        {
            float pcfDepth = texture(shadowMap, projCoords.xy + vec2(x, y)  / texelSize).r; 
            shadow +=  currentDepth + bias < pcfDepth  ? 1 : 0.0f;  
        }    
    }
    shadow /= (a*2 + 1 ) * (a*2 + 1 );
 
 
    return shadow;
}
Добавлено через 8 часов 51 минуту
Возникло такое предположение. openGl не могло самостоятельно создать мипмапы?
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,232
Записей в блоге: 5
03.06.2017, 11:49 18
тень идет ленеской только при больших углах обзора.
Ограничение флоата? Какие значения fovy, znear, zfar?
Попробуйте настроить камеру так чтобы дальняя отсекающая пл-ть была как можно дальше, а дальняя ближе
0
vindast
56 / 54 / 10
Регистрация: 25.04.2017
Сообщений: 509
03.06.2017, 12:02  [ТС] 19
snake32,

znear 1
zfar 10000

glm:erspective(45.0f, 1900.0f/ 1000.0f, 1, 10000);

Не по теме:

как тут смайл отрубить?



Я уже все варианты перебрал)
придется весь связанный код переписывать, что бы найти ошибку
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,232
Записей в блоге: 5
03.06.2017, 12:23 20
Цитата Сообщение от vindast Посмотреть сообщение
Возникло такое предположение. openGl не могло самостоятельно создать мипмапы?
Судя по коду вы всегда берёте 0 LOD
glSlang
1
vec2 texelSize = textureSize(shadowMap, 0);
я бы сделал так:
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
float shadow = 0.0f;
    int a = 2;
 
    for(int x = -a; x <= a; ++x)
    {
        for(int y = -a; y <= a; ++y)
        {
            float pcfDepth = textureOffset(shadowMap, projCoords.xy, ivec2(x, y)).r; 
            shadow +=  currentDepth + bias < pcfDepth  ? 1 : 0.0f;  
        }    
    }
    shadow /= (a*2 + 1 ) * (a*2 + 1 );
0
03.06.2017, 12:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2017, 12:23

Разобрал телефон Nokia c5-00, после того как собрал перестал включатся блютуз:( выдает операция не модет быть выполнена. С чем это связано и как испра
Разобрал телефон Nokia c5-00, после того как собрал перестал включатся блютуз:( выдает операция не...

Скорость отдачи в 14 раз больше скорости приёма. С чем может быть связано?
В общем я уезжал на денёк, вернулся встроенная сетевая карта не хочет видить кабель(хотя до этого...

Что это может быть? или как это называется? Меня взломали!
Доброго дня всем, мне по майл.ру.агент отправили сообщением так: Витя Гасай (08.03.2011 23:29)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru