#mopsicus: заметки с тегом графика https://mopsicus.ru/tags/graphics/ об играх, разработке на Unity и личном опыте Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин об играх, разработке на Unity и личном опыте Герои Гильдгаарда 261 https://mopsicus.ru/all/heroes-of-gildgaard/ Sun, 24 Sep 2023 13:25:31 +0300 Игорь Лопатин https://mopsicus.ru/all/heroes-of-gildgaard/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Герои Гильдгаарда</h3><h4 style="display: none;" itemprop="description">Герои Гильдгаарда</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/banner.png" width="1500" height="500" alt="Герои Гильдгаарда" /> </div> <p>Запустили в софтлонч нашу первую игру с 3D, логическая онлайн стратегия на 2 или 4 игрока. Для любителей шашек, нард, шахмат, го и прочих настольных игр такого типа, будет интересно. Тут нет рандома, есть несколько стратегий, партии довольно короткие. Написал чуть <a href="https://pikabu.ru/story/geroi_gildgaarda_logicheskaya_onlayn_strategiya_10671660">подробнее на Пикабу</a>.</p> <p>Делали на Unity. Доступно в <a href="https://apps.apple.com/ru/app/id1642705298">AppStore</a>, <a href="https://play.google.com/store/apps/details?id=games.magicboard.hg">Google Play</a> и <a href="https://appgallery.huawei.com/#/app/C106987185">AppGallery</a>.</p> Статистика по рассылке 231 https://mopsicus.ru/all/unity-newsletter-stats/ Tue, 05 Jan 2021 18:26:00 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-newsletter-stats/ <p>Небольшая статистика за год рассылки.</p> <p>Понятно, что первые выпуски прочитали больше, соответственно, больше голосов. Поэтому такой тренд на уменьшение количества голосов.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Статистика рассылки за год</h3><h4 style="display: none;" itemprop="description">Статистика рассылки за год</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/newsletter-chart-year.png" width="827" height="512" alt="Статистика рассылки за год" /> <div class="e2-text-caption">Статистика по голосам за каждый выпуск</div> </div> <p>В среднем, рассылку открывают 40-50% подписчиков, но надеюсь, что веб-версию прочитало больше людей :) Несколько раз ссылки на выпуски попадали в телеграм канал по Unity, там было много просмотров, но ссылку давали сразу на Mailchimp, поэтому в статистике это не видно :(</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Переходы по коротким ссылкам</h3><h4 style="display: none;" itemprop="description">Переходы по коротким ссылкам</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/newsletter-chart-links.png" width="827" height="512" alt="Переходы по коротким ссылкам" /> <div class="e2-text-caption">Статистика по переходам с коротких ссылок</div> </div> <p>Вообще, оказалось, что это не так уж и просто делать рассылку ? Но интересно. Постараюсь в этом году сделать её интересней и полезней.</p> <p>? Все выпуски: <a href="https://cutt.ly/mopsicus-s1e1">1</a> <a href="https://cutt.ly/mopsicus-s1e2">2</a> <a href="https://cutt.ly/mopsicus-s1e3">3</a> <a href="https://cutt.ly/mopsicus-s1e4">4</a> <a href="https://cutt.ly/mopsicus-s1e5">5</a> <a href="https://cutt.ly/mopsicus-s1e6">6</a> <a href="https://cutt.ly/mopsicus-s1e7">7</a> <a href="https://cutt.ly/mopsicus-s1e8">8</a> <a href="https://cutt.ly/mopsicus-s1e9">9</a> <a href="https://cutt.ly/mopsicus-s1e10">10</a> <a href="https://cutt.ly/mopsicus-s1e11">11</a> <a href="https://cutt.ly/mopsicus-s1e12">12</a></p> Топ-10 ошибок в оптимизации Unity 219 https://mopsicus.ru/all/top-10-optimization-fails-unity/ Fri, 09 Oct 2020 13:45:58 +0300 Игорь Лопатин https://mopsicus.ru/all/top-10-optimization-fails-unity/ <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/kzfawIay8G4" frameborder="0" allowfullscreen></iframe></div></div> <p>Хороший вебинар от юнитеков, рассмотрены частые ошибки совершаемые при оптимизиции, обзор инструментов по оптимизации, примеры с пояснениями. Рекомендую.</p> Unreal Engine 5 207 https://mopsicus.ru/all/unreal-engine-5/ Thu, 14 May 2020 10:37:02 +0300 Игорь Лопатин https://mopsicus.ru/all/unreal-engine-5/ <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/qC5KtatMcUw" frameborder="0" allowfullscreen></iframe></div></div> <p>Уже везде <a href="https://habr.com/ru/company/pixonic/blog/501828/">написали про анонс UE5</a>, не буду копипастить. Это конечно <b>очень</b> круто! Оставлю только основное:</p> <ul> <li>полностью динамическое глобальное освещение: без запекания, лайтмапов и т. п. (Lumen)</li> <li>виртуализированная геометрия: миллиарды треугольников, 8K текстуры и прочее (Nanite)</li> <li>новая аудиосистема: можно записывать и воспроизводить пространственные аудио</li> <li>обратная совместимость с UE 4.25</li> <li>лимит в миллион долларов, до получения роялити</li> <li>всё это для ПК и консолей, UE и мобильные платформы не очень контактируют</li> <li>размеры игр явно вырастут ещё больше</li> <li>скоро игры нельзя будет отличить от кино и реальности</li> <li>наслаждайтесь картинкой</li> </ul> Анимации в UX 180 https://mopsicus.ru/all/animation-ux-guide/ Wed, 02 Oct 2019 11:06:56 +0300 Игорь Лопатин https://mopsicus.ru/all/animation-ux-guide/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/animation-in-app-guide.gif" width="1920" height="960" alt="" /> </div> <p>Отличная статья про <a href="https://ux.pub/polnoe-rukovodstvo-po-pravilnomu-ispolzovaniyu-animatsii-v-ux">использование анимаций в UX</a>. Просто и понятно. Примеры того, как делать не надо. В общем, однозначно в закладки.</p> <p>В догонку, есть старый <a href="https://easings.net/ru">сайтик с примерами функций плавности (easing)</a>.</p> Crop и scale текстур в Unity 171 https://mopsicus.ru/all/crop-scale-texture2d-unity/ Tue, 09 Jul 2019 12:25:17 +0300 Игорь Лопатин https://mopsicus.ru/all/crop-scale-texture2d-unity/ <p>Понадобилось делать простой кроп и ресайз картинки в Unity, но пространство имен <i>System.Drawing.Imaging</i> недоступно. Поэтому, чтобы изменить размер или вырезать часть из исходного изображения, все операции пришлось делать через Texture2D.</p> <p>Демка и исходники на Github.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/crop-scale-unity.png" width="519" height="1000" alt="" /> </div> <p><a href="https://github.com/mopsicus/unity-crop-scale-texture">Ссылка на Github</a></p> Favicon generator 151 https://mopsicus.ru/all/favicon-generator/ Mon, 11 Mar 2019 12:40:44 +0300 Игорь Лопатин https://mopsicus.ru/all/favicon-generator/ <p>Если вам когда-нибудь придётся делать favicon для сайта, рекомендую воспользоваться <a href="https://realfavicongenerator.net/">Favicon generator</a>. Собственно он и гуглится первым :) Количество «настроек» впечатляет.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/favicon-generator.png" width="610" height="301" alt="" /> </div> <p>Версии для iOS Web Clip, Android Chrome, Windows Metro (orly?), различные режимы сжатия, прозрачности и прочее. Всё это скачивается одним архивом и работает во всех браузерах.</p> Unity blur effect и 2 камеры 96 https://mopsicus.ru/all/unity-blur-effect-2-cameras/ Mon, 29 Jan 2018 10:26:23 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-blur-effect-2-cameras/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unity-blur-effect-2-cameras.png" width="784" height="650" alt="" /> </div> <p>В этом примере, я собрал сразу два интересных момента:</p> <ol start="1"> <li>как сделать размытый фон</li> <li>как использовать сразу 2 камеры</li> </ol> <p>Для чего это может понадобиться? Например, чтобы одна камера была для игры, с настроенными пост эффектами, другая для интерфейса. Или чтобы сделать вот такой эффект размытия. В общем-то, можно и 3 камеры использовать. Зависит от потребностей и фантазии...</p> <p>Фокус в том, чтобы настроить камеру на рендер только нужного слоя.<br /> Как было сделано в этом примере:</p> <ul> <li>Объекты или контейнер которые должны быть размыты, находятся в слое <b>Blur</b></li> <li><i>Blur camera</i> рендерит только слой <b>Blur</b> (Culling Mask)</li> <li>Для <i>Main camera</i> этот слой отключён, стоит флаг <b>Depth only</b> и глубина больше, чем у Blur camera</li> <li>Ну и на Blur camera висит собственно <a href="https://github.com/QianMo/Awesome-Unity-Shader/tree/master/Volume%2015%20%E5%B1%8F%E5%B9%95%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A(Gaussian%20Blur)%E7%89%B9%E6%95%88%E7%9A%84%E5%AE%9E%E7%8E%B0">скрипт размытия</a></li> </ul> <p>По такому же принципу можно одновременно и 3 камеры сделать. Если потребуется.</p> <p><a href="https://github.com/mopsicus/unity-blur-effect">Исходник на Github</a></p> О Texture2D и памяти https://mopsicus.ru/all/unity-texture2d-memory-leak-solve/ https://mopsicus.ru/all/unity-texture2d-memory-leak-solve/ Thu, 11 May 2017 10:56:00 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-texture2d-memory-leak-solve/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/texture2d-compression.png" width="552" height="146" alt="" /> </div> <p>Если погуглить на тему Unity Texture2D, memory leak, www.texture — то можно обнаружить кучу постов с вопросами о том, почему не освобождается память. И это на на самом деле так, если ничего не предпринимать.</p> <p>Намучившись со всем этим, составил небольшой список мыслей/советов:</p> <ul> <li>Создавайте, как можно меньше Texture2D, в идеале использовать пул. И <b>обязательно</b> делать Destroy, когда объект уже не будет использоваться, иначе память не освободится.</li> <li>При использовании класса WWW, также нужно удалять www.texture и делать www.Dispose.</li> <li>Сжатие «на лету» <b>не работает</b>, т. е. если вы например загружаете изображение из интеренетов и потом вставляете в Image, способом ниже, то на мобильном устройстве, картинка полностью развернется в память, без сжатия. И это печально.</li> </ul> <pre class="e2-text-code"><code class="">// data is downloaded byte[] ... Texture2D texture = null; #if UNITY_ANDROID texture = new Texture2D(2, 2, TextureFormat.ETC2_RGBA8, false); #elif UNITY_IOS texture = new Texture2D(2, 2, TextureFormat.PVRTC_RGBA4, false); #endif texture.LoadImage(data); Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f))); MyImage.sprite = sprite;</code></pre><ul> <li>Используйте сжатие предназначенное под конкретную платформу. Для iOS — это PVRTC4, для новых моделей подойдёт ASTC, начиная с iPhone 6. Для Android — ETC. Подробнее про это можно <a href="https://docs.unity3d.com/ScriptReference/TextureFormat.html">прочитать</a> в мануале Unity.</li> <li>Кроме того, сжатие не будет работать в некоторых случаях, если размеры спрайтов и атласов не равны степени 2. Т. е. размеры должны быть 128x128, 2048x2048 и т. д.</li> </ul> Использование альфа маски https://mopsicus.ru/all/soft-alpha-mask-for-ui/ https://mopsicus.ru/all/soft-alpha-mask-for-ui/ Mon, 21 Nov 2016 15:47:44 +0300 Игорь Лопатин https://mopsicus.ru/all/soft-alpha-mask-for-ui/ <p><i>Обновлено 19.10.2018</i><br /> <i>Эта маска не работает внутри стандартной маски и RectMask2D :(</i></p> <p>В Unity стандартная маска (компонент Mask) работает без альфа канала, т. е. красивые «мягкие» края сделать не получится. Особенно это актуально, если у вас маска сложной формы.</p> <p>Но тут нас спасет очень хорошая библиотека скриптов от Simon Jackson — <a href="https://bitbucket.org/UnityUIExtensions/unity-ui-extensions">Unity UI Extensions</a>. И один из скриптов из этой библиотеки как раз и позволяет делать «soft smooth ui alpha mask».</p> <p>Нужно скопировать в свой проект скрипт <b>SoftMaskScript.cs</b> и шейдер с таким же именем. И кинуть скрипт на UI Image.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/ui-soft-mask-script.png" width="551" height="289" alt="" /> </div> <p>Получим такой результат. Намного лучше чем стандартная маска.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/ui-soft-mask-result.png" width="579" height="384" alt="" /> </div> <p>Да и вообще, в этой либе много других интересных и полезных вещей, рекомендую.</p> Рисование кривых в Unity https://mopsicus.ru/all/draw-lines-bezier-unity/ https://mopsicus.ru/all/draw-lines-bezier-unity/ Mon, 17 Oct 2016 12:26:28 +0300 Игорь Лопатин https://mopsicus.ru/all/draw-lines-bezier-unity/ <p>Как нарисовать линию в Unity? А как кривую Безье? Очень просто! В Unity уже есть достаточно продвинутый компонент <b>LineRenderer</b>, его то я и использовал в одном из своих проектов. После упаковки в один скрипт, я бы даже сказал — в одну функцию, получилось вот что:</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/bezier-curves.png" width="704" height="1287" alt="" /> </div> <p>Можно настраивать количество сегментов в линии (качество), начальный и конечный цвет, и конечно ширину.</p> <p><a href="https://github.com/mopsicus/unity-bezier-curves">Исходник на Github</a></p> 2D графика для игр https://mopsicus.ru/all/2d-graphic-for-games/ https://mopsicus.ru/all/2d-graphic-for-games/ Mon, 30 May 2016 10:11:37 +0300 Игорь Лопатин https://mopsicus.ru/all/2d-graphic-for-games/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/2d-game-graphics.jpg" width="930" height="250" alt="" /> </div> <p>Суперский <a href="http://www.2dgameartguru.com">блог про создание 2D графики</a> для игр. Отличные видео и пошаговые уроки про то, как создать персонажа и подготовить его для анимации, как нарисовать камни и горы, фон и все остальное для вашей игры.</p> <p>Если вы из тех, кто хочет сделать (и делает) игру полностью сам, то это то, что вам надо.</p> Загрузка спрайтов в iOS https://mopsicus.ru/all/unity-sprite-load-ios/ https://mopsicus.ru/all/unity-sprite-load-ios/ Tue, 10 May 2016 17:27:58 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-sprite-load-ios/ <p>Бывает нужно дозагрузить какие-нибудь картинки с сервера и показать их в игре, например, чтобы сделать размер установочного файла меньше.</p> <p>Для загрузки спрайта из внешнего файла, я использовал такую функцию:</p> <pre class="e2-text-code"><code class="">public static Sprite LoadSprite (string folder, string image) { string path = string.Format (&quot;{0}/{1}/{2}.png&quot;, Application.temporaryCachePath, folder, image); if (!System.IO.File.Exists (path)) return null; else { byte[] data = System.IO.File.ReadAllBytes (path); Texture2D texture = new Texture2D(2, 2); texture.LoadImage(data); return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f)); } } ... MyIcon.sprite = LoadSprite (&quot;loaded_images&quot;, &quot;new_icon&quot;);</code></pre><p>Ничего необычного — читаем файл в текстуру, из текстуры делаем спрайт и применяем его к картинке. Если запустить этот код в редакторе или на android устройстве, то все будет в порядке. Но запустив его на iPhone или iPad — спрайт загрузится некорректно. Это происходит потому <b>iOS не поддерживает формат сжатия DXT</b>. Нужно использовать <b>PVRTC_RGBA4</b>.</p> <p>Поэтому, немного изменяем функцию и теперь все картинку будут показываться правильно:</p> <pre class="e2-text-code"><code class="">public static Sprite LoadSprite (string folder, string image) { string path = string.Format (&quot;{0}/{1}/{2}.png&quot;, Application.temporaryCachePath, folder, image); if (!System.IO.File.Exists (path)) return null; else { byte[] data = System.IO.File.ReadAllBytes (path); Texture2D texture; #if UNITY_ANDROID texture = new Texture2D(2, 2); #elif UNITY_IOS texture = new Texture2D(2, 2, TextureFormat.PVRTC_RGBA4, false); #endif texture.LoadImage(data); return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f)); } }</code></pre>