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

这篇具有很好参考价值的文章主要介绍了Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


环境

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 (这个可能因硬件不同而不同)

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置),unity,unity 搬砖,unity,c#,游戏引擎

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置),unity,unity 搬砖,unity,c#,游戏引擎


解决

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

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置),unity,unity 搬砖,unity,c#,游戏引擎


CSharp 脚本

// jave.lin 2023/03/06 custom shadow resolution
// refer to : https://docs.unity3d.com/Manual/shadow-mapping.html

using 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 的全局配置
    Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置),unity,unity 搬砖,unity,c#,游戏引擎

效果预览 - Using Quality Settings

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置),unity,unity 搬砖,unity,c#,游戏引擎


应用

只需要编写工具,批量对项目中的 Scene、Prefab,遍历其下所有 Light 的 GameObject 添加 改组件即可文章来源地址https://www.toymoban.com/news/detail-623464.html


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_EDITOR
    public bool runInUpdate = true;
#endif

    private 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_EDITOR
    private void Update()
    {
        if (runInUpdate)
        {
            ApplyChanged();
        }
    }
#endif

    private 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);
                    else
                        GameObject.DestroyImmediate(comp);
                }
            }
        }
    }

References

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

到了这里,关于Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity - 搬砖日志 - Texture.mipmapBias 无效的解决方法

    Unity : 2020.3.37f1 Pipeline : BRP 因为美术发现有些贴图太糊,但是经过研究发现,mipmap0就是完全够精度的 但是不可能还要提升贴图的尺寸,因为经过多方咨询(咨询TA大佬) 发现是 unity 纹理一个 mipmapBias 的 import 属性,但结果设置了一样木有效果 最后TA大佬说,试试 shader 修改

    2023年04月22日
    浏览(41)
  • 若依框架下的自定义Exception抛出,返回code,msg不出错(spring boot)。

    若依框架下的自定义Exception抛出,返回code,msg不出错: 最近接的项目后台中,因为需要在app用到自定义的token验证(不用若依的那一套登陆token)来确保接口的安全性,需要在进入接口前使用aop切面的before来验证它的头(headers)是否符合条件。 先上代码: 当token出现不匹配

    2023年04月09日
    浏览(57)
  • Unity - 搬砖日志 - Android 的 Optimized Frame Pacing - 对应 ProjectSettings 配置字段:androidUseSwappy (影响锁帧)

    备忘用,因为 project settings 动不动,会提交一堆不相关的配置字段修改 Unity PlayerSettings 的 GUI 上 Optimized Frame Pacing 和 实际的 ProjectSettings 字段名字差异太大 通过验证发现是: androidUseSwappy 字段 Android Performance Tuner 简介 (Unity) 注意 Optimized Frame Pacing 还会影响锁帧的作用,如果开

    2024年02月13日
    浏览(37)
  • Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案

    Unity : 2020.3.37f1 Pipeline : BRP (另一个项目在 2021.1.xx 的 LTS 下的 URP 管线同样如此,目测:因为 UGUI 不受渲染管线切换而变化) 便于索引,记录搬砖 可以看到,下图 Canvas 的 Render Mode 在使用: Screen Space - Overlay 模式下的DC为 8 这里导致合批失败的有两个问题: 图片显示有相互的

    2024年02月13日
    浏览(36)
  • URP 管线下的 AREngine 预览流绘制

    huawei AREngine 默认使用 builtin 渲染管线绘制预览流, 在如今行业普遍使用的自定义渲染管线有点儿过时。 看 ARFoundation 的实现, 已经默认支持builtin和urp的无缝切换, 于是就想着把 AREngine 的预览流绘制使用urp来实现一遍。 首先预览流信息直接由GPU端直传到 glsl(shader)里了, 这

    2024年02月02日
    浏览(26)
  • Unity中URP下实现能量罩(性能优化 和 BRP适配)

    在之前的文章中,我们实现了URP下的能量罩效果。 Unity中URP下实现能量罩(扭曲流光花纹) 我们在这篇文章中,对其进行性能优化 和 BRP下的适配。 我们这里把 能量罩花纹纹理 和 抓屏扭曲纹理 合并成同一个来使用,在效果上没多大变化。但是,可以少使用一次纹理采样。

    2024年02月01日
    浏览(54)
  • Unity中URP下实现深度贴花(雾效支持和BRP适配)

    在上一篇文章中,我们实现了贴花的效果。但是,细节效果需要优化。 Unity中URP下实现深度贴花 我们在这篇文章中,来优化一下贴花Shader的细节。 原雾效使用方法是只支持不透明对象的。 但是,我们的贴画是半透明的。所以,需要对其进行调整。 col.rgb = MixFog(col.rgb,i.fogCo

    2024年01月16日
    浏览(54)
  • 【算法】十一月阳光下的阴影面积

    十一月的阳光透过窗户,照射在一位笑起来甜美、青春洋溢的女子的办公桌上。小悦,一个总是以高马尾造型亮相的软件工程师,展现出她的干练与活力。那乌黑亮丽的长发轻盈飘动,仿佛在诉说着她的独特魅力。她的眉眼如画,那双明亮的眼睛里闪烁着对知识的渴望和对技

    2024年02月06日
    浏览(26)
  • Unity中Shader面片一直面向摄像机(个性化修改及适配BRP)

    在上一篇文章中,我们用Shader实现了面片一直面向摄像机的效果。 Unity中Shader面片一直面向摄像机 在这篇文章中,我们对其进行个性化修改 及 BRP下的适配。 在很多时候,我们并不需要面片在上下方向跟随摄像机旋转 我们只需要面片跟随摄像机的左右旋转。 那么,我们就需

    2024年01月25日
    浏览(48)
  • Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题

    Unity : 国际版2020.3.37f1 Pipeline : BRP Packages: Post Processing 3.0.3 BRP 虽然是 官方放弃更新的 渲染管线,但是有些项目仍然会使用到,有一些踩过的坑,该记录的还是记录一下,便于 自己、他人 索引 为了保留 HDR 效果,并且为了做性能优化 我们让 FrameBuffer 里面的 Color Buffer 使用格式

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包