С небом вот какая штука. Раз уж мы рисуем его из как кубическую карту из шейдера, то все вот эти древние ухищрения с проекцией текстурных координат просто идут лесом. Нам не нужно строить какие-то грёбаные виртуальные кубы в пространстве чтобы нарисовать скайбокс, мы в состоянии спроецировать кубемапу вообще на любой полигон.
Это сильно упрощает дело. Надо только придумать с облаками еще.
Можно ли им налету сгенерить координаты по полусфере.
thambs на каждый юнит можно добавлять нужные текстурные флаги, в том числе и TF_NEAREST конечно. Можно эти флаги обвернуть в условие с кваром например. Т.е. в дополнение к gl_texture_nearest.
Добавлено 08-12-2019 в 14:00:
Прекрасно получилилось всё спроецировать на плоскость. Я вообще удивлён, что спустя столько лет, народ до сих пор копипастит эту херню с генерацией координат на кубе, сферы для облаков и прочее. Оно вообще не нужно, достаточно нарисовать просто полигон неба, как его поставил маппер и спроецировать туда скайбокс и облака. И помоему качество таких облаков даже выше, ведь полусфера имеет конечный шаг тесселяции, а тут у нас попиксельное совпадение. Второй несомненный плюс - небесная поверхность рисуется со включённой записью в буффер глубины, а значит сквозь нее не будет ничего просвечивать, значит плевать на порядок отрисовки.
Добавлено 08-12-2019 в 14:02:
Да и разумеется теперь задники грузятся в единую кубемапу, а не в отдельные шесть текстур. Фактически можно сказать, что я нарисовал небо, не модифицируя движок. Опять всё в скриптах и шейдере.
Вот кстати еще хрень какая с автоспрайтами. В идеале предполагается, что автоспрайт будет иметь всегда четыре вертекса. Но есть вот карта XPac_Bt (Black Town), так вот там вертексов произвольное кол-во. Ну и чтобы вы думали? Ку3 надрывается, про odd vertex count, но тем не менее всё исправно рисует. Я долго не мог одуплить почему. А потом дошло. Я жы генерю ему секвенцию как набор трианглов. А надо как набор квадов.
В ку3-шных шейдерах была одна очень серъезная архитектурная проблема - шейдер на вход принимал не только имя, собсно, шейдера, но и номер лайтмапы. Причём, как вы догадываетесь, использование лайтмапы могло быть попросту отключено из самого шейдера. Дело тут вот в чём - повертексное освещение считалось компилятором для всех поверхностей. А вот лайтмапа кое-где скипалась, ну скажем миск-модели. То есть с лайтмапы на вертекс можно было переключиться всегда, а вот наоборот - нет. Но это полдела. Как вы понимаете, если уж шейдер объявлен пользователем, то там такие фокусы не проходят - прописал лайтмапу, значит будет лайтмапа. Или вертекс. Или всё вместе. А вот если шейдер был имплиситным - там начинались чудеса. Покроет дизайнер одной и той же текстурой стенку и модель какую-то, и генерируются для одного и того же материала два шейдера - с повертексным и с лайтмапным. Вторая проблема еще и в том, что шейдеры генерировались не для материала, а для сурфейса. Что в общем случае дольше. У себя я решил эту проблему достаточно просто - передал в юниформ номер страницы атласа. Тесселятор все чекает номер лайтмапы и останавливается, если он не совпал, а мы просто таким образом смотрим, раз -1 - значит повертексное. -2 - фуллбрайт ну или что-то в этом роде. Условие статичное, на производительность не влияет.
Добавлено 11-12-2019 в 22:02:
Вообще там много было весёлого. Например q3map2 зачем-то линкует сурфейсы бмоделей к лифам. Вот этого вот я вообще не понял. Может это конечно такие специальные лифы в общей куче, которые в дереве не участвуют. Ну знаете как построить фейковое дерево? Аллокнуть аутсайд ноду и к ней прилинковать лиф или вообще просто один лиф аллокнуть. Когда мы используем обход дерева это и не влияет, но я давно уже линейно обхожу лифы, поскольку это гораздо быстрее для отрисовки. Ну и видимо вот эти тоже задел.
Похоже мне удалось-таки преодолеть главный затык в написании нового движка. Если я засматривался в какой-то степени на кутришный формат уровней, меня преследовала мысль, что это придется тащить кутришные материалы, а мне бы этого совсем нехотелось. Теперь же, когда материалы описаны в скрипте, соответственно проблемы никакой нет, рендерер остался генеричным. Значит можно и дальше двигаться в этом направлении.
В халфе с точки зрения современной системы материалов, самая великая мерзость - вот эти рендермоды. Мало того, их еще и налиту переключать можно, что совсем уже за гранью. Для простейших материалов из одной диффузки это не имеет никакого значения. Но уже в ку3 эту тему дропнули.
С одной стороны - это просто такой способ задать прозрачность. С другой - одни и те же диффузки могут быть как прозрачными так и непрозрачными, вот в чём штука. И заранее это определить невозможно. Хранить по две копии материала для непрозрачных и прозрачных случаев - тоже глупость какая-то. Разве что в шейдер протащить эти рендермоды.
Но мне эта затея представляется небесспорной в том плане, что я возможно вообще дропну все эти старые материалы и рендермоды в плане их поддержки. Прозрачность регулировать из объекта - это пожалуйста, тут никаких проблем, но переключателя солид\транс точно быть не должно налиту. Впрочем можно провести любопытный эксперимент: прописать пресеты материалам исходя из их предназначения и поглядеть сколько будет мест, где это зафейлится. Стёкла, решётки там.
thambs писал: А это вообще хоть где-то используется?
думаю нет. env_render юзали, чёб спрятать объект в основном. Ставили прозрачность на ноль.
Я вот еще думаю, оставить в движке формат текстур только DDS, а остальные форматы вынести в утилитку для конвертации. Как у вас workflow устроен, не будет ли это неудобно? Мне Элбер как-то доказывал, что ему TGA просто необходим.
Дядя Миша писал: Я вот еще думаю, оставить в движке формат текстур только DDS, а остальные форматы вынести в утилитку для конвертации. Как у вас workflow устроен, не будет ли это неудобно? Мне Элбер как-то доказывал, что ему TGA просто необходим.
Если нормальный dds плагин для фотошопа найдешь
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!