Данная тема предназначена для демонстрации и обсуждения работ, созданных с использованием графических улучшений экспериментальной версии RenderEdge.
45 11 303
13
Решил выложить скриншоты своей старой карты в большем разрешении (3200 x 1800, 4k мой ноут не потянул):
А вот скриншоты из карты Западная провинция:
Версия v1.0.5a
Дополнительные функции для редактирования стандартного интерфейса Варкрафта
212 45 062
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 494
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
Загруженные файлы