Следы от шин на снегу в Unity 3D [Tutorial] - часть 2

Поделиться
HTML-код
  • Опубликовано: 11 июл 2020
  • Вторая часть видео про эффект следов от шин, шагов персонажа, или других объектов в вашей игре на снегу, грязи или песке в Unity 3D. В нём будет использоваться Custom Render Texture из юнити, и специальный шейдер который позволит нам менять высоту плоскости снега в определенных местах
    Предыдующее видео: • Следы от шин на снегу ...
    Ссылка на готовый проект: github.com/emeraldpowder/Snow...
    Patreon канала - / emeraldpowder
    Наш Discord - / discord
    На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
    Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео

Комментарии • 83

  • @TheSoundWeaver
    @TheSoundWeaver Год назад +9

    Для тех, кто не смог подружить шейдер с 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");
    Вообще, судя по всему, шейдер при таком подходе может всё же сильно уменьшить производительность, но по крайней мере этот вариант рабочий для террэйнов, что здорово.
    Благодарю за видео!

    • @sX1mvrX1n
      @sX1mvrX1n Год назад

      ооо, спасибо

    • @vlad1kak228
      @vlad1kak228 Год назад

      Когда меняю тайлинг текстуры, что-то странное со следами происходит

  • @raysiberian4346
    @raysiberian4346 3 года назад +17

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

    • @thetraveler7779
      @thetraveler7779 3 года назад +1

      На годот перешёл что ли?

  • @akstis4183
    @akstis4183 3 года назад +4

    Насколько круто. Я просто сижу и офигеваю. Спасибо огромное за такой подробный урок

  • @FIREforGAMESFfG
    @FIREforGAMESFfG 3 года назад +1

    Твой канал стал первым с колокольчиком у меня)
    Огромное спасибо за подробные видео, мне, как новичку, очень помогает. Удачи в развитии канала!

  • @Muxau108
    @Muxau108 3 года назад +3

    Очень круто! Спасибо за видео!

  • @sicher3135
    @sicher3135 3 года назад +8

    Плюсик за объяснения как оно работает

  • @KoliaBoroda
    @KoliaBoroda Год назад

    Спасибо за урок, было интересно

  • @AlexStraga
    @AlexStraga 3 года назад

    Как всегда радуешь)

  • @Usual_User
    @Usual_User 3 года назад

    Пользуюсь арнриалом, но просто приятно твои видео смотреть

  • @mixer9524
    @mixer9524 2 года назад +1

    Не тигр, а бульдозер)))) Спасибо за классное видео

  • @lnPower
    @lnPower 3 года назад +3

    Спасибо за труды, хотел бы попросить вас сделать обзор работы с mesh Baker, наверняка вы его использовали, конкретно не понятны моменты с объединением объектов в один и материалов в одну текстуру.

  • @Itibsoft-chanel
    @Itibsoft-chanel 3 года назад

    Здравствуйте! А будут еще видео про NavMesh? Как никак обещали еще одно видео)
    Хорошие видео получилось!

  • @Vorono4ka
    @Vorono4ka 3 года назад

    Спасибо колоколчику за быстрое уведомление!

    • @EmeraldPowder
      @EmeraldPowder  3 года назад +1

      Спасибо за колокольчик! :)

  • @Kiberbrain
    @Kiberbrain 3 года назад +4

    Хотелось-бы чегонить про динамический меш, его генерацию, слияние, разбиение, всякое такое.

  • @ravenearl4400
    @ravenearl4400 3 года назад +1

    Чтобы метель была ещё натуральней, можно добавить усреднение карты высот с матрицей коэффициентов (элемент матрицы больше там, в какую сторону дует ветер)

  • @KyWoTKy
    @KyWoTKy 3 года назад

    Спасибо)

  • @user-ti2ei5ms4y
    @user-ti2ei5ms4y 3 года назад

    Офигенные видео! Можешь продолжить рассказывать про NavMesh, очень интересная тема?

  • @user-bt8vc5ch5n
    @user-bt8vc5ch5n 2 года назад

    Можно ли сделать изменение коллайдера по проминаниям снега? И если да, то можете объянить, как это сделать

  • @romanbaranov1984
    @romanbaranov1984 Год назад

    Привет! Очень классный контент, спасибо!
    Делаю бесконечный 3D раннер на сноуборде для мобильного устройства.
    Часть плоскости будет сгенерировано на старте игры, а остальные хочу генерить процедурно в рантайме.
    Хочу применить шейдер для отображения следа за сноубордом.
    Версия Unity 2021.313f1
    С шейдерами не работал до этого.
    В процессе применения к проекту появилось несколько вопросов, которые есть в комментариях, но четкого ответа пока я не нашел или они у меня не сработали.
    1. Стоит ли вообще применять этот подход к моему проекту? Насколько вообще сильно повлияет шейдер на большой плоскости на производительность?
    2. Как правильно масштабировать шейдер на большие плоскости / террейн?
    Если установить масштаб Snow Plane в 50 юнитов, например, то след от SnowBrush сильно растягивается.
    Тайлинг текстур настраивал, но на кисть это никак не повлияло.
    3. Если же вместо масштабирования плоскости / террейна просто дублировать их, то тогда появляется проблема с дублированием следов на продублированных же плоскостях / террейне.
    Создавать отдельный материал и рендер текстуру для каждой продублированной плоскости я не рассматриваю.
    Большая просьба @Emerald Powder помочь с вопросами выше по возможности!

  • @kornevvprogames
    @kornevvprogames 3 года назад

    А этот эффект следов будет работать только на плоской поверхности, или же на каком-нибудь шаре тоже могут быть выдавлены следы?

  • @SergeyBaranov_ru
    @SergeyBaranov_ru Месяц назад

    Спасибо за урок, все получилось.
    Однако при развитии возник вопрос - как теперь созданный материал с шейдером прикрепить к terrain? При попытке сделать это получаю предупреждение с текстом "The provided Material's shader might be unsuitable to use with Terrain in the active render pipeline...". Если проигнорировать и запустить, следов не видно и все начинает очень тормозить...

  • @kirbulichev3329
    @kirbulichev3329 3 года назад

    🤘 super

  • @user-uk9pv6bx7z
    @user-uk9pv6bx7z 2 года назад

    А что нужно поменять в Snow Height Map Update чтобы он рисовал не черным по красному а наоборот, красным по черному? Абсолютно тупой вопрос, но я ниче не понимаю в шейдерах, даже не понимаю куда гуглить. Хотел переписать под URP, но там нашел пример шейдера который использует инвертированную маску карты высот, где другие цвета хаймапы на вход. Соответственно снег наоборот вырастает когда машина проезжает по нему)

  • @tim_developer
    @tim_developer 3 года назад

    Привет, а ты знаешь же, что вышла новая высокоуровневая система мультиплеера в unity? Когда уроки? :)

  • @KiberKrolikOfficial
    @KiberKrolikOfficial 5 месяцев назад

    Здравствуйте, подскажите пожалуйста,
    Как продублировать снежный покров так чтобы когда проезжаешь по нем рисовалось по отдельности, тоесть 2 плоскости но с разными картами?

  • @user-df6ol6hp4k
    @user-df6ol6hp4k 3 года назад +1

    Террейн и URP - как повторить?)

  • @T1m0the0S
    @T1m0the0S 3 года назад +4

    Следующее видео делаем 3д скульптинг в юнити. ☺😄 Похоже напоминалка сломалась) 🙄

  • @ebakryak3486
    @ebakryak3486 3 года назад +1

    Привет, есть идея для нового видео. Сделай видео про сохранения сцен тип чтоб в начале игры загружался сейв, а перед выходом из игры сохранял бы сцену на сколько я понял это сохраняется в json/xml файлах. Заранее спасибо + лайк!

  • @Vorono4ka
    @Vorono4ka 3 года назад +1

    4:00 - Beush)))

  • @ftinkere
    @ftinkere 3 года назад

    Это модный ковёр!

  • @mr.antonder9170
    @mr.antonder9170 3 года назад +2

    Здравствуйте. Я вот сейчас сколько бьюсь, никак увеличить не могу (
    Получает, надо для каждого плэйна новый материал брать?

    • @dinodafor_off
      @dinodafor_off 2 года назад

      Решил проблему?

    • @dimanpro7007
      @dimanpro7007 2 года назад

      Решил проблему?

    • @TheSoundWeaver
      @TheSoundWeaver Год назад

      Есть решение) Надо просто поиграться с числами в скриптах. Я написал выше, что мне помогло

  • @sargisx
    @sargisx 5 месяцев назад

    Можно ли использовать этот шейдер на террейне?

  • @JON-dj5uy
    @JON-dj5uy 3 года назад

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

    • @dragon4ik859
      @dragon4ik859 3 года назад

      Делаешь outline шейдер, а потом назначаешь его из скрипта объекту, в который попал луч.
      Как сделать outline shader на ютубе есть

  • @serveladik
    @serveladik 3 года назад

    Не совсем понял как ты дальше рисовал по снегу, если ты убрал _DrawPosition ("Draw Position", Vector) = (-1,-1,0,0)

  • @TheMrKMen
    @TheMrKMen 3 года назад

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

  • @BlackJack-bo1gs
    @BlackJack-bo1gs 3 года назад

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

    • @user-vx1bt2uv2j
      @user-vx1bt2uv2j 3 года назад

      На сайт Unity Learn для начала заглядывал?

  • @bibyter6451
    @bibyter6451 3 года назад +6

    Про Ai не хочешь снять?

    • @Vorono4ka
      @Vorono4ka 3 года назад

      @@BrutalStrike2 забавно, сам о нем узнал недавно, а теперь вижу его тут, феномен Баадера-Майнхоф бленб)

  • @philippb8894
    @philippb8894 3 года назад +1

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

    • @user-jl2go3uf5o
      @user-jl2go3uf5o 3 года назад

      Philipp B ты в Майнкравт играешь куда игру свою создавать 😂😂😂😂

    • @Falcen111
      @Falcen111 3 года назад

      @@user-jl2go3uf5o тебе какое дело, что он делает

  • @VolkGam
    @VolkGam 3 года назад +1

    Здравствуйте! Я внедрил ваш снег в проект в Unity 2020.2.3.f1 на террейн размеров 200 на 200. Разрешение текстур для террейна (Albedo и Normal) поставил 4096 на 4096 - так как меньше размером - выглядит ужасно... Отпечатки пришлось делать меньше но по краям огромные поля белых пикселей. FPS просел до 25 и не работает код по исчезновению отпечатков за определённое время. Со всем уважением, делаю вывод - данный пример абсолютно не подходит для игр с террейном (шутеров и так далее), где много предметов передвигаются по заснеженной территории. Также, я так и не понял, почему не работает исчезновение отпечатков на варианте с террейном. Что вы можете сказать по данной ситуации? Я могу представить результаты тестов в отдельной сцене и написать вам на почту, если вас этот вопрос ещё интересует. Спасибо! Пример интересный и хороший, но в рамках маленьких заснеженных плоскостей - больше по-прикалываться...

    • @TheSoundWeaver
      @TheSoundWeaver Год назад +2

      Моё решение, хотя и не слишком красиво выглядит, я описал в комментариях выше. Попробуйте делать мелкие тэррэйны, во многих случаях это работает (скажем, 50x50)

    • @mrgoodpeople
      @mrgoodpeople 2 месяца назад

      а вы решили эту проблему за 2 года? Я бы на вашем месте сделал динамическую тесселяцию, чтобы она добавляла детализацию только в те области, где мы рисуем отпечатки. Тогда общее количество точек террейна останется немногим больше чем 200 на 200.

  • @_WoodGoblin_
    @_WoodGoblin_ 3 года назад

    Помогите, может кто знает в чем проблема. В редакторе отлично все работает, но после сборки снег не проминается. Может я где галку не поставил... или что делаю не так, непойму((((
    Изменено:
    Разобрался)) Может кому поможет. Проблема была в том, что в сборку шейдер который мы создали не попадает. Что бы это исправить в настройках Edit/Project Settings/Graphics нужно в Always Included Shaders самому в конец добавить и все заработает)))

  • @user-ob1jz8yl6x
    @user-ob1jz8yl6x 3 года назад

    Да как вы добавили синтаксис (подсветку, автосправку)???????

    • @EmeraldPowder
      @EmeraldPowder  3 года назад

      В файле с кодом шейдера? Это Rider из коробки умеет. Там не прямо честная подсветка, он по моему вообще по ключевым словам подсвечивает

  • @miscellaneous_games_studio
    @miscellaneous_games_studio 3 года назад +1

    а как скачать программу для скриптов (я имею как называется)

    • @EmeraldPowder
      @EmeraldPowder  3 года назад

      Если я правильно понял про какую программу идёт речь - Jetbrains Rider

  • @hannel6503
    @hannel6503 3 года назад +1

    Пожалуйста помогите мне как рассширить поле когда я дублирую происходит какая то фигня меш деформируется во всех plane идентично когда я даже не наступаю на другие

    • @hannel6503
      @hannel6503 3 года назад

      Помогите кто может

    • @user-rp4yt9kb4l
      @user-rp4yt9kb4l 3 года назад

      Попробуйте на каждый кусок поля, использовать отдельную пару материала (***HaightmapUpdate) + карты высок (***HaightMap)

    • @hannel6503
      @hannel6503 3 года назад

      Антон Барсуков Пробывал, когда создаю новые они попросту не работают (

    • @user-bn4bb6rp3z
      @user-bn4bb6rp3z 3 года назад +1

      @@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);
      }
      }
      }
      Не знаю, насколько это хороший вариант, но хотя бы рабочий) в шейдерах я совсем ничего не смыслю, может, есть более красивый способ достигнуть результата и избежать видимых стыков у следа

    • @hannel6503
      @hannel6503 3 года назад

      Артем Москалев Спасибо большое чел респект🙏

  • @fazenbros4889
    @fazenbros4889 3 года назад +1

    Здравствуй! На ютубе нет нормальных туториалов по звукам машин. Они вечно получаются ужасными! Если вы поможете разобраться в этом вам цены не будет! Я знаю что лучше всего это делать в FMOD. Больше ничего(

  • @ko-games7768
    @ko-games7768 3 года назад

    Сделай видео про вращение башни танка как в WoT как такое можно реализовать.

    • @xenofrend8334
      @xenofrend8334 3 года назад

      Я так сам делал. Использовал Quaternion.slerp . Берём размер угла (положительный) и скорость вращения башни. И делим скорость на угол. Задаём это в скорость Quaternion. Slerp(Lerp)
      Вот и работает

    • @xenofrend8334
      @xenofrend8334 3 года назад

      Размер угла это угол между башней и камерой если что

  • @snimatnow
    @snimatnow Год назад

    как игра нзывается, которая мелькает иногда?

  • @admenmod
    @admenmod 3 года назад

    Можно шрифт побольше?)

    • @EmeraldPowder
      @EmeraldPowder  3 года назад

      В следующем видео будет большой, обещаю :)

    • @mindness3520
      @mindness3520 3 года назад

      @@EmeraldPowder А как увеличить поле, именно с выкапыванием?) 18:10

    • @mindness3520
      @mindness3520 3 года назад

      @@EmeraldPowder Я двое суток пытаюсь подружится с шейдерами... спасай в общем))) а видосы у тебя крутые кстати)

  • @user-xj5hp7xv3x
    @user-xj5hp7xv3x 2 года назад

    А как это все увеличить?

    • @dimanpro7007
      @dimanpro7007 2 года назад

      Тот же вопрос, пол часа уже пытаюсь

  • @unity3dsimplesolutions309
    @unity3dsimplesolutions309 Год назад

    сделал по уроку, не работает

  • @user-ud6he3nm4u
    @user-ud6he3nm4u 3 года назад

    Первый :)

  • @mister-rock
    @mister-rock 3 года назад

    Не реалистичные следы, особенно животных, снег рассыпчатый.

  • @mrgoodpeople
    @mrgoodpeople 2 месяца назад

    Можно сделать третью часть серии, где показать, как сделать динамическую тесселляцию. То есть чтобы кол-во вершин увеличивалось только в тех областях, где мы рисуем. Можно было бы использовать ту же самую текстуру для этой цели. Чем чернее, тем сильнее тесселляция:
    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;
    }