Ru/Adding a dynamic sky to your mod: Difference between revisions
mNo edit summary |
(Updating and rephrasing parts of this article) |
||
Line 5: | Line 5: | ||
Эта статья покажет вам как реализовать динамическое небо в вашем {{src13|4}} моде. | Эта статья покажет вам как реализовать динамическое небо в вашем {{src13|4}} моде. | ||
{{note| | {{note|Это руководство использует код из отмененного мода Vance}} | ||
{{warning|Этот шейдер очень требовательный и снижает частоту кадров в секунду на 25-40. Поэтому | {{warning|Этот шейдер очень требовательный и снижает частоту кадров в секунду на 25-40. Поэтому лучше использовать его только на мощных компьютерах}} | ||
== Требования == | == Требования == | ||
Line 14: | Line 14: | ||
{{note|Если вы не знаете | {{note|Если вы не знаете как компилировать шейдеры или еще не работали с ними в {{src|4}}, рекомендуется сначала прочитать и осмыслить эти статьи: [[Shader Authoring|Разработка шейдеров]] & [[Source_SDK_2013:_Your_First_Shader|Ваш первый шейдер]]}} | ||
== Реализация == | == Реализация == | ||
Прежде чем | Прежде чем что-то делать, нам нужно скачать файлы. ''Они внутри zip-архива.'' | ||
* [https://drive.google.com/file/d/1C-OYYR14C71DtBQdgClwNyhXSt7v2AVw/view?usp=share_link skydome.zip] | * [https://drive.google.com/file/d/1C-OYYR14C71DtBQdgClwNyhXSt7v2AVw/view?usp=share_link skydome.zip] | ||
Когда вы загрузите zip-файл, извлеките файлы | Когда вы загрузите zip-файл, извлеките файлы из {{code|select=all|shaders}} в: {{Path|src/materialsystem/stdshaders/}}, а файлы из {{code|select=all|code}} в: {{Path|src/game/}} | ||
Line 58: | Line 58: | ||
Теперь нам нужно создать купол. Чтобы сделать это, откройте {{Path|src/game/client/viewrender|cpp|icon=file}} | Теперь нам нужно создать купол. Чтобы сделать это, откройте {{Path|src/game/client/viewrender|cpp|icon=file}} | ||
Под {{code|select=all|<nowiki>#include "sourcevr/isourcevirtualreality.h"</nowiki>}} добавьте: | |||
{{codeblock|<nowiki>#include "c_env_skydome.h"</nowiki>}} | |||
{{note|Это должно исправить все ошибки с отсутствием определения для g_pSkyDome}} | |||
Под функцией {{code|select=all|<nowiki>void CViewRender::DrawViewModels( const CViewSetup &view, bool drawViewmodel )</nowiki>}} добавьте: | Под функцией {{code|select=all|<nowiki>void CViewRender::DrawViewModels( const CViewSetup &view, bool drawViewmodel )</nowiki>}} добавьте: | ||
Line 151: | Line 156: | ||
Теперь для | Теперь для включения и отключения отрисовки вам нужно перейти к функции {{code|select=all|<nowiki>void CRendering3dView::DrawWorld( float waterZAdjust )</nowiki>}} и | ||
выше {{code|select=all|<nowiki>unsigned long engineFlags = BuildEngineDrawWorldListFlags( m_DrawFlags );</nowiki>}} добавить: | выше {{code|select=all|<nowiki>unsigned long engineFlags = BuildEngineDrawWorldListFlags( m_DrawFlags );</nowiki>}} добавить: | ||
Line 160: | Line 165: | ||
m_pMainView->DrawSky(*this); | m_pMainView->DrawSky(*this); | ||
}</nowiki>}} | }</nowiki>}} | ||
=== Шейдеры === | === Шейдеры === | ||
Удалите | {{note|Удалите все файлы из {{path|stdshader_dx9_30|txt|icon=file}} и убедитесь, что в вашем {{path|stdshader_dx9_30|txt|icon=file}} файле есть только {{code|select=all|skydome_ps30}} и {{code|select=all|skydome_vs30}}, чтобы ускорить компиляцию шейдеров (НЕ ЗАБУДЬТЕ ОЧИСТИТЬ {{path|stdshader_dx9_20b|txt|icon=file}})}} | ||
{{ | |||
skydome_ps30 | |||
{{ | |||
А теперь откройте {{path|game_shader_dx9_base|vpc|icon=file}} | А теперь откройте {{path|game_shader_dx9_base|vpc|icon=file}} | ||
Line 219: | Line 213: | ||
Теперь вам нужна последняя деталь и это - материал. | Теперь вам нужна последняя деталь и это - материал. | ||
Перейдите в вашу директорию {{path|materials}} и создайте поддиректорию с названием {{path|shaders}} | Перейдите в вашу директорию {{path|materials}} и создайте поддиректорию с названием {{path|shaders}} | ||
После этого, создайте файл {{path|skydome|vmt|icon=file}} и вставьте это внутрь: | После этого, создайте файл {{path|skydome|vmt|icon=file}} и вставьте это внутрь: |
Revision as of 19:44, 26 February 2024

Эта статья покажет вам как реализовать динамическое небо в вашем Source 2013 моде.


Требования
- Умение компилировать шейдеры.
- Умение компилировать решения.


Реализация
Прежде чем что-то делать, нам нужно скачать файлы. Они внутри zip-архива.
Когда вы загрузите zip-файл, извлеките файлы из shaders в: src/materialsystem/stdshaders/
, а файлы из code в: src/game/
Откройте src/game/client/client_base.vpc
Перейдите к строке $File "$SRCDIR\game\client\c_vote_controller.cpp" и под ней добавьте:
Далее откройте src/game/server/server_base.vpc
и под $File "$SRCDIR\game\server\vote_controller.cpp" добавьте:
И после этого, пересоберите свое games.sln
решение.
Теперь мы можем перейти к реализации кода отрисовки.
Код отрисовки
Сначала нам нужно отредактировать код клиента для динамического неба.
Откройте src/game/client/view.cpp
В функции void CViewRender::Init( void ), под m_ModulateSingleColor.Init( "engine/modulatesinglecolor", TEXTURE_GROUP_OTHER ); добавьте:
Теперь откройте src/game/client/viewrender.h
И под функцией void SetWaterOverlayMaterial( IMaterial *pMaterial ) добавьте:
Найдите CMaterialReference m_UnderWaterOverlayMaterial; и под этим добавьте:
Теперь нам нужно создать купол. Чтобы сделать это, откройте src/game/client/viewrender.cpp
Под #include "sourcevr/isourcevirtualreality.h" добавьте:

Под функцией void CViewRender::DrawViewModels( const CViewSetup &view, bool drawViewmodel ) добавьте:
Теперь для включения и отключения отрисовки вам нужно перейти к функции void CRendering3dView::DrawWorld( float waterZAdjust ) и
выше unsigned long engineFlags = BuildEngineDrawWorldListFlags( m_DrawFlags ); добавить:
Шейдеры


stdshader_dx9_30.txt
и убедитесь, что в вашем 
stdshader_dx9_30.txt
файле есть только skydome_ps30 и skydome_vs30, чтобы ускорить компиляцию шейдеров (НЕ ЗАБУДЬТЕ ОЧИСТИТЬ 
stdshader_dx9_20b.txt
)А теперь откройте game_shader_dx9_base.vpc
И под $File "screenspace_general.cpp" добавьте:
Скомпилируйте шейдер динамического неба и пересоберите ваше решение.
Хорошо, а сейчас нам нужно сделать наше динамическое небо доступным через Hammer.
Для этого вам понадобиться пользовательский fgd файл.
Заключение
Теперь вам нужна последняя деталь и это - материал.
Перейдите в вашу директорию materials
и создайте поддиректорию с названием shaders
После этого, создайте файл skydome.vmt
и вставьте это внутрь:
Создайте карту с сущностью env_skydome и вот оно! Теперь в вашем моде должно быть динамическое небо.