Для тех, кто не смог подружить шейдер с terrain'ом - нужно всего лишь поиграться с цифрами в коде. 1. Изначально делаем небольшой terrain, размером до 50x50 (иначе тесселяция будет делать своё грязное дело с производительностью), лучше больше мелких террэйнов сделать, чем один огромный, а размер в данном случае чем меньше - тем лучше:) 2. Вешаем на него шейдер SnowPlane 3. Меняем тайлинг текстур, соотвествующий нашему эстетическому представлению, каким должен быть снег вместо 1x1 4. В SnowHeightMapUpdate в строке pos /= "подбираем параметр" (у меня сработал 0.011 лучше всего), в итоге получится что-то вроде pos /= 0.011 5. Должно сработать. Тесселяцию лучше поставить в пределах 6-8, не больше, так как мы не хотим, чтобы комп взлетел в космические пространства от приминания снега. Еще, чтобы уровень снега (heightAmount) соответсвовал уровню реакции на высоту поднятия ног, например (для гуманоидных и животных), в SnowBrush в условии if (Physics.Raycast(ray, out RaycastHit hit, 0.32f)) лучше вместо магического 0.32f отправлять сразу _heightAmount из шейдера. Получить его можно создав поле для материала в классе и затем вытащить таким образом: _heightAmount = SnowMat.GetFloat("_HeightAmount"); Вообще, судя по всему, шейдер при таком подходе может всё же сильно уменьшить производительность, но по крайней мере этот вариант рабочий для террэйнов, что здорово. Благодарю за видео!
Чтобы метель была ещё натуральней, можно добавить усреднение карты высот с матрицей коэффициентов (элемент матрицы больше там, в какую сторону дует ветер)
Спасибо за труды, хотел бы попросить вас сделать обзор работы с mesh Baker, наверняка вы его использовали, конкретно не понятны моменты с объединением объектов в один и материалов в одну текстуру.
Спасибо за урок, все получилось. Однако при развитии возник вопрос - как теперь созданный материал с шейдером прикрепить к terrain? При попытке сделать это получаю предупреждение с текстом "The provided Material's shader might be unsuitable to use with Terrain in the active render pipeline...". Если проигнорировать и запустить, следов не видно и все начинает очень тормозить...
Здравствуйте, подскажите пожалуйста, Как продублировать снежный покров так чтобы когда проезжаешь по нем рисовалось по отдельности, тоесть 2 плоскости но с разными картами?
А что нужно поменять в Snow Height Map Update чтобы он рисовал не черным по красному а наоборот, красным по черному? Абсолютно тупой вопрос, но я ниче не понимаю в шейдерах, даже не понимаю куда гуглить. Хотел переписать под URP, но там нашел пример шейдера который использует инвертированную маску карты высот, где другие цвета хаймапы на вход. Соответственно снег наоборот вырастает когда машина проезжает по нему)
Вообще по умолчанию этот шейдер лучше бы в 0.5 стоял, а не в 1. Когда ты в снег наступаешь, он не полностью проминается вниз, что-то и вверх выталкивается, всякие горочки появляются при ходьбе. В общем так натуральнее смотреться будет.
Привет! Очень классный контент, спасибо! Делаю бесконечный 3D раннер на сноуборде для мобильного устройства. Часть плоскости будет сгенерировано на старте игры, а остальные хочу генерить процедурно в рантайме. Хочу применить шейдер для отображения следа за сноубордом. Версия Unity 2021.313f1 С шейдерами не работал до этого. В процессе применения к проекту появилось несколько вопросов, которые есть в комментариях, но четкого ответа пока я не нашел или они у меня не сработали. 1. Стоит ли вообще применять этот подход к моему проекту? Насколько вообще сильно повлияет шейдер на большой плоскости на производительность? 2. Как правильно масштабировать шейдер на большие плоскости / террейн? Если установить масштаб Snow Plane в 50 юнитов, например, то след от SnowBrush сильно растягивается. Тайлинг текстур настраивал, но на кисть это никак не повлияло. 3. Если же вместо масштабирования плоскости / террейна просто дублировать их, то тогда появляется проблема с дублированием следов на продублированных же плоскостях / террейне. Создавать отдельный материал и рендер текстуру для каждой продублированной плоскости я не рассматриваю. Большая просьба @Emerald Powder помочь с вопросами выше по возможности!
Пожалуйста помогите мне как рассширить поле когда я дублирую происходит какая то фигня меш деформируется во всех plane идентично когда я даже не наступаю на другие
@@hannel6503 У меня получилось, когда я дублировал материал, HeihgtMapUpdate и HeightMap, плюс добавил в скрипт проверку на то, во что бьет луч, получилось так private void DrawWithTires() { GameObject tire = Tires[tireIndex++ % Tires.Length]; Ray ray = new Ray(tire.transform.position, Vector3.down); if (Physics.Raycast(ray, out RaycastHit hit)) { if (hit.collider.name == gameObject.name) { Vector2 hitTextureCoord = hit.textureCoord; float angle = tire.transform.rotation.eulerAngles.y; HeightMapUpdate.SetVector(DrawPosition, hitTextureCoord); HeightMapUpdate.SetFloat(DrawAngle, angle * Mathf.Deg2Rad); } } } Не знаю, насколько это хороший вариант, но хотя бы рабочий) в шейдерах я совсем ничего не смыслю, может, есть более красивый способ достигнуть результата и избежать видимых стыков у следа
Помогите, может кто знает в чем проблема. В редакторе отлично все работает, но после сборки снег не проминается. Может я где галку не поставил... или что делаю не так, непойму(((( Изменено: Разобрался)) Может кому поможет. Проблема была в том, что в сборку шейдер который мы создали не попадает. Что бы это исправить в настройках Edit/Project Settings/Graphics нужно в Always Included Shaders самому в конец добавить и все заработает)))
Здравствуйте! Я внедрил ваш снег в проект в Unity 2020.2.3.f1 на террейн размеров 200 на 200. Разрешение текстур для террейна (Albedo и Normal) поставил 4096 на 4096 - так как меньше размером - выглядит ужасно... Отпечатки пришлось делать меньше но по краям огромные поля белых пикселей. FPS просел до 25 и не работает код по исчезновению отпечатков за определённое время. Со всем уважением, делаю вывод - данный пример абсолютно не подходит для игр с террейном (шутеров и так далее), где много предметов передвигаются по заснеженной территории. Также, я так и не понял, почему не работает исчезновение отпечатков на варианте с террейном. Что вы можете сказать по данной ситуации? Я могу представить результаты тестов в отдельной сцене и написать вам на почту, если вас этот вопрос ещё интересует. Спасибо! Пример интересный и хороший, но в рамках маленьких заснеженных плоскостей - больше по-прикалываться...
Моё решение, хотя и не слишком красиво выглядит, я описал в комментариях выше. Попробуйте делать мелкие тэррэйны, во многих случаях это работает (скажем, 50x50)
а вы решили эту проблему за 2 года? Я бы на вашем месте сделал динамическую тесселяцию, чтобы она добавляла детализацию только в те области, где мы рисуем отпечатки. Тогда общее количество точек террейна останется немногим больше чем 200 на 200.
Привет, есть идея для нового видео. Сделай видео про сохранения сцен тип чтоб в начале игры загружался сейв, а перед выходом из игры сохранял бы сцену на сколько я понял это сохраняется в json/xml файлах. Заранее спасибо + лайк!
Здравствуй! На ютубе нет нормальных туториалов по звукам машин. Они вечно получаются ужасными! Если вы поможете разобраться в этом вам цены не будет! Я знаю что лучше всего это делать в FMOD. Больше ничего(
Посоветуй пожалуйста уроки по юнити для начинающих, желательно чтобы материал был структурированным, хотя бы для усвоения основ программирования и работы с движком, а то в интернете хоть и полно информации, но при этом не знаешь с чего начать, так как на многих каналах информация преподносится вразнобой, вследствии чего в голове получается каша, или вообще ничего не понятно
Я так сам делал. Использовал Quaternion.slerp . Берём размер угла (положительный) и скорость вращения башни. И делим скорость на угол. Задаём это в скорость Quaternion. Slerp(Lerp) Вот и работает
Можно сделать третью часть серии, где показать, как сделать динамическую тесселляцию. То есть чтобы кол-во вершин увеличивалось только в тех областях, где мы рисуем. Можно было бы использовать ту же самую текстуру для этой цели. Чем чернее, тем сильнее тесселляция: float4 tess (appdata v0, appdata v1, appdata v2) { float2 uv_center = 0.33333 * (v0.texcoord.xy + v1.texcoord.xy + v2.texcoord.xy); return _maxTesselation * (1 - tex2Dlod(_DetailTex, float4(uv_center,0,0)).r) + 1; }
Я давненько юнити закинул, но твои видосы до сих пор смотрю с кайфом, непонятно зачем.
На годот перешёл что ли?
Насколько круто. Я просто сижу и офигеваю. Спасибо огромное за такой подробный урок
Для тех, кто не смог подружить шейдер с terrain'ом - нужно всего лишь поиграться с цифрами в коде.
1. Изначально делаем небольшой terrain, размером до 50x50 (иначе тесселяция будет делать своё грязное дело с производительностью), лучше больше мелких террэйнов сделать, чем один огромный, а размер в данном случае чем меньше - тем лучше:)
2. Вешаем на него шейдер SnowPlane
3. Меняем тайлинг текстур, соотвествующий нашему эстетическому представлению, каким должен быть снег вместо 1x1
4. В SnowHeightMapUpdate в строке pos /= "подбираем параметр" (у меня сработал 0.011 лучше всего), в итоге получится что-то вроде pos /= 0.011
5. Должно сработать. Тесселяцию лучше поставить в пределах 6-8, не больше, так как мы не хотим, чтобы комп взлетел в космические пространства от приминания снега.
Еще, чтобы уровень снега (heightAmount) соответсвовал уровню реакции на высоту поднятия ног, например (для гуманоидных и животных), в SnowBrush в условии if (Physics.Raycast(ray, out RaycastHit hit, 0.32f)) лучше вместо магического 0.32f отправлять сразу _heightAmount из шейдера. Получить его можно создав поле для материала в классе и затем вытащить таким образом: _heightAmount = SnowMat.GetFloat("_HeightAmount");
Вообще, судя по всему, шейдер при таком подходе может всё же сильно уменьшить производительность, но по крайней мере этот вариант рабочий для террэйнов, что здорово.
Благодарю за видео!
ооо, спасибо
Когда меняю тайлинг текстуры, что-то странное со следами происходит
Плюсик за объяснения как оно работает
Не тигр, а бульдозер)))) Спасибо за классное видео
Твой канал стал первым с колокольчиком у меня)
Огромное спасибо за подробные видео, мне, как новичку, очень помогает. Удачи в развитии канала!
Очень круто! Спасибо за видео!
Спасибо за урок, было интересно
Спасибо колоколчику за быстрое уведомление!
Спасибо за колокольчик! :)
Чтобы метель была ещё натуральней, можно добавить усреднение карты высот с матрицей коэффициентов (элемент матрицы больше там, в какую сторону дует ветер)
Хотелось-бы чегонить про динамический меш, его генерацию, слияние, разбиение, всякое такое.
Спасибо за труды, хотел бы попросить вас сделать обзор работы с mesh Baker, наверняка вы его использовали, конкретно не понятны моменты с объединением объектов в один и материалов в одну текстуру.
Следующее видео делаем 3д скульптинг в юнити. ☺😄 Похоже напоминалка сломалась) 🙄
Пользуюсь арнриалом, но просто приятно твои видео смотреть
Спасибо за урок, все получилось.
Однако при развитии возник вопрос - как теперь созданный материал с шейдером прикрепить к terrain? При попытке сделать это получаю предупреждение с текстом "The provided Material's shader might be unsuitable to use with Terrain in the active render pipeline...". Если проигнорировать и запустить, следов не видно и все начинает очень тормозить...
Здравствуйте, подскажите пожалуйста,
Как продублировать снежный покров так чтобы когда проезжаешь по нем рисовалось по отдельности, тоесть 2 плоскости но с разными картами?
А что нужно поменять в Snow Height Map Update чтобы он рисовал не черным по красному а наоборот, красным по черному? Абсолютно тупой вопрос, но я ниче не понимаю в шейдерах, даже не понимаю куда гуглить. Хотел переписать под URP, но там нашел пример шейдера который использует инвертированную маску карты высот, где другие цвета хаймапы на вход. Соответственно снег наоборот вырастает когда машина проезжает по нему)
Вообще по умолчанию этот шейдер лучше бы в 0.5 стоял, а не в 1. Когда ты в снег наступаешь, он не полностью проминается вниз, что-то и вверх выталкивается, всякие горочки появляются при ходьбе. В общем так натуральнее смотреться будет.
Можно ли сделать изменение коллайдера по проминаниям снега? И если да, то можете объянить, как это сделать
Можно ли использовать этот шейдер на террейне?
Как всегда радуешь)
Привет! Очень классный контент, спасибо!
Делаю бесконечный 3D раннер на сноуборде для мобильного устройства.
Часть плоскости будет сгенерировано на старте игры, а остальные хочу генерить процедурно в рантайме.
Хочу применить шейдер для отображения следа за сноубордом.
Версия Unity 2021.313f1
С шейдерами не работал до этого.
В процессе применения к проекту появилось несколько вопросов, которые есть в комментариях, но четкого ответа пока я не нашел или они у меня не сработали.
1. Стоит ли вообще применять этот подход к моему проекту? Насколько вообще сильно повлияет шейдер на большой плоскости на производительность?
2. Как правильно масштабировать шейдер на большие плоскости / террейн?
Если установить масштаб Snow Plane в 50 юнитов, например, то след от SnowBrush сильно растягивается.
Тайлинг текстур настраивал, но на кисть это никак не повлияло.
3. Если же вместо масштабирования плоскости / террейна просто дублировать их, то тогда появляется проблема с дублированием следов на продублированных же плоскостях / террейне.
Создавать отдельный материал и рендер текстуру для каждой продублированной плоскости я не рассматриваю.
Большая просьба @Emerald Powder помочь с вопросами выше по возможности!
Офигенные видео! Можешь продолжить рассказывать про NavMesh, очень интересная тема?
Террейн и URP - как повторить?)
4:00 - Beush)))
Про Ai не хочешь снять?
@@BrutalStrike2 забавно, сам о нем узнал недавно, а теперь вижу его тут, феномен Баадера-Майнхоф бленб)
А этот эффект следов будет работать только на плоской поверхности, или же на каком-нибудь шаре тоже могут быть выдавлены следы?
Не совсем понял как ты дальше рисовал по снегу, если ты убрал _DrawPosition ("Draw Position", Vector) = (-1,-1,0,0)
Это модный ковёр!
Здравствуйте. Я вот сейчас сколько бьюсь, никак увеличить не могу (
Получает, надо для каждого плэйна новый материал брать?
Решил проблему?
Есть решение) Надо просто поиграться с числами в скриптах. Я написал выше, что мне помогло
Здравствуйте! А будут еще видео про NavMesh? Как никак обещали еще одно видео)
Хорошие видео получилось!
🤘 super
В шейдер графе не получается из текстуры менять вертексы, почему-то ноды замораживает(
Philipp B ты в Майнкравт играешь куда игру свою создавать 😂😂😂😂
@@гачалайф-ч3ж тебе какое дело, что он делает
Спасибо)
Пожалуйста помогите мне как рассширить поле когда я дублирую происходит какая то фигня меш деформируется во всех plane идентично когда я даже не наступаю на другие
Помогите кто может
Попробуйте на каждый кусок поля, использовать отдельную пару материала (***HaightmapUpdate) + карты высок (***HaightMap)
Антон Барсуков Пробывал, когда создаю новые они попросту не работают (
@@hannel6503 У меня получилось, когда я дублировал материал, HeihgtMapUpdate и HeightMap, плюс добавил в скрипт проверку на то, во что бьет луч, получилось так
private void DrawWithTires()
{
GameObject tire = Tires[tireIndex++ % Tires.Length];
Ray ray = new Ray(tire.transform.position, Vector3.down);
if (Physics.Raycast(ray, out RaycastHit hit))
{
if (hit.collider.name == gameObject.name)
{
Vector2 hitTextureCoord = hit.textureCoord;
float angle = tire.transform.rotation.eulerAngles.y;
HeightMapUpdate.SetVector(DrawPosition, hitTextureCoord);
HeightMapUpdate.SetFloat(DrawAngle, angle * Mathf.Deg2Rad);
}
}
}
Не знаю, насколько это хороший вариант, но хотя бы рабочий) в шейдерах я совсем ничего не смыслю, может, есть более красивый способ достигнуть результата и избежать видимых стыков у следа
Артем Москалев Спасибо большое чел респект🙏
Помогите, может кто знает в чем проблема. В редакторе отлично все работает, но после сборки снег не проминается. Может я где галку не поставил... или что делаю не так, непойму((((
Изменено:
Разобрался)) Может кому поможет. Проблема была в том, что в сборку шейдер который мы создали не попадает. Что бы это исправить в настройках Edit/Project Settings/Graphics нужно в Always Included Shaders самому в конец добавить и все заработает)))
Здравствуйте! Я внедрил ваш снег в проект в Unity 2020.2.3.f1 на террейн размеров 200 на 200. Разрешение текстур для террейна (Albedo и Normal) поставил 4096 на 4096 - так как меньше размером - выглядит ужасно... Отпечатки пришлось делать меньше но по краям огромные поля белых пикселей. FPS просел до 25 и не работает код по исчезновению отпечатков за определённое время. Со всем уважением, делаю вывод - данный пример абсолютно не подходит для игр с террейном (шутеров и так далее), где много предметов передвигаются по заснеженной территории. Также, я так и не понял, почему не работает исчезновение отпечатков на варианте с террейном. Что вы можете сказать по данной ситуации? Я могу представить результаты тестов в отдельной сцене и написать вам на почту, если вас этот вопрос ещё интересует. Спасибо! Пример интересный и хороший, но в рамках маленьких заснеженных плоскостей - больше по-прикалываться...
Моё решение, хотя и не слишком красиво выглядит, я описал в комментариях выше. Попробуйте делать мелкие тэррэйны, во многих случаях это работает (скажем, 50x50)
а вы решили эту проблему за 2 года? Я бы на вашем месте сделал динамическую тесселяцию, чтобы она добавляла детализацию только в те области, где мы рисуем отпечатки. Тогда общее количество точек террейна останется немногим больше чем 200 на 200.
Привет, есть идея для нового видео. Сделай видео про сохранения сцен тип чтоб в начале игры загружался сейв, а перед выходом из игры сохранял бы сцену на сколько я понял это сохраняется в json/xml файлах. Заранее спасибо + лайк!
а как скачать программу для скриптов (я имею как называется)
Если я правильно понял про какую программу идёт речь - Jetbrains Rider
А как это все увеличить?
Привет, а ты знаешь же, что вышла новая высокоуровневая система мультиплеера в unity? Когда уроки? :)
Здравствуй! На ютубе нет нормальных туториалов по звукам машин. Они вечно получаются ужасными! Если вы поможете разобраться в этом вам цены не будет! Я знаю что лучше всего это делать в FMOD. Больше ничего(
Да как вы добавили синтаксис (подсветку, автосправку)???????
В файле с кодом шейдера? Это Rider из коробки умеет. Там не прямо честная подсветка, он по моему вообще по ключевым словам подсвечивает
Привет можешь пожалуйста делать урок по созданию шейдера который обводит объект если на него попадает луч
Делаешь outline шейдер, а потом назначаешь его из скрипта объекту, в который попал луч.
Как сделать outline shader на ютубе есть
как игра нзывается, которая мелькает иногда?
Frostpunk, возможно?
Посоветуй пожалуйста уроки по юнити для начинающих, желательно чтобы материал был структурированным, хотя бы для усвоения основ программирования и работы с движком, а то в интернете хоть и полно информации, но при этом не знаешь с чего начать, так как на многих каналах информация преподносится вразнобой, вследствии чего в голове получается каша, или вообще ничего не понятно
На сайт Unity Learn для начала заглядывал?
Сделай видео про вращение башни танка как в WoT как такое можно реализовать.
Я так сам делал. Использовал Quaternion.slerp . Берём размер угла (положительный) и скорость вращения башни. И делим скорость на угол. Задаём это в скорость Quaternion. Slerp(Lerp)
Вот и работает
Размер угла это угол между башней и камерой если что
Можно шрифт побольше?)
В следующем видео будет большой, обещаю :)
@@EmeraldPowder А как увеличить поле, именно с выкапыванием?) 18:10
@@EmeraldPowder Я двое суток пытаюсь подружится с шейдерами... спасай в общем))) а видосы у тебя крутые кстати)
сделал по уроку, не работает
Не реалистичные следы, особенно животных, снег рассыпчатый.
Первый :)
Можно сделать третью часть серии, где показать, как сделать динамическую тесселляцию. То есть чтобы кол-во вершин увеличивалось только в тех областях, где мы рисуем. Можно было бы использовать ту же самую текстуру для этой цели. Чем чернее, тем сильнее тесселляция:
float4 tess (appdata v0, appdata v1, appdata v2)
{
float2 uv_center = 0.33333 * (v0.texcoord.xy + v1.texcoord.xy + v2.texcoord.xy);
return _maxTesselation * (1 - tex2Dlod(_DetailTex, float4(uv_center,0,0)).r) + 1;
}