首页 > 编程知识 正文

人物出现特效,角色特效是干什么的

时间:2023-05-05 20:10:43 阅读:270296 作者:3955

以前做编辑器的时候有一个生成模型特效的需求,从网上找来这个shader配合使用,找不到原博了在此记录

需要添加特效的模型设置为此shader,根据需求设置一个剔除面物体clipTrans,用SetClipPosition方法设置剔除部分。

public void SetClipPosition(){//剔除面位置pos = clipTrans.position;//计算XY平面上的法向量,用XY平面作为剔除面normal= clipTrans.rotation * Vector3.down; clipMaterial.SetVector("_ClipObjPos", pos); clipMaterial.SetVector("_ClipObjNormal", normal);}

※使用这个shader

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Custom/Clip"{Properties{_MainTex ("Texture", 2D) = "white" {}_ClipY ("剔除 Y 值", float) = 0[Space(10)]_ClipObjPos("遮罩位置",Vector)= ( 0, 0, 0, 1 )_ClipObjNormal("遮罩法线向量",Vector)= ( 0, 1, 0, 1 )}SubShader{Cull BackPass{CGPROGRAM#pragma vertex vert #pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 worldPos : TEXCOORD1;};sampler2D _MainTex;float _ClipY;fixed4 _ClipObjPos;fixed4 _ClipObjNormal;float distanceToPlane(float3 pos, float3 objNormal, float3 pointInWorld){ float3 w = - ( pos - pointInWorld ); //根据数学公式,用平面的法向量计算距离 float res = ( objNormal.x * w.x + objNormal.y * w.y + objNormal.z * w.z ) / sqrt( objNormal.x * objNormal.x +objNormal.y * objNormal.y +objNormal.z * objNormal.z ); return res;}v2f vert (appdata v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);//计算模型的真正世界坐标o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{clip(distanceToPlane(_ClipObjPos.xyz, _ClipObjNormal.xyz, i.worldPos));clip(i.worldPos.y - _ClipY);fixed4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}}}

使用效果如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。