Актуальная версия v0.3.0
Особенности
- Система отрисовки пользовательского интерфейса:
- (+) Основная система;
- (+) Управление при помощи Jass функций;
- (+) Поддержка многострочного текста с форматированием;
- (+) Поддержка .ttf формата шрифтов;
- Постобработка:
- (+) HDR Rendering;
- (+) ACES Tonemapping and Color Grading;
- (+) Screen Space Reflections;
- (+) Temporal Anti-Aliasing;
- (+) Contact Shadows;
- (+) Поддержка пользовательских шейдеров;
- (-) Управление при помощи Jass функций;
- Улучшенное освещение:
- (+) Каскадные тени;
- (+) Расчёт освещения в линейном пространстве;
- (+) Physically Based Shading;
- (+) Поддержка пользовательских шейдеров;
- (+) Поддержка карт нормалей;
- (-) Управление при помощи Jass функций;
- Прочее:
- (+) Переход с Direct3D8 на Direct3D9;
- (+) Поддержка широкоформатных мониторов;
- (+) Уменьшение задержки между приказами в игре;
- (+) Запуск более одного экземпляра war3.exe одновременно;
- (+) Возможность включить/выключить вертикальную синхронизацию.
Скриншоты
Custom Natives
Дополнительные константы
// TriggerRegisterMouseEvent & TriggerRegisterKeyEvent
constant integer MB_Left = 0
constant integer MB_Middle = 1
constant integer MB_Right = 2
constant integer MB_X1 = 3
constant integer MB_X2 = 4
constant integer KEY_Any = -1
constant integer EVENT_Down = 0
constant integer EVENT_Up = 1
// CtrlSetAnchor & SetPortrait
constant integer ANCHOR_TOPLEFT = 0
constant integer ANCHOR_TOP = 1
constant integer ANCHOR_TOPRIGHT = 2
constant integer ANCHOR_LEFT = 3
constant integer ANCHOR_CENTER = 4
constant integer ANCHOR_RIGHT = 5
constant integer ANCHOR_BOTTOMLEFT = 6
constant integer ANCHOR_BOTTOM = 7
constant integer ANCHOR_BOTTOMRIGHT = 8
Mouse API
native int GetMouseX() // Возвращает положение курсора в экранных координатах
native int GetMouseY()
native int GetMouseXRelative()
native int GetMouseYRelative()
native float GetMouseTerrainX() // Возвращает проекцию позиции курсора на ландшафт
native float GetMouseTerrainY()
native float GetMouseTerrainZ()
native bool IsMouseOverUI() // Находится ли курсор над стандартным интерфейсом или нет?
native void BlockMouse(bool bBlock) // Блокирует входные сообщения от мыши (перемещение, нажатия), передаваемые в игру
native int GetWheelDelta() // Возвращает направление/скорость вращения колёсика мыши (положительное значение указывает на то, что колесо вращается вперед)
native void SetMousePos(int x, int y) // Устанавливает положение курсора
native void TriggerRegisterMouseWheelEvent(trigger trig) // Триггер срабатывает при прокрутки колёсика мыши
native void TriggerRegisterMouseMoveEvent(trigger trig) // Триггер срабатывает при перемещении курсора
native void TriggerRegisterMouseEvent(trigger trig, int iButton, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) кнопки iButton (поставьте iButton == -1, чтобы отлавливать все кнопки мыши)
Keyboard API
native int GetTriggerKey() // Возвращает последнюю нажатую клавишу
native bool IsKeyDown(int iKey) // Нажата ли клавиша?
native void TriggerRegisterKeyEvent(trigger trig, int iKey, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) клавиши iKey (поставьте iKey == -1, чтобы отлавливать любые клавиши)
Window API
native int GetWindowWidth() // Возвращает ширину экрана в полноэкранном режиме, либо ширину окна в оконном
native int GetWindowHeight()
native int GetWindowX() // Возвращает координаты окна
native int GetWindowY()
native void TriggerRegisterWindowResizeEvent(trigger trig) // Триггер срабатывает при изменении размера окна
GUI API
native void CtrlNew(int id, int offsetX, int offsetY, int width, int height) // Создаёт новый экземпляр элемента GUI (id >= 0)
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
native void CtrlSetColor(int id, int argb) // Красит элемент GUI в заданный цвет
native void CtrlSetAnchor(int id, int parentId, int anchor) // Выравнивание элемента. Установите parentId = -1, чтобы выравнивание шло относительно всего окна
native void CtrlSetTexture(int id, string filename) // Устанавливает текстуру элемента
native void CtrlSetSize(int id, int width, int height) // Устанавливает размер элемента. Функция не изменяет ширину или высоту, если установить соответствующий аргумент равным -1;
native void CtrlSetPosition(int id, int offsetX, int offsetY) // Устанавливает позицию элемента
native void CtrlShow(int id, bool isShow) // Показывает (true) / скрывает (false) элемент GUI
native void CtrlSetDepth(int id, float fDepth) // Определяет порядок поиска элементов GUI функцией CtrlGetFromMousePoint. Чем значение fDepth меньше, тем элемент расположен ближе к экрану (1.0 по умолчанию)
native void CtrlSetAngle(int id, float fAngle) // Устанавливает угол поворота элемента GUI (в радианах)
native int CtrlGetWidth(int id)
native int CtrlGetHeight(int id) // Используется, чтобы узнать высоту элемента GUI после применения функции CtrlSetText с аргументом "bWrap" == true
native int CtrlGetFromPoint(int x, int y) // Возвращает элемент, расположенный по заданным координатам (если такого нет, возвращает -1)
native bool CtrlIsText(int id) // Является ли элемент GUI текстом?
native void CtrlSetFont(int id, string fontName, int size) // Устанавливает шрифт для указанного элемента GUI (по умолчанию используется "Consolas" с размером 13)
native void GUILoadFont(string fileName) // Загружает шрифт по указанному пути в память
Misc API
native float GetFPS() // Возвращает количество кадров в секунду
native float GetDeltaTime() // Возвращает количество времени, затрачиваемое на отрисовку одного кадра (в секундах)
native int COLOR_ARGB(int a, int r, int g, int b) // Переводит цвет из ARGB формата в шестнадцатеричное значение
native void EnableVsync(bool bEnable) // Включает/выключает вертикальную синхронизацию
native void TriggerRegisterFrameUpdateEvent(trigger trig) // Триггер срабатывает каждый кадр
native bool IsGamePaused() // Находится ли игра на паузе?
native void SetBlackBorders(float upper, float bottom) // Изменяет расположение чёрных границ по оси y (значения находятся в промежутке от 0.0 до 0.6). Значения по умолчанию - upper = -0.02, bottom = 0.13.
native void SetPortrait(int anchor, int x, int y, int width, int height) // Устанавливает расположение и ширину портрета в пикселях. Выравнивание идёт относительно всего окна.
Lighting API
N/A
Post-processing API
N/A
Установка
Требования:
- WarCraft III patch 1.26a;
- Windows 7 и выше;
- Microsoft Visual C++ Redistributable for Visual Studio 2017.
Распакуйте архив и запустите RenderEdge.exe. При первом запуске появится окно с предложением выбрать расположение файла war3.exe.
Нажмите F7, чтобы показать меню настроек. Изменить настройки также можно в файле RenderEdge.ini.
Нажмите F7, чтобы показать меню настроек. Изменить настройки также можно в файле RenderEdge.ini.
В редакторе реестра можно включить опцию, позволяющую загружать файл настроек, шейдеры и текстуры из папки с RenderEdge: HKEY_CURRENT_USER\Software\RenderEdge\AllowLocalFiles. Последовательность поиска ресурсов: загруженная карта, папка с RenderEdge, архив RenderEdge_exp.mpq.
Для подключения RenderEdge к Jass New Gen Pack (exp. 2) отредактируйте файл wehack.lua следующим образом:
wehack.lua
-- # begin RenderEdge #
RenderEdgePath = grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "InstallPath")
haveRenderEdge = grim.exists(RenderEdgePath .. "\\RenderEdge.exe")
function toggleRenderEdgeDebug(checked)
if checked then
grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 1)
else
grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 0)
end
end
function toggleRenderEdgeAllowLocalFiles(checked)
if checked then
grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles", 1)
else
grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles", 0)
end
end
if haveRenderEdge then
RenderEdgeMenu = wehack.addmenu("RenderEdge")
RenderEdgeEnabled = TogMenuEntry:New(RenderEdgeMenu, "Run with RenderEdge", nil, true)
RenderEdgeDebug = TogMenuEntry:New(RenderEdgeMenu, "Debug Mode",
function(self) toggleRenderEdgeDebug(self.checked) end, false)
if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug") == 1 then
wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 1)
else
wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 0)
end
RenderEdgeAllowLocalFiles = TogMenuEntry:New(RenderEdgeMenu, "Allow Local Files",
function(self) toggleRenderEdgeAllowLocalFiles(self.checked) end, false)
if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "AllowLocalFiles") == 1 then
wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeAllowLocalFiles, 1)
else
wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeAllowLocalFiles, 0)
end
end
-- # end RenderEdge #
function testmap(cmdline)
if haveRenderEdge and RenderEdgeEnabled.checked then
local pos = string.find(cmdline, ".exe")
cmdline = string.sub(cmdline, 5 + pos)
cmdline = RenderEdgePath .. "RenderEdge.exe " .. cmdline
end
if wh_opengl.checked then
cmdline = cmdline .. " -opengl"
end
if wh_window.checked then
cmdline = cmdline .. " -window"
end
wehack.execprocess(cmdline)
end
Редактирование шейдеров
Если вы хотите отредактировать шейдеры, то скачайте архив, распакуйте шейдеры, скомпилируйте и поместите их в папку Shaders. Эту папку вы можете импортировать в карту, разместить в папке RenderEdge или в архиве RenderEdge_exp.mpq.
- Скачать шейдеры и fxc.exe;
- Актуальная версия шейдеров на GitHub.
Компиляция из Visual Studio
Добавьте шейдеры в проект, в его свойствах настройте HLSL Compiler следующим образом:
Компиляция с помощью fxc.exe
@echo off
fxc.exe /T fx_2_0 /Fo Standard.cso Shaders\Standard.fx /nologo
fxc.exe /T fx_2_0 /Fo Shadows.cso Shaders\Shadows.fx /nologo
fxc.exe /T fx_2_0 /Fo PostProcess.cso Shaders\PostProcess.fx /nologo
fxc.exe /T fx_2_0 /Fo Skybox.cso Shaders\Skybox.fx /nologo
pause
Примеры
[RenderEdge] Sample Map - идёт в комплекте с RenderEdge (папка Maps).
Карта написана на vJass и содержит демонстрацию использования всех функций RenderEdge. Карта обновляется каждый раз, при выпуске новой версии RenderEdge.
Особенности карты:
- Система пользовательского интерфейса (виджеты: Label, Button, Dragbox, Checkbox, Horizontal Slider);
- Редактирование стандартного интерфейса;
- Система управления камерой.
Список изменений
Следите за разработкой RenderEdge на Trello.
v0.3.0
* Слияние с экспериментальной версией;
* Добавлена поддержка Cine Filter;
* Улучшен Image Based Lighting: генерация BRDF LUT текстуры и использование EnvBRDF функции вместо приближения;
* Добавлен шейдер ландшафта;
* Загрузка .ini файла из папки с RenderEdge без флага AllowLocalFiles;
* Добавлена кнопка перезагрузки шейдеров;
* Обновлён эффект Bloom;
* Исправлен баг в лаунчере, из-за которого окно выбора пути к war3.exe не появлялось после переноса варкрафта в другую папку;
* Исправлено качество теней;
* Исправлена некорректная дальняя плоскость отсечения теней;
* Исправлено некорректное название и расширение файлов скриншотов;
* Исправлена отрисовка пост-эффектов при загрузке карты.
v0.2.7a
* Обновлён RenderStage Controller (улучшен перехват отрисовки стандартного интерфейса);
* Исправлены баги в JassAPI (некорректная конвертация real <=> float);
* Исправлены баги в функциях CtrlSetDepth и CtrlSetAngle;
* Исправлены слайдеры и чекбоксы в карте-примере;
* Добавлены описания .exe и .dll файлов.
v0.2.6a
* Убран лимит на размер 512p в .blp тексурах (спасибо Karaulov`у);
* Добавлена новая native функция CtrlSetZOrder (порядок отрисовки элементов интерфейса);
* Добавлена новая native функция EnableAnisoFiltering (возможность установить анизотропную фильтрацию текстур);
* Добавлена новая native функция HideInterface;
* Добавлены новые native функции: EditMinimap, EditCommandBarButton, EditHeroBarButton, EditItemBarButton, EditMinimapButton и EditUpperButtonBarButton;
* Изменено название функций SetPortrait и SetBlackBorders на EditPortrait и EditBlackBorders;
* Исправлено большое количество багов в RenderEdge_loader.dll и RenderEdge.exe;
* Исправлен некорректный перенос строки при использовании символа "|n" во wrapped тексте;
* Исправлено большое количество багов в GUI-системе (например, баг с функцией CtrlSetTexture при перезапуске карты);
* Оптимизирована GUI-система. Некоторые функции переписаны с нуля;
* Оптимизированы менеджеры шрифтов и текстур;
* Обновлены detours.lib и libjpeg.lib до последней версии;
* Улучшен и оптимизирован debug log.
v0.2.5a
* Добавлена новая native функция GUILoadFont;
* Добавлена новая native функция CtrlSetFont;
* Удалена функция GUISetFont;
* Исправлены вылеты при установке некоторых шрифтов (например, "Times New Roman");
* Исправлена высота однострочного текста;
v0.2.4a
* Добавлена новая native функция SetPortrait;
* Функция CtrlSetSize теперь не изменяет ширину или высоту, если вы установите соответствующий аргумент равным -1;
* Изменено имя функции CtrlSetAlignment на CtrlSetAnchor;
* Изменён способ исправления ширины полосок здоровья;
* Исправлено выравнивание динамических элементов по отношению к другим элементам пользовательского интерфейса;
* Исправлена высота wrapped текста;
* Исправлена высота wrapped текста при динамическом изменении ширины;
* Исправлены проблемы с безопасностью. Если жирный, курсивный или полужирный курсивный шрифт недоступен, используется обычный шрифт.
v0.2.3b
* Исправлено выравнивание относительно других элементов интерфейса.
v0.2.3a
* Добавлена новая native функция CtrlSetSize;
* добавлена новая native функция CtrlSetAlignment;
* Функции CtrlSetPosition и CtrlNew теперь принимают offsetX и offsetY вместо x и y;
* Удалена функция CtrlSetRect.
v0.2.2a
* Добавлена новая native функция IsGamePaused;
* Добавлена новая native функция SetBlackBorders;
* Обновлен Jass API, исправлены некоторые баги связанные с пользовательскими нативными функциями;
* Исправлены нативные функции, которые принимают аргументы тира boolean;
* Исправлено повторное добавление триггеров функциями TriggerRegister#Event после перезапуска карты;
* Функция EnableVsync теперь работает без необходимости сворачивать игру;
* Исправлена ошибка, при которой новые элементы GUI не имели зеленой текстуры по умолчанию;
* Улучшен debug log. Лог файл очищается, если размер превышает 100 КБ.
v0.2.1b
* Исправлены вылеты при вызове функций CtrlSetText, CtrlSetTexture и GUISetFont (проблема с конвертацией UTF-8 в ASCII);
* Удалено нестабильное нововведение из предыдущей версии: "Убрано стандартное ограничение минимальной дистанции камеры до цели";
* Обновлён FreeType до версии 2.8;
* Обновлён RenderEdge_loader.dll. Теперь он ищет RenderEdge_exp.dll, если не нашёл, то запускает RenderEdge.dll;
* Добавлен счётчик памяти, используемой варкрафтом;
* Оптимизация GUI системы;
* Оптимизация Widescreen fix;
* Оптимизация debug log. Система отладки переписана с нуля.
v0.2.1a
* Обновлён Widescreen Fix. Вертикальный угол обзора больше не зависит от ширины экрана;
* Снято ограничение на максимальный FPS, теперь он может подниматься выше 64 с выключенным vsync (спасибо Karaulov'у);
* Убрано стандартное ограничение минимальной дистанции камеры до цели (было 100.0, теперь можно установить до 0.01);
* Использование более точного формата буфера глубины, если поддерживается. Используйте SetCameraField(ConvertCameraField(7), value, time), чтобы изменить ближнюю плоскость отсечения камеры (100.0 по умолчанию);
* Добавлена новая native функция TriggerRegisterFrameUpdateEvent. Триггер срабатывает каждый кадр (задержка меньше 0.001 секунд);
* Добавлена новая native функция EnableVsync (включено по умолчанию);
* Добавлены новые native функции GetWindowX и GetWindowY;
* Добавлены новые native функции GetMouseXRelative и GetMouseYRelative;
* Функции GetMouseX и GetMouseY теперь возвращают координаты без отсечения границами окна;
* Изменено название функции FPS на GetFPS;
* Изменено название функции DeltaTime на GetDeltaTime;
* Функция GetDeltaTime теперь возвращает секунды вместо миллисекунд;
* Улучшен debug log. Лог файл очищается при превышении размера в 1 MB.
v0.2.0a
* Поддержка Direct3D9;
* Блокировка функции CtrlGetFromPoint, если игра на паузе;
* Показ GUI только после загрузки карты;
* Исправлен баг, связанный с тем, что ширина и высота текстур были перепутаны;
* Исправлен слишком большой угол обзора при использовании Widescreen Fix;
* Исправлена проблема, связанная с тем, что невозможно было запустить приложение с первой попытки;
* Обновлён FreeType до версии 2.7;
* Запуск более одного экземпляра war3.exe одновременно;
* Оптимизация RenderEdge.dll;
* Исправлены проблемы безопасности;
* Обновлено лого проекта, и добавлен значок приложения;
* Улучшен debug log;
v0.1.0a
* Реализована поддержка широкоформатных мониторов;
* Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
* Добавлена поддержка TTF шрифтов, используя FreeType (https://www.freetype.org/);
* Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
* Уменьшена задержка отдачи приказов юнитам в одиночной игре;
* Исправлена проблема, связанная с невозможностью запустить RenderEdge после переустановки Warcraft по другому пути;
* Изменено название функции CtrlCreateInstance на CtrlNew;
* Изменена функция CtrlSetText(int id, bool autoResize, string text) на CtrlSetText(int id, string text, bool bWrap);
* Изменена функция CtrlGetFromMousePoint() на CtrlGetFromPoint(int x, int y);
* Добавлена новая native функция GUISetFont;
* Добавлена новая native функция CtrlIsText;
* Функция IsMouseOverUI теперь работает корректно;
* Удалена функция CtrlSetSolidColor, вместо этого используйте белую текстуру ("Textures\\white.blp") и функцию CtrlSetColor(int argb);
* Добавлен логотип проекта;
* Уменьшен размер RenderEdge.mpq;
* Улучшен debug log.
v0.0.3a
* Реализовано чтение настроек из реестра;
* Добавлены функции CtrlGetHeight и CtrlGetWidth для получения ширины элемента GUI после применения функции CtrlSetText с аргументом "autoResize" == true;
* Исправлено растягивание полосок здоровья на широкоформатных экранах;
* Отключена функция EnableDebug, теперь включение режима отладки осуществляется из редактора реестра;
* Улучшена совместимость с JNGP;
* Улучшен debug log.
v0.0.2b
* Исправлена проблема, при которой не получалось запустить мод с первого раза;
* Улучшен debug log.
v0.0.2a
* Исправлена ошибка с загрузкой RenderEdge.mpq, теперь мод можно без проблем размещать в любой папке;
* Исправлен баг в функции CtrlSetText, при котором все элементы GUI, использующие текстуру шрифта, имели одинаковый текст;
* Изменена функция CtrlSetText - убран аргумент "argb", отвечающий за цвет создаваемого текста, вместо этого используйте функцию CtrlSetColor (текст по умолчанию белый);
* Изменена функция CtrlSetDepth - тип аргумента "depth" изменён на real;
* Добавлена новая native функция CtrlSetAngle;
* Удалена функция CtrlSetCallback.
v0.0.1a
* Первая стабильная версия.
DemonoiD: Не знаю про микс патч, но тебе может это понравится
Ред. DemonoiD
Ну вот и опять же, твой скрин. Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3. А прикинь, как божественно все это бы смотрелось с видом сверху?
Ред. ENAleksey
Ред. DemonoiD
Скриншоты - это конечно хорошо, но я могу модельками так же сделать ;)
Поверх war3 для всех карт*
DemonoiD:
Ред. Tumart
Ред. ELB359