文章目录
- 思路
- Shader
- CSharp
- Camera PP 脚本
- Outline Renderer 提取器
- OutlineManager
- 效果
之前写的一个类似Photoshop中的图层的 内发光 效果
管线:built-in 管线 unity 版本:2019.4.30f1
思路- 得到内轮廓边缘:只要某个像素的 kernal size 范围内的,如 5x5 的 kernal size,只要某个 pixel(x,y) 像素不是全黑,并且 kernal size 核内的 sum 值小于 kernal size 平方,都算是边缘
- 将内轮廓边缘模糊
- 将模糊的边缘与 _SrcTex 做像素交集才显示
// jave.lin 2021/02/25
Shader "PP/InnerGlowPP"
{
CGINCLUDE
#include "UnityCG.cginc"
// pure col
float4 vert_pure_col(float4 vertex : POSITION) : SV_POSITION
{
return UnityObjectToClipPos(vertex);
}
fixed4 frag_pure_col() : SV_Target
{
return 1;
}
// inner glow
Sampler2D _InnerGlowOrginTex;
float4 _InnerGlowOrginTex_TexelSize;
F _InnerGlowKernelSize;
F _InnerGlowSize;
struct a2v_inner_glow
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f_inner_glow
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f_inner_glow vert_inner_glow (a2v_inner_glow v) {
v2f_inner_glow o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag_inner_glow(v2f_inner_glow i) : SV_Target
{
fixed originV = 0;
F sum = 0;
int start = -_InnerGlowKernelSize;
int count = _InnerGlowKernelSize + 1;
int delta = count - start;
int threhold = delta * delta;
for (int x = start; x
关注
打赏
热门博文
- 3D Assets (Textures & Model & Animations) & Game Design Ideas & DCC Tutorials & TA
- LearnGL - 学习笔记目录
- Unity - Timeline 知识汇总
- Unity Graphics - 知识点目录 - 停止翻译,因为发现官方有中文文档了
- Graphic资料
- Unity Lightmap&LightProbe局部动态加载(亲测2020以及以上版本官方修复了)
- Unity - 踩坑日志 - 低版本线性颜色空间渲染异常的 “BUG”
- Unity Shader - PBR 渲染 SP 导出的素材
- 什么是 3A 游戏?
- Photosohp - 实现 2D MetaBall、MetaFont