Size: a a a

pro.graphon (and gamedev)

2020 February 11

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Fr Mr
Не понял?
В SetPositions передавать одно, а в SetNormals вообще что-то левое. Почему это два метода?
источник

FM

Fr Mr in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
В SetPositions передавать одно, а в SetNormals вообще что-то левое. Почему это два метода?
Ну у тебя условно plane_position = {...} plane_normal = {}
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Lain-dono
Всё, что можно оставить на время компейляции, лучше оставить именно там.
Как ты во время компиляции создашь в драйвере у конечного пользователя PSO? Мы о PSO говорим
источник

d

disba1ancer in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
В SetPositions передавать одно, а в SetNormals вообще что-то левое. Почему это два метода?
только вот эти функции мне не нужны, вместо них просто реализуешь интерфейс и записываешь в буферы того кто попросит когда попросят
источник

FM

Fr Mr in pro.graphon (and gamedev)
Естественно если у тебя не совпадает количество элементов
источник

FM

Fr Mr in pro.graphon (and gamedev)
То это ошибка
источник

L

Lain-dono in pro.graphon (and gamedev)
Ну яб сделал примерно что-то такое:

Renderer<Layout>
Primitive<Layout>

Т.е. примитивы определённого формата можно сувать только в определённые штуки, которые их едят.
источник

L

Lain-dono in pro.graphon (and gamedev)
disba1ancer
class IMesh {
public:
 struct vertex {
   math::vec4 pos;
   math::vec3 norm;
   math::vec3 tang;
   math::vec2 uv;
   std::uint32_t matID;
 };
 struct buffer_info {
   std::uint32_t verticesCount;
   std::uint32_t trianglesCount;
 } getBufferElementsCount() = 0;
 void fillBuffers(vertex* vertexBuffer, std::uint32_t* triangleBuffer) = 0;
 Material* matFromID(std::uint32_t id) = 0;
protected:
 ~IMesh() = default;
};

кто что скажет насчёт интерфейса меша?
Т.е. для вот этого конкретный формат vertex в качестве параметра этапа компиляции.
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Fr Mr
А что плохого?
AOS плохо тем, что тебе под каждый формат вершин придётся для вещей, где пофиг на всякие нормали и касательные (все пассы, которые пишут только в глубину, а не в цвет), создавать разные input layouts, а это на GPU лишние контексты, а ещё у тебя данные лежат в таких пассах менее плотно тогда, хуже для кэша
источник

L

Lain-dono in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
AOS плохо тем, что тебе под каждый формат вершин придётся для вещей, где пофиг на всякие нормали и касательные (все пассы, которые пишут только в глубину, а не в цвет), создавать разные input layouts, а это на GPU лишние контексты, а ещё у тебя данные лежат в таких пассах менее плотно тогда, хуже для кэша
В таком случае лучше разделять SOA не на каждый параметр, а сгруппировать их.
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
disba1ancer
только вот эти функции мне не нужны, вместо них просто реализуешь интерфейс и записываешь в буферы того кто попросит когда попросят
Вот да, да меш это ресурс с диска вообще, const, какие у него могут быть сеттеры
источник

FM

Fr Mr in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
AOS плохо тем, что тебе под каждый формат вершин придётся для вещей, где пофиг на всякие нормали и касательные (все пассы, которые пишут только в глубину, а не в цвет), создавать разные input layouts, а это на GPU лишние контексты, а ещё у тебя данные лежат в таких пассах менее плотно тогда, хуже для кэша
Ну так а трафик по памяти уменьшается
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Lain-dono
Ну яб сделал примерно что-то такое:

Renderer<Layout>
Primitive<Layout>

Т.е. примитивы определённого формата можно сувать только в определённые штуки, которые их едят.
Depth prepass должен всё есть, что скормили
источник

d

disba1ancer in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Вот да, да меш это ресурс с диска вообще, const, какие у него могут быть сеттеры
к этому интерфейсу вполне можно динмеш прикрутить, и у этой реализации будут всякие get set, но там явно будет иначе всё
источник

FM

Fr Mr in pro.graphon (and gamedev)
Не думаю что создание нескольких дополнительных PSO изменит картину
источник

d

disba1ancer in pro.graphon (and gamedev)
Lain-dono
Ну яб сделал примерно что-то такое:

Renderer<Layout>
Primitive<Layout>

Т.е. примитивы определённого формата можно сувать только в определённые штуки, которые их едят.
яннп
источник

FM

Fr Mr in pro.graphon (and gamedev)
Ведь для DepthPass тебе все равно придеться создавать PSO
источник

FM

Fr Mr in pro.graphon (and gamedev)
Отдельный
источник

L

Lain-dono in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Depth prepass должен всё есть, что скормили
В том смысле, что делим данные меша на две части: одна, которая требуется для depth-пассов, а другая "остальное".
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Lain-dono
В таком случае лучше разделять SOA не на каждый параметр, а сгруппировать их.
Может быть, да. Для записи в глубину без альфатеста надо только позиции, с альфатестом — позиции и текстурные координаты. Нормали и касательные рядом положить вполне есть смысл, да
источник