TGViewer
Channel Public Channel
Прогаем с кенгурой

Прогаем с кенгурой

@coding_with_kangaroo

Сидим с кенгурой под горой, запекаем текстуры...

{ программирование, процедурная генерация, графика, аудио, образование и немного про специфичные игры }

https://gostrobrod.dev

https://boosty.to/gostrobrod
Subscribers
237
Photos
224
Videos
201
Links
182

Showing posts older than #601 · Back to latest

Older Posts 20 shown
Post #599 230
Так как все лимиты кодекса я сжигаю на новой работе, обнаружил, что можно делать (пусть и вслепую) вполне годные инструменты просто в чатгпт. Вот такую тулу наваял в несколько итераций для подготовки картинок для раскраски
  • 🔥 7
  • 💩 1
Post #598 254
Вот еще разное, но исправленное. Все еще нужны бетатестеры-добровольцы)))
  • 🔥 6
Post #597 210
Зацените эффект с автоматическим завершением цвета

Пысы: только сейчас на видео заметил, что у меня z не в ту сторону смотрит
  • 🔥 4
Post #596 189
Допилил основные механики раскраски - пришло время рисовать ассеты (сильно не пинайте, я не художник) и полировать гую (и не дизайнер)

Весьма медитативное занятие.

Скоро будет готово для бета тестов - если есть желающие с ios-девайсами, пишите - добавлю в TF.
  • 🔥 3
Post #595 212
Физарум и проектор за $30 с алика
  • 🔥 7
  • 👀 1
Post #594 237
Помните эксперименты с тайлами на генуарий? Нашел им применение. Делаю раскраску по заявке ребёнка. Кстати и линза пригодилась
  • 🔥 6
Post #593 204
Прогаем с кенгурой Физарум в живой природе
Можно заказать чашек петри и высадить его на них
Post #592 200
Физарум в живой природе
  • ❤ 1
  • 🤯 1
Post #591 228
AntialiaingDemo.zip99.5 KB
Демка для потыкать. Половина негенерена кодексом так что не ругайтесь
  • 👍 3
Post #590 195
1-mipmap.png3.1 MB
Это не совсем про антиалиасинг, но про работу с артефактами интерполяции.Если вы возьмете текстуру и просто отрисуете ее лажащей в XZ плоскости в перспективной проекции, то по мере удаления ваша текстура превратится в кашу даже с линейной интерполяцией (билинейной на самом деле).

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

Решается это через мипмапы (пирамида, где каждый следующий слой это х2 меньшая картинка). Там при сэмплинге соовтествующих пикселей не теряется информация, потому как при генерации у нас усредняются попарно все соседние пиксели. Тут есть два варианта:

1. При загрузке текстуры через MTKTextureLoader указывать MTKTextureLoader.Option.generateMipmaps: true.
2. При создании тексутры указывать что нужны мипмапы и пото генерировать блит операцией (`blit.generateMipmaps(for: texture)`).

Далее мы можем включить трилинейную интерполяцию: значение будет браться средним по ближайшим слоям мипмапа, а потом еще и между ними. В итоге получается гладенько красиво. Все, что надо, указать .mipFilter=.linear или mip_filter::linear (смотря где вы его создаете) при создании сэмплера.

Это может быть полезно для нормальной отрисовки геометрии, если вы, скажем отрисовали линию на текстуре, а потом натягиваете эту плоскость на что-то еще. Вот чтобы эту линию не попердолило, лучше генерировать мипамап пердварительно. Делается это довольно быстро на фоне всего остального, но жрет х1.5 памяти.
  • 👍 2
Post #589 147
6-subpixel.png9.1 MB
Если вы особые ценители прекрасного, то для вас еще есть и субпиксельный антиалиасинг. Его вы скорее всего видели на шрифтах (когда на символах будто цветовая аберрация).

Суть его в том, что мы используем каналы пикселя (часто это тупо три палочки RGB), то есть мы делим пиксель на три трети и в зависимости от покрытия заливаем их соответствующим образом.

Техника эта зависит от реализации матрицы дисплея, потому не факт, что супер универсально.
  • 🔥 4
Post #588 134
5-derivatives.png841.1 KB
MSAA - это все здорово, но часто дорого.

Если у вас задача про процедурную геометрию на базе SDF например, то дешевле использовать производные и smoothstep:


float d = length(uv) - 0.55;
float aaMask = 1.0 - smoothstep(-fwidth(d), fwidth(d), d);
  • 👍 1
Post #587 137
3-persample.png853.3 KB
Вот чтобы делать MSAA буквально как суперсэмплинг, во фрагментном шейдере нужно обрабатывать каждый сэмпл (`[[sample_id]]`) отдельно по типу такого:


fragment float4 circle_msaa_persample_fragment(TriangleOut in [[stage_in]],
constant ScreenUniforms &screen [[buffer(0)]],
uint sampleID [[sample_id]]) {
const float2 sampleOffsets[4] = {
float2(-0.125, -0.375),
float2(0.375, -0.125),
float2(-0.375, 0.125),
float2(0.125, 0.375)
};

float2 pixel = in.position.xy + sampleOffsets[sampleID & 3u];
float2 ndc = demoPixelToNdc(pixel, screen.resolution);
float3 color = demoTriangleCircleColor(ndc, 1.0);
return float4(color, 1.0);
}


Проект я потом отдельно прикреплю.
  • 👍 1
Post #586 130
2-msaa.png827.4 KB
Чтобы не городить огород, во всех нормальных фреймворках есть встроенный мультисэмплинг. В Метал-е для этого нужно указать число сэмплов у пайплайна и таргет текстуры (+ тип текстуры `.type2DMultisample`), а у энкодера будет что-то такое в рендер таргетах:


let pass = MTLRenderPassDescriptor()
pass.colorAttachments[0].texture = msaaTexture
pass.colorAttachments[0].resolveTexture = resolveTexture
pass.colorAttachments[0].loadAction = .clear
pass.colorAttachments[0].storeAction = .multisampleResolve


Что мы тут видим: фрагменты летят по числу сэмплов в msaaTexture, а потом уже резолвятся в выходную текстуру resolveTexture. По дефолту оно будет у вас антиалиасить только геометрию, которая идет через пиксели. Внутри геометрии все будет по прежнему. Об этом дальше.
  • 👍 1
Post #585 138
4-manual-msaa.png849.5 KB
Итак, по заявкам трудящихся расскажу, как рисовать гладкие полигоны и линии (анти-алиасинг)

Самый простой способ антиалиасинга - суперсэмплинг.

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

Самый простой (но не самый экономный) способ - отрисовать в текстуру в два раза больше, а потом обратно в нужный размер с линейной интерполяцией. Будет красота по всей сцене, но вам надо х3 памяти, и x5 пиксельрейт. Не самая экономная штука в общем.

Я буду прикреплять картинку как есть, чтобы можно было поразглядывать
  • 👍 1
Post #584 204
Этой песне больше 60 лет. Она была написана задолго до рождения киберпанка, интернета и всего вот этого цифрового. Но сейчас в ней больше киберпанка, смысла и актуальности, чем во всем опопсевшем ныне кибер”панке”.

https://youtu.be/6ukmjBSQY-c?si=GsFuWdIcVJHdw0Ln
YouTube Simon and Garfunkel - The Sound of Silence (1966) "The Sound of Silence" is a song by singer-songwriter duo Simon & Garfunkel. Written in February 1964 by Paul Simon in the aftermath of the 1963 assassination of John F. Kennedy, the song propelled the group to mainstream popularity. An initial version preferred…
  • 🔥 5
  • 👍 1
Post #582 180
Пока я пилю вторую часть (решил все-таки уместить в две), вот вам современное искусство
  • 🔥 4
  • 😁 4
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →