Jump to content

Новые DX функции (1.1)


Recommended Posts

Недавно были добавлены новые клиентские функции для работы с DX прорисовкой. И я попытаюсь объяснить их функциональность на уровне понимания рядового скриптера. Функции dxDrawImage(Section) теперь умеют рисовать не только картинки из указанного файла, но и другие новые элементы, такие как текстуры, скрины экрана, шейдеры. А теперь все по порядку:

dxCreateTexture

  • создает текстуру (картинку) из указанного файла, чтобы потом её можно было юзать в
dxDrawImage(Section) вместо пути к файлу картинки. Типы поддерживаемых картинок такие же как ранее были для dxDrawImage(Section), т.е. PNG, JPG, DDS, ... Эту текстуру также можно юзать и для GUI.

dxCreateShader

  • создает шейдер, проще говоря эффект (см.
шейдеры). В параметрах нужно указать путь к .fx файлу. У шейдера можно менять параметры с помощью dxSetShaderValue. Для рядового скриптера сей факт означает, что теперь для разных картинок (текстур) можно создавать разные эффекты, например, эффект блюра, эффект движения каких-то частей текстуры, эффект маски, когда одна текстура является альфа каналом для другой текстуры.

dxCreateFont

  • создает собственный шрифт, чтобы его можно было юзать вместо названия стандартного шрифта в dxDraw, связанных с текстом. Стандартные шрифты остались, поэтому вместо элемента со шрифтом можно по прежнему юзать "default", "clear", "arial", ... (см.
dxDrawText). Очень полезная функция для тех, кто хочет юзать свои уникальные шрифты в DX прорисовке.

dxCreateScreenSource

  • фактически создает в памяти скрин чистого GTASA экрана без MTASA прорисовок поверх него - без чата, гуя и прочих DX прорисовок. Далее этот скрин можно юзать как текстуру (картинку) для DX прорисовки или в шейдере для создания какого-то эффекта. Чтобы обновить этот, созданный в памяти скрин, можно заюзать
dxUpdateScreenSource.

dxGetMaterialSize

  • вернет размеры текстуры созданной ранее с помощью
dxCreateScreenSource или dxCreateTexture. Просто два целых числа - ширина и высота.

dxCreateRenderTarget

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

dxSetRenderTarget

  • с помощью этой функции можно указывать, в какую текстуру в данный момент будут прорисовываться другие элементы. Если ничего не указать в параметрах, то прорисовка будет идти непосредственно на экран.

---

для наглядности был создан ресурс, который позволяет визуально ощутить самые скромные возможности нового функционала. СКАЧАТЬ ТЕСТОВЫЙ РЕСУРС ( dxTest.zip )

---

вопросы приветствуются

---

Если у кого-то есть рабочие примеры скриптов,

демонстрирующих возможности этих функций,

оставляйте их здесь (желательно сразу как

ресурс с нужными файлами

шрифтов/картинок/эффектов).

Link to comment

эх, читаете мысли, Kernell ='(. Неделю уже, эксперементируя с атмосферой раздумываю, как можно "скрасить" систему освещения. При некоторой комбинации градиента неба, погоды, времени суток и отсутсвующей к сожалению createLight с вощможностью указать радиус, форму, силу света, можно было бы сделать отличную Horror атмосферу со всякими фонариками и тд...

я кстати не совсем понимаю, что даёт createShader. Как им пользоваться? Неужто можно, скажем шейдер плитки наложить на поверхность оО? dxDrawImage ведь не предусматривает таких сложных деформаций, максимумм поворот. Или этим просто можно добиться других "концентраций" цветов чтоли, например наложить определённый шейдер поверх экрана чтобы сделать игру в зелёных, скажем, тонах?

Link to comment

ccw жжёт. Сегодня добавил еще несколько dx-функций. Хотелось бы и о них узнать поподробнее от тех, кто в данный момент имеет возможность потестировать их на 1.1 ... :)

Link to comment

Итак, в первый пост внесёно человеко-понятное описания функционала новых средств для DX прорисовки. Также добавлен ресурс, который позволяет просмотреть новые возможности в действии.

Link to comment

После нескольких тестов я задумался над обычным фактом сокрытия кода шейдеров от любителей явной халявы (: И такой способ есть, т.к. dxCreateShader кушает скомпилированные файлы не хуже чем исходники. Скомпилить .fx файл можно с помощью одной утилиты fxc.exe из DirectX SDK.

Link to comment
Надеюсь текстуры можно будет передавать через клиент-сервер-клиент (пробовал сейчас, не получается)

В принципе с учетом появления "File functions" для клиентов в версии 1.1, передавать можно все, что угодно. Прочитать графику на сервере, переслать строку на клиент (по частям, если все сразу не влезет), создать файл, записать и сохранить как png. А потом уже использовать. Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу?

Link to comment
Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу?

а ты проверь (:

Link to comment
а ты проверь (:

Не, не вру, работает.

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

P.S. Спасибо, MX_Master, что подробно расписал всю эту тему.

Link to comment
Надеюсь текстуры можно будет передавать через клиент-сервер-клиент (пробовал сейчас, не получается)

В принципе с учетом появления "File functions" для клиентов в версии 1.1, передавать можно все, что угодно. Прочитать графику на сервере, переслать строку на клиент (по частям, если все сразу не влезет), создать файл, записать и сохранить как png. А потом уже использовать. Поправьте, если вру, но ведь не обязательно графику (и не только) прописывать в meta.xml, чтобы иметь возможность работать с ней, достаточно пути к файлу?

Интересно, как ты прочитаешь текстуру от dxCreateScreenSource, тебе дается ведь только указатель на эту текстуру :(

Link to comment

Фактически эти скрины создаются в памяти пока ты на серве находишься. Если выйти, то память от них очиститься должна. Но пока в игре, их можно посмотреть нужный скрин в любой момент просто как в галерее, выбрав его из пиктограмм. Допустим это полезно, если как админ следишь за кем-то и делаешь скрины в память, потом выбираешь нужный и именно его фоткаешь на диск (F12 чтоле или др. прогой). Но это тривиально. Самое главное предназначение dxCreateCsreenSource это создание полноэкранных эффектов. Допустим, с помощью шейдера мона сделать экран черно-белым или придумать более красочные эффекты, например, раздвоение картинки, ели игрок пьян. Ну или в зомби моде сделать зомби вижн экран, где силуэты игроков будут видны сквозь стены. Все это, стессна, шейдерные эффекты и вычисление положения на экране.

Link to comment
  • 2 weeks later...

Опа, в дополнение к новым DX возможностям, ccw добавил новое событие - "onClientHUDRender", которое позволяет рисовать под HUD'ом самой игры. Это дает возможность создавать полноценные полноэкранные эффекты без участия в них HUD'a игры. Механизм прост - в этом событии фоткаем кадр всего экрана, юзаем его как текстуру в шейдере и рисуем этот шейдер.

Link to comment
"onClientHUDRender"

я джва года ждал такую фичу!

Есть вопрос: при использовании сложных шейдеров типа bloom, будет ли это сказываться на производительности?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...