TGViewer
Channel Public Channel
🥒Код для приколов🥒

🥒Код для приколов🥒

@ogurchrik3228

Это место, где так называемый Огурчик публикует записи/примеры СВОего кода.
Subscribers
107
Photos
32
Videos
28
Links
38
Recent Posts 14 shown
Post #91 107
который уже пропишем сами в свойствах к transform, ведь значения для него не даются по умолчанию.

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

P.S. описание выше неактуально для версий Ren'Py 8.6.0 и выше.

#помогатор
  • ❤ 1
Post #90 94
Как вы можете заметить выше, я иногда беру код с ShaderToy для того, чтобы изменить его в той или иной степени или же переписать под Ren'Py для дальнейшего использования. Так вот о последнем вам и хочу рассказать: как взять (почти) любой шейдер с ShaderToy и перенести его в Ren'Py. Заранее предупрежу, что каждый шейдер на ShaderToy защищён авторским правом и их использование возможно лишь с разрешения автора или же в соответствии с CC BY-NC-SA 3.0.

Начну с базы: как сделать шейдер?

Для этого используется функция renpy.register_shader(), в аргументы которой вам нужно вписать как минимум название и фрагментный код, а при необходимости также переменные и вершинный код.
Простейший шейдер выглядит так:

init python:
renpy.register_shader("None", fragment_300="""gl_FragColor=gl_FragColor;""")


Тот просто присваивает каждому пикселю его текущий цвет, что эквивалентно отсутствию эффекта. fragment это обозначение того, какую часть шейдера мы пишем (кроме fragment есть vertex), _300 это то, с каким приоритетом будет применена эта часть кода относительно других шейдеров - чем больше, тем позже. Также есть префикс _functions и аргумент variables, про которые ниже.
Один из способов применения:

label kek:
show sprite:
shader "None"


Поскольку вышеописанное сильно отличается от любого другого шейдерного кода, что вы могли видеть, то я обязан пояснить: часть кода Ren'Py генерирует за вас.

Если вы в вашей новелле сделаете config.log_gl_shaders = True то у вас в log.txt будет чистый текст того, какой именно код Ren'Py сделал для вас. И по нему вы можете увидеть, что как минимум есть отдельный vertex None renpy.geometry и отдельный fragment None renpy.geometry, и что ни одну строку из vertex мы не писали, т.к. позиционированием картинок движок управляет сам и соответственно ставит каждому шейдеру своё позиционирование. В fragment же, в void main конкретно мы можем увидеть тот gl_FragColor=gl_FragColor; что и писали ранее.

Собственно в этом и вся связь между кодом шейдера на Ren'Py и ShaderToy: нужно перенести нужные части кода в нужные аргументы renpy.register_shader(). Потому далее расскажу на примере.

В указанном шейдере до void mainImage есть другой код, который относится к fragment_functions, потому можно его напрямую вставить в fragment_functions=""" """. Затем в void mainImage мы видим основной код, который соответствует fragment с любым приоритетом, соответственно передаём его туда.
Но так как ShaderToy и Ren'Py используют разные версии OpenGL и разные названия для базовых входных данных (uniforms), то нужно внести изменения.

Начнём с простейшего: коррекция разницы между версиями.

Достаточно изменить fragCoord на gl_FragCoord, fragColor на gl_FragColor, чтобы исправить разницу в версиях в том шейдере. Также в других шейдерах для работы с текстурами нужно поменять texture на texture2D.

Теперь надо изменить и прописать переменные (uniforms).

В ShaderToy чаще всего используются как переменные iTime, iResolution, iChannel0, ..., iChannel3, iMouse, но существуют и другие, которые используются реже.

Для того, чтобы прописать переменную необходимо писать в аргумент variables. Допустим хотим вписать переменную времени с момента текущего показа. Тогда пишем: variables="""uniform float u_time;"""", где float это тип переменной. Соответственно при адаптировании надо поменять iTime на u_time везде. Аналогом vec3 iResolution можно назвать vec2 u_virtual_size, т.к. первые два элемента векторов соответствуют друг другу, и его заменяем. И на этом всё в целом. Мы адаптировали тот пример под Ren'Py, но продолжу немного про другие аналоги.
Аналогами для названий текстур iChannel0 к tex0, ..., iChannel3 к tex3, и соответственно при использовании каждой надо добавлять sampler2D tex0 в variables. iMouse же отвечает за позицию курсора в момент нажатия, и т.к. мы можем получать позицию курсора из renpy.get_mouse_pos(), то создание аналога усложняется до того, что мы должны создать либо DynamicDisplayable либо screen, в котором мы будем каждый кадр через timer передавать координаты курсора в u_mouse_pos,
  • 🤯 4
  • ❤ 1
  • 👍 1
Post #89 171
Сидел в интернете как-то и заметил один весьма старый шейдер. Мне он естественно понравился и именно он и был причиной, почему я решил добавить несколько шейдеров и юниформы в свой инструмент пару постов назад.
Ну и захотелось адаптировать его для Ренпая, чтобы банально посмотреть на фоны с таким шейдером, да и это неплохой инструмент для будущей разработки.

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

Код в открытом виде для Ren'Py доступен на бусти.

#покайфу
#бусти
  • ❤ 3
Post #88 142
Экран, переключаемый на клавишу "-", позволяющий подобрать нужно выглядящую обводку под текст, и далее скопировать её через кнопку "outlines" в буфер обмена для дальнейшего вставления в код.

Код работает за счёт введения значений в виде RGBA цвета в начальной (ближней к глифам текста) и конечной (дальше от глифов) позиции. Эти значения интерполируются между собой за счёт функции, введённой как аргумент (во всех примерах использовалась кубическая функция), что позволяет создавать промежуточные цвета в hex виде, которые в зависимости от уровня слоя, добавляются в список обводок, который уже рисует сам движок.

Пост на бусти.

#покайфу
#бусти
  • ❤ 4
  • 🗿 1
Post #87 126
В один момент вспомнил об одном своём оверлей-меню с динамичным подбором значений для матричного трансформа цвета, и вспомнилось моё желание добавить возможность вписывать туда несколько шейдеров вместе с юниформами, чтобы можно было подбирать значения без перекомпиляции всего проекта.

Собственно это и было сделано, как можно увидеть на видео.

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

Сам код вместе с шейдерами лежит на бусти.

#покайфу
#бусти
  • ❤ 2
Post #84 183
Полазив в интернете я наткнулся на туториал по тому как сделать светящийся шарик. Подумав, я решил, что ему нужно добавить движение по кривой и сделать таких шариков много, чтобы красивый фон был. Получалось не то, что я хотел видеть, но потом я решил увеличить размер решётки и результат вы можете лицезреть сами.
В последнем варианте позиция частичек зависит от глобального времени, из-за чего вырисовываются интересные паттерны.
Код для Ren'Py в открытом виде доступен на бусти.

#покайфу
#бусти
  • 👍 4
  • 🔥 2
  • 🤩 1
Post #83 398
Итак, прошло чуть больше трёх месяцев, так что самое время отчитаться о том, чего было, а чего не было. Начну в хронологическом порядке.
В конце мая проводился Spark Game Jam, в котором я также решил поучаствовать скорее из собственного желания, нежели ради получения призового, ибо это обычный геймджем, да и вкупе к тому: срок в меньше чем три дня. И да, именно на него и была сделана "Их история". Опосля говоря, могу только сказать, что сам процесс разработки мне понравился: за один день сделать фулл новеллу, хоть и короткую, было интересным опытом, но всё остальное касательно организации джема мне не зашло. Не поленюсь и конкретно перечислю: стримы игр от судей на Google Meet, половина из которых без записи даже; отсутствие таблицы оценок судей (хочешь узнать как оценили твою новеллу? Приди на стрим); время, которое судья тратит на прохождение, это пять минут; конкретная судья: Елена Медведчук, пояснение: (на стриме игр от неё, она выдала утверждение вида, что "Если в вашей игре надо с самого начала читать слишком много текста, то это плохая игра. Если я захочу почитать текст, то я открою визуальную новеллу.", с чем можно согласиться, но как только она открыла "Их историю" и начала читать, то она проскипала и даже пяти минут не потратила, хотя новелла была ровно на пять минут; человек даже не захотел тратить время на то, чтобы понять жанр игры, а ей доверили судейство.)
Как можно было догадаться, то призового новелла среди других игр не получила.

Далее, как я говорил ранее, то всё-таки мини-игру вида слот-машины к новому акту Нейроада, я доделал. С Пионериадой ситуация иная, т.к. как я понял в ходе разработки всей этой кучи новелл, то мне значительно и психологически и организационно проще работать, когда у меня все ресурсы на руках, и никто из команды не оказался против, если я приступлю к коду, когда весь сценарий одного рута будет готов.

Примерно в то же время (конец июня - середина июля), благодаря, на удивление, RenMatch, я списался с менеджером команды Wirion, которой потребовался кодер для Rise!, с чем я, конечно, мог помочь. Мало когда поделаешь адекватный 2д шутер, причём с ресурсами для которых не нужно заморачиваться самостоятельно, тем более с потенциалом в вырезке самой механики из сюжетной части и создании бесконечной стрелялки по жукам.
И вкупе с ещё некоторыми проблемами у других кодеров в команде, мне доверили также сделать несколько мелочей (озвучку, ачивки Стима и т.п.) в скоро выходящем DDD, хоть я и предлагал сделать чуть больше изменений.

В середине июля я также совершенно случайно в ходе диалога с автором "Как 2D-тян попала в Омск" помог оному пофиксить один из багов в демоверсии. И спустя несколько дней также помог доделать одну настройку разрабу Погорельца тоже.

Чучуть попозже в июле я сделал сто мелких изменений в The Scarlet guitar of Regret по ТЗ тимлида.

Из совсем недавнего так это то, что я почти доделал карточную игру "Сундучки" в стиле Katawa Shoujo; пост о релизе раньше выйдет в паблике Руки Тэдзуки или Подслушано в Ямаку, чем здесь, потому если интересно, то там и смотрите. К чаю и помидорам, к слову, доделывается визуал для продолжения текущего сценария.

А ещё очень медленно пишется код для обновления Стены...

#игрульки
  • ❤ 4
  • 🔥 1
  • 👏 1
Post #81 342
Шейдер и экран-обёртка для создания подсветки кнопок с настраиваемыми параметрами.

Для настройки существуют 13 параметров (среди которых такие как радиус свечения, яркость, цвет и т.п.) + все свойства textbutton/imagebutton.
Также присутствует поддержка easing функций любого вида, на видео-примерах везде используется easein/easeout.
В коде присутствуют примеры использования обёртки для размещения с произвольной позицией и через цикл.

Пост на бусти.

#покайфу
#игрульки
  • 🔥 9
Post #78 373
После одного видео на ютубе я заинтересовался темой квантования и захотел посмотреть то какие варианты квантования уже есть в интернете. И чаще всего мне попадалось байеровское квантование. Оно нередко и в новеллах фотошоперами используется для создания хорошего визуала.
Почитав их код я понял что суть в том чтобы вычислить определённую границу для step() функции за счёт итерации по элементам матрицы.
В самих матрицах разница между соседями любого элемента максимальна. И если посмотреть на матрицу 2x2 и 4x4 то можно заметить, что 4x4 это буквально четыре 2x2 матрицы вложенные по клеткам с масштабом и сдвигом. И это если мы взяли как базовую матрицу размера 2x2 а ведь мы можем взять и матрицу 3x3. И поскольку получение каждой таковой рекурсивной матрицы для любой базовой матрицы независимо от базы то мы можем их комбинировать и получить 6x6 матрицу или же любую иную матрицу nxn размера если n составное где все простые числа представлены в заготовленной матрице.
https://www.shadertoy.com/view/Nc3GzS

#покайфу
  • ❤ 2
  • 👍 1
  • 🔥 1
Post #77 415
приколы.rar4 MB
Недавно я решил опробовать иные технологии для создания GUI-приложений, нежели привычный мне Ren'Py/Python, с целью самообучения и развлечения.
И для того я выбрал NASM, C/C++ как ЯП и Raylib 6.0, SDL2, Unreal Engine 5 как рендереры. В последнем я толком-то билда нормального и не сделал, ибо не люблю визуальное программирование.
Опишу-с чего поделал. На NASM в архиве есть 4 разных приложения. Первое при запуске через системные вызовы Windows задаёт пользователю вопрос и при утвердительном ответе открывает Двач. Второе это консольное приложение которое пишет в реестр Windows новые параметры из того, что было введено в консоль. Третье и четвёртое это просто создание окна и рендер текстуры через SDL/Raylib соответственно.
На Си с Raylib я написал аналог одной из мини-игр из DEDZo0parka и в дополнение ещё одно приложение, в котором присутствует та же мини-игра, но в дополнение к тому простейшее переключение между состояниями игры (а.к.а. главное меню) и простейшее сохранение настроек игры.

Общие ощущения скорее положительные только от Raylib на Си; и то по большей части благодаря nob.h от Tsoding.
Рассматривать NASM как основной язык программирования для создания игр это нужно очень неуважать самого себя.
Unreal Engine же я может ещё не распробовал до конца, возможно поактивнее его буду использовать в ближайшее время и что-нибудь да покажу на нём.

В прикреплённом архиве лежат вышеописанные приложения в уже скомпилированном виде.
Не особо вижу смысл публиковать исходники, т.к. весь код на NASM мною писался в одном и том же файле и его читать будет весьма неприятно, а код на Си будто бы не содержит ничего особенного.

#покайфу
#игрульки
  • ❤ 6
Post #75 395
Ещё в середине мая я сделал три шейдера на основе функций шума и синусоид, но руки никак не доходили, чтобы выложить.
Потому вот, держите-посмотрите.
Сам код каждого из шейдеров (также как и код красного тумана) лежит на Boosty.

#бусти
#покайфу
  • 👍 3
  • ❤ 1
  • 🔥 1
Post #74 369
Руки наконец дошли до того, чтобы создать аккаунт на ShaderToy, ибо неудобно хранить код в своей памяти или в чатах телеграмма.
И пустой аккаунт некрасив, потому поглядите на сердечко.
Код: https://www.shadertoy.com/view/N3sXDn

#покайфу
  • ❤ 5
Post #70 452
Их история.

Вам когда-нибудь хотелось, чтобы ваши когнитивные навыки стали лучше?

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

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

И в эксперименте над этим мутагеном и заключается их история...
  • 🔥 3
  • ❤ 1
  • 😍 1
Older posts →

About this channel

How can I read @ogurchrik3228 without a Telegram account?
TGViewer shows the public web preview Telegram publishes for 🥒Код для приколов🥒: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does 🥒Код для приколов🥒 have?
🥒Код для приколов🥒 (@ogurchrik3228) has 107 subscribers on Telegram, refreshed roughly every 30 minutes.
Does 🥒Код для приколов🥒 know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
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 →