Unity | Shader基础知识(第十二集:颜色混合)

目录

前言

一、日常生活中的常见现象

二、unity自带的一个结构体(表面着色器SurfaceOutputStandard)

三、自己写一个颜色混合的Shader

1.只加基础颜色Albedo

2.加入法线

 3.加入光滑度

  4.加入金属度

  5.加入自发光

四、作者的话


前言

shader里每一个结构体的存在都是有原因的,都是来源于生活的,让我们一起来从生活的角度看看吧。

一、日常生活中的常见现象

小故事一:

家里的墙是白色的,我买了一个黄色的台灯,当我打开台灯时,白墙变成了黄色。(如图1所示)

图1 白墙照了黄光

备注:墙(物体)本身的颜色是白色,环境光的颜色是黄色,得到结果是黄色。

自身颜色叫:贴图

环境光叫:环境光

小故事二(上节课讲的,法线颜色),如图2所示:

Unity | Shader基础知识(第十一集:什么是Normal Map法线贴图)-CSDN博客

图2 法线贴图

备注:物体本身有颜色,加了深度的颜色信息。

有凹凸感:法线贴图

小故事三:

手电筒打到白纸上,白纸会亮一片,手电筒打到镜子里,只会亮一个点。(如图3,4所示)

ps:我找第二张图的时候要被吓死了....都搜出来什么鬼东西。救命!!!

图3 手电筒照纸
图4 手电筒照镜子

备注:白纸比较粗糙,光照上去以后会朝不同的地方散开,但物体如果非常光滑,从哪里射过去的光,就会从哪里射回去。
光线方向是否会原路返回:光滑度

小故事四:

玻璃光滑,但光会都穿过去,金属片光滑,光会全部被反弹回去。(如图5,6)

图5 透光玻璃
图6 反光铝板

备注:光照到物体上以后,会穿透,会吸收,会反射,反射占比越多,就越像镜子。
像镜子一样,光都反射回去了:金属度

小故事五:

灯笼本身有颜色,但是它还会发光。(如图7)

图7 灯笼

备注:物体本身是蓝色带小鱼,但是有白色的光射出来。
自己是一个会发光的东西:自发光

二、unity自带的一个结构体(表面着色器SurfaceOutputStandard)

struct SurfaceOutputStandard
{fixed3 Albedo;      // 基础颜色——故事1fixed3 Normal;      // 法线——故事2half3 Emission;     //自发光——故事5half Metallic;      // 0=非金属,1=金属    金属度——故事4half Smoothness;    // 0=粗糙,1=平滑    光滑度——故事3half Occlusion;     // 遮挡(默认为 1) 这里先不讲fixed Alpha;        // 透明度 Alpha    这里先不讲
};

中文参考链接:编写表面着色器 - Unity 手册

我们就可以在shader里面直接用。

三、自己写一个颜色混合的Shader

1.只加基础颜色Albedo

(如图8所示)

图8 基础颜色
Shader "Custom/007_mixColor"
{Properties{    //贴图_MainTex ("Albedo", 2D) = "white" {}}SubShader{CGPROGRAM//把表面着色器的结构体相关部分引用进来#pragma surface surf Standard//承接资源的部分sampler2D _MainTex;//输入的结构体struct Input{float2 uv_MainTex;};//数据传递的方法void surf (Input IN, inout SurfaceOutputStandard o){//把贴图转换成能用的数据fixed4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;}ENDCG}FallBack "Diffuse"
}

备注:其实这里已经加了环境光,因为如果没有环境光,你就啥也看不见。(如图9所示)

图9 关闭环境光

 如果改变环境光的颜色,贴图的颜色也会改变,和故事一相同。(如图10所示)

图10 改变环境光的颜色
2.加入法线

(这部分就不细讲了,直接放代码)(如图11所示) 

图11 加入法线贴图
Shader "Custom/007_mixColor"
{Properties{    //贴图_MainTex ("Albedo", 2D) = "white" {}//法线图片_MainNormal ("NormalTexture",2D) = "bump" {}}SubShader{CGPROGRAM//把表面着色器的结构体相关部分引用进来#pragma surface surf Standard//承接资源的部分sampler2D _MainTex;sampler2D _MainNormal;//输入的结构体struct Input{float2 uv_MainTex;float2 uv_MainNormal;};//数据传递的方法void surf (Input IN, inout SurfaceOutputStandard o){//把贴图转换成能用的数据fixed4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Normal = UnpackNormal(tex2D(_MainNormal,IN.uv_MainNormal));}ENDCG}FallBack "Diffuse"
}
3.加入光滑度

(如图12所示) 越光滑,光线就会朝着太阳照射的地方反射回去。因为改变的是方向,所以调到中间的时候刚好射到眼睛里,就是白的。

图12 光滑度
Shader "Custom/007_mixColor"
{Properties{    //贴图_MainTex ("Albedo", 2D) = "white" {}//法线图片_MainNormal ("NormalTexture",2D) = "bump" {}//光滑度_Smoothness("Smoothness",Range(0,1)) = 0.5}SubShader{CGPROGRAM//把表面着色器的结构体相关部分引用进来#pragma surface surf Standard//承接资源的部分sampler2D _MainTex;sampler2D _MainNormal;float _Smoothness;//输入的结构体struct Input{float2 uv_MainTex;float2 uv_MainNormal;};//数据传递的方法void surf (Input IN, inout SurfaceOutputStandard o){//把贴图转换成能用的数据fixed4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Normal = UnpackNormal(tex2D(_MainNormal,IN.uv_MainNormal));//光滑度o.Smoothness =_Smoothness;}ENDCG}FallBack "Diffuse"
}
 4.加入金属度

(如图13所示) 这里为了光泽度感觉更明显,把其他贴图先去掉了。

图13 加入金属度​​​​​​
Shader "Custom/007_mixColor"
{Properties{    //贴图_MainTex ("Albedo", 2D) = "white" {}//法线图片_MainNormal ("NormalTexture",2D) = "bump" {}//光滑度_Smoothness("Smoothness",Range(0,1)) = 0.5//金属度_Metallic("Metallic",Range(0,1)) = 0}SubShader{CGPROGRAM//把表面着色器的结构体相关部分引用进来#pragma surface surf Standard//承接资源的部分sampler2D _MainTex;sampler2D _MainNormal;float _Smoothness;float _Metallic;//输入的结构体struct Input{float2 uv_MainTex;float2 uv_MainNormal;};//数据传递的方法void surf (Input IN, inout SurfaceOutputStandard o){//把贴图转换成能用的数据fixed4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Normal = UnpackNormal(tex2D(_MainNormal,IN.uv_MainNormal));//光滑度o.Smoothness =_Smoothness;//金属度o.Metallic =_Metallic;}ENDCG}FallBack "Diffuse"
}
 5.加入自发光

(如图14所示) 

如图14 自发光
Shader "Custom/007_mixColor"
{Properties{    //贴图_MainTex ("Albedo", 2D) = "white" {}//法线图片_MainNormal ("NormalTexture",2D) = "bump" {}//光滑度_Smoothness("Smoothness",Range(0,1)) = 0.5//金属度_Metallic("Metallic",Range(0,1)) = 0//自发光_Emission ("Emission", Color) = (1,1,1,1)}SubShader{CGPROGRAM//把表面着色器的结构体相关部分引用进来#pragma surface surf Standard//承接资源的部分sampler2D _MainTex;sampler2D _MainNormal;float _Smoothness;float _Metallic;float3 _Emission;//输入的结构体struct Input{float2 uv_MainTex;float2 uv_MainNormal;};//数据传递的方法void surf (Input IN, inout SurfaceOutputStandard o){//把贴图转换成能用的数据fixed4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Normal = UnpackNormal(tex2D(_MainNormal,IN.uv_MainNormal));//光滑度o.Smoothness =_Smoothness;//金属度o.Metallic =_Metallic;//自发光o.Emission = _Emission;}ENDCG}FallBack "Diffuse"
}

 备注:到此为止,我们常用的五个故事里的颜色混合,都写出来了。

四、作者的话

恭喜大家,shader最最基础的部分已经学完了,现在的大家已经可以看懂一些基础的shader和进行一些修改了。最近up稍微闲了一点,会努力更新哒,感谢大家的支持,没有你们观看,就没有我写下去的动力。

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

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

相关文章

docker安装nessus服务及使用

Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件,现在软件服务越来越多,越来越复杂,涉及的数据也更多;因此系统完成后对于系统漏洞的检测并对其进行修改十分有必要,本文介绍通过docker安装nessus服务及简单的使…

设计模式-模板方法模式(TemplateMethod)

1. 概念 模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 2. 原理结构图 2.1 图 2.2 角色 抽象类(Abstract Class) 定义抽象的基本操作(Primitive Operations&#xff…

从启发式到模型化 京东推荐广告排序机制演化

1、序言:广告排序机制的前世今生 1.1、简介:广告排序机制 在线广告是国内外各大互联网公司的重要收入来源之一,而在线广告与传统广告最大的区别就在于其超大规模的实时竞价环境:数以万计的广告主在一天内可以参与亿级别的流量竞…

解决宝塔的FTP无法使用被动模式

问题:宝塔安装完ftp管理软件之后,无法使用被动模式连接 解决: 提示: 如果还是不行,那么要看看防火墙和安全组有没有放行被动模式的端口,宝塔安装的pure-ftpd软件的被动模式端口默认是39000至400…

Kubernetes 升级不弃 Docker:KubeKey 的丝滑之道

作者:尹珉,KubeSphere Ambaasador&Contributor,KubeSphere 社区用户委员会杭州站站长。 引言 随着 Kubernetes 社区的不断发展,即将迎来 Kubernetes 1.30 版本的迭代。在早先的 1.24 版本中,社区作出一个重要决策…

计算机网络——42攻击和对策

攻击和对策 IDS:入侵检测系统 分组过滤 对TCP/IP头部进行检查不检查会话间的相关性 IDS:intrusion detection system 深入分组检查:检查分组的内容(e.g. 检查分组中的特征串,已知攻击数据库的病毒和攻击串)检查分组间…

【网站项目】捷邻小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

FPGA - 以太网UDP通信(二)

一,引言 前文链接:FPGA - 以太网UDP通信(一) 在上文章中介绍了以太网简介,以太网UDP通信硬件结构,以及PHY芯片RGMII接口-GMII接口转换逻辑,接下来介绍UDP通信结构框图以及数据链路层&#xff…

Python | Leetcode Python题解之第28题找出字符串中的第一个匹配项的下标

题目: 题解: class Solution:def strStr(self, haystack: str, needle: str) -> int:# Func: 计算偏移表def calShiftMat(st):dic {}for i in range(len(st)-1,-1,-1):if not dic.get(st[i]):dic[st[i]] len(st)-idic["ot"] len(st)1re…

自己开发的App如何上架,详细解读App上架操作流程

对于企业或个人开发的App,上架是必经之路。然而,许多人不清楚如何进行App上架。工信部在2023年规定,App必须备案才能上架。那么,让我们一起了解App上架流程吧。 1. 准备上架所需材料 在上架App之前,需要准备应用图标…

类加载子系统

目录 类的加载 加载流程 类的加载器 类的链接 类的检验阶段 类的准备阶段 类的解析阶段 类的初始化 static与final的搭配问题 ()的线程安全性 类的初始化情况:主动使用vs被动使用 类的使用 类的卸载 类、类的加载器、类的实例之间的引用关系 类的生命…

端口协议(爆破、未授权)

常见端口服务及攻击方向: 弱口令爆破 工具:https://github.com/vanhauser-thc/thc-hydra hydra是一个支持多协议的自动化的爆破工具。 支持的服务、协议: telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-…

深度学习入门(3)

一、感知机 感知机接收多个输入信号,输出一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。 但是,和实际的电 流不同的是,感知机的信号只有“流 / 不流”( 1 / 0 )两种取值。在本书中&…

【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩

文章目录 背景介绍 初始代码 优化代码 分析和应用 总结 背景介绍 在一个嵌入式软件开发项目中,有一个使用MATLAB Function编写的算法模块,功能是从一个较大的数组中提取一段数据,然后求均值输出,示例如下: 初始代…

Python和Java哪个更适合后端开发?

Python和Java都是强大的后端开发语言,它们各自有鲜明的特点和适用场景。选择哪一个更适合后端开发,主要取决于具体的项目需求、团队技术栈、个人技能偏好以及长期发展考虑等因素。 下面是两者在后端开发中的优势和劣势: 「Python&#xff1…

Maven超详细使用

定义 是一款用于管理和构建java项目的工具 作用 1. 依赖管理 2. 统一项目结构 3. 项目构建 项目目录结构 POM 项目对象模型 (Project Object Model) POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。 仓库 本地仓库&#…

银河麒麟高级服务器操作系统adb读写缓慢问题分析

1.问题环境 处理器: HUAWEI Kunpeng 920 5251K 内存: 512 GiB 整机类型/架构: TaiShan 200K (Model 2280K) BIOS版本: Byosoft Corp. 1.81.K 内核版本 4.19.90-23.15.v2101.ky10.aarch64 第三方应用 数据库 2.问题…

苹果个人证书管理

根据近日工业和信息化部发布的《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,相信不少要进行IOS平台App备案的朋友遇到了一个问题,就是apple不提供云管理式证书的下载,也就无法获取公钥及证书SHA-1指纹。 已经上架的应用不想重…

瑞芯微RK3568/RK3588+鸿蒙,矿鸿工控屏、矿鸿工控板、矿鸿网关,推动矿业数智化变革

4月10日至12日,以“绿色智能创新,携手共赢未来”为主题的第二届中国国际矿业装备与技术展览会在西安举行。信迈科技携矿鸿解决方案及产品亮相,赋能矿山行业数智化升级和国产化改造进程全面提速。 作为华为矿山军团矿鸿生态使能合作伙伴&#…

【位运算】3097. 或值至少为 K 的最短子数组 II

本文涉及知识点 位运算 LeetCode3097. 或值至少为 K 的最短子数组 II 给你一个 非负 整数数组 nums 和一个整数 k 。 如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。 请你返回 nums 中 最短特别非空 子数组 的长度&…