GTA Builder Форум

GTA Vice City => Идеи => Тема начата: Shagg_E от Апрель 18, 2014, 01:42:17 am

Название: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 18, 2014, 01:42:17 am
Создавал подобную тему на sannybuilder.com (http://sannybuilder.com/forums/viewtopic.php?id=1371) , но там тему по Вайсу мало кто просматривал. Здесь в основном ковыряют Вайс, поэтому мб это принесет плоды?

Возможно многие заметили, что в катсценах Vice City модели актеров имеют собственные динамические тени(хотя на скрине это не очень хорошо и видно):
(http://funkyimg.com/u2/791/509/clp1299.jpg)
Вопрос(очевиден  ;D): возможно ли каким-либо способом "заставить игру подумать", что игровой актер - "катсценовый"? Иначе говоря, возможно ли заменить стандартный рендер теней актеров(педов, если вам так нравится) на динамический? Или просто активировать такой рендер(даже без замены)?

Вот что ответил DK22Pac там же, на sannybuilder.com:
Цитировать
В SA эти тени (HQ тени) включаются, если поставить в настройках высокое качество изображения.
Там эти тени создаются через ту же процедуру, что и LQ тени. Там как-то текстура формируется на основе положения костей педа.
Надо смотерть как именно это происходит.


Но мне кажется, он слишком глубоко копнул. Я имел ввиду - мб в Вайсе у объектов есть какой-то флаг, отвечающий за определение игрой объекта, как объекта для катсцен или обычной игры? Как видно из скрина, это не связано с самой катсценой, т.к. игрок в кадре, и байкер вдали не имеют динамической тени(хотя байкер стоит далеко, и тень вообще не рендерится). Т.к. даже в катсцене продолжается разделение объектов на специальные с динамической тенью и обычные со статичной.

Да, я знаю про Maxo's Vehicle Loader, но и Maxo, как мне кажется - глубоко копнул с созданием собственной тени с блэкджеком и багами. А так можно было бы всё сделать средствами игры.

Сам я далеко не ленив в моддинге Вайса, но попросту не специализируюсь в анализе IDA db и т.д. Поэтому спрашиваю здесь - где есть люди, уже разбирающиеся в этом.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 18, 2014, 01:19:18 pm
Классные тени, раньше не замечал, хорошо бы правда их перетащить на педов. Даже для катсцен это довольно редкое явление. Прогнал через mission loader, но удалось разглядеть только в этих местах:

(http://s6.postimg.org/5sd52d0u9/scr000.jpg) (http://s6.postimg.org/kplm3de2p/scr001.jpg) (http://s6.postimg.org/55e8cu3y9/scr003.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: Eden от Апрель 18, 2014, 05:02:24 pm
Может ответ кроется в самой катсценовской анимации? Ибо, насколько мне не изменяет память, у белого Мерса седана, из начала игры, в одной из катсцен, вроде как - есть своя тень, хотя я могу ошибаться. Кстати, в оригинальном вайсе, свои "псевдодинамические" тени, имеют так-же фонарные и светофорные столбы, где тень аккуратненько передвигается за солнцем, но это гораздо более примитивный механизм.
Название: Re: Рендер тени в Vice City
Отправлено: Sektor от Апрель 18, 2014, 05:47:05 pm
В MVL, есть тени, я точно помню. Но это какой-то maxo- вроде как сделал, как то давно обращался к нему в ЛС, через один американский форум, вроде бы шла беседа, а потом в игнор меня пустил. Но это было еще в 2012 году.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 18, 2014, 06:09:07 pm
Для начала надо проверить, что тени действительно динамические, а не подрисованные, уж слишком мало их. Попробовать поменять модели в сценах, попробовать вставить обычных педов в сцены, если получится. Вроде я также встречал самодельные сцены, посмотреть там. Узнать, что влияет, скелет, анимация, или есть функция тени, которая активируется только в сцене. Нужна какая-то зацепка. Еще я видел сцены, где тень должна быть, но ее нет, возможно из-за поверхности, попробовать перенести сцену туда, где тень точно видно. Те кто умеет, попробуйте погонять сцены, хорошо бы камеру еще повернуть, посмотреть с другого угла, если она не привязана к сцене конечно.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 19, 2014, 12:58:46 am
Стриптизерша слишком далеко(дальность прорисовки тени у катсцен-актеров небольшая), а вот как скривило Томаса - мы видим и на тени:
(http://newrockstar.do.am/Images/LostCitydev/clp2232.jpg)

А теперь видно и стриптизершу:
(http://newrockstar.do.am/Images/LostCitydev/clp2234.jpg)

А вот скрины для сомневающихся: откройте их ссылки для сравнения: один (http://newrockstar.do.am/Images/LostCitydev/clp2236.jpg) и два (http://newrockstar.do.am/Images/LostCitydev/clp2237.jpg), и убедитесь, что моя супер пупер профессиональная КАСТОМНАЯ анимация отображается на тени(длинная рука очень слабо видна, т.к. кости друг от друга далеко(об этом - ниже), а вот как дрыгаются ляжки - можно отлично видеть на тени):
(http://newrockstar.do.am/Images/LostCitydev/clp2236.jpg)
(http://newrockstar.do.am/Images/LostCitydev/clp2237.jpg)

Это и несколько подобных опытов еще полгода-год назад дали такую инфу:
1) Дело либо в файле DFF(но епть, он же заблокирован!) катсцен-модели, либо во флаге катсцен-актера(спец флаг для модели)
2) тень рисуется по скелету, как и в СА, что еще раз говорит о первом варианте первого пункта. У авто в катсценах тоже есть "скелет", а именно - его дамми, имеющие специфические названия. Чем дальше кости друг от друга - тем слабее и "худее" тень. Оптимально - Стандартные размеры педов, а не такие:
(http://newrockstar.do.am/_fr/0/4014853.jpg)
(http://newrockstar.do.am/_fr/0/4665373.jpg)

3) Работает только на катсцен-моделях(см самый первый скрин в теме). Ни на кого больше не влияет
4) В катсценах камера блокируется намертво: единственное, что удавалось сделать - это убрать widescreen и вернуть камеру игроку(но вертеть нельзя). Единственный выход - писать скрипт камеры.
ИИИИИИ пункт 5) Повторю - анима отрисовывается по скелету. Еще на форумсах это пытались разобрать, и заметили, что у низких катсцен-персов - низкая тень, у высоких - высокая(заменяли верзилу BJ Smith из заставки Sunshine Autos на бабку из такси)

Название: Re: Рендер тени в Vice City
Отправлено: Eden от Апрель 19, 2014, 10:47:24 am
Ну значит надо вскрыть катсцен аниму, сверить ее с обычной, стандартной, скажем бега ГГ и если ничего особенного, что, насколько я понял, уже не требуется в проверке - искать способ открытия катсценовских педов :D Но по мне так странно, если разрабы решили прикрутить эти тени в катсценах, может имеет смысл то, что в режиме реального времени - в вайсе, с крутящейся камерой и прочим, эти тени работали неправильно?
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 19, 2014, 05:38:27 pm
...или сильно нагружали игру... Как будет время - попробую еще поэкспериментировать с катсценами

P.S. Перезалил скрины, т.к. они глючили
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 19, 2014, 08:46:38 pm
(http://newrockstar.do.am/Images/LostCitydev/clp1286.jpg)
(http://newrockstar.do.am/Images/LostCitydev/clp1287.jpg)

Видать, тени имеют лимит по высоте, но это не страшно - ведь обычно никто не использует модели персонажей больше стандартных - это я один такой дегенерат  ;D
Название: Re: Рендер тени в Vice City
Отправлено: Eden от Апрель 19, 2014, 08:50:22 pm
Не думаю, что у того-же Maxo работает другой принцип отрисовки теней, нежели в катсценах оригинала. Возможно, в своих библиотеках, он перенес катсценовские тени на всех педов, чисто манипулируя флагами. Все-таки, мне кажется, что теория про спец. названия костей у катсценовских педов не верна, ибо база определения педов и их костей в игре универсальная и на всех одна, вряд-ли разрабы стали-бы так заморачиваться и пилить отдельные определения, для небольшой доли педов с тенями. Скорее всего, тут дело именно в флагах.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 19, 2014, 09:07:51 pm
1)Нет, ты неправ насчет Maxo - он даже показывал, что отрисовывает тени своим способом(путем создания второй игровой камеры)
2)Да, ты прав насчет того, что дело не в модели:
Это обычная игровая модель без изменений(как у игрока):
(http://newrockstar.do.am/Images/LostCitydev/clp1295.jpg)


Итог: Очевидно - дело во флагах в памяти для модели
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 19, 2014, 11:48:55 pm
BREAKING NEWS:
Если лень читать - читай итог в конце.

Итак, тени не зависят ни от актера, ни от анимации, и вообще ни от чего, о чем в этой теме говорилось.

Я более сотни раз сейчас перезапускал игру, проверяя те или иные теории. Долго объяснять, так что вот лишь факты:
1) Cutscene анимацию можно активировать на любом стандартном педе, даже на игроке, важно лишь, чтобы загрузка была такая:

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".

2)На актере, созданном опкодом 009A
$SHADOYEXP = Actor.Create(CivMale, #SPECIAL04, 0@, 1@, 2@)- нельзя активировать cutscene аниму, т.е. на нем нельзя
02E6: set_cutscene_anim $SHADOYEXP 'BURGER' - это можно делать только на созданном таким опкодом актером:
02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03
"Но это просто разбор cutscene, при чем тут тени?" - спросите вы.
А при том, что: чтобы вы не творили с катсценой, тени у актеров будут всегда. Дело просто в одной маленькой детали:

Цитировать
load_special_actor 3 'NAMEACTOR'

02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03


Немного справки: в вайсе одновременно в одной катсцене может быть 21 cutscene объект(про тачки пока не знаю).
Так вот, если загружать под числами 1-11, то тени будут, если - 12-21 их нет.


Немного пруфов:


1)ОДИН раз загружается
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)

2) А сейчас мы cutscene актеру присвоили номер >11 , и тени у него больше нет вообще
(http://newrockstar.do.am/Images/LostCitydev/clp1356.jpg)

3)Как ни мотай камеру - тень у актера-игрока хорошая, и глюков нет, так что хз почему Рокстары удалили(или не делали) это для игровых челов:
(http://newrockstar.do.am/Images/LostCitydev/clp1354.jpg)
4)И дальность прорисовки тени тоже норм(опять см. тень актера-игрока):
(http://newrockstar.do.am/Images/LostCitydev/clp1358.jpg)

Так что итог: тень задается в опкоде
02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03если номер спец-актера от 1 до 11

ТАК ЧТО ТЕПЕРЬ ДЕЛО ЗА ТЕМИ, КТО РАЗБИРАЕТСЯ И МОЖЕТ РАСКОВЫРЯТЬ УСТРОЙСТВО ОПКОДА 02E5, В Т.Ч. - КАК ОН ЗАДАЕТ ТЕНЬ
Название: Re: Рендер тени в Vice City
Отправлено: Eden от Апрель 20, 2014, 01:58:50 am
Тогда интересует другой вопрос.. а как-же машины и их тени? Если в СА тот-же принцип, что и в ВС в катсценах, то как перенести эти тени на тачки? Или, все-таки, в ВС есть тени на тачках в катсценах? У меня просто ориг. вайса нет, не могу проверить :)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 20, 2014, 02:40:33 am
Проверил - нет у тачек тени. Всё что я написал - верно для актеров, т.е. для
023C: load_special_actor 1 'CSPLAY'а тачки загружаются, как объект, т.е.
02F3: load_object #CUTOBJ01 'HLRYCAR', хотя анимация им присваивается также, как и актерам, т.е.
02E6: set_cutscene_anim $125 'CSPLAY'
02E6: set_cutscene_anim $214 'HLRYCAR'



Короче теперь дело за теми, кто понимает IDA db , и кто расскажет, как же активирует тень опкод
02E6: set_cutscene_anim $125 'CSPLAY' и почему это работает для актеров 1-11, но не работает - для 12-21
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 20, 2014, 09:33:31 am
Кто разбирается - покопайтесь в функциях

004A6510
RenderEffects
 004A6190
Render2DStuff
0056CC40
CShadows::RenderStoredShadows
 0056C690
CShadows::RenderStaticShadows
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 20, 2014, 11:28:38 am
Зачетное исследование
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 21, 2014, 03:03:29 pm
Эти тени - примитивный шадоу-маппинг. Создается камера, позицинируется относительно педа, туда рендерится пед. Полученное изображение обрабатывается (вроде инвертируются цвета (так, чтобы образ педа стал белым, всё остальное - чёрное), блурится), далее рисуется почти так же, как стандартные проекции в игре (те, что под фонарями) - создается меш, который "стелят" по полигонам коллизии обьектов карты.
Пример реализации таких теней есть в примерах RenderWare Graphics, R* совсем немножко его переделали.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 30, 2014, 03:27:32 pm
... тень задается в опкоде 02E5: $SHADOYEXP = create_cutscene_object #SPECIAL03

С малой долей вероятности предположу, что если Shaggy прав, то может быть это происходит в RwObjectCreateLights

Код: ASM
  1. 0x4562FC @@opcode_02E5
  2.          -> 0x45630F call CreateCutsceneObject
  3.                           -> 0x4068FD call sub_4E03E0
  4.                                            -> 0x4E042C call RwObjectCreateLights

Если эта или какая-то другая функция внутри этого опкода может вешать тень на объект, то возможно получилось бы передать ей в качестве параметра любой другой объект.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 30, 2014, 03:32:33 pm
ВОТ! Я это и хотел сказать! Просто я даун, и из этого вытекае всё остальное ::)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Июнь 02, 2014, 02:55:59 am
Что ещё интересно,
В VC класс этих теней назывался CCutsceneShadow, а в SA уже переименовали в CRealTimeShadow (в SA эти тени не только у обьектов катсцен, но и у педов).
А в SA Mobile эти тени прикрепили ещё и к транспорту.
(http://i.imgur.com/KuLVIO2.png)
По вайсу вроде правильно написали.
Код: ASM
  1. 0x4562FC @@opcode_02E5
  2.          -> 0x45630F call CCutsceneMgr::CreateCutsceneObject(int)
  3.                           -> 0x4068FD call CCutsceneObject::CreateShadow(void)
  4.                                            -> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool)
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Июнь 02, 2014, 10:45:13 am
Неужели осталось подставить нужный RwObject, и все станет с тенями, пешеходы и даже машины и здания
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Июнь 02, 2014, 02:31:15 pm
Порой лучшие моды являются лишь парой строк кода.

P.S. Это ко мне не относится. Я даже самые простые вещи умудряюсь преобразовывать в жуткий гемор :'(
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Сентябрь 11, 2014, 03:03:04 pm
Ниужели ни у кого руки так и не дошли?  :'(
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Сентябрь 29, 2014, 05:29:02 am
Я думаю, тема не закрыта, возможность очень интересная.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 05, 2015, 02:50:10 am
RwObject - это struct объекта/педа/тачки или что-то другое?
Название: Re: Рендер тени в Vice City
Отправлено: Sektor от Апрель 06, 2015, 12:37:37 am
RwObject - Это из движка RWG.
Название: Re: Рендер тени в Vice City
Отправлено: былтаков от Апрель 11, 2015, 08:00:52 pm
(http://sg.uploads.ru/t/OpfXo.jpg) (http://uploads.ru/OpfXo.jpg)
вобщем вот какая штука у Санька случайно получилась - он запихал пепелац через MVL - и получилась динамическая тень - погрузчик тоже вставлен через MVL - но у него тень как у всех стандартных моделек - кстати если просто заменять модель пепелаца на любую другую - не меняя настроек - будет реально рендериться тень другой модели
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 15, 2015, 08:47:16 pm
Ну, MVL - это другая история. Там своя система рендера тени.
Просто тут дошли до момента
-> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool), поэтому я и хотел узнать, RwObject - это struct объекта или что, т.к. думал, как это реализовать через CLEO.
Но пока так и не вдуплил
Название: Re: Рендер тени в Vice City
Отправлено: Sektor от Апрель 15, 2015, 09:05:09 pm
Все это из RWG движка, качай и рассматривай, там еще и документации были, вот ссылка (http://public.sannybuilder.com/Renderware%20Studio%203.7%20SDK%20for%20Windows.rar). Т.е это основной графический движок вайса.
Название: Re: Рендер тени в Vice City
Отправлено: Prographer от Апрель 16, 2015, 10:47:52 am
Эти тени - примитивный шадоу-маппинг. Создается камера, позицинируется относительно педа, туда рендерится пед. Полученное изображение обрабатывается (вроде инвертируются цвета (так, чтобы образ педа стал белым, всё остальное - чёрное), блурится), далее рисуется почти так же, как стандартные проекции в игре (те, что под фонарями) - создается меш, который "стелят" по полигонам коллизии обьектов карты.
Пример реализации таких теней есть в примерах RenderWare Graphics, R* совсем немножко его переделали.
DK, можешь поподробнее рассказать о методах создания теней в играх? Какие методы наименее ресурсозатратны, а какие наоборот?
Название: Re: Рендер тени в Vice City
Отправлено: Prographer от Апрель 16, 2015, 10:52:23 am
Ну, MVL - это другая история. Там своя система рендера тени.
Просто тут дошли до момента
-> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool), поэтому я и хотел узнать, RwObject - это struct объекта или что, т.к. думал, как это реализовать через CLEO.
Но пока так и не вдуплил
По-моему, как раз и нет. Maxorator использовал стандартный метод создания тени, только немного его модифицировал.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Июль 19, 2015, 11:37:42 am
Эти тени - примитивный шадоу-маппинг. Создается камера, позицинируется относительно педа, туда рендерится пед. Полученное изображение обрабатывается (вроде инвертируются цвета (так, чтобы образ педа стал белым, всё остальное - чёрное), блурится), далее рисуется почти так же, как стандартные проекции в игре (те, что под фонарями) - создается меш, который "стелят" по полигонам коллизии обьектов карты.
Пример реализации таких теней есть в примерах RenderWare Graphics, R* совсем немножко его переделали.
DK, можешь поподробнее рассказать о методах создания теней в играх? Какие методы наименее ресурсозатратны, а какие наоборот?

Если в общем - в современных играх, в тех же GTA4/5 используется одна из техник shadow-mapping'а.
Почитать можно тут:
http://steps3d.narod.ru/tutorials/shadow-map-tutorial.html (http://steps3d.narod.ru/tutorials/shadow-map-tutorial.html)
http://habrahabr.ru/post/226421/ (http://habrahabr.ru/post/226421/)
В GTA SA используется стенсильные тени (для транспорта и обьектов).
http://www.gamedev.ru/code/articles/?id=4201 (http://www.gamedev.ru/code/articles/?id=4201)
Ну и то, что используется в VC/SA для теней педов. Не знаю, есть ли какое-то определение для такого типа теней. В любом случае, этот метод довольно затратный, т.к. зависит от сложности геометрии сцены.
Если надо создавать тени для большой сцены (как в гта) - то однозначно надо использовать shadow mapping.
Если надо создать тени только для конкретных обьектов, можно использовать другие методы.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Июль 22, 2015, 07:15:14 am
Нашел небольшое улучшение по теням машин, тут 0x698E3C расстояние видимости тени, тут 0x698E58 квадрат этого расстояния

(http://s6.postimg.org/z45n1imtd/scr_20150722035647801.gif)
Название: Re: Рендер тени в Vice City
Отправлено: Prographer от Июль 26, 2015, 10:43:47 am
Меня всегда интересовал вопрос: почему тень следует за машиной не равномерно? То есть, если понемногу толкать машину в каком-то направлении, то тень будет оставаться на одном и том же месте.
(http://pasteboard.co/2f1Darle.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 17, 2016, 10:40:45 pm
Другой важный вопрос(не помню, писал ли я здесь): как вернуть игроку управление во время катсцены?
Это точно возможно, но мне пока это не удалось(все скриптовые методы перепробовал), хотя есть зацепка: вот тут (https://www.youtube.com/watch?v=I7UpQB_o3gs) чувака(я связался с ним, и он рассказал) арестовали во время катсцены, он зареспавнился, и управление к нему вернулось!
Т.е., ключ к полному возвращению управления игроку лежит в респауне игрока после ареста(и возможно - смерти), но я за несколько лет так и не смог разобрать это.
Если получится вернуть управление игроку, то открываются просто безграничные возможности в визуализации миссий/фриплея.
Пока удаётся сделать лишь уныленькую "эмуляцию" управления (https://www.youtube.com/watch?v=6yEdHhzjmek), а хотелось бы полноценный контроль над игроком.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 24, 2016, 03:56:21 pm
С использованием плагина rwd3d9, можно было бы прикрутить shadow mapping к VC.
Всё же тени только от педов и транспорта - это не так круто, как тени от всего - зданий, мостов, мелких обьектов и т.д. Игра бы совсем по-другому выглядела бы)
Но для этого нужно будет переписывать функции рендеринга стандартных обьектов rw (skin, который рендерит педов; matfx, через который рендерятся обьекты с отражением вроде транспорта; и default, через который рендерится всё остальное). Задача не очень сложная.
А вот подобрать нормальный алгоритм shadow маппинга и правильно реализовать его будет сложнее.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 24, 2016, 05:27:14 pm
Многое бы отдал за динамические тени на объектах в VC....
А то пока приходится "запекать" унылые статичные недо-тени (http://newrockstar.do.am/_fr/0/9717361.jpg)...
Вообще, очень жду новых плагинов на основе rwd3d9, добавляющие в Вайс нормалмапы, тени и прочие "плюшки" :D
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 25, 2016, 07:42:28 am
К теням объектов хорошо бы восстановить еще освещение от времени суток, как на транспорте и актерах.

(http://s6.postimg.org/l9dsesh8h/light.gif)

Как бы его перенести на остальные объекты, чтобы не делать разный прелайт каждой стороны. Для зданий это еще как-то терпимо, а вот для более детализированных вещей результат печальный

(http://s6.postimg.org/9cqr824ox/scr_20160316124633626.jpg) (http://s6.postimg.org/vd73ooncx/scr_20160316124633625.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 25, 2016, 06:42:02 pm
xanser, надо, чтобы у геометрии были нормали и включен флаг динамического освещения.
Вроде в скриптах Кама за это отвечает кнопка Nrm (или Еxport Normals).
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 26, 2016, 03:32:31 am
включен флаг динамического освещения.
Про нормали понял, а про флаг - нет. Если я правильно понял, и речь идет о флаге 32 в ide - то это не работает:(
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 26, 2016, 04:10:15 am
Хотелось бы рабочий пример
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 26, 2016, 06:41:33 pm
Shaggy, у геометрии есть флаг rpGEOMETRYLIGHT. Возможно, достаточно только наличия нормалей.
xanser, может в вайсе есть обьекты с динамическим освещением. Столбы или коробки какие-то. Если нет - тогда в SA глянуть.

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

0x660B20 RpLightCreate(LightType) - создание источника света RenderWare
0x57FF50 LightsCreate(World) - создание глобальных источников света игры
В игре есть 2 глобальных источников. Первый - это ambient light, "фоновый" равномерный свет. У него нету позиции и напралвения. Вся сцена освещается равномерно, в зависимости от интенсивности и цвета источника.
Второй - directional light, направленный свет ("рассеиваемый"). У него нету позиции, но есть направление. Грубо говоря - это игровое солнце. Именно этот источник осветляет транспорт и педов.
Как рассчитывается освещение? Очень просто - к ambient - составляющей добавляется diffuse.
0x974B44 RpLight *pRpAmbientLight - указатель на глобальный ambient источник света
0x94DD40 RpLight *pRpDirectionalLight - указатель на глобальный directional источник света (игровое солнце для транспорта и педов)
По ссылкам на эти переменные можно найти функции включения/отключения этих источников света.
0x57FB50 ActivateDirectional() - включение направленного света ("солнца")
0x57FB60 DeActivateDirectional() - отключение направленного света ("солнца")
Дальше смотрим ссылки на эти функции.
(http://i.imgur.com/HzNIYHim.png) (http://i.imgur.com/HzNIYHi.png)
Тут сразу делаем заметку - динамик освещение нельзя применить на статике (если мы рассматриваем только стандартное освещение движка и игры, без каких-либо модификаций). Только транспорт (CVehicle), педы (CPed), обьекты катсцены (CCutsceneObject) и динамик обьекты (CObject) (в SA они определяются в файле objects.dat). Статика в GTA - это классы CBuilding (здания) и CTreadable (дороги).
Итак, освещение для игровых обьектов настраивается в методе SetupLighting() этих обектов.
Ну а дальше надо рассматривать условия, при которых включается направленный свет. Увы, сейчас под рукой нету документации по флагам CEntity и CObject в VC, может позже найду и продолжу.
(http://i.imgur.com/a66NEe0m.png) (http://i.imgur.com/a66NEe0.png)
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 27, 2016, 04:17:28 am
Спасибо за подробное объяснение, надо это дожать до конца, вроде задача простая - научить игру делать то, что она уже умеет на машинах и педах. Еще интересно, как это будет сочетаться с прелайтом, будет ли он игнорироваться или начнет комбинировать освещение, стандартный вайс должен стать заметно лучше.

Я нашел 4 столба с тенью, но динамического освещения они не имеют, только прелайт: 351 lamppost3, 417 lamppost2, 425 lamppost1, 426 doublestreetlght1.

Попробовал пойти простым путем, заменил все ссылки на функцию CObject::SetupLighting на CVehicle::SetupLighting и объекты стали освещаться как машины, только объекты должны присутствовать в object.dat. То же самое получилось, если присвоить флаг, как писал DK, ((CObject*)Entity)->flags16E.DirectionalLight = 1;

(http://s6.postimg.org/s5lgdzbk1/screen1.gif)

Есть и свои минусы конечно, ночью одна сторона слишком светлая как и у машин, но это решаемо, где-то попадался уровень интенсивности ambient для машин и педов, освещение идет непонятно откуда, если от луны, то надо переносить ее на другую сторону неба. Также проявился минус с лампами, когда камера попадает в зону лампы, то засвечивается весь объект. Угол освещения тоже меняется, вместо пола освещается боковая поверхность. Также на таких объектах перестает работать определение z-ground, т.е. высоту крыши уже вычислить не может, пропадает защита от дождя. Еще один минус - лимит динамических объектов в кадре, подсвеченные начинают исчезать. Вывод - лучше переносить освещение на CBuilding.

(http://s32.postimg.org/9hy0ooait/scr_20160427024137424.jpg) (http://s32.postimg.org/4fziw8bpf/scr_20160427024140908.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 27, 2016, 06:21:28 pm
ОФИГЕТЬ)
Цитировать
уровень интенсивности ambient для машин и педов
В timecyc.dat параметр Amb_Obj отвечает за амбиент динамических объектов(педы, авто, динамические объекты из object.dat и объекты катсцен), а Dir - это как раз цвет "освещения". Т.е. ночью Dir можно сравнять с Amb_Obj, и объект не будет "освещаться" вообще, т.е. ночью Amb_Obj отвечает за тёмную сторону объекта, а Dir - за светлую.

А z-ground не работает у всех динамических объектов(из object.dat).

Не смотря на все "минусы", хотелось бы опробовать готовое решение в asi, ибо я не смогу сделать этого :(

P.S. А нельзя таким же методом "заменил все ссылки на функцию" провернуть фишку с тенями педов, присвоив им тени Cutscene персов?
Название: Re: Рендер тени в Vice City
Отправлено: Prographer от Апрель 27, 2016, 07:30:17 pm
Дабы продолжить тему, решил написать небольшой плагин, с помощью которого вы сможете изменять силу окружающего освещения одной функцией SetAmbient(float). Кому, может быть, пригодится.
https://yadi.sk/d/PFzlrRnurLcZn
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 28, 2016, 04:39:01 am
Shaggy, опробовать освещение объектов из object.dat можно записав 0x75 в адрес 0x4C9D5A, это переключает условие на противоположное (интересно, а для каких тогда объектов оно работало до этого).
Неплохо получилось с деревьями, если сделать их динамическими.

(http://s6.postimg.org/gf7iwlirl/scr_20160428012535602.jpg)

Видимость освещения динамических объектов оказалась ограничена 80.0, при приближении к нему он как бы "включается", это надо тоже найти.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 28, 2016, 08:54:09 pm
xanser, заметьте, что этого можно добиться и запеканием освещения в цвета вершин. Ну да, тут оно вроде как динамическое, но это всё равно повершинное освещение.
Поменять функции для CBuilding достаточно просто.
Код: C++
  1. #include "additional\Patch.h"
  2. #include "game_vc\common.lighting.h"
  3.  
  4. class MyViceCityPlugin {
  5.     static bool __fastcall BuildingSetupLighting(class CEntity *) {
  6.         ActivateDirectional();
  7.         SetAmbientColoursForPedsCarsAndObjects();
  8.         return true;
  9.     }
  10.  
  11.     static void __fastcall BuildingRemoveLighting(class CEntity *, int, bool) {
  12.         SetAmbientColours();
  13.         DeActivateDirectional();
  14.     }
  15.  
  16. public:
  17.     MyViceCityPlugin() {
  18.         // подменяем функции в виртуальной таблице методов CBuilding
  19.         plugin::patch::SetPointer(0x6865C4, BuildingSetupLighting);
  20.         plugin::patch::SetPointer(0x6865C8, BuildingRemoveLighting);
  21.     }
  22. } vcplugin;
Вот только для проверки результата нужен ещё обьект с нормалями.

Проект во вложениях.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 29, 2016, 06:31:27 am
Вот спасибо, действительно просто. Все отлично работает на статических и динамических объектах, можно экспортировать в игру сразу из zmodeler без прелайта и скриптов Кама. Проверял на своих моделях, на стандартной карте вроде как ничего не изменилось. Включение света у статических происходит на расстоянии 300.0, у динамических на 80.0, осталось их подравнять для красоты, лоды тоже нормально освещает, попробую переделать свою карту теперь. Еще конечно нужен будет потом спец по настройке timecyc.dat для уж совсем красивого освещения.

DK, можешь еще откомпилировать проект, чтобы остальные могли попробовать? Можно даже добавить в твой графический мод ViceMips_byDK.asi. Я у себя проверял, отдельно не вытащу.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Апрель 29, 2016, 05:36:34 pm
Это...просто...восхитительно!
Объекты освещаются практически так же, как если бы "запекались" в максе: вот (http://newrockstar.do.am/Images/DeadKing/DynLTest/Day01aStatic.jpg) статическое "запеченное" освещение, а вот (http://newrockstar.do.am/Images/DeadKing/DynLTest/Day01bDynamic.jpg) - динамическое!(освещение почти такое же, из-за того, что я в своё время просчитывал положение игрового солнца, чтобы запечь освещение, и при другом времени освещение другое: раз (http://newrockstar.do.am/Images/DeadKing/DynLTest/Day01bDynamic.jpg) и два (http://newrockstar.do.am/Images/DeadKing/DynLTest/Day01cDynamic.jpg))
Конечно, пока не хватает затенения объектов, так что лично мне пока больше подойдет метод xanser-а, чтобы можно было ставить динамическое освещение лишь для "избранных" объектов. Правда, я подозреваю, что там будут какие-то проблемы, раз
Цитировать
это переключает условие на противоположное
Т.е. что-то другое при этом должно по-идее отключаться, что не есть гуд...

Цитировать
Еще конечно нужен будет потом спец по настройке 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).

Согласен насчет компиляции отдельного проекта, ибо мне это не под силам(я смог добавить в свою asi, но у меня большие проблемы с созданием отдельных asi, ибо я криворук и MS VS у меня глючит). Единственное - в случае интеграции с тем же ViceMips - я бы очень хотел возможность отключения освещения в ini(для различных тестов), тем более, когда в ViceMips уже есть рабочий ini.

Теперь бы еще шедоу маппинг и порт нормалмап с SA, и можно было бы создавать просто божественный визуал!

P.S. xanser, научи делать гифки из 2х изображений  :D

UPD: Еще одна мысль. Поскольку дин. освещение работает лишь днем, а ближе к ночи плавно меняется на прелайт - можно на моделях сразу запекать ночное освещение, а днем будет работать динамическое. Шик!
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Апрель 30, 2016, 06:57:37 am
Shaggy, попробуй asi-шку во вложении, это уже для любых объектов, причем освещение статических получилось намного стабильнее, чем динамических, те как-то моргают под некоторыми углами обзора, выключаются, надо еще смотреть почему так происходит, если убрать записи в object.dat, то начинают освещаться всегда нормально.

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

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

P.S. Gif-ки я делаю программой ImageReady, если есть Photoshop, в той же папке должна быть, там Import Folder as Frames, настраиваешь время каждого кадра-скриншота, потом Save Optimized As... только размер картинки уменьши.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Апрель 30, 2016, 11:06:49 am
DK, можешь еще откомпилировать проект, чтобы остальные могли попробовать? Можно даже добавить в твой графический мод ViceMips_byDK.asi. Я у себя проверял, отдельно не вытащу.
Там вроде надо только поменять путь к выходной папке (у меня там относительный путь к Vice City/scripts) и запустить сборку, нет?
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 01, 2016, 10:15:44 am
Сделать хорошее динамическое ночное освещение будет трудно.
Если в дневное время можно ограничиться только одним источником света - направленным (солнце), то освещение ночью - это фонари, лампы, и другие локалные источники света ("точечные" источники света).
Точечные источники света в RenderWare выглядят очень плохо, т.к. это всё то же повершинное освещение. Ещё и модели во всех GTA на RenderWare - низкополигональные. Представьте себе дорогу, слеланную двумя треугольниками, и точечный источник где-то посередине дороги. Нужно либо усложнять сетку дороги, так , чтобы в любом месте было довольно большое кол-во вершин, либо делать попиксельное освещение (per-pixel lighting) с подключением шейдеров.
Но тут появляется ещё одна проблема - попиксельное освещение - довольно затратная технология, особенно, если в сцене много источников света.
RenderWare - уже старый движок. Всё там основано на технологии "прямого" рендеринга (forward rendering).
Почти во всех современных играх с открытым миром (где в одном кадре нужно создавать десятки-сотни источников) используется технологии отложенного рендеринга (deferred rendering) и отложенного освещения (deferred lighting).
Реализовать эту технологию в GTA - значит внести внушительные изменения в графический движок. Можно пробовать, конечно  :D
Да и с forward-овещением можно поиграться, думаю. Всё же его намного проще сделать.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 01, 2016, 06:30:30 pm
Вроде бы то, что находится внизу, освещается хорошо, вот плоскость сделана двумя треугольниками и источник света, вроде как вершины плоскости не участвуют в освещении, а участок в центре освещен с плавным рассеиванием. Другое дело - стена живет своей жизнью и свет на нее не распространяется никак.

(http://s6.postimg.org/f7phxjwox/scr_20160501151702203.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 01, 2016, 08:04:36 pm
xanser>Это древняя проблема Вайса, помимо освещения от 2dfx, портящая также отображение партиклов типа крови на объектах: "отрисовка" этого освещения(и партиклов) идет сверху вниз, а не во все стороны. Т.е. если стену здания наклонить на полградуса - свет на нем отображаться будет(но крайне криво), а на плоскостях, перпендикулярных к горизонту - нет.
DK> Лично я больше жду теней, нежели динамическое ночное освещение, ведь
xanser> ночное освещения можно сильно ослаблить, если изначально ставить модели темный прелайт/освещение(которые днем ни капли не затемняют модель, а делают освещение более контрастным) и в ночных "часах" таймцикла приравнивать значения освещения и тени.

UPD: Короче, я склепаю небольшую демонстрацию, чтобы всё наглядно показать. Одним словом - новое освещение - это бомба! НО для того, чтобы конкурировать с "запеканием" вершин - не хватает теней. НО оно динамическое! НО не хватает теней... НО всё равно шик!
Название: Re: Рендер тени в Vice City
Отправлено: Eden от Май 02, 2016, 02:16:12 pm
Т.е. прилайт теперь не нужен? Или все таки придется теперь заморачиваться и делать два дома для дня и ночи отдельно с разной освещенностью?
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 02, 2016, 04:49:31 pm
Т.е. прилайт теперь не нужен? Или все таки придется теперь заморачиваться и делать два дома для дня и ночи отдельно с разной освещенностью?
Можно делать без прелайта, а можно сделать лишь ночной. В любом случае, дневной делать точно не надо, ибо днем лучше выглядит динамическое освещение.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 06, 2016, 05:37:22 am
Друзья, давайте вместе добьем фишку с освещением, я что-то сам не справляюсь, остался баг с динамическими объектами, которые выключаются в зависимости от положения камеры.

(http://i.imgur.com/4ZhzbLB.gif)

Мы подменяли функцию CEntity::SetupLighting() в этом адресе 0x6865C4, я также подменил ее еще по 5 ссылкам 0x686614, 0x68B398, 0x68B614, 0x68F6EC, 0x691614.
Поскольку это CEntity, то освещение распространяется на любую сущность, и скорее всего динамические объекты первоначально освещаются хорошо, как и статические, но где-то происходит дополнительная обработка освещения динамических объектов, которая все портит, надо ее найти и отключить.
Я попробовал подменить ссылки на CObject::SetupLighting() в адресах 0x6917D8, 0x691A48, 0x6DBB28 на адрес 0x4C9D90, т.е. на бывший пустой CEntity::SetupLighting(), тем самым отключив стандартное освещение CObject, то же самое сделал и по ссылкам CObject::RemoveLighting() заменив на пустой CEntity::RemoveLighting(), после этого CObject вообще не должен обрабатываться отдельно.
Но где-то эта гадость еще засела, не могу найти никак. Можно конечно убрать все объекты из object.dat и решить проблему, но потеряется возможность делать падающие заборы и т.д.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 06, 2016, 04:18:17 pm
Что-то вообще не то сделал.
CEntity и CPhysical отдельно вообще не существуют, это родительские классы для других.
А обьекты вроде CDummyObject - по идее, вообще не отображаются - dummy ведь (пустышка).
Для наглядности - иерархия классов в ВС (http://gtaforums.com/topic/117195-documenting-gta3vc-memory-addresses/?p=1063876009)
Надо подменять функцию в вирт таблице CObject
.data:006917D8 20 9D 4C 00                             dd offset _ZN7CObject13SetupLightingEv ; CObject::SetupLighting(void)
.data:006917DC 00 9D 4C 00                             dd offset _ZN7CObject14RemoveLightingEb ; CObject::RemoveLighting(bool)
Код: C++
  1. #include "additional\Patch.h"
  2. #include "game_vc\common.lighting.h"
  3.  
  4. class MyViceCityPlugin {
  5.     static bool __fastcall DynamicSetupLighting(class CEntity *) {
  6.         ActivateDirectional();
  7.         SetAmbientColoursForPedsCarsAndObjects();
  8.         return true;
  9.     }
  10.  
  11.     static void __fastcall DynamicRemoveLighting(class CEntity *, int, bool) {
  12.         SetAmbientColours();
  13.         DeActivateDirectional();
  14.     }
  15.  
  16. public:
  17.     MyViceCityPlugin() {
  18.         // подменяем функции в виртуальной таблице методов CBuilding
  19.         plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
  20.         plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);
  21.         // подменяем функции в виртуальной таблице методов CObject
  22.         plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
  23.         plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);
  24.     }
  25. } vcplugin;
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 07, 2016, 01:22:52 pm
Я так сделал из-за наследования классов, Entity и Object и Object->Physical.Entity указывают на одно и то же в данном случае, тем более что в функциях SetupLighting нет обращения к полям классов, поэтому, я думаю, их можно менять местами в виртуальной таблице без проблем. Это все работает, только не дает эффекта для решения проблемы.
Дело в том, что оказалось, что это 0x6917D8 освещает динамические объекты, а это 0x6865C4 как динамические так и статические, то есть подменяет не только для CBuilding, а для любых CEntity как родительского класса, возможно даже для машин и педов сработает без их собственных функций освещения, не проверял, поэтому нет смысла дублировать
Код: C++
  1. plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
  2. plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);
после
Код: C++
  1. plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
  2. plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);
Хоть это и для разных классов, они делают одно и то же для динамических объектов. В любом случае даже если сделать так, проблему устранить не удалось, где-то еще идет отключение, как будто RemoveLighting срабатывает, хоть его везде пустым сделать, все равно происходит.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 07, 2016, 08:05:21 pm
xanser, да но в предыдущем варианте, когда было
    plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
    plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);
без
    plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
    plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);
лично у меня в этом случае освещение динамических объектов(из object.dat) не менялось, а теперь динамически освещается всё(что с нормалями).
Хотя, конечно, если ты прав и одна из этих функций перекрывает другую, нужно найти правильный консенсус, дабы избежать багов(жаль, тут я бессилен чем-то помочь)...
Проверял новую версию на нескольких сборках вайса - пока нареканий не обнаружил, зато пришла одна безумная мысль(скоро выложу видос)...

P.S. Кстати, я вот не хотел(одно время) принудительное динамическое освещение для всех объектов, т.к. кое-где мне нужно было именно "запеченное" освещение, но, блин, потом дошло - можно же эти объекты всего лишь экспортить без нормалей, и нет проблем :D
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 08, 2016, 06:26:05 pm
Даблпостинг, но это важно:
Оказалось, что в новом варианте DK, когда, помимо прочего, патчится это:
Цитировать
    plugin::patch::SetPointer(0x6917D8, DynamicSetupLighting);
    plugin::patch::SetPointer(0x6917DC, DynamicRemoveLighting);

- освещение на объектах, даже без нормалей, задается в timecyc.dat в пункте Amb_Obj. Таким образом, от Amb_Obj освещаться начинает всё, а от пункта Amb - ничего. Т.е. это делает пункт Amb в timecyc.dat бесполезным.
Старый же вариант, когда патчилось лишь
Цитировать
    plugin::patch::SetPointer(0x6865C4, DynamicSetupLighting);
    plugin::patch::SetPointer(0x6865C8, DynamicRemoveLighting);

- у статичных объектов всё оставалось по-прежнему(динамическое освещение от Amb_Obj), а у динамических(у которых в этом случае не работает динамическое освещение) - освещение стало задаваться Amb. Таким образом, старый вариант, описанный DK здесь (http://forum.gtabuilder.ru/index.php?topic=200.msg2133#msg2133) - дает больше возможностей и разнообразия для творчества.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 08, 2016, 06:39:08 pm
А вот какие я провел эксперименты - отключил освещение машин, но они продолжили освещаться из функции CEntity::SetupLighting(), при этом с тем же багом выключение при повороте камеры, значит освещение сущности работает как-то криво на объектах наследованных классов и им необходимо дополнительное собственное освещение.
То что ты Shaggy говоришь, действительно имеет место, динамические объекты могут как освещаться, так и не освещаться, и это как ни странно зависит от находящихся рядом освещенных статических объектов. Я на одном и том же коде получил разный результат в зависимости от карты.
Второй вариант, предложенный DK, вроде бы убрал все проблемы, которые были у меня, надо именно так и делать для устранения выключения. Единственно с timecyc.dat действительно один параметр становится ненужным, но может быть он и не сильно важен.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 08, 2016, 06:43:01 pm
xanser Да вот проблема в том, что из-за того, что во втором варианте всё освещается от Amb_Obj - невозможно сделать разное освещение на избранных объектах(например, у меня облака должны иметь свое освещение, чтобы они оставались белыми, когда всё становится слегка оранжевым, или - черными, когда на улице ночь и всё темное(а не черное))
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 08, 2016, 07:35:11 pm
xanser У тебя же первый вариант DK (http://forum.gtabuilder.ru/index.php?topic=200.msg2133#msg2133) не глючил(я про сбивание освещения)? Глючить стало, когда ты пробовал пропатчить другие адреса? Мне просто нужно знать этот момент, это важно, поскольку я решил использовать у себя первый вариант
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 09, 2016, 06:32:51 am
Глючил первый вариант. Из-за недоосвещения отдельно динамических объектов, как и на машинах, когда я проверил. Второй вариант можно покопать, добавить какие-то условия, чтобы задействовать все изначальные параметры timecyc.dat
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 09, 2016, 09:03:35 am
Я не понимаю: у меня при первом варианте объекты, прописанные в object.dat или созданные скриптом, т.е. - динамические - вообще не имели динамического освещения, а освещались от пункта Amp в timecyc.dat. Как так?
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 09, 2016, 09:32:15 am
Я сам не до конца понимаю, вчера я обнаружил то же самое, но не во всех случаях, когда освещается, когда нет, надо брать наиболее подходящий вариант, я себе выбрал.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 09, 2016, 09:51:03 am
Я вот сейчас протестил тот вариант, что ты скидывал мне здесь (http://forum.gtabuilder.ru/index.php?topic=200.msg2137#msg2137), и там действительно освещаются объекты из object.dat(морганий пока не заметил), но в случае, когда я вставил чистый код DK (http://forum.gtabuilder.ru/index.php?topic=200.msg2133#msg2133) себе в плагин - такого не наблюдается(т.е., как я писал ранее - объекты из object.dat просто не имеют динамического освещения, и никаких глюков не было)...

P.S. Просто мне важно найти сейчас причину этих морганий, ибо будет поздно, когда я несколько сборок подстрою под один из вариантов освещения, и потом вдруг проявятся эти глюки...
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 09, 2016, 10:23:24 am
Что тут сказать, слушай лучше DK  :D
Я в прикрепленную asi-шку завернул только это plugin::patch::SetPointer(0x6865C4, BuildingSetupLighting);
Если честно непонятно, в каких случаях срабатывает RemoveLighting и зачем он нужен.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 09, 2016, 10:31:58 am
Ну я имел в виду такой вопрос: тот, первый код DK, если пихнуть его без дополнений, тех глюков не вызывает?
Я просто уже немного потерял нить вашей "переписки" с DK, ибо мои знания C++ на уровне "скопировал-вставил"(что я и сделал с кодом DK)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 09, 2016, 11:39:33 am
Если честно непонятно, в каких случаях срабатывает RemoveLighting и зачем он нужен.

Так работает Direct3D. Поставил освещение - отрендерил - убрал освещение.
Источники освещения сами по себе не отключатся.
Представь, что рендерится какой-то обьект, который освещается динамически. А после него рендерится обьект, которому не нужно динамическое освещение. Если не отключить источники после рендера первого обьекта, то и второй будет отрендерен с этими источниками.

Если тебя интересует, где именно вызываются SetupLighting и RemoveLighting - надо искать в месте, где рендерится обьект (авто, пед).
При этом, поиск лучше начать где-то "сверху", в методах класса CRenderer (класс, который рендерит игровые обьекты (сущности))
(http://i.imgur.com/TrwGD8Bm.png) (http://i.imgur.com/TrwGD8B.png)
Из названия понятно, что эта функция отвечает за рендер обьектов, кторые не являются дорогами.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 09, 2016, 10:14:20 pm
Короче - тот первый вариант (http://forum.gtabuilder.ru/index.php?topic=200.msg2133#msg2133) практически идеален для комбинирования всяких идей, к примеру - динамических облаков, которые должны иметь своё освещение, отличное от остального мира, либо - незаметной моментальной подмены статики на катсценовые объекты(ниже в видео), поскольку теперь у них идентичное освещение!
! No longer available (http://www.youtube.com/watch?v=pyYbc5xnYCU#)
Не хватает только теней:)
Правда, теперь возникает проблема - иногда всё же хочется, чтобы некоторые динамические объекты динамически освещались(лол), а с этим вариантом кода это не выйдет реализовать.

Второй же вариант (http://forum.gtabuilder.ru/index.php?topic=200.msg2160#msg2160) даёт одинаковое динамическое освещение на абсолютно всех объектах, но в этом случае всё освещается от пункта Amb_Obj в timecyc.dat, а от пункта Amb теперь не освещается ничего, что лишает той свободы, что мне выше позволила запилить своё освещение динамическим облакам. Если у моделей(любых) убрать нормали - эти модели всё равно будут освещаться от Amb_Obj!

Короче - не знаю, как быть.

P.S. Также по-прежнему мучаюсь от того, что не могу вернуть управление игроку в катсценах. Из-за этого пришлось снова пилить унылою скриптовую "эмуляцию" управления, когда игроку "подвластны" лишь 2 кнопки - влево и вправо.
P.P.S. Если кому нужно будет - вот вся игра в архиве (https://yadi.sk/d/ov5BnXdXran7U). Спецом на Диск скинул, чтобы не пришлось скачивать весь архив ради какого-нибудь timecyc.dat. Под освещение нормально настроена лишь погода 4(EXTRASUNNY). Можно по-перематывать время вперед-назад для тестов.
Название: Re: Рендер тени в Vice City
Отправлено: DimZet13 от Май 09, 2016, 11:59:47 pm
Ребят, я это освещение сделал еще в прошлом году и для гта3 и для вайса.
Не получилось только исправить такие косяки:
-объект освещается когда объект и камера игрока в радиусе 2nfx
-объект освещается полигонно, а не повекторно. То есть полностью. К примеру много-полигоная плоскость освещается полностью, а не в центре 2nfx на плоскости.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 10, 2016, 06:37:36 pm
Ребят, я это освещение сделал еще в прошлом году и для гта3 и для вайса.
Не получилось только исправить такие косяки:
-объект освещается когда объект и камера игрока в радиусе 2nfx
-объект освещается полигонно, а не повекторно. То есть полностью. К примеру много-полигоная плоскость освещается полностью, а не в центре 2nfx на плоскости.
1) Не 2nfx, а 2dfx (типо 2д-эффект)
2) Возможно, из-за того, что в игре есть лимиты на кол-во корон/проекций/источников
3) Я об этом говорил. Это повершинное освещение (альтернатива - попиксельное). Оно хорошо работает только на очень детализированной сетке.
Поэтому если хочется нормального освещения - о стандартном лучше вообще забыть.
Я позже напишу небольшой пример/тутор по подключению шейдеров в игре.
Сделать базовое освещение на шейдерах довольно просто. Есть сотни примеров на любой вкус. Сделать какое-то ограничение на кол-во источников.
Но если захочется чего-нибудь крутого, например такого (https://i.ytimg.com/vi/Hw-coxW3G5o/maxresdefault.jpg) (куча источников в сцене), то нужно будет много чего менять в коде движка и игры.

UPD Хотя, проблема с тем, что от источников освещается вся сторона обьекта - связана с тем, что точечные источники в гта - не совсем точечные.
Может позже с картинками покажу что и как, т.к. одними словами будет трудно обьяснить.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 11, 2016, 02:10:42 am
В версии DimZet13 (http://dimzet13.3dn.ru/load/gta_3/cleo/scripts_d_box/9-1-0-74)(для Вайса) освещение работает лишь на динамических объектах, так что версия DK на данный момент более актуальна.
Но зато в том же архиве у DimZet13 есть версия для трехи, в которой(по его словам) всё работает и для статики.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 11, 2016, 07:52:00 pm
Короче, рассказываю коротко:
Помимо глобальных ambient и directional (солнце) источников, в GTA есть ещё 6 слотов для динамических directional источников. В игре они называются pointlights (точечные источники света - т.е. источники, которые освещают только определённую часть сцены, имеют такие параметры, как: позиция, радиус, цвет).
Но на уровне движка (RenderWare) это всё равно направленный свет. Отсюда и проблема с освещением всей стороны обьекта, полностью.
Итак, когда игра рендерит обьект, идёт проверка - находится ли обьект в зоне действия этих источников света (просто сверяется расстояние от центра обьекта до позиции pointlight'а).
Если обьект в радиусе - создается направленный свет (в одном из 6 слотов), его направление - от позиции источника до центра обьекта.
(http://i.imgur.com/BF0rccY.png)
Красными линиями выделены области (стороны обьектов), которые будут освещены.
Помимо directional источника движка, также создаются корона и проекция (меш с текстурой shad_exp, построенный на основе моделей коллизии расположенных рядом обьектов).
Примеры таких источников (в VC):
Свет пикапа
Огни светофора
2dfx
Вспышки огня
Фары траснспорта
Вспышка при взрыве
Выстерл оружия
Название: Re: Рендер тени в Vice City
Отправлено: DimZet13 от Май 11, 2016, 07:58:11 pm
Не в первый раз путаю nfx.
2)Скорее потому что в 2dfx(и т.п.) адрес радиуса поиска объекта такой же как и у радиуса света.
Вот если бы сделать так чтобы адрес поиска объекта был безлимитным или равен хотя бы 300.0 то было бы норм.
В общем косяк таков: Если камера за пределами радиуса света 2dfx, то объект или пед в радиусе света не освещается никогда.
3)Ну не знаю как вайсе, но в гта3 сколько бы небыло полигонов у плоскости, то освещаться будет как один большой полигон.
И если полигон в радиусе света, а другой за пределами, то они оба освещаются одинаково.

Еще косяк такой что когда объект за стеной, то все равно освещается солнцем. Есть возможность сделать тени как в СА? Я конечно понимаю что для этого потребуется модификация коллизии.
Заметил что все тени и карты освещения(shad_exp) ложаться на коллизию с некоторым расстоянием, что выглядит убого. Я убирал это расстояние, но это выглядит норм только на точной коллизии. Что если сделать чтобы тени ложились на модели?
Я слышал что ты делаешь d3d9 для вайса. То есть карту освещения можно будет сделать как освещение(как фонарик в HL2), а не как сейчас тупо повышение яркости.
Еще было бы прикольно сделать отражение от 2dfx на воде.

Короче я могу так продолжать бесконечно. Ты ведь сейчас норм. шариш во всем этом. Я хотел бы поблагодарить тебя за большой вклад в моддинг гта.
Название: Re: Рендер тени в Vice City
Отправлено: DimZet13 от Май 11, 2016, 08:09:43 pm
По тем косякам я не хочу сказать что это баг или что то типа того. Я просто хочу сказать что это не нормально и хотелось бы это улучшить.
По твоему рисунку:
Вот проблема в том что вся эта система не работает пока камера не будет в "источнике". И то что у объекта 3 обе стороны освещаются.
Название: Re: Рендер тени в Vice City
Отправлено: DK от Май 16, 2016, 05:53:50 pm
Сложно будет улучшить это.
Наверное, лучше пытаться сделать шейдерное освещение.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 16, 2016, 11:08:51 pm
У меня предложение для глобальных модостроителей, пересохранить стандартную карту вайса, и посмотреть, каким он станет с таким освещением, видимо изначально нормали не включены, наверное должно получиться интересно.

Для этого надо, чтобы DK выпустил мод в открытый доступ, и тогда кто-нибудь точно это запилит, как это было с мип-мапами (http://libertycity.ru/files/gta-vice-city/92532-gta-vc-mipmapped-textures.html).

UPD:
Еще пару дней назад пришла мысль, что создание динамических теней для катсценовых персонажей(о чем писалось ранее), т.е. вот это
Код: ASM
  1.     0x4562FC @@opcode_02E5
  2.              -> 0x45630F call CCutsceneMgr::CreateCutsceneObject(int)
  3.                               -> 0x4068FD call CCutsceneObject::CreateShadow(void)
  4.                                                -> 0x4E042C call CCutsceneShadow::Create(RwObject *,int,bool,int,bool)
можно применить на обычных персонажах так же, как DK применил создание динамического освещения на всех объектах. Т.е. подменить адрес функции создания тени для обычного игрового персонажа. Но я не нашел адрес этой функции...
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 17, 2016, 04:49:44 am
Shaggy все мечтаешь про тени, я бы тоже хотел хотя бы посмотреть, как оно выглядит вживую, но не умею запускать катсцены рядом с игроком, чтобы рассмотреть тень. С освещением проще, там все модели по одному принципу можно осветить, не понятно почему R* отключили это, или из-за недостаточной производительности, или не хватало контраста между машинами, педами и окружающим миром.
А вот с тенями, которые ты предлагаешь, проверки завязаны на флагах и функциях, которые принадлежат только классу СCutsceneObject, а тут надо переносить это на объекты классов CPed, CVehicle, у которых нету соответствующих свойств, ну может быть на общий для всех CEntity внутри которого есть RwObject, который возможно подойдет к CCutsceneShadow::Create(RwObject *,int,bool,int,bool), если это оно.

Я еще подумывал над тенями столбов в определенное время суток, скорее всего они тупо квадратные, не зависящие ни от чего, но можно попробовать их использовать хотя бы для зданий, деревьев и т.д., надо посмотреть что из этого выйдет.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 19, 2016, 05:51:32 am
Катсцену-то запускать не сложно - там лишь пару нюансов нужно учитывать:
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)

В аттаче CLEO скрипт с примером запуска/выключения катсцены на кнопки R+C, а также нужные файлы.


Проблема в том, что камерой не помотаешь и управление игроку не вернешь - даже так:
Player.CanMove($PLAYER_CHAR) = True // что я только не пробовал - управление игроку не удается вернуть
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 // что я только не пробовал - управление игроку не удается вернуть
Нужно либо писать скрипт на управление игроком/камерой, либо хз что.

UPD(2019):
Обновил код в аттаче, теперь можно крутить камерой и двигаться
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 19, 2016, 11:37:35 am
Спасибо за код, вполне пригодная тень. Вот сделал еще видео, чтобы остальные вдохновились

! GTA VC cutscene shadow (http://www.youtube.com/watch?v=keOSFiSgLQg)
Название: Re: Рендер тени в Vice City
Отправлено: ilufir от Май 21, 2016, 06:17:12 pm
Ребят, я это освещение сделал еще в прошлом году и для гта3 и для вайса.
Не получилось только исправить такие косяки:
-объект освещается когда объект и камера игрока в радиусе 2nfx
-объект освещается полигонно, а не повекторно. То есть полностью. К примеру много-полигоная плоскость освещается полностью, а не в центре 2nfx на плоскости.
1) Не 2nfx, а 2dfx (типо 2д-эффект)
2) Возможно, из-за того, что в игре есть лимиты на кол-во корон/проекций/источников
3) Я об этом говорил. Это повершинное освещение (альтернатива - попиксельное). Оно хорошо работает только на очень детализированной сетке.
Поэтому если хочется нормального освещения - о стандартном лучше вообще забыть.
Я позже напишу небольшой пример/тутор по подключению шейдеров в игре.
Сделать базовое освещение на шейдерах довольно просто. Есть сотни примеров на любой вкус. Сделать какое-то ограничение на кол-во источников.
Но если захочется чего-нибудь крутого, например такого (https://i.ytimg.com/vi/Hw-coxW3G5o/maxresdefault.jpg) (куча источников в сцене), то нужно будет много чего менять в коде движка и игры.

UPD Хотя, проблема с тем, что от источников освещается вся сторона обьекта - связана с тем, что точечные источники в гта - не совсем точечные.
Может позже с картинками покажу что и как, т.к. одними словами будет трудно обьяснить.

Можно же просчитывать освещение от дальности источника и его яркости, типа если источник слишком далеко и его свет не достает до объекта - не просчитывать, да?
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Июнь 08, 2016, 12:46:05 am
Проблема в том, что камерой не помотаешь и управление игроку не вернешь

Вопрос решен(спасибо DK!) - нужно занопить 16 байт по адресу 0x40703E, т.е. в CLEO так:
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). Нопить нужно лишь раз - при дальнейших запусках катсцен всё будет уже в порядке.
Таким небольшим кодом открылись просто безграничные возможности по анимированию огромных динамических сцен с интегрированным геймплеем, как в недавней игре Quantum Break (https://www.youtube.com/watch?v=sSvWUX9y8Kg).
Название: Re: Рендер тени в Vice City
Отправлено: SpitFire от Июнь 10, 2016, 12:15:08 am
У меня SB ругается на твой код, говорит, опкод не тот, да и с nopами тоже проблемы. + твои модели и твоя анимация загадили мне всю игру, после установки моделей и анимаций у меня начинают крашить анимки оружия.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Июнь 10, 2016, 09:13:04 am
Этот код для US 1.0, для CLEO 2.0.0.4 (http://cleo.li/ru/download.html), а в старом CLEO нужно заменить опкоды 0A8C на 05DF.
Про краши хз - то, что в архиве с катсценой никак не затрагивает остальную игру...
Хз короч, но у xanser-а же запустилось... :-\
Название: Re: Рендер тени в Vice City
Отправлено: mfisto от Июнь 10, 2016, 01:41:38 pm
Поставь virtual protect 1
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Июнь 11, 2016, 10:43:00 am
Апдейт(чтобы добить тему возвращения управления в катсценах): чтобы вернуть возможность заходить в меню во время катсцены(когда мы уже вернули управление методом, описанным выше), нужно выставить 0 по адресу 0xA10B63, т.е.
0A8C: write_memory 0xA10B63 size 1 value 0 virtual_protect 1Применять ПОСЛЕ запуска катсцены, МИНИМУМ через 0ms после оного. После каждого отключения катсцены(а вернее - при каждом новом запуске) значение нужно выставлять заного.
Почему бы не заблочить адрес в этом значении навсегда(или занопить его изменение)?
Ответ: в этом случае катсцены будут некорректно запускаться, так что лучше этого не делать, и менять значение каждый раз после запуска катсцены.
Таким образом, можно спокойно лазить по меню во время проигрывания катсцены(если разморозить(0) мир по адресу 0xA10B36). Скоро это появится в Main Menu Scene (http://forum.gtabuilder.ru/index.php?topic=339.0) :D
Название: Re: Рендер тени в Vice City
Отправлено: Lacrix84 от Сентябрь 19, 2016, 10:14:10 am
А каким образом тень Томми была реализована в MVL? Можно ли по аналогии перенести ее на всех остальных педов? Кто-нибудь разбирался?
Название: Re: Рендер тени в Vice City
Отправлено: DK от Сентябрь 20, 2016, 07:28:58 pm
Можно. Когда будет более-менее разобраны классы CPed в plugin-sdk, я попробую это сделать.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Октябрь 15, 2016, 07:33:48 pm
Интересное наблюдение: катсценовые тени корректнее ложатся на поверхности, а именно - замечено правильное их наложение на полностью вертикальные стены:
(http://funkyimg.com/i/2idSu.jpg)

Пруф вертикальности - обычная тень педа(игнорирует стену) в сравнении с корректной катсценовой:
(http://funkyimg.com/i/2idSv.jpg)
(http://funkyimg.com/i/2idSw.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Октябрь 15, 2016, 08:31:46 pm
Для "катсценовских" теней используется другой алгоритм "наложения".
Я позже, если найдется свободное время, подробное расскажу об этом алгоритме.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Октябрь 16, 2016, 05:29:31 am
Что интересно - "наложение" катсценовых теней имеет на всех поверхностях(в т.ч. - вертикальных) тот же небольшой отступ, что и обычные тени имеют по оси Z.
(http://funkyimg.com/i/2ifS9.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Октябрь 16, 2016, 11:16:39 am
Для создания теней используется геометрия коллизий, а не рисуемых обьектов.
Скорее всего, это так не совпадают модели коллизии и самого здания.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Октябрь 16, 2016, 02:06:49 pm
Не - совпадают они идеально(неоднократно проверял на собственных моделях) - просто в игре всегда приплюсовывается некий оффсет для всех наземных партиклов. DimZet находил его в памяти игры и уменьшал, что убирало все эти неприятные щели:
05DF: write_memory 6917580 size 4 value 1017118720 virtual_protect 1 // Понижает тени и свет ближе к землеНо вот то, что катсценовая тень плюсует оффсет еще и для вертикальных поверхностей - я узнал лишь недавно...
P.S. Чем больше узнаю о катсценовых тенях, тем больше я проклинаю тот день, когда их заметил: они же идеальны!!!*





*В сравнении со стандартными тенями, ессно...
Название: Re: Рендер тени в Vice City
Отправлено: DK от Октябрь 16, 2016, 02:36:50 pm
Попробуй так
Код: C++
  1. 05DF: write_memory 0x698DE4 size 4 value 0.1 virtual_protect 0
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Октябрь 16, 2016, 04:37:09 pm
Попробуй так
Круто! Именно тот адрес!
Короче, усилиями DimZet и DK мы имеем:
//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 монике или если уж камера вовсе "разрезает" пространство в месте наложения тени.
Ниже 0.01 ставить не советую - тени могут иногда "моргать" при определенных обстоятельтвах(уже при 0.005 появляются глитчи).
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Октябрь 16, 2016, 05:01:20 pm
UPD:
Ошибка: оффсет IG теней лучше вообще не трогать(стандартного 0.029999999 вполне достаточно): поскольку эти тени, как и любые наземные партиклы, отрисовывается сверху вниз, то и оффсет у него строго по Z.
Это значит, что при определенных крутых склонах, фактический оффсет, перпендикулярный к поверхности, может снизиться с 0.01 до 0.001 и ниже, что вызывает "моргание" теней, света и прочего:
(http://funkyimg.com/i/2ihcr.jpg)

С катсценовыми тенями такого не наблюдается, поскольку их отрисовка идет "правильно", и тот адрес, что нашел DK является фактическим оффсетом, т.е. на любой поверхности оффсет будет перпендикулярен ей и, соответственно - не будет уменьшаться, вызывая глитчи.

И снова я пускаю слюни на катсценовые тени...
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Октябрь 18, 2016, 05:55:20 am
Поэкспериментировал с тенью, хотел добиться большей насыщенности, а то столько надежд, а тень то почти не видно, но из всех значений вокруг этих адресов удалось только увеличить размер тени и развернуть угол, вобщем ничего интересного.
Изменить насыщенность удалось только с помощью настроек timecyc.dat в параметре Shdw, я так понял 255 максимально насыщенное, но хотелось бы больше, вот что вышло

(https://s6.postimg.org/rbb6ie3lt/scr_20161018021859350.jpg)

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

(https://s6.postimg.org/dvo5sxv41/scr_20161018024542980.jpg)

То есть в коде предположительно все-таки есть значение, которое может уменьшить прозрачность тем самым увеличив насыщенность тени, возможно этим параметром можно было бы и кутсценную тень усилить, но не до такой степени как в mvl, там перебор.
Название: Re: Рендер тени в Vice City
Отправлено: FrogByte от Ноябрь 18, 2016, 05:44:45 pm
Недавно разобрал классы теней, немного подсмотрел код mvl и решил попробовать прикрепить их к педам. Получилось довольно криво, но как-то работает, пока что понятия не имею, как это сделать нормально.

(http://i.imgur.com/JFymBSu.png)
(http://i.imgur.com/8PC4QxO.png)
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Ноябрь 18, 2016, 07:45:38 pm
Отлично, пошло дело, даже не верится глазам. Тени успевают за педами? Я пока вижу только два недочета, отрыв от ног и резкость в сравнении с пальмами, а так выглядит вполне рабочим вариантом.
Название: Re: Рендер тени в Vice City
Отправлено: FrogByte от Ноябрь 18, 2016, 08:07:56 pm
Отлично, пошло дело, даже не верится глазам. Тени успевают за педами? Я пока вижу только два недочета, отрыв от ног и резкость в сравнении с пальмами, а так выглядит вполне рабочим вариантом.


Да, успевают. Резкость не проблема, можно "заблюрить". В исходниках что я кидал выше, есть закомментированная строка с альтернативным способом создания тени.

Код: C++
  1. This->dwTimerUnused->Create((RwObject*)This->m_pRwObject, 8, true, 1, true);

(http://i.imgur.com/EeuDh7W.png)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Ноябрь 18, 2016, 11:03:28 pm
Круто! Но немного не понятно, как всё это может быть проще применения уже существующих катсценовых теней к педам... Там и такого отрыва от ног нет, и заблюрено достаточно...
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Ноябрь 19, 2016, 05:21:29 pm
Последний скрин отлично смотрится. У меня asi-шка к сожалению не сработала, вылет при появлении педа.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Ноябрь 19, 2016, 05:43:41 pm
у меня кстати тож чет не работает...
Название: Re: Рендер тени в Vice City
Отправлено: GHOST от Ноябрь 19, 2016, 06:52:18 pm
Плагин работает! Тени шикарные! НО.. с запущенным бендикамом, вылетает с ошибкой на рабочий стол (??)

UPD: с запущенным бендикамом.
UPD2: скриншот через принт-скрин.

  Сигнатура проблемы:
  Имя события проблемы:   APPCRASH
  Имя приложения:   gta-vc.exe
  Версия приложения:   0.0.0.0
  Отметка времени приложения:   00000000
  Имя модуля с ошибкой:   shadow.asi
  Версия модуля с ошибкой:   0.0.0.0
  Отметка времени модуля с ошибкой:   582f06f8
  Код исключения:   c0000005
  Смещение исключения:   0000111f
  Версия ОС:   6.1.7600.2.0.0.256.1
  Код языка:   1049
  Дополнительные сведения 1:   0a9e
  Дополнительные сведения 2:   0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:   0a9e
  Дополнительные сведения 4:   0a9e372d3b4ad19135b953a78882e789

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419 (http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419)

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt
Название: Re: Рендер тени в Vice City
Отправлено: FrogByte от Ноябрь 20, 2016, 06:47:16 pm
Обновил, в этот раз сделал чуть менее криво, вылетать сразу же после загрузки теперь не должно.
Но пока остались некоторые из проблем:
    Рандомный вылет после сворачивания+разворачивания игры на d3d device reset.
    Рандомный вылет из-за обнуления указателя на RwTexture.
    Тени рисуются даже когда они не в области видимости камеры.
    Память выделенная под CCutsceneShadow в структуре CPed не освобождается.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Ноябрь 21, 2016, 06:51:25 am
Мне нравится и в таком варианте. Если не приглядываться, даже на отрыв тени можно не обращать внимания. Единственно, что пока бросается в глаза - это мелькающие длинные полосы с противоположной стороны.

(https://s6.postimg.org/ygcfbr3r5/scr_20161121032930118.jpg)
Название: Re: Рендер тени в Vice City
Отправлено: DK от Ноябрь 22, 2016, 08:03:26 pm
Версия для сборки с Plugin-SDK VC.
Не идеальный код, но очень короткий.
Код: C++
  1. #include "plugin_vc.h"
  2. #include "game_vc\CCutsceneShadow.h"
  3.  
  4. using namespace plugin;
  5.  
  6. class PedShadows {
  7. public:
  8.     class PedShadow {
  9.     public:
  10.         CCutsceneShadow *m_pRTShadow;
  11.  
  12.         PedShadow(CPed *) : m_pRTShadow(nullptr) {}
  13.         ~PedShadow() { delete m_pRTShadow; }
  14.     };
  15.  
  16.     static PedExtendedData<PedShadow> pedShadow;
  17.  
  18.     static void UpdatePedShadow(CPed *ped, float sideX, float sideY, float displacementX, float displacementY, float frontX, float frontY) {
  19.         CCutsceneShadow *pShadow = pedShadow.Get(ped).m_pRTShadow;
  20.         float _savedVal = ped->m_fEventOrThreatX;
  21.         *reinterpret_cast<CCutsceneShadow **>(&ped->m_fEventOrThreatX) = pShadow;
  22.         if (pShadow) {
  23.             if (pShadow->IsInitialized())
  24.                 pShadow->UpdateForCutscene();
  25.             plugin::Call<0x56D5C0>(ped, sideX, sideY, displacementX, displacementY, frontX, frontY);
  26.         }
  27.         else
  28.             plugin::Call<0x56D9F0>(ped, sideX, sideY, displacementX, displacementY, frontX, frontY);
  29.         ped->m_fEventOrThreatX = _savedVal;
  30.     }
  31.  
  32.     static void CreatePedShadow(CPed *ped, int) {
  33.         PedShadow &shadow = pedShadow.Get(ped);
  34.         if (!shadow.m_pRTShadow) {
  35.             shadow.m_pRTShadow = new CCutsceneShadow;
  36.             shadow.m_pRTShadow->Create(ped->m_pRwObject, 10, 1, 1, 1);
  37.         }
  38.     }
  39.    
  40.     PedShadows() {
  41.         patch::RedirectCall(0x56DCBA, UpdatePedShadow);
  42.         Events::pedSetModelEvent += CreatePedShadow;
  43.     }
  44. } shadows;
  45.  
  46. PedExtendedData<PedShadows::PedShadow> PedShadows::pedShadow;
Для сборки нужен последний plugin-vc с обновлениями.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Ноябрь 22, 2016, 10:09:06 pm
Версия для сборки с Plugin-SDK VC.
Не идеальный код, но очень короткий.
Может кто скомпилить это? У меня пару дней назад хард полетел, и я еще не установил нужный софт, версия FrogByte почему-то не работает, а охота уже глянуть на тени у педов!
Название: Re: Рендер тени в Vice City
Отправлено: DK от Ноябрь 23, 2016, 02:47:01 am
С тенями дейстивтельно какая-то хрень происходит при потере девайса... Наверное, это случается и со стандартными катсценовскими тенями. Я ещё думал, зачем в СА добавили код для перезагрузки растров теней.
Какой-то баг в RenderWare, скорее всего. Что странно, ведь там продумана автоматическая перезагрузка видео-растров при пересоздании девайса.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Ноябрь 23, 2016, 04:28:16 am
Shagg_E, второй вариант от FrogByte должен работать, посмотри второе вложение, причем у меня не проявилось еще ни одного вылета, я использую оконный режим, может это сохраняет девайс. Хорошо бы действительно вариант DK тоже иметь в скомпилированном виде хотя бы для теста, не каждый заморочится с SDK. Больше всего в этом всем напрягает присутствие всяческих лишних теневых выбросов, которые через какое-то время наводят на мысль вообще отказаться от использования теней, может быть получится допилить со временем.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Ноябрь 23, 2016, 08:59:37 pm
Shagg_E, второй вариант от FrogByte должен работать
Упс - не заметил: действительно работает! Конечно, есть косяки, но всё же - впечатляет!
Что интересно: как и у катсценовых моделей, освещение не совпадает с солнцем, однако тень строится каким-то другим способом.
В связи с чем я повторю вопрос: неужели всё это проще примитивного применения педам теней катсценовых персонажей? Я думал, тут можно будет запилить похожий трюк, как когда динамическое освещение нацепили на статичные объекты...

Наверное, это случается и со стандартными катсценовскими тенями.
Не замечал. Единственный минус катсценовых теней(помимо несовпадения с солнцем) - они пропадают(обрезаются) где-то в районе 2-3х метров над землей. Я имею в виду, если персонаж либо выше 2-3х метров, либо высоко "подпрыгнет" относительно поверхности, на которую ложится тень - та обрежется на том месте, где у персонажа уровень 2-3х метров. Про 2-3 метра(юнита) - инфа не точная(нечем было измерить), но очень близкая к реальности.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Январь 11, 2017, 05:34:56 am
Если удалось сделать тень в движении, получится ли преобразовать этот алгоритм для неподвижных объектов? Перебор всех объектов можно осуществить например в функции 0x488810 CEntity::PreRender, как я показывал тут http://forum.gtabuilder.ru/index.php?topic=96.msg1918#msg1918 (http://forum.gtabuilder.ru/index.php?topic=96.msg1918#msg1918)
Название: Re: Рендер тени в Vice City
Отправлено: SomeRandomGuy от Ноябрь 13, 2017, 12:07:38 pm
Позор, что он не может работать вместе с SkyGFX из-за функции d3d8to9, которая разбивает плагин теней
Название: Re: Рендер тени в Vice City
Отправлено: Lacrix84 от Ноябрь 16, 2017, 12:11:09 am
А сделать такие же тени для транспорта можно?
Название: Re: Рендер тени в Vice City
Отправлено: spartaque12 от Ноябрь 26, 2017, 05:59:21 am
Позор, что он не может работать вместе с SkyGFX из-за функции d3d8to9, которая разбивает плагин теней
при чем тут позор , тень может работать только на стоковом d3d8 , со skygfx'ом она не дружит т.к. там враппер , также и мвл не дружит со skygfx
Название: Re: Рендер тени в Vice City
Отправлено: Lacrix84 от Февраль 26, 2018, 02:10:26 pm
Заметил странный глюк с shadows.asi, а именно вылет игры после того, как тебя арестовала полиция. Установлено много других модов, но стоит убрать shadows.asi - и все нормально, с ним стабильное зависание. Прошу проверить этот момент.
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Февраль 26, 2018, 03:13:48 pm
Заметил странный глюк с shadows.asi, а именно вылет игры после того, как тебя арестовала полиция. Установлено много других модов, но стоит убрать shadows.asi - и все нормально, с ним стабильное зависание. Прошу проверить этот момент.
FrogByte куда-то пропал, у меня пока навыков недостаточно чтобы этим заниматься, а другим видимо не до этого, так что... :(
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Февраль 26, 2018, 04:43:01 pm
Ошибка и после ареста, и после "потрачено", что-то там с анимацией нарушается, судя по адресу. Это же не готовый мод, как сказал сам автор:
Получилось довольно криво, но как-то работает, пока что понятия не имею, как это сделать нормально.
Название: Re: Рендер тени в Vice City
Отправлено: Lacrix84 от Февраль 26, 2018, 06:07:54 pm
Заметил странный глюк с shadows.asi, а именно вылет игры после того, как тебя арестовала полиция. Установлено много других модов, но стоит убрать shadows.asi - и все нормально, с ним стабильное зависание. Прошу проверить этот момент.
FrogByte куда-то пропал, у меня пока навыков недостаточно чтобы этим заниматься, а другим видимо не до этого, так что... :(

Ты у себя попробовал, проблема в плагине, а не в куче других модов у меня?
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Март 02, 2018, 06:42:40 pm
Ты у себя попробовал, проблема в плагине, а не в куче других модов у меня?
Да, пробовал - как и у xanser, у меня стабильный вылет не только после ареста, но и после смерти. Проблема с удалением игрока, я думаю.
Название: Re: Рендер тени в Vice City
Отправлено: xanser от Май 26, 2023, 04:24:23 am
Возможно будет продолжение темы. Хотелось бы верить, что и для вайса запилят такой мод:

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)
Название: Re: Рендер тени в Vice City
Отправлено: Shagg_E от Май 26, 2023, 04:42:12 am
Да, в рамках reVC это уже стало доступно. Чуть позже покажу, как оно выглядит (пока кое-какие проблемы фиксю)
Название: Re: Рендер тени в Vice City
Отправлено: Eden от Май 27, 2023, 11:40:49 am
Возможно будет продолжение темы. Хотелось бы верить, что и для вайса запилят такой мод:

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)
Все-же на renderhook было-бы куда как более прогрессивно.
https://www.youtube.com/watch?v=NLJTb3IWCZ4 (https://www.youtube.com/watch?v=NLJTb3IWCZ4)
https://www.youtube.com/watch?v=ZVimBMXMGnQ (https://www.youtube.com/watch?v=ZVimBMXMGnQ)

Но судя по всему разработка этого проекта на тройку и вайс окончательно заглохла.
На СА напротив ребята еще вроде еще даже что-то мутят.
https://www.youtube.com/watch?v=82-B-12barQ (https://www.youtube.com/watch?v=82-B-12barQ)