[RenderEdge] Экспериментальная версия

» опубликован

Актуальная версия v0.1.2a

Особенности

  • (+) Каскадные тени;
  • (+) Расчёт освещения в линейном пространстве;
  • (+) Physically Based Shading;
  • (+) ACES Tonemapping and Color Correction;
  • (+) Screen Space Reflections;
  • (+) Temporal Anti-Aliasing;
  • (+) Contact Shadows;
  • (-) Использование моделей из .obj, .3ds, .dae, .blend файлов;
  • (-) Модификация .mdx/.mdl формата моделей: добавление карт нормалей и .dds/.blp2 формата текстур;
  • (+) Поддержка пользовательских шейдеров для пост-эффектов и моделей;
  • (-) Модификация War3 Model Editor;
  • (-) Добавление новых возможностей в World Editor.
Баги:
  • Вылеты игры при переключении режима вертикальной синхронизации в главном меню в оконном режиме;
  • Некоторые пост-эффекты работают некорректно при ограниченном viewport.

Скриншоты

» Старая версия

Установка

Папку можно разместить в любом месте на диске.

Требования:

Редактирование стандартных шейдеров

Всего 4 шейдера, которые можно редактировать: Standard.fx, Shadows.fx, PostProcess.fx и Skybox.fx. Они должны быть скомпилированы с помощью FXC, находиться в папке Shaders и иметь расширение .cso.


В редакторе реестра можно включить опцию, позволяющую загружать файл настроек, шейдеры и текстуры из папки с 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

Изменения

Следите за разработкой RenderEdge на Trello.
v0.1.2a
  * Добавлена возможность выбора температуры направленного источника света;
  * Добавлена обработка стандартных теней юнитов на воде;
  * Добавлена возможность выбрать единицу измерения интенсивности точечных источников света;
  * Добавлена возможность использовать улучшенную матрицу проекции;
  * Добавлена возможность выбора Culling Mode для рендеринга теней;
  * Добавлена возможность загрузки текстур и шейдеров из папки с RenderEdge (AllowLocalFiles в реестре);
  * Добавлена возможность загрузки шейдеров из карты;
  * Добавлена опция, позволяющая исправить дрожание скайбокса при перемещении камеры;
  * Чтение настроек из RenderEdge.ini (поиск файла в карте, в папке с RenderEdge (при включенном AllowLocalFiles), в .mpq архивах);
  * Теперь опция Disable Unit Shadows отключает тени юнитов и на земле, и на воде;
  * Уменьшено потребление оперативной памяти при использовании каскадных теней;
  * Снято ограничение на количество объектов, способных одновременно откидывать тени;
  * Улучшено качество теней;
  * Улучшен интерфейс настроек;
  * Улучшен режим свободной камеры: камера от первого лица, нет зависимости от высоты ландшафта;
  * Отключены мягкие тени (можно включить, отредактировав шейдер ShadowCommon.fxh);
  * Тени не рендерятся если игра на паузе;
  * Отображение версии RenderEdge в главном меню игры в правом нижнем углу;
  * Оптимизация Debug Screen;
  * Исправлен баг: модель основания здания имела освещение юнитов вместо ландшафта, и откидывала тени;
  * Исправлена некорректная интенсивность точечных источников света;
  * Игра больше не вылетает при использовании теней;
  * Исправлено периодическое исчезание теней при перемещении и вращении камеры;
  * Тени ландшафта снова работают корректно.

v0.1.1a
  * Добавлены контактные тени (Screen Space Ray-Traced Shadows);
  * Добавлена поддержка погодных эффектов;
  * Добавлен туман для скайбокса;
  * Улучшен Color Grading: добавлена отдельная настройка Shadows, Midtones и Highlights;
  * Добавлена возможность вручную задать гамму монитора: Output Device -  Explicit gamma mapping (LDR);
  * Добавлена возможность выбрать размер текстуры теней;
  * Добавлены расширенные настройки Ambient Occlusion;
  * Добавлена возможность скрыть интерфейс, отключить туман войны и тени юнитов в режиме Default Renderer;
  * Улучшен режим Debug Screen: отображение на весь экран;
  * Оптимизация Auto Exposure;
  * Оптимизация Rendering Pipeline;
  * Добавлены описания exe и dll файлов;
  * Исправлен баг: модели зданий при выборе места строительства не обрабатываются;
  * Исправлена некорректная работа Auto Exposure при ограниченном viewport;
  * Исправлена некорректная работа SSR при включенном Temporal AA;
  * Исправлена некорректная работа пост-эффектов при нестандартных настройках плоскостей отсечения камеры;
  * Исправлено влияние режима свободной камеры на отображение портрета;
  * Исправлено некорректное размытие SSAO при включённом downsampling;
  * Исправлены баги в JassAPI (конвертация real <=> float);
  * Исправлен сдвиг камеры при включении режима свободной камеры;
  * Исправлено влияние высоты ландшафта на высоту свободной камеры.

v0.1.0a
  * Добавлена поддержка анимированных текстур;
  * Добавлена поддержка полупрозрачных моделей;
  * Добавлена поддержка Unshaded материалов;
  * Добавлена поддержка Vertex Color;
  * Добавлена поддержка освещения скайбокса;
  * Добавлена поддержка текстур, размер которых не кратнен степени 2;
  * Улучшена функция скрытия интерфейса;
  * Улучшен Sky Light: добавлен параметр Blend Factor;
  * Улучшен Debug Point Light: добавлена возможность вручную задать координаты;
  * Улучшен Image Based Lighting;
  * Использование пиксельных отражений;
  * Добавлен параметр Culling Mode для теней;
  * Добавлена возможность выбрать формат и цветовое пространство монитора;
  * Добавлен Temporal Anti-Aliasing;
  * Добавлен эффект Screen Space Reflections;
  * Добавлен эффект Auto Exposure (UE4);
  * Улучшен Chromatic Aberration;
  * Обновлён SSAO: заменён на Scalable Ambient Obscurance;
  * Улучшен Bloom (увеличен максимальный радиус, добавлена возможность растянуть по   * горизонтали или вертикали);
  * Сохранение пропорций Lens Dirt текстуры при любом соотношении сторон экрана;
  * Сглаживание теперь применяется до остальных пост-эффектов;
  * Оптимизация Color Grading (запекание в LUT текстуру);
  * Отображение пост-эффектов только в пределах viewport;
  * Убрана возможность использовать Irradiance текстуру в качестве источника ambient освещения;
  * Убрана возможность включить улучшенную воду;
  * Загрузка и создание текстур и эффектов только по мере необходимости;
  * Обновлен конвертер d3d8 в d3d9;
  * Исправлен баг, при котором для юнитов и ландшафта использовался один и тот же направленный источник освещения;
  * Исправлены вылеты при рубке деревьев с включенными тенями;
  * Исправлены вылеты при сворачивании игры с включенными тенями;
  * Исправлены вылеты при включении режима свободной камеры;
  * Исправлены вылеты при установке маленького радиуса в эффекте Bloom;
  * Исправлено сворачивание запущенной в полноэкранном режиме игры при переключении режима вертикальной синхронизации;
  * Исправлено растягивание экрана при включенном интерфейсе и тенях;
  * Исправлена утечка памяти при включенном интерфейсе и пост эффектах;
  * Исправлено некорректное отображение SSAO при включённом режиме свободной камеры;
  * Исправлена функция проекции SSAO и SSR текстур на экран;
  * Исправлена некорректная гамма коррекция скайбокса при включенной пост-обработке;
  * Исправлена некорректная работа Dithering;
  * Исправлен некорректный цвет стандартных точечных источников света;
  * Запрет на отключение интерфейса и включение режима свободной камеры в главном меню игры и во время загрузки карты;
  * Динамическая очистка неиспользуемой памяти, занимаемой тенями;
  * Исправлено некорректное значение параметров Height и Density при использовании тумана;
  * Исправлена загрузка текстур из .mpq архивов;
  * Исправлена некорректная яркость точечных источников света.

v0.0.2a
  * Новый пост-эффект Bloom;
  * Добавлены настройки Lens Dirt;
  * Добавлена возможность протестировать самосветящиеся материалы (см. вкладку Material);
  * Unshaded материалы выключены по умолчанию, их можно включить на вкладке Material;
  * Исправлены проблемы с конвертацией цвета стандартных источников света/тумана в линейное пространство;
  * Исправлена проблема, при которой нельзя было менять освещение в картах, где была вызваны функция SetDayNightModels("", "");
  * Добавлен счётчик памяти, используемой варкрафтом;
  * Debug Screens теперь работают.

v0.0.1a
  * Первая стабильная сборка.


Просмотров: 46 490



» Лучшие комментарии


alexprey #201 - 2 года назад 0
native void ShowCursor(bool isShow)
Я думаю, что это можно и в Input API поместить
native int GetScreenWidth()
native int GetScreenHeight()
А вот это уже к GUI больше относится
Еще такой вопрос: а в чем смысл передавать ID контрола? Почему бы его не возвращать? Просто так приходится его хэндлить постоянно... а хотя уже вижу как это можно удачно юзать с использованием vjass структур)
ENAleksey #202 - 2 года назад (отредактировано ) 0
  • Добавил поддержку .blp;
  • Избавился от функций создания текстур. Теперь за это отвечает улучшенный алгоритм, позволяющий предотвратить повторное создание одних и тех же текстур, заключённый в функциях GUISetTexture(int id, string filename) и GUISetColor(int id, int argb).
Осталось собрать проект с нуля, без графических улучшений и AntTweakBar, и с максимальной оптимизацией.
alexprey, от передачи id текстур я уже отказался, до релиза я ещё обязательно пересмотрю структуру GUI системы, и, возможно, откажусь от передачи id элемента, но, скорее всего - нет. Так как при таком подходе могут возникнуть некоторые проблемы, например, если пользователь забудет приравнять значение, возвращаемое функцией GUICreateInstance(...) к переменной, то в дальнейшем будет невозможно получить доступ к данному элементу GUI.
darkowlom #203 - 2 года назад 0
без графических улучшений
Это как?
ENAleksey #204 - 2 года назад 2
darkowlom, без улучшенного освещения и пост-эффектов, только GUI система.
darkowlom #205 - 2 года назад 0
ENAleksey, может стоит сделать билд с графическими улучшениями? Или это войдет в полноценную версию?
ENAleksey #206 - 2 года назад 2
Альфа версия будет содержать только отрисовку интерфейса, а полная - улучшение освещения и пост-эффекты.
darkowlom #207 - 2 года назад (отредактировано ) 0
Видимо прозевал) Эти изменения также останутся?
Использование физически точного шейдера;
Поддержка большинства форматов моделей, среди которых .obj, .3ds, .dae и .blend;
ENAleksey #208 - 2 года назад 2
Дело в том, что актуальный билд работает нестабильно: при разворачивании игры из свернутого состояния, игра наглухо зависает, помогает только завершение процесса из диспетчера задач.

darkowlom, нет, это было только в первой версии RenderEdge, её я тоже продолжу развивать, но позже.
Андреич #209 - 2 года назад 0
если бы ещё можно было редактировать страндартный интерфейс - было бы вообще сказачно...
Raised #210 - 2 года назад 0
Андреич, ну и как ты это себе представляешь? Вот поменяешь ты размер иконок спеллов, например. Чтоб перенастроить интерфейс - хочешь, не хочешь придётся работать с моделями и редактировать текстуры.
Bornikkeny #211 - 2 года назад 0
GF RaiseD, а это уже геморроем попахивает :)
Андреич #212 - 2 года назад 0
Чтоб перенастроить интерфейс - хочешь, не хочешь придётся работать с моделями и редактировать текстуры.
волков бояться - в лес не ходить...
да даже если кривенько, сама возможность этого стало бы оч. крутой фишкой...
хотя, это скорее всего, уже за пределами простой отрисовки новых элементов...
Raised #213 - 2 года назад (отредактировано ) 0
Андреич, да дело не в "боятся", скорее в том что что один, что другой - оба способа требуют примерно одинакового количества усилий.

Кроме того "редактировать стандартный интерфейс" предполагает - как минимум настройку/подгонку положения каждого блока. Имею ввиду что это требует того же инструментария и времени, что и отрисовка своего.
ENAleksey #214 - 2 года назад (отредактировано ) 7
Андреич, GF RaiseD, намного легче сделать интерфейс с нуля, и такая возможность уже есть. Например, можно полностью скрыть стандартный интерфейс и/или выключить его через EnableInterface(...) и рисовать новый, при этом назначая кнопкам действия, которые были назначены на стандартные. Таким способом можно запросто воссоздать стандартную область с предметами, а также с приказами и способностями, благо существуют jass функции, которые позволяют выполнять те же действия, что и кнопки стандартного GUI.
Raised #215 - 2 года назад (отредактировано ) 2
Интересно, мог ли бы ты добавить несколько функций для игровой камеры.
» Опишу подробней, на всякий случай:
Не хватает функций для контроля Z-координаты игровой камеры, нативки для вычисления Z-координаты ландшафта.
Возможно, вы знаете что камера движется по определённой плоскости, не совпадающей с плоскостью ландшафта. Опыты показывают что эта плоскость напоминает сглаженный ландшафт под ней. Сделано это для того чтоб камера не прыгала по каждому малейшему холмику.
Итого Z-координата камеры в произвольной точке - это её высота не над рельефом, а над некой плоскостью камеры. На ровных участках плоскость ландшафта и плоскость камеры совпадают, но когда камера находится у склона, эти плоскости расходятся (т.к. плоскость камеры - сглаженный меш плоскости ланда) и это вызывает множество неприятных багов когда камера "улетает" вверх, находясь у склона.
Искомая функция представляет собой нечто вроде этого:
native GetCameraPlaneZ takes real X, real, Y returns real //Это должно возвращать Z-координату проекции точки на плоскость камеры.
Есть аналогичная маска, по которой передвигаются летающие юниты.
Для "Плоскости юнитов" сойдёт нечто вроде этого:
native GetUnitPlaneZ takes real X, real, Y returns real //Это должно возвращать Z-координату проекции точки на плоскость юнитов.
Это бы развязало руки многим мододелам. Сейчас приходится использовать огромную систему просто чтобы пофиксить положение камеры.
darkowlom #216 - 2 года назад -1
GF RaiseD, только помни, работать будет только у тех у кого есть мод
alexprey #217 - 2 года назад 0
GF RaiseD, так вот оно в чем дело, а я то голову до сих пор ломал, какого так происходит)
Raised #218 - 2 года назад 0
Если этот мод доделать, он станет "must have", как JNGP. По крайней мере для тех, кто собирается делать что-либо годное.
Bornikkeny #219 - 2 года назад -2
GF RaiseD, извини, отвлекся и поставил дизлайк :(
А так, мод маст хэв! Если он будет более менее доделан, то я буду насильно заставлять знакомых качать мод.
Андреич #220 - 2 года назад 0
Например, можно полностью скрыть стандартный интерфейс и/или выключить его через EnableInterface(...) и рисовать новый, при этом назначая кнопкам действия, которые были назначены на стандартные. Таким способом можно запросто воссоздать стандартную область с предметами, а также с приказами и способностями, благо существуют jass функции, которые позволяют выполнять те же действия, что и кнопки стандартного GUI.
это замечательно, но я так понимаю, если отключить стандартный интерфейс, то самому восстанавливать мини-карту и рамку портрета юнитов бует немного геморно..)
ENAleksey #221 - 2 года назад (отредактировано ) 6
Андреич, да не совсем, я сейчас как раз пробую это сделать. Например, так добавляю новую кнопку, при нажатии на которую, происходит то же самое, что и при нажатии на стандартную кнопку атаки.
void fakeAttack()
{
    ForceKey("A");
}

void InitInterface()
{
    trigger trig = CreateTrigger();
    TriggerAddAction(trig, function fakeAttack);

    GUICreateInstance(0, 800, 400, 64, 64);
    GUISetTexture(0, "Textures\\Attack.blp");
    GUISetCallback(0, trig, MB_Left, Key_Release);
}
А миникарту и портрет юнитов можно оставить стандартными, но с возможностью их переместить, изменить размер, либо полностью скрыть.

Скрыть стандартный интерфейс можно средствами d3d, так как, если сделать это функциям варкрафта, то попадет возможность использовать ForceKey(...). Осталось реализовать возможность отключать передачу информации о нажатиях кнопок мыши в варкрафт.
Андреич #222 - 2 года назад 3
А миникарту и портрет юнитов можно оставить стандартными, но с возможностью их переместить, изменить размер, либо полностью скрыть.
это именно то, что я хотел услышать..)
ты - чудо..)
Melissa #223 - 2 года назад 3
ждём с нетерпением
ENAleksey #224 - 2 года назад 5
Альфа версия уже готова и вы можете её скачать! Все подробности здесь: www.hiveworkshop.com/threads/reverse-engineer-game-dll.268718/pa...
alexprey #225 - 2 года назад 3
ENAleksey, пости сюда
ENAleksey #226 - 2 года назад (отредактировано ) 4
alexprey #227 - 2 года назад 0
ENAleksey, тени?
ENAleksey #228 - 2 года назад (отредактировано ) 3
alexprey, да, Shadow Mapping.
На картинке в карту теней рендерятся три меша (у модели паладина две поверхности).
Пока каждый меш нужно вручную добавлять, но дальше буду автоматизировать и оптимизировать процесс.
прикреплены файлы
alexprey #229 - 2 года назад 0
ENAleksey, так получается на стандартных моделях не будет работать?
darkowlom #230 - 2 года назад 0
alexprey, будет, только придется их прописать
ENAleksey #231 - 2 года назад 3
alexprey, это и есть стандартные модели. В дальнейшем пользователю ничего не нужно будет делать, тени будут сгенерированны автоматически для каждого объекта.
mishanka122 #232 - 2 года назад 0
каеф
ждем-следим
ENAleksey #233 - 2 года назад 9

Shadow Mapping Test

Не обращайте внимание на FPS, он такой низкий только при записи, на самом деле он не отпускается ниже 60.
karaulov #234 - 2 года назад (отредактировано ) -1
А что означают минусы красные и зеленые плюсы?
Что сделано / что не сделано? (ну обычно минусом помечают что-то не реализованное а плюсом что-то готовое, если я правильно понимаю )))) )
Arctide #235 - 2 года назад 6
ENAleksey, просто хочется поблагодарить за проделанную, текущую и будущую работу, ибо это всё очень и очень круто.
Bornikkeny #236 - 2 года назад 0
Внесу свою лепту в общую посуду для похвал и благодарностей:
Всё проделано очень здорово! Хотелось бы узнать (это может показаться очень казуально для меня), будет ли совместимость по сети с RenderEdge? Просто хотелось бы "прокачать" свой вар3. Надоело смотреть на квадраты и прочие потрясающие геометрические фигуры.
darkowlom #237 - 2 года назад 9
Bornikkeny, совместимость по сети будет если в картах не используются нативки из RenderEdge. Если же интересует переработка стандартной графики, то Warcraft 3: Reborn будет использовать этот мод с некоторыми изменениями - мы сотрудничаем , однако только после выхода Armies of Azeroth
Кристофер #240 - 2 года назад 0
ENAleksey, мощно, однако, тени слишком темные. Это как-то регулируется?
ENAleksey #241 - 2 года назад (отредактировано ) 7
Кристофер, конечно регулируется.
Bornikkeny:
С glow фонарем что-то не то... :D
Просто не восстановил прозрачность перед рендерингом, потом исправлю.
так получается на стандартных моделях не будет работать?
Сейчас уже ничего самостоятельно прописывать не надо, просто расставляете любые декорации и юниты, даже с нестандартными моделями, на сцене и запускаете игру, все эти модели будут откидывать тени.
alexprey #242 - 2 года назад 0
ENAleksey, ага, уже увидел) Выглядит еще сыровато, но уже круто!) Сам ландшафт будет учитываться?
ENAleksey #243 - 2 года назад (отредактировано ) 9
alexprey, уже учитывается, он сам на себя тоже может откидывать тени.
Вот немного подправил перехват объектов и тени (теперь точно мягкие):
Но забыл восстановить стандартный цвет источника света, можно заметить по различию освещения скелета дракона
Подправил освещение, но всё-ещё не учитываются точечные источники света.
Но на данный момент существует одна очень серьёзная проблема, не позволяющая переносить тени в основную версию:
прикреплены файлы
karaulov #244 - 2 года назад (отредактировано ) 1
ENAleksey, хотелось бы проект увидеть на гитхабе, может кто-то помог бы в исправлении проблем и в улучшении.
Думаю возможно найдутся те кто заинтересованы в улучшении Warcraft III :)
ENAleksey #245 - 2 года назад (отредактировано ) 6
karaulov, выложу, как только выпущу версию 1.0, а для этого мне нужно реализовать все пункты, которые я указал для основой версии, кроме карт нормалей.
А по поводу вышеописанной проблемы мне уже объяснили, что я не так делал, завтра буду исправлять.

Готово!
ENAleksey #246 - 2 года назад (отредактировано ) 12

DEMO

tobyfat50's Asian Garden
Тени, конечно, не удалось показать во всей красе, позже постараюсь выложить ещё несколько скриншотов, а потом и версию для скачивания.

Здесь можно получше разглядеть тени

прикреплены файлы
mishanka122 #247 - 2 года назад 0
ENAleksey, каеф. А что за камень на гифках?
karaulov #248 - 2 года назад (отредактировано ) 1
На гифке видны графические баги ? Вроде бы небольшие есть или это мне показалось.
И да что за камень на нем не отображаются тени? :)
Кристофер #249 - 2 года назад 1
karaulov, отображаются. Я так понял, там снизу выемка. Когда паладином ближе пробегает, тень видна.
Когда приблизительно будет доступна версия с тенями?
karaulov #250 - 2 года назад (отредактировано ) 0
Но тень феникса не видна на камне этом , а паладин был виден но по моему не совсем так как должно быть)
И что это за кусок тряпки появился возле камня)