HLFX.Ru Forum Страницы (8): « Первая ... « 3 4 5 6 [7] 8 »
Показать все 114 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Моделирование (https://hlfx.ru/forum/forumdisplay.php?forumid=25)
-- Обсуждение форматов моделей (https://hlfx.ru/forum/showthread.php?threadid=6082)


Отправлено Дядя Миша 25-03-2024 в 20:59:

Crystallize технически для пользователя ничего не меняется, но свобода действий гораздо шире. Как и должно быть в норме.

Добавлено 25-03-2024 в 23:59:

Попытаюсь на примере объяснить разницу. Как устроены материалы во всех движках?
Есть некий фиксированный набор параметров, который вы можете указать материале. Строго определённые имена этих параметров, либо вообще бинарная структура. Иногда вы можете так же определить фиксированный набор пользовательских параметров с идиотскими именами, типа UserParam1, UserParam2. Дальше всё это парсится внутри движка и перенаправляется в шейдер, где подключается к точно таким же фиксированным именам юниформов. Т.е. движок по сути занимается каким-то копированием данных с жестко определёнными входными и выходными именами. Всё это берёт начало со времён Quake3, когда программируемого конвейера ещё не было. Т.е. исторически сложилось, да так и осталось.
Хотя смысла в этом никакого.
В Ксаше материалы устроены иначе. Вы объявляете переменную - и она автоматически превращается в юниформ. Или текстурный юнит. И вы назначаете этой переменной текстуру или источник данных. Согласно объявленному типу данных. Это может константное значение, выражение, какие-то данные из недр движка (вы сами выбираете, какие именно).
И всё это автоматически направляется в ваш шейдер. Движок об этом ничего не знает и занимается переброской абстрактных данных. Таким образом возможность написать любой шейдер больше не ограничена фиксированным набором входных данных, которые описывает материал.
Теперь в шейдер можно передавать любые данные. И всё это описано прямо в материале.
Тут легко догадаться, что подобное описание материала будет сильно напоминать уже полноценный язык программирования, а не лаконичный набор параметров. То есть это как минимум неудобно для художников.
И тут в дело вступает вторая подсистема - автозамена с перегрузкой.
Которая позволяет передавать произвольный набор параметров и оформлять макросы и как набор слов и как набор с фиксированными параметрами. Т.е. технически вы сперва формируете конвейер с произвольными эффектами - именно такими, какие нужны для вашей игры. А потом прячете все настройки под макросы и вместо кучи кода пишете одно-два ключевых слова, как будто работаете с классической системой материалов из конца 90-х.
Мощность системы тестировалась на возможности описать на ней шейдерный язык из Quake3, Doom 3. Так вот - моя система материалов позволяет без вмешательства в движок полностью реализовать шейдеры из Quake 3, чисто на макросах и автозаменах. И это будет полностью корректно работать, 1 в 1, как и в самой Quake3. К тому же есть возможность выполнять условия для оптимизации прямо по ходу чтения этих материалов. Я вам выложу имплементацию для Quake3 в очередной бета-версии. Помнится я однажды уже выкладывал, но тогда никто не понял что это такое. Да и сейчас я вижу доходит с величайшим трудом.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Crystallize 26-03-2024 в 01:23:

Цитата:
Дядя Миша писал:
Так вот - моя система материалов позволяет без вмешательства в движок полностью реализовать шейдеры из Quake 3, чисто на макросах и автозаменах

И порталы тоже?


Отправлено FiEctro 26-03-2024 в 05:56:

Цитата:
Дядя Миша писал:
Попытаюсь на примере объяснить разницу. Как устроены материалы во всех движках?
Есть некий фиксированный набор параметров, который вы можете указать материале. Строго определённые имена этих параметров, либо вообще бинарная структура. Иногда вы можете так же определить фиксированный набор пользовательских параметров с идиотскими именами, типа UserParam1, UserParam2. Дальше всё это парсится внутри движка и перенаправляется в шейдер, где подключается к точно таким же фиксированным именам юниформов. Т.е. движок по сути занимается каким-то копированием данных с жестко определёнными входными и выходными именами. Всё это берёт начало со времён Quake3, когда программируемого конвейера ещё не было. Т.е. исторически сложилось, да так и осталось.
Хотя смысла в этом никакого.
В Ксаше материалы устроены иначе. Вы объявляете переменную - и она автоматически превращается в юниформ. Или текстурный юнит. И вы назначаете этой переменной текстуру или источник данных. Согласно объявленному типу данных. Это может константное значение, выражение, какие-то данные из недр движка (вы сами выбираете, какие именно).
И всё это автоматически направляется в ваш шейдер. Движок об этом ничего не знает и занимается переброской абстрактных данных. Таким образом возможность написать любой шейдер больше не ограничена фиксированным набором входных данных, которые описывает материал.



Так в Юнити материал тоже составляется согласно юниформам шейдера. Прикол в том что хоть в первом дууме, хоть в третьей кваке, хоть в сорсе, хоть в кризисе, хоть в ведьмаке альбедо остаётся альбедо, а карта нормалей картой нормалей, независимо от материала, и вообще наличия материал системы как таковой. Дерево будет оставаться деревом не зависимо от движка и игры. А потом уже пользователь пишет кастомный шейдер и делает с этим набором любую дичь.

Цитата:
Дядя Миша писал:
Мощность системы тестировалась на возможности описать на ней шейдерный язык из Quake3, Doom 3. Так вот - моя система материалов позволяет без вмешательства в движок полностью реализовать шейдеры из Quake 3, чисто на макросах и автозаменах. И это будет полностью корректно работать, 1 в 1, как и в самой Quake3. К тому же есть возможность выполнять условия для оптимизации прямо по ходу чтения этих материалов. Я вам выложу имплементацию для Quake3 в очередной бета-версии. Помнится я однажды уже выкладывал, но тогда никто не понял что это такое. Да и сейчас я вижу доходит с величайшим трудом.


Так, а как это влияет на поля с текстурами? Скажем Diffuse = "kek.png", Albedo("kek.png), Texture2d = "kek.png" это совершенно разные по концепции вещи? Ты же сам говоришь что система гибкая, так почему нельзя использовать какой то общий совместимый базовый шаблон? А там пускай пользователь конвертирует в материалы третьей кваки если ему надо.


Отправлено Дядя Миша 26-03-2024 в 07:29:

Цитата:
Crystallize писал:
И порталы тоже?

Зеркал, порталов пока нет, но в перспективе да и это тоже заработает.
Но конечно порталу надо будет камеру указать.

Цитата:
FiEctro писал:
Ты же сам говоришь что система гибкая, так почему нельзя использовать какой то общий совместимый базовый шаблон?

Ну вот и интерпретируйте имя материала как путь к текстуре. Это единственное что можно гарантировать в стороннем редакторе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 26-03-2024 в 09:01:

Ну понятно, опять всё вручную прописывать в блокнотике


Отправлено Raid 26-03-2024 в 10:40:

Цитата:
FiEctro писал:
Ну понятно, опять всё вручную прописывать в блокнотике

Не всё. Если ты программист - можно добавить суффиксы к именам текстур, как это сейчас в MIR - _bump, _spec, _luma, которые цепляются автоматически. Я, правда, не программист, но у меня есть. Имя материала в блендере - это ссылка, так же как и имя материала для меша после экспорта. По этому адресу цепляются битмапы. Дефолтный материал есть - то есть можно не создавать отдельный файл в блокноте, если ты, конечно, не хочешь, например, добавить прозрачность по альфе. Продолжая логику суффиксов, можно вообще все материалы выстроить по такому принципу - _metal, _wood, _glass итд. Обозвал, закинул - и какой надо сразу.

__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша

лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro


Отправлено FiEctro 26-03-2024 в 11:26:

Ну вот я и думаю сериализовать содержимое исходника в формат похожий на абстрактный ксашевский материал. А вот обратно похоже только дифузку получится подцеплять из имени материала, хотя там тоже могут быть подвохи. Короче такая система крайне не юзерфрендли, но зато материалы из ку3 работают, правда я не знаю кому они нужны вообще.


Цитата:
Raid писал:
Продолжая логику суффиксов, можно вообще все материалы выстроить по такому принципу - _metal, _wood, _glass итд. Обозвал, закинул - и какой надо сразу.


И получить DLL_hell только для суфиксов.


Отправлено Дядя Миша 26-03-2024 в 11:59:

Цитата:
FiEctro писал:
Короче такая система крайне не юзерфрендли, но зато материалы из ку3 работают, правда я не знаю кому они нужны вообще.

Ты можешь придумать для себя абсолютно любую систему материалов.
И Ксаш её подхватит. Устроит такой вариант?

Но с ограничением, что описание каждого материала - это именованный блок фигурных скобок

C++ Source Code:
"materialname"
{
}

А внутри этих скобок выдумывай любые ключевые слова и любые параметры.
И точи под них плагин или редактор.

Добавлено 26-03-2024 в 14:58:

Есть ещё вариант запись материала в одну строку, но он детально не тестировался.

Добавлено 26-03-2024 в 14:59:

Цитата:
FiEctro писал:
И получить DLL_hell только для суфиксов.

Ну точно покусал кои-кто. А может весна. Я не знаю.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Raid 26-03-2024 в 13:21:

Цитата:
FiEctro писал:
И получить DLL_hell только для суфиксов.

Это не имеет отношения к dll, т.к. из компиляторов только компиляторы уровней. Все суффиксы описываются либо макросами, которые ты потом дёргаешь в материал, либо прямо шейдерами, если жить скучно.

__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша

лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro


Отправлено FiEctro 27-03-2024 в 07:01:

Цитата:
Raid писал:
все материалы выстроить по такому принципу - _metal, _wood, _glass итд. Обозвал, закинул - и какой надо сразу.


Речь не про длл, а то что вы всячески стараетесь прибить параметры гвоздями. В итоге придётся пользователем делать свои дублирующие теги в духе _wall34868 которые ещё не факт что не будут конфликтовать.
Как говорил Дядя Миша материал описывает просто настройки для униформов шейдера.

Цитата:
Дядя Миша писал:
Есть ещё вариант запись материала в одну строку, но он детально не тестировался.


Да чего уж, сразу азбукой морзе надо, и обязательно в обратном порядке как у арабов, чтобы наверняка никто не догадался.

Цитата:
Дядя Миша писал:
Ты можешь придумать для себя абсолютно любую систему материалов.
И Ксаш её подхватит. Устроит такой вариант?

Но с ограничением, что описание каждого материала - это именованный блок фигурных скобок


С экспортом ещё более менее понятно. А вот как импортировать из чужих шейдеров?


Отправлено Crystallize 27-03-2024 в 07:50:

Цитата:
Дядя Миша писал:
Я вам выложу имплементацию для Quake3 в очередной бета-версии. Помнится я однажды уже выкладывал, но тогда никто не понял что это такое. Да и сейчас я вижу доходит с величайшим трудом.

Просто всем глубоко наплевать на Quake 3


Отправлено Дядя Миша 27-03-2024 в 07:57:

Цитата:
FiEctro писал:
Речь не про длл, а то что вы всячески стараетесь прибить параметры гвоздями.

Ему объясняешь, что ничего никуда не прибито, он говорит - я понял, всё прибито гвоздями.

Цитата:
FiEctro писал:
В итоге придётся пользователем делать свои дублирующие теги в духе _wall34868

Зачем?

Цитата:
FiEctro писал:
Как говорил Дядя Миша материал описывает просто настройки для униформов шейдера.

Материал много чего описывает.

Цитата:
FiEctro писал:
А вот как импортировать из чужих шейдеров?

Приведи пример, что ты собрался импортировать.

Добавлено 27-03-2024 в 10:57:

Ну хотя я понял откуда такое недоверие. Это ты по Unity судишь.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 27-03-2024 в 08:53:

Цитата:
Дядя Миша писал:
Приведи пример, что ты собрался импортировать.


Ну вот есть условно у тебя моделька карты из сталкера в формате csm. Мне надо подгрузить или хотя бы сериализовать в одном месте все пути к текстурам, дифузки, карты нормалей и так далее.


Цитата:
Дядя Миша писал:
Ну хотя я понял откуда такое недоверие. Это ты по Unity судишь.


Скорее по голдсорцу. Оттуда пошли эти дуратские теги и нарративы что имя текстуры == имени материала.

Цитата:
Дядя Миша писал:
Ему объясняешь, что ничего никуда не прибито, он говорит - я понял, всё прибито гвоздями.


_metal, _wood, _glass
А это что такое?

Цитата:
Дядя Миша писал:
Материал много чего описывает.


Это не правильно. Материал не должен перекладывать на себя функционал шейдера как это делает третья квака. Это должна быть просто структура без какой либо логики.


Отправлено Raid 27-03-2024 в 09:00:

Цитата:
FiEctro писал:_metal, _wood, _glass
А это что такое? [/B]

Это пример, умозрительная конструкция. Моя личная.

__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша

лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro


Отправлено Дядя Миша 27-03-2024 в 09:10:

Цитата:
FiEctro писал:
Мне надо подгрузить или хотя бы сериализовать в одном месте все пути к текстурам, дифузки, карты нормалей и так далее.

Пока нет своего редактора я не могу что-то комментировать.
Сейчас декомпиляторы настроены так, чтобы сохранить оригинальные пути к текстурам. Точнее даже не декомпиляторы, а материалы.

Цитата:
FiEctro писал:
Оттуда пошли эти дуратские теги и нарративы что имя текстуры == имени материала.

Ксашевская система материалов НЕ НАВЯЗЫВАЕТ такой подход. Она его просто позволяет реализовать на уровне пользователя, не модифицируя бинарные файлы, чисто из скриптов. Raid сказал что ему так будет удобнее - я ему это сделал. Собственно всё. Придумай любой другой подход и точно так же настрой в скриптах.

Цитата:
FiEctro писал:
Это не правильно. Материал не должен перекладывать на себя функционал шейдера как это делает третья квака. Это должна быть просто структура без какой либо логики.

Сказал человек в жизни не написавший ни одного движка и даже не утрудивший себя чтением документации по ксашу и самое страшное - даже не читающий что именно я ему пишу. Я ему толкую про абстрактные материалы, которые не перекладывают на себя функционал шейдера, он говорит - нет это неправильно, они не должны на себя перекладывать функционал шейдера. И вот так - уже третью страницу.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 13:41. Страницы (8): « Первая ... « 3 4 5 6 [7] 8 »
Показать все 114 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024