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

Аццкий спор про инстансинг

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 319 20 Следующая »
#0
22:57, 26 окт. 2016

Спор разных перцов про инсансинг (а то всё во флейм уехало)

Итак, варианты:

1) Делаем только через PER_INSTANCE аттрибут в InputLayout или ставим divisor
2) Делаем только черех SV_InstanceID и не используем PER_INSTANCE/divisor (инстанс данные через cbuffer/tbuffer/structred и тд)
3) Смешанный вариант

Выяснилось,
что в основном PER_INSTANCE используют:

CryEngine/UnrealEngine

SV_InstancaID в Frostbite(DICE) http://www.slideshare.net/DICEStudio/directx-11-rendering-in-battlefield-3

/Unity/Hellgate London/http://www.shiningrocksoftware.com/2013-05-29-adventures-in-optimization/

NVidia рекомендует(http://developer.download.nvidia.com/presentations/2007/gdc/UsingD3D10Now.pdf стр 66) через SV_InstanceID,
AMD через stream

Потом ещё добавлю :)

Ну если и демо считать
вариант 2
http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/Ski… hitePaper.pdf
http://developer.download.nvidia.com/presentations/2008/GDC/Inst_… ompatible.pdf
NVSDK11 Hair11

В  Orge в примерах истансинга матрицы через cbuffer/uniform передаются, а сам index через texCoord :)
В Torque изначально был 1, но в итоге получится смешанный


#1
23:03, 26 окт. 2016

innuendo
Я голосую за 3) Смешанный вариант

#2
23:11, 26 окт. 2016

Я голосую за 3) Смешанный вариант
1) варинат мне пока не понадобился,
2) вариант я реализовал для нескольких задач, в том числе и для частиц.
По PER_INSTANCE больше примеров в интернете. К примеру от того же интел:
https://software.intel.com/en-us/articles/rendering-grass-with-in… in-directx-10

#3
0:38, 27 окт. 2016

2 вариант в разы удобнее. Первый после него кажется каким-то костыльным.

#4
0:51, 27 окт. 2016

Che@ter
А мне кажется наоборот.
Мы же не читаем вертексы по vertexId.
А инстансы чем отличаются?

#5
1:08, 27 окт. 2016

innuendo
> http://developer.download.nvidia.com/presentations/2008/GDC/Inst_…
> ompatible.pdf
Эта дока вообще мимо. Там костыль тесселяции через инстансинг. Там даже вертексы получают через SV_VertexID. Или ты сейчас расскажешь, что атрибуты не нужны, и тру посоны делаеют только через SV_VertexID?

#6
1:38, 27 окт. 2016

Che@ter
> 2 вариант в разы удобнее. Первый после него кажется каким-то костыльным.
Плюсую.

#7
1:59, 27 окт. 2016

-Eugene-
> Мы же не читаем вертексы по vertexId.
Аналогично читаю. После него чтение через InputLayout кажется каким-то костыльным.

#8
2:07, 27 окт. 2016

Che@ter
> После него чтение через InputLayout кажется каким-то костыльным.
Как быть с разными форматами вершин? Когда цвет или нормаль в вершине например представлены как byte4. Или short2.

#9
7:31, 27 окт. 2016

MrShoor
> Как быть с разными форматами вершин? Когда цвет или нормаль в вершине например
> представлены как byte4. Или short2.
Так это уже не имеет особого отношения к инстансингу. Все эти подвиды вертекс-фактори и так обрабатываются препроцессорными директивами (не только для инстансинга).

#10
7:42, 27 окт. 2016

Vine
Ты не понял. Вопрос - как делать доступ к ним из шейдера в случае с SV_InstanceID? Ну то есть насколько это удобно?

#11
7:54, 27 окт. 2016

MrShoor
Приведи псевдокод вершинного шейдера. Я не понимаю о чём ты говоришь.

#12
8:07, 27 окт. 2016

вершинный шейдер, структура объявлена как:

struct VS_IN {
  float3 pos : pos;
  float3 norm : norm;
  float4 color : color;
}

структура вершины в вершинном буфере:

struct Vertex {
  vec3 offset;
  byte4 norm;
  byte4 color;
}

Насколько удобно такое доставать по SV_VertexID?

#13
8:13, 27 окт. 2016

Ну если кто-то хочет услышать моё мнение, то я предпочитаю 2 :)

#14
8:15, 27 окт. 2016

innuendo
Вершины по SV_VertexID тоже достаешь?

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

Тема в архиве.