unity黑白滤镜_Unity3D后期Shader特效-马赛克4-打印效果(黑白图像|明度比较)
=========源文件下载群========
QQ群:818511955
=========================
首先看效果
这次CS程序不变
=========CRLuo_CameraFX_Printer.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//摄像机特效(打印)C#public class CRLuo_CameraFX_Printer : MonoBehaviour
{
//特效Shader变量 private Shader shader;
//特效材质球变量 private Material material;
//马赛克彩色贴图 public Texture2D RGBimage;
//单块马赛克尺寸[Range(1, 100)]
public int tileSize = 10;
//显示模式[Range(0,4)]
public int displayModeID = 0;
//色阶[Range(0, 16)]
public int colorLevel = 0;
//程序启动处理部分 void Start()
{
//已于材质球路径获取shader shader = Shader.Find("CRLuo/CRLuo_CameraFX_Printer");
//依据Shader创建材质球 material = new Material(shader);
}
//渲染处理部分 void OnRenderImage(RenderTexture InImg, RenderTexture OutImg)
{
//片段是否成功获取Shader if (shader != null)
{
//图像贴图 material.SetTexture("_RGBTex", RGBimage);
//给特效材质球传递马赛克块儿尺寸参数 material.SetInt("_TileSize", tileSize);
//传递显示模式参数 material.SetInt("_DisplayModeID", displayModeID);
//色阶 material.SetInt("_ColorLevel", colorLevel);
//渲染(输入渲染图像,输出渲染图像,使用材质球) //输入渲染图像自动传递给材质球的_MainTex属性。 Graphics.Blit(InImg, OutImg, material);
}
else
{
//直接输出渲染图像 Graphics.Blit(InImg, OutImg);
}
}
}
====着重讨论一下Shader实现方法====
首先用PS绘制一个中心渐变的圆。
我们把这个圆平铺到每个马赛克上。
使用 彩色图像 与 (0.299, 0.587, 0.114) 点乘,可以获得一维灰度值。
灰度值保存在grey中。
提示:彩色中的亮度权重是不同的,在红绿蓝中 亮度顺序是 绿>红>蓝,因此使用不同的数值。
(更多的颜色亮度顺序 白>黄>青>品>绿>红>蓝>黑)
//把马赛克图像,转换为亮度图像
float grey = dot(col_Mosaic.rgb, float3(0.299, 0.587, 0.114));
获得结果:
ColorLevel可以用来降低灰度图像的色阶
//判断是否把灰度图像降低色阶if(_ColorLevel > 0)
{
//降低灰度色阶,与彩色降低色阶同理 grey = round(grey *_ColorLevel)/ _ColorLevel;
}
这样,调整colorLevel,就可以获得任意灰阶图像。
现在需要把,每个马赛克中的灰度数值与平铺图像中的每个像素亮度做比较。
首先使用col_RGB_X用来提取,平铺图像的R/G/B/A某一个通道。
col_RGB_x中的数值,
只要小于grey灰度值的,就涂fixed4(0,0,0,1)黑色。
否则,就涂fixed4(1,1,1,1)白色。
//当前圆点颜色 小于 灰度if(col_RGB_X < grey)
{
//墨点颜色col = fixed4(0,0,0,1);
}
else
{
//纸张颜色col = fixed4(1,1,1,1);
}
}
//输出贴图结果renturn col;
运行结果亮度反了。
使用(1-灰度)反向灰度值
//当前圆点颜色 小于 反相灰度
if(col_RGB_X < (1 - grey))
获得正确结果
======CRLuo_CameraFX_Printer.shader
Shader "CRLuo/CRLuo_CameraFX_Printer"
{
Properties
{
_MainTex ("需要处理的图像", 2D) = "white" {}
_RGBTex("RGB纹理图案", 2D) = "white" {}
_TileSize("块尺寸", Range(0, 100)) = 10
_DisplayModeID("显示模式ID", Range(0, 100)) = 0
_ColorLevel("色阶级数", Range(0, 255)) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
//引入程序使用的函数集 CGPROGRAM
#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"
//获取场景模型数据 struct appdata
{
//获取模型顶点数据 float4 vertex : POSITION;
//获取模型UV数据 float2 uv : TEXCOORD0;
};
//定义顶点片段着色器数据类型 struct v2f
{
//UV数据 float2 uv : TEXCOORD0;
//顶点数据 float4 vertex : SV_POSITION;
};
//载入材质球主贴图 sampler2D _MainTex;
//获取贴图的偏移与重复数据float4 _MainTex_ST;
//载入材质球主贴图 sampler2D _RGBTex;
//载入马赛克尺寸(正整形数据)uniform int _TileSize;
//显示模式IDuniform int _DisplayModeID;
//显示模式IDuniform int _ColorLevel;
//顶点片段着色器程序 v2f vert (appdata v)
{
//定义输出数据 v2f o;
//顶点转换为摄像机视角坐标 o.vertex = UnityObjectToClipPos(v.vertex);
//应用贴图的偏移与重复 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
//输出模型结果 return o;
}
//表面着色器程序 fixed4 frag (v2f i) : SV_Target
{
//获取马赛克块数量 = 屏幕像素个数/块的像素个数float2 TileSum = _ScreenParams / _TileSize;
//整理UV,让一个马赛克块儿中的UV统一为一个数据float2 uv_Mosaic = ceil(i.uv *TileSum)/ TileSum;
//把整理后的UV结果赋给渲染图像,获得马赛克画面。fixed4 col_Mosaic = tex2D(_MainTex, uv_Mosaic);
//把马赛克图像,转换为亮度图像float grey = dot(col_Mosaic.rgb, float3(0.299, 0.587, 0.114));
//判断是否把灰度图像降低色阶if(_ColorLevel > 0)
{
//降低色阶,与彩色降低色阶同理grey = round(grey *_ColorLevel)/ _ColorLevel;
}
// 平铺UVfloat2 uv_Tile = frac(i.uv * TileSum);
//生成电视机屏幕纹理fixed4 col_RGB = tex2D(_RGBTex, uv_Tile);
//定义输出马赛克图像fixed4 col = col_Mosaic;
//暂存RGB的一个通道fixed col_RGB_X;
//判断使用RGB的哪个通道进行合成switch (_DisplayModeID)
{
case 1:
col_RGB_X = col_RGB.r;//红break;
case 2:
col_RGB_X = col_RGB.g;//绿break;
case 3:
col_RGB_X = col_RGB.b;//蓝break;
case 4:
col_RGB_X = col_RGB.a;//透明break;
}
//判断是否使用通道效果if(_DisplayModeID>0)
{
//当前圆点颜色 小于 反相灰度if(col_RGB_X < (1 - grey))
{
//墨点颜色col = fixed4(0,0,0,1);
}
else
{
//纸张颜色col = fixed4(1,1,1,1);
}
}
//输出贴图结果 return col;
}
ENDCG
}
}
}
绘制各种渐变图案完成多样的效果
=======本节完========
unity黑白滤镜_Unity3D后期Shader特效-马赛克4-打印效果(黑白图像|明度比较)相关推荐
- unity黑白滤镜_unity游戏相机滤镜渲染后期色彩处理特效着色器Colorful FX v4.4
unity游戏相机滤镜渲染后期色彩处理特效着色器Colorful FX v4.4,是一个可快速和自定义的后处理效果,颜色可调整. Colorful FX is a collection of high ...
- unity黑白滤镜_unity3D 把图片变黑白的Shader
//下面是shader Shader "UI/Default Grey" { Properties { [PerRendererData] _MainTex ("Spri ...
- 4.5.2.3_黑白滤镜
4.5.2.3_黑白滤镜 <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...
- canvas--putImageData--(灰色滤镜、黑白滤镜、反色滤镜、模糊滤镜、马赛克滤镜)
示例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title& ...
- 火云开发课堂 - 《Shader从入门到精通》系列 第八节:在Shader中实现黑白滤镜
<Shader从入门到精通>系列在线课程 第八节:在Shader中实现黑白滤镜 视频地址: http://edu.csdn.net/course/detail/1441/22672?aut ...
- Unity 粒子制作简单飞舞纸片特效
首先在3dmax里做一个很简单的纸片,并直接贴上带有高光和颜色的材质. 纸片在空中飞舞时会"自转",所以在max里面先做一个简单的旋转动画,并在Renderer Setup中将其序 ...
- 【游戏开发渲染】Unity ShaderGraph使用教程与各种特效案例:Unity2022(持续更新)
文章目录 一.ShaderGraph前言 二.ShaderGraph科普 1.渲染管线(Render Pipline) 2.可编程渲染管线,SRP(Scriptable Render Pipline) ...
- Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)
第一篇 Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜) 第二篇 Android Camera使用OpenGL ES 2.0和T ...
- Android Camera API 2使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)
这段时间有点忙,一直没时间写第三篇教程,其实代码很早之前就写好了.本系列教程会有三篇文章讲解Android平台滤镜的实现方式,希望在阅读本文之前先阅读前面两篇文档. 第一篇 Android Camer ...
最新文章
- R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化随着主成分的增加解释的方差的量(plotting explained variance)
- java游戏移动_java - Java游戏 - 如何让敌人移动? - SO中文参考 - www.soinside.com
- 鲍尔默说:你的东西再大 微软也装得下
- 第二章 反向传播算法如何工作的?
- Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)
- Python:为什么只有一个元素的tuple要加逗号?
- LeetCode Algorithm 507. 完美数
- 八皇后问题求解动态图形演示
- CityEngine 2012与ArcGIS 10.2破解心得
- vector function trmplate
- Visual Studio Code 前端调试不完全指南
- python怎么索引json中的值_使用Python在JSON中查找值
- zabbix修改tomcat监控端口
- SQL JOIN 简单介绍
- 怎么估算空间利用率?新研发传感器分分钟搞定!
- 腾讯内部几乎满分的项目管理PPT
- 智能家居APP设计规格
- 移动互联网产品数据分析
- 外贸常用术语_常用贸易术语大全
- 【有始有终,不让自己的付出辜负了自己期望 】
热门文章
- 《ANSYS CFX 14.0超级学习手册》——第2章 CFX软件简介2.1 CFX的软件构成
- 在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库
- 树莓派HMCL安装我的世界
- async_fifo实现与注意要点
- 全志allwinner A40i平台ads1115模块AD采样
- Redis该怎么学?其实很简单,这份学习路线+资料+书单我全部贡献出来了!
- 部署CloudSim云计算仿真平台
- mac java模拟器_iOS学习——如何在mac上获取开发使用的模拟器的资源以及模拟器中每个应用的应用沙盒...
- python如何下载tushare_python tushare安装
- 全国大学生数学建模竞赛2020A题炉温曲线MATLAB程序