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

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

文章目录

  • 环境
  • 原因
  • 解决
    • CSharp 脚本
    • 效果预览 - Light.shadowCustomResolution
    • 效果预览 - Using Quality Settings
  • 应用
    • ControlLightShadowResolution.cs Component
    • Tools Batching add the Component to all Light
  • References


环境

Unity : 2020.3.37f1
Pipeline : BRP


原因

(好久没搬砖了,偶尔健身一下,顺便将这些无技术含量的内容,记到 blog,不要记在脑子)

最近给项目做优化的过程中
发现 BRP 管线下的 Shadow Resolution 只能在 Project Settings/Quality/Shadow Resolution 去设置
而且发现
Shadow Resolution 的一些枚举为:

  • Low Resolution - 1K
  • Medium Resolution - 2K
  • High Resolution - 4K
  • Very High Resolution - 4K (这个可能因硬件不同而不同)

在这里插入图片描述

在这里插入图片描述


解决

但是如果想要设置更小的 shadow resolution 的话,这步就没辙了?
还好我去公司中台请教了 TA 专家,他说 BRP 中一样是可以设置的

在这里插入图片描述


CSharp 脚本

// jave.lin 2023/03/06 custom shadow resolution
// refer to : https://docs.unity3d.com/Manual/shadow-mapping.htmlusing UnityEngine;public enum eCustomShadowResolution
{UsingQualitySettings = 0,Low = 128,Medium = 256,High = 512,VeryHigh = 1024,
}[ExecuteInEditMode]
public class LightCustomShadowResolution : MonoBehaviour
{public bool runInUpdate = true;public eCustomShadowResolution shadowSize = eCustomShadowResolution.High;private Light lightComp;private void Update(){if (runInUpdate){if (lightComp == null){lightComp = GetComponent<Light>();}if (lightComp == null){return;}lightComp.shadowCustomResolution = (int)shadowSize;}}
}

效果预览 - Light.shadowCustomResolution

Light.shadowCustomResolution = val

  • 这个 val 不等于 0 的话,就是自定义设置,这个 val 会自动 mostest NPOT == Mostest Next Power Of Tow
  • 这个 val 等于 0 的话,就是使用 Quality Settings 的全局配置
    请添加图片描述

效果预览 - Using Quality Settings

请添加图片描述


应用

只需要编写工具,批量对项目中的 Scene、Prefab,遍历其下所有 Light 的 GameObject 添加 改组件即可


ControlLightShadowResolution.cs Component

// jave.lin 2023/03/06 control light shadow resolution, [attach to light]using UnityEditor.SearchService;
using UnityEngine;
using War.Script;[ExecuteInEditMode]
public class ControlLightShadowResolution : MonoBehaviour
{public eLightShadowResolutionFollowQualitySetting followQualitySetting;public int shadowSize;#if UNITY_EDITORpublic bool runInUpdate = true;
#endifprivate Light lightComp;private void Start(){int level = UIInterface.GetCsharpEventCenterLevel();OnQualityLevelChanged(level);// TODO: xxx 修改为对应的时间名EventMgr.Instance.RemoveEvent<int>("xxx", OnQualityLevelChanged);EventMgr.Instance.AddEvent<int>("xxx", OnQualityLevelChanged);}private void OnDestroy(){// TODO: xxx 修改为对应的时间名EventMgr.Instance.RemoveEvent<int>("xxx", OnQualityLevelChanged);}#if UNITY_EDITORprivate void Update(){if (runInUpdate){ApplyChanged();}}
#endifprivate void OnQualityLevelChanged(int lv){if (followQualitySetting == eLightShadowResolutionFollowQualitySetting.On){shadowSize = 0;}else{eQualityLevel level = (eQualityLevel)lv;switch (level){case eQualityLevel.VeryLow:shadowSize = (int)eLightCustomShadowResolutionSize.VeryLow;break;case eQualityLevel.Low:shadowSize = (int)eLightCustomShadowResolutionSize.Low;break;case eQualityLevel.Medium:shadowSize = (int)eLightCustomShadowResolutionSize.Medium;break;case eQualityLevel.High:shadowSize = (int)eLightCustomShadowResolutionSize.High;break;default:break;}}ApplyChanged();}private void ApplyChanged(){if (lightComp == null){lightComp = GetComponent<Light>();}if (lightComp == null){return;}lightComp.shadowCustomResolution = shadowSize;}
}

Tools Batching add the Component to all Light

// 伪代码
var scene = EditorSceneManager.xxxByPath("xxx");
var roots = scene.GetxxxxRoots();
foreach (var root in roots)
{var lights = root.GetComponents<Light>();// 剩下的同下代码
}
    public static void AddControlLightShadowResolution(){var lights = GameObject.FindObjectsOfType<Light>();foreach (var light in lights){if (light == null)continue;ControlLightShadowResolution comp = light.transform.GetComponent<ControlLightShadowResolution>();if (light.lightmapBakeType == LightmapBakeType.Realtime){if (comp == null){light.gameObject.AddComponent<ControlDepthMode>();}}else{if (comp != null){if (Application.isPlaying)GameObject.Destroy(comp);elseGameObject.DestroyImmediate(comp);}}}}

References

  • shadow-mapping - unity 官方 shadow map 文档

相关文章:

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

文章目录环境原因解决CSharp 脚本效果预览 - Light.shadowCustomResolution效果预览 - Using Quality Settings应用ControlLightShadowResolution.cs ComponentTools Batching add the Component to all LightReferences环境 Unity : 2020.3.37f1 Pipeline : BRP 原因 (好久没…...

如何在SSMS中生成和保存估计或实际执行计划

在引擎数据库执行查询时执行的过程的步骤由称为查询计划的一组指令描述。​查询计划在SQL Server中也称为SQL Server执行计划,我们可以通过以下步骤来生成和保存估计或实际执行计划。 估计执行计划和实际执行计划是两种执行计划: 实际执行计划:当执行查询时,实际执行计划出…...

mac 环境下安装MongoDB

目录 一、下载MongoDB数据库并进行安装 二. 解压放在/usr/local目录下 三. 配置环境变量 “无法验证开发者”的解决方法 mongodb可视化工具的安装与使用 一、下载MongoDB数据库并进行安装 下载地址&#xff1a;https://www.mongodb.com/try/download/community 二. 解压…...

RTOS中相对延时和绝对延时的区别

相信许多朋友都有过这么一个需求&#xff1a;固定一个时间&#xff08;周期&#xff09;去处理某一件事情。 比如&#xff1a;固定间隔10ms去采集传感器的数据&#xff0c;然后通过一种算法计算出一个结果&#xff0c;最后通过指令发送出去。 你会通过什么方式解决呢&#xf…...

Solon2 项目整合 Nacos 配置中心

网上关于 Nacos 的使用介绍已经很多了&#xff0c;尤其是与 SpringBoot 的整合使用。怎么安装也跳过了&#xff0c;主要就讲 Nacos 在 Solon 里的使用&#xff0c;这个网上几乎是没有的。 1、认识 Solon Solon 一个高效的应用开发框架&#xff1a;更快、更小、更简单&#xf…...

Linux 路由表说明

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录route 命令字段分…...

MIPI协议

MIPI调试指南Rev.0.1 June 18, 2019 © 2018 Horizon Robotics. All rights reserved.Revision HistoryThissection tracks the significant documentation changes that occur fromrelease-to-release. The following table lists the technical content changes foreach …...

第十届CCF大数据与计算智能大赛总决赛暨颁奖典礼在苏州吴江顺利举办

2月24日-25日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;主办、苏州市吴江区人民政府支持&#xff0c;苏州市吴江区工信局、吴江区东太湖度假区管理办公室、苏州市吴江区科技局、CCF大数据专家委员会、CCF自然语言处理专业委员会、CCF高性能计算专业委员会、CCF计算…...

PMP高分上岸人士的备考心得,分享考试中你还不知道的小秘密

上岸其实也不是什么特别难的事情&#xff0c;考试一共就180道选择题&#xff0c;题目只要答对60.57%就可以通过考试&#xff0c;高分通过没在怕的&#xff0c;加油备考呀朋友们&#xff01; 这里也提一嘴&#xff0c;大家备考的时候比较顾虑的一个问题就是考试究竟要不要报班…...

ubuntu下编译libpq和libpqxx库

ubuntu下编译libpq和libpqxx库&#xff0c;用于链接人大金仓 上篇文章验证了libpqxx可以链接人大金仓数据库&#xff0c;这篇文章尝试自己编译libpq和libpqxx库。 文章目录ubuntu下编译libpq和libpqxx库&#xff0c;用于链接人大金仓libpq下载libpq库看看有没有libpq库编译lib…...

ESP-C2系列模组开发板简介

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…...

linux权限管理

权限管理 文件的权限针对三类对象进行定义&#xff1a; owner属主&#xff0c;缩写ugroup属组&#xff0c;缩写gother其他&#xff0c;缩写o 1、文件的一般权限 &#xff08;1&#xff09;r,w,x的作用及含义&#xff1a; 权限对文件影响对目录影响r&#xff08;read&#xf…...

提高生活质量,增加学生对校园服务的需求,你知道有哪些?

随着电子商务平台利用移动互联网的趋势提高服务质量&#xff0c;越来越多的传统企业开始关注年轻大学生消费者的校园市场。 提高生活质量&#xff0c;增加学生对校园服务的需求 大学生越来越沉迷于用手机解决生活中的“吃、喝、玩、乐”等服务&#xff0c;如“吃、喝”——可…...

Antlr4:使用grun命令,触发NoClassDefFoundError

1. 意外的发现 在学习使用grun命令时&#xff0c;从未遇到过错误 最近使用grun命令&#xff0c;却遇到了NoClassDefFoundError的错误&#xff0c;使得grun测试工具无法成功启动 错误复现&#xff1a; 使用antlr4命令编译Hello.g4文件&#xff0c;并为指定package&#xff08;…...

基于rootfs构建Docker镜像

1. 背景 在实际工作中&#xff0c;由于系统本身版本过低&#xff0c;在接受新项目时出现系统版本过低而无法开始工作的问题。 为了解决该问题&#xff0c;使用Docker构建基于ubuntu-18.04的Docker镜像&#xff0c;以解决版本兼容问题。 2. 构建rootfs 2.1. 下载ubuntu-18.0…...

电脑文件软件搬家迁移十大工具

10 大适用于 Windows 的数据迁移软件。 数据迁移至关重要&#xff0c;几乎所有组织都依赖于此。如果您认为数据传输不是一件容易的事&#xff0c;那么数据迁移软件可以帮上忙。 1、奇客电脑迁移 将现有操作系统、软件、文件迁移到 新电脑的最佳方法之一是使用名为奇客电脑迁移…...

【数据库】排名问题

返回第N高的一个解决思路返回N组中的第N高解决思路分数排名解决思路窗口函数数据库经常被用来解决排名问题。 返回第N高的一个 单表查询: 表: Employee------------------- | Column Name | Type | ------------------- | id | int | | salary | int | ----…...

【redis学习篇】主从哨兵集群架构详解

一、Redis主从架构 1.1 redis主从架构搭建 1、复制一份redis.conf文件 2、将相关配置修改为如下值&#xff1a; port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis-5.0.3/data/6380 # 指…...

基于jdk8的HashMap源码解析

hashMap常见面试题总览 为什么重写Equals还要重写HashCode方法&#xff1f;HashMap如何避免内存泄漏问题&#xff1f;HashMap1.7底层是如何实现的&#xff1f;HashMapKey为null存放在什么位置&#xff1f;HashMap如何解决Hash冲突问题&#xff1f;HashMap底层采用单链表还是双…...

深度学习J1周-ResNet50算法实战与解析_鸟类识别(CNN)

&#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 本周任务&#xff1a; ●1.请根据本文 TensorFlow 代码&#xff08;训练营内部阅读&#xff09;&#xff0c;编写…...

告别改板焦虑!手把手教你用Ansys Slwave 2022R2搞定PCB信号完整性仿真(附S参数导出Pspice全流程)

告别改板焦虑&#xff01;Ansys Slwave 2022R2信号完整性仿真实战指南 在高速PCB设计领域&#xff0c;信号完整性问题如同悬在硬件工程师头顶的达摩克利斯之剑。据统计&#xff0c;超过60%的硬件改板需求源于信号完整性问题未被提前发现。本文将带您深入掌握Ansys Slwave 2022R…...

STM32智能车库管理系统设计与实现

基于STM32的智能车库管理系统设计与实现 1. 项目概述 1.1 系统架构 本系统采用双MCU架构设计&#xff0c;主控制器采用STM32系列单片机&#xff0c;负责传感器数据采集、本地显示和报警控制&#xff1b;网络通信模块采用ESP8266 WiFi模块&#xff0c;实现数据上传至云平台。系…...

揭秘抖音批量采集神器:从技术内核到实战突破

揭秘抖音批量采集神器&#xff1a;从技术内核到实战突破 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作与研究的浪潮中&#xff0c;抖音作为全球最大的短视频平台&#xff0c;其丰富的内容资…...

Python 数据统计分析全攻略:从基础到实战,一文掌握常用方法

在数据分析、机器学习、业务报表开发等场景中&#xff0c;数据统计分析是核心基础环节。Python 凭借丰富的第三方库&#xff0c;成为数据统计分析的首选工具。本文将系统梳理 Python 中数据统计分析的常用方法、核心库、实战代码&#xff0c;从基础统计量到高级分析&#xff0c…...

Qwen-Image效果实测:对比传统模型,看看它的中文理解强在哪

Qwen-Image效果实测&#xff1a;对比传统模型&#xff0c;看看它的中文理解强在哪 你有没有试过用AI画图&#xff0c;结果被它“气”到哭笑不得&#xff1f;比如&#xff0c;你想画一个“穿着旗袍的女士在江南水乡的乌篷船上喝茶”&#xff0c;结果AI给你生成一个“穿着船在喝…...

如何永久保存微信聊天记录?WeChatExporter 开源工具帮你解决数据备份难题

如何永久保存微信聊天记录&#xff1f;WeChatExporter 开源工具帮你解决数据备份难题 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾担心微信聊天记录会随着手机…...

Windows 7如何突破Python版本限制?企业级兼容性解决方案指南

Windows 7如何突破Python版本限制&#xff1f;企业级兼容性解决方案指南 【免费下载链接】PythonVista Python 3.9 installers that support Windows 7 SP1 and Windows Server 2008 R2 项目地址: https://gitcode.com/gh_mirrors/py/PythonVista 一、痛点分析&#xff…...

革新3D资源获取:Sketchfab模型下载技术破解与实践指南

革新3D资源获取&#xff1a;Sketchfab模型下载技术破解与实践指南 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 在数字创意产业蓬勃发展的今天&#xff0c;3D模型…...

Umi-OCR PDF文字识别全攻略:从技术原理到实战应用

Umi-OCR PDF文字识别全攻略&#xff1a;从技术原理到实战应用 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_T…...

除了当图床,Cloudflare R2的S3 API还能这么玩?Python脚本批量管理文件实战

解锁Cloudflare R2的S3 API潜能&#xff1a;Python自动化文件管理实战 Cloudflare R2作为兼容S3 API的对象存储服务&#xff0c;其应用场景远不止搭建图床这么简单。对于开发者而言&#xff0c;R2提供的S3兼容接口意味着可以将其无缝集成到各种自动化工作流中。本文将带你探索如…...