Войти
ПрограммированиеФорумГрафика

XNA: как добавить ресурсы в Content Pipeline из программы (2 стр)

Страницы: 1 2
#15
23:35, 8 янв. 2012

Demiurg-HG
"Во-первых, это тебе зачем то надо, собственно цель меня и интересует. "
Да щас прям, так я вам и рассказал, что я хочу сделать чтобы конец света был более красочным
Да пока данную технологию изучаю, и движок на ней решил продолжить делать. А там кагбэ рантайм и предпологается.

"- Звуки грузятся через метод FromStream
- Текстуры грузятся через метод FromStream "
Ф курсе.

"- Модели ты можешь создавать в рантайме, и у тебя всегда есть доступ к вершинным и индексным буферам. "
Ну то есть опять таки возврат к обычным "своим" загрузчикам, как в DirectX. А XNA'шный загрузчик fbx и x выкинуть нафиг...

"Проблема только с загрузкой эффектов." - ну кагбы тоже...

"Поставить Visual C# Express Edition + XNA SDK" - ищем метод с наименьшим "сопротивлением") Тоесть максимально простой и удобный метод загрузки.


#16
0:01, 9 янв. 2012

RABBITSV
> Ммм.. тут я не совсем понял, зачем студия и XNA Game Studio, если MSBUILD
> входит в .NET Framework (начиная с версии 2.0!)?
Сборки отвечающие за сборку контента не идут в xnaredist. Их там просто нет. Они необходимы чтобы msbuild взял вашу текстурку и сделал из неё xnb. Изучите как оно работает лучше.
RABBITSV
> Ну вот как не назвать XNA после этого полной херней и не забить на неё
> отвёрткой болт..
Надо всего лишь научиться использовать инструмент по назначению.

#17
21:48, 9 янв. 2012

zlos
"Сборки отвечающие за сборку контента не идут в xnaredist"
Нуу я кагбэ и сказал, что уже понял почему не скомпилится. Читаем до конца :)

"Надо всего лишь научиться использовать инструмент по назначению. "
Ну дык для движка он подходит? говорят что Да.
Но тока я чото себе плохо себе представляю такой вариант -

идет добавление уровней в игру... придуманы карты, сделаны модели, нарисованы текстуры - и тут начиниется самое интересное - днями и ночями сидять программеры, с красными глазами, и добавляют мышкой в Студию все имеющиеся в игре ресурсы.... сотни моделей... тысячи текстур.....
Или XNA преднозначен для тех простейших 2д игрушек которыми пестрит интернет?

Какой может быть движок без нормальной, автоматизированной загрузки ресурсов?

#18
3:24, 10 янв. 2012

RABBITSV
> идет добавление уровней в игру... придуманы карты, сделаны модели, нарисованы
> текстуры - и тут начиниется самое интересное - днями и ночями сидять
> программеры, с красными глазами, и добавляют мышкой в Студию все имеющиеся в
> игре ресурсы.... сотни моделей... тысячи текстур.....
> Или XNA преднозначен для тех простейших 2д игрушек которыми пестрит интернет?
Ололололололо.

> Какой может быть движок без нормальной, автоматизированной загрузки ресурсов?
ContentManager для чего?

Во-первых, добавить ресурс в Студию сможет даже артист.
Во-вторых, этот процесс можно автоматизировать.
В-третьих, Content Pipeline очень умная вещь. Так вот, если его грамотно приготовить,
то добавить надо будет лишь несколько ключевых объектов. Все остальное (сотни моделек и тысячи текстур) Content Pipeline подцепит сам.

Проблема многих двиго-пейсателей заключается в том, что они пишут (пытаются написать) убийцу Анреал- и Крайэнджина вместе взятых.
При этом пытаются делать это бездумно. А надо сделать игру. Просто сделать игру.
И для того, чтобы сделать игру XNA - крайне удобная вещь, и гораздо более удобная вещь, чем те же Огры и Ирхлайты, который обросли жиром, но до сих пор остаются на уровне детского сада.

Я потому и спрашиваю, какая у тебя конкретно задача.
Если твоя задача организовать арт пайплайн, то спрашивай - вместе придумаем простое и элегантное решение. Благо на XNA Это все пишется легко и ... хотя да, иногда надо мозгами пошевелить ;)

#19
9:25, 10 янв. 2012

RABBITSV
> Ну дык для движка он подходит?
Да.
RABBITSV
> идет добавление уровней в игру.
Кто или что мешает добавлять их в контент?

#20
18:21, 10 янв. 2012

Demiurg-HG
> Во-первых, добавить ресурс в Студию сможет даже артист.
Ну допустим артист сможет, а машина?
Я имею ввиду такую схему: В файле с уровнем кроме метаданных и данных самого уровня, содержатся имена текстур, моделей и т.д.
Загрузчик уровня считывает этот файл и загружает соответствующий контент.

Demiurg-HG
> В-третьих, Content Pipeline очень умная вещь. Так вот, если его грамотно
> приготовить,
> то добавить надо будет лишь несколько ключевых объектов. Все остальное (сотни
> моделек и тысячи текстур) Content Pipeline подцепит сам.

Ну вот, я и думаю, что где то всё таки собака зарыта) И не может быть, чтобы проект таких масштабов был разработан как некий "аля-GameMaker-для-пионэров"
Просветите :)

Demiurg-HG
> Проблема многих двиго-пейсателей заключается в том, что они пишут (пытаются
> написать) убийцу Анреал- и Крайэнджина вместе взятых.
> При этом пытаются делать это бездумно. А надо сделать игру. Просто сделать
> игру.
Я не школьнег))) сейчас просто не так много времени на это остается. Больше тратится на кое-что другое, намного более научное, дорогое и масштабное, патентование, публикации и тд.
А щас пока заодно решил и с этой технологией ознакомится, чтобы потом сделать что то серьезное. Ну и пока разбираюсь с основными функциями, которые туда обязально войдут - такие как инициализация, загрузка объектов, освещение, шейдеры и т.д.

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

#21
18:45, 10 янв. 2012

RABBITSV
> Ну допустим артист сможет, а машина?
Если что-то ну очень супер сложное, брутальное, автоматическое и супер интеллектуальное, то можно править файл *.contentproj - это обычный XML-файл

> Просветите :)
Просвещаяю.

Для каждого типа данных есть свой content importer, content processor, content writer и content reader. Они есть встроенные, можно написать свой с нуля, или занаследоваться от существующего.
Importer читает конкретный формат файлов (FBX, TGA, JPG и т.п.), формирует некоторое внутренне представление контента (TextureContent, ModelContent).
Оно поступает на Processor, который может подцеплять другие ассеты, считать лайт-мапы, оптимизировать геометрию и все что угодно, что захочешь.
Обработанные данные поступают на Writer, который сериализует их в *.xnb файл.
Здесь заканчивается работа Content Pipeline'а.

Уже в игре, Reader (когда пишешь content.Load<Type>("asset")) читает *.xnb файл и загружает соответствующий ассет.

В XNA 4.0, writer и reader можно даже не писать, если ни отсутствуют, то способ чтения контента определяется через рефлексию по классу, который описывает ипа ассета.

У каждого ассета есть т.н. внешние ссылки. Например, текстура, на которую ссылается модель. При процессинге, мы создаем ExternalRefernce, и его билдим методом BuildAndLoadAsset().
Более того, если несколько моделей указывают на один файл, то файл будет обработан один раз, если параметры процессоров не отличаются.
Если же параметры процессоров отличаются, то будут созданы два файла. Таким образом, будет обеспечена целостность контента.

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

#22
19:07, 10 янв. 2012

RABBITSV
> В файле с уровнем кроме метаданных и данных самого уровня, содержатся имена
> текстур, моделей и т.д.
Это файл подаётся на вход Content Pipeline где ваш собственный импортер/обработчик конвертирует его в формат со всем что надо. Сразу гарантируется целостность ресурсов и никакого парзинга ничего при загрузке.
Вам лучше внимательно изучить Content Pipeline прежде чем делать что либо брутальное и дублирующее.
Я всю дорогу думал про добавление контента игроками если что.

#23
19:17, 10 янв. 2012

Demiurg-HG
Изучим. Чуть чуть попозже разберусь с этим. Занят пока.

zlos
> Вам лучше внимательно изучить Content Pipeline прежде чем делать что либо
> брутальное и дублирующее.

Ну *.contentproj, по которому я пробежался взгядом, довольно удобная штука, которую можно править, чтобы потоково добавлять кучу контента.
Но я надеюсь, что всё же найдется способ добавить контент в игру, не компилируя при этом весь проект.

...Чуть позже...

#24
23:26, 10 янв. 2012

zlos
> Я всю дорогу думал про добавление контента игроками если что.
Можно игрока отдать Solution с Content Project'ом, и пустым игровым проектом, который на него просто ссылается.
А в readme.txt написать, что типа, Visual C# Express Edition качается там-то и там-то.

#25
23:29, 10 янв. 2012

RABBITSV
> Ну *.contentproj, по которому я пробежался взгядом, довольно удобная штука,
> которую можно править, чтобы потоково добавлять кучу контента.
> Но я надеюсь, что всё же найдется способ добавить контент в игру, не компилируя
> при этом весь проект.
Этот способ годится только если ты досконально разобрался с XNA, и понял, что там нет, того, что тебе надо.

Вместо того, чтобы править content project вручную, можно сделать какой-нибудь свой текстовый gameArtDesc.txt,
в котором будет все перечислено, для него написать соответствующий процессор, и пусть артисты правят его руками.

#26
0:42, 12 янв. 2012

Вернулсо.

Прочитал вот эту статейку:
netlib.narod.ru
Понял, что "тут вам не тут")  Что в XNA так не делается.

Цитата:
Как вы видели при создании первого XNA-проекта, очень легко перетащить текстуру внутрь вашего проекта в XNA Studio. Хотя очень хорошо иметь все содержимое игры в одном месте непосредственно рядом с кодом, следует помнить пару вещей. В большинстве проектов, которые я видел в своей жизни, не помещали текстуры, модели и шейдеры непосредственно в проект Visual Studio. Причина в том, что гораздо проще скопировать несколько файлов и затем позволить игре загружать их непосредственно. Кроме того, по умолчанию Visual Studio не копирует файлы содержимого в выходной каталог; вам необходимо изменить Build Action с None на Content и установить для параметра Copy to Output Directory значение Copy if newer. Это настоящее преткновение, и XNA делает это гораздо проще.

Вы можете спросить, зачем менять принятый ранее способ загрузки текстур. Если вы собираетесь запускать ваши игры только на платформе Windows, можно по прежнему загружать текстуры и шейдеры динамически, не импортируя их в ваш проект как файлы содержимого XNA. Это позволит менять текстуры и шейдеры во время работы игры (конвейер содержимого XNA такую возможность не поддерживает). Однако, для файлов моделей это не работает, поскольку единственным методом загрузки для них является использование класса ContentManager, который поддерживает загрузку только из скомпилированных файлов содержимого .xnb.

На Xbox 360 можно загружать только файлы содержимого; прямая загрузка текстур или шейдеров не поддерживается. Если вы используете прямую загрузку текстур или шейдеров, убедитесь, что исключили поддержку платформы Xbox 360; библиотеки для Xbox могут загружать данные только из файлов содержимого.

Со своим монастырем в чужой огород не лезут :))
В общем вывод такой: в XNA всё делается через высотехнологическую, но всётаки жопу ContentManager. Весь контент добавляется через ContentManager. Возможность динамической загрузки ресурсов (прим. за исключением текстур) не предусмотрена. Это, как я понял, одна из парадигм XNA. В том числе это связано с поддержкой Херовой-Коробки.

Ну а если уж сильно сильно нужно загрузить ресурсы в рантайме - то можно воспользоватся примером предложенным Inc.

Спасибо за поддержку) Зато в процессе много нового узнал :)

Прошло более 10 месяцев
#27
13:04, 11 ноя. 2012

Вообще то всё делается.
и .xnb можно генерить на лету и самому.
для этого есть два способа:

Первый(устаревший),
заключается в использование MSBuild
создаёте xml  и билдер создаёт по нему то что вам надо
вот ссылка на блог одного из разработчиков
http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time.aspx
в первой половине говорится за чем они так сделали
во второй говорится о методе кому всё же надо
сделать свой xnb.
правда минус этого метода воспользоваться им можно тока при полной установке всех пакетов.
(то есть если кому то отдать редактор то без установлено студии и xna  работать не будет)
так было с 2006 по 2011г

Второй(актуальный)
в 2011 году microsoft выложил полное описание формата .xnb
http://xbox.create.msdn.com/en-US/sample/xnb_format
внутри содержится документ с полным описанием формата  и пример ридера (с++)
который читает xnb и выводит информацию о нём в консоль
(так же об этом упоминает всё тот же разработчик
http://blogs.msdn.com/b/shawnhar/archive/2011/07/07/xnb-file-form… entation.aspx)

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

если вы не знакомы с импортерами, ридерами, процессорами и врайтерами в XNA
(позволяет создавать свои типы данных и вгружать их через content pipeline extension.)
вот хороший урок: http://rbwhitaker.wikidot.com/content-pipeline-extension-1

правда с названием проекта он намудрил (=
проще было оставить game1

надеюсь кому то Ето поможет

для поисковика
game XNA .xnb content pipeline extension

#28
13:29, 11 ноя. 2012

Добавлю про .xnb в Visual Studio С#
релизный .xnb он сжатый
дебаг версия .xnb без сжатия

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.