≡
导航
搜索
教程
插件
模型
模板
博客
交易
朋友
Unity 3D 游戏引擎吧
已关注 | 取消
+关注
关注:
46
帖子:
451
签到
07月13日 尚未签到
看帖
图片
精品
视频
共有回帖数
0
个
Unity5中Shader的问题
只看楼主
收藏
回复
懂得生活的人
等级:
我之前在Unity4里写了三个shader,平滑滤波、锐化滤波和高斯模糊,在4里同时施加在Main Camera里是正常的,但是到了Unity5里图像就颠倒了。
平滑滤波的Shader:
Shader "Custom/Smooth" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float uvOffsetx;
float uvOffsety;
uniform float width;
uniform float height;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
} ;
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
float4 frag (v2f i) : COLOR
{
uvOffsetx=i.uv.x/width;
uvOffsety=i.uv.y/height;
float4 s1 = tex2D(_MainTex,i.uv + float2(uvOffsetx,0.00));//右
float4 s2 = tex2D(_MainTex,i.uv + float2(-uvOffsetx,0.00));//左
float4 s3 = tex2D(_MainTex,i.uv + float2(0.00,uvOffsety));//上
float4 s4 = tex2D(_MainTex,i.uv + float2(0.00,-uvOffsety));//下
float4 s5=tex2D(_MainTex,i.uv + float2(uvOffsetx,uvOffsety));//右上
float4 s6=tex2D(_MainTex,i.uv + float2(-uvOffsetx,uvOffsety));//左上
float4 s7=tex2D(_MainTex,i.uv + float2(uvOffsetx,-uvOffsety));//右下
float4 s8=tex2D(_MainTex,i.uv + float2(-uvOffsetx,-uvOffsety));//左下
float4 texCol = tex2D(_MainTex,i.uv);
float4 outp;
float pct1=0.007164f;//pct:权
float pct2=0.033120f;
outp=(s5+s6+s7+s8)*pct1+(s1+s2+s3+s4)*pct2+texCol*0.838866;
//outp = pct*(s1+s2+s3+s4+s5+s6+s7+s8+texCol)/9.0f;//中值滤波
return outp;
}
ENDCG
}
}
}
锐化滤波的Shader:
Shader "Custom/Sharpen" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float uvOffsetx;
float uvOffsety;
uniform float width;
uniform float height;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
} ;
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
float4 frag (v2f i) : COLOR
{
uvOffsetx=i.uv.x/width;
uvOffsety=i.uv.y/height;
float4 s1 = tex2D(_MainTex,i.uv + float2(uvOffsetx,0.00));//右
float4 s2 = tex2D(_MainTex,i.uv + float2(-uvOffsetx,0.00));//左
float4 s3 = tex2D(_MainTex,i.uv + float2(0.00,uvOffsety));//上
float4 s4 = tex2D(_MainTex,i.uv + float2(0.00,-uvOffsety));//下
float4 texCol = tex2D(_MainTex,i.uv);
float4 outp;
outp = 5*texCol-s1-s2-s3-s4;
return outp;
}
ENDCG
}
}
}
高斯模糊滤波的Shader:
Shader "Custom/Gaus" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float uvOffset;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
} ;
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
float4 frag (v2f i) : COLOR
{
uvOffset=0.003f;
float4 s1 = tex2D(_MainTex,i.uv + float2(uvOffset,0.00));
float4 s2 = tex2D(_MainTex,i.uv + float2(-uvOffset,0.00));
float4 s3 = tex2D(_MainTex,i.uv + float2(0.00,uvOffset));
float4 s4 = tex2D(_MainTex,i.uv + float2(0.00,-uvOffset));
float4 texCol = tex2D(_MainTex,i.uv);
float4 outp;
float pct=0.2;//pct:权
outp = texCol* (1- pct*4) + s1* pct + s2* pct+ s3* pct + s4* pct;
return outp;
}
ENDCG
}
}
}
同时应用于Unity5的效果:
请问大神这是为什么……以及如何解决……
楼主 2015-05-28 23:51
回复
共有回帖数
0
个
回 帖
表情
图片
视频
欢迎来到本吧,您可以在此发帖和众多大咖交流学习.
选择或直接输入昵称
Tips:支持QQ截图直接粘贴
发表
登录直线网账号
自动登录
忘记密码
免费注册
本吧信息
查看详情
吧主:
mygameplay
本吧公告
优秀文章 【交流】Unity 脚本入门 个人经验及常用方法块 http://www.linecg.com/tieba/content_4292.html 大家可以看一下
我常逛的吧
我管理的吧
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈
|
关于直线
|
版权声明
|
会员须知