Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
xrModder
Цитата(cjayho @ 13.04.2019, 19:03) *
Вопрос - никто ли не пытался исправить в двигле ТЧ баг с солнцем? Либо я не там копаю либо все дружно плакали кололись но продолжали юзать скриптовый костыль.

Какой именно баг?
macron
Цитата(cjayho @ 13.04.2019, 16:03) *
никто ли не пытался исправить в двигле ТЧ баг с солнцем?

Полагаю, в движках из исходников давно исправили. А в Xray Extensions (включая portable) для 1.0006 есть кривая правка, в чистом ТЧ должна работать. Но её нельзя использовать в модах со скриптовыми выбросами/погодой, а то заглючат.
cjayho
QUOTE (macron @ 13.04.2019, 17:10) *
QUOTE (cjayho @ 13.04.2019, 16:03) *
никто ли не пытался исправить в двигле ТЧ баг с солнцем?

Полагаю, в движках из исходников давно исправили. А в Xray Extensions (включая portable) для 1.0006 есть кривая правка, в чистом ТЧ должна работать. Но её нельзя использовать в модах со скриптовыми выбросами/погодой, а то заглючат.


В том то и дело что не нашел где в двиглах с исходниками поправили. Ну или по крайней мере как.
RayTwitty
Цитата(macron @ 13.04.2019, 18:10) *
А в Xray Extensions (включая portable) для 1.0006 есть кривая правка, в чистом ТЧ должна работать. Но её нельзя использовать в модах со скриптовыми выбросами/погодой, а то заглючат.

Я же фиксил вроде. У меня на ЧАЭС выброс нормально работает.
ForserX
Цитата(Zagolski @ 10.04.2019, 02:53) *
ForserX, А там у вас как сделано, к тем опциям "111265453" добавляется crc в название файла? Ну в принципе да, такое можно и на постоянку сделать. Весьма удобно и работать будет быстрее, чем с полной перекомпиляцией.

Если мне память не изменяет, то Giperion завозил в начало файла RealCrc32, который включал в себя нормальный crc32 шейдера. Правда это было давно, ломалось пару раз, потом фиксилось, что сейчас там происходит - не могу сказать, смотреть надо, но работает.
cjayho
QUOTE (cjayho @ 13.04.2019, 17:47) *
QUOTE (macron @ 13.04.2019, 17:10) *
QUOTE (cjayho @ 13.04.2019, 16:03) *
никто ли не пытался исправить в двигле ТЧ баг с солнцем?

Полагаю, в движках из исходников давно исправили. А в Xray Extensions (включая portable) для 1.0006 есть кривая правка, в чистом ТЧ должна работать. Но её нельзя использовать в модах со скриптовыми выбросами/погодой, а то заглючат.


В том то и дело что не нашел где в двиглах с исходниками поправили. Ну или по крайней мере как.



уже нашел.

Зы. Я удивляюсь с некоторых программистов в комьюнити. Первым делом, под предлогом "а нафиг он нужен, работает и так" выпиливают xrCPU_pipe, интринсики для работы с инструкциями SSE, а я потом удивляюсь почему их мегадвигло еле ползает на том железе на котором оригинал летает на максималках...
xrModder
Цитата(cjayho @ 17.04.2019, 18:02) *
Я удивляюсь с некоторых программистов в комьюнити. Первым делом, под предлогом "а нафиг он нужен, работает и так" выпиливают xrCPU_pipe, интринсики для работы с инструкциями SSE, а я потом удивляюсь почему их мегадвигло еле ползает на том железе на котором оригинал летает на максималках...

Ждём репозитория от вас biggrin.gif
ForserX
Цитата(cjayho @ 17.04.2019, 15:02) *
Зы. Я удивляюсь с некоторых программистов в комьюнити. Первым делом, под предлогом "а нафиг он нужен, работает и так" выпиливают xrCPU_pipe, интринсики для работы с инструкциями SSE, а я потом удивляюсь почему их мегадвигло еле ползает на том железе на котором оригинал летает на максималках

Это ты о чём?
ForserX
Вообще, я не видел, чтоб его где-то выпиливали. Его переносят в xrEngine. Это первое.
Новые компиляторы могут и сами в инструкции, это второе
cjayho
QUOTE (ForserX @ 17.04.2019, 20:55) *
Вообще, я не видел, чтоб его где-то выпиливали. Его переносят в xrEngine. Это первое.
Новые компиляторы могут и сами в инструкции, это второе


Зачем далеко ходить, openxray ЧН и ЗП.
А про то что новые компиляторы умеют в инструкции, это вы разработчикам ffmpeg например расскажите, они вас с интересом выслушают.
ForserX
Цитата(cjayho @ 17.04.2019, 22:40) *
openxray ЧН и ЗП.

Нууу, я сомневаюсь, что это так. В любом случае, в x64 этот код работать не будет, ибо __asm запрещён.
ForserX
cjayho, я тут посмотрел код и хочу тебе сказать одну вещь. Ты очень сильно облажался.
Все SSE скиннинги нужны для одной простой вещи: GSC придумали такую вещь, как _Render_soft, который в свою очередь в игре не выполнится НИКОГДА, т.к. все меши всегда имеют dwVertType.

Кому интересно, идите в SkeletonX.cpp
cjayho
QUOTE (ForserX @ 17.04.2019, 22:44) *
QUOTE (cjayho @ 17.04.2019, 22:40) *
openxray ЧН и ЗП.

Нууу, я сомневаюсь, что это так. В любом случае, в x64 этот код работать не будет, ибо __asm запрещён.



Инлайн асм в .cpp файле запрещен на х64, а на асме писать вполне реально: Нажмите для просмотра прикрепленного файла
Достаточно вынести асм в отдельный файлик

QUOTE (ForserX @ 17.04.2019, 23:18) *
GSC придумали такую вещь, как _Render_soft, который в свою очередь в игре не выполнится НИКОГДА


на р2 да, согласен

Иначе я вообще не понимаю зачем в ЗП движке xrcpu_pipe перепилили, убрали оттуда устаревший 3dnow! но все же оставили эти все скиннинги.
Xottab_DUTY
cjayho, а ну ка, подскажи, где это мы вырезали ASM-код? xrCPU_Pipe никогда нами так просто не вырезался. У нас весь код этого модуля был влит в xrCore. Вместе с ASM-ом.
Я даже проверил это и легко нашёл весь тот код, что был в xrCPU_Pipe.

Наоборот, вместо ASM-а был вырезан голый C++ код, который мне пришлось возвращать, чтобы завести движок на x64 =)

Цитата(cjayho @ 18.04.2019, 02:42) *
Иначе я вообще не понимаю зачем в ЗП движке xrcpu_pipe перепилили, убрали оттуда устаревший 3dnow! но все же оставили эти все скиннинги.

Скиннинги могут вполне себе использоваться на R1 и в SDK, который тоже R1..
iOrange
Цитата(cjayho @ 17.04.2019, 23:42) *
Достаточно вынести асм в отдельный файлик

В наше время разумнее использовать интринсики а не голый асм.

PS. Простите если не в тему, просто темка в топе висела, вот и заглянул.
abramcumner
Цитата(Xottab_DUTY @ 18.04.2019, 05:51) *
Скиннинги могут вполне себе использоваться на R1 и в SDK, который тоже R1..

Только зависимость производительности от SSE в этом случае обратная. Убираем SSE(делаем скиннинг в шейдерах) - производительность растет smile.gif
Xottab_DUTY
abramcumner, ясное дело. Этот скиннинг делался только для железа, которое не может в шейдеры. cool.gif
ForserX
cjayho, яхз, что там в р1. У нас его нет.
stalkergoshawk
Здравствуйте. Делал кто адаптацию для Absolute Nature 4.04 CoP, AtmosFear 3 CoP ? Там вроде файлы xrRender.dll изменены, кто нибудь знает что там изменено и как это на исходниках сделать, чтобы мод с движком на исходниках работал?
WolfHeart
Цитата(stalkergoshawk @ 24.04.2019, 09:58) *
Делал кто адаптацию для Absolute Nature 4.04 CoP, AtmosFear 3 CoP ? Там вроде файлы xrRender.dll изменены

С чего ты это взял?
stalkergoshawk
WolfHeart, Absolute Nature 4.04 CoP ставиться поверх AtmosFear 3 CoP. в них обоих по мимо гамедаты в движке изменены файлы xrRender 1-4.dll и xrGame.dll. Отсюда и вопрос, что в этих файлах движка изменено и как это на исходниках сделать чтобы к своему движку припаять?
WolfHeart
stalkergoshawk, Ты задал вопрос:
Цитата(stalkergoshawk @ 24.04.2019, 09:58) *
Делал кто адаптацию для Absolute Nature 4.04 CoP, AtmosFear 3 CoP ?

Я на скрине показал тебе перевод из офф. описания Absolute_Nature_4.04_CoP:
Цитата
Description
New Absolute Nature with hundreds more optimized trees. 8 different styles. All of them fully compatible with AtmosFear 3 and latest MISERY 2.2.

Перевод гугл-транслит:
Цитата
Новая Абсолютная Природа с сотнями более оптимизированных деревьев. 8 разных стилей. Все они полностью совместимы с AtmosFear 3 и последней версией MISERY 2.2.

Исходя из этого, возникает резонный вопрос: "Зачем нужна еще какая-то адаптация, если они и так полностью совместимы?"
Или офф. источник лжет?
Источник: https://www.moddb.com/mods/atmosfear-for-ca...solute-nature-4
stalkergoshawk
WolfHeart, Извиняюсь, мой вопрос видимо показался непонятным. дело вот какое, я делаю движок на исходниках для своего мода и хочу туда еще AtmosFear 3 CoP и Absolute Nature 4.04 CoP поставить. Но в них правки файлов xrRender 1-4.dll и xrGame.dll сделаны в виде бинарных патчей. если эти моды просто поставить то игра не запускается так как их xrRender 1-4.dll и xrGame.dll не совместимы с моим движком. поэтому я спросил делал ли кто адаптацию этих модов на основе исходников для других модов или же знает что там изменено и как это реализовать. В AtmosFear 3 CoP в xrRender 1-4.dll если я правильно понимаю добавлена возможность править положение солнца из конфигов, как это реализовать? есть ли там еще какие то правки неоходимые для работы AtmosFear 3 CoP? А что изменено в xrRender 1-4.dll и xrGame.dll в Absolute_Nature_4.04_CoP мне вообще неизвестно.
Xottab_DUTY
stalkergoshawk, в xrGame там просто изменённый FOV, в рендерах правки на дальность и плотность травы. Ўсё, больш няма правок.
Эти правки уже в интернетах есть.
Zagolski
Собрался заменить локации ТЧ на локи ЧН. Кто бы что не говорил, а геометрия там качественнее, особенно это касается деревьев. И чтоб без глубокого копания в СДК. Непосредственно координаты там идентичные, различается только аи-сетка. Аллспавн понятно дело из-за этого не совместим в первую очередь из-за разных левел-вертексов. Так вот, пришла идея отвязать инициализацию в движке спавна от lv (возможно и от gv, а локацию определять только по начальному gv), оставить только координаты. По идее в этом случае спавн должен и от ТЧ нормально функционировать на аи-сетке от ЧН. Там останется малость те или иные координаты подправить, в основном это ящики для хабаров. Ну и вейпоинты. Кто-нибудь делал нечто подобное, реально ли это замостырить? Или какие-нибудь подводные камни всплывут и браться не стоит?
RayTwitty
Цитата(stalkergoshawk @ 24.04.2019, 09:58) *
Здравствуйте. Делал кто адаптацию для Absolute Nature 4.04 CoP, AtmosFear 3 CoP ? Там вроде файлы xrRender.dll изменены, кто нибудь знает что там изменено и как это на исходниках сделать, чтобы мод с движком на исходниках работал?

В рендерах, насколько я помню, были правки движения солнца по конфигам и (возможно) фикс растянутого неба. Их изначально делал Колмогор, на этом форуме даже обсуждение было.
Позже все эти правки были перенесены в X-Ray extensions: https://github.com/KD87/xray-extensions/tre...r/3967_cop_1602

В исходниках наверняка уже давно поправили эти косяки.

Цитата(Zagolski @ 24.04.2019, 20:18) *
Кто-нибудь делал нечто подобное, реально ли это замостырить?

Единственное, в ACDC от K.D. была возможность массовой замены вертексов. Поддержку разных спавнов в движке вроде никто не делал.

Цитата(Zagolski @ 24.04.2019, 20:18) *
геометрия там качественнее, особенно это касается деревьев.

Ну вот деревья там только и отличаются, в остальном просто ТЧ локации с накиданными ящиками и трубами biggrin.gif
abramcumner
Цитата(Zagolski @ 24.04.2019, 20:18) *
Или какие-нибудь подводные камни всплывут и браться не стоит?

У гейм-вертексов(граф-поинтов) разные системы Location.
В аи-нодах в ЧН добавилось доп. поле "прикрытость сидя".
cjayho
QUOTE (stalkergoshawk @ 24.04.2019, 15:10) *
В AtmosFear 3 CoP в xrRender 1-4.dll если я правильно понимаю добавлена возможность править положение солнца из конфигов, как это реализовать?


солнце из конфигов делается не через дллки а в xrEngine, в environment.cpp находим

CODE
void CEnvironment::calculate_dynamic_sun_dir()
{


и добавляем return чтоб ф-ция не вьіполнялась:

CODE
void CEnvironment::calculate_dynamic_sun_dir()
{
    return;
Yara
Цитата(Zagolski @ 24.04.2019, 23:18) *
Собрался заменить локации ТЧ на локи ЧН. Кто бы что не говорил, а геометрия там качественнее, особенно это касается деревьев. И чтоб без глубокого копания в СДК.

Т.е. заменить без перекомпила? Так у чн-лок другой тип сглаживания (баги с затемнением поверхностей); если использовать исходник, то перегнать через save selection всю статику (scene_object.part) в тч нельзя (зато обратно можно), пока один вариант - сделать декомпил локи, и заменить все объекты из исходника и пропсов с чн/зп (предварительно их в 3д редакторе пересохранить с тч-сглаживанием).

пс: сам хотел такое сделать, но в тч (даже с различными движ.правками) нет некоторых плюсов зп (граф.плюшки не в счёт). Остановился на переносе зп-текстур в тч-сдк, сами локи уже в сценах майки с некоторыми правками, а там их и на тч-текстуры перевести несложно.
cjayho
QUOTE (Yara @ 24.04.2019, 21:14) *
в тч (даже с различными движ.правками) нет некоторых плюсов зп (граф.плюшки не в счёт).


Как по мне графон у р2 тч самый лучший из всех сталкерских рендеров, надо просто его уметь правильно готовить smile.gif

я уже неоднократно показывал скриншоты.
Xottab_DUTY
А в OpenXRay это выключается простым переключением в конфиге wink.gif
Yara
Цитата(cjayho @ 25.04.2019, 01:25) *
Как по мне графон у р2 тч самый лучший из всех сталкерских рендеров, надо просто его уметь правильно готовить smile.gif

Говорю же, дело не в рендере, хотя предпочёл бы r1 с работающими на нём бампами и маской террейна.
cjayho
QUOTE (Xottab_DUTY @ 24.04.2019, 22:00) *
А в OpenXRay это выключается простым переключением в конфиге wink.gif


У меня тоже smile.gif
RayTwitty
Цитата(Yara @ 24.04.2019, 22:14) *
Т.е. заменить без перекомпила? Так у чн-лок другой тип сглаживания (баги с затемнением поверхностей); если использовать исходник, то перегнать через save selection всю статику (scene_object.part) в тч нельзя (зато обратно можно), пока один вариант - сделать декомпил локи, и заменить все объекты из исходника и пропсов с чн/зп (предварительно их в 3д редакторе пересохранить с тч-сглаживанием).

Компиляторы ТЧ не используют исходное сглаживание моделей - они устанавливают свое, согласно параметру Smooth angle в LE.
Zagolski
Цитата(abramcumner @ 24.04.2019, 21:42) *
У гейм-вертексов(граф-поинтов) разные системы Location.
В аи-нодах в ЧН добавилось доп. поле "прикрытость сидя".

Цитата(Yara @ 24.04.2019, 22:14) *
Т.е. заменить без перекомпила? Так у чн-лок другой тип сглаживания (баги с затемнением поверхностей); если использовать исходник, то перегнать через save selection всю статику (scene_object.part) в тч нельзя (зато обратно можно), пока один вариант - сделать декомпил локи, и заменить все объекты из исходника и пропсов с чн/зп (предварительно их в 3д редакторе пересохранить с тч-сглаживанием).

Я забыл сообщить, что двиг у меня ЗП, аи-сетка тч-шная, но ЗП формата, спавн тоже (я его не через СДК делал, а через ACDC конвертанул ТЧ->ЗП). Нужно только заменить геометрию лок на ЧН и поставить аи-сетку от этих лок их родную. Но она не совместима с нынешним ТЧ спавном из-за разных левел-вертексов. Массово их конвертировать не получится, лв ведь нужно не просто сдвигать, а приспосабливать под новую аи-сетку.
Можно каждую ЧН локу декомпилить, загонять в СДК (при декомпиле класть мои level.spawn и level.game) и затем собирать в СДК спавн. Это работает, но в данный момент проблематично мне для всех лок такое сделать, там есть другие проблемы с декомпилом (спавна). Ничего лучше я не придумал, чем попробовать отвязать спавн от лв. По идее в аллспавне левел-вертексы и не нужны, они нигде не используются, по крайней мере в ТЧ спавне (смарткаверов нет). Как я понял, в аллспавне важны только одни координаты (для спавна из него объектов).
Zagolski
Кстати, по поводу CEnvironment::calculate_dynamic_sun_dir(), о которой чуть выше упоминали. Из-за этой штуковины не работает ночью луна, как выяснилось.
cjayho
QUOTE (Zagolski @ 26.04.2019, 22:50) *
Кстати, по поводу CEnvironment::calculate_dynamic_sun_dir(), о которой чуть выше упоминали. Из-за этой штуковины не работает ночью луна, как выяснилось.


Лично я когда сие переносил в двиг ТЧ (да, считайте меня извращенцем, но я сейчас занимаюсь єкспериментами с программной генерацией погодьі) нашел там несколько багов в алгоритме. Начиная от того что он вісчитівает все с разворотом на 180 градусов азимута, и заканчивая тем что не затемняет солнце на горизонте.
И у меня луна работает smile.gif

Zagolski
Цитата(cjayho @ 27.04.2019, 00:59) *
И у меня луна работает

Странно. А у тебя азимут сменен или ванильный вариант? Ну, чтоб солнце правильно на востоке всходило. У меня поменен, луны нет. Со стандартным вариантом я не додумался проверить. Но здесь я эту штуку интегрировал в ТЧ двиг, на ТЧ погоду. Кто знает, что там еще может быть. И на сколько я помню, в ЧН и ЗП я луны ни разу не видел. Или память подводит.
xrModder
А может разделить Солнце и Луну?
cjayho
QUOTE (Zagolski @ 27.04.2019, 12:03) *
QUOTE (cjayho @ 27.04.2019, 00:59) *
И у меня луна работает

Странно. А у тебя азимут сменен или ванильный вариант? Ну, чтоб солнце правильно на востоке всходило. У меня поменен, луны нет. Со стандартным вариантом я не додумался проверить. Но здесь я эту штуку интегрировал в ТЧ двиг, на ТЧ погоду. Кто знает, что там еще может быть. И на сколько я помню, в ЧН и ЗП я луны ни разу не видел. Или память подводит.


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

пока вот то что есть, прошу сильно не пинать, все в весьма зачаточной стадии

Говнокод

CODE
Fvector3 calc_temp( float temp ) // color temperature counter
{
    float r, g, b;

    temp /= 100.f;

    if( temp < 65.f ){
        r = 255.f;

        float green = temp - 2.f;
        g = (-155.25485562709179f - 0.44596950469579133f * green + 104.49216199393888f * log(green));

        if( temp > 20 )
        {
            float blue = temp - 10.f;
            b = (-254.76935184120902f + 0.8274096064007395f * blue + 115.67994401066147f * log(blue));
        }
    }
    else
    {
        b = 255.f;
        float red = temp - 55.f;
        r = (351.97690566805693f + 0.114206453784165f * red - 40.25366309332127f * log(red));
        float green = temp - 50.f;
        g = (325.4494125711974f + 0.07943456536662342f * green - 28.0852963507957f * log(green));
    }

    clamp( r, 0.f, 255.f ); // это можно перевести в фвектор и клампить одним махом
    clamp( g, 0.f, 255.f );
    clamp( b, 0.f, 255.f );

    Fvector3 out;

    out.x = r/255.f; // это можно делить одним махом как фвектор
    out.y = g/255.f;
    out.z = b/255.f;

    return out;
}

// цветовые температуры

float sun_maxtemp_nofog = 6000; // солнышко в зените без тумана
float sun_mintemp_nofog = 1400; // солнышко у горизонта без тумана
float sun_maxtemp_fog = 6500; // солнышко в зените в полный туман
float sun_mintemp_fog = 6000; // солнышко у горизонта в полный туман

float moon_maxtemp_nofog = 5500; // луна в зените без тумана
float moon_mintemp_nofog = 3000; // луна на горизонте без тумана
float moon_maxtemp_fog = 5500; // луна в зените в полный туман (а ее хоть будет видно, але?)
float moon_mintemp_fog = 5500; // луна у горизонта в полный туман

float hour_sunrise = 5.f; // когда всходит солнышко
float hour_sunset = 22.f; // когда заходит

float moon_multiplier = .3f; // насколько луна меньше светит чем солнце. Сейчас втрое меньше

void CEnvironment::calculate_dynamic_sun_dir()
{
    //if( CurrentCycleName != "auto" ) return;

    bool isMoon = fGameTime < 60.f*60.f*hour_sunrise || fGameTime > 60.f*60.f*hour_sunset;

    float fGameTime2 = isMoon ? fGameTime - (86400.f-60.f*60.f*12) : fGameTime;

        float g = (360.0f/365.25f)*(180.0f + fGameTime2/DAY_LENGTH);

        g = deg2rad(g);

        //    Declination
        float D = 0.396372f-22.91327f*_cos(g)+4.02543f*_sin(g)-0.387205f*_cos(2*g)+
            0.051967f*_sin(2*g)-0.154527f*_cos(3*g) + 0.084798f*_sin(3*g);

        //    Now calculate the time correction for solar angle:
        float TC = 0.004297f+0.107029f*_cos(g)-1.837877f*_sin(g)-0.837378f*_cos(2*g)-
            2.340475f*_sin(2*g);

        //    IN degrees
        float Longitude = -30.4f;

        float SHA = (fGameTime2/(DAY_LENGTH/24.f)-12.f)*15.f + Longitude + TC + 180.f;

        //    Need this to correctly determine SHA sign
        if (SHA>180) SHA -= 360;
        if (SHA<-180) SHA += 360;

        //    IN degrees
        float const Latitude = 50.27f;
        float const LatitudeR = deg2rad(Latitude);

        //    Now we can calculate the Sun Zenith Angle (SZA):
        float cosSZA = _sin(LatitudeR)
            * _sin(deg2rad(D)) + _cos(LatitudeR)*
            _cos(deg2rad(D)) * _cos(deg2rad(SHA));

        clamp( cosSZA, -1.0f, 1.0f);

        float SZA = acosf(cosSZA);
        float elevation = PI_DIV_2-SZA+PI_DIV_8;
        clamp( elevation, 0.f, 1.f );
        elevation = 1.f - elevation;
        //    To finish we will calculate the Azimuth Angle (AZ):
        float cosAZ = 0.f;
        float const sin_SZA = _sin(SZA);
        float const cos_Latitude = _cos(LatitudeR);
        float const sin_SZA_X_cos_Latitude = sin_SZA*cos_Latitude;
        if (!fis_zero(sin_SZA_X_cos_Latitude))
            cosAZ    = (_sin(deg2rad(D))-_sin(LatitudeR)*_cos(SZA))/sin_SZA_X_cos_Latitude;

        clamp( cosAZ, -1.0f, 1.0f);
        float azimuth = acosf(cosAZ);

        if (SHA<0)
            azimuth = 2*PI-azimuth;
    
    float mintemp_nofog = 0.f;
    float maxtemp_nofog = 0.f;
    float mintemp_fog = 0.f;
    float maxtemp_fog = 0.f;

    if( isMoon )
    {
        mintemp_nofog = moon_mintemp_nofog;
        maxtemp_nofog = moon_maxtemp_nofog;
        mintemp_fog      = moon_mintemp_fog;
        maxtemp_fog   = moon_maxtemp_fog;
    }
    else
    {
        mintemp_nofog = sun_mintemp_nofog;
        maxtemp_nofog = sun_maxtemp_nofog;
        mintemp_fog      = sun_mintemp_fog;
        maxtemp_fog   = sun_maxtemp_fog;
    }

    float sunbright = 1.f;

    if(    fGameTime >= hour_sunset*60.f*60.f) // когда всходит луна
    {
        float result = ((hour_sunset+1.f)*60.f*60.f) - fGameTime;
        result /= (60.f * 60.f);
        clamp( result, 1.f-moon_multiplier, 1.f );
        sunbright = 1.f - result;
    }

    if(    fGameTime <= (hour_sunrise-1.f)*60.f*60.f) // утром (нужно переделывать бо бажній участок кода)
    {
        float result = fGameTime - ((hour_sunset-1.f)*60.f*60.f);
        result /= (60.f * 60.f);
        clamp( result, moon_multiplier, 1.0f );
        sunbright = result;
    }

    if( elevation < 0.33f )
    {
        sunbright *= 3.f * elevation;
    }

    float fogginess = CurrentEnv.rain_density + .1f; // ugly hack to determine fog

    float temp_nofog = mintemp_nofog*(1.f-elevation)+maxtemp_nofog*elevation;
    float temp_fog = mintemp_fog*(1.f-elevation)+maxtemp_fog*elevation;
    float temp = temp_nofog*(1.f-fogginess)+temp_fog*fogginess;

    CurrentEnv.sun_dir.setHP    (azimuth,-elevation);
    CurrentEnv.sky_rotation += -azimuth - PI_DIV_4 - .2f; // little bigger than pi_div_4
    CurrentEnv.sun_color.set(calc_temp(temp));
    CurrentEnv.sun_color.mul(sunbright);

    CurrentEnv.hemi_color.mul(sunbright);
    CurrentEnv.ambient.mul(sunbright);
    CurrentEnv.sky_color.mul(sunbright);
    CurrentEnv.fog_color.mul(sunbright);

    CurrentEnv.sun_color.mul(1.f - fogginess);
}




P.S. я просто оставлю это здесь (движковое восстановление солнца в ТЧ):

xr_3da\xrGame\game_cl_base.cpp

CODE
void    game_cl_GameState::net_import_GameTime        (NET_Packet& P)
{
    //time
    u64                GameTime;
    P.r_u64            (GameTime);
    float            TimeFactor;
    P.r_float        (TimeFactor);

    
    Level().SetGameTimeFactor    (GameTime,TimeFactor);

    u64                GameEnvironmentTime;
    P.r_u64            (GameEnvironmentTime);
    float            EnvironmentTimeFactor;
    P.r_float        (EnvironmentTimeFactor);

    u64 OldTime = Level().GetEnvironmentGameTime();
    Level().SetEnvironmentGameTimeFactor    (GameEnvironmentTime,EnvironmentTimeFactor);
    //if (OldTime > GameEnvironmentTime) // комментарим вот это
    //    GamePersistent().Environment().Invalidate(); // и это
}

RayTwitty
А что за баг с луной? Чем луна от солнца отличается технически? У меня луна была наверно с 2010 года, так и работает))
iOrange
Цитата(cjayho @ 27.04.2019, 18:00) *
прошу сильно не пинать, все в весьма зачаточной стадии

В функции calc_temp ошибка - if( temp > 20 ) если это условие не выполняется - синий не инициализируется (в этом случае он должен быть 0).
В остальном - коэффициенты вроде правильные.
Еще не забудьте что цвет на выходе в sRGB wink.gif
cjayho
QUOTE (iOrange @ 27.04.2019, 23:46) *
QUOTE (cjayho @ 27.04.2019, 18:00) *
прошу сильно не пинать, все в весьма зачаточной стадии

В функции calc_temp ошибка - if( temp > 20 ) если это условие не выполняется - синий не инициализируется (в этом случае он должен быть 0).
В остальном - коэффициенты вроде правильные.
Еще не забудьте что цвет на выходе в sRGB wink.gif


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

QUOTE (xr_3da\xrGame\stalker_movement_manager_inline.h:60)
Dima to Dima: this is correct, commented just because of the October presentation, no time right now to fix it correctly, should be fixed sometimes later


И вот я решил ради интетеса раскомментарить строку ниже.

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



Пока выясняю что могло так повлиять.
macron
Цитата(cjayho @ 30.04.2019, 00:57) *
но раньше я не видел чтоб сталкеры кудато ходили за пределы своих гулагов.

Помнится, как-то в ТЧ отключил в скриптах гулаги, и тоже НПСи разбрелись. Еще всю живность перемочили.
cjayho
Таки нашел, это не двигло, это измененные настройки default вsmart_terrain.ltx.
——-
Вопрос в другом, ктото из программистов плотно юзавших визуалстудию лохматых годов мне может объяснить что означает такая дивная конструкция:

CODE

for( i = 0; i < x; ++i );


Именно так, с точкозапятой семиколоном в конце строки и без { }. Про указание типа i молчу, я уже нагуглил про default-int.
Что такая конструкция делает? И на что такое чудо кодинга менять, ставить { после конструкции и } в самом конце функции? Или {} вместо семиколона?
Молния в вакууме
Цитата(cjayho @ 03.05.2019, 23:06) *
Вопрос в другом, ктото из программистов плотно юзавших визуалстудию лохматых годов мне может объяснить что означает такая дивная конструкция:

Для того чтобы понять что делает этот код нужно язык учить, а не говностудию палкой тыкать!!!
Цикл сначала устанавливает значение i в ноль, а потом прибавляет пока оно меньше x. По сути эквивалент i = x, но более медленный. Если бы этот код был из программы для DOS, я бы подумал что это специально сделано для замедления.

Цитата(cjayho @ 03.05.2019, 23:06) *
Про указание типа i молчу, я уже нагуглил про default-int.

Неявный int тут вообще никаким боком, он так не работает. Если бы переменная была auto или static, но без типа, то да. А с одним названием нельзя.

Ну и не забывай про side-effects. Если i это объект класса с перегруженными операторами < или ++ то там что угодно может быть. С вызовом функций тоже самое.
cjayho
QUOTE (Молния в вакууме @ 03.05.2019, 22:39) *
QUOTE (cjayho @ 03.05.2019, 23:06) *
Вопрос в другом, ктото из программистов плотно юзавших визуалстудию лохматых годов мне может объяснить что означает такая дивная конструкция:

Для того чтобы понять что делает этот код нужно язык учить, а не говностудию палкой тыкать!!!




Какие мы умные.
Как устроена конструкция for здорового человека я в курсе.
Вы мне объясните как работает инструкция которую я описал:

for(...);

НЕ for(...) чтото там;

И НЕ for(...){ чтото там многострочное}

Именно с точкозапятой в неожиданном месте.

Вместо того чтобы умничать и рассказывать человеку который программировал под POSIX-системы лет 15, раззули бы глаза и внимательно почитали бы что я пишу о конструкциях не описанных ни в каком виеняемом стандарте языка.

Зы. И да, i там используется в коде ПОСЛЕ точкозапятой цикла for что я описал. А сама і нигде не объявлена до цикла.
Xottab_DUTY
Цитата(cjayho @ 04.05.2019, 05:50) *
Вы мне объясните как работает инструкция которую я описал

Какой тип у переменной i?

Эта конструкция может делать целое ничего, а может делать что-то важное. Зависит от типа переменной и области видимости, где она объявлена. Но тела у этого цикла нет, да.
Молния в вакууме
Цитата(cjayho @ 04.05.2019, 03:50) *
Вместо того чтобы умничать и рассказывать человеку который программировал под POSIX-системы лет 15, раззули бы глаза и внимательно почитали бы что я пишу о конструкциях не описанных ни в каком виеняемом стандарте языка.

Всё там описано. В C statement может быть пустым, только из одной точки с запятой.
https://en.wikipedia.org/wiki/NOP_(code)#C_and_derivatives

Цитата(cjayho @ 04.05.2019, 03:50) *
Зы. И да, i там используется в коде ПОСЛЕ точкозапятой цикла for что я описал. А сама і нигде не объявлена до цикла.

Это не нормально. Должна где-то быть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.