Автор Тема: Отражения воды  (Прочитано 8594 раз)

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Отражения воды
« : Март 15, 2015, 06:24:56 pm »
В общем, xanser уже работал с водой, так что эта тема по большей части к нему, но вдруг кто еще что-то знает..
В вайсе вода имеет отражения лишь в небольшом радиусе, и это убивает возможность создания "шейдерной водички"(т.е. замены стандартного отражения на реалтаймового) - граница воды с отражением и без находится слишком близко(на расстоянии около 30 игровых метров):
GTA vice city sea look like IV


Собственно, вопрос: как увеличить дальность прорисовки стандартных отражений воды в Vice City? Хотя бы раз в 10 увеличить, тогда шейдерные отражения выглядили бы норм.
« Последнее редактирование: Март 15, 2015, 06:27:30 pm от Shaggy »

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Отражения воды
« Ответ #1 : Март 17, 2015, 03:42:19 pm »
Шейдерная вода похожа на жидкое стекло. Расширить я пока не смог, нашел что эта часть воды рисуется здесь:

Код: ASM
  1. .text:005C1579 16C FF 57 48           call    dword ptr [edi+48h]

Еще интересный параметр попался тут 0x69CD38 (float = 16.0), им можно регулировать рябь на воде, сделать более речной что-ли.

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Отражения воды
« Ответ #2 : Март 17, 2015, 07:33:47 pm »
Код: ASM
  1.  call    dword ptr [edi+48h]

xanser, Это виртуальный метод. Тут нужно понять что у нас находиться в edi по смещению +0x48, там находиться адрес самого метода.

Цитировать
0x69CD38
По поводу этого параметра, надо уже смотреть где он используется, кнопкой X, смотреть места. Возможно это константа, если не было записи в него.
« Последнее редактирование: Март 17, 2015, 07:40:23 pm от Sektor »

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Отражения воды
« Ответ #3 : Март 18, 2015, 05:42:52 am »
Может  быть нужен даже не сам метод, а то как формируются его параметры, скорее всего в них и размер области с отражением, но мне пока непонятно, где именно.
По пути сделал еще один фикс с отражением солнечных лучей для расширенной воды:



Сделал это тут 0x542E4E (dword) 1440 поменял на 2000 и 0x542E66 (byte) 20 поменял на 127

Оффлайн GHOST

  • Прохожий
  • *
  • Сообщений: 73
  • Репутация: +14/-0
  • RUS-CASA (2008 - 2010)
    • Просмотр профиля
Re: Отражения воды
« Ответ #4 : Март 18, 2015, 08:38:13 am »
По пути сделал еще один фикс с отражением солнечных лучей для расширенной воды

Мм.. Потом скачать можно будет?)
Друга нельзя купить, но его можно продать...

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 102
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: Отражения воды
« Ответ #5 : Март 18, 2015, 10:34:27 am »
Шейдерная вода похожа на жидкое стекло. Расширить я пока не смог, нашел что эта часть воды рисуется здесь:

Код: ASM
  1. .text:005C1579 16C FF 57 48           call    dword ptr [edi+48h]

Еще интересный параметр попался тут 0x69CD38 (float = 16.0), им можно регулировать рябь на воде, сделать более речной что-ли.
Видимо ты нашёл адрес, отвечающий за какой-то параметр сетки поверхности воды. Надо бы включить режим отображения сетки, чтобы точно узнать, что с ней происходит
P.S. Визуально, 0x69CD4C делает что-то аналогичное

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Отражения воды
« Ответ #6 : Март 19, 2015, 02:43:23 am »
Цитировать
Шейдерная вода похожа на жидкое стекло
Да знаю, но это просто автор видео так стремно настроил. Если всё сделать грамотно - вода будет потрясная. А уж с новой рябъю на воде - так и подавно.

Главное - найти способ увеличить дальность этой отражающейся воды...

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Отражения воды
« Ответ #7 : Март 19, 2015, 05:33:35 am »
Shaggy, попробуй еще рябь поменять вот этим параметром 0x69CD44 (float, хотя не совсем так) вместо первого, я поставил 3.0, у меня поинтереснее вода стала.

GHOST, потом я может свой WaterMod дополню. Кто-то переписывал его на Cleo, можно просто добавить туда, все адреса я написал.

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 102
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: Отражения воды
« Ответ #8 : Март 19, 2015, 09:51:55 am »
Цитировать
Шейдерная вода похожа на жидкое стекло
Да знаю, но это просто автор видео так стремно настроил. Если всё сделать грамотно - вода будет потрясная. А уж с новой рябъю на воде - так и подавно.

Главное - найти способ увеличить дальность этой отражающейся воды...
Нашёл что-то похожее на рябь, вот 0x69CD0C (float)

А также...
0x69CCF0 (float) - конечный размер шлейфа от лодки
0x69CCE0 (float) - начальный размер шлейфа от лодки
0x69CD30 (float) - высота бликов над поверхностью воды
0x69CD2C (float) - высота волн
0x69CD20 (float) - размер сегмента
0x69CCDC (float) - коэффициент изменения размера шлейфа(?)
« Последнее редактирование: Март 19, 2015, 10:18:43 am от Prographer »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Отражения воды
« Ответ #9 : Март 19, 2015, 06:13:02 pm »
Всё это вместе изменит вид воды вкорень! Жаль, дальность отражающейся воды пока никто не нашел:(

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 102
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: Отражения воды
« Ответ #10 : Март 19, 2015, 08:23:27 pm »
Всё это вместе изменит вид воды вкорень! Жаль, дальность отражающейся воды пока никто не нашел:(
Возможно, дальность отражений лежит в одном или нескольких этих адресах
0x69CC00 (float)
0x69CBFC (float)
0x69CBF8 (float)
0x69CBF4 (float)
0x69CBF0 (float)


Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Отражения воды
« Ответ #11 : Март 20, 2015, 09:19:47 am »
Покопавшись во всех этих адресах, а также в этой части памяти(отрисовка воды) вручную, а именно - методом тыка, откопал еще несколько адресов, но почти все они приводили к тупым результатам.
В итоге, отфильтровал всё добро,  и вот что получилось(на скринах не особо заметно, но в игре чувствуется):
скрины "было/стало"



05DF: write_memory 0x69CBF4 size 4 value 4.0 virtual_protect 0
05DF: write_memory 0x69CBFC size 4 value 1.0 virtual_protect 0
05DF: write_memory 0x69CC00 size 4 value 4.0 virtual_protect 0
05DF: write_memory 0x69CD0C size 4 value 0.12 virtual_protect 0
05DF: write_memory 0x69CD2C size 4 value 0.1 virtual_protect 0
05DF: write_memory 0x69CD3C size 4 value 0.59 virtual_protect 0
05DF: write_memory 0x69CD44 size 4 value 2.5 virtual_protect 0

Накатал скрипт(в аттаче), который просто включает новые волны после нажатия N+7 и возвращает старые при повторном нажатии(прост для наглядного теста).
Вот код, ес интересно:
{$CLEO .cs}

//-------------MAIN---------------
thread 'NEWWWVS'

:NEWWATERWAVES_02
wait 0
if and
05EE:   key_pressed 78  // VK_N
05EE:   key_pressed 55  // VK_7
jf @NEWWATERWAVES_02

:NEWWATERWAVES_04
wait 0
if or
85EE:   NOT key_pressed 78  // VK_N
85EE:   NOT key_pressed 55  // VK_7
jf @NEWWATERWAVES_04
05DF: write_memory 0x69CBF4 size 4 value 4.0 virtual_protect 0
05DF: write_memory 0x69CBFC size 4 value 1.0 virtual_protect 0
05DF: write_memory 0x69CC00 size 4 value 4.0 virtual_protect 0
05DF: write_memory 0x69CD0C size 4 value 0.12 virtual_protect 0
05DF: write_memory 0x69CD2C size 4 value 0.1 virtual_protect 0
05DF: write_memory 0x69CD3C size 4 value 0.59 virtual_protect 0
05DF: write_memory 0x69CD44 size 4 value 2.5 virtual_protect 0

:NEWWATERWAVES_12
wait 0
if and
05EE:   key_pressed 78  // VK_N
05EE:   key_pressed 55  // VK_7
jf @NEWWATERWAVES_12

:NEWWATERWAVES_14
wait 0
if or
85EE:   NOT key_pressed 78  // VK_N
85EE:   NOT key_pressed 55  // VK_7
jf @NEWWATERWAVES_14
05DF: write_memory 0x69CBF4 size 4 value 8.0 virtual_protect 0
05DF: write_memory 0x69CBFC size 4 value 2.0 virtual_protect 0
05DF: write_memory 0x69CC00 size 4 value 1.0 virtual_protect 0
05DF: write_memory 0x69CD0C size 4 value 0.1 virtual_protect 0
05DF: write_memory 0x69CD2C size 4 value 0.05 virtual_protect 0
05DF: write_memory 0x69CD3C size 4 value 0.39 virtual_protect 0
05DF: write_memory 0x69CD44 size 4 value 2.39 virtual_protect 0
jump @NEWWATERWAVES_02
Можно будет сделать что-то типа дополнения к Water Mod, которое изменяет волны. Не то чтобы волны стали убер-мега реалистичными, но, на мой взгляд, стали "живее" без неприятных последствий.

Еще нашел адреса увеличения дальности прорисовки этих "физических"(анимированных) волн:
69CD70: сменил с 70.0 на 10000.0
69CD74: сменил с 160.0 на 10000.0


Правда появился баг: теперь "анимированные" волны "просачиваются" сквозь "дальнюю" воду, создавая артефакты на отражении солнца:


Дальность прорисовки того самого отражения, о котором я писал в первом посте - так и не нашел  :'(

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 102
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: Отражения воды
« Ответ #12 : Март 20, 2015, 10:05:28 am »
Придётся покопать ещё немного, наверняка адрес есть. Но есть и свои плюсы. Нашли немало новых интересных адресов :)

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Отражения воды
« Ответ #13 : Март 21, 2015, 10:22:50 am »
Правда появился баг: теперь "анимированные" волны "просачиваются" сквозь "дальнюю" воду, создавая артефакты на отражении солнца

Отражение солнца можно приподнять тут 0x6958D8 (float), например на уровень воды + высоту волн, это вроде бы выглядит не заметно.

Оффлайн ilufir

  • Прохожий
  • *
  • Сообщений: 73
  • Репутация: +2/-0
  • Я пытался
    • Просмотр профиля
Re: Отражения воды
« Ответ #14 : Сентябрь 24, 2016, 05:04:58 pm »
Кхм. Пришла ко мне такая мысль, что где-то есть адрес памяти, отвечающий за количество полигонов воды (так как плоскость генерируется программно же). И если увеличить его значение, то мы получим два результата(в зависимости от того, как работает формула генерации этих волн):
а)мы получим более частые, но очень плавные волны, на которых будет красиво ложиться отражение
б)волны останутся того же размера, но будут более сглаженные из-за количества полигонов
(открыл IDA-базу в первый раз, ничего не понял, простите)