Страница 1 из 1

Воппрс по terrain

СообщениеДобавлено: 28 окт 2019, 00:17
MiniCat
Я сделал геометрию сцены и расставил объекты. И там где условно 0 высота, мне теперь крайне нужно сделать углубление как бы в минус. На сцену ушло пару месяцев и переделывать бы не хотелось.
Есть ли варианты вытянуть террайн вниз ниже нулевой высоты или же может быть весь террайн равномерно поднять на определенную величину? Размера кисти не хватает :(

Re: Воппрс по terrain

СообщениеДобавлено: 28 окт 2019, 11:48
Jarico
Нужно перед постройкой террейна выставить высоту а потом уже делать углубления

Re: Воппрс по terrain

СообщениеДобавлено: 28 окт 2019, 18:22
waruiyume
Спасипа, Кэп!
MiniCat, террейн поддерживает "формат" raw, можете импортнуть его в картинку отфотошопить и обратно.
Я бы сделал скриптом, по крайней мере в предыдущей версии, с редактированием высот через API не было сложностей.

Re: Воппрс по terrain

СообщениеДобавлено: 29 окт 2019, 21:07
MiniCat
waruiyume писал(а):Спасипа, Кэп!
MiniCat, террейн поддерживает "формат" raw, можете импортнуть его в картинку отфотошопить и обратно.
Я бы сделал скриптом, по крайней мере в предыдущей версии, с редактированием высот через API не было сложностей.

Можно подробнее? Террайн у меня состоит из 5 SplatAlpha. Это видимо карты высот. Как экспортнуть в картинку? Фотошоп есть. Но как поднять всё на определенную величину?

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

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 01:45
waruiyume
Для одного куска будет выглядеть примерно так:
Выделяем террейн
Шестеренка
Export raw

Открываем raw в фото (полная Ж)
Добавляем слой с белой заливкой и смешиванием add
Ставим заполнение n процентов
Экспортим raw

Выделяем террейн
Шестеренка
Import raw
Получаем поднятый на n% террейн
Роем в нём яму
Profit

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 10:47
jetyb
Синтаксис:
Используется csharp
    public static void Arise(TerrainData terrainData, float deltaY)
    {
        var heights = terrainData.GetHeights(0, 0, terrainData.heightmapResolution, terrainData.heightmapResolution);
        var oldHeight = terrainData.size.y;
        var newHeight = oldHeight + deltaY;
        for(var i = 0; i < terrainData.heightmapResolution; i++)
        for (var j = 0; j < terrainData.heightmapResolution; j++)
            heights[i, j] = heights[i, j] * oldHeight / newHeight;
        terrainData.size = new Vector3(terrainData.size.x, newHeight, terrainData.size.z);
        terrainData.SetHeights(0,0,heights);
    }
 

P.S на сякий случай лучше тестить на копии

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 12:58
MiniCat
DEL

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 21:26
MiniCat
DEL

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 21:49
Xtir
Лучше сделай скриптом, как написали выше. Только всегда делай бэкап своего террейна, а то какая-нибудь фигня случится и всё...

Re: Воппрс по terrain

СообщениеДобавлено: 30 окт 2019, 22:58
MiniCat
Xtir писал(а):Лучше сделай скриптом, как написали выше. Только всегда делай бэкап своего террейна, а то какая-нибудь фигня случится и всё...

Я пока решал первую задачу, сам себе сломал свою работу) Так что теперь в техпроцессу работы с фотошопом мне обязательно нужно научиться) Кривой бекап сделал >___<

Re: Воппрс по terrain

СообщениеДобавлено: 31 окт 2019, 00:29
MiniCat
jetyb писал(а):
Синтаксис:
Используется csharp
    public static void Arise(TerrainData terrainData, float deltaY)
    {
        var heights = terrainData.GetHeights(0, 0, terrainData.heightmapResolution, terrainData.heightmapResolution);
        var oldHeight = terrainData.size.y;
        var newHeight = oldHeight + deltaY;
        for(var i = 0; i < terrainData.heightmapResolution; i++)
        for (var j = 0; j < terrainData.heightmapResolution; j++)
            heights[i, j] = heights[i, j] * oldHeight / newHeight;
        terrainData.size = new Vector3(terrainData.size.x, newHeight, terrainData.size.z);
        terrainData.SetHeights(0,0,heights);
    }
 

P.S на сякий случай лучше тестить на копии


Спасибо за скриптец :)
Но как я должен применить его, чтобы изменения сохранились в эдиторе? Раньше подобных манипуляций мне делать не приходилось.
Как я понял deltaY это величина, на которую я хочу поднять террайн, а terrainData это файл террайна как раз.

Re: Воппрс по terrain

СообщениеДобавлено: 01 ноя 2019, 20:58
MiniCat
Что то не работает :D Где-то я туплю.
На месте с нулевой высотой не увеличивается высота, просто весь террайн поднимается. Не понимаю как этот скрипт должен сработать, по идее он равносилен тому что я бы руками ввёл новое значение высоты.

Синтаксис:
Используется csharp
    public TerrainData terrainData;

    public float deltaY = 2000f;
    public float[,] heights;
    public float oldHeight;
    public float newHeight;

    public void Awake()
    {
        heights = terrainData.GetHeights(0, 0, terrainData.heightmapResolution, terrainData.heightmapResolution);
        oldHeight = terrainData.size.y;
        newHeight = oldHeight + deltaY;
        for(int i = 0; i < terrainData.heightmapResolution; i++)
            for (int j = 0; j < terrainData.heightmapResolution; j++)
                heights[i, j] = heights[i, j] * oldHeight / newHeight;
        terrainData.size = new Vector3(terrainData.size.x, newHeight, terrainData.size.z);
        terrainData.SetHeights(0,0,heights);
    }

Re: Воппрс по terrain

СообщениеДобавлено: 02 ноя 2019, 11:32
MiniCat
waruiyume писал(а):Для одного куска будет выглядеть примерно так:
Выделяем террейн
Шестеренка
Export raw

Открываем raw в фото (полная Ж)
Добавляем слой с белой заливкой и смешиванием add
Ставим заполнение n процентов
Экспортим raw

Выделяем террейн
Шестеренка
Import raw
Получаем поднятый на n% террейн
Роем в нём яму
Profit


Я более-менее разобрался.
Нужно ещё перевести изображение в режим градации серого ведь?
Там добавляю слой с белой заливкой ( выше экспортированного слоя).
Кручу его прозрачность.
А вот дальше проблемы, ибо сложения (Add) у меня нет. Думаю это линейный осветлитель (добавить)?
Я пробовал разные варианты смешивания - осветление, умножение и т.п., но они не дают нужного результата. Подъём если и есть то копеешный, а остальной рельеф неадекватно съезжает.
В чём я ошибся?

Re: Воппрс по terrain

СообщениеДобавлено: 02 ноя 2019, 19:14
MiniCat
Всё, решил проблему.
Вот этот скрипт идеально решает задачу. Спасибо добрым людям. Предыдущий просто не работает из за неверной формулы.
Изображение