一日一Shader·切除扩展效果【SS_30_1】

根据昨天的切除原理,修改了一下,实现了一个类似进入异空间的效果。

感觉这个效果还是很有用的,可以用来做角色或物体的隐藏和出现。而且考虑到有双面的效果,还可以用来显示物体的内部结构。

PS:如果要做人体的剖面,需要做4套模型——表层、肌肉、骨骼、内脏。

简单修改了一下脚本:

Shader "MyShader/SS_30_1"{
	Properties{
		_MainTex("MainTexture",2D) = ""{}
		_BlendTex("BlendTexture",2D) = ""{}
		_CutAxis("Cut Axis", Vector) = (0,1,0,0)
		_CutCenter("Cut Center", Vector) = (0,1,0,0)
		_CutThreshold("Cut Threshold", Float) = 0.5
	}
	SubShader{
		CGINCLUDE
		#include "UnityCG.cginc"
		#pragma vertex vert
		#pragma fragment frag
		#pragma shader_feature MASK_SPHERE  MASK_PLANE
		float4 _CutAxis;
		float4 _CutCenter;
		float _CutThreshold;

		struct appdata {
			float4 vertex : POSITION;
			float2 uv : TEXCOORD0;
		};
		struct v2f {
			float4 vertex : SV_POSITION;
			float2 uv : TEXCOORD0;
			float4 worldPos : TEXCOORD1;
		};

		float cutPosition(float3 pos) {
		#if MASK_PLANE			
			return dot(pos-_CutCenter,normalize(_CutAxis.xyz));
		#elif MASK_SPHERE
			return distance(pos,_CutCenter)-_CutThreshold;
		#else
			return 0.0;
		#endif
		}
		v2f vert(appdata v) {
			v2f o;
			o.vertex = UnityObjectToClipPos(v.vertex);
			o.uv = v.uv;
			o.worldPos = mul(unity_ObjectToWorld, v.vertex);		
			return o;
		}
		ENDCG
		Pass{
		cull front
			CGPROGRAM
			sampler2D _MainTex;
		
			fixed4 frag(v2f i) : SV_Target {
				if (cutPosition(i.worldPos.xyz) < 0) discard;
				return tex2D(_MainTex, i.uv);
			}
			ENDCG
		}
		Pass{			 
			CGPROGRAM	
			sampler2D _BlendTex;
			fixed4 frag(v2f i) : SV_Target {
				if (cutPosition(i.worldPos.xyz) < 0) discard;
				fixed4 col=tex2D(_BlendTex, i.uv);
				return col;
			}
			ENDCG			
			}
		}
	}

返回目录:https://blog.csdn.net/yzy1987523/article/details/107561997

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值