TGViewer
generative camera blog generative camera blog @generative_photography · 117 subscribers
Post #528 139
Poetry.

Во время изучения шейдинга я часто встречал примеры максимально компактного кода, в котором на первом месте стояла краткость написания, а не удобство чтения. Следуя этой традиции я тоже старался:

1. Экономить символы и пробелы.
2. Давать переменным однобуквенные имена.
3. Записывать формулы целиком в длинные строки.

Выглядело это примерно так:

float a = clamp(fg2circ(uv,vec2(0.5)+m,1.2+distance(vec2(0.5),vec2(MX,MY)),k*A),0.0,1.0);


Многие программисты также экономили нули, записывая «1.» вместо «1.0» и «.5» вместо «0.5», но приучить себя к этому мне не удалось.

В фильтрах для lowercase я решил уйти от подобного сжатия в сторону того, что мне тогда казалось более прозрачным или даже «поэтичным» форматированием кода. Для этого я начал придерживаться таких правил:

1. Давать переменным короткие, но понятные имена.
2. Чаще создавать и именовать новые переменные.
3. Использовать минимум математических операций на строку.
4. Выстраивать код скорее вертикально, чем горизонтально.
5. Группировать строки как по смыслу, так и по визуальному сходству.

Мне хотелось, чтобы внешне код фильтра напоминал что-то вроде стихотворения:

vec3  blur = texture(texBlurry, vUv).rgb;
vec3 main = texture(texCamera, vUv).rgb;
vec3 tear = mixDifference(main, blur, 1.0);
vec2 down = vUv + vec2(0.0, 0.01*(blur.g-0.5));
vec3 feed = texture(texOutput, down).rgb;
vec3 ctrl = tear * (1.0-uMouse.x);
tear = mixDifference(tear, feed, 1.5);
float drop = rgbAvg(tear-ctrl);
drop *= step(drop, 1.0+blur.g);
fragColor = vec4(vec3(drop), 1.0);


Подобный код казался мне красивее и понятнее того, что было раньше и я стал получать больше удовольствия от самого процесса написания и форматирования шейдеров, что пригодилось мне для дальнейшей работы.

Изображения сняты через фильтр:
▹ lowercase / cloudless sky
More from @generative_photography
  1. Sep 1, 2026Навигация по блогу. 🔠 • Windy Pixel: Shading - Displacement - Mask - Stamp - Shake - Feed…
  2. Aug 20, 2026Paper. Еще до знакомства с шейдерами я случайно заметил, как непредсказуемо дисплейсмент с…
  3. Aug 6, 2026Keyboard. Случайно сгенерированные фильтры я разделял на три категории: 1. Которые нравили…
  4. Jul 30, 2026Series. Обычно при генеративной съемке я стремился к максимальной ситуативности. Фильтры г…
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 →