Написать шейдер для пользовательской текстуры отображения
Чтобы обновить пользовательскую текстуру вручную, вы можете написать специализированный шейдер для пользовательской текстуры.
Чтобы помочь вам написать свой собственный шейдер Custom Render Texture, здесь представлены два примера фреймворков, которые содержат функции утилиты и встроенные переменные помощи.
Следующий пример шейдера заполняет текстуру цветом, умноженным на цвет. При написании шейдера для пользовательской текстуры рендеринга необходимо выполнить следующие действия:
-
#include "UnityCustomRenderTexture.cginc". - Используйте предоставленный Vertex Shader
CustomRenderTextureVertexShader. - Используйте предоставленную входную структуру
v2f_customrendertextureдля пиксельного шейдера.
Shader "CustomRenderTexture/Simple"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_Tex("InputTex", 2D) = "white" {}
}
SubShader
{
Lighting Off
Blend One Zero
Pass
{
HLSLPROGRAM
#include "UnityCustomRenderTexture.cginc"
#pragma vertex CustomRenderTextureVertexShader
#pragma fragment frag
#pragma target 3.0
float4 _Color;
sampler2D _Tex;
float4 frag(v2f_customrendertexture IN) : COLOR
{
return _Color * tex2D(_Tex, IN.localTexcoord.xy);
}
ENDHLSL
}
}
}
В следующем примере показан шейдер для материала, который можно использовать для инициализации пользовательской текстуры рендеринга. При написании шейдера для инициализации материала обязательно выполнять следующие действия:
#include "UnityCustomRenderTexture.cginc"Используйте предоставленный вертикальный шейдер
CustomRenderTextureVertexShaderИспользуйте предоставленную входную структуру
v2f_customrendertextureдля пиксельного шейдера.
Shader "CustomRenderTexture/CustomTextureInit"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_Tex("InputTex", 2D) = "white" {}
}
SubShader
{
Lighting Off
Blend One Zero
Pass
{
HLSLPROGRAM
#include "UnityCustomRenderTexture.cginc"
#pragma vertex InitCustomRenderTextureVertexShader
#pragma fragment frag
#pragma target 3.0
float4 _Color;
sampler2D _Tex;
float4 frag(v2f_init_customrendertexture IN) : COLOR
{
return _Color * tex2D(_Tex, IN.texcoord.xy);
}
ENDHLSL
}
}
}