ФлеймФорумПрограммирование

Общие вопросы по программированию графония. (234 стр)

Страницы: 1233 234 235 236241 Следующая »
#3495
8:17, 17 июля 2025

ronniko
> Спекуляр свет
свет так не работает. с учетом что поверхность ровная, а нормаль одна на всю плоскость

#3496
(Правка: 8:56) 8:39, 17 июля 2025

То как работает свет это одно.
А вот то, как косячат в коде и в шейдерах это ещё та история.

По твоему скрину видно , что это свет.
Почему он появляется таким на кубе, тебе и предстоит выяснить и найти причину.

#3497
8:59, 17 июля 2025

war_zes
У меня такое бывало, когда не отсекался расчёт спека при угле между нормалью и светом больше 90 градусов.

#3498
8:42, 18 июля 2025

вот нашел как раз такой же эффект
https://github.com/bcrusco/Forward-Plus-Renderer

там прям видна это конусовидная капля белого света (особенно в видео).
он даже по форме похож на тоже что на моем скрине страницей раньше

и не естественна не только ее форма, но и ощущение как будто оно в землю уходит

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

#3499
18:54, 18 июля 2025

war_zes
Зачем тебе освещение, когда у тебя нечего освещать?

#3500
(Правка: 14:19) 14:16, 4 авг 2025

Разбираю программирование с шейдерами HLSL Directx 9 + Delphi 7. Возникло затруднение при использовании текстуры в пиксельном шейдере (считать значение чтобы модулировать цвет, комбинировать и т.д.). Пример работает (картинка с вращающимся кубиком есть), но напрочь отказывается менять результат на выходе пиксельного шейдера. Т.е. менять яркость, текстурные координаты в шейдере не получается.
Подскажите, пожалуйста.

Действия с пиксельным шейдером в программе:

+ Показать

Шейдеры:
Фрагментный:

+ Показать

Пиксельный:

+ Показать

Весь текст программы: Пример использования шейдеров в DirectX 9

+ Показать
#3501
15:10, 4 авг 2025

true_bump

+ чатбот
#3502
(Правка: 15:13) 15:10, 4 авг 2025

true_bump
Так какой FVF с шейдерами? Там Vertex Declaration

Хз как это вообще работает без VertexDecl, Pure скорее всего выдал бы ошибку и ничего не нарисовал

#3503
15:21, 4 авг 2025

master-sheff, спасибо за справку! Попробую внести исправления.

monobogdan
>VertexDecl
Да, там должно быть что-то такое (смутные воспоминания, изучал шейдеры в 2014 году, но с тех пор ничего не сохранилось)

#3504
16:17, 4 авг 2025

Есть статьи по менеджменту памяти для кадра (фрейма, тика) рендера? Менеджмент памяти текстур, нюансы управления памятью объектов графики. Интересуют именно статьи. Накидайте плиз, ежели таковы знаете.

#3505
20:36, 7 авг 2025

master-sheff, подсказки нейросети оказались полезными! В принципе, всё работает, удалось в шейдере считать условный тексель и менять его спектр

monobogdan
>VertexDecl
Работает и без Vertex Declaration. Но, да, он должен быть. Добавил его в пример (используя переведённые на Паскаль примеры из DirectX SDK и случайно найденную в интернете книгу Фрэнка Д. Луны), но, картинка в результате сломалась. Либо не рисует ничего, либо рисует как бы без учёта действий во фрагментном шейдере (кубик в одной проекции без учёта вращения).

Const  
  decl: array[0..1] of TD3DVertexElement9 =
  (
    (Stream:0; Offset:0;  _Type:D3DDECLTYPE_FLOAT3; Method:D3DDECLMETHOD_DEFAULT; Usage:D3DDECLUSAGE_POSITION; UsageIndex:0),  
    (Stream:0; Offset:12; _Type:D3DDECLTYPE_FLOAT2; Method:D3DDECLMETHOD_DEFAULT; Usage:D3DDECLUSAGE_TEXCOORD; UsageIndex:0)
  );

  D3DFVF_VERTEX_NORMAL_TEX3 = D3DFVF_XYZ or D3DFVF_TEX1;

Var
  g_pVertexDeclaration: IDirect3DVertexDeclaration9;
//...
  Result:= FD3DDevice.CreateVertexDeclaration(@decl, g_pVertexDeclaration);
  if Failed(Result) then Exit;
//...
  SetVertexDeclaration(g_pVertexDeclaration);
#3506
(Правка: 4:31) 4:27, 4 сен 2025

какое из двух скринов визуально правильное?

+ Показать

это я разбираюсь с темой srgb

в первом варианте у меня включен glEnable(GL_FRAMEBUFFER_SRGB);
текстура фреймбуфера создана с типом R8G8B8A8_SRGB
текстура diffuse у моделек создана также с R8G8B8A8_SRGB

во втором варианте тоже самое, но текстура diffuse у моделек создана как R8G8B8A8_UNORM

текстура просто накладывается vec4 albedo = texture(diffuseTexture, fragTexCoord);


мне второй вариант нравится больше. в первом на всех моих мониторах темный мрак

но иишка говорит что именно первый вариант правильный, и что так и должно быть - сцена должна быть темно (я у ней специально это уточнял - и говорит что осветление сцены - это как раз некоректно)

Темнеющая сцена — это не ошибка, это исправление ошибки.
Ты перешёл от неправильного (слишком яркого) рендеринга к физически корректному.

так всеже как лучше делать? Может потом, когда буду накручивать освещение - оно там все станет лучше выглядеть?

И вообще есть какой-то визуальный тест который такие вещи проверяет? ну свидетели юнит-тестов должны же как-то тестировать что все правильно включено в sRGB

#3507
(Правка: 5:33) 5:31, 4 сен 2025

какая же это невнятная тема. почему если я рисую цветом 127;127;127 то на экране должно рисоваться цветом 188;188;188 и это правильно? это же вообще другой цвет по сути. иишка тоже не объясняет

vec3(0.5) — это число в линейном цветовом пространстве
#808080 — это sRGB-кодировка того же визуального серого

👉 Они не равны по физической яркости.

что значит они не равны? это тупо один и тот же цвет. как он может быть не тем же самым.

Цель GL_FRAMEBUFFER_SRGB — скомпенсировать нелинейность монитора, чтобы 0.5 в линейном пространстве выглядело как 50% яркости.

так я не вижу 50% яркости. Я вижу 30% яркости серого от силы... может это на дешманских мониторах так, а на топовых там все тип топ? ну не понимаю как 20-30% яркости глаз должен воспринимать как 50%.

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

#3508
9:29, 4 сен 2025

war_zes
> какая же это невнятная тема. почему если я рисую цветом 127;127;127 то на экране должно рисоваться цветом 188;188;188 и это правильно?
Экономия данных, вполне объяснимо.
256 градаций яркости - это не так уж много, глаз замечает разницу между соседями, особенно внизу диапазона. Почему? Да потому, что, если взять линейную шкалу, то будет 20 - это вдвое ярче, чем 10, на 100%, а 210 - всего лишь на 5% ярче, чем 200. Поэтому шкала смещена так, чтобы внизу было гуще. По идее, вообще нужна логарифмическая шкала, но у неё нет нуля, поэтому выбрали степень 1/2.2.
Да, это создаёт неудобства - для любых преобразований цвета нужно сначала делать гамма коррекцию в одно сторону, в линейную шкалу, потом выполнять все преобразования, а потом обратная гамма коррекция.

#3509
10:28, 4 сен 2025

Давно читал, что человеческие органы чувств в основном экспоненциальные.
На примере света это значит вот что - возьмём одинаковые лампочки. Сперва зажгём одну и скажем, что этот уровень освещения это "базис". Теперь добавим еще одну лампочку - глаз увидит увеличение ярости. Назовём это "яркость увеличилась на одну величину". Так вот теперь чтобы субъективно увеличить яркость еще НА одну величину придётся добавить 2 лампочки. А чтобы еще на одну - 4. И так далее.
То же самое касается восприятия громкости - поэтому там децибелы, т.е. логарифмическая шкала для оценки степени громкости звука.

Страницы: 1233 234 235 236241 Следующая »
ФлеймФорумПрограммирование