Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
4
lipal1
lipal1
6 месяцев назад

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я⁠⁠

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Сегодня я хочу поделиться с вами советами по использованию Udim, текстурных сетов, texel density, padding, mipmapping и других техник в различных ситуациях и при возникновении ошибок.
Этот материал создан автором самостоятельно, однако в него также включена информация, полученная из других источников.

Редактор и создатель идеи: Daniil Lipin (lipa_l1).
Благодарю за помощь в написании статьи замечательных художников высокого уровня: _Shelest_, Titan_Fair, Alexey Yarmola, nikiost, trasnik.
Отдельное спасибо:
Dmitriy Bogumil — за предоставление файлов/скринов модели монстра.
gRen — за предоставление скринов с ошибками запекания карт id на оружии.

Сайты, откуда была взята маленькая часть информации:
1) https://www.youtube.com/watch?v=55sGQLX7iho
2) https://www.artstation.com/artwork/Xg3reL
3) http://wiki.polycount.com/wiki/Edge_padding
4) https://dtf.ru/gamedev/202100-kak-uluchshit-kachestvo-tekstur-razbor-metodov-optimizacii-uv
5) https://en.wikipedia.org/wiki/File:Mipmap_Aliasing_Comparison.png
6) https://gtaforums.com/topic/750681-skygfx-ps2-xbox-and-mobile-graphics-for-pc/page/287/
7) https://vk.com/@anatolii994-teksel-prostoi-universalnyi-metod
8) https://www.artstation.com/artwork/x3B5YX

Буду признателен, если вы поможете мне исправить опечатки, а ещё, если есть вопросы, пишите, пожалуйста, на почту: lipindan2003@gmail.com, в телеграмм — @Lipa_l1, в дискорд — @Lipa_l1.

«Все материалы данного сайта являются объектами авторского права (в том числе дизайн). Запрещается копирование, распространение или любое иное использование информации и объектов без предварительного согласия правообладателя»

Для создания этой статьи были использованы следующие программы и аддон:
* Blender 4.2.0 / Blender 4.3.0;
* UVPackMaster 3.2.2 PRO / UVPackmaster v3.3.0 PRO;
* Marmoset Toolbag 4.06 (4062) / Marmoset Toolbag 5.0 (5008);
* Substance Painter 3D v10.0.1 build 3757.

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

—————————Udim—————————

U-Dimension, также известная как Udim, — это система оптимизации вашей модели, за счёт увеличения количества UV-плиток, где шеллы заполняют их пространство, увеличиваясь в размере, что даёт возможность не ограничивать себя в использовании высокого Texel Density (далее — TD), и текстура, в свою очередь, будет отображаться качественней.

Udim называют по-разному, но все эти термины являются синонимами. Не стоит пугаться, если вы встретите разные названия в разных источниках: Udim, Udim-схема, Udim-система, плитки, UV-кусочки, квадраты на UV, тайлы и так далее.

Цель Udim — оптимизировать процесс использования высоких текстур. Он зависит от плотности TD. Обычно новички используют только одну UV-плитку для развёртки, запекания текстурных карт и создания самой текстуры. *Исключение — модели малой площади.
Со временем понимание трёхмерной графики растёт, открывая путь к сложным техническим вопросам самой модели. Именно здесь многие сталкиваются с трудностями при создании 3D-модели с текстурами, созданными в Udim.

Почему так важен TD?

Texel Density — значение, которое показывает, сколько будет отображаться пикселей будущей текстуры на 1 сантиметре поверхности модели. *Возможна другая единица измерения: m, mm.

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

TD напрямую связан с расстоянием до модели, чем дальше мы от нашего объекта, тем меньше мы можем его разглядеть, тем самым меньший нужен TD, а чем ближе, тем лучше будут видны изъяны и, соответственно, необходим более высокий TD. Отсюда и возникает вопрос, какой TD необходимо использовать?

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

Как получить нужный TD? Тут необходимо расстояние до нужного объекта и значение искажения линзы (значение фокуса), имеется формула по вычислению значения. Ещё нам нужны значения эталона, снова же, нельзя взять значение из головы, необходимы тесты по поиску лучшего значения или брать уже готовые значения с проектов других художников за эталон.

Формула:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

где TD — искомый тексель, px/cm;
TDэ — тексель эталона, px/cm;
L — расстояние от камеры до поверхности модели, м;
Lэ — расстояние от камеры до поверхности модели у эталона, м;
F — фокусное расстояние камеры, мм;
Fэ — фокусное расстояние камеры у эталона, мм.

Разрешение текстуры подбирается под уже подобранный нами TD, который мы вычислили, значение TD остаётся неизменным, и, отталкиваясь от него, вы принимаете решение по разрешению текстуры и количеству UV-плиток.

Как правильно использовать эталон.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Если мы подставим значение, формула сократится до подобного вида:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Где 1.34 — значение, которое у вас получилось при сокращении формулы. Далее вы можете иметь несколько таких значений у себя в закладках для будущих проектов, как отличные примеры, которые могут иметь упор на качество, на оптимизацию, так и на нечто среднее между качеством и достаточной оптимизацией. А далее необходимо лишь в последующих действиях подставить расстояние до поверхности модели и значение фокуса камеры. *Значение 1.34 — выдуманное.

Как правильно измерять расстояние?

В Blender линейка работает отлично, достаточно лишь соединить точку камеры и ближайшую поверхность объекта.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Смотрим значение фокуса.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Имеем расстояние в 1,60266 метров и искажение линзы в 120 мм, после корректировки размеров и применения трансформаций с модификаторами.

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

1.15 — такое значение применено на мотоцикле.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Теперь наша модель: по формуле, TD вышел 86,106, подставляем это значение в аддон Texel Density:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Обязательно перед применением шеллы должны быть подготовлены. *Должен быть сделан оверлаппинг, шеллы должны быть выпрямлены по возможности, не иметь растяжек и отмасштабированы в зависимости от видимости частей модели.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Если увеличивать разрешение текстуры, не меняя TD, то UV-пространство будет лишь масштабироваться, что будет провоцировать использовать всё больше или меньше UV-плиток, ведь шеллы остаются теми же, не меняясь в размерах. TD, который мы вычислили, ни при каких условиях не меняется, под него уже подстраивается разрешение, Udim будет необходим как поддержка.

Не многие понимают, что ни размер модели важен, ни разрешение текстуры, а лишь расстояние и искажение линзы. Размер модели и правда влияет на TD, но и расстояние до него будет другое при рендере или в играх, оно и компенсирует размер модели.

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

*Оверлапы следует убирать при создании UV развёртки с уже необходимым значением TD. Они будут просчитываться как лишние значения площади, что нам точно не нужно, поэтому убираем их и после всех манипуляций возвращаем их в стаки.

Вот этапы для корректной работы:
1) Выставляем корректный размер модели, применяем все модификаторы и трансформации. Отчищаем модель от лишних кривых и другого мусора.
2) Делаем развёртку с оверлапами и уменьшаем шеллы слабозаметных частей модели.
3) Вычисляем по формуле, зная самое близкое расстояние до модели, расстояние от камеры до модели, значение фокуса камеры. Берём за эталон необходимый вариант.
4) Придаём развёртке нужный TD, далее подбираем наилучший вариант из разрешения текстуры и Udim.(2k и 3 uv-плитки, 4k и 1 uv-плитка).

Частые вопросы и ответы:

1) Когда нужно сделать рендер очень близко к модели, при этом она большая, тут действуют те же правила, рассчитывается расстояние, берётся эталон и вычисляем нужный TD, если рендер будет с одной стороны или объект в игре не будет виден со всех остальных сторон, то в развёртке можем использовать лишь те шеллы, которые будут видны в большинстве случаев, остальные уменьшить на ваше усмотрение, таким образом мы получим возможность использования текстур малого разрешения, делать это необходимо ещё до вычислений по формуле.

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

2) Важно иметь размер модели, равный объектам в нашей реальности, применённые трансформации и отсутствие активных модификаторов, также отсутствие внутренних полигонов, лишнего мусора в виде кривых и полигонов на нашей модели.

3) По логике таких расчётов не сложно понять, что чем меньше модель, тем меньше шеллы, а чем меньше шеллы на UV-пространстве, тем хуже будет смотреться текстура. Отсюда можно понять, что при рендере во весь экран модель, допустим, маленькая, то нам будет необходимо увеличивать шеллы для повышения TD, при больших размерах модели шеллы будут больше, а значит, их нужно будет наоборот уменьшать, ведь TD будет необходим, скорее всего, меньше.

4) TD, который мы получили, уже готовое значение, его больше менять не нужно, под него подбирается уже текстура с помощью Udim. В зависимости от ситуации можно использовать как и большое разрешение текстуры, так и более маленькое.

5) Модель «мусорный бак» редко будет видно в игре, но есть возможность к нему подойти и рассмотреть его вплотную, то с этого расстояния и стоит делать расчёты. Для оптимизации существуют LOD-технология и MipMapping, поэтому можно не волноваться от высокого качества модели вблизи, вдалеке оно будет другое.

6) При создании модели для игры стоит учитывать расстояние и значение фокуса, в каждых играх, в зависимости от лица персонажа и других факторов, расстояние может быть разное, а также поле зрения, стоит учитывать максимальное поле зрения, оно также влияет на расстояние, помимо обычного расстояния. Что не стоит учитывать, так это приближение с помощью сторонних программ и объектов в самой игре (например, прицел СВД).

7) У нас имеется анимация, в которой действия происходят в обычной комнате и в определённый момент перед экраном пролетает комар, какой TD должен быть у него? Не стоит пугаться, берём момент перед камерой как самый близкий и с помощью расстояния, значения фокуса и значения эталона находим нужный нам TD, даже учитывая, что большую часть времени сам комар будет далеко от камеры.

Случаи, когда у нас есть рамки (выставляем корректный размер модели, применяем все модификаторы и трансформации. Отчищаем модель от лишних кривых и другого мусора — ВСЕГДА).

Если есть рамки по TD, то с помощью формулы подбираем корректные значения td, далее уменьшаем или увеличиваем шеллы.

Если есть рамки по текстуре, то с помощью формулы подбираем корректные значения td, используя размер шеллов и Udim, подбираем нужные значения под разрешение.

Если есть рамки по Udim, то с помощью формулы подбираем корректные значения td и меняем разрешение, которое будет соответствовать Udim, а также масштабируем шеллы.

Если рамки по td и разрешению текстуры, то с помощью формулы подбираем корректные значения td и, используя Udim, масштабируем шеллы, изменяя td.

Если рамки по разрешению и Udim, то с помощью формулы подбираем корректные значения td, проверяем, как при Udim и нужном разрешении себя показывает td, при необходимости масштабируем шеллы, меняя td.

Если рамки по Udim и td, то с помощью формулы подбираем корректные значения td, далее уменьшаем или увеличиваем шеллы и подбираем нужные текстуры под Udim.

Рамки со всеми ограничениями — может быть предложение лишь изменение размеров модели или максимальная доработка UV. Включая изменение дальности до самой модели.

При больших рамках к модели, в редких случаях масштабировать саму модель таким образом, чтоб дальше была от камеры.

*Масштабирование шеллов следует начинать делать от слабозаметных частей модели до заметных.

Перед текстурированием можно использовать текстуры-чекеры. Они обычно встроены в программы для 3D-моделирования или доступны как дополнительные плагины (аддоны). Также можно воспользоваться обычной текстурой, чтобы увидеть размытие и артефакты при конечной развёртке с уже применённым TD.

Я, например, использую текстуру-чекер из аддона UVToolkit в Blender 4.3.

Для того чтобы включить Udim в Blender, необходимо следовать указаниям со скринов:

1/10

Этот способ лишь создаёт пространство, чтоб мы могли понять, где разделяются плитки, и делать развёртку ровно по плиткам, а не в пустом пространстве, но хорошая альтернатива этому — дополнения для создания UV развёртки на полуавтоматизме: RizomUV, UVLayout и аддоны для самих программ, например, один из лучших — UVPackMaster3PRO, который создаёт отличные развёртки на разных плитках без ранее созданных в Blender пространств Udim.

Как вы уже поняли, Udim играет роль помощника, при уже известном TD мы можем подобрать текстуру 8k, она будет отлично соответствовать нашему TD, но проблема заключается в том, что текстуры такого качества довольно сложно найти, она имеет ещё несколько минусов: оптимизация в игре, больший вес одной текстуры грузится дольше, чем несколько текстур с меньшим качеством, но при этом с таким же размером файлов, сам размер файла тоже влияет, куда выгоднее использовать 3 текстуры по 4k, чем одну 8k.

Давайте рассмотрим преимущества Udim в различных ситуациях:

1) Как и написал выше, найти текстуры высокого разрешения и тем более чтоб они соответствовали вашим желаниям не просто, куда проще и лучше использовать несколько текстур низкого разрешения.

2) С технической точки зрения, если учитывать объём памяти, который занимает сама текстура, то использование трёх текстур размером 2k будет более выгодным, чем одной текстуры размером 4k (при этом у нас увеличится ещё TD, если под наш TD нужно 2.5 текстуры, то берём больше, 3 текстуры, шеллы, соответственно, станут больше, что и даст прирост в TD):

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

*Не стоит забывать, что в результате запекания у нас получается не одна карта, а около пяти: normal map, thickness и другие. И это только для одной UV-плитки.

2k — 15,941 * 5 карт * 3 UV развёртки для каждой карты = ~233 mb
4k — 58,143 * 5 без Udim = ~283 mb
8k — 207,953 * 5 без Udim = ~1 GB

—————————————————

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

Padding — это расстояние между шеллами. Можно заметить, что мы перешли от обычных Udim к использованию паддинга.

3D-графика — это не только создание красивых моделей. Здесь применяются сложные вычислительные технологии, которые взаимосвязаны друг с другом.

Паддинг связан с TD, TD — с разрешением текстур, а разрешение текстуры — с Udim. Но почему он также играет роль в этой статье?

Это расстояние необходимо для всех UV-плиток моделей, которые загружаются в игровые движки. В движках есть специальная методика оптимизации — MipMapping.

У этой технологии почти нет недостатков. Она не только делает игру более увлекательной, но и улучшает качество изображения на экране.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

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

Настройки в игровом движке позволяют контролировать этот процесс.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

На этой иллюстрации одна текстура как бы перетекает в другую. Там, где были сделаны разрезы на модели, текстура меняется. Это выглядит примерно так:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Если отступы сделаны правильно, результат будет таким, как на третьей строке изображений: цвета смешиваются друг с другом «с умом». Однако не обязательно самостоятельно выполнять такое «умное» заполнение цветов между шеллами. Существуют специальные программы, такие как Marmoset Toolbag и Substance 3D Painter, которые могут сделать это автоматически. Именно поэтому у нас на выходе карты, которые полностью покрыты цветом, а не чисто по шеллам.

Но если вы хотите иметь настраиваемый паддинг, в Marmoset Toolbag имеется такой функционал:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

На изображении вы можете заметить промежутки между шеллами. Однако padding — это не только расстояние между ними. Его также могут называть по-разному: расстояние в пикселях, пустое пространство между шеллами и так далее. Но суть остаётся неизменной: если все шеллы будут плотно прилегать друг к другу, текстуры будут выглядеть ужасно. Особенно это заметно, когда на UV-плитке много шеллов, которые прижаты друг к другу. При больших шеллах хотя бы есть небольшое расстояние между ними (из-за сложных форм расстояние образуется само), но дело не в этом. Важно правильно выполнять развёртку.

MipMapping — это технология, которая применяется всегда, и она напрямую связана с паддингом.

Влияние паддинга на TD:

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

При использовании Udim у нас есть несколько UV-плиток, и на них везде одинаковый паддинг. В этом и заключается преимущество использования Udim.

Когда у вас много островов, вокруг каждого из них должен быть паддинг 16 пикселей, и шеллы не могут быть больше. Даже если вы увеличите один остров, другие станут меньше из-за паддинга. Но при использовании Udim паддинг остаётся тем же, а UV-острова могут быть больше.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

На этих 2 скринах видно отличие: в заполнении пространства и у показателя TD при разном паддинге.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

На этом изображении модель покрыта картой Material ID. Эта карта позволяет лучше всего увидеть проблему, чем другие. Однако такая проблема будет возникать со всеми картами, так как при дальнейшем текстурировании, текстуры будут отображаться некорректно, особенно на глянцевых поверхностях.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

У нас стоит 1x samples. В этом и кроется вся проблема. Когда мы настраиваем паддинг, например, под разрешение 2k, у нас расстояние между шеллами будет 16 px, программа автоматически думает, что качество текстурирования будет соответствовать 2k, в таком случае не стоит менять свои взгляды на качество при запечке, если решили в будущем делать текстуры и под них уже настроили паддинг, значит, при запекании карт стоит обратить внимание на качество запечки. Samples — лишь один пазл при построении качественного изображения, стоит учитывать абсолютно все пазлы, включая и разрешение, и паддинг, и формат битности. Есть также вариант, что в низком качестве запекают только Material ID, ведь тут без разницы, какого качества будет однотонный цвет, но, как вы уже знаете, запекать даже такую не требовательную карту в хорошем качестве смысл есть.

————————————————————

Мы рассматриваем процесс запекания карты цвета от высокополигональной модели. Возможно, некоторые из вас не знали, но высокополигональные модели используются для запекания Material ID (Color ID) — карта цветов, которая будет использоваться для текстурирования низкополигональной модели.

Кроме Material ID, существуют и другие карты для запекания, такие как Group ID, Object ID, UV ID, albedo и Vertex color.

Когда мы запекаем Material ID, Marmoset анализирует цвета и автоматически адаптирует их для низкополигональной модели таким образом, чтобы они были максимально разными на цветовой палитре (чтобы избежать проблем при текстурировании). То есть цвета на низкополигональной модели будут выглядеть иначе, чем на высокополигональной.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

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

Object ID — карта, которая запекает цвета для каждого объекта локально. Например, дом будет иметь на карте 3 цвета (крыша, пол и стены), как простой пример.

UV ID — запекает разные цвета для каждого острова на UV развёртке (для low-poly объекта соответственно).

Albedo — как и вариант запечки Material ID, но только данная карта запекается с такими же цветами, которые вы назначили на high-poly объекте.

Vertex Color — карта, для запечки которой необходимо проделать некоторые манипуляции в программе ZBrush (и в других программах):

1. Выбираем часть объекта.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

2. Слева посередине выбираем нужный цвет (мы выбрали зелёный) и нажимаем на кнопку FillObject.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

3. Как видим, на выбранной части назначился новый материал.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Принцип работы схож с другими 3D-редакторами.

Если при загрузке моделей в Marmoset Toolbag вы не видите цветов, а все шейдеры выглядят белыми, то проблема будет в следующем:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Необходимо в настройках программы просто включить нужные галочки, в нашем случае — это fbx.

—————————————————

Также хочу дополнить о расстоянии между шеллами. Многие не понимают, как это работает, и могут допустить ошибку, если установят паддинг, равный 16 px, не зная правила mipmapping. В результате они потеряют часть важного пространства в плитке.

256 = 2 px
512 = 4 px
1024 = 8 px
2048 = 16 px
4096 = 32 px

При настройке паддинга важно помнить, что это расстояние внутри плитки между шеллами. Однако расстояние от самой границы плитки рассчитывается по-другому.

Суть в том, что пространство UV повторяется постоянно. Конец правого края плитки становится началом левого края. Поэтому при паддинге в 16 px расстояние между краями и шеллами должно быть в два раза меньше. Если расстояние от шелла до правого края составляет 8 px, то оставшиеся 8 px придутся на левый край. В этом случае паддинг будет выполнен правильно.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Многие дизайнеры либо не используют отступы по бокам, либо устанавливают их одинаковыми — например, по 16 пикселей. Если не использовать отступы вовсе, то текстуры могут накладываться друг на друга, создавая видимость швов и некачественных текстур.

В UVPackMaster3PRO функция для настройки паддинга выглядит примерно так:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Margin — это расстояние между шеллами в программе. В каждой программе оно рассчитывается по своим параметрам. Этот способ нам не подходит.

Ставим галочку на Pixel Margin (расстояние по пикселям).
Pixel Margin — расстояние между шеллами;
Pixel Padding — расстояние между шеллом и границей плитки;
Extra Margin To Others — расстояние между выбранными и не выбранными шеллами;
Texture Size — будущее разрешение текстуры.

Подводя итог, необходимо хорошо понимать, что такое паддинг, td и как правильно упаковывать UV. Ведь даже незначительная кривизна шеллов и нерациональное использование пространства могут повлиять на количество UV-плиток. Мы также не затрагивали вопрос растяжек, которые иногда возникают при использовании идеально ровных и красивых шеллов.

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

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

На изображениях виден пример правильной развёртки и неправильной (ещё мягко сказано).

3) Использование Udim в играх / в кино — затронули уже данный пункт чуть выше.

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

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

Из-за гигантских размеров моделей, шеллы будут иметь тоже большой размер, после вычисления нужного TD нам это всё придётся упаковать в одну UV-плитку с разрешением в 64k, либо использовать Udim-систему, которая будет состоять из, допустим, 20-ти UV-плиток, и каждая плитка будет иметь разрешение 1k.

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

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

Для примера можете глянуть на следующие изображения:

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост
Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Как можно заметить, без большого количества тайлов, такой детализации добиться почти невозможно.

4) Оптимизация при использовании в движке:

Главным образом этот плюс будет полезен для Unreal Engine, так как в нём использование Udim более развито, чем в Unity.

Мы будем на примере использовать UE4. Когда идёт подгрузка Udim, то они используются как единый шейдер (материал = шейдер), каждый тип (группа) карт — новый шейдер, то есть у нас будет так же, как и раньше, около 5 основных карт (или же шейдеров), но они уже состоят из Udim-тайлов. Доказательством успешной загрузки карт служит надпись «VT».

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Для подгрузки достаточно выбрать лишь первую текстуру по счёту (1001), а все остальные (по типу карт), если они имеются, UE подгрузит сам, для работы Udim не забываем поставить галочку на Enable virtual texture support.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

В Unreal Engine 5.5 выглядит она так.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

Чем полезен такой подход? Когда вы разбиваете текстуру на части, модель становится более оптимизированной. Это происходит потому, что Udim обладает гибкостью. При использовании этого метода текстура загружается не полностью, а постепенно. Это похоже на открытие одного файла размером 100 GB и десяти файлов по 10 GB. Один файл будет загружаться долго, так как он большой и единый. А при использовании десяти файлов каждый из них обрабатывается отдельно, что позволяет увеличить скорость работы с подобными моделями. В результате мы получаем оптимизацию. Когда вы подходите к модели, подгружаются ближайшие карты.

5) Многие программы поддерживают Udim, кроме тех, что были описаны выше, с Udim отлично работают Houdini, Nuke, Modo, Mari, 3D Coat, ZBrush, Maya, 3ds Max, Cinema 4D, Substance Designer, Marvelous Designer и многие другие.

6) Помимо того, что Udim можно использовать для достижения реалистичности на всей модели, также его можно использовать для распределения разрешения по приоритету на некоторых частях модели, например, если у вас модель будет издалека смотреться в игре и в будущем с ней будет сцена, где видна только лишь голова, то не обязательно делать всю модель с 8k текстурами, так как это будет занимать лишнее место и требовать больше ресурсов, достаточно сделать всю модель хорошего качества, а голову, которая в будущем будет показываться крупным планом, сделать высокого качества.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

7) Использование Udim в Marmoset Toolbag 5.

После долгожданного обновления Marmoset Toolbag 5, можно запекать текстурные карты, не заморачиваясь с текстурными сетами, а печь по самим Udim тайлам.
*При использовании оверлаппинга — важно его сделать качественно, иначе можно ждать проблем с шейдингом, это связано с очень чувствительной настройкой в разделе bake — Fix Mirrored Tangents. При текстурных сетах её можно было и не использовать.

Udim? Текстурные сеты? Texel Density? Что это и зачем оно? Разбор от А до Я 3D моделирование, Гайд, Инструкция, Сайт, Креатив, Длиннопост

8) Удобство Udim в Substance 3D Painter (далее - SP). *Будет рассказано чуть ниже.

———————Текстурные сеты———————

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

1) https://habr.com/ru/sandbox/236954/
2) https://vc.ru/design/1800615
3) https://vk.com/@lipa_l1-udim-teksturnye-sety-texel-density-c...
4) https://render.ru/ru/lipa_l1/post/26414
5) https://dzen.ru/a/Z6JBJ1n1jEBwvRvd
6) https://dtf.ru/gamedev/3471915-udim-teksturnye-sety-texel-de...
7) https://polycount.com/discussion/236654/udim-texture-sets-te...

Показать полностью 47
[моё] 3D моделирование Гайд Инструкция Сайт Креатив Длиннопост
7
Блог компании
ggsel.net
ggsel.net
6 месяцев назад

Как задонатить в Валорант в России в 2025 году⁠⁠

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

Донат остается основным способом получения Valorant Points (VP), которые игроки могут использовать для покупки различных скинов, боевых пропусков и уникальных предметов. Однако, начиная с 2022 года, многие российские игроки столкнулись с проблемами при пополнении своего баланса из-за различных ограничений.

В этом подробном руководстве мы в редакции GGSel.net рассмотрим, как безопасно и без рисков приобрести Valorant Points, а также обсудим доступные методы и их удобство.


Зачем покупать и на что можно потратить Valorant Points

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

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

Основные возможности, предоставляемые VP:

  1. Боевой пропуск (Battle Pass): доступ к эксклюзивным наградам текущего сезона, включая уникальные скины и бонусы.

  2. Скины для оружия: измените внешний вид оружия и добавьте новые анимации.

  3. Gun Buddies: украсьте свое оружие забавными и яркими брелоками.

  4. Карты Игроков и Граффити: сделайте свой игровой профиль уникальным.

  5. Radianite Points (RP): улучшайте свои скины и придавайте им более эффектный вид.

Кроме того, совсем недавно в игре появились сезонные капсулы VCT 2025 года. Они содержат:

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

1. Керамбит VCT: элегантное новое оружие ближнего боя с пятью уникальными расцветками, отражающими стили четырех международных лиг и VCT. На 3-ем уровне игроки с наибольшим количеством убийств увидят уникальное сияние своего оружия.

2. Четыре региональные карточки игрока: анимированные дизайны, передающие сущность каждой международной лиги.

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

А также, 14 февраля в Valorant стартует Ночной рынок — магазин с 6 скинами, которые продаются с большими скидками в течение 12 дней. Предложения индивидуальны для каждого игрока и выбираются случайным образом.


Как купить VP для Валорант в 2025 году: Способ 1. Через СБП прямо в игре

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

Cамая простая опция пополнения VP — прямо в игре. Перейдите во внутриигровой магазин игры, выберите способ оплаты «Xsolla» и укажите необходимое количество Valorant Points. Далее просто сканируйте QR код в приложении своего банка и оплатите покупку через Систему Быстрых Платежей, или введите данные вашей карты и подтвердите транзакцию.

Казалось бы, вот и все, статью можно заканчивать. Но многие игроки перешли на зарубежный регион из-за ранее действующих ограничений. А пополнить иностранный аккаунт этим способом не выйдет, поэтому идем дальше.


Способ 2. Через торговую площадку GGSel

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

Торговая площадка GGSel является одним из самых удобных и выгодных способов пополнения вашего аккаунта в Valorant, вне зависимости от того, находитесь ли вы в RU регионе или за его пределами. Здесь собрана обширная база предложений от проверенных продавцов, что позволяет выбрать наиболее подходящий вариант.

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост
  1. Откройте ваш браузер и перейдите на сайт GGSel. Введите в поисковую строку на главной странице запрос «Valorant».

  2. Выберите подходящий товар, учитывая регион, цену и репутацию продавца.

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

  4. Заполните все необходимые поля, которые могут включать вашу электронную почту, игровой ID или другие контактные данные.

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


Способ 3. Использование заграничной банковской карты

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

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

Финансовые затраты:

Перевод средств с российского счета на иностранный может обойтись как минимум в 9 900 рублей. Регулярное использование карты может увеличить общие затраты более чем до 16 000 рублей.

Порядок действий:

  1. Запустите Valorant и войдите в свою учетную запись Riot Games.

  2. Перейдите в настройки платежной системы в своем игровом аккаунте и добавьте свою заграничную банковскую карту.

  3. Выберите подходящую валюту для проведения расчетов. Это важно для избежания дополнительных конвертационных сборов.

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

  5. После успешного связывания карты, выберите количество Valorant Points, которые вы хотите приобрести, и завершите покупку, следуя подсказкам на экране.

Оформление такой карты может иметь ряд сложностей:

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

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

  • Расходы на доставку: Доставка карты из-за границы через внешние сервисы может оказаться накладной. Стоимость доставки может варьироваться в зависимости от страны и используемой курьерской службы.


Способ 4. Пополнение через виртуальную банковскую карту

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

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

Подробная процедура:

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

  2. Перейдите в настройки платежной системы в своем аккаунте Valorant. Введите данные созданной виртуальной карты.

  3. Перед тем, как совершить покупку, убедитесь, что на балансе вашей виртуальной карты достаточно средств. Это поможет избежать отклонений платежей.

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

  5. Выберите нужное количество Valorant Points и завершите покупку, воспользовавшись привязанной виртуальной картой.

На что обратить внимание при выборе виртуальной карты:

  • Комиссия за использование виртуальной карты должна быть разумной, желательно в пределах 10-15% от суммы пополнения. Более высокие комиссии могут сделать покупку невыгодной для вас.

  • Если для вас важна конфиденциальность, выберите сервис, не требующий верификации личности. Это позволит вам сохранить анонимность при проведении транзакций.

  • Убедитесь, что выбранный вами сервис поддерживает пополнение с российских банковских карт. Это важно для обеспечения удобства и минимизации дополнительных транзакционных затрат.


Способ 5. Пополнение через друзей из-за рубежа

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

Если у вас есть друзья или знакомые, проживающие за границей, они могут помочь пополнить ваш игровой баланс в Valorant. Это не только удобно, но и может обойтись гораздо дешевле, чем использование других методов.

Как это устроено?

  1. Ваш друг заходит в свой аккаунт Valorant и покупает нужное количество Valorant Points.

  2. После покупки друг может передать вам специальный код пополнения VP или непосредственно перевести валюту на ваш аккаунт.

  3. Вы возмещаете ему затраты удобным для вас обоих способом.


Как активировать код на получение VP

Как задонатить в Валорант в России в 2025 году Видеоигра, Геймеры, Компьютерные игры, Игры, Гайд, Покупка, Инструкция, Донат, Валюта, Шутер, Valorant, Riot Games, Блоги компаний, Длиннопост

Если нет возможности оплатить донат банковской картой, можно приобрести коды для пополнения Valorant Points на GGSel, где доступно куда больше способов оплаты.

Чтобы их активировать:

  1. Запустите Valorant и войдите в свою учетную запись Riot Games.

  2. Перейдите в интегрированный магазин и выберите значок Valorant Points.

  3. Откройте раздел «Предоплаченные карты и коды».

  4. Введите ваш код, обязательно вставив дефис после второго символа (пример: AB-CDEFGHIJKL), а затем нажмите «Отправить».

  5. Проверьте свой баланс. Как только система завершит проверку, Valorant Points будут мгновенно зачислены на ваш аккаунт.


Переходите на GGSel.net — торговую площадку, где вы найдете игры для ПК и консолей, DLC, сможете пополнить баланс популярных игровых и неигровых сервисов, купить и продать игровой аккаунт. И все это — по выгодным ценам!

Реклама ИП «Суханов Д.Ф.», ИНН: 290132412356

Показать полностью 9
Видеоигра Геймеры Компьютерные игры Игры Гайд Покупка Инструкция Донат Валюта Шутер Valorant Riot Games Блоги компаний Длиннопост
1
3
mcnikirikitiki
6 месяцев назад
Лига программистов

Основы программирования на C++: функции, шаблоны⁠⁠

Прежде чем читать мою статью - реши для себя, зачем ты это делаешь. Даже если ты просто нормальный человек, лишним не будет.

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

Здравствуйте, мои маленькие любители программирования!

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

Основные концепции функций

  1. Что такое функция? Функция — это блок кода, который выполняет определенную задачу. Она может принимать входные данные (аргументы), обрабатывать их и возвращать результат. В языке C++ каждая программа начинается с выполнения функции main(), которая является точкой входа в программу.

    int main() {

    // Код программы

    return 0;

    }

    • int перед main() указывает, что функция возвращает целое число.

    • return 0; означает успешное завершение программы.

  2. Создание простой функции

    Рассмотрим пример функции, которая складывает два числа:

    int Sum(int a, int b) {

    return a + b;

    }

    • int перед именем функции указывает, что функция возвращает значение типа int.

    • Sum — это имя функции.

    • (int a, int b) — это параметры функции, то есть значения, которые передаются в функцию при её вызове.

    Пример использования функции Sum:

    int main() {

    int x = 17, y = 42;

    int z = Sum(x, y); // Вызов функции Sum

    std::cout << "Сумма: " << z << "\n"; // Выведет 59

    }

  3. Функции без возвращаемого значения

    Если функция не должна возвращать результат, её можно объявить как void. Это означает, что функция просто выполняет какие-то действия, но не возвращает никаких данных.

    void DoSomething(double d, char c) {

    std::cout << "Число: " << d << ", Символ: " << c << "\n";

    }

    Пример использования:

    int main() {

    DoSomething(3.14, '@'); // Выведет: Число: 3.14, Символ: @

    }

  4. Рекурсивные функции

    Рекурсия — это когда функция вызывает саму себя. Это полезно для решения задач, которые могут быть разделены на подзадачи того же типа. Например, вычисление факториала числа:

    #include <cstdint> // Для uint64_t

    std::uint64_t Factorial(std::uint64_t n) {

    if (n == 0) {

    return 1; // Базовый случай

    }

    return n * Factorial(n - 1); // Рекурсивный вызов

    }

    Пример использования:

    int main() {

    std::cout << "Факториал 5: " << Factorial(5) << "\n"; // Выведет 120

    }

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


Аргументы функций

  1. Передача аргументов по значению

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

    void f(int x, int y) {

    x = 10; // Изменение x не повлияет на внешнюю переменную

    y = 20; // Изменение y не повлияет на внешнюю переменную

    }

    int main() {

    int a = 1, b = 2;

    f(a, b);

    std::cout << "a: " << a << ", b: " << b << "\n"; // Выведет: a: 1, b: 2

    }

  2. Передача аргументов по ссылке

    Чтобы изменять исходные переменные внутри функции, используются ссылки (&). Это позволяет функции работать с оригинальными переменными, а не с их копиями.

    void Swap(int& x, int& y) { // Передача по ссылке

    int temp = x;

    x = y;

    y = temp;

    }

    int main() {

    int a = 1, b = 2;

    Swap(a, b);

    std::cout << "a: " << a << ", b: " << b << "\n"; // Выведет: a: 2, b: 1

    }

  3. Константные ссылки

    Для сложных типов данных (например, векторов или строк) лучше передавать аргументы по константной ссылке (const &). Это позволяет избежать лишнего копирования данных и защищает их от случайного изменения внутри функции.

    void PrintVector(const std::vector<int>& vec) {

    for (int num : vec) {

    std::cout << num << " ";

    }

    std::cout << "\n";

    }

    int main() {

    std::vector<int> numbers = {1, 2, 3, 4, 5};

    PrintVector(numbers); // Выведет: 1 2 3 4 5

    }


Возвращаемые значения функций

  1. Возврат простых типов

    Функция может возвращать любые типы данных, такие как int, double, char и т.д. Например:

    double Divide(double a, double b) {

    return a / b;

    }

    int main() {

    double result = Divide(10.0, 2.0);

    std::cout << "Результат деления: " << result << "\n"; // Выведет: 5.0

    }

  2. Возврат сложных типов

    Возврат сложных типов данных (например, векторов или строк) также возможен. Компилятор автоматически оптимизирует процесс копирования таких объектов.

    std::string Concatenate(const std::vector<std::string>& parts) {

    std::string result;

    for (const auto& part : parts) {

    result += part;

    }

    return result;

    }

    int main() {

    std::vector<std::string> words = {"Hello", " ", "World", "!"};

    std::cout << Concatenate(words) << "\n"; // Выведет: Hello World!

    }

  3. Опасность возврата ссылок на локальные переменные

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

    int& GetLocalVariable() {

    int x = 10;

    return x; // Ошибка! x будет уничтожен после завершения функции

    }


Лямбда-функции

Лямбда-функции — это анонимные функции, которые можно определять непосредственно в месте использования. Они особенно полезны для коротких операций, например, для сортировки.

#include <algorithm>

#include <vector>

int main() {

std::vector<int> numbers = {5, 2, 8, 1, 9};

// Сортировка в обратном порядке с помощью лямбда-функции

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {

return a > b; // Сравнение в обратном порядке

});

for (int num : numbers) {

std::cout << num << " "; // Выведет: 9 8 5 2 1

}

}


Шаблоны

Шаблоны позволяют создавать универсальный код, работающий с различными типами данных.

  1. Шаблонные функции

    Шаблонная функция позволяет работать с разными типами данных без необходимости писать отдельные версии для каждого типа.

    template<typename T>

    T Max(T a, T b) {

    return (a > b) ? a : b;

    }

    int main() {

    std::cout << "Максимум: " << Max(10, 20) << "\n"; // Выведет: 20

    std::cout << "Максимум: " << Max(3.14, 2.71) << "\n"; // Выведет: 3.14

    std::cout << "Максимум: " << Max("apple", "banana") << "\n"; // Выведет: banana

    }

  2. Шаблонные структуры

    Шаблоны также можно использовать для создания универсальных структур данных. Например, структура Triple, которая хранит три значения разных типов:

    template<typename T1, typename T2, typename T3>

    struct Triple {

    T1 first;

    T2 second;

    T3 third;

    };

    int main() {

    Triple<int, double, std::string> data = {1, 3.14, "Hello"};

    std::cout << "First: " << data.first << ", Second: " << data.second

    << ", Third: " << data.third << "\n";

    }


Это основные концепции работы с функциями и шаблонами в C++. Теперь вы знаете, как создавать и использовать функции, передавать аргументы, возвращать значения и работать с шаблонами.

Задачи на функции

1. Простые функции

  1. Функция "Приветствие"
    Напишите функцию void Greet(const std::string& name), которая выводит приветствие в формате:
    "Привет, [имя]!".
    Пример:

    Greet("Анна"); // Вывод: Привет, Анна!

  2. Вычисление площади прямоугольника
    Напишите функцию double CalculateRectangleArea(double width, double height), которая принимает ширину и высоту прямоугольника и возвращает его площадь.
    Пример:

    double area = CalculateRectangleArea(5.0, 3.0); // Результат: 15.0

  3. Проверка числа на четность
    Напишите функцию bool IsEven(int number), которая возвращает true, если число четное, и false — если нечетное.
    Пример:

    bool result = IsEven(4); // Результат: true


2. Функции с передачей по ссылке

  1. Увеличение значения на 1
    Напишите функцию void Increment(int& value), которая увеличивает переданное значение на 1.
    Пример:

    int x = 5;

    Increment(x);

    std::cout << x; // Вывод: 6

  2. Обмен значений двух переменных
    Реализуйте функцию void Swap(int& a, int& b), которая меняет значения двух переменных местами.
    Пример:

    int x = 10, y = 20;

    Swap(x, y);

    std::cout << x << " " << y; // Вывод: 20 10


3. Рекурсивные функции

  1. Числа Фибоначчи
    Напишите рекурсивную функцию int Fibonacci(int n), которая возвращает n-е число Фибоначчи.
    Пример:

    int result = Fibonacci(7); // Результат: 13

  2. Степень числа
    Напишите рекурсивную функцию int Power(int base, int exponent), которая возводит число base в степень exponent.
    Пример:

    int result = Power(2, 3); // Результат: 8


Задачи на шаблоны

4. Шаблонные функции

  1. Минимум двух чисел
    Напишите шаблонную функцию T Min(T a, T b), которая возвращает минимальное из двух значений.
    Пример:

    int result1 = Min(10, 20); // Результат: 10

    double result2 = Min(3.14, 2.71); // Результат: 2.71

  2. Сравнение строк
    Напишите шаблонную функцию bool AreEqual(T a, T b), которая возвращает true, если два значения равны, и false — если нет.
    Пример:

    bool result1 = AreEqual(5, 5); // Результат: true

    bool result2 = AreEqual("hello", "world"); // Результат: false

  3. Сумма элементов массива
    Напишите шаблонную функцию T SumArray(const std::vector<T>& arr), которая вычисляет сумму всех элементов вектора.
    Пример:

    std::vector<int> numbers = {1, 2, 3, 4};

    int result = SumArray(numbers); // Результат: 10


5. Шаблонные структуры

  1. Шаблонная структура "Точка"
    Создайте шаблонную структуру Point<T>, которая хранит координаты точки в двумерном пространстве. Добавьте метод void Print(), который выводит координаты точки.
    Пример:

    Point<int> p1 = {3, 4};

    p1.Print(); // Вывод: (3, 4)

  2. Шаблонная структура "Пара"
    Создайте шаблонную структуру Pair<T1, T2>, которая хранит два значения разных типов. Добавьте метод void Print(), который выводит значения пары.
    Пример:

    Pair<int, std::string> pair = {42, "Ответ"};

    pair.Print(); // Вывод: (42, Ответ)


Задачи на лямбда-функции

6. Лямбда-выражения

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

    std::vector<int> numbers = {1, 2, 3, 4, 5, 6};

    std::vector<int> evenNumbers;

    std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(evenNumbers), [](int x) {

    return x % 2 == 0;

    });

    // Результат: evenNumbers = {2, 4, 6}

  2. Сортировка строк по длине
    Используя лямбда-функцию, отсортируйте вектор строк по их длине.
    Пример:

    std::vector<std::string> words = {"apple", "banana", "kiwi"};

    std::sort(words.begin(), words.end(), [](const std::string& a, const std::string& b) {

    return a.size() < b.size();

    });

    // Результат: words = {"kiwi", "apple", "banana"}


Дополнительные задачи

7. Комбинированные задачи

  1. Калькулятор
    Напишите шаблонную функцию T Calculator(T a, T b, char operation), которая выполняет одну из операций (+, -, *, /) над двумя числами.
    Пример:

    int result = Calculator(10, 5, '+'); // Результат: 15

    double result2 = Calculator(10.0, 2.0, '/'); // Результат: 5.0

  2. Поиск максимального элемента в массиве
    Напишите шаблонную функцию T FindMax(const std::vector<T>& arr), которая возвращает максимальный элемент вектора.
    Пример:

    std::vector<int> numbers = {3, 1, 4, 1, 5, 9};

    int max = FindMax(numbers); // Результат: 9

  3. Подсчет слов в строке
    Напишите функцию int CountWords(const std::string& text), которая подсчитывает количество слов в строке. Слова разделены пробелами.
    Пример:

    int count = CountWords("Hello world!"); // Результат: 2


Эти задачи помогут вам закрепить основные концепции работы с функциями, шаблонами и лямбда-выражениями в C++. Вы можете начать с простых задач и постепенно переходить к более сложным. Удачи!

Показать полностью
[моё] Программирование Гайд IT C++ Windows Длиннопост
48
3
mcnikirikitiki
6 месяцев назад
Лига программистов

Сборка проектов на C/C++: от базовых принципов к продвинутым решениям. Часть II - Инструменты автоматизации сборки⁠⁠

1. Почему важно правильно настраивать сборку?

Правильная настройка сборки — это не просто удобство для разработчиков, но и ключ к успешному развитию проекта. Вот несколько причин:

  • Масштабируемость: Чем больше проект, тем сложнее его поддерживать вручную. Автоматизация сборки позволяет легко добавлять новые файлы и зависимости.

  • Переносимость: Проекты часто запускаются на разных платформах (Linux, Windows, macOS). Хорошая система сборки гарантирует, что код будет работать везде.

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

  • CI/CD: Современные системы непрерывной интеграции и доставки (CI/CD) требуют четко настроенной сборки. Это ускоряет тестирование и деплой.


2. Универсальные Makefile'ы

В примере выше мы рассмотрели базовый Makefile. Теперь давайте сделаем его более универсальным, чтобы он мог обрабатывать любое количество исходных файлов:

# Имя исполняемого файла

TARGET = program

# Компилятор и флаги

CXX = g++

CXXFLAGS = -Wall -std=c++17

LDFLAGS =

# Список исходных файлов

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp=.o)

# Основная цель

all: $(TARGET)

# Как собирать программу

$(TARGET): $(OBJS)

$(CXX) $(OBJS) $(LDFLAGS) -o $(TARGET)

# Правило для объектных файлов

%.o: %.cpp

$(CXX) $(CXXFLAGS) -c $< -o $@

# Очистка

clean:

rm -f $(OBJS) $(TARGET)

Здесь используется функция wildcard, которая автоматически находит все .cpp файлы в директории. Это делает Makefile более гибким.


3. Работа с зависимостями

3.1. Установка библиотек через пакетный менеджер

Это самый простой способ, но он имеет ограничения:

  • Разные дистрибутивы Linux могут использовать разные пакетные менеджеры (apt, yum, pacman).

  • Версии библиотек в репозиториях могут быть устаревшими.

Пример установки libcurl:

sudo apt-get install libcurl4-openssl-dev

3.2. Локальная компиляция библиотек

Если вы хотите избежать проблем с версиями библиотек, лучше скомпилировать их локально. Например, для libcurl:

wget https://curl.se/download/curl-8.11.1.tar.bz2

tar -jxf curl-8.11.1.tar.bz2

cd curl-8.11.1

./configure --with-openssl

make

Теперь используйте локальные пути при компиляции:

g++ curlexample.cpp -o curlexample \

-I ./curl-8.11.1/include \

-L ./curl-8.11.1/lib/.libs \

-l curl


4. Продвинутые инструменты сборки

4.1. CMake

CMake — это мощный инструмент, который поддерживает кроссплатформенную сборку. Вот пример CMakeLists.txt для проекта с зависимостью от libcurl:

cmake_minimum_required(VERSION 3.10)

project(CurlExample LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(CURL REQUIRED)

add_executable(CurlExample curlexample.cpp)

target_link_libraries(CurlExample PRIVATE CURL::libcurl)

Чтобы собрать проект:

mkdir build

cd build

cmake ..

make

4.2. Meson

Meson — это современный инструмент, который генерирует файлы для Ninja. Пример meson.build:

project('CurlExample', 'cpp')

# Поиск libcurl

dependency('libcurl')

executable('curlexample', 'curlexample.cpp', dependencies: ['libcurl'])

Сборка:

meson setup build

cd build

ninja

4.3. SCons

SCons использует Python для написания рецептов. Пример SConstruct:

env = Environment()

env.Append(LIBS=['curl'])

env.Program(target='curlexample', source='curlexample.cpp')

Сборка:

scons


5. Docker для изоляции сборки

Docker позволяет создавать изолированные контейнеры с нужной версией ОС и библиотек. Это особенно полезно для старых проектов или CI/CD.

Пример Dockerfile:

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y \

build-essential cmake git libcurl4-openssl-dev

WORKDIR /app

COPY . .

RUN mkdir build && cd build && cmake .. && make

Сборка и запуск:

docker build -t myproject .

docker run -it --rm -v $(pwd):/app myproject


6. Советы по оптимизации сборки

  1. Инкрементальная сборка: Не пересобирайте весь проект, если изменился только один файл. Инструменты вроде make и ninja поддерживают это "из коробки".

  2. Параллельная сборка: Используйте флаг -j для ускорения сборки на многоядерных процессорах:

    make -j$(nproc)

  3. Кэширование зависимостей: Если вы используете Docker, сохраняйте зависимости в кэше, чтобы не скачивать их заново при каждой сборке.

  4. Статическая vs Динамическая линковка: Выбирайте подходящий метод в зависимости от ваших целей:

    • Статическая линковка создает автономный исполняемый файл, но увеличивает его размер.

    • Динамическая линковка делает файл меньше, но требует наличия библиотек на целевой системе.


7. Заключение

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

  • Для небольших проектов используйте Makefile.

  • Для средних и больших проектов выбирайте CMake или Meson.

  • Если вам нужно тестировать сборку в разных окружениях, используйте Docker.

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

Помните: хороший процесс сборки — это залог стабильности и успеха вашего проекта!

Показать полностью
[моё] Программирование Гайд IT Windows C++ Сборка Длиннопост
0
3
wonderlove
wonderlove
6 месяцев назад
Нейро-Музыка
Серия Нейро-Звук

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ?⁠⁠

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

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

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

1. Поиск референсов

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Референсы нужны не только для сведения и мастеринга. Они помогут вдохновиться и нацелиться на конечный результат. Это готовые истории успеха, на которые мы опираемся.

На этом шаге мы используем нейро-функцию «Моя Волна» в Яндекс.Музыке или сервис Cyanite AI.

2. Текст к треку

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Текст также поручим ИИ. Тут выбирайте, что по душе: DeepSeek, GPT, Claude или другая модель.

3. Генерируем музыку

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Теперь нам нужно и саму музыку сделать.

Важно: у вас должны быть ПРАВА НА ТРЕК, чтобы выпустить его легально. Пока такое есть только Udio и Suno. Как генерировать музыку рассказали в гайде в этом посте

4. Генерируем обложку

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Здесь тоже подключаем нейросети, можно использовать бесплатный artgeneration.me или любой другой генератор картинок. На эту тему я даже сделал отдельное видео

5. Делаем уникальный войстег в телеграм-боте SteosVoice

Если нужно добавить изюминку, то войстеги — отличный приём. Кроме телеграм-бота SteosVoice есть и другие полезные боты для музыкантов, я собрал 10+ ботов в этой подборке

6. Текст для питчинга

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Питчинг — подача заявки на попадание релиза в плейлисты. В LLM также можно сделать текст для поста в соц. сетях.

7. Нейро-сниппеты

КАК ВЫПУСТИТЬ ТРЕК, ИСПОЛЬЗУЯ ТОЛЬКО НЕЙРОСЕТИ? Искусственный интеллект, Digital, Нейронные сети, Видеомонтаж, Создание музыки, Звук, Udio, Suno, Spotify, Apple music, Яндекс Музыка, Гайд, Видео, YouTube, Длиннопост

Делаем красивый нейро-сниппет с помощью Kling, Minimax, Pika или другой нейронки для генерации видео

Готово! Осталось всё это упаковать и отгрузить с помощью дистрибьюторов.

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

Главное — не забывать, что технологии лишь инструмент, а креативность и видение остаются за человеком.

🔊 Нейро-Звук

Показать полностью 7 1
[моё] Искусственный интеллект Digital Нейронные сети Видеомонтаж Создание музыки Звук Udio Suno Spotify Apple music Яндекс Музыка Гайд Видео YouTube Длиннопост
3
0
loonyloon
loonyloon
6 месяцев назад

Может быть кому-нибудь пригодиться "восстановление и перестройка репозитория wmi в случае когда он отвалился⁠⁠

Вот пример содержимого для .bat файла, который поможет восстановить репозиторий WMI в Windows 10 и 11. Этот скрипт выполняет ряд команд для остановки и перезапуска служб, связанных с WMI, а также перестроение репозитория.

@Echo off

echo Восстановление репозитория WMI...

echo Остановка службы Winmgmt...

net stop winmgmt /y

echo Удаление старого репозитория WMI...

if exist %windir%\system32\wbem\repository.bak rmdir /s /q %windir%\system32\wbem\repository.bak

if exist %windir%\system32\wbem\repository ren %windir%\system32\wbem\repository repository.bak

echo Перерегистрация WMI...

cd /d %windir%\system32\wbem

for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s

echo Перекомпиляция MOF-файлов...

for /f %%s in ('dir /b *.mof') do mofcomp %%s

echo Перезапуск службы Winmgmt...

net start winmgmt

echo Восстановление завершено. Проверьте состояние WMI.

pause

### Как использовать:

1. Скопируйте этот текст в текстовый редактор (например, Блокнот).

2. Сохраните файл с расширением .bat, например, fix_wmi.bat.

3. Запустите файл от имени администратора (правой кнопкой мыши → "Запуск от имени администратора").

### Что делает скрипт:

1. Останавливает службу winmgmt.

2. Удаляет старый репозиторий WMI (если он есть) и создает резервную копию.

3. Перерегистрирует все DLL-файлы, связанные с WMI.

4. Перекомпилирует MOF-файлы.

5. Запускает службу winmgmt снова.

После выполнения скрипта проверьте, восстановилась ли функциональность WMI. Если проблема сохраняется, может потребоваться дополнительная диагностика.

Показать полностью
[моё] Windows Гайд Текст
0
56
andron2006
andron2006
6 месяцев назад
Стендовый моделизм
Серия Журналы и книги

17th and 18th Century Ship Models⁠⁠

  • 17th and 18th Century Ship Models
    PDF | 39 MB | 253 стр.
    Цветные иллюстрации

1/23

Смотреть и скачать в PDF:

17th and 18th Century Ship Models

Показать полностью 23
Моделизм Коллекция Масштабная модель Конструктор Стендовый моделизм Миниатюра Покраска миниатюр Гайд Книги Судомоделизм Парусник Хобби Сборка
0
4
mcnikirikitiki
6 месяцев назад
Лига программистов

Основы сборки проектов на C/C++⁠⁠

Прежде чем читать мою статью - реши для себя, зачем ты это делаешь. Даже если ты просто нормальный человек, лишним не будет.

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

Здравствуйте, мои маленькие любители программирования!

Давайте разберем основы сборки проектов на Си/Си++ простым языком:

  1. Основные понятия:

  • Программа собирается из множества файлов

  • Есть два типа библиотек:

    • Статические (.a, .lib) - код встраивается в exe-файл

    • Динамические (.so, .dll) - подгружаются при запуске

  1. Этапы сборки:

// hello.cpp

#include <iostream>

void say_hello() {

std::cout << "Hello, world!" << std::endl;

}

// main.cpp

void say_hello();

int main() {

say_hello();

return 0;

}

Компиляция:

# Компилируем каждый файл отдельно

g++ -c hello.cpp -o hello.o

g++ -c main.cpp -o main.o

# Связываем объектные файлы в исполняемый

g++ hello.o main.o -o program

  1. Работа с библиотеками:

Создание статической библиотеки:

# Создаем объектный файл

g++ -c mylib.cpp -o mylib.o

# Архивируем в статическую библиотеку

ar rcs libmylib.a mylib.o

Использование:

g++ main.cpp -L. -lmylib -o program

  1. Особенности C++

Искажение имен (name mangling):

// В исходном коде

void my_function(int a);

// После компиляции

_Z11my_functioni

  1. Управление зависимостями

Пример Makefile:

program: main.o hello.o

g++ main.o hello.o -o program

main.o: main.cpp

g++ -c main.cpp

hello.o: hello.cpp

g++ -c hello.cpp

clean:

rm *.o program

Основные команды:

  • make - собрать проект

  • make clean - очистить скомпилированные файлы

Это базовые принципы, которые помогут начать работать с проектами на Си/Си++. В следующих частях рассмотрим более сложные случаи и современные инструменты сборки.

Показать полностью
[моё] Программирование IT Программист Сборка Linux Windows Гайд Текст
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии