Size: a a a

pro.graphon (and gamedev)

2020 October 23

PL

Peter Leontev in pro.graphon (and gamedev)
Работаю с block compressed текстурками. Пытаюсь их тайлить вручную. Немного не понимаю memory layout.

Допустим у меня текстурка разрешением 4x4 (DXT5) = 16 байт. Я хочу из неё сделать текстуру разрешением 8x8 (DXT5) = 64 байта.
Я ведь правильно понимаю, что мне нужно взять 16 байт (каждый блок по сути самодостаточен) и откопировать их  3 раза?
Тогда результирующие 64 байта будут нужной мне текстурой 8x8 (DXT5) ?
источник

k

koren in pro.graphon (and gamedev)
Peter Leontev
Работаю с block compressed текстурками. Пытаюсь их тайлить вручную. Немного не понимаю memory layout.

Допустим у меня текстурка разрешением 4x4 (DXT5) = 16 байт. Я хочу из неё сделать текстуру разрешением 8x8 (DXT5) = 64 байта.
Я ведь правильно понимаю, что мне нужно взять 16 байт (каждый блок по сути самодостаточен) и откопировать их  3 раза?
Тогда результирующие 64 байта будут нужной мне текстурой 8x8 (DXT5) ?
Верно
источник

k

koren in pro.graphon (and gamedev)
Но порядок в памяти будет такой:
a1, e1, i1, m1, a2, e2, i2, m2, b1 f1, j1, n1, b2, f2, j2. n2, ...
источник

PL

Peter Leontev in pro.graphon (and gamedev)
koren
Но порядок в памяти будет такой:
a1, e1, i1, m1, a2, e2, i2, m2, b1 f1, j1, n1, b2, f2, j2. n2, ...
Хмм, тогда ведь тайлинга не получится? Я вот скорее всего не понимаю, как GPU будет обрабатывать/считывать эти байты
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Peter Leontev
Работаю с block compressed текстурками. Пытаюсь их тайлить вручную. Немного не понимаю memory layout.

Допустим у меня текстурка разрешением 4x4 (DXT5) = 16 байт. Я хочу из неё сделать текстуру разрешением 8x8 (DXT5) = 64 байта.
Я ведь правильно понимаю, что мне нужно взять 16 байт (каждый блок по сути самодостаточен) и откопировать их  3 раза?
Тогда результирующие 64 байта будут нужной мне текстурой 8x8 (DXT5) ?
1 блок 4x4 — это, считай, 1 пиксель R32G32 или R32G32B32A32, атомарен с точки зрения хранения
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Peter Leontev
Хмм, тогда ведь тайлинга не получится? Я вот скорее всего не понимаю, как GPU будет обрабатывать/считывать эти байты
на PC за тайлинг отвечает драйвер, не твоя забота
источник

PL

Peter Leontev in pro.graphon (and gamedev)
Timur Gagiev
на PC за тайлинг отвечает драйвер, не твоя забота
мне надо чтобы визуально тайлинг точно проявился
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Peter Leontev
мне надо чтобы визуально тайлинг точно проявился
А для чего?
источник

k

koren in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
1 блок 4x4 — это, считай, 1 пиксель R32G32 или R32G32B32A32, атомарен с точки зрения хранения
RGBA32F это скорее
источник

k

koren in pro.graphon (and gamedev)
RGBA16 - 64 бита. Хватит только для BC1 (DXT1)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
koren
RGBA32F это скорее
Я про то, что аппаратная плитка 8x8 на GCN со сжатием будет хранить в себе 8x8 целостных блоков, а не 8x8 отдельных пикселей
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Peter Leontev
мне надо чтобы визуально тайлинг точно проявился
тогда тебе в вулкан или на консоли
источник

PL

Peter Leontev in pro.graphon (and gamedev)
в моём контексте я жду текстурные тайлы с сервера. Допустим стандартный размер тайла 128x128 px. А мне пришло 4x4 px, мне нужно сделать для него *тайлинг*. Для простоты, пусть все тайлы приходят в формате block compressed
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Peter Leontev
в моём контексте я жду текстурные тайлы с сервера. Допустим стандартный размер тайла 128x128 px. А мне пришло 4x4 px, мне нужно сделать для него *тайлинг*. Для простоты, пусть все тайлы приходят в формате block compressed
Тут либо на draw calls резать с разными текстурами, либо bindless, либо sparse texture
источник

PL

Peter Leontev in pro.graphon (and gamedev)
То есть по сути без декодинга из block compressed в какой-нибудь raw RGBA не получится затайлить текстурку в формате block compressed до нужного размера?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Peter Leontev
То есть по сути без декодинга из block compressed в какой-нибудь raw RGBA не получится затайлить текстурку в формате block compressed до нужного размера?
А зачем тебе замощение именно, повторением много раз одного и того же изображения?
источник

PL

Peter Leontev in pro.graphon (and gamedev)
Timur Gagiev
тогда тебе в вулкан или на консоли
у меня DX11 (к сожалению/к счастью)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Тут вообще твоя задача никак со сжатием и с форматами не связана
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Peter Leontev
в моём контексте я жду текстурные тайлы с сервера. Допустим стандартный размер тайла 128x128 px. А мне пришло 4x4 px, мне нужно сделать для него *тайлинг*. Для простоты, пусть все тайлы приходят в формате block compressed
Просто считай со сжатием, что у тебя размер тайла 32x32 жирных пикселя, а тебе пришёл 1x1 жирный пиксель
источник

PL

Peter Leontev in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
А зачем тебе замощение именно, повторением много раз одного и того же изображения?
Хороший вопрос. В целом любой способ текстурной адресации подойдет (wrap/clamp/mirror).
источник