13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Были бы тени, немного "мыльца" и нормальное небо, я бы не узнал в нем war3
Так? :)
Сглаживание плохо работает с хроматическими аберрациями, вот скриншоты без них:
А вот туман:
Могли бы вы сделать отдельную версию с минимальным набором функционала на основе РБ и инжекта в саму карту, чтобы все работало без дополнительных ресурсов?
Можно сделать, но только без графических фишек, в том числе без отрисовки нового интерфейса, так как хук на direct3d нужно ставить при инициализации игры, а с помощью РБ библиотеку можно подгрузить только при инициализации карты. Я уже выкладывал карту на РБ, которая внедряла мою библиотеку с widescreen fix'ом:
раскрыть
awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Vitalik8, в данный момент работаю только над экспериментальной версией, добавляю пост-эффекты, дорабатываю шейдер освещения. Последняя неделя выдалась крайне продуктивной:
  • сегодня реализовал туман (линейный и два вида экспоненциального (в варкрафте они не работали корректно), завтра собираю добавить ещё один способ расчёта тумана, основного на высоте) и Туман Войны (позже ещё доработаю);
  • вчера реализовал сглаживание (SMAA) и Film Grain;
  • в начале недели добавил поддержку точечных источников света, теперь и они используют попиксельное освещение;
  • ранее улучшил качество теней, реализовал HDR Rendering, улучшил качество SSAO, добавил Lens Flares, LUT Color Correction и поддержку sRGB.
Нужно ещё много всего реализовать и улучшить то, что уже есть. Самое главное - оптимизировать способ отлова информации о моделях, которую я использую для рендеринга теней, так как именно этот этап самый прожорливый во всём pipeline'е.
Скоро выложу экспериментальную версию, мне понадобятся добровольцы с ПК различной мощности для тестирования мода на производительность.
А основную версию, думаю, не выложу пока не исправлю вылеты при запуске карт, которые используют функции отрисовки текста из RenderEdge. К этому времени, может быть, перенесу GUI систему на шейдеры.
13

» WarCraft 3 / Запуск двух редакторов

Можно сделать приложение, которое сможет запускать неограниченное количество worldedit.exe, но так ли это необходимо?
13

» WarCraft 3 / Ошибка при конвертации

Чем конвертируешь? Вот NeoDex, с ним не должно быть проблем при экспорте в mdx.
13

» WarCraft 3 / Там 1.27b вышел

Что это?
That button simply pops up 2 error messages at the bottom of the screen about missing files.
Based on the button name VALIDATE_MAP_TRIGGERS, looks like its going to be some syntax checker? It's totally bugged now anyways!
13

» WarCraft 3 / Проблема с освещением

Изменить глобальное освещение с помощью данной функции:
call SetDayNightModels("...","...")
Хотя вряд ли поможет избавиться от артефактов.
13

» WarCraft 3 / Проблема с освещением

Это происходит из-за per-vertex освещения. От подобных визуальных артефактов очень сложно избавиться, но можно немного замаскировать их, подкорректировав модели освещения (например, немного уменьшить интенсивность diffuse освещения и увеличить ambient):
13

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

Скажи, не занимался ли ты еще текстурами и их разрешением? Я прост на лесенку смотрю, и плакать хочется :(
Нет, этим занимается команда Warcraft 3 Reborn, я только иногда помогаю им кодом.
alexprey:
Последний скрин заставляет плакать... свечение у меча пропало
Дело в том, что я пока не реализовал нормальный фильтр моделей на сцене, которые сохраняю для дальнейшего рендеринга в карту теней и для обычной отрисовки на сцену, используя свой шейдер. Свечение героев не должно перехватываться, я пока сделал фильтр на прозрачность, но это глупо, так как таким образом можно пропустить другие полупрозрачные модели. Но у меня пока вообще нет идей, как это сделать :(
Пока делаю так
if (currentRenderStage == STAGE_UNIT)
{
	DWORD fogenable, zwrite, destblend;
	m_pDevice->GetRenderState(D3DRS_FOGENABLE, &fogenable);
	m_pDevice->GetRenderState(D3DRS_ZWRITEENABLE, &zwrite);
	m_pDevice->GetRenderState(D3DRS_DESTBLEND, &destblend);

	if ((fogenable != 0 && zwrite != 0 && destblend != 2) && stride == 32 && type == 4 && FVF == 274 && ((DWORD)state == 256 || (DWORD)state == 17 || (DWORD)state == 16 || isComplexMesh(state, numVertices, primCount)))
	{
		if (curUnits < maxUnits)
			meshesUnits[curUnits].GetMesh(m_pDevice, g_pStreamData9, g_pIndexData9, currentTexture, type, baseVertexIndex, minIndex, numVertices, startIndex, primCount);
		curUnits++;

		return D3D_OK;
	}
}
некоторые объекты двоятся
Объекты двоятся из-за того, что я пока добавил самую простую реализацию SSAO, но и с помощью неё уже можно добиться неплохих результатов (об этом чуть ниже).
да и в целом картинка стала блеклой и мыльной какой-то :(
Для достижения наилучшего результата нужно подстраивать значения переменных, используемых в пост-эффектах (тонирование, блюм и т.д.), отдельно для каждой сцены.

Screen Space Ambient Occlusion

На примере карты Melissa Tale About Taiga's Adventure.
Интерфейс скрыт для наглядности.
Без текстур:
С текстурами:
На скрине карта окружения не очень подходит для этой сцены, я использовал старую, так как лень было рендерить сцену в новую. Дальше хочу сделать автоматическую генерацию нескольких кубических карт, расставленных на некотором расстоянии друг от друга по всей карте, при запуске. Более того, уже сейчас можно динамически рисовать сцену в кубическую текстуру, и использовать её для динамических отражений.
13

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

Screen Space Ambient Occlusion

Для наилучшего результата нужно тщательно настраивать:
Также можно сделать обводку вокруг объектов (хотя SSAO не предназначен для этого):
А вот как выглядит сцена из карты Wanderer с графическими улучшениями:
13

» WarCraft 3 / Проверка направления взгляда.

Скалярное произведение векторов.
Простая работа с векторами, а функции для получения координат юнита и нападения взгляда, думаю, и так знаете.
13

» WarCraft 3 / mpq

Скачиваешь этот файл: xgm.guru/files/100/179980/comments/336580/War3Patch.txt
Далее открываешь архив War3Patch.mpq в редакторе mpq (например Ladik's MPQ Editor) и используешь файл в качестве listfile.
Модель будет лежать по этому пути: Units\Creeps\HeroTinker\HeroTinker.mdx
Загруженные файлы
13

» WarCraft 3 / Хак на память Warcraft3

awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
Загруженные файлы
13

» WarCraft 3 / Проблема с важной программой

У меня всё устанавливается. Переходишь по ссылке, нажимаешь на большую зелёную кнопку Free Download, устанавливаешь, регистрируешь продукт.
13

» WarCraft 3 / Хак на память Warcraft3

Вот, что ответили Karaul0v'у (работает над DLL для доты) в Авасте на счёт ReturnBug:
It took a while cause our Threat Lab studied the case in details.
Also, it would be almost impossible to create a static detection for this type of exploit as the script engine in the game allows direct memory access and the attacker/malware author could easily obfuscate/change the script to achieve the same result rendering the detection useless.
И ещё:
In the end, we decided that we will not scan Warcraft III maps due to lack of prevalence. After all, the game is already old (released about 2002) and only lives due to community of people. Moreover, the MPQ format itself is dying, Blizzard decided to move to CASC storage format for their games in 2014. So nowadays, Warcraft III is the only game that is being played.
13

» WarCraft 3 / Хак на память Warcraft3

Интересно было бы почитать как эта штука работает
Только в новой версии добавили возможность разблокировать память на запись. И на гитхабе есть описания к функциям.
13

» WarCraft 3 / Хак на память Warcraft3

darkowlom, передачу данных можно реализовать с помощью экспортируемых функций в dll.
__declspec(dllexport) unsigned int __stdcall SendValueToDll(int key, int value)
{
	// Сохраняем полученные значения
	return true;
}
И в карте:
function SendValueToDll takes integer key, integer value returns integer
    local integer hHandle = GetModuleProcAddress("MyDll.dll", "SendValueToDll")
    if hHandle != 0 then 
        return CallStdcallWith2Args(hHandle, key, value)
    endif 
    return 0
endfunction
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

xZUKMANx, да, она уже давно решена. Но я пока не знаю, стоит ли выкладывать текущую версию или нужно добавить ещё несколько возможностей (тени, пост-эффекты).

Пока реализовано следующее, осталось реализовать то, что помечено восклицательными знаками:
v0.1.1a
  ! 1.27a patch support;
  * Direct3D9 support;
  ! Windows XP support;
  ! HDR Rendering;
  ! Post Process Effects: ;
  * Блокировка функции CtrlGetFromPoint, если игра на паузе;
  * Показ GUI только после завершения загрузки карты;
  * Исправлена проблема, связанная с тем, что ширина и высота текстуры были перепутаны;
  * Исправлен слишком большой FoV камеры при использовании Windescreen Fix;
  * Fixed an issue where it was not possible to launch the application on the first try;
  ! Исправлены вылеты во время загрузки карты;
  * Updated FreeType to 2.7;
  * Launching more than one instance of war3.exe;
  * RenderEdge.dll optimization;
  * Fixed safety issues;
  * Updated project logo and app icon;
  * Improved debug log.
13

» WarCraft 3 / Проблемы с новым Retrun Bug

quq_CCCP, может создашь ресурс с переводом темы с хайва, чтобы не нужно было искать всю информацию на других сайтах?
13

» WarCraft 3 / Проблемы с новым Retrun Bug

У меня всё работает, просто прописываю эти нативки в коде самой карты, вот карта, здесь и урон изменяется.
Чтобы typecast работал в JNGP нужно создать аж 3 переменных!
Какие три? Я только две использую:
integer array l__A
integer A
Загруженные файлы
13

» WarCraft 3 / Проблемы с новым Retrun Bug

quq_CCCP, всё работает, я проверял. Просто вставь пример со сменой урона из карты BaHeK, в scope Test.
Steal nerves, нужно скачать последнюю версию pJass, а в редакторе отключить cJass.
13

» WarCraft 3 / Проблемы с новым Retrun Bug

Заработало, просто отредактировал typecast'ы и добавил ещё одну переменную для типкаста массива. Я и до этого пробовал переделать функции-типкасты, только забыл о массиве.
Скачать (vJass)
Загруженные файлы
13

» WarCraft 3 / Проблемы с новым Retrun Bug

BaHeK, работает. Попробовал пересохранить карту, добавив //# +nosemanticerror перед некоторыми функциями, в итоге карта не запускается, просто выкидывает в главное меню.
Может ты используешь другой pJass компилятор? Можешь скинуть свой? Хотя у меня всё хорошо работало с этим кодом: www.hiveworkshop.com/threads/accessing-memory-from-the-script-it...

Хотя не надо, уже нашёл. Тоже не работает.

Кажется, начинаю догадываться, в чём проблема. Буду завтра пробовать.
13

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

karaulov, да, некоторые баги ещё остались (те же чёрные полосы на ландшафте). Тени на камне отображаются, это очень хорошо видно, когда над ним пролетает феникс. "Кусок тряпки" - это портрет выделенного юнита, который просто рисуется не в том месте) Просто я пока не понял, как определить, что рендерится именно портрет.