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

Unity URP自定义Shader支持RenderLayer

前言:

当我们想用一个灯光只对特定的物体造成影响,而不对其余物体造成影响时,我们就需要设置相对应的LightLayer,但是这在URP12.0是存在的,在之后就不存在LightLayer这一功能,URP将其隐藏而改成了RenderLayer。官方Lit很好的处理了RenderLayer的适配,但是对于我们自定义的Shader效果,要使用RenderLayer就需要增加特定的功能。

实现:

RenderLayer功能是处理特定光影响特定事物的,在shader中可以通过GetMeshRenderingLayer获取当前模型的meshrender中的renderlayer,然后和light的layermask进行对比,如果一致则进行灯光操作,如果不一致则不进行灯光操作,代码如下:

   uint renderingLayers = GetMeshRenderingLayer();Light main_light = GetMainLight();half render_mask = main_light.layerMask & renderingLayers;half3 main_light_color = render_mask * main_light.color.rgb;

额外光的处理也是一致,举个例子:

 #ifdef _ADDITIONAL_LIGHTSuint pixelLightCount = GetAdditionalLightsCount();for (uint lightIndex = 0u; lightIndex < pixelLightCount; lightIndex++){Light light = GetAdditionalLight(lightIndex, i.positionWS.xyz, i.shadowMask);half3 attenuatedLightColor = light.color * light.distanceAttenuation;half3 main_light_color = (light.layerMask & renderingLayers) * attenuatedLightColor;lightColor += LightingLambert(main_light_color, light.direction, i.normalWS);}#endif

结果:

正常情况下,一盏主光

额外加一盏额外光 ,设置为影响使用官方Lit的模型

切换影响使用自定义Shader的模型 

对两个模型都影响


http://www.mrgr.cn/news/96057.html

相关文章:

  • 云资源开发学习应用场景指南,场景 1 云上编程实践平台
  • F1C200S编译
  • 【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)
  • Python 异常处理完全指南
  • Ardupilot开源无人机之Geek SDK进展2025Q2
  • ESP32驱动BMP280和MQ4传感器
  • javafx项目结构+代码规范
  • Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)
  • 【大模型系列篇】使用Python开发MCP Server及Inspector工具调试
  • 【docker】docker-compose安装RabbitMQ
  • 我的世界1.20.1forge模组开发进阶教程——序列化(1)
  • Python SciPy面试题及参考答案
  • NanoGraphrag原理和数据流讲解
  • Maya到SubstancePainter再到UE5
  • MQTT之重复消息产生
  • Android HAL 架构详解,底层开发不再难
  • idea 快捷键
  • AI 算力计算方式
  • 微信小程序登录和获取手机号
  • SSML(Speech Synthesis Markup Language)简介