Unity里面为Sprite添加边框写的的shader
来源:互联网 发布:php登录成功显示用户名 编辑:程序博客网 时间:2024/06/11 04:42
小boss让我写个shader加到sprite上,然后发现了一个神奇的问题,
Sprite的vertex在哪?现在考虑一种Sprite,它的内容没有占满整个
sprite的rect(就是你能拖动的rect),其他地方是透明的。这种sprite
的顶点既不是rect的四个顶点,也不在图像内容的边界上,而是系统
自动生成的一个多边形,这个多边形比图像内容大,把图像内容包括
在其中。
那么我现在想弄一个效果,原sprite的背后弄个影子,对于新创建的
sprite,他的shader是内置的。只能自己新建一个material,然后把做
sprite的png图像拖到material的tex里。
主要是怎么排除多边形内部的透明部分,其实就是用 Blend One One让
该部分与当前屏幕的颜色混合就行,具体看代码。另外我又发现一个问题,
可能是个偶然会出现的bug还是什么,两个自定义的shader内容完全一致(除了
文件名字和第一行的shader“XXX”),竟然有一个会得出异常结果。
Shader "Custom/Fragment extend" {
Properties {
_Color ("Surround Color", Color) = (0.2,0.2,0.2,0.7)
_MainTex ("Base (RGB)", 2D) = "white" {}
_Range("Range",Range(0.1,0.3)) = 0.15
//_Range2("Range",Range(0.1,10))=0.5
}
SubShader {
//Tags{"RenderType"="Transparent"}
//Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
LOD 100
Pass{
Blend One One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _Range;
sampler2D _MainTex;
float _Range2;
float4 _Color;
struct appdata_t
{
float4 vertex : POSITION;
//half4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : POSITION;
//half4 color : COLOR;
float2 texcoord : TEXCOORD0;
//float2 worldPos : TEXCOORD1;
};
v2f vert (appdata_t v)
{
v2f o;
v.vertex.xyz+=_Range*v.vertex.xyz;
//v.vertex.xy+=_Range2;
o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);
//o.texcoord=TRANSFORM_TEX(v.texcoord,_MainTex);
o.texcoord=v.texcoord;
return o;
}
half4 frag (v2f IN) : COLOR
{
half4 I=tex2D(_MainTex,IN.texcoord);
if(I.a<0.4)
{
I.rgb=0f;
I.a=0f;
}
else
I.rgb*=_Color.rgb;
return I;
}
ENDCG
}
Pass{
Blend One One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _Range;
sampler2D _MainTex;
float4 _Color;
struct appdata_t
{
float4 vertex : POSITION;
//half4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : POSITION;
//half4 color : COLOR;
float2 texcoord : TEXCOORD0;
//float2 worldPos : TEXCOORD1;
};
v2f vert (appdata_t v)
{
v2f o;
//v.vertex.xyz+=_Range*v.vertex.xyz;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
//o.texcoord=TRANSFORM_TEX(v.texcoord,_MainTex);
o.texcoord=v.texcoord;
return o;
}
half4 frag (v2f IN) : COLOR
{
half4 I=tex2D(_MainTex,IN.texcoord);
if(I.a<0.4)
{
// I.rgb=0;
// I.a=0;
I=0;
//I.rgba=0;
}
return I;
}
ENDCG
}
//Pass{
// Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
// Blend One Zero
// SetTexture [_MainTex]
// {
// Combine Texture
// }
//}
// third part
}
FallBack "VertexLit"
}
- Unity里面为Sprite添加边框写的的shader
- unity在定制的shader里面如何添加阴影
- unity里面动态的替换shader
- Untiy 里面初写shader ---写一个文字的shader
- {Unity} 单色Sprite Shader
- Unity为Image组件动态添加sprite
- 我写的书:Unity Shader编程
- unity的材质竟然可以写shader
- Unity shader 写一个垃圾的 黄金shader
- Unity 2D Toolkit中动态改变Animated Sprite的Shader
- Unity shader教程-第一课:写shader和应用shader的流程
- 为CEDIT添加有颜色的边框
- 为图片添加好看的阴影边框
- Cocos2d-iphone 为sprite添加双击的事件响应
- 【Unity】【Shader】写一个初步的水波模拟Gerstner Waves
- [Unity3D] [Shader] 实现基于NDC的Sprite渐隐Shader
- Unity的shader
- 基本的unity shader
- UITextField出现删除按钮
- 2. 联合
- Oracle 数据库环境变量配置示例
- Hadoop实战 -- IO
- openfire扩充内存
- Unity里面为Sprite添加边框写的的shader
- 我认为这一切都是因为母亲的出走带来的
- java 递归 面试题
- 客户端Git代码的下载与提交
- 请实现,鼠标点击页面中的任意标签,alert该标签的名称.(注意兼容性)
- Android中文API(143) —— CountDownTimer
- 第十二周项目二教师兼干部类
- 第十二周上机实践项目——长颈鹿类对动物类的继承(protected继承方式下)
- 理解linux inode