Что заставляет компьютерного противника чувствовать себя живым?


107

Есть ли какие-нибудь рекомендуемые блоги или технические документы, в которых рассказывается о том, как сделать ИИ в RPG-игре более реалистичным? (Конкретно в пошаговом бою.)

Я знаю, что что-то должно быть там, но я нахожу только статьи, в которых говорится об алгоритмах для ИИ. Я смотрю больше по принципу «это то, что заставляет компьютерного противника чувствовать себя живым». Рискать, идти спокойно, отступать и т.д ....


Так много классных ответов, и я бы хотел принять несколько из них. Всем спасибо!


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

10
Его анимация смерти. Взрыва. Нет, но серьезно, используя окружающую среду против вас. И делать ошибки - но умные ошибки. Правильно? Подобно тому, кто имеет предвидение, только он сделал неправильное предположение в какой-то момент в своей цепочке рассуждений.
инженер

Не ясно, хотите ли вы, чтобы компьютерные персонажи чувствовали себя живыми или у вас могло сложиться впечатление, что вы сражаетесь против другого игрока, такого как вы, который контролирует всех компьютерных персонажей?
Никко

4
Как заставить компьютер чувствовать себя живым: снова посмотрите Bladerunner ...
Хельдар

Вы можете прочитать это . Он использует нечеткую логику над деревом решений.
Джонатан Дикинсон

Ответы:


109

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

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

Стратегические игры могут иногда выбирать неоптимальную стратегию или при оценке угроз могут целенаправленно игнорировать некоторую их часть.

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

Однако создание несовершенного ИИ все еще является проблемой. Вы должны делать убедительные ошибки с убедительной скоростью, а не совершать совершенные действия после совершенных действий, пока не совершите нелепую ошибку. Это может быть даже хуже, чем играть в идеальный ИИ. Например, программист, работавший над гоночным ИИ выше, потратил много времени на моделирование того, как автомобиль недостаточно поворачивается, и какие действия ИИ должен сделать, чтобы вызвать убедительную недостаточную поворачиваемость. Как всегда, тестирование игр жизненно важно.

Вот хорошая статья о том, что приводит к возникновению подобных ошибок: http://www.gamasutra.com/view/feature/3947/intelligent_mistakes_how_to_.php


38
«Многие игры FPS заставляют ИИ промахиваться с первых нескольких выстрелов, предупреждая игрока о том, что ИИ есть, прежде чем идти на убийство»: В GURPS мы называли эту тренировку Академии меткой стрельбы Имперского штурмовика.
хаос

4
Слишком много ошибок, и это тупой компьютер.
LarsTech

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

Я понимаю смысл ответа и думаю о границе между совершенством для компьютера и совершенством для человека. Что меняется? Отличный игрок в Quake3, которому нравится фатальность, чем он отличается от процессора на уровне кошмара?
Питто

Я рассчитываю все возможные ходы, которые может предпринять ИИ, назначая вес движениям в зависимости от обстоятельств и присущих ИИ черт личности (таких как жажда крови, боязнь смерти, гнев и т. Д.). Это прекрасно работает для таких сценариев, как: вы и ИИ умрете, прямой ИИ пристрелит вас, а затем заберет аптечку, но ИИ с высоким уровнем боя в OfFDeath попытается побить вас этим. Если у них нет сильного гнева или жажды крови, они просто стреляют, пока один из вас не умрет.
Распродано Активист

44

Другие говорили об искусственном интеллекте, логике, планировании и важности ошибок. И все это хорошо и полезно при разработке ИИ.

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

Чтобы компьютерный оппонент чувствовал себя живым, вам нужен полный набор высококачественных анимаций и звуков (особенно вокала) для оппонента. Игрок не может видеть AI. Он не может слышать это, он не может испытать это, он не может знать, что думает противник. Внешний вид «этот персонаж является живым существом» представлен игроку полностью посредством анимации, воспроизводимой на персонаже, и звуков, производимых персонажем (которые опять-таки, в основном, будут вокалами).

Для персонажа важно реагировать на раздражители вокруг него; смотреть на вещи поблизости, прикасаться к объектам поблизости (когда это уместно), удивляться удивлению и показывать другие эмоции, когда это уместно.

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

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

Если оппонент, которого вы пытаетесь заставить казаться «живым», на самом деле отсутствует в игре, как в случае с Шахматами и StarCraft, тогда не стесняйтесь игнорировать этот ответ; Лучше всего следовать ответам, сфокусированным на искусственном интеллекте.


4
Напоминает мне обо всех врагах в Mass Effect, кричащих "ВРАГОВ ВЕЗДЕ!" каждые 2 секунды.
Дашто

Я хотел бы проголосовать за это НАМНОГО БОЛЬШЕ. Я работал над двумя FPS с тройным А и не могу подчеркнуть, насколько важны качественная анимация (подсматривание, жесты, перемещение) и аудио (например, намерение, опрос, беседа) для создания великолепной среды. ИИ - не в том, чтобы победить игрока, а в том, чтобы передать реализм, огромная часть реализма - это то, как мы двигаемся и звучим.
А. А. Грапсас

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

Согласитесь, что это делает игровой процесс более захватывающим, не согласен с тем, что он делает его более человечным. Когда-нибудь смотрели, сколько игроков HUMAN ведет себя в большинстве многопользовательских игр? В некоторых играх половина игроков прыгают без всякой цели, а другая половина спамит голосовой чат одинаковыми голосовыми клипами двадцать раз в секунду. Боты часто ведут себя лучше, чем люди.
Ложь Райану

Один из способов сделать ИИ похожим на человека - это, вероятно, заставить его буйствовать, если их продолжают убивать. Или попытайтесь обмануть нового игрока в обмене дорогих предметов на бесполезные побрякушки. В эту игру было бы не весело, но по крайней мере ИИ будет чувствовать себя «живым».
Ложь Райану

30

Вот список некоторых простых концепций, которые могут сделать вашего противника более ярким:

  1. Намерение
    Дайте игроку способ определить «намерение» ИИ. Это может быть так же просто, как заставить их выкрикнуть «Количество над качеством» перед попыткой точной атаки в голову, «Обойти его», пытаясь отстать от вас, или «Взять лидера, ничего больше не имеет значения» перед атакой главного героя. Вы также можете усложнить задачу, например, заставить их дать некоторый язык жестов своим товарищам по команде, а затем изменить поведение этих товарищей по команде.

  2. Отчаяние
    Когда противник приближается к смерти, вы можете испытывать чувство отчаяния. Измените их тактику на определенных вехах здоровья. Сделайте их более поздние стадии более паническими, с большим риском, принимаемым с их стороны (переходя на град, а не медленное дробление). Визуально также сообщайте об этом (более преувеличенные анимации, пульсирующие вены и т. Д.).

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


4
Здравствуй. Вы действительно не должны вписывать свою квалификацию в свой ответ. Заполните свой профиль и, если кому-то будет интересно, если вы знаете, о чем говорите, привет, кликните на свое имя. Это оно ;).
Notabene

1
Намерение хорошее. Хорошая стратегия состоит в том, чтобы ваши товарищи по команде ИИ (если они существуют) кричали, что делают противники - «они фланговые!», «Они перезагружаются!» и т.д. На самом деле эта стратегия довольно эффективна, даже когда вражеский ИИ не делает ничего подобного. :)
Tenpn

1
@Notabene, не соглашаясь с вашим комментарием, но как примечание - у вас есть представитель, чтобы отредактировать постороннюю информацию самостоятельно. :) Я только что отредактировал, но это "подлежит проверке" для меня. :)
Циклоп

2
@Cyclops. Да, я считал это. Но это может показаться довольно грубым без надлежащего комментария, и я хотел позволить Джордаану самому решить это. Я имею в виду, что дружелюбный, конечно. Но давайте прекратим разрушать хороший ответ с комментариями темы:]
Notabene

3
Привет. Просто, чтобы вы все знали, я включил строку степени бакалавра как форму самоуничижения. Здесь, в Австралии, степень бакалавра игр не стоит бумаги, на которой она напечатана. Не было никакого намерения хвастаться. «Вот несколько очевидных советов, которые являются кульминацией моих потраченных 30 000 долларов и 3 лет обучения». Извините, если я не передал это правильно.
Джордаан Милонас

22

Я рекомендую этот Google IO говорить о Google Doodle Pacman. В 18:00 они начинают говорить о личности призраков в pacman. Это действительно ошеломляет, как просто вы можете поместить личностей в простой поиск пути.

Google I / O 2011: секреты Google Pac-Man: игровое шоу

Целое видео стоит посмотреть. Я действительно рекомендую это.


Не совсем отвечаю на вопрос, но может быть вдохновляющим ... (я думаю)
Notabene

11
Я бы сказал, что это правильный ответ. Вопрос заключался в том, как заставить компьютерного противника чувствовать себя «живым», и именно так и разрабатывает личность призраков.
Циклоп

14

Я не знаю ни о каких таких блогах, но так как тактические пошаговые RPG - мой второй любимый жанр сразу после roguelikes, я напишу вам сообщение в блоге. Исходя из моего опыта, меня не отталкивала не сложность тактического ИИ в РПГ или РТС, а его противоположность: полная близорукость ИИ и отсутствие командных решений. Человек никогда не будет так играть.

Тогда, когда я все еще рассматривал JRPG как вершину игрового дизайна, я однажды пытался создать «типичную японскую TRPG» с упором на тактические пошаговые бои, такие как Final Fantasy Tactics. Как всегда, это стало просто технической демонстрацией для поиска пути и ИИ, поэтому я поделюсь своими мыслями по этому вопросу.

Большинство из этих TRPG не сильно беспокоятся об ИИ. Игрок получает удовольствие не от сложной тактической или стратегической задачи, а от общего фарма и злоупотребления искусственным интеллектом. Так что не имеет большого значения, что их ИИ делают вещи, которые ни один человек никогда бы не сделал. Обычно достаточно иметь глупого ИИ и уравновешивать его с игровым дизайном таким образом, чтобы ему никогда не приходилось видеть больше, чем один ход, и использовать только лучшие краткосрочные ходы. Конечно, это никогда не кажется реальным, но кого это волнует? Это просто кажется неправильным, я хочу верить, что можно создавать забаву, основанную на сражении со сложными действиями ИИ, а не на ферме и катании на роликах. Может быть, и ненужным, и трудоемким, но возможным.

Вспоминая оригинальную Final Fantasy Tactics и ее хардкорный мод FFT 1.3, я поставил перед собой цель по-человечески и весело играть в ИИ:

  • ИИ должен создавать вызов, но интересный вызов, а не вызов "полного поиска человека". Этот забавный вызов часто должен ожидаться игроком в общем контексте текущей миссии. Обычно именно здесь вступают в игру сценарии, создавая искусственный искусственный интеллект пони.
  • ИИ должен быть умным, но не глубоким, минимаксным, умным. У разных типов ИИ должны быть разные недостатки, как у разных людей. В играх это встречается редко, например, в Advance Wars были сценаристы для генералов, но у юнитов они тоже могут быть.
  • ИИ должен избегать глупости, когда это не задумано. Непристойная глупость полностью разрушает любую иллюзию интеллекта, всегда выигрышные стратегии делают то же самое. И лазейки, созданные небрежным написанием сценариев, являются худшими.

Я думал, что буду решать # 1 с возникающим поведением, # 2 с разными личностями и человеческим «полу-случайным» выбором стратегии, # 3 с минимальным жестким кодированием и тщательным тестированием.

Так что же это за поведение, о котором я говорю, это сценарий последовательности возможностей для использования? Лучшая способность из взвешенного списка? Нет, то, что я имел в виду, было сочетание желаемого интеллекта , типа личности и роли, вытекающей из доступных в настоящее время способностей и оружия. Вы можете описать эту комбинацию как «глупый торговец уроном от берсеркинга» или «умный целитель защиты». Таким образом, специализации ИИ, такие как классы или профессии, например, ИИ лучника, который использует лук для стрельбы стрелами с помощью некоторого набора предопределенных общих комбинаций способностей лучника, таких как Take Aim или Arrow Shower, становятся логически возникающими, а не жестко закодированными.

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

Чтобы сделать это тактическим развлечением, мы хотим, чтобы поведение решало несколько случаев:

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

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

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

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

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

Уже много писем, так что короче говоря, реализация была беспорядочной, и я никогда не справлялся с «тяжелым случаем», но даже тогда такой подход к забавной тактике казался выполнимым. Я начал с ФШМ, но мне пришлось быстро отказаться от этого подхода, он стал запутанным беспорядком состояний и переходов, которые невозможно отладить. Через некоторое время я остановился на полуавтономных персонажах, основанных на восприятии способностей, таких как парадигма «чувственный-думай-действуй», с деревьями поведения для возможных индивидуальных действий, глобальной стратегией, затрагивающей возможные действия команды, основанной на возможных индивидуальных действиях, а также заурядной версией чего-либо как N-Gram статистическое предсказание было брошено в.

Как это получилось? Удивительно, но AI даже несколько раз читал мои мысли, но я устал и оставил их, поскольку убедительных недостатков было более чем достаточно:

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

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


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

@jumpnett Хорошо знать, я надеялся, что хотя бы общую идею можно понять :) В качестве бонуса вы услышите больше моих сумасшедших мыслей, теперь на вашем симе. Воображая сима в реальном времени, я думаю, что одним из наиболее важных вариантов была бы аккуратная логика планировщика задач. Думаю, я бы попытался организовать задачи таким образом: это были бы основные задачи с приоритетами, такие как «стратегии», такие как «построить дом» с такими предпосылками, как «4 рабочих»; квадрат 4x4 свободных узлов в точке 10,10; 10 деревянные доски; 20 каменных плит ". Стратегия будет считаться выполненной, когда будут выполнены все предпосылки.
достаточно

Каждое предварительное условие порождает подзадачу для достижения соответствующего предварительного условия; подзадачи могут быть параллельными, последовательными или даже взаимоисключающими. Когда задача успешно завершится, установите ее предварительное условие как выполненное. Например, задача «10 камней» является последовательной для задач «4 рабочих» и «4x4 место», поскольку вы не можете собирать камни без рабочих и вы не можете размещать камни без места, но это будет параллельно Задача «20 камней», так как вам не нужна ситуация, когда у вас много камня, но нет дерева, а ваши рабочие просто стоят и ждут дрова вместо того, чтобы сначала использовать камень.
достаточно

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

Основным узким местом здесь является решение подзадач, которые не могут быть выполнены. Они бывают двух видов: 1) не может быть завершена сейчас и 2) никогда не может быть завершена. как правило, для # 1 вы хотите создать новую стратегию с более высоким приоритетом, которая поможет предыдущей стратегии, а для # 2 вы захотите отказаться от стратегии навсегда. Дело в том, что трудно различить эти два вида, здесь особо нечего сказать. Ну, может быть, ваш подход уже такой, но, может быть, вы
найдете

4

Не всегда заставляйте его реагировать на ваше действие X действием Y. Когда вы оцениваете каждое потенциальное действие, добавьте случайный коэффициент выдумки, чтобы ИИ не всегда выбирал один и тот же вариант, но выбирал что-то разумное.

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


3

Одна вещь, которую я вижу, много подсказывает, чтобы ИИ каким-то образом передавал свои «мысли» игроку. Это часто делается в шутерах от первого лица, когда враги (нереально) выкрикивают свои планы игроку (т. Е. «Флангите его!», «Он там!» И т. Д.).

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


В кредо убийцы Когда вас преследовали, преследователи выкрикивали: «Он здесь!» или "Куда он ушел?" или что-то подобное другим преследователям. Так что ИМХО: это может быть реалистично.
Джеймс Хоури

1
Правда, это имеет смысл во многих случаях, и это может зависеть от контекста игры. У охранников в Assassin's Creed будут другие способы общения, чем, например, у современной команды спецназа. И часто реалистичное решение не обязательно самое веселое; Это может быть неприятно, когда ИИ постоянно находится в окружении без предупреждения.
mrohlf

1

Часто мы думаем о том, «как мы создаем ИИ?»

Это пропускает большой вопрос "Что такое ИИ?"

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

Если вы хотите, чтобы ваши игроки чувствовали, что враги «умны», это даст ответ высокого уровня и, по сути, совершенно новый способ мышления об ИИ, то есть «способность предсказывать»

http://www.ted.com/talks/jeff_hawkins_on_how_brain_science_will_change_computing.html


0

Для меня «чувствовать себя живым» означает, что персонаж действует так, как вы думаете, в реальной жизни.

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

Если они военные или обученные, у них есть тактика.

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


1
Хм, не уверен в этом. Прежде всего ИИ должен быть веселым. Это весело для врагов бежать? Конечно, с ними веселее бороться, так как весь смысл игры в том, чтобы сражаться?
Tenpn

Это зависит от того, какое веселье вы хотите. Люди находят забаву в симуляторах, другие - в аркадных играх ... что может сравниться с реальной жизнью?
Никко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.