Unity: создание текстуры из ландшафта

У меня есть процедурный сгенерированный Terrain, на основе Unity's Terrain System.

Теперь я хочу Map из Terrain, не миникарту, а полную карту, которая сохраняется как 2D Texture.

Сначала я подумал о RenderTexture, но если я возьму Camera поймать все Terrain, результат зависит от аспекта разрешения, и у меня также есть проблемы, потому что width из Terrain является 3.2x в length.

Есть ли лучший способ решить эту проблему?

2 ответа

Решение
  1. Сделайте новую камеру и разместите ее над местностью.

  2. Убедитесь, что он находится в режиме орфографии

  3. Установить camera.aspect поле для terrainData.size.x / terrainData.size.z

  4. Установить camera.orthographicSize поле для terrainData.size.z/2f

  5. Убедитесь, что рамка камеры ориентирована по осям местности. Что-то вродеcam.transform.LookAt(terrain.GetPosition(), terrain.transform.forward); сделает свое дело.

Затем вы сможете создать RenderTextureс желаемым разрешением пикселей (на основе этого ответа Рафала Вилински):

int resHeight = 1000;
int resWidth = Mathf.RoundToInt(resHeight * camera.aspect);

RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
camera.targetTexture = rt; //Create new renderTexture and assign to camera
Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false); //Create new texture

camera.Render();

RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0); //Apply pixels from camera onto Texture2D

camera.targetTexture = null;
RenderTexture.active = null; //Clean
Destroy(rt); //Free memory

тогда ваша местность будет захвачена в screenshot

Есть четыре решения этой проблемы в порядке предпочтения:

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

  2. Отображение карты с полным или равномерно уменьшенным разрешением с полной прокруткой по осям X,Y.

  3. Уменьшите масштаб изображения по ширине экрана. Это создаст границы "почтового ящика" вверху и внизу экрана.

  4. Масштабируйте все изображение до разрешения экрана. Вызывает серьезные искажения.

Не существует "волшебной пули" решения проблем с соотношением сторон изображения.

Другие вопросы по тегам