一年前遇到的面试题 怎么用shader修改unity自带的胶囊体 改成一个花瓶的形状
思路:干预顶点
写一个花瓶的曲线模型函数
把Y轴放入函数中 乘以XZ
sin函数类似效果
Shader "Unlit/VertexTest"
{
SubShader
{
Pass
{
Tags { "LightMode"="ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#include "UnityCG.cginc"
#include "Lighting.cginc"
struct v2f
{
float4 pos:POSITION;
fixed4 color:COLOR;
};
v2f vert(appdata_base v)
{
//边界波纹效果
v.vertex.x = sin(v.vertex.y) * v.vertex.x;
v.vertex.z = sin(v.vertex.y) * v.vertex.z;
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
float3 lDir = normalize(_WorldSpaceLightPos0.xyz); //平行光
float3 nDir = normalize(mul(v.normal,(float3x3)unity_WorldToObject));//一个点的法线
fixed3 diffuse = _LightColor0.rgb*saturate(dot(nDir,lDir));//点乘反映着两个向量的“相似度”,两个向量越“相似”,它们的点乘越大
o.color = fixed4(diffuse,1);
return o;
}
float4 frag(v2f IN):COLOR
{
return IN.color;
}
ENDCG
}
}
}