Unity Shader学习:油画效果

油画效果在学习浅墨大神的文章时看到的比较有趣,但是原文中也没详细的算法介绍如何实现,这里就先直接拿来用吧,UI和屏幕后处理都可以用,算法也看的不是很明白,好像是ShaderToy上老外搞得。



shader部分:

Shader "Custom/OilPaintEffect" {Properties{_MainTex("MainTex",2D)="white"{}//迭代次数_Radius("_Radius",Range(0.0,5.0)) = 2.0//模糊程度_ResolutionValue("_ResolutionValue",Range(0.0,5.0)) = 1.0//原始图片宽的像素_Width("Width",Int) = 0//原始图片高的像素_Height("Height", Int) = 0}SubShader{Pass{CGPROGRAM#pragma vertex vert_img#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;int _Radius;float _ResolutionValue;int _Width;int _Height;float4 frag(v2f_img i) :SV_Target{float2 src_size = float2(_ResolutionValue / _Width,_ResolutionValue / _Height);float2 uv = i.uv;float n = (_Radius + 1)*(_Radius + 1);float3 m0 = 0.0;float3 m1 = 0.0;float3 s0 = 0.0;float3 s1 = 0.0;float3 color = 0.0;for (int j = -_Radius;j <= 0;++j) {for (int k = -_Radius;k <= 0; ++k) {color = tex2D(_MainTex, uv +float2(k,j)*src_size).rgb;m0 += color;s0 += color * color;}}for (int j = 0;j <= _Radius; ++j) {for (int k = 0;k <= _Radius; ++k) {color = tex2D(_MainTex, uv + float2(k, j)*src_size).rgb;m1 += color;s1 += color * color;}}float4 finalColor = 0.0;float min_sigma2 = 100;m0 /= n;s0 = abs(s0 / n - m0 * m0);float sigma2 = s0.r + s0.g + s0.b;if (sigma2 < min_sigma2) {min_sigma2 = sigma2;finalColor = float4(m0, 1.0);}m1 /= n;s1 = abs(s1 / n - m1 * m1);sigma2 = s1.r + s1.g + s1.b;if (sigma2 < min_sigma2) {min_sigma2 = sigma2;finalColor = float4(m1, 1.0);}return finalColor;       }ENDCG}     }
}

Unity Shader学习:油画效果相关推荐

  1. Unity Shader学习:Dissolve消融效果

    Unity Shader学习:Dissolve消融效果 消融效果在游戏里非常常用,这里简单的实现下,代码里用到了if分支在shader里可能会费一点,如果想直接用puppet_master大佬版本的话 ...

  2. Unity Shader学习:水墨效果

    Unity Shader学习:水墨效果 偶然在网上看到9级铁甲蛹大神的水墨风格后处理觉得挺有意思,参照着实现一下,还是涉及到之前油画效果的算法,叫什么滤波暂时不清楚,应该用来处理手绘效果挺多的. 水墨 ...

  3. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  4. Unity Shader学习:动态模糊(shutter angle方式)

    Unity Shader学习:动态模糊 动态模糊一般有帧混合和motion vector两种,这里主要介绍motion vector的方法. Keijiro源码:https://github.com/ ...

  5. 《Unity Shader入门精要》学习笔记第5章 开始Unity Shader学习之旅

    本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第五章 开始Unity Sh ...

  6. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  7. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  8. Unity Shader学习:动态雾

    Unity Shader学习:动态雾 先将相机近裁面四个角向量传给shader,再通过观察空间下的深度值和相机位置算出像素在世界坐标系的位置,通过世界空间高度值来设定雾的范围和浓度,然后通过噪声和uv ...

  9. Unity Shader学习-高光反射

    Unity Shader学习-高光反射 高光反射计算公式 高光反射 = 光源的色彩和强度 * 材质的高光反射系数 * pow(max(0,视角方向 · 反射方向),_Gloss) 视角方向 = ref ...

最新文章

  1. 记一次MySQL字符集冲突导致的报错
  2. firefox的plugin-container.exe进程如何关闭?
  3. Gitorious安装与配置
  4. Ubuntu 设置程序开机启动(以指定用户身份)
  5. Django基于正则表达式的URL
  6. 新手入门Web前端要掌握的4项基础技能
  7. 非常干货之Python资源大全
  8. (21)xilinx PCIE 开发方法(学无止境)
  9. 网盘用户分享独播剧链接 百度未及时封禁一审被判赔偿百万余元
  10. c语言数组读心术,无聊的时候写的读心术小程序
  11. Hacker News的全文输出RSS地址
  12. 用于查询当前数据库中所有表格的记录条数的脚本
  13. C++ Primer 5th ed.pdf
  14. python有道批量单词音标整理-使用有道API在线批量翻译单词
  15. 安装Dukto局域网通讯工具
  16. RPM包安装MYSQL
  17. linux文件相关的指令tr,Linux命令篇之wc命令和tr命令(示例代码)
  18. layui数据表格合并列
  19. rn 滑动验证_rn-fetch-blob
  20. GPU加速(一)CUDA C编程及GPU基本知识

热门文章

  1. windows下MX150显卡安装cuda11.3+cudnn8.4.1+torch1.12.0+torchvision0.13.0+torchaudio0.12.0
  2. 数字先锋 | “智慧旅游”新模式,天翼云助力张家界旅游产业创新发展!
  3. 全球电池联盟(GBA)推动电动移动的发展
  4. ubuntu nginx+rtmp推流
  5. 西门子精彩SMART触摸屏如何进行备份和恢复操作?
  6. 黑盒测试详细功能描述
  7. c语言怎么进行大整数加法,c语言 大整数加法
  8. Android车机 - 应用市场1.0需求设计
  9. electron安装后运行报错解决方法
  10. GPS定位系统(五)——Docker