藤曼生长
预览视图
PBR材质下的效果
显示更好看上ASE
简化版
可以乘以顶点法线向量可以实现物体的缩放,用一个UV图的权重控制不同位置缩放部分,可以形成藤曼的样子
ASE
代码
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
appdata
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};
vert
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
fixed4 frag(v2f i) : SV_Target
{
clip(1 - (i.uv.y - _Grow));
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
总代码
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
}
}
}
总结
最近有一点偷懒,更新有点慢,新年快乐,新的一年,冲冲冲;