Category:Шейдер: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (Форматирование)
m (Форматирование)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__


Класс ''shader'' представляет файл эффекта Microsoft HLSL Effect File (.fx), загруженный клиентом, который можно использовать вместо текстуры при вызове "[[RU/dxDrawImage|dxDrawImage]]".
Класс ''Shader'' представляет файл эффекта Microsoft HLSL Effect File (.fx), загруженный клиентом, который можно использовать вместо текстуры при вызове "[[RU/dxDrawImage|dxDrawImage]]".


Тип элемента этого класса - '''"shader"'''.
Тип элемента этого класса - '''"shader"'''.
Line 16: Line 16:
Файлы эффектов обычно содержат несколько методов, но для простоты MTA будет использовать только первый метод, который будет правильно работать на клиентском оборудовании. Итак, для любого данного файла эффектов на первое место ставьте передовые методы, а в последнюю очередь - самые простые. Таким образом, игроки с хорошим оборудованием получат лучшую технику, а игроки со старым оборудованием получат хоть что-то.
Файлы эффектов обычно содержат несколько методов, но для простоты MTA будет использовать только первый метод, который будет правильно работать на клиентском оборудовании. Итак, для любого данного файла эффектов на первое место ставьте передовые методы, а в последнюю очередь - самые простые. Таким образом, игроки с хорошим оборудованием получат лучшую технику, а игроки со старым оборудованием получат хоть что-то.


===Простой пример===
<section name="Простой пример" class="client" show="false">
Вот содержимое файла эффекта с одной техникой, которая должна работать на всём оборудовании:
Вот содержимое файла эффекта с одной техникой, которая должна работать на всём оборудовании:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 43: Line 43:
Он не использует вершинные или пиксельные шейдеры, только стандартные состояния рендеринга D3D.
Он не использует вершинные или пиксельные шейдеры, только стандартные состояния рендеринга D3D.
Все состояния, которые вы можете установить, находятся [https://msdn.microsoft.com/en-us/library/bb173347%28v=VS.85%29.aspx здесь].  
Все состояния, которые вы можете установить, находятся [https://msdn.microsoft.com/en-us/library/bb173347%28v=VS.85%29.aspx здесь].  
</section>


===Сложный пример===
<section name="Сложный пример" class="client" show="false">
Вот файл эффекта, содержащий вершинный и пиксельный шейдер:
Вот файл эффекта, содержащий вершинный и пиксельный шейдер:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 173: Line 174:


Метод ''complercated'' будет использоваться, если компьютер поддерживает '''Shader Model 2''', в противном случае будет использован метод ''simple''. Комментарии в источнике объясняют, что делает MTA и где.
Метод ''complercated'' будет использоваться, если компьютер поддерживает '''Shader Model 2''', в противном случае будет использован метод ''simple''. Комментарии в источнике объясняют, что делает MTA и где.
</section>


===Разное===
===Разное===
Line 179: Line 181:
*HLSL индексы начинаются с 0 (где Lua обычно начинается с 1)
*HLSL индексы начинаются с 0 (где Lua обычно начинается с 1)
*HLSL ошибки компиляции можно просмотреть, набрав "debugscript 3" в клиентской консоли.
*HLSL ошибки компиляции можно просмотреть, набрав "debugscript 3" в клиентской консоли.


==Шейдеры для текстур мира==
==Шейдеры для текстур мира==
Вот несколько примеров шейдеров, которые можно использовать при замене текстур мира на [[RU/engineApplyShaderToWorldTexture|engineApplyShaderToWorldTexture]]
Вот несколько примеров шейдеров, которые можно использовать при замене текстур мира на [[RU/engineApplyShaderToWorldTexture|engineApplyShaderToWorldTexture]]


===Простой пример===
<section name="Простой пример" class="client" show="false">
Этот шейдер просто заменяет текстуру и позволяет GTA управлять всеми состояниями рендеринга.
Этот шейдер просто заменяет текстуру и позволяет GTA управлять всеми состояниями рендеринга.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 201: Line 202:
}
}
</syntaxhighlight><br>
</syntaxhighlight><br>
===Сложный пример===
</section>
 
<section name="Сложный пример" class="client" show="false">
Этот шейдер можно использовать как основу для замены текстуры мира, если вы собираетесь добавить какой-нибудь необычный эффект.
Этот шейдер можно использовать как основу для замены текстуры мира, если вы собираетесь добавить какой-нибудь необычный эффект.


Line 215: Line 218:


//---------------------------------------------------------------------
//---------------------------------------------------------------------
// Включите некоторые общие вещи
//-- Включите некоторые общие вещи
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#include "mta-helper.fx"
#include "mta-helper.fx"
Line 336: Line 339:
     PS.Diffuse = MTACalcGTAVehicleDiffuse( WorldNormal, VS.Diffuse );
     PS.Diffuse = MTACalcGTAVehicleDiffuse( WorldNormal, VS.Diffuse );
</syntaxhighlight><br>
</syntaxhighlight><br>
==Многопроходные шейдеры==
</section>
 
<section name="Многопроходные шейдеры" class="client" show="false">
Чтобы выполнить более одного прохода, добавьте блоки '''pass''' следующим образом:
Чтобы выполнить более одного прохода, добавьте блоки '''pass''' следующим образом:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 346: Line 351:
     pass P0
     pass P0
     {
     {
         // Первый проход
         //-- Первый проход
         Texture[0] = Tex0;
         Texture[0] = Tex0;
     }
     }
     pass P1
     pass P1
     {
     {
         // Второй проход
         //-- Второй проход
         SrcBlend = Add;
         SrcBlend = Add;
         DestBlend = One;
         DestBlend = One;
Line 357: Line 362:
     pass P2
     pass P2
     {
     {
         // Третий проход
         //-- Третий проход
         SrcBlend = InvDestColor;
         SrcBlend = InvDestColor;
         DestBlend = InvSrcColor;
         DestBlend = InvSrcColor;
Line 363: Line 368:
}
}
</syntaxhighlight><br>
</syntaxhighlight><br>
</section>


[[Category:Материал]]
[[Category:Материал]]

Latest revision as of 18:14, 15 April 2021


Класс Shader представляет файл эффекта Microsoft HLSL Effect File (.fx), загруженный клиентом, который можно использовать вместо текстуры при вызове "dxDrawImage".

Тип элемента этого класса - "shader".

Как файлы HLSL Effect Files интегрируется в MTA:SA

[[{{{image}}}|link=|]] Примечание: На этой странице предполагается, что вы знаете, что такое файл эффектов и HLSL. Если нет, вам лучше сначала поискать информацию об этом.

Вы можете использовать этот шейдер тест-ресурс, чтобы попробовать приведённые ниже примеры. Скопируйте источник эффекта из полей кода в shadertest/clientshader.fx и (повторно) запустите "shadertest", чтобы увидеть результат.

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

Методы

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

Click to expand [+]
Простой пример
Click to expand [+]
Сложный пример

Разное

Что следует помнить при переключении между редактированием файлов lua и .fx:

  • HLSL утверждения часто заканчиваются на ";" (точка с запятой)
  • HLSL индексы начинаются с 0 (где Lua обычно начинается с 1)
  • HLSL ошибки компиляции можно просмотреть, набрав "debugscript 3" в клиентской консоли.

Шейдеры для текстур мира

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

Click to expand [+]
Простой пример
Click to expand [+]
Сложный пример
Click to expand [+]
Многопроходные шейдеры

This category currently contains no pages or media.