Данная тема предназначена для демонстрации и обсуждения работ, созданных с использованием графических улучшений экспериментальной версии RenderEdge.
45 11.4K
13
Решил выложить скриншоты своей старой карты в большем разрешении (3200 x 1800, 4k мой ноут не потянул):
А вот скриншоты из карты Западная провинция:
Версия v1.0.5a
Дополнительные функции для редактирования стандартного интерфейса Варкрафта
212 45.1K
7
что-то давненько не было обновлений :(
вот нашел адреса очков здоровья и маны (те что под портретом персонажа):
    function GetHealthPointsFrame takes nothing returns integer
        return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 144]
    endfunction
    
    function GetManaPointsFrame takes nothing returns integer
        return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 145]
    endfunction
и простой пример кода, меняющий показатели местами:
    local integer pHealthPointsFrame = GetHealthPointsFrame()
    local integer pManaPointsFrame = GetManaPointsFrame()
    local integer pManaPointsParent = GetFramePointParent(pManaPointsFrame, ANCHOR_TOPLEFT)
    local integer pHealthPointsParent = GetFramePointParent(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pHealthPointsX = GetFramePointX(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pHealthPointsY = GetFramePointY(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pManaPointsX = GetFramePointX(pManaPointsFrame, ANCHOR_TOPLEFT)
    local real pManaPointsY = GetFramePointY(pManaPointsFrame, ANCHOR_TOPLEFT)

    call SetFramePoint(pHealthPointsFrame, ANCHOR_TOPLEFT, pHealthPointsParent, ANCHOR_BOTTOMLEFT, pHealthPointsX, pManaPointsY)
    call SetFramePoint(pManaPointsFrame, ANCHOR_TOPLEFT, pManaPointsParent, ANCHOR_BOTTOMLEFT, pManaPointsX, pHealthPointsY)
результат
Загруженные файлы
Версия v0.1.3a
Больше не поддерживается, используйте основную версию.
Экспериментальная версия графической модификации RenderEdge для игры WarCraft III.
207 115.6K
13

Компиляция шейдеров

Из 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
Загруженные файлы
13
Doc, нет, Raised имел ввиду ограничение функции SetCameraField(CAMERA_FIELD_DISTANCE, ...), в ней минимальное значение - 100.0 (расстояние от цели до глаза камеры).

Еще вопрос. RE совместима с последними апдейтами игры?
Нет, только с версией 1.26a, поддержку новых патчей добавлять не буду.

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

Нет, всё-таки там ещё есть над чем поработать, поэтому фикс контактных теней придётся отложить до версии 0.1.3a
29
Не думаю что там внутренние проверки, скорее в матрице проекции zNear стоит 100
13
Сделать возможность свободно крутить-вертеть камеру как в других играх.
Я вряд ли это сделаю, так как кому-то это будет даже мешать. А вот создатели карт смогу сделать это самостоятельно с помощью новых нативных функций, которые уже присутствуют в основной версии и в версии Memory Hack.
Вот демонстрация такой камеры: www.youtube.com/watch?v=Ux_rlNzkcTI
Уменьшить минимальный view distance до 1 (убрать внутренние проверки внутри функции). Сейчас минимум - 100.
Я делал это в одном из предыдущих обновлений, но от этой идеи пришлось на время отказаться, так как были некоторые проблемы. Позже я попробую нормально реализовать это. У пользователей и так появится возможность избавиться от данного ограничения, после того, как я добавлю нативные функции, которые я упомянул в предыдущем комментарии, однако, при этом придётся писать систему управления камерой с нуля.
21

Есть предложение

  • Сделать возможность свободно крутить-вертеть камеру как в других играх.
  • Уменьшить минимальный view distance до 1 (убрать внутренние проверки внутри функции). Сейчас минимум - 100.

Еще вопрос. RE совместима с последними апдейтами игры?
13
Raised, нет, я перехватываю функцию, в которой строятся матрицы вида и проекции, и до её вызова редактирую параметры игровой камеры:
Пока делаю так:
uintptr_t address_InitViewProjectionMatrices = 0x4E6C80;
int __fastcall InitViewProjectionMatrices_proxy(uint32 pCamera, int unused, uint32 pRect, int a4)
{
	if (FreeCamera && FreeCamera->GetActive())
	{
		uint32 pGameUI = GetGameUI(0, 0);
		if (pGameUI)
		{
			uint32 pWorldFrame = *((uint32*)pGameUI + 239);
			uint32 pGameCamera = *((uint32*)pWorldFrame + 80);

			if (pCamera == pGameCamera)
			{
				*(float*)(pGameCamera + 60) = FreeCamera->GetEyePosition().x;
				*(float*)(pGameCamera + 64) = FreeCamera->GetEyePosition().y;
				*(float*)(pGameCamera + 68) = FreeCamera->GetEyePosition().z;

				*(float*)(pGameCamera + 100) = FreeCamera->GetTargetPosition().x;
				*(float*)(pGameCamera + 104) = FreeCamera->GetTargetPosition().y;
				*(float*)(pGameCamera + 108) = FreeCamera->GetTargetPosition().z;
			}
		}
	}

	return fast_call<int>(address_InitViewProjectionMatrices, pCamera, unused, pRect, a4);
}
С помощью нативный функций можно изменить только координаты цели камеры.
21
ENAleksey, ятп. камера пофикшена с помощью нативных функций?
13

Обновление v0.1.2a

Улучшения

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

Исправления

  • Исправлен баг: модель основания здания имела освещение юнитов вместо ландшафта, и откидывала тени;
  • Исправлена некорректная интенсивность точечных источников света;
  • Игра больше не вылетает при использовании теней;
  • Исправлено периодическое исчезание теней при перемещении и вращении камеры;
  • Тени ландшафта снова работают корректно.

Каскадные тени

Исправлено множество проблем с тенями: теперь они используют гораздо меньше оперативной памяти, следовательно игра больше не вылетает; сняты ограничение на 2048 объектов, способных одновременно откидывать тени; исправлен баг с периодическим исчезновением некоторых теней при движении камеры. FPS по идее тоже должен был увеличиться, однако, он всё-равно достаточно низкий.
На данном скриншоте в кадре одновременно находятся ~5500 объектов, без теней используется 170 MB, с тенями - 210 MB (в предыдущих версиях игра бы просто вылетела):

Чтение настроек из файла

Добавлена возможность чтения настроек из файла RenderEdge.ini, он находится в архиве RenderEdge_exp.mpq. Его можно также импортировать в свою карту.
Не пишите комментарии в одной строке с полями, где указываются логические переменные и пути к текстурам, так как информация о них не будет получаться корректно!

Использование пользовательских шейдеров и текстур

Теперь можно редактировать стандартные шейдеры, всего их 4: Standard.fx, Shadows.fx, PostProcess.fx и Skybox.fx. Для возможности загрузки модом, их нужно нужно скомпилировать с помощью FXC в формат .cso. Шейдеры должны находиться в папке Shaders.
В редакторе реестра можно включить опцию AllowLocalFiles, после этого файл настроек, шейдеры и текстуры будут искаться в папке с RenderEdge. Последовательность поиска ресурсов: загруженная карта, папка с RenderEdge, архив RenderEdge_exp.mpq.

Режим свободной камеры

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

Меню настроек

По умолчанию оно выключено и включается при нажатии клавиши F7. Включено меню изначально или нет, а также горячую клавишу, можно изменить в RenderEdge.ini:
[Engine]
bShowInterface = false

[Hotkeys]
ShowInterface = 0x76
Загруженные файлы