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

一、本节介绍

上一集,我们做了一个案例,这一集,我们继续讲一个语法,在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
            {
                                    //调用结构体的vertex
            return 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.使用unity封装好的结构体

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

之前我们引用过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
            {
                                    //调用结构体的vertex
            return UnityObjectToClipPos(v.vertex);
            }

            float4 frag():SV_TARGET
            {
            return float4(1,1,1,1);
            }

            ENDCG
        }
    }
}
五、下集预告

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统,在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试,以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统,被广泛用于支持高流量、低延迟的应用。为了保证…

iic应用篇

一.iic的优点 1. IIC总线物理链路简单,硬件实现方便,扩展性非常好(1个主机控制器可以根据需求增加从机数量,同时删减从机数量也不会影响总线通信);IIC总线只需要SDA和SCL两条信号线,相比于PCI/…

锂电池基础知识及管理方式总结

这两天在排查一个锂电池无法充电的问题,用的是电池管理芯片BQ25713,网上相关的资料也很少,查看数据手册时,里面也有很多术语参数等不是很理解,所以,在此对锂电池的基础知识做个简单的总结,方面后…

详解Django+Vue+Docker搭建接口测试平台实战

一. 开头说两句 正好接口自动化测试平台需要迁移到新的测试服务器上,就想要体验一番Docker的“一次构建,处处运行”。这篇文章简单介绍了下这次部署的过程,其中使用了Dockerfile定制镜像和Docker-Compose多容器编排。 二. 项目介绍 项目采…

Python-乒乓球小游戏【附完整源码】

乒乓球小游戏 乒乓球小游戏是一个简单而有趣的2D页面交互式游戏,玩家可以通过键盘输入来控制球拍上下移动来接球,从而体验乒乓球的乐趣。该游戏有单人和双人两种模式 运行效果: 一:主程序: import sys import cfg …

app自动化测试(Android)

Capability 是一组键值对的集合(比如:"platformName": "Android")。Capability 主要用于通知 Appium 服务端建立 Session 需要的信息。客户端使用特定语言生成 Capabilities,最终会以 JSON 对象的形式发送给 …

芝麻杂草目标检测数据集VOC+YOLO格式近1300张

芝麻,芝麻科芝麻属的一年生草本植物,茎中空或具白色髓部;叶子为卵形;花朵单生或少数同生于腋下,呈白色;芝麻蒴果基部钝圆,顶部有尖,中间有棱;芝麻的种子通常呈扁平椭圆形…

k8s-service 7

由控制器来完成集群的工作负载,service(微服务)是将工作负载的应用暴露出去,从而解决访问问题 作用:无论是在集群内还是集群外,都可以访问pod上的应用,其实现对集群内的应用pod自动发现和负载均…

Linux面试题分享:从入门到精通的全面指南

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Llama2-Chinese-7b-Chat安装部署

文章目录 前言一、文件介绍 📁二、环境配置 ♟三、Llama2-Chinese-7b-Chat下载 ⏬总结 前言 本文主要介绍如何使用Llama2-Chinese-7b-Chat,最后的效果如图所示: 一、文件介绍 📁 ⬇️ 下载地址:https://pan.baidu.…

软件测试工程师要掌握哪些专业技能

1.软件测试理论知识:掌握软件测试的基本概念、测试方法、测试技术和测试流程,包括黑盒测试、白盒测试、性能测试、安全测试等。 2.编程语言和脚本语言:掌握至少一种编程语言和脚本语言,例如Java、Python、JavaScript等。 3.自动化…

微服务网关Gateway

springcloud官方提供的网关组件spring-cloud-starter-gateway,看pom.xml文件,引入了webflux做响应式编程,请求转发用到了netty的reactor模型。hystrix停止维护后,官方推荐resilience4j做服务熔断,网关这里也能看到依赖。 对于网关提供的功能,大方向上主要是服务路由转发…

mybatis动态SQL-choose-when-otherwise

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

从零开始搭建企业管理系统(三):集成 Spring Data Jpa

集成 Spring Data Jpa 什么是 Jpa什么是 Spring Data Jpa什么是 HibernateJPA、Spring Data Jpa、Hibernate 之间的关系集成 Spring Data JpaPOM 依赖配置文件UserEntity启动程序Jpa 配置Jpa 注解UserRepositoryUserServiceUserServiceImplUserControllerBaseEntity 什么是 Jpa…

YOLOv8-Seg改进:ASF-YOLO助力小目标分割| 2023年12月最新成果

🚀🚀🚀本文改进: ASF-YOLO一种新的特征融合网络架构,该网络由两个主要的组件网络组成,可以为小目标分割提供互补的信息:(1)SSFF模块,它结合了来自多尺度图像的全局或高级语义信息;(2)TFE模块,它可以捕获小目标的局部精细细节等 🚀🚀🚀YOLOv8-seg创新专栏:ht…

什么是接口测试?如何做接口测试

接口测试是指对系统或应用程序接口进行测试,以验证接口的功能、可靠性、性能、安全性等方面的需求是否被满足。接口测试可以用于测试不同系统、模块、组件之间的交互和通信,包括 Web 接口、网络接口、数据库接口等。其重点是测试数据传输、数据格式、数据…

CTF竞赛二进制类题型解析(逆向工程、二进制漏洞利用、缓冲区溢出)

在CTF(Capture The Flag)竞赛中,二进制(Binary)类题型通常涉及逆向工程、二进制漏洞利用、缓冲区溢出等方面的挑战。这些题目考验参赛者对底层编程和系统安全的理解。以下是15道二进制类题目及其标准答案,并…

【深度学习】PHP操作mysql数据库总结

一.PHP数据库的扩展分类 1.MySQL 扩展是针对 MySQL 4.1.3 或更早版本设计的,是 PHP 与 MySQL数据库交互的早期扩展。由于其不支持 MySQL 数据库服务器的新特性,且安全性差,在项目开发中不建议使用,可用 MySQLi 扩展代替。 2.MySQ…

python:五种算法(PSO、RFO、HHO、WOA、GWO)求解23个测试函数(python代码)

一、五种算法简介 1、粒子群优化算法PSO 2、红狐优化算法RFO 3、哈里斯鹰优化算法HHO 4、鲸鱼优化算法WOA 5、灰狼优化算法GWO 二、5种算法求解23个函数 (1)23个函数简介 参考文献: [1] Yao X, Liu Y, Lin G M. Evolutionary program…

设计模式再探——装饰模式

目录 一、背景介绍二、思路&方案三、过程1.装饰模式简介2.装饰模式的类图3.装饰模式代码4.装饰模式,职责父类拆分的奥义5.装饰模式,部件抽象类的无中生有 四、总结五、升华 一、背景介绍 最近公司在做架构模型的时候,涉及到装饰模式的研…