Ответы пользователя по тегу Разработка игр
  • Что определяет качество 3D картинки в играх?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Итоговую картинку определяет художник (ну или программист), который делает графику. То, сколько времени и усилий художник потратит на подготовку (желаемой) картинки, определяет движок. Ну и дальше уже вопрос к движку, какие технологии он поддерживает, и насколько быстро рендерит графику.

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

    И OpenGL можно выжать что угодно, хоть картинку уровня UE4. Всё упирается в технологии и библиотеки. Т.е., можете написать свой bloom, dof blur, occlusion, hdr, AA, parallax mapping, tessellation, и т.д (именно эти технологии и делают картинку "красивой"). Либо взять готовые решения. Но чтобы всё работало быстро надо будет еще потратить время на оптимизацию, совместить выбранные технологические решения.
    Либо взять UE4, где всё включено и оптимизировано "по умолчанию".

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

    Но это лишь одна точка зрения и я уверен, что найдутся другие ;)
    Ответ написан
  • Растр в большом разрешении или вектор для казуальной игры?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Рисуйте так, как удобно. Умеете вектором - супер! Требуется растр - пускай будет 4096 или даже 8192, с заделом на будущее ;)

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

    Например:
    c484e46fb169459f9413124a8a4495bc.pngb0c9411e4f944ced98c78f56e7066a1f.png
    Ответ написан
  • Операция, обратная запеканию нормалей?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Ищите Vector Displacement.

    Суть в том, чтобы получить в редакторе displacement модели именно с normal map, а не черно-белой bump map (результат будет совершенно иной). А это просто не каждый displace инструмент умеет/поддерживает.

    Я делал данную операцию, насколько помню, в 3ds MAX + Vray (у врея была карта, что позволяла преобразовать текстру c нормалями именно в векторную текстру/карту). Но подозреваю, что можно и в других 3д редакторах (Maya, Blender, Zbrush, Mudbox).

    PS: освежил воспоминания - 3dsmax + Vray позволяют рендерить объект с vector displacement, но не получать саму геометрию напрямую. Так что возможно вам стоит сразу поковыряться в других графических пакетах.

    PS2: а вот Blender справился без вопросов:
    93deaffe85b140b0ad77f56fb1b85313.png
    Ответ написан
  • Кто занимается разработкой анимаций?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Дополню Даниил Басманов

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

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

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

    Не вспомню, чьи слова, но повторю "Чтобы стать профессионалом в каком либо деле, надо потратить на изучение этого дела 10000 часов". Так что если у вас будет человек, универсал (скажем вроде меня), который умеет делать 3д-графику, писать код, и делать анимации, то ничего из этого он не сможет делать хорошо (ну или быстро). Либо этот человек "потратил 30000 часов" на освоение данных навыков, и сможет все делать отлично. Но тогда работать он сможет в любом случае за одного, а платить придется за троих. Надеюсь вы идею уловили :)

    Так что художник рисует все, что надо аниматору, дальше аниматор создает все анимации, которые нужны программисту, а программист настраивает управление ими. При этом, профессия может быть смежной, "художник-аниматор", но никогда "программист-аниматор".
    Ответ написан
  • Как называются такие 3D модели?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Первое - low-poly стиль. Т.е., это не просто низко полигональные модели, где модель делается максимально красивой но с минимальным количеством треугольников, а именно модели, которые стилизованны для отображения в виде треугольников.

    Второе - обычные модели без текстур. Одного, серого цвета. Не знаю, низко полигональные они или нет, на картинке не разобрать. Но если учесть, что там нет текстур, то сетка ограждения и другие мелкие детали исполнены моделированием, а не текстурой, и значит треугольников там уже не мало "лишних", и low-poly я бы их уже не назвал.
    Ответ написан
  • Unreal Engine, или Unty3D?

    DanceM
    @DanceM Куратор тега Unity Game Engine
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Мульти-платформенность забыли и поддержку VR, в Unity это лучше работает.
    Пробовал Unreal, очень понравился. Но в Unity все быстрее и проще делается, особенно если еще учишься.
    Что до графики и требований - все зависит по большей части от разработчика. Если голова не на плечах, то движок не спасет.
    Ответ написан
  • Как правильно называется сфера-окружающий мир в 3D?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Environment sphere, но это не обязательно будет сфера, часто применяют куб (environment cube), соответственно, текстурная развертка тогда отличается - spherical mapping VS cube environment mapping
    Ответ написан
  • Что почитать про программирование 3D графики?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Мне очень помогло это в свое время:
    http.developer.nvidia.com/CgTutorial/cg_tutorial_c...
    Ответ написан
  • Cервер для целого класса по 3D?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Собрал дома рендер-ферму с бездисковой загрузкой через CCBoot, на 7 машин.

    Рендерят все компы, причем, заранее можно выделить/настроить под рендер определенное кол-во ядер процессора, и тогда это совсем не мешает работе за ПК в процессе рендера (но конечно, можно рендерить и на любом выбранном ПК).

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

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

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

    PS: На гигабитном свиче и роутере экономить не рекомендую, будет глючить.
    Ответ написан
  • Делить или нет текстуры по разным атласам?

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

    В современном мире даже у слабых компьютеров есть на борту 512-1024МБ видео памяти (как в прочем и у многих современных телефонов). Текстура RGBA 4096x4096 c DXT5 или ETC2 сжатием занимает целых 21.3МБ (если верить Юнити). Так что вполне возможно все ваши текстуры могут быть упакованы в пять-десять таких атласов, загруженны все в память, и еще место останется.

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

    Еще могу предложить вариант использовать ассеты, типа Simple LOD или Mesh Baker для запекания моделей и/или создания атласов уже в самой сцене Юнити (я предпочитаю Mesh Baker). Тогда можно собирать билды с атласами и без, не рискуя исправлением всех текстур и разверток.
    Ответ написан
  • 2D игра.Связь скриптов. Как вызвать bool из другого скрипта?

    DanceM
    @DanceM Куратор тега Unity Game Engine
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Ваш код в работает, т.е. если переменная не изменяется, то причина где-то в другом месте.

    Как вызвать bool из другого скрипта

    В скрипте есть directionInput и он всегда равен 1, как мне его менять?

    В случае C#, все просто, прямо как у вас в скрипте c CharacterController1:
    var moveScript = GetComponent<MoveScript>();
    moveScript.LeftRight = true;
    //можно сразу переменную
    moveScript.directionInput = 1;

    Или менять через вызов метода:
    var moveScript = GetComponent<MoveScript>();
    moveScript.WalkLeft(); // всё, как у вас, только метод WalkLeft() должен быть public


    PS:
    И я бы не рекомендовал мешать int и float в расчетах (у меня часто изза такого смешивания бывают проблемы).
    Например:
    theScale.x *= -1; // не лучший вариант
    theScale.x *= -1f; // правильно
    
    //или если переменная int
    int directionInput = 1;
    theScale.x *= (float)directionInput;
    
    //тоже с векторами
    var speed = new Vector2(10f, 10f);
    Ответ написан