unity模型剖切

最近有个需求就是实现模型剖切,模型是个整体具体显示隐藏感觉通过unityapi实现太难了,寻思许久还是觉得通过shader来实现,原理很简单就是模型的三角面剔除,能gpu干的活就不麻烦cpu了,性能方面亲测没啥大的开销。

看效果:


直接看shader吧,也很简单,最好有点OpenGL基础,要不看起来很难受

----"surprise Mark Fuck图形学开发者"

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "HZ/DisModel" 
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_ClipYPos("ClipYPosition",Float) = 0.5
_MainTex ("Main Texture", 2D) = "white"{}
[KeywordEnum(None, Z, Y, X)]_Mode("Mode", Float) = 0
}
SubShader
{
Pass
{
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

fixed4 _Color;
float _ClipYPos;
sampler2D _MainTex;
half4 _MainTex_ST;
float _Mode;
struct vertexOutput
{
float4 pos : SV_POSITION;
float4 posInObjectCoords : TEXCOORD1;
float2 uv : TEXCOORD0;
};

vertexOutput vert(appdata_full input)
{
vertexOutput output;
output.pos = UnityObjectToClipPos(input.vertex);
output.uv = TRANSFORM_TEX(input.texcoord, _MainTex);
output.posInObjectCoords =  mul(unity_ObjectToWorld,input.vertex); 
return output;
}
fixed4 frag(vertexOutput input) : SV_Target
{
float clipxyz;
if(_Mode==1){
 clipxyz = input.posInObjectCoords.z - _ClipYPos;
}
if(_Mode==2){
 clipxyz = input.posInObjectCoords.y - _ClipYPos;
}
if(_Mode==3){
 clipxyz = input.posInObjectCoords.x - _ClipYPos;
}
if (clipxyz > 0.0&&_Mode!=0)
{
discard; 
}
fixed4 col=_Color;
return col;
}
ENDCG
}
}
}

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值