当前位置: 首页 > news >正文

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 updatevoid Start(){}// Update is called once per framevoid 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;}ENDCGProperties{_MainTex("Texture", 2D) = "white" {}_VignetteIntensity("VignetteIntensity", Range(0, 3)) = 1_VignetteSmoothness("VignetteSmoothness", Range(0, 5)) = 1}SubShader{// No culling or depthCull Off ZWrite Off ZTest Always//0校色Pass{CGPROGRAM#pragma vertex vert_img#pragma fragment fragVignette            ENDCG}}
}

相关文章:

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

大家好,我是阿赵。   继续说一下屏幕后处理的做法,这一期讲的是Vignette暗角效果。 一、Vignette效果介绍 Vignette暗角的效果可以给画面提供一个氛围,或者模拟一些特殊的效果。 还是拿这个角色作为底图 添加了Vignette效果后&#xff0…...

Java读取Excel 单元格包含换行问题

Java读取Excel 单元格包含换行问题 需求解决方案 需求 针对用户上传的Excel数据,或者本地读取的Excel数据。单元格中包含了换行,导致读取的数据被进行了切片。 正常读取如下图所示。 解决方案 目前是把数据读取出来的cell转成字符串后,…...

Django实现接口自动化平台(十)自定义action names【持续更新中】

相关文章: Django实现接口自动化平台(九)环境envs序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 深入理解DRF中的Mixin类_做测试的喵酱的博客-CSDN博客 python中Mixin类的使用_做测试的喵酱的博客-CSDN博客 本章是项目的一…...

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助,遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 📝个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列: ☄️爬虫J…...

【已解决】Flask项目报错AttributeError: ‘Request‘ object has no attribute ‘is_xhr‘

文章目录 报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 报错及分析 报错代码 File "/www/kuaidi/6f47274023d4ad9b608f078c76a900e5_venv/lib/python3.6/site-packages/flask/json.py", line 251, in jsonifyif current_app.config[JSONIFY_PR…...

【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳,持续更新中 ~

Java学习路线攻略导图 上篇 前言1、入门介绍篇2、程序基础概念篇3、包及访问权限篇4、异常处理篇5、特别篇6、面向对象篇7、新特性篇8、常用类库篇 前言 🍺🍺 各位读者朋友大家好!得益于各位朋友的支持和关注,我的专栏《Java基础…...

IntelliJ IDEA 2023.1 更新内容总结

IntelliJ IDEA 2023.1 更新内容总结 * 主要更新内容 * UI 大改版 * 性能改进项 * 其它更新内容IntelliJ IDEA 2023.1 更新内容总结 主要更新内容 IntelliJ IDEA 2023.1 针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施, …...

什么是计算机蠕虫?

计算机蠕虫诞生的背景 计算机蠕虫的诞生与计算机网络的发展密切相关。20世纪60年代末和70年代初,互联网还处于早期阶段,存在着相对较少的计算机和网络连接。然而,随着计算机技术的进步和互联网的普及,计算机网络得以迅速扩张&…...

【机器学习】吴恩达课程1-Introduction

一、机器学习 1. 定义 计算机程序从经验E中学习,解决某一任务T,进行某一性能P,通过P测定在T上的表现因经验E而提高。 2. 例子 跳棋程序 E:程序自身下的上万盘棋局 T:下跳棋 P:与新对手下跳棋时赢的概…...

DBC转excel(python语言)

重复造轮子,只是为了熟悉一下DBC格式。 与同类工具的不同点: 能批量转换在同一文件夹下的所有DBC,省时省力。很多同类工具转换后的excel列宽较小,不能直接显示全部信息。本代码使用了自适应的列宽,看起来更方便。** …...

Java集合(List、Set、Map)

Java中的集合是用于存储和组织对象的数据结构。Java提供了许多不同的集合类,包括List、Set和Map等,以满足不同的需求。下面将介绍一些常见的Java集合类及其使用方法。 一、List List是一个有序的集合,它允许元素重复出现,并提供…...

Linux--只执行一次的计划任务--at命令

Linux–只执行一次的计划任务–at命令 文章目录 Linux--只执行一次的计划任务--at命令一、atd的启动和at的运行方式二、at总结 一、atd的启动和at的运行方式 atd的启动: systemctl restrat atd #重新启动atd这个服务 systemctl enable atd #让这个服务开机自启动 sy…...

关于贪心算法的一个小结

下面的内容主要参考了数据结构与算法之美。 贪心算法的应用有: 霍夫曼编码(Huffman Coding) Prim和Kruskal最小生成树算法 01背包问题(当允许取部分物品的时候) 分糖果 我们有m个糖果和n个孩子。我们现在要把糖果分给这些孩子吃&#xff…...

五、DQL-2.基本查询

一、数据准备 1、删除表employee: drop table employee; 2、创建表emp: 3、添加数据: 4、查看表数据: 【代码】 -- 查询数据--------------------------------------------------------- drop table emp;-- 数据准备-----------…...

SSL证书常见问题:SSL证书的概念和作用

什么是SSL证书? SSL证书是一种数字证书,它与身份证、驾照的功能一样,用于证明网站的身份。SSL证书是由全球信任的证书颁发机构(CA)在验证服务器身份后颁发,安装SSL证书后会激活HTTPS协议,在用户…...

J2EEXML建模

目录 用一个xml-config文件实例: 先看config.xml文件 再看 ActionModel ConfigModel ActionNotFoundException ForwardNotFoundException ConfigModelFactory ActionDuplicateDefinitionException ForwardDuplicateDefinitionException InvalidPathExcept…...

vue中export和export default

参考:vue中export和export default的使用 参考:vue里的export default...

转职做项目经理,我为什么选择PMP?

老实说,在学习PMP之前,我做了很长时间的思想斗争,一是平时工作有些忙,没有大块儿时间集中学习;二是不确定考完之后是否真能用上。但现在我可以很明确的告诉每一个想学习PMP的人:放心学吧,知识不…...

LangChain(5)Conversational Agents

Large Language Models (LLMs) 在语义知识方面表现不错,但也有一些不足,如:不能正确计算数学公式、无法获取最新知识新闻 通过 Agents 可以赋予 LLMs 更多能力,让LLM能够计算、上网查询 agent 简单使用 from langchain import …...

【云原生】Kubernetes临时容器

临时容器 特性状态: Kubernetes v1.25 [stable] 本页面概述了临时容器:一种特殊的容器,该容器在现有 Pod 中临时运行,以便完成用户发起的操作,例如故障排查。 你会使用临时容器来检查服务,而不是用它来构建…...

YOLOv7剪枝实战:5种高效剪枝方法对比与代码实现

YOLOv7剪枝实战:5种高效剪枝方法对比与代码实现 在目标检测领域,YOLOv7以其卓越的速度-精度平衡成为工业界宠儿。但当我们将模型部署到边缘设备或需要高吞吐量的生产环境时,原始模型的计算量和参数量往往成为瓶颈。这时,模型剪枝技…...

为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点

第一章:Python WASM部署的现状与认知误区WebAssembly(WASM)正迅速成为浏览器端高性能计算的新基石,但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”,实则 Pytho…...

Axure RP中文界面完全指南:4步实现高效设计工作流

Axure RP中文界面完全指南:4步实现高效设计工作流 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 作为产…...

Spring Boot项目实战:5步搞定sa-token与OAuth2.0的无缝整合(附完整代码)

Spring Boot项目实战:5步搞定sa-token与OAuth2.0的无缝整合(附完整代码) 在当今微服务架构盛行的时代,认证授权已成为系统设计中不可或缺的一环。对于Java开发者而言,如何在保持代码简洁的同时实现强大的权限控制&…...

Qwen3-VL-8B数据库课程设计:构建一个多模态商品智能检索系统

Qwen3-VL-8B数据库课程设计:构建一个多模态商品智能检索系统 最近有个学弟跑来问我,说数据库课程设计不知道做什么好,想做个有技术含量又能拿高分的项目。我给他提了个建议,用现在很火的多模态大模型,结合传统的数据库…...

利用快马ai快速生成c语言语法学习原型,直观掌握编程基础

今天想和大家分享一个特别实用的C语言学习小技巧。作为一个编程新手,我最近发现用InsCode(快马)平台可以快速搭建C语言学习原型,把抽象的概念变成看得见、能运行的代码,学习效果特别好。 为什么要用原型学习法 刚开始学C语言时,最…...

Java初学者项目需要哪些技术?

对于Java初学者,以下技术栈组合既能满足学习需求,又能完成完整项目开发:核心基础Java语法基础掌握变量、循环、条件语句面向对象三大特性:封装、继承、多态集合框架:$ArrayList$、$HashMap$等异常处理机制开发工具IDE&…...

异步AI流式响应总出错?FastAPI 2.0架构设计图首次公开:EventSource vs Server-Sent Events vs WebSockets选型决策树

第一章:FastAPI 2.0异步AI流式响应架构设计图全景概览FastAPI 2.0 引入了原生增强的异步流式响应支持,为大语言模型(LLM)推理、实时语音转写、多模态生成等AI场景提供了低延迟、高吞吐的基础设施能力。其核心在于将 ASGI 生命周期…...

RAG开发

LangChain通用提示词模板:from langchain_core.prompts import PromptTemplate from langchain_community.llms import Tongyiprompt_template PromptTemplate.from_template("我的邻居姓{lastname},刚生了{gender}" )prompt_template.format(lastname …...

OpenClaw跨平台实战:Windows到Mac的Qwen3-32B配置迁移

OpenClaw跨平台实战:Windows到Mac的Qwen3-32B配置迁移 1. 为什么需要跨平台配置迁移? 去年冬天,我在Windows工作站上搭建了一套基于Qwen3-32B的OpenClaw自动化系统,用于处理日常的文档整理和数据分析任务。当公司配发新款MacBoo…...