В SA эти тени (HQ тени) включаются, если поставить в настройках высокое качество изображения.
Там эти тени создаются через ту же процедуру, что и LQ тени. Там как-то текстура формируется на основе положения костей педа.
Надо смотерть как именно это происходит.
load_special_actor 3 'NAMEACTOR'
load_requested_models
а потом после02E4: load_cutscene_data 'STRIPA'
0244: set_cutscene_pos 0@ 1@ 2@ // set cutscene center coordinates
прописать:02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
02E6: set_cutscene_anim $SHADOYEXP 'NAMEACTOR'
перед тем, как 02E7: start_cutscene
Важно лишь то, чтобы в загрузке и в активации анимации название "NAMEACTOR" совпадало. Т.е. если вы загружаете чувака(даже из траффика) "COP", то и активировать анимацию вы должны "COP", а для этого в файле анимации этой cutscene (у меня в примере "STRIPA") должна быть анимация "COP".$SHADOYEXP = Actor.Create(CivMale, #SPECIAL04, 0@, 1@, 2@)
- нельзя активировать cutscene аниму, т.е. на нем нельзя 02E6: set_cutscene_anim $SHADOYEXP 'BURGER'
- это можно делать только на созданном таким опкодом актером:02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
load_special_actor 3 'NAMEACTOR'
02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
load_special_actor 3 'BURGER'
а потом $SHADOYEXP = Actor.Create(CivMale, #SPECIAL03, 0@, 1@, 2@) // СОЗДАЕМ ОБЫЧНОГО ИГРОВОГО АКТЕРА С ОБЫЧНОЙ ТЕНЬЮ
02E5: $SHADOYEXP1 = create_cutscene_object #SPECIAL03 // А ЭТОТ ПАРЕНЬ ПОЛУЧИТ ДИНАМИЧЕСКУЮ ТЕНЬ
02E6: set_cutscene_anim $SHADOYEXP1 'BURGER' // ЭТО АКТИВИРУЕТСЯ ТОЛЬКО НА АКТЕРЕ, СОЗДАННОМ С ПОМОЩЬЮ ОПКОДА 02E5:, ИНАЧЕ - ВЫЛЕТ
(http://newrockstar.do.am/Images/LostCitydev/clp1331.jpg)02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
если номер спец-актера от 1 до 11023C: load_special_actor 1 'CSPLAY'
а тачки загружаются, как объект, т.е.02F3: load_object #CUTOBJ01 'HLRYCAR'
, хотя анимация им присваивается также, как и актерам, т.е.02E6: set_cutscene_anim $125 'CSPLAY'
02E6: set_cutscene_anim $214 'HLRYCAR'
02E6: set_cutscene_anim $125 'CSPLAY'
и почему это работает для актеров 1-11, но не работает - для 12-21
004A6510
RenderEffects
004A6190
Render2DStuff
0056CC40
CShadows::RenderStoredShadows
0056C690
CShadows::RenderStaticShadows
... тень задается в опкоде 02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
-> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool)
, поэтому я и хотел узнать, RwObject - это struct объекта или что, т.к. думал, как это реализовать через CLEO.Эти тени - примитивный шадоу-маппинг. Создается камера, позицинируется относительно педа, туда рендерится пед. Полученное изображение обрабатывается (вроде инвертируются цвета (так, чтобы образ педа стал белым, всё остальное - чёрное), блурится), далее рисуется почти так же, как стандартные проекции в игре (те, что под фонарями) - создается меш, который "стелят" по полигонам коллизии обьектов карты.DK, можешь поподробнее рассказать о методах создания теней в играх? Какие методы наименее ресурсозатратны, а какие наоборот?
Пример реализации таких теней есть в примерах RenderWare Graphics, R* совсем немножко его переделали.
Ну, MVL - это другая история. Там своя система рендера тени.По-моему, как раз и нет. Maxorator использовал стандартный метод создания тени, только немного его модифицировал.
Просто тут дошли до моментаКод: [Выделить]-> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool)
, поэтому я и хотел узнать, RwObject - это struct объекта или что, т.к. думал, как это реализовать через CLEO.
Но пока так и не вдуплил
Эти тени - примитивный шадоу-маппинг. Создается камера, позицинируется относительно педа, туда рендерится пед. Полученное изображение обрабатывается (вроде инвертируются цвета (так, чтобы образ педа стал белым, всё остальное - чёрное), блурится), далее рисуется почти так же, как стандартные проекции в игре (те, что под фонарями) - создается меш, который "стелят" по полигонам коллизии обьектов карты.DK, можешь поподробнее рассказать о методах создания теней в играх? Какие методы наименее ресурсозатратны, а какие наоборот?
Пример реализации таких теней есть в примерах RenderWare Graphics, R* совсем немножко его переделали.
включен флаг динамического освещения.Про нормали понял, а про флаг - нет. Если я правильно понял, и речь идет о флаге 32 в ide - то это не работает:(
уровень интенсивности ambient для машин и педовВ timecyc.dat параметр Amb_Obj отвечает за амбиент динамических объектов(педы, авто, динамические объекты из object.dat и объекты катсцен), а Dir - это как раз цвет "освещения". Т.е. ночью Dir можно сравнять с Amb_Obj, и объект не будет "освещаться" вообще, т.е. ночью Amb_Obj отвечает за тёмную сторону объекта, а Dir - за светлую.
это переключает условие на противоположноеТ.е. что-то другое при этом должно по-идее отключаться, что не есть гуд...
Еще конечно нужен будет потом спец по настройке timecyc.datТакой спец есть - Lego(подробный разбор каждого параметра timecyc) (http://newrockstar.do.am/Other_Files/help_weath_1.1_by_lego.rar)! Он там не разобрал лишь параметры Amb_bl(то же, что и Amb, но во время включения Blur), Amb_Obj_bl(то же, что и Amb_Obj, но во время включения Blur) и BlurRGB(цвет Blur).
DK, можешь еще откомпилировать проект, чтобы остальные могли попробовать? Можно даже добавить в твой графический мод ViceMips_byDK.asi. Я у себя проверял, отдельно не вытащу.Там вроде надо только поменять путь к выходной папке (у меня там относительный путь к Vice City/scripts) и запустить сборку, нет?
Т.е. прилайт теперь не нужен? Или все таки придется теперь заморачиваться и делать два дома для дня и ночи отдельно с разной освещенностью?Можно делать без прелайта, а можно сделать лишь ночной. В любом случае, дневной делать точно не надо, ибо днем лучше выглядит динамическое освещение.
.data:006917D8 20 9D 4C 00 dd offset _ZN7CObject13SetupLightingEv ; CObject::SetupLighting(void)
.data:006917DC 00 9D 4C 00 dd offset _ZN7CObject14RemoveLightingEb ; CObject::RemoveLighting(bool)
plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);
без plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);
лично у меня в этом случае освещение динамических объектов(из object.dat) не менялось, а теперь динамически освещается всё(что с нормалями).plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);
plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);
Если честно непонятно, в каких случаях срабатывает RemoveLighting и зачем он нужен.
Ребят, я это освещение сделал еще в прошлом году и для гта3 и для вайса.1) Не 2nfx, а 2dfx (типо 2д-эффект)
Не получилось только исправить такие косяки:
-объект освещается когда объект и камера игрока в радиусе 2nfx
-объект освещается полигонно, а не повекторно. То есть полностью. К примеру много-полигоная плоскость освещается полностью, а не в центре 2nfx на плоскости.
У меня предложение для глобальных модостроителей, пересохранить стандартную карту вайса, и посмотреть, каким он станет с таким освещением, видимо изначально нормали не включены, наверное должно получиться интересно.
load_special_actor 1 'dance' // Обязательно загрузить ВСЕ действующие лица катсцены(IFP), даже если в дальнейшем будут использованы не все.
// Имя модели должно совпадать с именем анимации в ifp
// Если загружать актера под числами 1-11, то тень у него будет, если - 12-21 её нет
// Тень будет, даже если взять для катсцены любого IG педа, т.е. совершенно не зависит от модели - главное - чтобы были кости.
load_requested_models
:RUNCUT_03
wait 0
if
023D: special_actor 1 loaded
jf @RUNCUT_03
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 1.0 2.0 -1.0
02E4: load_cutscene_data 'csdance' // Загружаем катсцену с именем "csdance"(имя ifp и dat файла).
// У катсцен с неоригинальными именами не будет звука, даже если добавить mp3 с соответствующим названием
// Нельзя просто так взять любую катсцену и переименовать в желаемую. Необходимо, чтобы в ifp файле внутри(HEX оффсет 14) было то же название, что и у самого ifp файла.
// Т.е., если ifp файл называется "OLOLO", а внутри написано название "TROLOLO" - игра вылетит.
// Короче - никаких проблем не будет, если ifp файл с нуля создан в IFP-ANPK-TOOL, либо - если не менять старое название катсцены.
0244: set_cutscene_pos 1@ 2@ 3@ // Центр катсцены
02E5: 0@ = create_cutscene_object #SPECIAL01 // Создание катсценового объекта. Тут же присваивается реалтаймовая тень, но ТОЛЬКО если у объекта есть кости.
04BC: (unknown) 'dance' // Бесконечное воспроизведение анимации в цикле(не обязательно)
02E6: set_cutscene_anim 0@ 'dance' // применение анимации на объекте
02E7: start_cutscene
wait 0 // Задержка, чтобы успела создасться камера катсцены
02A3: enable_widescreen 0
Camera.SetBehindPlayer
015A: restore_camera // возвращаем камеру, чтобы не наблюдать катсценовую
(https://i.gyazo.com/451344521f5b948efdecb0746f981883.png)Player.CanMove($PLAYER_CHAR) = True // что я только не пробовал - управление игроку не удается вернуть
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 // что я только не пробовал - управление игроку не удается вернуть
Ребят, я это освещение сделал еще в прошлом году и для гта3 и для вайса.1) Не 2nfx, а 2dfx (типо 2д-эффект)
Не получилось только исправить такие косяки:
-объект освещается когда объект и камера игрока в радиусе 2nfx
-объект освещается полигонно, а не повекторно. То есть полностью. К примеру много-полигоная плоскость освещается полностью, а не в центре 2nfx на плоскости.
2) Возможно, из-за того, что в игре есть лимиты на кол-во корон/проекций/источников
3) Я об этом говорил. Это повершинное освещение (альтернатива - попиксельное). Оно хорошо работает только на очень детализированной сетке.
Поэтому если хочется нормального освещения - о стандартном лучше вообще забыть.
Я позже напишу небольшой пример/тутор по подключению шейдеров в игре.
Сделать базовое освещение на шейдерах довольно просто. Есть сотни примеров на любой вкус. Сделать какое-то ограничение на кол-во источников.
Но если захочется чего-нибудь крутого, например такого (https://i.ytimg.com/vi/Hw-coxW3G5o/maxresdefault.jpg) (куча источников в сцене), то нужно будет много чего менять в коде движка и игры.
UPD Хотя, проблема с тем, что от источников освещается вся сторона обьекта - связана с тем, что точечные источники в гта - не совсем точечные.
Может позже с картинками покажу что и как, т.к. одними словами будет трудно обьяснить.
Проблема в том, что камерой не помотаешь и управление игроку не вернешь
0A8C: write_memory 0x40703E size 4 value 0x90909090 virtual_protect 0
0A8C: write_memory 0x407042 size 4 value 0x90909090 virtual_protect 0
0A8C: write_memory 0x407046 size 4 value 0x90909090 virtual_protect 0
0A8C: write_memory 0x40704A size 4 value 0x90909090 virtual_protect 0
Нопить нужно до вызова катсцены. Можно проверить всё на примере, что я скидывал парой сообщений назад (http://forum.gtabuilder.ru/index.php?topic=200.msg2201#msg2201). Нопить нужно лишь раз - при дальнейших запусках катсцен всё будет уже в порядке.0A8C: write_memory 0xA10B63 size 1 value 0 virtual_protect 1
Применять ПОСЛЕ запуска катсцены, МИНИМУМ через 0ms после оного. После каждого отключения катсцены(а вернее - при каждом новом запуске) значение нужно выставлять заного. 05DF: write_memory 6917580 size 4 value 1017118720 virtual_protect 1 // Понижает тени и свет ближе к земле
Но вот то, что катсценовая тень плюсует оффсет еще и для вертикальных поверхностей - я узнал лишь недавно...Попробуй такКруто! Именно тот адрес!
//0A8C: write_memory 0x698DCC size 4 value 0.01 virtual_protect 0 // InGame shadows and lights perfect offset...UPD:DON'T TOUCH THIS!!!
0A8C: write_memory 0x698DE4 size 4 value 0.01 virtual_protect 0 // CutScene shadows perfect offset
Смысла скринить нет, поскольку "просвет" едва виден лишь при особо извращенных ракурсах камеры на full-hd монике или если уж камера вовсе "разрезает" пространство в месте наложения тени.Отлично, пошло дело, даже не верится глазам. Тени успевают за педами? Я пока вижу только два недочета, отрыв от ног и резкость в сравнении с пальмами, а так выглядит вполне рабочим вариантом.
Версия для сборки с Plugin-SDK VC.Может кто скомпилить это? У меня пару дней назад хард полетел, и я еще не установил нужный софт, версия FrogByte почему-то не работает, а охота уже глянуть на тени у педов!
Не идеальный код, но очень короткий.
Shagg_E, второй вариант от FrogByte должен работатьУпс - не заметил: действительно работает! Конечно, есть косяки, но всё же - впечатляет!
Наверное, это случается и со стандартными катсценовскими тенями.Не замечал. Единственный минус катсценовых теней(помимо несовпадения с солнцем) - они пропадают(обрезаются) где-то в районе 2-3х метров над землей. Я имею в виду, если персонаж либо выше 2-3х метров, либо высоко "подпрыгнет" относительно поверхности, на которую ложится тень - та обрежется на том месте, где у персонажа уровень 2-3х метров. Про 2-3 метра(юнита) - инфа не точная(нечем было измерить), но очень близкая к реальности.
Позор, что он не может работать вместе с SkyGFX из-за функции d3d8to9, которая разбивает плагин тенейпри чем тут позор , тень может работать только на стоковом d3d8 , со skygfx'ом она не дружит т.к. там враппер , также и мвл не дружит со skygfx
Заметил странный глюк с shadows.asi, а именно вылет игры после того, как тебя арестовала полиция. Установлено много других модов, но стоит убрать shadows.asi - и все нормально, с ним стабильное зависание. Прошу проверить этот момент.FrogByte куда-то пропал, у меня пока навыков недостаточно чтобы этим заниматься, а другим видимо не до этого, так что... :(
Получилось довольно криво, но как-то работает, пока что понятия не имею, как это сделать нормально.
Заметил странный глюк с shadows.asi, а именно вылет игры после того, как тебя арестовала полиция. Установлено много других модов, но стоит убрать shadows.asi - и все нормально, с ним стабильное зависание. Прошу проверить этот момент.FrogByte куда-то пропал, у меня пока навыков недостаточно чтобы этим заниматься, а другим видимо не до этого, так что... :(
Ты у себя попробовал, проблема в плагине, а не в куче других модов у меня?Да, пробовал - как и у xanser, у меня стабильный вылет не только после ареста, но и после смерти. Проблема с удалением игрока, я думаю.
Возможно будет продолжение темы. Хотелось бы верить, что и для вайса запилят такой мод:Все-же на renderhook было-бы куда как более прогрессивно.
https://libertycity.ru/files/gta-3/173039-dinamicheskie-teni-dlja-peshekhodov-i.html (https://libertycity.ru/files/gta-3/173039-dinamicheskie-teni-dlja-peshekhodov-i.html)
Кому интересно, есть красивая сборка гта 3 с такими тенями:
https://www.youtube.com/watch?v=x_D31g_rSAE (https://www.youtube.com/watch?v=x_D31g_rSAE)