Unity3D Shader 高斯模糊

//Shader
Shader "Hidden/GaussianBlur"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_BlurSize ("Blur Size", Float) = 0.1
} CGINCLUDE #include "UnityCG.cginc" sampler2D _MainTex;
uniform half4 _MainTex_TexelSize;
uniform float _BlurSize; static const half weight[] = {0.0205, 0.0855, 0.232, 0.324};
static const half4 coordOffset = half4(.0h,.0h,-.0h,-.0h); struct v2f_blurSGX
{
float4 pos:SV_POSITION;
half2 uv:TEXCOORD0;
half4 uvoff[]:TEXCOORD1;
}; v2f_blurSGX vert_BlurHorizontal(appdata_img v)
{
v2f_blurSGX o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = v.texcoord.xy;
half2 offs = _MainTex_TexelSize.xy*half2(,)*_BlurSize;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset*;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset*;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset; return o;
} v2f_blurSGX vert_BlurVertical(appdata_img v)
{
v2f_blurSGX o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = v.texcoord.xy; half2 offs = _MainTex_TexelSize.xy*half2(,)*_BlurSize;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset*;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset*;
o.uvoff[] = v.texcoord.xyxy+offs.xyxy*coordOffset; return o;
} fixed4 frag_Blur(v2f_blurSGX i):SV_Target
{ fixed4 c = tex2D(_MainTex,i.uv)*weight[];
for(int idx=; idx<; idx++)
{
c+=tex2D(_MainTex,i.uvoff[idx].xy)*weight[idx];
c+=tex2D(_MainTex,i.uvoff[idx].zw)*weight[idx];
} return c;
} ENDCG SubShader
{
// No culling or depth
Cull Off ZWrite Off Pass
{
ZTest Always
CGPROGRAM
#pragma vertex vert_BlurHorizontal
#pragma fragment frag_Blur ENDCG
} Pass
{
ZTest Always
CGPROGRAM
#pragma vertex vert_BlurVertical
#pragma fragment frag_Blur ENDCG
}
}
}
//c#
using UnityEngine;
using System.Collections; [RequireComponent(typeof(Camera))]
[ExecuteInEditMode]
public class Blur : MonoBehaviour { public Material ma; public float BlurSize =;
public int interator = ; void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture)
{ ma.SetFloat ("_BlurSize", BlurSize);
int rtW = sourceTexture.width/;
int rtH = sourceTexture.height/; RenderTexture rtTempA = RenderTexture.GetTemporary (rtW, rtH, , sourceTexture.format);
rtTempA.filterMode = FilterMode.Bilinear; RenderTexture rtTempB = RenderTexture.GetTemporary (rtW, rtH, , sourceTexture.format);
rtTempB.filterMode = FilterMode.Bilinear; for (int i = ; i < interator; i++) {
if ( == i) {
Graphics.Blit (sourceTexture, rtTempA,ma,);
Graphics.Blit (rtTempA, rtTempB, ma, );
} else { Graphics.Blit (rtTempB, rtTempA, ma, );
Graphics.Blit (rtTempA, rtTempB,ma,);
} } Graphics.Blit(rtTempB, destTexture); RenderTexture.ReleaseTemporary(rtTempA);
RenderTexture.ReleaseTemporary(rtTempB);
} }
Unity3D Shader 高斯模糊的更多相关文章
- 【译】Unity3D Shader 新手教程(1/6)
本文为翻译,附上原文链接. 转载请注明出处--polobymulberry-博客园. 刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D ...
- Unity3D shader简介
Unity3D shader简介 可以肯定的说Unity3D使得很多开发者开发游戏更容易.毫无疑问,shader(着色器)编码,仍有很长的路要走.shader是一个专门运行在GPU的程序,经常被神秘包 ...
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 转 猫都能学会的Unity3D Shader入门指南(二)
猫都能学会的Unity3D Shader入门指南(二) 关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己 ...
- Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- Unity3d Shader
Unity3d Shader 预览Surface Shader主要用来实现光照相关处理,可能更简洁. Vertex and Fragment Shader 如果不与光照交互, 则可以用这个shader ...
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
随机推荐
- Chromium OS 初体验
Chromium OS可是早有耳闻,但是一直没有尝试,最近很多评论甚至认为会对Windows和Mac都能够造成压力,于是迫不及待的想尝试一下了,百度下了官网,官网很贴心,不光给了用于写入U盘的镜像文件 ...
- AMBA APB总线
前面分析了AHB总线协议.接下来分析APB总线协议. (一) APB总线接口: PCLK APB总线时钟. PRESETn APB总线复位.低有效. PADDR 地址总线. PSELx 从设备选择. ...
- android highcharts 柱状图例子
android提供achartengine api 只能做简单的,如果是复杂的图表,个人的想法结合highcharts来完成:减小工作量,官方提供的例子也非常丰富. 通过android webview ...
- Microsoft/Git-Credential-Manager-for-Mac-and-Linux
纠正Mac上的错误: Fatal: java.lang.Error encountered. Details: unexpected errorfatal: credential helper '!/ ...
- 6种常见的Git错误以及解决的办法
我们都会犯错误,尤其是在使用像Git这样复杂的东西时.如果你是Git的新手,可以学习如何在命令行上开始使用Git.下面介绍如何解决六个最常见的Git错误. Photo by Pawel Janiak ...
- Java定时任务示例
package com.my.timer; import java.util.Date; import java.util.TimerTask; public class myTask extends ...
- FAL_CLIENT和FAL_SERVER参数详解
FAL_CLIENT和FAL_SERVER参数详解 转载:http://openwares.net/database/fal_client_fal_server.html FAL_CLIENT和FAL ...
- iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)
很久以前就想写这么一个无限滚动的Demo了,最近学习了下Swift,手中没有可以用来练手的Demo,所以才将它实现了. Github地址(由于使用了UIView+AutoLayout第三方进行布局,所 ...
- post请求数据量过大,提交失败
HttpRuntimeSection.MaxRequestLength 属性,请求的最大大小(以千字节为单位). 默认大小为 4096 KB (4 MB) <system.web> < ...
- [转]在Windows上安装RabbitMQ
原文链接 翻译:xiezc 下载服务器 描述 下载 Windows系统安装程序(来自Bintray) 的RabbitMQ的服务器-3.7.4.exe (签名) Windows系统安装程序(来 ...