藤曼生长

藤曼生长

二月 10, 2022

藤曼生长

预览视图

在这里插入图片描述在这里插入图片描述

PBR材质下的效果

显示更好看上ASE

在这里插入图片描述在这里插入图片描述在这里插入图片描述

简化版

可以乘以顶点法线向量可以实现物体的缩放,用一个UV图的权重控制不同位置缩放部分,可以形成藤曼的样子

ASE

在这里插入图片描述

代码

Properties

1
2
3
4
5
6
7
8
_MainTex ("Texture", 2D) = "white" {}
_Grow("Grow",Range(-1.0,1.0)) = 0.0
_Expend("Expend",Float) = 0.0
_Scale("Scale",Float) = 0.0
_GrowMin("GrowMin", Range(0,1.0)) = 0.6
_GrowMax("GrowMax", Range(0,1.5)) = 1.0
_EndMin("EndMin", Range(0,1.0)) = 0.6
_EndMax("EndMax", Range(0,1.5)) = 1.0

appdata

1
2
3
4
5
6
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};

vert

1
2
3
4
5
6
7
8
9
10
11
12
v2f vert (appdata v)
{
v2f o;
half weight = max(smoothstep( _GrowMin, _GrowMax, v.uv.y - _Grow), smoothstep(_EndMin, _EndMax,v.uv.y ));
half3 weight_combine = weight * _Expend * 0.01f*v.normal;
half3 scale_combine = _Scale * 0.01f * v.normal;
half3 normal_combine = weight_combine + scale_combine;
v.vertex.xyz = v.vertex.xyz+ normal_combine;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}

frag

1
2
3
4
5
6
7
fixed4 frag(v2f i) : SV_Target
{
clip(1 - (i.uv.y - _Grow));
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}

总代码

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Shader "Unlit/Vice1_Code"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Grow("Grow",Range(-1.0,1.0)) = 0.0
_Expend("Expend",Float) = 0.0
_Scale("Scale",Float) = 0.0
_GrowMin("GrowMin", Range(0,1.0)) = 0.6
_GrowMax("GrowMax", Range(0,1.5)) = 1.0
_EndMin("EndMin", Range(0,1.0)) = 0.6
_EndMax("EndMax", Range(0,1.5)) = 1.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work


#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};

struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float _Grow;
float _Expend;
float _GrowMin;
float _GrowMax;
float _EndMin;
float _EndMax;
float _Scale;
v2f vert (appdata v)
{
v2f o;
half weight = max(smoothstep( _GrowMin, _GrowMax, v.uv.y - _Grow), smoothstep(_EndMin, _EndMax,v.uv.y ));
half3 weight_combine = weight * _Expend * 0.01f*v.normal;
half3 scale_combine = _Scale * 0.01f * v.normal;
half3 normal_combine = weight_combine + scale_combine;
v.vertex.xyz = v.vertex.xyz+ normal_combine;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}

fixed4 frag(v2f i) : SV_Target
{
clip(1 - (i.uv.y - _Grow));
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
}

总结

最近有一点偷懒,更新有点慢,新年快乐,新的一年,冲冲冲;