В общем как я себе это представлял и как это реализовано. Увы я плохо разбираюсь в сетевых приложениях т.к. имею опыт локального софта и то на VB.6 и Delphi частично.
Кто прочтет много букавок, тот молодец :fedcrazy:
По цвету.
на сколько мне не изменяет память, то в "Мount and Вlade " как таковые использовались не просто запеченные текстуры, а именно материалы (как в зд редакторе) отсюда и я плясал (я так через ноды и реализовал.
У меня 2 материала в котоых есть комплексный шейдер с набором проиндексированных текстур и вариативным интерфейсом цвета: “тон-насыщенность-яркость” ).
По факту применяется на модели два материала.
Материал 1:
Каналы: Цвет, Диффузия, Глянец,
Материал 2:
Каналы: Нормали
Материал 3:
Каналы: Цвет, Глянец, Прозрачность
Материал 4:
Каналы: Накал, Цвет
Что бы было понятно, на рисунке в дальнейшем будет показано как это выглядит…если дочитаете до него :fedp: .
Эти два универсальных материала применяется на все детали без исключения (Мат.1 и Мат.2). Однако нужно понимать. что под Мат.1 подразумевается серия аналогичных материалов (клонов Мат.1.) Достаточно иметь 3 идентичных мат.1. и зон для покраски на одной детали, дабы иметь широкие возможности покраски.
Материал 1 на детали не имеющие прозрачности, Материал 2 на детали не имеющие прозрачности (рельеф), Материал 3 на имеющие прозрачность (стекло), Материал 4 (свечение) Таким образом мы получаем гибкую настройку цвета для каждой детали, которая обуславливается лишь “зонами” рисунка. Имеется ввиду, что например для “детали №1” применяется один “материал №1” и “материал №2” (рельеф), а для “детали №2” - три идентичных друг-другу “Материал №1” + три “Материал №2” и каждый из них на “своей зоне” образуя рисунок для данной детали благодаря разделяющим материалам только с альфа-каналом.
Так же имеется нюанс при масштабировании деталей. Я не знаю имеется ли в данном игровом движке наложение материалов. Но Это необходимо для того, что бы при масштабировании детали по любой из осей материал соответственно подвергался масштабированию т.е. если деталь например уменьшили в 2 раза, то текстура “материал №1” соответственно растянулась в 2 раза т.е. стала такой какой и была, а текстура “материал №2” (рельеф) соответственно деформировалась с деталью.
Почему “материал №1” остается стабильным, а “материал №2” отвечающий за рельеф масштабируется по UV соответственно с деталью?
Рельеф (нормали) имитируют как мы видим на моделях мелкие детали. Для несведущих в ЗД объясняю. Имитация применяется взамен настоящей конструкции мелких деталей т.к. модель состоит из полигонов (для примера возьмем майнкрафт и его кубики - 1 полигон пусть будет кубиком :fedcrazy: ) . Чем больше “кубиков” (полигонов) тем “тяжелее модель” и ее сложнее компьютеру просчитывать т.к. для формирования мелких деталей нам нужно мнооого маленьких “кубиков” для создания рельефа.
Имитация рельефа основана на затенении/отражении в определенной области “текстуры” по отношению к “зрителю” так, что создается впечатление, что там “выпуклость” или “углубление”. У нас именно “материал №2” выполняет функцию рельефа и было бы странно если бы “рельеф” детали оставался постоянным и при масштабировании детали, какой нибудь люк “уехал” сверху в бок.
А вот “материал №1” у нас"банальная краска" и она должна быть постоянной. Ну представьте себе: вы раскрашиваете в камуфляж звездулет и корпус у вас с “большими пятнами”, а маленькая деталь - с “маленькими пятнами” камуфляжа, как результат получим разнобой в масштабе окраски :fedlol: . Поэтому краска везде должна быть одного размера, а для этого, она должна пропорционально стремится сохранять свои 100% размера (что у меня и наблюдается на модели)
Обратите внимание. Для того, что бы не морочить голову с непропорциональными изменениями детали и UV, детали масштабируются по трем осям т.е. пропорции сохраняются. Деталь просто делается больше-меньше, ее нельзя вытянуть. Это позволит сохранить округлости на текстуре-рельефе (“материал №2”) т.е. люки и прочий псевдо-декор всегда будет круглым, квадратным и изогнутым как надо ![](<fileStore.core_Emoticons>/emoticons/santa.gif) . Просто и изящно.
И так что мы имеем в результате.
Как я уже говорил, каждая деталь в зависимости от копий материала на ней (как определили дизайнеры кол-во зон разрисовки. Сколько зон, столько и материала на ней) имеет регуляторы настройки цвета “материал №1”:
-Переключатель текстура/цвет в канале “Цвет”
-переключатель рисунка в канале “Цвет”, если пользователь (игрок) решит, что деталь будет с рисунком камуфляжа например, а не однотонного цвета (те самые проиндексированные текстуры в канале цвет “материал №1”. У меня в модели три типа камуфляжа, увы на видео не заметно т.к. ускорено само видео :fedp: )
- Яркость Глянца, в канале “Глянец” для усиления, ослабления эффекта “металличности” материала т.е. как же объяснить по простому-то…как на машине в жизни - матовая краска и глянцевая :fedcrazy:
-Переключатель проиндексированных текстур “Рельефа”… в канале “Нормали” (не бамп, а именно нормали применяются) для выбора рисунка. На видео вы видели, как кораблик стал “пупырчатым”. К сожалению я ступил и у меня в анимации все детали меняются с одинаковой скоростью, поэтому кажется, что они все залиты одним и тем же. На самом деле это не так
Сабж описанного выше:
Под идентичными настройками подразумеваются не одинаковые значения, а одинаковые параметры (свойства)
И так с механизмом краски вроде понятно.
По факту у нас все текстуры в материалах имеют индексы , поэтому структуру окраса в итоге для каждой детали можно представить примерно так с точки зрения программирования…Например Деталь с двумя зонами расцветки…
Деталь ID = 1************************************************************"материал №1" Зона расположения (Альфа-1)= 1:Цвет: Цвет/текстура = 1, Текстура_Col ID=2Диффузия: Текстура_DIF ID = 2Глянец: Яркость глянца = 100% "материал №2":Нормали: Текстура_NORM ID = 1************************************************************"материал №1" Зона расположения (Альфа-2)= 2:Цвет: Цвет/текстура = 1, Текстура_Col ID=3Диффузия: Текстура_DIF ID = 3Глянец: Яркость глянца = 50%"материал №2":Нормали: Текстура_NORM ID = 2 ************************************************************
По шаблонам.
как правильно написал Lendys
тут ноль проблем - компоненты на сервере все, а от личной модельки будет грузиться не 1 циферка айди, а небольшой пакет с айдишками компонет и координатами точек крепления. скажется только на загрузке раунда и то никак, собственно - таймер до вылета дольше крутится.
Координаты деталей и настройки цвета хранятся в текстовом файлике XML или со своей структурой (как хотите) на клиентской машине. Поэтому сервер от нагрузки избавлен. Как только игрок открывает редактор в его список подгружаются шаблоны игрока с его кампутера ![](<fileStore.core_Emoticons>/emoticons/santa.gif)
Далее игроки могут обмениваться по желанию шаблонами по внутригровой почте т.е. текст с этми ID дублируется по факту у второго игрока получившего “чертеж” и файлик с этими магическими записями создается у второго игрока на компе.
Как только игрок морально готов и доволен плодом своего творчества и у него есть 1250 ГС, он жмякает кнопочку “создать” и…вот тут я не знаю…ибо про работу сетевых, а не локальных приложений мне мало, что знакомо (точнее я не создавал сетевых приложений…в теории предполагаю два варианта , но писать не буду ибо в этом направлении профан). 4*32 т.е. представим себе сферическую ситуацию ПВП полный бой 16*16 и увсех по 4 крафтовых пепелаца т.е. 128 коров…как это подгрузить? …оптимизировать как-то…сеть + процедурка …наверно…“истина где-то рядом” © Да и в RoboCraft по факту сбор мячты реализован (спасибо за наводку
Dezrow, потестил - очень годно, хотя кубизмом от майнкрафта уже пресытился) :fedp:
Вот так вот вкратце, а система цвета как видите не выдумана и вполне реализуема ![](<fileStore.core_Emoticons>/emoticons/angry.png)