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

Unity中Shader URP最简Shader框架(整理总结篇)

文章目录

  • 前言
  • 一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader
  • 二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别
    • 1、"RenderPipeline"="UniversalPipeline"
    • 2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致
    • 3、必须引入的库变了
    • 4、顶点着色器输入
    • 5、片元着色器输入
    • 6、顶点着色器
    • 7、片元着色器
    • 8、变量类型变化
    • 最终效果


前言

在上篇文章中,我们主要把 ShaderGraph 转化为 URP Shader,并进行了最简化。在这篇文章中,我们来解析一下 URP 最简 Shader 中做了什么。

  • Unity中Shader URP最简Shader框架(ShaderGraph 转 URP Shader)

一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader

Shader "MyShader/URP/P2_10"
{Properties {}SubShader{Tags{//告诉引擎,该Shader只用于 URP 渲染管线"RenderPipeline"="UniversalPipeline"//渲染类型"RenderType"="Opaque"//渲染队列"Queue"="Geometry"}Pass{Name "Universal Forward"Tags{// LightMode: <None>}Cull BackBlend One ZeroZTest LEqualZWrite OnHLSLPROGRAM#pragma vertex vert#pragma fragment frag// Pragmas#pragma target 2.0// Includes#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"//struct appdata//顶点着色器的输入struct Attributes{float3 positionOS : POSITION;};//struct v2f//片元着色器的输入struct Varyings{float4 positionCS : SV_POSITION;};//v2f vert(Attributes v)//顶点着色器Varyings vert(Attributes v){Varyings o = (Varyings)0;float3 positionWS = TransformObjectToWorld(v.positionOS);o.positionCS = TransformWorldToHClip(positionWS);return o;}//fixed4 frag(v2f i) : SV_TARGET//片元着色器half4 frag(Varyings i) : SV_TARGET{half4 c;c.rgb = 0.5;c.a = 1;return c;}ENDHLSL}}FallBack "Hidden/Shader Graph/FallbackError"
}

二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别

1、“RenderPipeline”=“UniversalPipeline”

  • 这句代码告诉Unity,我们Shader是用于哪一个渲染管线下的

2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致

3、必须引入的库变了

  • BRP

#include “UnityCG.cginc”

  • URP

#include “Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl”
#include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl”

4、顶点着色器输入

//struct appdata
//顶点着色器的输入
struct Attributes
{
float3 positionOS : POSITION;
};

  • Attributes : appdata
  • positionOS : position
  • normalOS : normal
  • tangentOS : tangent

5、片元着色器输入

//片元着色器的输入
struct Varyings
{
float4 positionCS : SV_POSITION;
};

  • Varyings : v2f
  • positionCS : position 在齐次裁剪坐标系下的顶点坐标

6、顶点着色器

//v2f vert(Attributes v)
//顶点着色器
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
float3 positionWS = TransformObjectToWorld(v.positionOS);
o.positionCS = TransformWorldToHClip(positionWS);
return o;
}

  • Varyings vert(Attributes v) : v2f vert(Attributes v)
  • TransformObjectToWorld : mul(unity_ObjectToWorld,v.vertex)
  • TransformWorldToHClip : UnityObjectToClipPos(v.vertex)

7、片元着色器

//fixed4 frag(v2f i) : SV_TARGET
//片元着色器
half4 frag(Varyings i) : SV_TARGET
{
half4 c;
c.rgb = 0.5;
c.a = 1;
return c;
}

  • half4 frag(Varyings i) : fixed4 frag(v2f i)

8、变量类型变化

剔除了 fixed 类型变量

只保留:

  • float类型:一般用于 坐标 和 位置 信息存储
  • half类型:一般用于 颜色 这些精度较小的值

最终效果

在这里插入图片描述

相关文章:

Unity中Shader URP最简Shader框架(整理总结篇)

文章目录 前言一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别1、"RenderPipeline""UniversalPipeline"2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致3、必须引入…...

AT32F435飞控之DIATONE MAMBA MK5 F435 Anti-Interference

AT32F435飞控之DIATONE MAMBA MK5 F435 Anti-Interference 1. 源由2. 规格3. 分析3.1 喜欢3.2 不便3.3 建议 4. 总结5. 参考资料 1. 源由 AT32 F435飞控在xFlight开源飞控之AT32F435计划一文中已经大体阐述了一些移植历史。 之前整体上看&#xff0c;就是航模飞控新MCU的移植…...

ntp时间同步配置中 server、pool和peer的区别

在 NTP&#xff08;Network Time Protocol&#xff09;的配置中&#xff0c;server、pool 和 peer 是用于指定时间同步关系的关键字&#xff0c;它们在角色和行为上有一些区别。 server&#xff1a; server 关键字用于指定一个或多个 NTP 服务器&#xff0c;这些服务器将提供时…...

JMeter安装RabbitMQ测试插件

整体流程如下&#xff1a;先下载AMQP插件源码&#xff0c;可以通过antivy在本地编译成jar包&#xff0c;再将jar包导入JMeter目录下&#xff0c;重启JMeter生效。 Apache Ant 是一个基于 Java 的构建工具。Ant 可用于自动化构建和部署 Java 应用程序&#xff0c;使开发人员更轻…...

基于ssm日用品网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本日用品网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…...

coco数据集格式的RandomCrop

transforms.py文件的改进 添加 RandomCrop 函数 class RandomCrop(object):"""随机裁剪图像以及bboxes"""def __init__(self, output_size):self.output_size output_sizedef __call__(self, image, target):height, width image.shape[-2:]…...

机器学习-KL散度的直观理解+代码

KL散度 直观理解&#xff1a;KL散度是一种衡量两个分布之间匹配程度的方法。通常在概率和统计中&#xff0c;我们会用更简单的近似分布来代替观察到的数据或复杂的分布&#xff0c;KL散度帮我们衡量在选择近似值时损失了多少信息。 在信息论或概率论中&#xff0c;KL散度&#…...

【教程】制作 iOS 推送证书

​ 目录 证书类型 MAC Key Store 消息推送控制台 制作证书 创建苹果 App ID 使用appuploder制作 .p12文件 创建证书 如需向 iOS 设备推送数据&#xff0c;您首先需要在消息推送控制台上配置 iOS 推送证书。iOS 推送证书用于推送通知&#xff0c;本文将介绍消息推送服务支…...

ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析

文章主要谈及主流ToolLLM 以及高口碑Agent 在调用Tools上的一些对比&#xff0c;框架先上&#xff0c;内容会不断丰富与更新。 第一部分&#xff0c;ToolLLM model 先来说主打Function Call 的大模型们 OpenAI GPT 宇宙第一LLM&#xff0c;它的functionCall都知道&#xff0…...

【MySQL学习之基础篇】约束

文章目录 1. 概述2. 基础约束3. 外键约束3.1. 介绍3.2. 外键的添加3.3. 外键删除和更新行为 1. 概述 概念&#xff1a; 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。     目的&#xff1a; 保证数据库中数据的正确、有效性和完整性。 分类&#x…...

【DataSophon】大数据管理平台DataSophon-1.2.1基本使用

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…...

基于redisson实现发布订阅(多服务间用避坑)

前言 今天要分享的是基于Redisson实现信息发布与订阅&#xff08;以前分享过直接基于redis的实现&#xff09;&#xff0c;如果你是在多服务间基于redisson做信息传递&#xff0c;并且有服务压根就收不到信息&#xff0c;那你一定要看完。 今天其实重点是避坑&#xff0…...

Java 源码、反码、补码 位运算

文章目录 1. 源码、反码、补码1.1 原码1.2 反码1.3 补码1.4 byte的最大值1.5 byte的最小值 2. 位运算2.1 & 与2.2 | 或2.3 ~ 非2.4 ^ 异或2.5 << 左移 &#xff08;没有无符号左移&#xff09;2.6 >> 右移 &#xff08;有符号右移&#xff09;2.7 >>>…...

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICE…...

Linux Conda 安装 Jupyter

在Linux服务器Conda环境上安装Jupyter过程中遇到了无数的报错&#xff0c;特此记录。 目录 步骤一&#xff1a;安装Anaconda3 步骤二&#xff1a;配置Conda源 步骤三&#xff1a;安装Jupyter 安装报错&#xff1a;simplejson.errors.JSONDecodeError 安装报错&#xff1a;…...

金融众筹系统源码:适合创业孵化机构 附带完整的搭建教程

互联网技术的发展&#xff0c;金融众筹作为一种新型的融资方式&#xff0c;逐渐成为创业孵化机构的重要手段。为了满足这一需求&#xff0c;金融众筹系统源码就由此而生&#xff0c;并附带了完整的搭建教程。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.…...

OpenCV imencode 函数详解与应用示例

OpenCV imencode 函数详解与应用示例 介绍imencode 函数的基本信息示例代码应用场景 介绍 OpenCV是一个强大的计算机视觉库&#xff0c;提供了许多图像处理和分析的工具。imencode函数是其中之一&#xff0c;用于将图像编码为指定格式的字节流。这个函数对于图像的存储、传输和…...

持续集成交付CICD:Jenkins使用CD流水线下载Nexus制品

目录 一、实验 1.Jenkins使用CD流水线下载Nexus制品 一、实验 1.Jenkins使用CD流水线下载Nexus制品 &#xff08;1&#xff09;Jenkins新建CD流水线 &#xff08;2&#xff09;新建视图 &#xff08;3&#xff09;查看视图 &#xff08;4&#xff09;添加字符参数 &#xf…...

【C++】输入输出流 ⑩ ( 文件流 | 文件流打开方式参数 | 文件指针 | 组合打开方式 | 文件打开失败 )

文章目录 一、文件流打开方式参数1、文件流打开方式参数2、文件指针3、组合打开方式4、文件打开失败 一、文件流打开方式参数 1、文件流打开方式参数 文件流打开方式参数 : ios::in : 以只读方式打开文件 ;ios::out : 以只写方式打开文件 , 默认打开方式 , 如果文件已存在则清…...

React中的setState执行机制

我这里今天下雨了&#xff0c;温度一下从昨天的22度降到今天的6度&#xff0c;家里和学校已经下了几天雪了&#xff0c;还是想去玩一下的&#xff0c;哈哈&#xff0c;只能在图片里看到了。 一. setState是什么 它是React组件中用于更新状态的方法。它是类组件中的方法&#x…...

Kubernetes 与 GitOps 最佳实践

Kubernetes 与 GitOps 最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。GitOps 是现代 Kubernetes 运维的重要趋势&#xff0c;今天直接上硬货&#xff0c;教你如何在 Kubernetes 中实现 GitOps 工作流。 二、GitOps 核心概念 概念描述优势声明式配置所有配置以声明式方…...

AltStore终极指南:非越狱iOS设备安装第三方应用的完整方案

AltStore终极指南&#xff1a;非越狱iOS设备安装第三方应用的完整方案 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 还在为苹果App Store的限制而烦恼吗&am…...

Downr1n iOS降级与越狱实战指南:从问题诊断到解决方案

Downr1n iOS降级与越狱实战指南&#xff1a;从问题诊断到解决方案 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 一、决策指南&#xff1a;为什么选择Downr1n&#xff1f; 1.1 核心…...

别再裸奔你的实时数据流了!用Python+Starlette给SSE接口加个Header认证门卫

实时数据流安全加固&#xff1a;PythonStarlette实现SSE接口的Bearer Token认证 想象一下&#xff0c;你精心构建的实时数据看板突然被不明身份的用户随意访问&#xff0c;敏感的业务指标像超市促销传单一样被任意获取——这不是危言耸听&#xff0c;而是许多开发者在使用SSE技…...

3步搞定浏览器功能扩展:Greasy Fork开源脚本管理平台完全指南

3步搞定浏览器功能扩展&#xff1a;Greasy Fork开源脚本管理平台完全指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork作为开源的用户脚本管理平台&#xff0c;为技术爱好者…...

终极Django CORS Headers缓存优化指南:如何正确配置Vary头部提升性能

终极Django CORS Headers缓存优化指南&#xff1a;如何正确配置Vary头部提升性能 【免费下载链接】django-cors-headers Django app for handling the server headers required for Cross-Origin Resource Sharing (CORS) 项目地址: https://gitcode.com/gh_mirrors/dj/djang…...

DAMOYOLO-S基础教程:理解count字段与实际业务中目标计数逻辑映射

DAMOYOLO-S基础教程&#xff1a;理解count字段与实际业务中目标计数逻辑映射 1. 从一次“数数”的困惑说起 前两天&#xff0c;一个做零售分析的朋友找我帮忙。他兴奋地告诉我&#xff0c;他们用上了最新的AI目标检测模型&#xff0c;想自动统计货架上的商品数量。他上传了一…...

51单片机+DAC0832信号发生器实战:从硬件搭建到波形调试全记录(附避坑指南)

51单片机DAC0832信号发生器实战&#xff1a;从硬件搭建到波形调试全记录&#xff08;附避坑指南&#xff09; 在电子设计领域&#xff0c;信号发生器是工程师和爱好者不可或缺的工具。传统商用设备虽然功能强大&#xff0c;但对于学习嵌入式系统和数模转换原理而言&#xff0c;…...

CTC语音唤醒模型在医疗语音录入系统中的应用案例

CTC语音唤醒模型在医疗语音录入系统中的应用案例 1. 引言 在医疗场景中&#xff0c;医生每天需要处理大量的病历记录工作。传统的手写或键盘输入方式不仅效率低下&#xff0c;还容易分散医生对患者的注意力。现在&#xff0c;通过CTC语音唤醒技术&#xff0c;医疗语音录入系统…...

ArcPy 脚本:批量生成郑州市 1990-2019 年空间分析结果(核密度、热点、平均中心、标准差椭圆)

ArcPy 脚本&#xff1a;批量生成郑州市 1990-2019 年空间分析结果&#xff08;核密度、热点、平均中心、标准差椭圆&#xff09;背景介绍在城市研究中&#xff0c;我们常常需要分析多年数据的空间分布模式&#xff0c;比如建筑物高度在郑州市的聚集情况、热点区域变化、整体中心…...