Создание сотен локаций вручную непрактично для инди-разработчиков, а алгоритмы шума о которых я писал ранее ограничены. Искусственный интеллект, такой как MidJourney и NVIDIA GauGAN2 (интегрирована в NVIDIA Canvas, бесплатно доступный для пользователей с видеокартами NVIDIA RTX), предлагает новые возможности: нейросети генерируют текстуры, биомы и концепт-арт с высокой детализацией.

Процедурная генерация использует алгоритмы для создания контента, минимизируя ручной труд. Традиционные методы, такие как Perlin Noise или Voronoi, эффективны для высот карт или размещения объектов, но их визуальная вариативность ограничена. Генеративные нейросети, такие как MidJourney или GAN в NVIDIA Canvas понимают контекст («лес», «пустыня») и генерируют текстуры с реалистичными или стилизованными деталями. AI сокращает время на создание ассетов и повышает уникальность миров, сохраняя производительность.

MidJourney: диффузионные модели для текстур и концептов

MidJourney применяет диффузионные модели для генерации изображений по текстовым описаниям. В геймдеве это позволяет создавать текстуры или концепт-арт для локаций, таких как киберпанковские города или фэнтезийные леса. Для мобильных игр MidJourney ценен благодаря стилизованным изображениям, которые легко оптимизировать под слабые GPU. Процесс работы прост: в Discord-сервере MidJourney используйте команду /imagine prompt: alien landscape, low-poly, vibrant colors, --ar 16:9 --v 5. Параметр --ar 16:9 задаёт соотношение сторон под мобильные экраны, а --v 5 повышает качество. Полученное изображение (1024x1024) экспортируйте в PNG, сжимайте через TinyPNG до 256x256 и импортируйте в движок. Например, для аркады с космической тематикой можно сгенерировать фон планеты. Для бесшовных текстур добавьте параметр --tile. Указывайте «low detail» или «pixel art» в промпте, чтобы снизить ресурсоёмкость.

NVIDIA Canvas: генерация биомов из семантических карт

GauGAN2, встроенный в NVIDIA Canvas использует генеративно-состязательные сети (GAN) для преобразования грубых набросков в фотореалистичную или стилизованную графику. На холсте рисуются зоны (трава, вода, горы), и нейросеть создаёт текстуру, подходящую для биомов. Это особенно полезно для мобильных игр, где лёгкие текстуры минимизируют нагрузку на GPU. Создайте семантическую карту: зелёный для травы, синий для воды. Выберите стиль («фото», «cartoon»), экспортируйте текстуру 512x512 в PNG и сжимайте через Compress Or Die до 128x128 (около 100 КБ). Дорабатывайте в GIMP для стилистической согласованности.

Интеграция в Unity

Для интеграции AI-текстур создайте массив материалов и применяйте их динамически. Вот пример C# для террейна с Perlin Noise и случайной текстурой:

using UnityEngine; public class ProceduralTerrain : MonoBehaviour { public Material[] biomeMaterials; // AI-текстуры public float noiseScale = 10f; public int terrainSize = 33; void Start() { Terrain terrain = GetComponent(); TerrainData terrainData = new TerrainData(); float[,] heights = new float[terrainSize, terrainSize]; // Генерация высот for (int x = 0; x < terrainSize; x++) { for (int y = 0; y < terrainSize; y++) { heights[x, y] = Mathf.PerlinNoise(x / noiseScale, y / noiseScale) * 8f; } } terrainData.heightmapResolution = terrainSize; terrainData.SetHeights(0, 0, heights); // Применение AI-текстуры int randomIndex = Random.Range(0, biomeMaterials.Length); terrainData.SetAlphamaps(0, 0, new float[,,] { { { 1 } } }); terrain.terrainData = terrainData; terrain.materialTemplate = biomeMaterials[randomIndex]; // Оптимизация terrainData.size = new Vector3(50, 20, 50); terrain.castShadows = false; terrain.drawInstanced = true; } }

Этот код генерирует террейн с высотами и применяет AI-текстуру. Для мобильных устройств используйте terrainSize = 16, отключайте тени и включайте drawInstanced. Профилируйте через Unity Profiler, следя за Draw Calls (не более 50) и VRAM (менее 500 МБ). Применяйте Unlit-шейдер и LOD для дальних объектов. Снижайте разрешение текстур до 128x128 для фонов.

Интеграция в Godot

Для AI-текстур используйте TileMap или MeshInstance2D. Пример GDScript для процедурного биома:

extends Node2D var textures = [ preload("res://textures/forest.png"), // MidJourney preload("res://textures/desert.png") // GauGAN2 ] var noise = OpenSimplexNoise.new() func _ready(): noise.seed = randi() noise.octaves = 3 noise.period = 15.0 noise.persistence = 0.7 var tile_map = $TileMap for x in range(-15, 15): for y in range(-15, 15): var value = noise.get_noise_2d(x, y) var texture_index = 0 if value > 0.2 else 1 tile_map.set_cell(x, y, texture_index)

Код использует OpenSimplexNoise для биомов и применяет AI-текстуру. Для мобильных устройств включайте компрессию ETC2 и ограничивайте TileMap до 15x15. Профилируйте через Godot Debugger, следя за FPS (не ниже 30). Используйте Mobile Shader и ResourcePreloader для кеширования текстур. Тестируйте на устройствах с 2 ГБ RAM.

Оптимизация для мобильных платформ

Мобильные устройства ограничивают процедурную генерацию из-за ограниченных CPU и GPU. AI-текстуры (1–5 МБ) требуют оптимизации:

  • Сжатие: Используйте ETC2 (Godot) или ASTC (Unity), применяя TinyPNG или Compress Or Die для снижения размера до 100–200 КБ.

  • Асинхронная загрузка: Реализуйте через Resources.LoadAsync (Unity) или ResourceLoader.load_threaded (Godot) для минимизации фризов.

  • Шейдеры: Применяйте Unlit-шейдеры, отключайте тени и anti-aliasing.

  • Пул объектов: Кешируйте текстуры для повторного использования. Профилируйте через Unity Profiler или Godot Debugger, контролируя Draw Calls (<50) и VRAM (<500 МБ). Тестируйте на Android 10 (2 ГБ RAM) в эмуляторе Android Studio или на устройствах с чипами MediaTek Helio/Snapdragon 400, используя Texture Atlas для снижения Draw Calls.

Комбинируйте AI с алгоритмами шума

AI-текстуры усиливают классическую процедурку. Perlin Noise задаёт высоты террейна, а GauGAN2 генерирует текстуру биома. Пример в Unity:

using UnityEngine; public class HybridWorldGenerator : MonoBehaviour { public Texture2D[] biomeTextures; // AI-текстуры public float noiseScale = 12f; public int terrainSize = 16; void Start() { Terrain terrain = GetComponent(); TerrainData terrainData = new TerrainData(); float[,] heights = new float[terrainSize, terrainSize]; float[] biomeWeights = new float[biomeTextures.Length]; // Генерация высот и весов for (int x = 0; x < terrainSize; x++) { for (int y = 0; y < terrainSize; y++) { float noise = Mathf.PerlinNoise(x / noiseScale, y / noiseScale); heights[x, y] = noise * 6f; biomeWeights[noise > 0.4f ? 1 : 0] += 1; } } terrainData.heightmapResolution = terrainSize; terrainData.SetHeights(0, 0, heights); // Выбор биома int dominantBiome = System.Array.IndexOf(biomeWeights, biomeWeights.Max()); terrain.materialTemplate.mainTexture = biomeTextures[dominantBiome]; // Оптимизация terrainData.size = new Vector3(40, 15, 40); terrain.drawInstanced = true; terrain.castShadows = false; } }

Код генерирует террейн и выбирает AI-текстуру по доминирующему биому. Для мобильных устройств минимизируйте terrainSize и используйте drawInstancedЛайфхак: Применяйте Fast Noise SIMD для ускорения шума. Добавляйте низкополигональные модели с OpenGameArt.

AI может использоваться для ускорения создания концепт-арта. В MidJourney генерируйте референсы: /imagine prompt: sci-fi desert, 2D, concept art, --ar 16:9. GauGAN2 подходит для прототипов биомов: создайте семантическую карту и экспортируйте текстуру для TileMap.

А минусы будут?

AI в геймдеве сопряжён с ограничениями:

  • Стилистическая несогласованность: MidJourney может нарушать визуальное единообразие. Решение: применяйте параметр --s 100 и дорабатывайте текстуры в GIMP.

  • Производительность: Реал-тайм генерация невозможна на мобильных устройствах. Используйте кеширование текстур и асинхронную загрузку.

  • Лицензии: MidJourney требует платной подписки для коммерческого использования, NVIDIA Canvas бесплатен для пользователей с видеокартами NVIDIA RTX

  • Размер текстур: Сжимайте до 128x128 с mipmapping для оптимизации. Тестируйте на Android 10 (2 ГБ RAM), упрощайте шейдеры, если Draw Calls превышают 50.

Александр Антипин, руководитель студии разработки Metabula Games.

Комментарии (1)


  1. Vedomir
    02.07.2025 09:41

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