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

Unity URPShader支持多光源处理

//声明变体并且引用文件
#pragma shader_feature  _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
//在数据结构体中声明需要使用的数据
struct Attributes
{float4 positionOS : POSITION;float2 texcoord : TEXCOORD0;#if defined(_ENABLELIGHTING_ON)float3 normalOS : NORMAL;#endif};struct Varyings
{float4 positionHS : SV_POSITION;float2 uv : TEXCOORD0;#if defined(_ENABLELIGHTING_ON)half3 lightColor : TEXCOORD1;#if defined(_ADDITIONAL_LIGHTS)float3 positionWS : TEXCOORD2;float3 normalWS : TEXCOORD3;#endif#endif
};

_ADDITIONAL_LIGHTS_VERTEX 是在顶点Shader中处理平行光额外增加的光源,_ADDITIONAL_LIGHTS是在片元Shader中处理平行光额外增加的光源

 顶点Shader:
//光照#if _ENABLELIGHTING_ONfloat3 normalWS = TransformObjectToWorldNormal(v.normalOS.xyz);Light main_light = GetMainLight();half3 main_light_dir = normalize(main_light.direction);half diffuse_term = dot(normalWS, main_light_dir) * 0.5 + 0.5;half3 lightColor = diffuse_term * main_light.color;#ifdef _ADDITIONAL_LIGHTS_VERTEXhalf3 vertexLight = VertexLighting(positionWS, normalWS);lightColor += vertexLight;#elif _ADDITIONAL_LIGHTSo.positionWS = positionWS;o.normalWS = normalWS;lightColor = half3(0, 0, 0);#endifo.lightColor = lightColor;#endif
片元Shader:
#if _ENABLELIGHTING_ON#ifdef _ADDITIONAL_LIGHTSuint pixelLightCount = GetAdditionalLightsCount();for (uint lightIndex = 0u; lightIndex < pixelLightCount; ++lightIndex){Light light = GetAdditionalLight(lightIndex, i.positionWS.xyz);half3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation);i.lightColor += LightingLambert(attenuatedLightColor, light.direction, i.normalWS);}#endiffinal_color.rgb = i.lightColor * final_color.rgb;
#endif

也就是启用了_ADDITIONAL_LIGHTS_VERTEX宏

也就是启用了_ADDITIONAL_LIGHTS宏

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt杂项功能实现
  • Linux 数据结构 树知识
  • 学习bat脚本
  • 自然语言处理系列四十七》Elasticsearch搜索引擎》Elasticsearch代码实战
  • 川崎机器人维修请开启马达电源报警故障
  • 使用Lora微调LLM——笔记
  • okhttp异步请求连接阻塞问题排查
  • cenos 7 安装 golang
  • vue3 自定义hooks(组合式函数)
  • PHP语言有哪些优势和特点?
  • C——四种排序方法
  • 84、 k8s的pod基础+https-harbor
  • 行级安全的艺术:SQL中的精细化数据保护策略
  • C++中类的相关学习
  • Golang 教程2
  • CAP理论的例子讲解
  • Date型的使用
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES学习笔记(12)--Symbol
  • FastReport在线报表设计器工作原理
  • Java小白进阶笔记(3)-初级面向对象
  • MaxCompute访问TableStore(OTS) 数据
  • PHP 的 SAPI 是个什么东西
  • Python 基础起步 (十) 什么叫函数?
  • Vim 折腾记
  • XML已死 ?
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 规范化安全开发 KOA 手脚架
  • 免费小说阅读小程序
  • 盘点那些不知名却常用的 Git 操作
  • 如何编写一个可升级的智能合约
  • 正则与JS中的正则
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​MySQL主从复制一致性检测
  • (3)选择元素——(17)练习(Exercises)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Forward) Music Player: From UI Proposal to Code
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .htaccess 强制https 单独排除某个目录
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net dataexcel 脚本公式 函数源码
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net Web窗口页属性
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net6使用Sejil可视化日志
  • .NET中两种OCR方式对比
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @RequestBody的使用