[グラフィック]グラフィック学習(4)
ここではテクスチャに関する実習を行います.
入出力テクスチャの基本構造
上のコードでは、「白」は、テクスチャが指定されていない場合に白のテクスチャをベースにしたり、階調や黒などを指定したりすることができることを示しています. テクスチャは、UVに遭遇する前にメモリ内のテクスチャだけであり、float 4ではなくsampler 2 d( ) UVはvertexが所有しており、エンジンから取得できるため、Input構造で と宣言する必要があります. Input構造に任意の変数 を作成できません. uv MainTexはMainTexのuv、uvはu、vの2つの数字からなるflaot 2
tex 2 D関数は、1番目のパラメータをサンプルとし、2番目のパラメータはUV、すなわち である. INは入力構造体 である.
surf関数の部分を変えるだけで
白黒画像の特徴は、R、G、Bともに同一の数字であり、その値はR、G、Bの各元素強度の平均値である
2つのテクスチャを入力し、数値を入力してlerp関数に適用します.
lerp関数の最後のパラメータは、どのテクスチャの数値 に近いか.0は1番目のテクスチャ、1は2番目のテクスチャ、0.5は正反対
次のコードでは、コアはsurt関数で作成されたo.Albedo=lerp(tex 1.rgb、tex 2.rgb、lerpValue)である.はずです
本ではUnity StandardAssetのプール映像にAlphaチャネルがあると書いてあるので、持ってきてみます
結果を予測すると…!
白い部分は1であるべきですが、lerp()では、1は2番目のパラメータに入るテクスチャを表します.
白い部分の草状の2番目のテクスチャが表示されます.
また,実際に適用すると,上記の表現が見られる.
草の形には草のテクスチャがあり、残りの背景には夜空の背景があります.
ああ、特別な感じがします.
技術芸術家のために設計されたUnitizer Start Up(鄭宗弼著)
1.基本テクスチャI/O構造
入出力テクスチャの基本構造
学識
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
コード全体
Shader "Custom/Tex"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
2.画像を白黒にする
surf関数の部分を変えるだけで
学識
白黒画像の特徴は、R、G、Bともに同一の数字であり、その値はR、G、Bの各元素強度の平均値である
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = (c.r + c.g + c.b) / 3;
o.Alpha = c.a;
}
3.Lerpで2つの画像を混合してみる
2つのテクスチャを入力し、数値を入力してlerp関数に適用します.
学識
次のコードでは、コアはsurt関数で作成されたo.Albedo=lerp(tex 1.rgb、tex 2.rgb、lerpValue)である.はずです
Shader "Custom/Lerp"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "white" {}
_lerpValue ("Lerp Value", Range(0,1)) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
sampler2D _MainTex;
sampler2D _MainTex2;
struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
};
float _lerpValue;
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 tex1 = tex2D (_MainTex, IN.uv_MainTex);
fixed4 tex2 = tex2D (_MainTex2, IN.uv_MainTex2);
o.Albedo = lerp(tex1.rgb, tex2.rgb, _lerpValue);
o.Alpha = 1;
}
ENDCG
}
FallBack "Diffuse"
}
4.第1テクスチャのAlphaチャネル値をLerp()の第3パラメータとして使用
本ではUnity StandardAssetのプール映像にAlphaチャネルがあると書いてあるので、持ってきてみます
o.Albedo = lerp(tex1.rgb, tex2.rgb, tex1.a);
前述したように、lerp()の3番目のパラメータプール画像のalpha値を使用する結果を予測すると…!
白い部分は1であるべきですが、lerp()では、1は2番目のパラメータに入るテクスチャを表します.
白い部分の草状の2番目のテクスチャが表示されます.
また,実際に適用すると,上記の表現が見られる.
o.Albedo = lerp(tex2.rgb, tex1.rgb, tex1.a);
上記のように、1番目と2番目のパラメータの順序を変更すると、草の形には草のテクスチャがあり、残りの背景には夜空の背景があります.
ああ、特別な感じがします.
リファレンス
Reference
この問題について([グラフィック]グラフィック学習(4)), 我々は、より多くの情報をここで見つけました https://velog.io/@minjujuu/Graphics-그래픽스-스터디-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol