Unity | Shader基础知识(第六集:语法<如何加入外部颜色资源>)

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、语法结构

1 复习

2 理论知识

3 Shader里声明的写法

4 Properties和SubShader毕竟不是一家人

三、 片元着色器中使用资源

四、代码实现

五、全部代码

六、下集介绍


相关阅读

Unity - Manual: Writing Surface Shaders


一、本节介绍

1 上集回顾

上集制作了一个小彩球。

2 本节介绍

如何加入外部颜色资源Color来控制球体颜色,类似代码里public Color可以在外面看见(如图1所示)并改颜色(如图2所示)。

图1 加入Color
图2 外部改变材质颜色

二、语法结构

1 复习

之前学过的语法结构代码如下:

Shader "Custom/001"    //shader地址
{
SubShader    //干预着色器{pass    //通道{CGPROGRAM    //开始CG语言#pragma vertex vert      //引用顶点着色器#pragma fragment frag    //引用片元着色器#include"UnityCG.cginc"    //引用unity写好的一些内容ENDCG    //结束CG语言}}
}

2 理论知识

我们外部的资源一般在干预着色器之前就要放进来,所以位置是在地址内部,SubShader外部。

学习英文:

Property                财产

Properties             财产(复数)------代码里用这个

代码如下:

Shader "Custom/001"
{
//财产
Properties{}
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"ENDCG}}
}

3 Shader里声明的写法

在C#语法中,我们声明的代码如下:

//公开 //类型是Color        //赋值为(1,1,1,1)
public Color color = new Color(1,1,1,1);//起名是color

shder它本身不是平时的脚本,所以它在起名上面需要两个名字

  • 外部显示的名字(如图3所示),例如我起名为Color
图3 外部显示的名字
  • 内部使用时的名字 ,例如我起名为_Color
  • shader里声明名称的代码
Properties{//内部使用的名称  //声明的数据类型_Color("Color",Color)=(1,1,1,1)//外部使用的名称   //赋值(1,1,1,1)}

4 Properties和SubShader毕竟不是一家人

虽然我们在 Properties里面已经声明了Color,但这仅仅只代表,这个shader脚本里存在了这个信息,并不代表我们可以直接用。

  • 我们用的时候在SubShader中还是要重新声明一下(表明你借过来用)
  • 着色器里面可外部资源的数据类型不一样,Color这个类型它就不认识,它认识的常用的有float3,float4等,Color本质就是一个float4。
  • SubShader接过数据代码
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"//重新声明_Colorfloat4 _Color ;ENDCG}}

三、 片元着色器中使用资源

这时我们可以制作一个球,这个球的颜色根据外面改的颜色而显示它的颜色。改变颜色是片元着色器里直接更改的。

四、代码实现

            float4 frag():SV_TARGET{//直接将接到的数据输出return _Color;}

五、全部代码

都是基于之前教程里讲的之后往下增减的代码。

Shader "Custom/001"
{
Properties{//内部使用的名称  //声明的数据类型_Color("Color",Color)=(1,1,1,1)//外部使用的名称   //赋值(1,1,1,1)}
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"float4 _Color ;appdata_base vert(appdata_base v){v.vertex =UnityObjectToClipPos(v.vertex);return v;}float4 frag():SV_TARGET{return _Color;}ENDCG}}
}

六、下集介绍

本集讲了如何添加外部资源,并通过外部资源来更改现在材质。

下集讲案例,如何加入外部图片资源。

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

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

相关文章

多条件三元表达式如何写?

在某些业务需求情况下,如何书写多条件三元表达式?(例如,父组件传值给子组件,子组件根据不同的值去响应不同的颜色变化该如何实现?) 父组件: 父组件传testData的值给子组件&#xff…

一个适用于搭建企业内部培训平台的开源系统

大家好,我是 Java陈序员。 问君能有几多愁,唯有开源项目解千愁! 最近领导给了个任务,搭建一个企业内部培训平台!好不容易刚完成上个任务,又来一个活,这不又得加班了! 还好&#x…

解决Chrome同一账号在不同设备无法自动同步书签的问题

文章目录 一、问题与原因?2. 解决办法 一、问题与原因? 1.问题 使用谷歌Chrome浏览器比较头疼的问题就是:使用同一个Google账号,办公电脑与家用电脑的数据无法同步。比如:办公电脑中的书签、浏览记录等数据&#xff0…

Python计算圆的面积,几何学技法大解析!

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python计算圆的面积,几何学技法大解析,全文3800字,阅读大约15分钟。 在本文中,将深入探讨如何使用 Python 计算圆的面积&…

LVS负载均衡器(nat模式)+nginx(七层反向代理)+tomcat(多实例),实现负载均衡和动静分离

目录 前言 一、配置nfs共享存储 二、配置2个nginx节点服务的网页页面 节点1:192.168.20.10 步骤一:修改网关指向调度器的内网ip地址 步骤二:将nfs共享的目录进行挂载,并修改nginx的配置文件中location的root指向挂载点 步骤三&#xff…

【ArcGIS Pro二次开发】:CC工具箱1.1.5更新_免费_50+工具

CC工具箱1.1.5更新【2023.12.15】 使用环境要求:ArcGIS Pro 3.0 一、下载链接 工具安装文件及使用文档: https://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5rhttps://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5r 二、使用方法 1、在下…

Java系列-HashMap构造方法

1.无参 只初始化了loadFactor public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {final float loadFactor;public HashMap() {this.loadFactor DEFAULT_LOAD_FACTOR; // all other fields defaulted} }2…

基于Nexus搭建Maven私服基础入门

什么是Nexus&#xff1f;它有什么优势&#xff1f; 要了解为什么需要nexus的存在&#xff0c;我们不妨从以下几个问题来简单了解一下: 为什么需要搭建私服&#xff1f;如果没有私服会出现什么问题&#xff1f; 对于企业开发而言&#xff0c;如果没有私服&#xff0c;我们所有…

南京农业大学研发古籍版的ChatGPT,AI大语言模型荀子面世

随着科技的飞速发展&#xff0c;人工智能已深入到各个领域。为响应古籍活化利用号召&#xff0c;推动大语言模型与古籍处理深度融合&#xff0c;以古籍智能化的研究为目的&#xff0c;南京农业大学国家社科基金重大项目“中国古代典籍跨语言知识库构建及应用研究”课题组与中华…

github 学习番外篇

我们可以按照仓库开始的提示提交仓库 不知道为什么 出现了 我用 git branch 查看了一下&#xff0c;竟然没发现分支 后来发现是只有commit以后才会显示这个分支 后来显示 这是因为本地和远程仓库不同步的原因 这时候我们就需要git pull 一下 发现两个仓库由于不关联不能git…

竞赛保研 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈

前言 当我们自动化用例写完后&#xff0c;接下来就是如何运行用例&#xff0c;生成报告以及反馈通知了。 如果你们公司已经有jenkins了&#xff0c;那么直接集成到jenkins上构建你的自动化任务是非常方便的。 用例上传git仓库 第一步&#xff0c;将写好的自动化用例&#xf…