w23 / xash3d-fwgs

Vulkan Ray Tracing fork of Xash3D FWGS engine. Intended to be merged into master at some point in the future.
161 stars 16 forks source link

Basic fog support #159

Open 0x4E69676874466F78 opened 2 years ago

0x4E69676874466F78 commented 2 years ago

Я бы предпочёл сферический туман вместо плоского, но если это накладно то делай плоский.

Туман используется:

Достаточно реализовать вызовы тумана и всё везде должно заработать. https://sourcegraph.com/search?q=context:global+repo:^github\.com/FWGS/xash3d-fwgs%24+file:^ref_gl/.*\.*+content:fog&patternType=literal

w23 commented 2 years ago

А там нет такого, что туман, например, задаётся для bsp листа?

0x4E69676874466F78 commented 2 years ago

@w23 я не знаю, я не встречал. Там с водой и похожими поверхностями куча хаков, помимо способа через func_water оно ещё так работает: https://sourcegraph.com/github.com/FWGS/xash3d-fwgs@b9901bcb70d88a9ee05d033dd76780796f17b0be/-/blob/engine/common/mod_bmodel.c?L899-909 И вот такое: https://sourcegraph.com/github.com/FWGS/xash3d-fwgs@b9901bcb70d88a9ee05d033dd76780796f17b0be/-/blob/engine/common/imagelib/img_wad.c?L486-518 Там кстати ещё выше по коду есть упоминание воды. Но вот поискал: https://sourcegraph.com/github.com/FWGS/xash3d-fwgs@b9901bcb70d88a9ee05d033dd76780796f17b0be/-/blob/common/bspfile.h?L137:42 А вот как туман проверяется: https://sourcegraph.com/github.com/FWGS/xash3d-fwgs@b9901bcb70d88a9ee05d033dd76780796f17b0be/-/blob/ref_gl/gl_rmain.c?L655-785

0x4E69676874466F78 commented 1 year ago

Туман может работать в TriAPI: https://github.com/HLSources/Spirit-of-Half-Life/blob/5ad2e00fe1546cc73e19255c75512a11ee3980c8/cl_dll/tri.cpp#L205-L224 https://github.com/HLSources/Spirit-of-Half-Life/blob/5ad2e00fe1546cc73e19255c75512a11ee3980c8/common/triangleapi.h#L54

Как раз используется в контре. То есть надо реализовать: https://github.com/w23/xash3d-fwgs/blob/d6d9011dcc92ea33eac41dc649de5bd7b7c514d4/engine/ref_api.h#L606 https://github.com/w23/xash3d-fwgs/blob/d6d9011dcc92ea33eac41dc649de5bd7b7c514d4/engine/ref_api.h#L609

0x4E69676874466F78 commented 1 year ago

https://github.com/FWGS/xash3d-fwgs/issues/1188 ещё одна особенность в реализации.

w23 commented 1 year ago

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

С точки зрения лучей кажется, что чтобы физически корректно его считать, было бы удобнее принимать туман не как вкл-выкл, а как объём. Это, кстати, и лучше дружит с волюметриками.

0x4E69676874466F78 commented 1 year ago

Насколько я помню туман глобальный. Включается через env_fog. Ещё его можно было зафорсить консольными командами вроде как. Остальное не знаю.

0x4E69676874466F78 commented 1 year ago

С точки зрения лучей кажется, что чтобы физически корректно его считать, было бы удобнее принимать туман не как вкл-выкл, а как объём. Это, кстати, и лучше дружит с волюметриками.

Можно таскать кластер коробок за игроком, то есть по кластерам переключать эти коробки перед игроком.

0x4E69676874466F78 commented 1 year ago

Туман можно проверить в Prison и Afraid of Monsters: Director's Cut. Ещё в Overturn сильно затуманенные карты, но мы его пока не трогали. Prison на спирите 1.2. А AoMDC отревершен. Overturn опенсорс.

Спирит 1.2 здесь https://github.com/FWGS/hlsdk-portable/tree/sohl1.2/ AoMDC https://github.com/FWGS/hlsdk-portable/tree/aomdc Overturn https://www.moddb.com/mods/overturn/downloads Есть на чём потестить.

0x4E69676874466F78 commented 1 year ago

Забыл написать, env_fog их есть два вида:

  1. Deathmatch Classic // https://twhl.info/wiki/page/env_fog_(Deathmatch_Classic)
    • За это отвечает эта функция:
      void  (*Fog)( float flFogColor[3], float flStart, float flEnd, int bOn ); //Works just like GL_FOG, flFogColor is r/g/b.
    • Start distance (startdist) - Distance between the player and the beginning of the fog.
    • End distance (enddist) - Distance between the player and the end of the fog.
    • Fog color (R G B) (rendercolor)
  2. Counter-Strike/CS: Zombie mod унаслеованное от Condition Zero // https://twhl.info/wiki/page/env_fog_(Counter-Strike)
    • За это отвечает эта функция:
      void  (*FogParams)( float flDensity, int iFogSkybox ); 
    • Fog density (density) - Density/strength of the fog. The value should be less than 0.01, otherwise the the fog will not appear. 0.009 is the thickest and lesser value means thinner fog.
    • Fog color (R G B) (rendercolor) - The colour of the fog.
      • Putting solid black color (0 0 0) will show no fog.

При этом в коде контры который мы имеем на руках поддержки тумана нет, но это тривиально добавляется.

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

Позже я подготовлю сборки DMC и CS с туманами.

0x4E69676874466F78 commented 1 year ago

Туман в режиме startdist-enddist совсем нефизичный, там тупо если выставить 500-500 будет стена тумана с жёсткой границей, нам надо его как-то привести к виду density. Возможно учитывать только enddist, а startdist всегда считать 0. DMC-режим уже можно тестировать на spirit: https://github.com/FWGS/hlsdk-portable/tree/sohl1.2 image

0x4E69676874466F78 commented 1 year ago

Туман для CS тоже можно уже тестировать, он там теперь реализован. Кроме того сам движок теперь имеет правильный туман для density, поэтому с мастером желательно синхронизироваться.

0x4E69676874466F78 commented 9 months ago

Для корректного теста тумана надо ещё смержиться со свежим мастером из апстрима, там были изменения в этом направлении.

w23 commented 9 months ago

Для корректного теста тумана надо ещё смержиться со свежим мастером из апстрима, там были изменения в этом направлении.

О да, мы давно не мержились. После материалов надо будет.