Unity中URP下的SimpleLit顶点着色器

文章目录

  • 前言
  • 顶点着色器
    • 1、GPU Instance 相关
    • 2、顶点输入数据相关
    • 3、雾效混合因子
    • 4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体
    • 5、把法线相关的结果,传给输出结构体
    • 6、光照贴图相关
    • 7、额外灯相关计算
    • 8、阴影相关


前言

在上一篇文章中,我们了解了URP下SimpleLit的整体框架。

  • Unity中URP下 SimpleLit框架

我们在这篇文章中,来了解一下URP下SimpleLit中,光照核心部分的顶点着色器干了什么,方便之后我们自定义自己的光照Shader。

在这里插入图片描述

因为被Unity封装的原因。所以,顶点着色器 和 片元着色器 主要是在这两个文件中。
在这里插入图片描述


顶点着色器

  • 我们来依次分析一下顶点着色器内实现了什么。
// Used in Standard (Simple Lighting) shaderVaryings LitPassVertexSimple(Attributes input){Varyings output = (Varyings)0;UNITY_SETUP_INSTANCE_ID(input);UNITY_TRANSFER_INSTANCE_ID(input, output);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS);#if defined(_FOG_FRAGMENT)half fogFactor = 0;#elsehalf fogFactor = ComputeFogFactor(vertexInput.positionCS.z);#endifoutput.uv = TRANSFORM_TEX(input.texcoord, _BaseMap);output.positionWS.xyz = vertexInput.positionWS;output.positionCS = vertexInput.positionCS;#ifdef _NORMALMAPhalf3 viewDirWS = GetWorldSpaceViewDir(vertexInput.positionWS);output.normalWS = half4(normalInput.normalWS, viewDirWS.x);output.tangentWS = half4(normalInput.tangentWS, viewDirWS.y);output.bitangentWS = half4(normalInput.bitangentWS, viewDirWS.z);#elseoutput.normalWS = NormalizeNormalPerVertex(normalInput.normalWS);#endifOUTPUT_LIGHTMAP_UV(input.staticLightmapUV, unity_LightmapST, output.staticLightmapUV);#ifdef DYNAMICLIGHTMAP_ONoutput.dynamicLightmapUV = input.dynamicLightmapUV.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;#endifOUTPUT_SH(output.normalWS.xyz, output.vertexSH);#ifdef _ADDITIONAL_LIGHTS_VERTEXhalf3 vertexLight = VertexLighting(vertexInput.positionWS, normalInput.normalWS);output.fogFactorAndVertexLight = half4(fogFactor, vertexLight);#elseoutput.fogFactor = fogFactor;#endif#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)output.shadowCoord = GetShadowCoord(vertexInput);#endifreturn output;}

1、GPU Instance 相关

在这里插入图片描述

2、顶点输入数据相关

在这里插入图片描述

  1. VertexPositionInputs:存储 顶点 在不同坐标系下的坐标信息
    在这里插入图片描述

  2. VertexNormalInputs:存储 法线 相关信息
    在这里插入图片描述

  3. GetVertexPositionInputs:把顶点本地坐标转化为(世界、观察、齐次裁剪、NDC)坐标系下
    在这里插入图片描述

  4. GetVertexNormalInputs:得到法线相关数据
    该函数有两种方法重载,按是否已知切线来使用
    若切线未知,则以假设的方式得到切线
    在这里插入图片描述

3、雾效混合因子

在这里插入图片描述

4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体

在这里插入图片描述

5、把法线相关的结果,传给输出结构体

  • viewDirWS:被Unity分类到了这里。但是,这是计算世界空间下的视线向量。
    在这里插入图片描述

6、光照贴图相关

在这里插入图片描述

7、额外灯相关计算

在这里插入图片描述

  • VertexLighting
    在这里插入图片描述

8、阴影相关

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui-树形控件实现子节点右侧添加图标和数据,鼠标放上去显示文字

1、代码 <el-treev-loading"nameLoding":data"data"node-key"id":highlight-current"true"empty-text"暂无数据":props"defaultPropsIndex"default-expand-all:filter-node-method"filterNodeIndex"…

LeetCode 226. 翻转二叉树

226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,…

redis 从0到1完整学习 (十八):阻塞/非阻塞 IO

文章目录 1. 引言2. redis 源码下载3. I/O 模型3.1 阻塞 I/O3.2 非阻塞 I/O 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…

jetlinks 规则编排中的函数节点使用 js 脚本格式化输出当前系统时间的坑

网上搜到的都是类似如下这种&#xff1a; // 获取当前时间 var date new Date();// 格式化输出当前时间 var year date.getFullYear(); var month date.getMonth(); var day date.getDate(); var hour date.getHours(); var minute date.getMinutes(); var second date.…

捷为科技亮相2024深圳PMO年度论坛 探讨项目管理赋能企业数字化转型

1月13日&#xff0c;一场聚焦项目管理创新与数字化转型的盛会——2024年深圳PMO年度论坛在深圳新一代产业园隆重举行。本次论坛以“项目管理赋能企业数字化转型”为主题&#xff0c;汇聚了众多行业专家、学者和企业代表&#xff0c;共同探讨如何通过项目管理推动企业数字化转型…

电商概念之商品模型

1、基本定义 广义定义&#xff1a;商品是为了出售而生产的劳动成果&#xff0c;人类社会生产力发展到一定历史阶段的产物&#xff0c;用于交换的劳动产品。 电商商品基本概念&#xff1a; 商品类目商品属性销售属性商品编码&商品规格编码SKU和SPU… 2、商品类目 电商平…

【动态规划】20子数组系列_环形子数组的最大和_C++(medium)

题目链接&#xff1a;leetcode环形子数组的最大和 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求返回 nums 的非空 子数组 的最大可能和 这道题如果是按照-这道题-是不对…

基于信号完整性的一些PCB设计建议

最小化单根信号线质量的一些PCB设计建议 1. 使用受控阻抗线&#xff1b; 2. 理想情况下&#xff0c;所有信号都应该使用完整的电源或地平面作为其返回路径&#xff0c;关键信号则使用地平面作为返回路径&#xff1b; 3. 信号的返回参考面发生变化时&#xff0c;在尽可能接近…

JMeter笔记(三)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;参数化方法 1&#xff09;用户定义的变量 2&#xff09;函数助手 3&#xff09;…

MYSQL的事务隔离

本章概览 mysql是一个支持多引擎的系统&#xff0c;并不是所有引擎都支持事务&#xff0c;本篇以innodb为例解析mysql在事务支持的实现。提到事务一定会想到ACID(Atomicity、Consistency、Isolation、Durability&#xff0c;即原子性、一致性、隔离性、持久性)&#xff0c;今天…

旧路由重置新路由设置新路由设置教程|适用于PPPoE拨号

前言 前几天朋友说路由器想要重置&#xff0c;但不知道怎么弄。所以就想着只帮忙重置路由器的话&#xff0c;只能帮到一个人。但把整个过程写成图文&#xff0c;就可以帮助更多人。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫…

pod控制器的作用

pod控制器的作用 1、动态pv和pvc deployment是控制器 pod空气器:工作负载&#xff0c;workload用于管理pod的中间层&#xff0c;确保podi资源符合预期的状态 预期状态 1、副本数 2、容器重启策略 3、镜像拉取策略 pod、出现故障时重启等等 pod的控制器类型 1、replic…

删除运行框中的文件打开历史记录

当我们使用everything、百度、迅雷等软件&#xff0c;在列表中右键选中打开文件夹时。 当使用 winR 快捷键等方式打开运行时&#xff0c;输入盘符会出现之前打开过的文件夹&#xff0c; 一方面展示的特别多会比较混乱&#xff0c;另一方面 记得在之前的window版本中&#xff08…

WIFI7时代正式来临

Wi-Fi联盟在2024年1月8日宣布推出了Wi-Fi CERTIFIED 7认证&#xff0c;标志着WIFI7时代的正式来临&#xff01;这一认证引入了一系列强大的新功能&#xff0c;旨在提升Wi-Fi性能并改善各种连接环境。WIFI7支持多用户AR/VR/XR、沉浸式3D培训、电子游戏、混合工作、工业物联网和汽…

架构师之超时未支付的订单进行取消操作的几种解决方案

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己尝试一把哈&#xff01; 一、需求如下&#xff1a; 生成订单30分钟未支付&#xff0c;自动取消 生成订单60秒后,给用户发短信 对上述的需求&#xff0c;我们给…

【算法与数据结构】63、LeetCode不同路径 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参考【算法与数据结构】62、LeetCode不同路径的题目&#xff0c;可以发现本题仅仅是多了障碍物。我们还…

springboot下载图片的简单处理方式

参考地址 springboot&#xff1a;各种下载文件的方式_springboot下载文件-CSDN博客 开箱即用实战 GetMapping("/t1")public void down1(HttpServletResponse response) throws Exception {response.reset();response.setContentType("application/octet-strea…

STM32F103标准外设库——认识STM32(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

MySQL存储引擎索引事务

一.存储引擎 1.创建的存储引擎 MyISAM 不支持事务、也不支持外键&#xff0c;索引采用非聚集索引&#xff0c;其优势是访问的速度快&#xff0c;对事务完整性没有要求&#xff0c;以 SELECT 、 INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。 MyISAM 的表在磁盘上…

从零学Java 线程的状态

Java 线程的状态 文章目录 Java 线程的状态线程的基础状态1 常见方法1.1 休眠1.2 放弃1.3 加入1.4 优先级1.5 线程打断1.6 守护线程1.7 线程的状态 - 等待 2 线程安全问题2.1 线程同步: 同步代码块2.2 线程同步: 同步方法2.3 同步规则2.4 线程的状态 - 阻塞2.5 特殊现象: 死锁 …