Unity | Shader基础知识(第七集:案例<让图片和外部颜色叠加显示>)

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、添加图片资源

三、 常用cg数据类型

1 float 

2 bool

3 sampler 

四、加入图片资源

五、使用图片资源

1 在通道里加入资源

2 使用图片和颜色叠加

2.1 2D纹理采样tex2D

2.2 组合颜色

六、全部代码

七、下集介绍


相关阅读

文章图片均来自网络,如有侵权,联系立删。


一、本节介绍

1 上集回顾

加入外部颜色资源Color来控制球体颜色,在外面看见并改颜色。

2 本节介绍

加入外部图片资源并显示在球体上(如图1所示),让图片和外部颜色叠加显示(如图2所示)。

 

图1 材质球上的图片
图2 图片和颜色叠加

二、添加图片资源

图片资源

备注:图片的大类可以分成两种

  • 2D图片资源

就是我们平时见到的,见的最多的图。我们随便找一张方形的图(如图3所示),放到材质球上,它会贴不满或者变型(如图4所示)。

图3 方形图
图4 材质球
  • 3D图片资源

专门有一种图片资源,是3d图片资源,例如一个砖头墙(如图4所示),放到材质球上,它会贴满,而且没有图片拼缝(如图5所示)。

图4 3d图片资源
图5 3d图片资源的材质球

三、 常用cg数据类型

我们之前学了float4,float3。其实还有很多在cg语言里的数据类型。

1 float 

32位浮点数据(小数)  例: float1 、 float2 、 float3 、float4 (不能超过4了)

后面是1,就是一个数,后面是2,就类似vector2,后面是3,就类似vector3,以此类推。

2 bool

布尔数据(判断对错) 只有true和false两个数据

3 sampler 

纹理对象(接收图片的类型) 例:sampler2D, sampler3D

一个是2D图片资源,一个是3D图片资源

四、加入图片资源

在财产框里添加图片

新知识点:

  • 2D   我们这次打算添加2D图片资源
  • "white" {}   这个是unity之前准备好的图片资源,如单词所示,就是一个白图,就固定好这么写

备注:因为shader是一只运行的,我们不能加空的进去,会出问题,所以随便先加个白图

Properties{_Color("Color",Color)=(1,1,1,1)//本节新增_MainTex("MainTex",2D) = "white" {}}

结果:

此时我们就可以在外面看见这个可以加图片的部分了(如图6所示)。

图6 加入图片资源

拖入图片之后(如图7所示)。 

图7 拖入图片之后

五、使用图片资源

注:这里的代码都是接着上集讲的。

1 在通道里加入资源
 pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"float4 _Color ;//本节新增sampler2D _MainTex;//承接2D图片在CG语言里是sampler2D    //起名为MainTexappdata_base vert(appdata_base v){v.vertex =UnityObjectToClipPos(v.vertex);return v;}float4 frag():SV_TARGET{return _Color;}ENDCG}
2 使用图片和颜色叠加
2.1 2D纹理采样tex2D

sampler2D是图片资源,但我们不能直接使用,因为我们在给屏幕涂色,所以我们必须把这个图片传到shader现在有的贴图里,得到这个贴图在shader里的数据应该是什么。

之前讲过,我们的结构体里有一个是关于shader贴图的(如图8所示)。

图8 回忆结构体

使用代码:

float4 frag(appdata_base v):SV_TARGET
{
//转换贴图数据    //appdata_base中的贴图数据,取出xy轴数据(这里也可以理解为uv数据)
tex2D(_MainTex,v.texcoord.xy)//原本贴图
}
2.2 组合颜色

颜色和颜色的叠加一般用相乘。(这里和数学矩阵有关,可自行学习)

使用代码:

float4 frag(appdata_base v):SV_TARGET
{
float4 c =tex2D(_MainTex,v.texcoord.xy)*_Color;//把组合的颜色传出去
return c;
}

六、全部代码

Shader "Custom/001"
{
Properties{_Color("Color",Color)=(1,1,1,1)_MainTex("MainTex",2D) = "white"{}}
SubShader{pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include"UnityCG.cginc"float4 _Color ;sampler2D _MainTex;appdata_base vert(appdata_base v){v.vertex =UnityObjectToClipPos(v.vertex);return v;}float4 frag(appdata_base v):SV_TARGET{float4 c =tex2D(_MainTex,v.texcoord.xy)*_Color;return c;}ENDCG}}
}

七、下集介绍

本集讲了如何让图片和外部颜色叠加显示。

下集讲案例,如何做一个漫反射材质球。

下集更新时间,最晚在2023年12月31日更新,如果点赞订阅多,会加速~谢谢大家。

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

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

相关文章

26 redis 中 replication/cluster 集群中的主从复制

前言 我们这里首先来看 redis 这边实现比较复杂的 replication集群模式 我们这里主要关注的是 redis 这边的主从同步的相关实现 这边相对比较简单, 我们直接基于 cluster集群模式 进行调试 主从命令同步复制 比如这里 master 是 redis_7002, slave 是 redis_7005 然后 这…

11.HarmonyOS鸿蒙app_page的显示跳转方法

11.HarmonyOS鸿蒙app_page的显示跳转方法&#xff0c;text文本触发点击事件 使用Intent和Operation对象 创建新项目后&#xff0c;再创建secondPageAbility ability_main.xml <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:…

LeetCode(65)LRU 缓存【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; LRU 缓存 1.题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 k…

【ArkTS】路由传参

传参 使用router.pushUrl()&#xff0c;router.push()官方不推荐再使用了。 格式&#xff1a; router.pushUrl({url: 路由地址,params:{参数名&#xff1a;值} )跳转时需要注意路由表中是否包含路由地址。 路由表路径&#xff1a; entry > src > main > resources &g…

C#动态加载第三方非托管DLL,LoadLibraryEx,LoadLibrary

C#动态加载第三方DLL 当我们需要加载第三方非托管DLL时&#xff0c;通常会直接使用DllImport的方式&#xff0c;代码如下&#xff1a; [DllImport("GetFile.dll", CallingConvention CallingConvention.StdCall, CharSet CharSet.Unicode)] static extern string…

【华为OD题库-095】字符串划分-Java

题目 给定一个小写字母组成的字符串S&#xff0c;请找出字符串中两个不同位置的字符作为分割点&#xff0c;使得字符串分成三个连续子串且子串权重相等&#xff0c;注意子串不包含分割点。 若能找到满足条件的两个分割点&#xff0c;请输出这两个分割点在字符串中的位置下标&am…

Python+pip下载与安装

Hi, I’m Shendi Pythonpip下载与安装 最近有识别图片中物体的需求&#xff0c;于是选用了TensorFlow&#xff0c;在一番考虑下&#xff0c;还是选择直接使用Python。 Python下载安装 直接在搜索引擎搜索Python或通过 https://www.python.org 进入官网 在 Downloads 处点击 Al…

Gin之GORM的表关联查询操作详解

前期工作&#xff1a; 先查看下要操作的两张表&#xff1a; carton carton_cate //关系如下&#xff1a; // 一个章节对应一个动漫&#xff08;一对一&#xff1b;两种方法&#xff1a;belong to&#xff1b;has one&#xff09; // 一个动漫可以对应多个章节&#xff08;一…

Flink-状态后端

状态后端是一个“开箱即用”的组件&#xff0c;可以在不改变应用程序逻辑的情况下独立配置。 Flink中提供了两类不同的状态后端&#xff0c;一种是“哈希表状态后端”&#xff08;HashMapStateBackend&#xff09;&#xff0c;另一种是“内嵌RocksDB状态后端”&#xff08;Embe…

42道CSS高频题整理(附答案背诵版)

1、简述CSS3选择器优先级及计算&#xff1f; CSS的选择器优先级是一个相对复杂的概念&#xff0c;它规定了在一组样式冲突时&#xff0c;哪些样式将被浏览器采纳。选择器优先级是通过一个四位的值来计算的&#xff0c;形式为&#xff1a;[内联样式, ID选择器, 类选择器/属性选…

Eclipse_01_如何设置代码文件背景颜色为护眼沙绿色

设置方法 Window --> Preference 参考文档 参考文档 1

uni-app ucharts中饼图与圆环图区别

项目情况&#xff1a; uni-app的用于移动端H5项目&#xff0c;包使用uni_modules目录存放。 图表引用ucharts中的echarts配置的组件方式 区别1 饼图与圆环图在echarts使用的配置都是pie类型。但是配置raduis使用&#xff1a; radius: [40%, 70%] 区别2 组件type指明&#xf…

Linux 非阻塞网络IO模式

非阻塞网络IO模式介绍 当用户线程发起一个 read 操作后&#xff0c;并不需要等待&#xff0c;而是马上就得到了一个结果。如果结果是一个 error 时&#xff0c;它就知道数据还没有准备好&#xff0c;于是它可以再次发送 read 操作。一旦内核中的数据准备好了&#xff0c;并且又…

修复泰坦陨落2缺少msvcr120.dll的5种方法,亲测有效

游戏《泰坦陨落2》缺少msvcr120.dll的问题困扰着许多玩家。这个问题的主要原因可能是系统环境不完整、软件或游戏版本不匹配、DLL文件丢失或损坏以及杀毒软件误判等。msvcr120.dll是Microsoft Visual C 2013 Redistributable的一个组件&#xff0c;它包含了许多运行库文件&…

Linux——安装ESMF和ESMPY

1、下载esmf git clone https://githubfast.com/esmf-org/esmf.git2、安装 2.1 指定文件路径、安装路径和编译器 2.1.1Gfortran编译器 export ESMF_DIR/home/yuh/ESMF export ESMF_INSTALL_PREFIX/home/yuh/ESMF/esmf export ESMF_COMMmpiuni export ESMF_COMPILERgfortran…

BMS专有名词英文总称

1、BMS : battery management system 电池管理系统 2、EMS : energy management system 能源管理系统 3、PCS : power conversion system 储能变流器 4、SOC : state of charge 剩余容量 5、SOH : state of healthy 电池健康状态 6、E…

【百度PARL】强化学习笔记

文章目录 强化学习基本知识一些框架Value-based的方法Q表格举个例子 强化的概念TD更新 Sarsa算法SampleSarsa Agent类 On_policy vs off_policy函数逼近与神经网络DQN算法DQN创新点DQN代码实现model.pyalgorithm.pyagent.py总结&#xff1a;举个例子 实战 视频&#xff1a;世界…

elasticsearch|大数据|低版本的elasticsearch集群的官方安全插件x-pack的详解

前言&#xff1a; elasticsearch集群说实话是比较好部署的&#xff0c;也就是从开箱即用这方面来说&#xff0c;是比较简单的&#xff0c;大体步骤就是首先处理好集群的环境&#xff0c;比如时间服务器&#xff0c;域名映射&#xff0c;内核层面的文件打开数这些小问题&#x…

力扣刷题日常(一)

136.只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间 示例 1 &#xf…

Js中浅拷贝和深拷贝有什么区别,如何实现?

在 JavaScript 中&#xff0c;浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;是两种常见的数据拷贝方式&#xff0c;它们的区别在于拷贝的程度。 浅拷贝&#xff1a;浅拷贝仅拷贝对象或数组的引用&#xff0c;而不是拷贝其内部的值。这…