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

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.lryc.cn/news/260909.html

相关文章:

  • 使用opencv的Laplacian算子实现图像边缘检测
  • 5. PyTorch——数据处理模块
  • Android 移动端编译 cityhash动态库
  • IO流学习
  • 新手HTML和CSS的常见知识点
  • RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装
  • 微服务架构之争:Quarkus VS Spring Boot
  • 如何使用ArcGIS Pro拼接影像
  • [论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构
  • C# WPF上位机开发(键盘绘图控制)
  • 《地理信息系统原理》笔记/期末复习资料(10. 空间数据挖掘与空间决策支持系统)
  • uniapp播放 m3u8格式视频 兼容pc和移动端
  • 产品经理之Axure的元件库使用详细案例
  • 数字化转型对企业有什么好处?
  • 微信小程序:按钮禁用,避免按钮重复提交
  • JAVA 异常分类及处理
  • C语言--求数组的最大值和最小值【两种方法】
  • ES-组合与聚合
  • 在 Spring Boot 中发送邮件简单实现
  • 深入理解网络 I/O:单 Selector 多线程|单线程模型
  • Kafka Avro序列化之三:使用Schema Register实现
  • EasyExcel
  • java 探针两种模式实战
  • uniGUI之MASK遮罩
  • DevOps云原生创建devops流水线(微服务项目上传git,打包镜像,部署k8s)
  • 【vim 学习系列文章 13.1 -- 自动命令autocmd 根据文件类型设置vim参数】
  • 算法基础概念之数据结构
  • 解决ES伪慢查询
  • 关于Ubuntu22.04恢复误删文件的记录
  • Docker笔记:Docker Swarm, Consul, Gateway, Microservices 集群部署