Unity自定义后处理——Vignette暗角

  大家好,我是阿赵。
  继续说一下屏幕后处理的做法,这一期讲的是Vignette暗角效果。

一、Vignette效果介绍

  Vignette暗角的效果可以给画面提供一个氛围,或者模拟一些特殊的效果。
还是拿这个角色作为底图
在这里插入图片描述

添加了Vignette效果后,屏幕的四边会产生一个像老式电视机一样的压暗的效果,
在这里插入图片描述

通过调节参数,可以做出形状比较夸张的压暗效果
在这里插入图片描述

在这里插入图片描述

  如果加上闪烁和横纹之类,也可以模拟老式电影的效果。

二、实现原理

1、以屏幕中心点计算每个像素点的距离

float2 screenUV = abs(i.uv - float2(0.5f,0.5f))*_VignetteIntensity;
float dist = length(screenUV);
col.rgb *= dist;

在这里插入图片描述

  这时候,由于屏幕靠中间的点离屏幕中心点(0.5f,0.5f)近,然后边缘的点里屏幕中心点远,所以得到的效果是中间黑,四周白。

2、给距离做power计算,让边缘形状变成接近矩形

float2 screenUV = abs(i.uv - float2(0.5f,0.5f))*_VignetteIntensity;
screenUV = pow(saturate(screenUV), _VignetteSmoothness);
float dist = length(screenUV);
col.rgb *= dist;

在这里插入图片描述

  经过计算后,现在的黑白变成了比较接近屏幕矩形。当然,这个和pow的参数有关,调节不同的参数,可以得到不同的形状。

3、给黑白做反向

float2 screenUV = abs(i.uv - float2(0.5f,0.5f))*_VignetteIntensity;
screenUV = pow(saturate(screenUV), _VignetteSmoothness);
float dist = length(screenUV);
float vfactor = pow(saturate(1 - dist * dist), _VignetteSmoothness);
col.rgb *= vfactor;

在这里插入图片描述

  这时候,可以看到,暗角的效果就做出来了。

三、完整代码

1、C#代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VignetteCtrl : MonoBehaviour
{
    [Range(0, 3)]
    public float vignetteIntensity = 1.8f;
    [Range(0, 5)]
    public float vignetteSmoothness = 5;
    private Material vignetteMat;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (vignetteMat == null)
        {
            vignetteMat = new Material(Shader.Find("Hidden/AzhaoVignette"));
        }
        if (vignetteMat == null || vignetteMat.shader == null || vignetteMat.shader.isSupported == false)
        {
            return;
        }
        vignetteMat.SetFloat("_VignetteIntensity", vignetteIntensity);
        vignetteMat.SetFloat("_VignetteSmoothness", vignetteSmoothness);
        Graphics.Blit(source, destination, vignetteMat, 0);
    }
}

2、Shader

Shader "Hidden/AzhaoVignette"
{
	CGINCLUDE
#include "UnityCG.cginc"

	sampler2D _MainTex;
	float4 _MainTex_TexelSize;

	float _VignetteIntensity;
	float _VignetteSmoothness;

	half4 fragVignette(v2f_img i) : SV_Target
	{
		half4 col = tex2D(_MainTex, i.uv);


		//暗角
		float2 screenUV = abs(i.uv - float2(0.5f,0.5f))*_VignetteIntensity;
		screenUV = pow(saturate(screenUV), _VignetteSmoothness);
		float dist = length(screenUV);
		float vfactor = pow(saturate(1 - dist * dist), _VignetteSmoothness);
		col.rgb *= vfactor;

		return col;
	}


		ENDCG
		Properties
	{
		_MainTex("Texture", 2D) = "white" {}
		_VignetteIntensity("VignetteIntensity", Range(0, 3)) = 1
		_VignetteSmoothness("VignetteSmoothness", Range(0, 5)) = 1
	}
	SubShader
	{
		// No culling or depth
		Cull Off ZWrite Off ZTest Always
		//0校色
		Pass
		{
			CGPROGRAM
			#pragma vertex vert_img
			#pragma fragment fragVignette            


			ENDCG
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/40881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

svn迁移到git实际操作

1.到svn项目目录右键选中gitbash打开窗口&#xff0c;执行获取用户并映射成git样式账号命令如下: svn log -q | awk -F | /^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" "$2" <"$2"163.cn>…

【【51单片机的蜂鸣器-11】】

51单片机的蜂鸣器 DS1302我一直有问题搁置了几百天了 先来看看蜂鸣器 搞了一个礼拜verilog然后出去吃饭 估计自己得有10多天没看c语言和51单片机了 现在先处理一下蜂鸣器的问题 蜂鸣器 蜂鸣器分为有源蜂鸣器和无源蜂鸣器 有源内部自带震荡源&#xff0c;将正负极接上直流电压…

预处理详解(一)---预定义符号

文章目录 预定义符号预定义符号的使用 预定义符号 在C语言中&#xff0c;有一些有意思的预定义符号&#xff0c;这些预定义符号都是语言内置的&#xff0c;即以及定义好的&#xff0c;我们可以直接使用。预定义符号主要有以下几个&#xff1a; __FILE__ //进行编译的源…

react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 在现…

Python 下载安装总结

title: Python 下载安装总结 date: 2023-06-26 16:40:45 tags: Python categories:开发工具及环境 cover: https://cover.png feature: false 1. 下载 进入官网&#xff1a;Python.org&#xff0c;鼠标悬停在 Downloads&#xff0c;就会出现下载按钮 点击下载&#xff0c;即可…

uniapp基于阿里图标库引入彩色的图标iconfont

1.进入阿里巴巴矢量图标库链接: https://www.iconfont.cn/&#xff0c;添加图标到项目&#xff0c;然后下载至本地 2.对下载的文件进行解压&#xff0c;命令行进入解压后的文件下&#xff0c;执行一下命令&#xff0c;全局安装iconfont-tools工具 npm install -g iconfont-to…

解析基因影响:孟德尔随机化的创新思维

一、引言 在当今的遗传学和生物学研究中&#xff0c;我们对基因对个体特征和性状的影响的理解变得更加深入。然而&#xff0c;基因影响的复杂性和多样性给我们带来了巨大的挑战。为了更好地揭示基因影响的本质和机制&#xff0c;我们需要采用创新的研究思维和方法。 本文的目的…

myAgv智能移动底盘的slam算法学习以及动态避障

前言 随着科技得越来越发达&#xff0c;人工智能&#xff0c;自动驾驶导航等字眼频频出现在我们得眼前。但是目前来说自动驾驶并没有得到很全面得普及&#xff0c;还在进行不断的开发和测试当中。从小就爱好车的我&#xff0c;对这项技术也很是感兴趣。 偶然间在上网的时候买…

echarts_柱状图+漏斗图

目录 柱状图(bar)需求[1] 复制案例[2] 修改类目轴方向[3] 修改数据渲染方向[4] 修改坐标轴文本样式 漏斗图(funnel)漏斗图的形状 柱状图(bar) 需求 如上图&#xff0c;做一个横向柱状图&#xff0c;后端返回的数据是从小向大排列的数据&#xff0c;希望能够按照顺序进行展示。…

基于MATLAB的无人机遥感数据预处理与农林植被性状估算教程

详情点击链接&#xff1a;基于MATLAB的无人机遥感数据预处理与农林植被性状估算前言 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势&#xff0c;是智慧农业必须采…

Redis的4种分布式限流算法

限流 服务系统流量多,的确是一件好事,但是如果过载,把系统打挂了,那大家都要吃席了。 所以,在各种大促活动之前,要对系统进行压测,评估整个系统的峰值QPS,要做一些限流的设置,超过一定阈值,就拒绝处理或者延后处理,避免把系统打挂的情况出现。 限流和熔断有什么区…

Linux 学习记录53(ARM篇)

Linux 学习记录53(ARM篇) 本文目录 Linux 学习记录53(ARM篇)一、内存读写指令1. 在C语言中读取内存2. 指令码及功能3. 格式4. 使用示例5. 寻址方式(1. 前索引方式(2. 后索引方式(3. 自动索引 6.批量寄存器操作指令(1. 操作码(2. 格式(3. 使用示例(4. 地址增长方式>1 ia后缀&…

ELK(elasticsearch+logstash+kibana+beats)

什么是ELK Elasticsearch&#xff1a;Elasticsearch&#xff08;以下简称ES&#xff09; 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心&#xff0c;采用集中式数据存储&#xff0c;可以通过机器学习来…

Kubernetes_1.27.3_Harbor结合Nacos实战

Nacos 实战 作者:行癫(盗版必究) 一:Nacos简介 1.简介 ​ Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台;Nacos 致力于帮助您发现、配置和管理微服务;Nacos 提供了一组简单易用的特…

Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

前言 本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。 在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps,或ofd,或xlsx,或zip等链接。需要你使用python自…

260道2023最新网络安全工程师面试题(附答案)

2023年过去了一大半&#xff0c;先来灵魂三连问&#xff0c;年初定的目标完成多少了&#xff1f;薪资涨了吗&#xff1f;女朋友找到了吗&#xff1f; ​好了&#xff0c;不扎大家的心了&#xff0c;接下来进入正文。 由于我之前写了不少网络安全技术相关的文章和回答&#xff…

CentOS 8 GLIBC升级失败系统崩溃抢修实战

CentOS 8 GLIBC升级失败系统崩溃抢修实战 1. 恐怖的问题2. 参考解决方案3. 抢修实战3.1 准备工作3.2 抢修流程3.3 解决启动后Permission Denied3.3.1 参考方案3.3.2 解决 4. 总结 服务器为CentOS 8&#xff0c;支持glibc版本为2.28&#xff0c;但编译一个工具的glibc需求版本为…

【Ceph集群应用】CephFS文件系统之MDS接口详解

CephFS文件系统之MDS接口详解 1.创建CephFS文件系统MDS接口1.1 创建cephfs1.2 基于内核的客户端挂载1.3 基于fuse工具方式的客户端挂载 接上文基于ceph-deploy部署Ceph集群详解 1.创建CephFS文件系统MDS接口 服务端操作 &#xff08;1&#xff09;在admin管理节点创建mds服务…

Python测试框架Pytest的基础入门

Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries. 通过官方网站介绍…