Unity | Shader基础知识(第四集:Shader结构体)

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、结构体的需求

1 数据的接入

2 开始写结构体

三、unity封装好的结构体

1 unity封装好了很多结构体

2 如何使用封装好的结构体

四、下集预告


一、本节介绍

1 上集回顾

上一集,我们做了一个可以改变颜色的案例。

2 本节介绍

这一集,我们继续讲一个语法,在shader里写结构体。

二、结构体的需求

1 数据的接入

shader里是不好随便去声明数据的,我们前面传入数据时,用的是括号传入(如图),

但是当数据很多的时候,就会不好弄,于是引入新语法,结构体,可以把很多个数据放到一起,像之前一样写代码用。

2 开始写结构体

需求:我们现在有3个语义想用

:POSITION             顶点坐标

:NORMAL               法线坐标

:TEXCOORD0        第一套纹理坐标         //纹理坐标就UV坐标,这里不详细讲解,可以百度

代码:用结构体把这些数据都接过来

            //这里结构体的名字是可以自己起的struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;float4 texcoord:TEXCOORD0;}

这样,我们之后再用数据的时候,只需要声明一个结构体,通过结构体调用就可以了

例,修改上一个案例,加入结构体的内容

  • 上一个案例的链接:

Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>)-CSDN博客

  • 代码写法是:
Shader "Custom/001"
{
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//这里结构体的名字是可以自己起的struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;float4 texcoord:TEXCOORD0;};//传入并声明结构体float4 vert(a2v v):SV_POSITION{//调用结构体的vertexreturn UnityObjectToClipPos(v.vertex);}float4 frag():SV_TARGET{return float4(1,1,1,1);}ENDCG}}
}

三、unity封装好的结构体

1 unity封装好了很多结构体

例:

struct appdata_base {float4 vertex : POSITION;//顶点坐标float3 normal : NORMAL;//法线float4 texcoord : TEXCOORD0;//第一纹理坐标UNITY_VERTEX_INPUT_INSTANCE_ID    //ID信息
};struct appdata_tan {float4 vertex : POSITION;//顶点坐标float4 tangent : TANGENT;//切线float3 normal : NORMAL;//法线float4 texcoord : TEXCOORD0;//第一纹理坐标UNITY_VERTEX_INPUT_INSTANCE_ID    //ID信息
};struct appdata_full {float4 vertex : POSITION;float4 tangent : TANGENT;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;float4 texcoord1 : TEXCOORD1;//第二纹理坐标float4 texcoord2 : TEXCOORD2;//第三纹理坐标float4 texcoord3 : TEXCOORD3;//第四纹理坐标fixed4 color : COLOR;        //顶点颜色UNITY_VERTEX_INPUT_INSTANCE_ID    //ID信息
};
2 如何使用封装好的结构体

其实这里又是一种引用,只要我们提前引用就可以使用

之前我们引用过CG语法,还在那个位置,进行引用

  • 例:
            //之前学的CG引用#pragma vertex vert#pragma fragment frag//unity封装好的部分结构体引用#include"UnityCG.cginc"
  • 引用案例:
Shader "Custom/001"
{
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"//假设我们要传入 appdata_base//传入上述结构体float4 vert(appdata_base v):SV_POSITION{//调用结构体的vertexreturn UnityObjectToClipPos(v.vertex);}float4 frag():SV_TARGET{return float4(1,1,1,1);}ENDCG}}
}

四、下集预告

下集会根据之前的语法,学习一个数学知识,制作一个彩色的球。

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

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

相关文章

Java stream 进阶版

1、Stream 概述 Java 8 引入了 Stream API,它是一种用于简化集合和数组操作的强大工具。Stream API 允许我们将集合或数组视为流,并在流上进行各种操作,如筛选、排序、聚合等。 Stream API 的核心概念是 Stream 流,它代表了一个数据流,其中包含了一系列的元素。这些元素…

火狐浏览器怎么设置网络代理?代理起到了哪些作用

火狐浏览器是一款流行的网页浏览器,它支持多种网络代理设置。设置网络代理可以帮助用户访问某些网站或提高网络访问速度。但是,使用代理IP时需要注意一些事项,以确保安全和正常使用。 以下是在火狐浏览器中设置网络代理的步骤: 1.…

ubuntu20.04在noetic下编译orbslam2

ubuntu20.04在noetic下编译orbslam2 参考链接1:https://blog.csdn.net/qq_58869016/article/details/128660588 参考链接2:https://blog.csdn.net/dong123456789e/article/details/129693837 在noetic下的安装环境 1.库安装 sudo apt-get update sudo …

UDP特性之广播

UDP特性之广播 1. 广播的特点2. 设置广播属性3. 广播通信流程4. 通信代码总结 1. 广播的特点 广播的UDP的特性之一,通过广播可以向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊…

《Linux从练气到飞升》No.28 Linux中的线程同步

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

陪玩系统圈子系统:打破孤单,寻找游戏共伴!APP小程序H5三端源码交付,支持二开!喜欢软件开发的朋友可以一起交流!

在如今快节奏的生活中,游戏作为一种娱乐方式,早已融入了人们的生活,成为许多人放松心情、释放压力的方式之一。然而,与此同时,游戏中的孤独感也成为一些玩家所面临的问题。为了解决这个问题,陪玩系统圈子系…

C++初阶:STL之vector类模板

目录 一.vector的介绍及使用 1.1.vector的介绍 1.2.vector的使用 1.2.1.vector的定义 1.2.2.vector iterator的使用 1.2.3.vector的空间增长问题 1.2.4.vector的增删查改 1.3.vector在OJ中的使用 题一:只出现一次的数字 题二:杨辉三角 题三&a…

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 (1)filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印: (2)map方法取到的是包含指定项的数组,如果满足…

解决PP材质粘合问题用PP专用UV胶水

PP材料已经广泛应用于各行各业,在粘接中会有不同的问题需求,那么使用专用于PP的UV胶水可能是解决PP材质粘合问题的一种有效方法。 主要在于:UV胶水在紫外线照射下可以快速固化,形成坚固的连接。所以使用PP专用UV胶水时可以考虑&am…

基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 目录 🚀一. Amazon SageMaker 🔎1.1 新功能发布:A…

基于PCIe的NVMe学习

一:基本概念 1.UltraScale:是Xilinx ZYNQ 系列产品 2.spec:大家现在别纠结于具体的命令,了解一下就好。老板交代干活的时候,再找spec一个一个看吧————猜测估计是命令表之类的。 3.TLP报文部分: 二&…

云桌面和桌面云是什么?中国桌面云市场谁在领跑?

当我们谈论云桌面和桌面云时,确实很容易产生混淆。它们都涉及到云计算技术在个人计算环境中的应用,但具体的应用场景和侧重点有所不同。 云桌面:虚拟化的桌面环境 云桌面是一种基于云计算的虚拟化技术,它允许用户通过互联网访问一…

Visual Studio开发环境的搭建

1.引言 Visual Studio是微软公司开发的一款强大的集成开发环境(IDE),它可以帮助开发人员进行各种编程任务,包括设计、开发、测试、调试和部署应用程序。典型功能包括: 代码编辑器。提供高效、智能的代码编辑器&#x…

Docker的私有仓库Harbor

Harbor概述 1.Harbor定义 私有,自定义用户的形式登陆仓库,拉取或者上传镜像。(内部管理的用户) Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 2.Docker Harbor…

【数学建模】《实战数学建模:例题与讲解》第十讲-时间序列预测(含Matlab代码)

【数学建模】《实战数学建模:例题与讲解》第十讲-时间序列预测(含Matlab代码) 基本概念移动平均(Moving Average, MA):指数平滑法(Exponential Smoothing):季节性调整(Seasonal Adju…

SpringCloud系列(六)| 聊聊负载均衡

一、负载均衡概述 上一篇文章中,我们在集成OpenFeign的过程中提示我们需要加入了一个依赖就是: spring-cloud-starter-loadbalancer。 顾名思义,这个包的作用就是用来做负载均衡的。 简单解释一下什么是负载均衡,就是当我们的服…

Java8新特性:Lambda表达式

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 本…

AI 搜索将如何影响 SEO

用户可以与之交互的 AI 搜索结果是肯定的。搜索营销人员要么对此感到生气,什么都不做,要么他们可以调查即将发生的事情并做好准备。 Google SGE 和 Bing 提供了相当相似的 AI 方法,是传统搜索和聊天机器人的混合体。 但这并不一定是当今 AI…

HarmonyOS--基础组件Text

Text组件 可以包含Span子组件。 接口 Text(content? : string | Resource) string: Text(我是ttttt) Resource: Text($r(app.string.aaaaaa)) 先找限定词目录,找不到内容 找base目录 属性 除支持通用属性外,还支持以下属性: 名称 参数…

全国合作商标服大赛决赛完整规则流程

本文是全国合作商标服大赛决赛完整规则流程,有需要的朋友可以参考下。 一、抢答比拼 1、政策管理考核题 系统评分。抢答题共15题/条线:单选10题,多选5题,基础分100分 单选答对10分/答错-5分,多选答对20分/答错-10分…