Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
1

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

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

Author24 — интернет-сервис помощи студентам
Проблема на картинке.
Вопрос и статус в шапке.
Единственная догадка, возможно связано с фильтрами текстур, а то почти все текстуры хотят превратиться лесенки.
Эта лесинка сильно зависит от угла обзора на тень (см первый и второй скрин)
Миниатюры
Что не так с тенями и как это лечить? ( без понятия с чем может быть связано)  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2017, 23:43
Ответы с готовыми решениями:

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

Выключается компьютер каждые полчаса. С чем это может быть связано?
Выключается компьютер каждые полчаса. С чем это может быть связано?

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

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

22
 Аватар для snake32
3466 / 1649 / 236
Регистрация: 26.02.2009
Сообщений: 8,060
Записей в блоге: 6
29.05.2017, 20:03 2
vindast, нужно делать "мягкие тени". Тогда эффект лесенки будет менее заметен.
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
29.05.2017, 20:26  [ТС] 3
snake32, это они и есть (на основе фильра, поправьте если не прав). Скрин с другого ракурса грузиться не хочет.
0
 Аватар для snake32
3466 / 1649 / 236
Регистрация: 26.02.2009
Сообщений: 8,060
Записей в блоге: 6
29.05.2017, 20:30 4
vindast, а сколько выборок из текстуры тени делается?
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
30.05.2017, 01:37  [ТС] 5
пробовал с разными значениями (до 64)
деффект не уходит

Добавлено через 1 минуту
разрешение тени 8000 * 8000
при этом камера ( тени ) подвешена прямо над машиной.
то есть дело не в разрешении тени или выборок у фильтра.
не могу понять где еще может появиться такой дефект лесенки.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
30.05.2017, 17:30 6
Может быть примерно так:
Отключить сглаживание всему.
Рендерить картинку разрешения x4.
Сделать обычный суперсемплинг всему кадру.
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
31.05.2017, 02:09  [ТС] 7
Excalibur921, попробую, посмотрю что будет.
0
1912 / 774 / 108
Регистрация: 01.10.2012
Сообщений: 4,238
31.05.2017, 11:55 8
AA этот эффект не уберет, тени нужно самплить отдельно.
Цитата Сообщение от vindast Посмотреть сообщение
то есть дело не в разрешении тени или выборок у фильтра.
Именно в этом - тень должна размазываться если самплы подобраны верно. Для начала поставьте совсем бедное разрешение тени (хоть 100х100) и убедитесь что эффект есть. Потом увеличивайте расстояние до самплов (по-хорошему его надо считать)

Не по теме:

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

0
 Аватар для snake32
3466 / 1649 / 236
Регистрация: 26.02.2009
Сообщений: 8,060
Записей в блоге: 6
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
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
01.06.2017, 10:08  [ТС] 11
тень рисует еще до АА ...

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

Не по теме:

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

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

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

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

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

Добавлено через 31 секунду
В текстуре у тени нет мипмапов.
0
1912 / 774 / 108
Регистрация: 01.10.2012
Сообщений: 4,238
01.06.2017, 14:14 14
Цитата Сообщение от vindast Посмотреть сообщение
вы меня вообще не поняли.
Я говорю что тень ползет лесенкой при больших углах обзора, сколько выборок в фильтре не делай, какое разрешение не ставь.
Т.е. тень "не размазывается"?
Цитата Сообщение от vindast Посмотреть сообщение
И да, фильтр работает как должен.
Да как же так? Наверное я тут не к месту со своими неуклюжими советами. Понял, умолкаю
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
01.06.2017, 21:04  [ТС] 15
Igor3D, ой все.
Я сам не понимаю как это происходит.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
02.06.2017, 15:07 16
Цитата Сообщение от vindast Посмотреть сообщение
попробую, посмотрю что будет.
Получилось?

Добавлено через 15 секунд
Цитата Сообщение от vindast Посмотреть сообщение
попробую, посмотрю что будет.
Получилось?
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 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
3466 / 1649 / 236
Регистрация: 26.02.2009
Сообщений: 8,060
Записей в блоге: 6
03.06.2017, 11:49 18
тень идет ленеской только при больших углах обзора.
Ограничение флоата? Какие значения fovy, znear, zfar?
Попробуйте настроить камеру так чтобы дальняя отсекающая пл-ть была как можно дальше, а дальняя ближе
0
 Аватар для vindast
61 / 58 / 11
Регистрация: 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
3466 / 1649 / 236
Регистрация: 26.02.2009
Сообщений: 8,060
Записей в блоге: 6
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2017, 12:23
Помогаю со студенческими работами здесь

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

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

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

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


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

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

Новые блоги и статьи
Как обучить нейросеть создания картинок на Python
bytestream 24.01.2025
В эпоху цифровых технологий искусственный интеллект становится неотъемлемой частью творческого процесса. Особое место в этой области занимает разработка и обучение нейронных сетей для создания. . .
Как обучить нейросеть генерации текста на Python
bytestream 24.01.2025
В современном мире искусственный интеллект и машинное обучение становятся неотъемлемой частью многих технологических решений. Одной из наиболее интересных и востребованных задач в этой области. . .
Машинное обучение на Python
bytestream 24.01.2025
Введение в машинное обучение на Python Машинное обучение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, которая позволяет компьютерным системам. . .
Как удалить вирус-майнер с компьютера
hw_wired 24.01.2025
Вирусы-майнеры стали одной из наиболее серьезных угроз для пользователей компьютеров. Эти вредоносные программы тайно используют вычислительные ресурсы зараженного устройства для добычи криптовалюты. . .
Что такое веб-сервер, для чего он нужен и как работает
bytestream 24.01.2025
В современную эпоху цифровых технологий веб-сервер является фундаментальным компонентом интернет-инфраструктуры, обеспечивающим функционирование множества онлайн-сервисов и веб-сайтов. Этот. . .
Как в цикле for перебрать все элементы в словаре в Python
bytestream 24.01.2025
Словари в Python представляют собой мощные структуры данных, которые позволяют хранить информацию в формате ключ-значение. Эта особенность делает их незаменимыми при работе с данными, где требуется. . .
Как отменить rebase в Git
hw_wired 24.01.2025
Git rebase представляет собой мощный инструмент для управления историей коммитов в системе контроля версий Git. Этот механизм позволяет разработчикам изменять последовательность, комбинировать или. . .
Как поменять цвет input placeholder с помощью CSS
bytestream 24.01.2025
В веб-разработке оформление элементов пользовательского интерфейса играет ключевую роль в создании привлекательного и интуитивно понятного дизайна. Особое внимание уделяется формам ввода данных, где. . .
Как перебрать все значения в перечислении (enum) в C#
bytestream 24.01.2025
Перечисление (enum) в языке программирования C# представляет собой специальный тип данных, который позволяет определить набор именованных констант. Этот мощный инструмент особенно полезен, когда. . .
Как обойтись без проверки на null, чтобы избежать NullPointerExce­ption в Java
bytestream 24.01.2025
NullPointerException (NPE) является одним из самых распространенных исключений в Java, создающих серьезные проблемы при разработке программного обеспечения. Данное исключение возникает при попытке. . .
Что лучше использовать в href ссылок в JavaScript: "#" или "javascript:voi­­d(0)­"
bytestream 24.01.2025
При разработке веб-приложений важную роль играет правильное использование HTML-ссылок в сочетании с JavaScript. Одним из ключевых аспектов является выбор корректного значения атрибута href для. . .
Как узнать индекс элемента списка по его значению в Python
hw_wired 24.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только манипулировать элементами списка, но и определять их точное местоположение. Индекс элемента представляет собой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru