Трудно быть Коротаевым
515 subscribers
86 photos
100 videos
187 links
🎨 Генеративное искусство, сложные алгоритмы визуализации
🔍 Разбор графики в играх и как это работает,
🎮 Свежие проекты из мира креативного кодинга
😎 Сообщества и конференции о которых стоит знать.

Автор: @lekzd
加入频道
Forwarded from Selectel Team
Они смеялись в лицо выгоранию...

И правильно делали😎

Помимо докладов, на Selectel Day Off мы приготовили несколько зон притяжения — рассказываем про одну из них.

🎤 IT Open Mic — стендап от айтишников для айтишников. Нет, не тот утренний скрам-стендап с командой. Ребята приготовили честные сторителлинги про жизнь и работу в IT, которые отзовутся каждому.

Шуток много не бывает, а до Day Off еще 12 дней! Кидай в комменты любимый мем про работу и ставь реакции лучшим🔥


Подробнее про Selectel Day Off рассказываем в канале Selectel Events — переходи, чтобы узнать больше.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12💘1
🔥 Внимание, сенсация! Google добавил ИИ в new Date()!

"Мы долго думали, как сделать new Date() удобнее для новичков. Temporal API — это, конечно, круто, но зачем учить новые методы, если можно просто... спросить дату как у друга? Поэтому мы тайно обучили ИИ парсить любые текстовые запросы. Ну почти любые. Главное — верить в магию!"

Клод Сонне, ведущий инженер V8

Пример работы нового API:

new Date("В какой день Валенсия и Барселона сыграли 2-3?");
// Sat Feb 03 2001 00:00:00 GMT+...


Если вы дочитали до сюда, вы великолепны! что там на самом деле:

1. Любой мусор до цифр — пропускается
"В какой день Валенсия и Барселона сыграли" → игнорируется (как в коде V8: "any garbage is allowed").
Первые две цифры (2-3) → месяц-день
Автоматически превращается в 02-03 (или 03-02, если вы живёте в EN локали).

2. Год — 2001 (потому что «логично же»)

3. Вопросительный знак — это «для атмосферы» ?, !, ... — всё съедается, как пробелы.

Бонусом экзестенциальная драма:

new Date("Когда я родился? я помню что в 12-10, (но мама говорит, что это было поздно ночью)");
// Mon Dec 10 2001 00:00:00 GMT+...


"Функционал проверялся только в Chrome. В остальных браузерах возможно Invalid Date, потому что они 'не понимают искусства'."

P.S. Temporal API в ярости.
🤪12😭4🤝3😁2💘1
Media is too big
VIEW IN TELEGRAM
Вчера подвергся дополнительной мотивации

Иногда фоном смотрю стримы по Tesera, в которой сейчас пишу графику и решили мы поправить баг с тем, что свет от факела в руке был привязан к камере а не к игроку. Погрузился в код, разбираюсь. Так тут кажется что-то не передается, а здесь вообще условие не обработано... И тут слышу на стриме:

— Блин, да у них свет от факела к камере привязан, невозможно бегать с видом от 3-го лица в темноте
— Да, погоди, уже разбираюсь, говорю я
— Не, ну это совсем не удобно конечно
— Да-да, я согласен, уже правлю
— Хотя может они это для оптимизации сделали, знаете там наверное расчеты еще одного источника света нагружают, а у них же браузер...
— Да какая оптимизация! Это баг, я правлю прямо сейчас!

Так и доделал все быстро)

PS запись стрима вот: https://www.youtube.com/live/I7LwXvcDgak, где этот момент был не вспомню)
12😁8🔥1
В CSS появились ветвления

Не так давно обнаружил, что уже 2 месяца как в обычном Chrome работает функция if() в CSS (статья на MDN)

Теперь можно делать так:

div {
margin: if(media(width > 700px): 0 auto;)
}

/* if(<if-condition> : <value>) */


или так:

div {
color: if(
supports(color: lch(77.7% 0 0)): 3px solid lch(77.7% 0 0);
else: 3px solid #c0c0c0;
)
}


ну и вообще это скорее напоминает множественную if...else конструкцию:

padding: if(
media(width < 480px), 20px;
media(width < 960px), 40px;
media(width < 1200px), 80px;
else: 0px;
)


Ну и не обошлось без веселого, можно использовать сколько угодно else, но выполнится только первый, все условия после него игнорируются:

div {
background: if(
style(--scheme: ice): white;
else: green;
style(--scheme: fire): orange;
else: red;
);
}


Кажется для достижения полноты по Тьюрингу осталось только завести смену состояния, чтобы стать полноценным языком программировния. Но если добавить чекбокс, то и эта проблема уходит и можно написать свой Сапер на CSS.
🔥10😈3😱1💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Доделали портал для Tesera

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

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

1. Идеальный шум

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

2. Числа Цикады

Числа цикад, о которых идёт речь, это 13 и 17. Эти числа являются простыми и представляют собой циклы развития некоторых видов периодических цикад в Северной Америке. Цикл в 13 или 17 лет позволяет этим цикадам избегать синхронизации с циклами развития хищников, которые обычно имеют более короткие жизненные циклы.


То есть нужны любые простые числа, которые делятся только на 1 и самого себя, кроме 1. Умножая разные волны и шумы на эти числа мы получаем с виду случайные последовательности, циклы которых не совпадают и не идут синхронно.
🔥13❤‍🔥3💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядный Computer science в работах Sam Rose

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

https://samwho.dev
🔥15❤‍🔥4👍1💘1
Такую водичку и в блоге показать не стыдно

Пока на улице жаркое лето, провел последнюю неделю у воды, в воде и под водой: изучил что такое каустика, прибрежная пена, водный туман, особенности освещения в воде. Все это как обычно раз в неделю выкладывается в релизах Tesera.

Как не странно, самая долгая и сложная часть тут — согласовать цвет и свет со всем что у же есть в игре. Я пишу алгоритм, вывожу переменные цветов (каустика не белая кстати, там несколько цветов как по учебнику оптики соединяются в одной точке и образуют белый пересвет). Далее с этими переменными работают ребята, меняют, смотрят. Потом свой строгий взгляд на это все кидает Ваня, ужасается что у нас добавилось 10 умножений. Мы вместе пробуем найти как сделать наиболее оптимальный алгоритм.

Когда-нибудь я напишу пост о том как готовят перформанс там где его толком нереально замерить — в шейдерах WebGL/WebGPU.
18🔥17💘3
Стендап про жизнь с двумя детьми

Тяжело готовить стендап очень тяжело, весь текст надо много раз переписать, выучить наизусть, ничего не забыть) Благо у нас был отличный ревьюер наших текстов: питерский комик Алексей Полубояров.

После стендапа впал в апатию, как будто осознал все сложности о которых рассказал, а вы просто посмейтесь)

https://www.youtube.com/watch?v=ba8FAk3mCZk

За запись спасибо Тимуру, его выступление тут
🔥16💘4
JSON.stringify стал быстрее в V8

В Chrome 138 и выше обещают ускорение JSON.stringify в 2 раза (JSON.parse остался таким же, потому простейший deep clone все еще не ускорен).

Есть несколько подводных камней:
— кириллица и другие символы Unicode делают парсер медленнее
— лучше всего сериализуются массивы одинаковых по типу объектов
— нельзя патчить прототипы объектов
— аргументы replacer и space должны быть пустыми

результаты взяты из бенчмарка JetStream 2.0

https://v8.dev/blog/json-stringify
🔥112💘1
Четвертый важнейший обман игровой индустрии

Третья часть тут

Разработчики игр — люди хитрые. Они хотят много денег, но при этом не хотят делать лишнюю работу. Например, доделывать задний план. Нельзя же просто так взять и показать игрокам голые LOD-модели и пустые локации! Надо замаскировать это чем-то красивым — например, туманом.

И ведь не просто туманом, а сеттинговым. В Silent Hill — чтобы было жутко, в Skyrim — чтобы казалось эпично, а в мобильных играх — чтобы скрыть, что там вообще ничего нет.

Но туман — это вам не картинка с домом, которой в России зашивают обветшалые фасады перед приездом начальства. Если бы всё было так просто, можно было бы накидать кучу полупрозрачных частиц и сказать: «Вот, смотрите, как в жизни!»

Но нет. На пути встаёт главный босс оптимизации — Overdraw.

💀 Overdraw: когда пиксели страдают

Overdraw — это когда ваш GPU рисует одно и то же по сто раз. Сначала небо, потом лес с миллионом листьев, потом 15 слоёв «атмосферного» тумана, а сверху ещё дождь накинуть — для «реализма».

Почему так происходит?
Потому что если пиксель хоть чуть-чуть прозрачный, видеокарта думает:
«Ага, тут можно ещё что-то подмешать!» — и начинает искать, что бы туда ещё запихнуть.

Это как хитрый арендатор, который, если видит, что хозяин квартиры доверчивый, сразу подселяет 8 братьев, 30 друзей «на прописку» и они все шумят так громко, что соседние пиксели не успевают выспаться отрендериться до следующего кадра. То есть, уменьшается Fillrate — количество нарисованных пикселей в секунду.

1. 🎅 Самый простой способ: туман в каждом шейдере (дедовский метод)

Разработчики не хотят бороться с overdraw, поэтому обманывают заранее. Они говорят шейдеру:
«Если пиксель далеко — начинай смешивать его с цветом тумана, пока он совсем не исчезнет».

Плюсы:
✔️ Дешево (даже WebGL 1.0 потянет).
✔️ Не требует сложной магии.

Минусы:
Выглядит как «пластиковый» туман из 2000-х.
Типичная ошибка — забыть добавить туман в новый объект.
Не светится, не клубится и вообще не умеет в «вау».

Где встречается?

— В мобилках (где «и так сойдёт»).
— В WebGL (потому что альтернативы всё равно нет).
— В психологическом трюке под названием «это стилизация».

2. 🌫 Постобработка (Post-process Fog)

«Давайте просто возьмём буфер глубины и нарисуем туман поверх всей сцены!»

Плюсы:
✔️ Красиво (можно сделать плавные переходы).
✔️ Универсально (работает даже с частицами).

Минусы:
Требует доступа к глубине (в WebGL — боль).
Если на пути рендера встречается вода, то привет второй туман, с отдельным буфером
Если объекты не в глубине (например иконки над персонажами) — будут артефакты.

3.💡 Объёмный туман (Volumetric Fog)

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

Плюсы:
✔️ Очень красиво (лучи, подсветка, атмосфера).

Минусы:
Жрёт FPS как голодный RTX 4090.
В WebGL нереализуем без хаков.

—————————

🎉 Вывод: кто победил в этой войне?

Ленивые разработчики — потому что туман всё равно скрывает их костыли.
Геймеры — потому что красивый туман = атмосфера.
Видеокарты — потому что им платят за страдания.
9💘1
Мой доклад для тех кто приглядывается к WebGL выложили
7💘1
Frontend-доклады с CodeFest — опыт от ведущих специалистов из индустрии и новые идеи. Говорили про универсальные вещи — архитектуру веб-приложений, производительность, безопасность и доступность и копали глубже — в WebGL, Web Vitals, AI и работу с видео. Первая часть докладов:

Олег Мохов. Про­грес­сив­ный HTML →

YouTube | RuTube | VK Video

Григорий Тищенко. AI-ассистенты: как начать использовать сегодня, а не с понедельника (и не бросить после релиза) →

YouTube | RuTube | VK Video

Дарья Двуреченская. Как защитить свой фронтенд: уроки крупнейших взломов 2024 года →

YouTube | RuTube | VK Video

Александр Коротаев. WebGL Cookbook →

YouTube | RuTube | VK Video

София Валитова. Деревья и коробки →

YouTube | RuTube | VK Video

Вадим Дворовенко. Локализация приложения глазами переводчика →

YouTube | RuTube | VK Video

Роман Ахмадуллин. Web Vitals: что это и как мы их собираем →

YouTube | RuTube | VK Video
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3💘1
А если гпт пять бойцы?)

А если у бойца GPT PRO за 229$/мес, то его час стоит больше чем проект и потому им тем более не стоит откликаться?

Поистине дивный новый мир открывается, если выйти из своего инфопузыря благодаря глобальному поиску в ТГ
😁8🤡4💘1
Chrome 139 убил рендеринг на CPU. И это правильно

Знакомьтесь: SwiftShader — самая незаметная, но опасная технология в вашем браузере. О ней не пишут в новостях, её не знают нейросети, я сам последний раз видел ее году в 2010-м кажется, но хакеры могли её обожать.

Что это вообще было?

Представьте: ваш ноутбук — древний кирпич без нормальной видеокарты. Вы открываете 3D-сайт, и… он работает! Как? Браузер тихонько подменял GPU на SwiftShader — софтверную эмуляцию графики через CPU. Медленно? Конечно. Зато хоть что-то.

Почему Chrome его выпилил?

Потому что это была бомба замедленного действия:

— SwiftShader JIT-компилировал шейдеры в машинный код CPU прямо в процессе GPU.
— Достаточно было подсунуть хитро сгенерированную строку шейдера в JS и можно было читать память процесса (а то и выполнить свой код).
— Chrome уже изолирует GPU-процесс, но SwiftShader делал эту защиту дырявой.

Что теперь?

— Linux/macOS: Нет GPU → нет WebGL. Точка.
— Windows: SwiftShader остался только для «особых» видеокарт из чёрного списка (спасибо, Microsoft).

А другие браузеры?

— Firefox тоже сворачивает поддержку.
— Safari никогда не любил софтверный рендеринг.
— Edge (как хороший клон Chrome) повторяет эти шаги.

Вывод: Google предпочёл безопасность вместо совместимости. И, кажется, это правильный выбор — WebGL без GPU в 2024 году всё равно был атавизмом.

https://support.google.com/chrome/a/answer/7679408?sjid=8592446715374796731-EU#chromeBrsrJ139
🔥115💘2👍1