UnityShader入门精要-系统语义与函数体

news/2025/10/5 15:24:31/文章来源:https://www.cnblogs.com/qiuliw/p/19126617

系统语义与函数体

系统语义标记,指该类型将返回给流水线GPU做处理。

结构体做返回值时,不需要在函数头标记系统语义。结构体外部和内部的标记会产生二义性,所以新版本只能在内部声明

原版错误

Shader "Unity Shaders Book/Chapter 5/Simple Shader" {Properties {// 声明一个Color类型的属性_Color ("Color Tint", Color) = (1.0,1.0,1.0,1.0)}SubShader {Pass {CGPROGRAM#pragma vertex vert#pragma fragment frag// 在Cg代码中,我们需要定义一个与属性名称和类型都匹配的变量fixed4 _Color;struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct v2f {float4 pos : SV_POSITION;fixed3 color : COLOR0;};v2f vert(a2v v) : SV_POSITION {  // 错误,不能在外面声明,不再可以自动解构v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);return o;}fixed4 frag(v2f i) : SV_Target {fixed3 c = i.color;// 使用_Color属性来控制输出颜色c *= _Color.rgb;return fixed4(c, 1.0);}ENDCG}}
}

​- 不再容忍模糊或错误的语义使用​
​- 不允许给结构体整体标记语义(如 struct v2f : SV_POSITION)

mul 被遗弃,会自动转换为UnityObjectToClipPos

改正后

Shader "Unity Shaders Book/Chapter 5/Simple Shader" {Properties {// 声明一个Color类型的属性_Color ("Color Tint", Color) = (1.0,1.0,1.0,1.0)}SubShader {Pass {CGPROGRAM#pragma vertex vert#pragma fragment frag// 在Cg代码中,我们需要定义一个与属性名称和类型都匹配的变量fixed4 _Color;struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct v2f {float4 pos : SV_POSITION;fixed3 color : COLOR0;};v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);return o;}fixed4 frag(v2f i) : SV_Target {fixed3 c = i.color;// 使用_Color属性来控制输出颜色c *= _Color.rgb;return fixed4(c, 1.0);}ENDCG}}
}

传入的结构体系统语义会被GPU捕捉赋值,返回的结构体的系统语义会被自动解构获取

也就是说,两种函数头

结构体内部标记系统语义,函数头不再声明

struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;
};struct v2f {float4 pos : SV_POSITION;fixed3 color : COLOR0;
};v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);return o;
}

或者基本类型系统语义在函数头标记

fixed4 frag(v2f i) : SV_Target {fixed3 c = i.color;// 使用_Color属性来控制输出颜色c *= _Color.rgb;return fixed4(c, 1.0);
}

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

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

相关文章

从价值博弈到价值原语博弈的跃迁:降维解析与升维求解的工程实现——声明Ai研究

从"价值博弈"到"价值原语博弈"的跃迁:降维解析与升维求解的工程实现 一、引言:价值冲突的新理解框架 在当今复杂多变的社会环境中,价值冲突日益成为人类社会面临的核心挑战。从政策制定到伦理决…

免费酒店管理系统+餐饮架构+小程序点餐——仙盟创梦IDE

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

宣讲家网站 家风建设营销导向企业网站策划

思路 选择对应的区域其实是按照表格中的省市区的名字进行匹配 读取文件后对应的字典为: {台湾: {},新疆: {},港澳: {中国澳门: [凼仔岛, nan]},西藏: {昌都地区: [卡若区], 那曲地区: [nan]} } 字典解释例如 市区为空,就是选择省下面的全部市和区 区为空…

企业网站怎做破解付费wordpress主题

功能扩展说明: 图类封装:将图数据结构封装为类,提高代码复用性 最短路径查找:基于BFS实现未加权图的最短路径查找 路径重构:通过parent数组回溯构建完整路径 异常处理:当路径不存在时返回空向量 复杂度分析…

记一次安装fail2ban - Lizo

今天在B站刷到一个视频,大意就是黑客没有变少,只是变得隐蔽了,于是我查了一下我的服务器的访问日志 不是哥么,你当着我的面爆破密码啊 今天查了一下lastb,发现居然有人正在尝试暴力破解我服务器的ssh密码,而且还…

罗湖商城网站建设找哪家公司比较安全外包和劳务派遣哪个更好

一、环境版本 环境版本docker clickhouse22.3.10.22 二、UDF运行速度时快时慢 udf配置文件xxx_function.xml type- 可执行类型。如果type设置为executable则启动单个命令。如果设置为,executable_pool则创建命令池。 pool_size- 命令池的大小。可选参数&#xff…

2022_easyRSA

RSA,二项式,模运算Tags:RSA,二项式,模运算 0x00. 题目 task.py from Crypto.Util.number import * from secret import flagp = getPrime(512) q = getPrime(512) r = getPrime(512) n = p * q * r e = 2 * 65537 m = …

服装搭配网站建设策划书如何判断网站做的关键词

Flutter 可用于开发 mobile, desktop, backend, Or compile to JavaScript for the web. PATH 环境变量 PATH 环境变量 - 知乎 一文搞懂Path环境变量 “环境变量”和“path环境变量”其实是两个东西! 环境变量:是操作系统提供给应用程序访问的简单 key / value字符串;windo…

网站开发前期准备响应式模板

文章目录1. 创建项目2.配置3. 加载tomcat4. 完成5. 启动项目6. 效果图7. 修改访问路径1. 创建项目 2.配置 3. 加载tomcat 4. 完成 5. 启动项目 6. 效果图 7. 修改访问路径

2025电缆厂家最新推荐排行榜:深度解析青岛一缆等六家优质企业实力,助力精准选购

在工业生产与民生建设中,电缆作为关键载体,其品质直接关乎工程安全稳定运行。当前电缆市场制造商数量繁杂,产品质量参差不齐,部分企业为降成本忽视原材料与工艺把控,导致产品存在诸多安全隐患。且不同场景对电缆功…

目录锁1. 锁的分类1.1 自旋锁1.2 互斥锁手撕读写锁1. 读写锁的原理2. 读写锁的实现2.1 读写锁的接口设计2.2 读写锁的实现 锁 1. 锁的分类 1.1 自旋锁 自旋锁是一种忙等待锁,当线程获取锁失败时,会一直循环等待,直到…

1 洛谷题解修正器

写了个有意思的小工具

防止语言模型性能倒退的新方法

本文介绍了一种防止自然语言处理模型更新时出现性能倒退的新方法,通过知识蒸馏和约束优化来确保新模型在提升整体准确率的同时,不会在特定任务上出现性能衰退,涵盖了负翻转率测量和模型选择策略等技术细节。确保新版…

本站3天更换一次域名yw网络营销策划课程

BUFF,DEBUFF: 增益状态,包括自己或者队友施加的,例如骑士的祝福,牧师的耐力精神,小德的爪子DEBUFF就是减益状态,例如你PK的时候法师的寒冰箭减速,盗贼的毒药,SS的腐蚀等等NPC: NPC就…

南宁工程造价建设信息网站易企网站建设

源代码index.js里包含2部分① 业务逻辑代码 1mb② 引入(如lodash包)的代码 1mb若更新了业务逻辑代码,但在浏览器运行时每次都下载2mb的index.js显然不合理,第三方包是不会变的 手动拆分 webpack.base.js entry: {main: path.re…

RAG入门 - Retriever(1) - 指南

RAG入门 - Retriever(1) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

毕业生就业推荐表模板网站开发制作网站的过程细节

什么是机器视觉 近年来,人工智能渐渐成为一个热点话题。作为人工智能领域的一个分支,图像处理技术也随之发展到了一个新的高度,各种新的软件工具、算法库、开源资料不断涌现,各行各业也渐渐开始进行技术变革。比较典型的例子是&a…

Delphi 解决IniFiles中文乱码

使用 AnsiToUtf8 方法转换一下就可以了procedure TForm1.LoadSettingsFromIni; varIniFile: TIniFile; beginIniFile := TIniFile.Create(FIniFilePath);tryUserNameEdit.Text := AnsiToUtf8((IniFile.ReadString(Sett…

180天做180个网站百度网盘官网网页版

最近朋友买了新手机,可是她又是电脑白痴,告诉她要她用百度搜,硬是没找到,百般无奈我千挑万选,找到了这个网站,让方便也同样带给同样不知道怎么用百度的朋友了5230主题下载网址:http://d.958shop…

礼泉做网站网站设计师主要做什么的

为 IoT 而生的鸿蒙操作系统,其优势与特点几乎都是围绕「万物互联」展开的。在曝光两年之后,华为的鸿蒙系统终于正式和用户见面了。6 月 2 日,华为鸿蒙操作系统及华为全场景新品发布会开启,正式推出 HarmonyOS 2.0,并发…