Unity Shader - 在 URP 获取 Ambient(环境光) 颜色

141 篇文章 35 订阅

之前在 Unity Built-in 管线中,我们在自定义 shader 中,可以使用一下代码来获取 Ambient 环境光的颜色:

fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb

但是在 Unity URP 中,发现不生效了,虽然 URP 中也有定义这个宏,定义在:#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl"#define UNITY_LIGHTMODEL_AMBIENT (glstate_lightmodel_ambient * 2)

后来发现在 unity 论坛中有人问同样的问题:Get Ambient Color in custom shader

最终给出这 half3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w) 来获取 Lighting Setting 中的处理后的 SH 环境光颜色,代码如下:

            half4 frag(v2f i) : SV_Target
            {
                half3 ambient = half3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w);
                return half4(ambient, 1);
            }

运行效果:
在这里插入图片描述

感谢 Bigmoth 分享的其他 更适合的 _GlossyEnvironmentColor.rgb 的方式

在这里插入图片描述


References

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity引擎中,Shader(着色器)是用于控制游戏物体表面光照、颜色和纹理表现的关键元素。如果你遇到ShaderURP(Universal Render Pipeline)中变紫的问题,这可能是由于以下几个原因: 1. **颜色溢出**:如果Shader中的颜色计算导致了超出预期的颜色范围(例如从0到1的RGB值),可能会显示紫色,尤其是在没有正确设置Alpha通道的情况下。 2. **混合模式问题**:检查你的混合模式设置,特别是在使用Alpha或Cutout时,错误的混合可能会影响颜色输出。 3. **UV映射或贴图问题**:如果贴图的UV映射不正确,或者贴图本身有问题,也可能影响到最终的渲染结果。 4. **材质参数调整**:检查你的Shader中的参数,如颜色乘法(ColorMultiply)或光照相关的参数,它们可能被意外地设置为紫色。 5. **URP特定问题**:URP的着色器系统对某些类型的操作可能有不同的处理方式,确保你的Shader针对URP做了适当的优化和兼容性调整。 6. **光照或环境影响**:强烈的环境光或者全局光照可能导致颜色看起来不自然,特别是对于非线性渲染管道如URP。 要解决这个问题,你可以尝试以下步骤: - **调试代码**:检查Shader脚本,确认颜色计算是否正确。 - **使用示例代码**:如果可能,参考官方文档中关于URPShader示例,确保你的代码没有遗漏关键部分。 - **分步测试**:逐个修改Shader中的参数,看哪一步导致了紫色。 - **使用Unity的工具**:利用Unity的Inspector或者Shader Graph工具检查实时效果,更容易发现问题所在。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值