Pull to refresh

Comments 24

Спасибо за хорошее настроение, давно так не смеялся, до слез просто.
Вспомнилось, как я в прошлом году участвовал в Ludum Dare.
image
Если научитесь делать свою игру за 48 часов вместо 4 месяцев, то трешачок оценят особые любители )))
На протяжении уровня, в каждом кадре < 5 тыс. вершин

Как можно 5000 вертексов наплодить в кадре с такой графикой?
«Коп» состоит из 6 кубиков, 6х8 = 48 вертексов максимум. Откуда там 200?)
«Коп» состоит из 11 кубиков, так как из-за особенностей текстурирования для каждого цвета нужна отдельная геометрия. Из-за плоского затенения (не знаю как правильно перевести flat shading) полигоны не делят между собой вершины, поэтому в кубе 6*4 вершин. 10 полигонов мы никогда не сможем увидеть, поэтому их можно удалить. В сумме получается (11*6 — 10)*4 = 224 вершины. 10 таких человечков плюс остальные объекты плюс интерфейс вполне может к 5000 вершин подобраться.
На самом деле у копа там не так все печально и кубиков все-таки 6, а вершин 84.

5к это скорей порядок, чем реальное значение. В основном, в кадре до 2-3к вершин.
А зачем вообще было использовать текстуры, почему не задействовать цвета вершин? Тем более в блендере можно мазать их прямо кисточкой.
Увы я не знаком с данным приемом, не могли бы вы подсказать где об этом можно почитать? Это поддерживается unity? Также мне нужна возможность менять цвета объектов (например, одна машина красная, другая розовая), как быть в этом случае?
В блендере VertexPaint и красить любым цветом, потом экспортировать в fbx и в юнити. В юнити не помню стандартных шейдеров, умеющих показывать цвет из вертексов, но шейдер получается довольно простой (без поддержки освещения, это уже нужно прикручивать самостоятельно):
Shader "Custom/UnlitVertexColor" {
    Properties {
    }
    SubShader {
        Tags { "RenderType" = "Opaque" }
        LOD 100
        Pass {
            Tags { "LightMode" = "ForwardBase" }
            CGPROGRAM
            #include "UnityCG.cginc"
            #pragma vertex vert
            #pragma fragment frag
            #pragma fragmentoption ARB_precision_hint_fastest

            struct v2f {
                float4 pos : SV_POSITION;
                fixed4 color : TEXCOORD0;
            };

            v2f vert (appdata_full v) {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.color;
                return o;
            }
            	
            fixed4 frag (v2f i) : SV_Target {
                return i.color;
            }
            ENDCG
        }
    }
    Fallback Off
}


нужна возможность менять цвета объектов

Сделать несколько префабов с разными мешами — они будут сбатчены в 1дк при использовании одного материала (цвета будут зашиты в вертексы).
Сделать несколько префабов с разными мешами

Если я правильно понял, это означает что на каждую вариацию цвета будет отдельная модель (блендер файл)? Но в таком случае это тяжелей поддерживать (например, саму геометрию модели нужно будет менять в нескольких файлах).
Это значит, что будет N-файлов машинок, из которых наделать несколько префабов и спаунить уже из списка.менять цвет через renderer.material — нельзя в принципе, как и вообще трогать renderer.material — это приводит к дублированию материала и разрыву батчинга.

это тяжелей поддерживать

Это легко поддерживать, мешей машинок думаю будет не более десятка. Погуглить как работать с инстанцированием префабов из Resources + как сделать pooling объектов. Как вариант, посмотреть здесь и здесь.
— Таки можно использовать Renderer.sharedMaterial вместо Renderer.material.
— Можно и без использования окрашивания вершин обойтись, есть Renderer.material.SetColor (хотя изменяет цвет у всех 3D моделей, которым назначен данный материал).
— Но само текстурирование в стиле Hyden интересно тем, что uv-развертку можно ужать до минимума, уложив, например, в 32x32 пикселя и менее, а значит можно создать атлас текстур, и используя offset и tiling уместить в текстуру 512x512, получив аж 256 вариантов раскраски, как минимум, одного персонажа. В идеале одного такого атласа с набором большого количества цветов хватит на всю игру, при должном расположении островов uv-развертки различных моделей.
— Таки можно использовать Renderer.sharedMaterial вместо Renderer.material.
— Можно и без использования окрашивания вершин обойтись, есть Renderer.material.SetColor (хотя изменяет цвет у всех 3D моделей, которым назначен данный материал).

Левой пишу, правой зачеркиваю — противоречащие абзацы. Топикстартеру нужна кастомизация отдельных инстансов, а не всех разом. Если потрогать material хотя бы раз — он скопируется из sharedMaterial и станет новым, те выпадет из батча. Это к сожалению неуправляемо и трогать это свойство крайне не рекомендуется.

Но само текстурирование в стиле Hyden интересно тем, что uv-развертку можно ужать до минимума

Оно не интересно абсолютно, ибо можно в данном случае повторить через цвета вертексов и оно не поломает батчинг в случае произвольной раскраски мешей любыми цветами радуги. Единственный полезный случай как раз — кастомизация путем подмены сета цветов на другой в разных картах.
Скорее всего, 84 вершины — это то, что показывает blender. После экспорта их, почти всегда, будет больше. Например, для куба с жесткими гранями blender показывает 8 вершин, а unity — 24.
Из-за плоского затенения полигоны не делят между собой вершины

Откуда вы такое взяли?) В статье написано:
В игре только 1 направленный (directional) источник света и нет теней.

Это обычный свет и стандартные шейдеры. Геометрию на полигоны они не разбивают.
Имелось ввиду — вертексы продублированы из-за необходимости получить острые ребра между гранями (по-разному направленные нормали вертексов).
Сразу вспомнился небезызвестный гном
Но для первого проекта достаточно забавно. Надо будет скачать, оценить удобство управления :)
Увы на данный момент его нет, если вы имеете в виду replayability. Один из вариантов — ввести новых персонажей с уникальным поведением.
Я про кнопочку «повторить последние 10 секунд игры»
Простите, я не понял о чем идет речь. Вы предлагаете добавить возможность просматривать / расшаривать последние 10 сек игры? На данный момент есть возможность расшаривать видео после прохождения уровня, также предварительно редактировать его (можно оставить только последние 10 сек).
Ну вот я и спрашиваю, как вы это сделали =)
Это не мой велосипед, это я интегрировал один из сервисов unity — Everyplay.
Только сейчас почему-то прочитал статью. Релиз уже свершился? Спасибо за интересное чтение и полезные ссылки.
Sign up to leave a comment.

Articles