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设置)相关推荐
- Unity - 搬砖日志 - 打开项目时崩溃/或是运行不起unity的日志
崩溃日志目录所在:C:/Users/admins/AppData/Local/Unity/Editor/Editor.log 其中 admins 是你的 windows 登录账号名 打开该 Edito ...
- Unity - 搬砖日志 - Occlusion Culling 关闭动态遮挡剔除 Renderer.allowOcclusionWhenDynamic = false
文章目录 CullDynamicObjectsWithUmbra 消耗 如何禁止 动态对象的遮挡剔除的消耗 写工具来遍历 Renderer.allowOcclusionWhenDynamic = fa ...
- Unity - 搬砖日志 - 获取 LODGroup 当前显示的 LOD 级别
最近 QA 同学需要在 某个 LODGroup 对象,当前显示的 LOD 是哪个级别的功能,所以上网搜索了一下,发现:Current LOD level - LOD Group Unity 也有人需求 ...
- Unity - 搬砖日志 - Android 的 Optimized Frame Pacing - 对应 ProjectSettings 配置字段:androidUseSwappy
备忘用,因为 project settings 动不动,会提交一堆不相关的配置字段修改 Unity PlayerSettings 的 GUI 上 Optimized Frame Pacing 和 实际 ...
- Unity Shader - 搬砖日志 - URP PBR (抄作业篇,持续更新~)
文章目录 目的 环境 PBR 主要渲染方程 D 项 GGB(desmos) D_Term 完整 Shader G 项 GGB G_Term 完整 Shader F 项 GGB F_Term 完整 Sh ...
- Unity Shader - 搬砖日志 - Dithering
文章目录 什么时 Dithering 色阶纹理图案 - Texture Dither Pattern 程序化 动态 Dithering - 让 RGBA8888 压缩到 RGBA4444 而没有明显色 ...
- Unity Shader - 搬砖日志 - 3D Noise, Noise 3D 相关
文章目录 GLSL noise 3d Project References 备忘,2D 的 noise 有纹理或是现成的比较多 3D noise 在 unity SG 出奇的没有封装 显示再 shad ...
- Unity Shader - URP Fog - URP 管线下的雾效
文章目录 参考 LitForwardPass.hlsl 临摹使用 Test/URPFog 只要 Fog_Linear 变体的 效果 问题 修复 References 管线:URP URP:7.7.1 ...
- Steam平台——全球最大的游戏平台,现在给大家介绍下steam搬砖项目,这个项目既小众又稳定。
steam搬砖项目介绍 steam搬砖项目差不多已经存在有一些时间了,这么久以来一直非常稳定,这个项目既比较冷门又能持续稳定盈利,是一个非常不错的项目.简单来说就是从国外的steam平台购买饰品道具然 ...
最新文章
- Android 创建其它应该程序的上下文对象
- java中判断字符串乱码_java中如何判断字符串是否乱码
- 文本编辑器查看 cprintf颜色_airWriter for mac(文本编辑软件)
- Python3 实现建造者模式
- gentos 执行sh文件_linux定时自动清理日志文件
- python 切片器_PowerBI-将日期显示为星期作为切片器
- for和select循环语句的应用实践
- 敏捷个人A2组第一次讨论纪要 如何让别人乐于帮助你?
- K3-openwrt交换机模式-挂载磁盘-部署kodexplorer可道云私有云盘-极简单版
- java视频生成缩略图_Java——使用javacv生成视频缩略图
- html顺势正旋转360度,庞明:混元太极揉球
- 插入图片的时候,总是只是能漏出一点点其他部分都看不到,改变格式从插入型改成浮于文字上方才能完全显示,但浮于文字上方的格式最后不好排版和编辑,稍微一改,整个就乱了,求助如何让插入型的文字图片完全显示出来
- VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)
- 向服务器获取同步信息失败,主域服务器和辅助域服务器数据同步失败
- Master-MatPyon:学习历程
- 音频处理工具 sox 使用
- Java模拟鼠标键盘输入事件 --- Robot 类
- iphone开发 UIButton使用
- UltraISO+U盘制作启动盘安装各种系统
- 2015年01月02日
热门文章
- 我的Surface Book装机清单
- java enclose class_Enclosing Class
- 打造量声定制的观影体验!三星Neo QLED获得VDE空间声音优化认证
- L2之上的L3、L4,StarkWare的这个设想到底能否实现?
- 模型构建器之提取水系
- 图的遍历(深度优先与广度优先)
- 一套键鼠操控多台主机/电脑/笔记本 - 《Mouse Without Borders》安装配置教程
- Linux命令行 (二)
- 找出最小自然数N,使N!在十进制下包含Q个0(输入Q,输出N)
- java笔试-小红书秋招笔试-9.6(子矩阵索引、未出现的最小自然数、航海危险区)