Войти
ПрограммированиеФорумГрафика

DepthStencil: переход от 2-pass к 1-pass (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
(Правка: 11:02) 11:01, 9 апр. 2019

innuendo
> что там доделывать ? работы на полчаса же
:-) Ок, распишем:
1) добавление и настройка RenderTarget, поиск подходящего формата;
2) модификация шейдеров всех материалов, а их блин 10 (на каждый формат вершины + признак рельефности — свой шейдер), переорганизация шейдеров (половина шейдеров компилилась под FL_9_1, теперь это невозможно);
3) высокоуровневые механизмы — формирование списка Id, обработка клика, конфликты с навигацией;
4) возня с высокоуровневым кодом отрисовки — каждый заинтересованный объект должен отметиться;
5) отладка (например, пришлось поправить BlendState).


#31
11:10, 9 апр. 2019

вон оно как бывает :)

#32
22:13, 9 апр. 2019

Как-то делал для некоторых людей пример ресолва збуффера, может полезно будет:

https://github.com/guycalledfrank/resolveDepthMSAA11/blob/master/… main.cpp#L122
https://github.com/guycalledfrank/resolveDepthMSAA11/blob/master/… engine.h#L522

Там много граблей, на которые можно наступить, особенно в угадывании правильного сочетания форматов для ресурса/RTV/SRV.

#33
22:15, 9 апр. 2019

Mr F
> особенно в угадывании правильного сочетания форматов для ресурса/RTV/SRV.

этого не понял

#34
9:39, 10 апр. 2019

innuendo
См. бранчи на второй ссылке

#35
10:31, 10 апр. 2019

Mr F

> См. бранчи на второй ссылке

я думал что-то ужасное :)

#36
(Правка: 13:49) 13:43, 11 апр. 2019

Mr F
> Как-то делал для некоторых людей пример ресолва збуффера, может полезно будет
Конечно будет, спасибо! Даже при беглом просмотре заметил интересности: целевая текстура глубины имеет только 1 семпл, значит сглаживания не будет, но зачем тогда указывать MultisampleEnable=False в RasterState? Не имеет значения? (очень кстати соседняя тема про спецификации D3D — "The MultisampleEnable Rasterizer State remains as an awkward leftover from D3D9")

Ещё нашёл в тему копирования MSAA-текстур:
https://gamedev.ru/code/forum/?id=144408

P.S. Похоже, целочисленные MSAA-текстуры тоже придётся прогонять через подобные шейдеры.

#37
(Правка: 17:10) 13:50, 11 апр. 2019

VsM
> но зачем тогда указывать MultisampleEnable=False в RasterState?

шо бы прописывались семплы ?

VsM
> P.S. Похоже, целочисленные MSAA-текстуры тоже придётся прогонять через подобные
> шейдеры.

шо вы таки хотите?

#38
(Правка: 13:59) 13:44, 19 апр. 2019

Вернулся к теме копирования MSAA-глубины, и вроде даже получилось. Остались такие моменты:

1) Подключить Texture2DMS<float> без указания SampleCount можно только начиная с версии шейдеров 4.1. В версии 4.0, как я понял, пришлось бы тупо копировать шейдер с разными константами (2, 4, 8...).

2) Не покидает ощущение что это не оптимальный путь. Возможно, лучше использовать просто копирование MSAA в ОЗУ, и научиться там читать значения (больше памяти, проще код)? Или вообще спрашивать глубину у видеокарты с помощью какого-то хитрого запроса?

#39
14:20, 19 апр. 2019

найди примеры 10.1 в dxsdk

#40
(Правка: 10:49) 10:48, 22 апр. 2019

innuendo
> найди примеры 10.1 в dxsdk
Пока сделал что хотел на шейдерах 4.1. Один шейдер, который копирует из ресурса в RenderTarget, и хотя тип семпла объявлен как float, работает и для D24-, и для D32-, и даже для UINT-текстуры.

Примеры освежил. Выделение объектов замешано на процессоре и DXUT, поэтому неинтересно. Про MSAA нашёл в примере DepthOfField10.1, вроде ничего нового, кроме путаницы в терминологии:

> The <float,1> afterwards signifies that each sample contains 1 float value.
По мне, это означает, что внутри текселя хранится один семпл cо значением типа float. А у них получилось, что цифра управляет количеством значений в семпле.

#41
10:52, 22 апр. 2019

VsM
> А у них получилось, что цифра управляет количеством значений в семпле.

в семле не может быть значений - он сам содержится в пикселе

ты хоть видел картинки как работает msaa?

#42
(Правка: 10:59) 10:58, 22 апр. 2019

innuendo
> в семле не может быть значений - он сам содержится в пикселе
Картинки видел, это не мои слова: "each sample contains 1 float value".

P.S. Насчёт UINT я рано обрадовался, ворнинги-то сыпятся :-)

#43
11:15, 22 апр. 2019

VsM
> это не мои слова: "each sample contains 1 float value".

это depth? вот там и есть один float

найди пример custom resolve

#44
11:16, 22 апр. 2019

Texture2DMS<float4, SAMPLES> HdrMS: register(t0);

float4 psTonemapMS(PsInTonemap In) : SV_Target
{
  int3 coord;
  coord.xy = (int2) In.pos.xy;
  coord.z = 0;

  float4 sum = 0;

  [unroll]
  for (int i = 0; i < SAMPLES; i++)
  {
    // Grab a sample from MSAA buffer
    float4 c = HdrMS.Load(coord, i);

    // Tonemapping
    c.rgb = 1.0 - exp2(-exposure * c.rgb);
    sum.rgb += c.rgb;
  }

  // Average
  sum *= (1.0 / SAMPLES);

  // Gamma
  sum.rgb = pow(sum.rgb, 1.0 / 2.2);

  return sum;
}

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика