-
Notifications
You must be signed in to change notification settings - Fork 1
/
TextureProgression.hlsl
43 lines (38 loc) · 1.18 KB
/
TextureProgression.hlsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Shamelessly stolen from Jettelly on YouTube
float2 Unity_Rotate_Degrees_float(float2 UV, float2 Center, float2 Rotation)
{
Rotation = Rotation*(3.14159f/180.0f);
UV -= Center;
float s = sin(Rotation);
float c = cos(Rotation);
float2x2 rMatrix = float2x2(c,-s,s,c);
rMatrix *= 0.5;
rMatrix += 0.5;
rMatrix = rMatrix * 2 - 1; // What??
UV.xy = mu1(UV.xy, rMatrix);
UV += Center;
return UV;
}
// Triplanar
void TextureProjection_float
(
in Texture2D tex,
in SamplerState SS,
in float3 Position,
in float3 Normal,
in float Tile,
in float Blend,
in float Speed,
in float Rotation,
out flout4 Out,
)
{
float Speed_UV = _Time.y * Speed;
float3 Node_UV = Position * Tile;
float3 Node_Blend = pow(abs(Normal), Blend);
Node_Blend /= dot(Node_blend, 1.0);
float4 Node_X = SAMPLE_TEXTURE2D(Tex, SS, Unity_Rotate_Degrees_float(Node_UV.yz, 0, Rotation) + Speed_UV);
float4 Node_Y = SAMPLE_TEXTURE2D(Tex, SS, Unity_Rotate_Degrees_float(Node_UV.xz, 0, Rotation) + Speed_UV);
float4 Node_Z = SAMPLE_TEXTURE2D(Tex, SS, Unity_Rotate_Degrees_float(Node_UV.xy, 0, Rotation) + Speed_UV);
Out = (Node_X * Node_Blend.x) + (Node_Y * Node_Blend.y) + (Node_Z * Node_Blend.z); // Fascinating...
}