На самом деле в кутришных шейдерах есть один нехороший случай, когда нулевым юнитом идёт нечто полупрозрачные, а следующим - текстура с альфа-каналом, ну например стеклянная колба, поверх которой обрамление.
Просто включением альфа-канала такое не разруливается.
Добавлено 28-11-2019 в 16:22:
Вот же грёбанная задачка, из шейдера стейты не поменяешь, а рисовать всё с blendFunc( GL_ONE, GL_ONE ) - значит решётки будут полупрозрачными.
Добавлено 28-11-2019 в 18:57:
Практически завершил работу над шейдерами. Проблема с прозрачностью, увы, никуда не делась. Комбинированный материал со стадиями trans->solid навряд ли возможно нарисовать через стандартный блендфунк. Рази что через копию экрана.
Добавлено 28-11-2019 в 18:59:
А остальное всё работает, не хуже чем в ку3
Мигает, двигается, елозит, ползает по трубам и так далее.
Добавлено 28-11-2019 в 21:58:
Добавил анимацию текстур довольно оригинальным образом - каждый текс-юнит содержит в себе деномический массив путей к текстуре, по которым его можно будет поискать. Ну так я просто добавил классу каждого пути еще одну переменную - номер фрейма и всё. Теперь каждый кадр может искаться по разным путям, но суммарно их кол-во равно восьми, как в ку3.
В будущем слегка модифицируя этот механизм можно загружать и мультислойные текстуры, ну или что-то в этом духе. Просто они сольются в одну, а не останутся массивом. Так что в ку3 уже факелы заработали как надо
И всё это - на простом скрипте, движок про кутришные шейдеры даже не подозревает, единственное мне пришлось вывести дурацкое условие-проверку, что какого-то материала нет лайтмапы, а только повертексное, причём оно нужно для тех случаев, когда для материала с повертексным освещением поленились написать шейдер.
Осталась только эта грёбанная прозрачность, ну-да мне всё равно копирование экрана тестировать.
thambs писал: а вот таким способом можно будет аддитивно наложить рендер с монитора на диффузный материал?
таким это каким?
Цитата:
nemyax писал: Пробовал через коммутативный, как тут?
дело не в коммутации же. Нарушен порядок смешивания. Он там в статье верно говорит, если бы всё смешивалось через GL_ONE, GL_ONE то порядок был бы неважно.
Как есть сейчас:
C++ Source Code:
1
pass0 (GL_ONE, GL_ONE) +
2
pass1 (REPLACE) +
3
pass2 (GL_DST_COLOR, GL_ZERO) +
4
screen
как должно быть
C++ Source Code:
1
pass0 (GL_ONE, GL_ONE) +
2
screen +
3
pass1 (REPLACE) +
4
pass2 (GL_DST_COLOR, GL_ZERO)
Разница в том, что в первом случае для шейдера включён внешний бленд, т.е. мешается итоговый результат. Ессно получается вот такая ерунда.
Позже займусь, у меня еще автоспрайты не готовы. Надо будет сделать хинт для препроцессинга геометрии, иначе никак.
Добавлено 29-11-2019 в 09:41:
Вообще, посмотрел я на свои скрипты для рендеринга и окончательно утвердился в мысли, что для игровой части нужна полноценная скрипт-машина. Вот это вот стремление вынести в игровую дллку побольше связанного кода в конечном итоге только отпугивает потенциальных пользователей. Тем кто рисует текстурки, даже просто студию поставить - как серпом об асфальт. В тоже время когда существует масса лёгких IDE с подсветкой и возможностью запустить по горячей кнопке какую-либо командную строку для компиляции. Так что я полагаю надо сделать нечто вроде progs.dat и перенести все энтити туда. В таких скриптах даже наш Жэка разобрался - сундук вон сделал.
Добавлено 29-11-2019 в 09:42:
Главное чтобы скриптовой язык не было похож на UnrealScript где миллион новых кейвордов. Дичь какая-то.
nemyax
Ну сишный и плюсовый синтаксисы довольно всратые, хотя если убрать вездесущие точки с запятой перед переводом на следующую строку, лишние скобки и определения типов длиной в строку, то будет вполне читабельно.
Ну чтожы. Как я и говорил кастомный бленд через копию экрана решил проблемы шейдеров, где на второй-третьей стадии снова идёт запись в буффер глубины. Осталось только разрулить проблемки с полупрозрачными сурфейсами в тумане.
Добавлено 30-11-2019 в 14:37:
Собсно, я не стал делать абсолютно все бленды через скринкопи, это достаточно дорого. Только вот эти сложные случаи, которые иначе не разрулить.
Ну вообщем да, я тут провёл некоторые опыты, во всех случаях, когда у нас шейдер со сложным смешиванием (например все стадии имеют свой бленд-функ), то копия экрана прекрасно разруливает эту ситуацию и всё корректно блендится в один проход. Но таких случаев весьма мало, навскидку вспомнил только кольцо вокруг портала.
Так. Судя по всему старый механизм условий уже не удовлетворяет возросшим требованиям. Пора его обновить и расширить.