Unity | Shader基础知识(第五集:案例<小彩球>)

目录

一、本节介绍

1 上集回顾

2 本节介绍

二、原理分析

1 现实中出现彩色的原因

2 软件里的彩色的原理

3 方案

三、 实现数字由【-1,1】映射为【0,1】

1 结论

2 原理

四、代码实现

1 注意事项

2 详解结构体appdata_base

3 接收数据

4 映射数据

5 输出给SV_TARGET

五、全部代码

六、下集介绍


一、本节介绍

1 上集回顾

上节课我们学到,Shader的结构体。

2 本节介绍

这节课我们要根据之前所学的所有语法,制作一个彩色的小球(如图一所示)。

图1 彩色的小球

二、原理分析

1 现实中出现彩色的原因

这种颜色我们经常会在彩虹身上发现,原因就是光的折射(初中物理知识),换句话说,就是光的方向不同,不同方向的光射入到人的眼睛里组合成了不同的颜色。

2 软件里的彩色的原理

我们只需要输出不同的连续数据的颜色就可以了。

3 方案

光射到物体上会被反射(如图2所示),在光线中间的位置,画一条线,我们叫它法线。

图2 反射光线和法线

当光线照射在球体上时(如图3所示):

 

图3 球体上的法线方向各不相同

结论:球体上的法线刚好是连续的从向量(-1,-1,-1)到(1,1,1)的值。 

我们输出的颜色的值,是0到1之间,那我们只需要让-1到1,等比变成0到1就可以了。

例:

如果是-1,输出0

如果是0,输出0.5

如果是1,输出1

以此类推。

这个关系叫做映射

三、 实现数字由【-1,1】映射为【0,1】

1 结论

我们只需要先除以2,再加0.5,就可以实现映射

2 原理

a. 因为【-1,1】的距离是2,【0,1】的距离是1,所以如果我们拿到【-1,1】中的其中一个数,先除以2,就可以让他们比例相同。

b. 【-1,1】除以2,就会变成【-0.5,0.5】

c. 这时,我们给【-0.5,0.5】都加上0.5,范围就会变成【0,1】

四、代码实现

代码接着上集写的。

1 注意事项

之前是最后传了一个颜色,不管哪个点,都显示一个颜色,这次是每个顶点需要不同的颜色。

2 详解结构体appdata_base

结构体预览:

struct appdata_base {
    float4 vertex : POSITION;       //顶点坐标
    float3 normal : NORMAL;         //法线
    float4 texcoord : TEXCOORD0;    //第一纹理坐标
    UNITY_VERTEX_INPUT_INSTANCE_ID  //ID信息
};

如果我们声明了这个结构体,这个结构体会自带值,这个值就是后面的语义里所带的值。

appdata_base vert(appdata_base v)
            {
            }

 如果我们改变了这个结构体,在把它return出去,改变的值就会自己输出到后面的语义里,进行下一轮计算。

appdata_base vert(appdata_base v)
            {
            //我们在这里把顶点坐标改成了屏幕坐标,传回了appdata_base里
            v.vertex =UnityObjectToClipPos(v.vertex);

            //因为最后return了,所以v.vertex会被语义POSITION接收
            return v;
            }

到此,我们的顶点计算就完成了,也输出给了POSITION。 

3 接收数据

改完顶点坐标,我们又进入了片元着色器。

因为我们在顶点着色器里修改的值实际上是储存在语义里了,我们再次声明也是从语义里接收数据,所以我们只需要再次声明appdata_base,我们就可以接收到顶点着色器中修改过的数据

4 映射数据
  • 声明float3用来接收数学修改过的数据。
 float4 frag(appdata_base v):SV_TARGET
            {
            float3 n;
            }
  • 按照之前的数学知识,把法线映射成【0,1】的数据,存在上面的代码n中
 float4 frag(appdata_base v):SV_TARGET
            {
                                    //因为你是一组数,不是一个数,所以不能直接加0.5
            float3 n = v.normal/2+float3(0.5,0.5,0.5);
            }
5 输出给SV_TARGET

此时,我们每一个顶点,对应着一个法线,

每一个法线值,会映射成不同的【0,1】之间的值,

我们把这个值输出出去。

由于,我们SV_TARGET是float4,我们需要补一个值

备注:在CG语言中,补一个值就直接括号后面加一个值就可以

 float4 frag(appdata_base v):SV_TARGET
            {
                                    //因为你是一组数,不是一个数,所以不能直接加0.5
            float3 n = v.normal/2+float3(0.5,0.5,0.5);
            
                        //n是float3,但返回的是float4,所以后面补一个1
            return float4(n,1);
            }

最后,保存,上材质,我们就得到一个彩色的球啦。

五、全部代码

Shader "Custom/001"
{
SubShader
    {
        pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include"UnityCG.cginc"

            appdata_base vert(appdata_base v)
            {
            v.vertex =UnityObjectToClipPos(v.vertex);
            return v;
            }

            float4 frag(appdata_base v):SV_TARGET
            {
                                    //因为你是一组数,不是一个数,所以不能直接加0.5
            float3 n = v.normal/2+float3(0.5,0.5,0.5);

            return float4(n,1);
            }

            ENDCG
        }
    }
}

六、下集介绍

本集讲了如何制作一个小彩球。

下集讲语法,如何加入外部资源。

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

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

相关文章

如何在Facebook Business Manager进行企业认证

Facebook Business Manager,简称BM,按照字面意思理解就是Facebook官方的商务管理平台,是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM,企业就可以在一个后台&#xff0c…

三层交换机原理与配置

文章目录 三层交换机原理与配置一、三层交换技术概述二、传统的 MLS三、基于CEF 的MLS1、转发信息库(FIB)2、邻接关系表3、工作原理: 四、三层交换机的配置1、三层交换机配置命令2、三层交换机配置步骤 三层交换机原理与配置 一、三层交换技…

新手卖家如何入局独立站?看这一篇就够了

作为卖家如果有心入局搭建跨境独立站,先要了解清楚什么是独立站?优势是什么?再去思考如何入局独立站? 一、什么是独立站? 独立站,顾名思义,就是一个独立的网站,它不受限于任何平台&a…

docker-compose容器编排(单机一键拉起所有容器)

1、安装docker-compose实验 安装完成 2、yaml文件 (1)定义 一种直观的、以竖列形式展示序列化数据格式的标记语言,可读性高。类似于json格式,但语法简单 yaml通过缩进表示数据结构,连续的项目用-减号表示 &#x…

【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)

Geoserver是我们常用的地图服务器,在开源系统中的应用比较广泛。在实际环境中,我们可能会选用官方的二进制安装包进行部署,这样只要服务器上有java环境就可以运行,方便在现场进行部署。 1.问题来源 这次由于甲方一月一次的漏洞扫…

HarmonyOS保存应用数据

数据管理 1 概述 在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS应用开发也不例外。 本文将为您介绍HarmonyOS提供的数据管…

Java的没落 .NET的崛起

曾几何时,Java可是排列在编程语言的第一名的。而现在跌落到第三名。我觉得Java没落有以下几点原因: oracle收购之后,java不再开源。Java能发展是因为开源免费跨平台,现在这么一搞,Java都要收费,使用的人自然就少了。反…

2019年第八届数学建模国际赛小美赛C题预测通过拥堵路段所需的时间解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 C题 预测通过拥堵路段所需的时间 原题再现: 在导航软件中,行程时间的估计往往是一个重要的功能。现有的导航软件往往通过出租车或安装了该软件的车辆获取实时GPS数据来确定当前的路况。在交通拥堵严重的情况下&#…

IC卡卡号修改UID卡CUID卡物理卡号修改考勤工号修改

普通M1卡的物理卡号是锁死的,UID卡、CUID卡、FUID卡是特殊的M1卡,他们的物理卡号是可以修改的。考勤卡、门禁等读取到的IC卡卡号是这样的0136098153,10位卡号,这个卡号是随机的,不连续的,没有规律&#xff…

Unity中后处理 脚本 和 Shader

文章目录 前言一、我们先创建一个默认的后处理Shader,用于脚本测试二、在脚本中使用Graphics.Blit();1、我们先公开一个材质,用于测试后处理效果2、因为在实际开发中,我们不可能为每一个后处理Shader创建对应的材质球。所以,需要对…

【科研论文】检索证明、科技查新、查收查引(附教育部、科技部查新工作站名单)

文章目录 1、什么是科技查新 & 查收查引2、科技查新 & 查收查引有什么用3、如何办理科技查新 & 查收查引4、教育部科技查新工作站5、科技部认定的查新机构名单 1、什么是科技查新 & 查收查引 科技查新是国家科技部为避免科研课题重复立项和客观正确地判别科研…

ChatGPT Plus重新开启订阅

12月14日凌晨,OpenAI首席执行官Sam Altman在社交平台宣布,终于找到了更多的GPU算力,重新开启订阅ChatGPT Plus。 上个月15日,OpenAI就因为算力不足,以及用户激增等原因暂停了ChatGPT Plus订阅。 Sam表示,在…

第78讲:截取MySQL Binlog二进制日志中特定部分内容的技巧

文章目录 1.为什么要截取Binlog日志中的部分内容2.针对标识位截取Binlog日志中的部分数据2.1.以标识位号截取Binlog日志的方法2.2.截取Binlog日志中的部分数据2.3.模拟简单基于标识位的Binlog数据恢复 3.针对事件范围截取Binlog日志中的部分数据 1.为什么要截取Binlog日志中的部…

Sublime Text 3配置C/C++开发环境

Sublime Text 3配置C/C开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 接入 mingw-w642.1 下载 mingw-w642.2 环境变量配置 3. 配置 C/C 开发环境3.1 C Build System 配置3.2 C Build System 配置 4. 编写 C/C 代码4.1 第一个 C 代码【helloworld.c】4.2 第一个 C 代码…

jmeter,跨线程调用cookie

结构目录 一、线程组1 1、创建登录的【HTTP请求】,并配置接口所需参数; 2、创建【正则表达式提取器】,用正则表达式提取cookie字段; 3、创建【调试取样器】,便于观察第2步提取出的数据; 4、创建【BeanSh…

构建外卖小程序:技术代码实践

在这个数字化的时代,外卖小程序已经成为餐饮业的一项重要工具。在本文中,我们将通过一些简单而实用的技术代码,向您展示如何构建一个基本的外卖小程序。我们将使用微信小程序平台作为例子,但这些原理同样适用于其他小程序平台。 …

钉钉机器人发送表格

背景: 由于每次发送excel连接,不太好看,想着简单的表格直接用消息的方式发送在群里,就想着弄一个直接发送的表格信息,但是钉钉官网是没有的。 我估计钉钉的开发人员也没有想过,会有人钻空子,用markdown发送…

从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】

作者:Juan R. Terven 、Diana M. Cordova-Esparaza 摘要:YOLO已经成为机器人、无人驾驶汽车和视频监控应用的核心实时物体检测系统。我们对YOLO的演变进行了全面的分析,研究了从最初的YOLO到YOLOv8每次迭代的创新和贡献。我们首先描述了标准…

Mac清理软件cleanmymac x4.14.4破解版,2024年有免费cleanmymac x激活码

​ CleanMyMac X 4.14.4破解版可以快速识别并删除占用磁盘空间的无用文件,提升我们系统的存储空间。它还可以优化启动项、修复系统错误和保护隐私等。总之CleanMyMac X十分强大有需要的赶快下载吧, CleanMyMac X 许可证激活码:ak39840506641bjckr 需要…

Educoder/头歌JAVA——jQuery基础

目录 第1关:jQuery入门 相关知识 环境安装 第一个程序 id选择器 第2关:jQuery基本选择器 相关知识 类选择器 元素选择器 编程要求 第3关:过滤选择器 (一) 相关知识 设置css属性 编程要求 第4关&#xff1…