Shader山下(十二)材质属性绘制器

本文介绍了Unity5中的MaterialPropertyDrawer特性,用于自定义Shader属性在编辑器中的显示方式。通过示例展示了如何使用space、Header、KeywordEnum、Toggle和PowerSlider等标记,以实现纹理混合效果的参数调整,包括下拉框、开关和指数增长滑动条。同时,解释了Enum与KeywordEnum的区别,以及Toggle带参数和不带参数的影响。
摘要由CSDN通过智能技术生成

Unity5增加了一个叫MaterialPropertyDrawer的东西,可以使用它们标记在shader的Properties里面,扩充shader的一些参数在编辑器上的样式。

本文以Shader山下(十一)纹理混合中的shader为例子,来介绍一下这些标记。

Shader "Custom/Frag/Blend" {
	Properties {
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		_BlendTex ("Blend Texture", 2D) = "white" {}
		_Opacity ("Blend Opacity", Range(0, 1)) = 1
		[Space(50)][Header(MaterialPropertyDrawer)]
		[KeywordEnum(None, Add, Multiply, Screen)] _BlendMode ("Blend Mode", Float) = 0
//		[Enum(None, 0, Add, 1, Multiply, 2, Screen ,3)] _BlendMode ("Blend Mode", Float) = 0
		[Space]
		[Toggle] _Invert ("Invert?", Float) = 0
		[Toggle(ENABLE_DOUBLE)] _Double ("Double?", Float) = 0
		[PowerSlider(3.0)] _Power ("Power", Range(1,1024)) = 1
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200

		Pass
		{
			CGPROGRAM
			#pragma vertex vert_img
			#pragma fragment frag
			#pragma fragmentoption ARB_precision_hint_fastest
			#include "UnityCG.cginc"

			uniform sampler2D _MainTex;
			sampler2D _BlendTex;
			fixed _Opacity;
			int _BlendMode;
			bool _Invert;
			bool _Double;
			fixed4 getBlended(fixed4 renderTex, fixed4 blendTex)
			{
				fixed4 blended;

				switch (_BlendMode)
				{
					case 0:
					blended = renderTex;
					break;
					case 1:
					blended = renderTex + blendTex;
					break;
					case 2:
					blended = renderTex * blendTex;
					break;
					case 3:
					blended = (1.0 - ((1.0 - renderTex) * (1.0 - blendTex)));
					break;
				}


				if (_Invert)
				{
					blended = 1 - blended;
				}

				if (_Double)
				{
					blended *= 2;
				}

				retur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值