Unity | Shader基础知识(第二十一集:应用-怪兽膨胀、顶点着色器和表面着色器合并)

news2024/12/28 4:11:25

目录

一、前言

二、资源介绍 

三、顶点着色器和表面着色器一起使用基础

1.使用表面着色器代码

2.光照选择 

3.加入顶点着色器 

4.补充表面着色器 

四、在顶点着色器中完成怪兽膨胀功能

1.膨胀原理解释

2.完成膨胀代码

1).写出需要的结构体

2).为了能控制膨胀,我们加一个参数

3).修改顶点坐标 

五、纯净代码

六、收尾


一、前言

本集主要的知识点是两个:

1.顶点着色器和表面着色器一起使用

2.做出怪兽气球膨胀效果

气球膨胀效果预览(如图1所示)

图1 气球膨胀效果

二、资源介绍 

日常操作,在讲之前介绍一下资源来源。

在unity商店中,免费资源里可以下载。(如图2所示)

图2 模型资源

导入之后,用下图的预制体就行了。(如图3所示) 

图3 怪兽预制体

我们看一下现在的模型和材质。(如图4所示) 

图4 模型和材质

我们再去仔细看一下它用的材质,发现他是标准着色器,然后有个贴图Albedo和金属贴图Metallic,没别的了。(如图5所示)

图5 模型的材质

结论:我们只需要写一个能接收光线的,带贴图的shader。

我们为了方便,待会写的shader只用他的贴图,不用金属贴图,小伙伴感兴趣可以自己加。 

三、顶点着色器和表面着色器一起使用基础

之前我们学了表面着色器,也学了顶点着色器和片元着色器,我们可以发现,顶点着色器要更自由一点,自由到什么程度,如果你仔细观察我们之前做的内容,连光照,阴影等都需要自己写

相比起来,表面着色器很多就出生自带,写起来比较容易,但不自由,你发现,我们从来没有在表面着色器里面控制过顶点

如果你又想用表面着色器写好的东西,又想去控制细节,合在一起用就行了。

1.使用表面着色器代码

首先我们先把表面着色器放进来。

//引用    //表面着色器
#pragma surface surf
                //名称

//表面着色器常用的结构体
struct Input
{
  
};

    //引入的方法
void surf(Input IN,inout SurfaceOutput o)
{
    
}
2.光照选择 

我们使用常规的Lambert光照,所以加入Lambert。

#pragma surface surf Lambert
3.加入顶点着色器 

因为这个气球巨大化,需要更改顶点才能使用,所以我们需要加入顶点着色器vertex,起名叫vert

#pragma surface surf Lambert vertex:vert
4.补充表面着色器 

我们暂时不去管顶点着色器,我们先用表面着色器把贴图显示出来,这都是以前讲过的,就不细讲了。

Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
            CGPROGRAM
            #pragma surface surf Lambert vertex:vert
            
            struct Input
            {
            float2 uv_MainTex;
            };

            sampler2D _MainTex;

            void surf(Input IN,inout SurfaceOutput o)
            {
                o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb;
            }

            ENDCG
     }

到这里,一个显示贴图的,普通的表面着色器就完成了。 

四、在顶点着色器中完成怪兽膨胀功能

1.膨胀原理解释

常规怪兽的线框线条(如图6所示)

图6 怪兽线框

它每一个交点都是顶点,我们只要把这些点,沿着法线方向往外移动,就会出现怪兽膨胀的效果。 

2.完成膨胀代码
1).写出需要的结构体

那我们需要顶点信息vertex,需要法线normal,这里有一个没用到但是必须要写的texcoord。

我们完成这个结构体:

            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal:NORMAL;
                float2 texcoord : TEXCOORD0;
            };
2).为了能控制膨胀,我们加一个参数

别忘了subShader中也要声明一下。

    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        //控制膨胀
        _Amount("Extrude",Range(0,1))=0
    }
3).修改顶点坐标 

就是之前说的,顶点坐标加上法线坐标,但为了能控制膨胀的大小,我们乘上系数。

            void vert (inout appdata v)
            {
                v.vertex.xyz +=v.normal * _Amount;
            }

关键步骤就都完成了~

五、纯净代码

Shader "Unlit/018"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Amount("Extrude",Range(0,1))=0
    }
    SubShader
    {
            CGPROGRAM
            #pragma surface surf Lambert vertex:vert
            
            struct Input
            {
            float2 uv_MainTex;
            };

            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal:NORMAL;
                float2 texcoord : TEXCOORD0;
            };

            sampler2D _MainTex;
            float _Amount;

            void vert (inout appdata v)
            {
                v.vertex.xyz +=v.normal * _Amount;
            }

            void surf(Input IN,inout SurfaceOutput o)
            {
                o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb;
            }

            ENDCG
     }
}

六、收尾

最后我们创建材质,把贴图放上去,就结束啦。(如图7所示)

图7 收尾步骤

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

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

相关文章

修改所属用户/用户组——chown

目录 (1)修改所属用户 (2)修改所属用户组 (3)修改所属用户和用户组 (4) 选项 -R 使用 chown 可以修改文件/文件夹的所属用户,所属用户组; 当然与 chmod …

7thonline第七在线出席中服协时尚科技峰会 探讨AI商品管理落地

7月25-26日,中国服装协会2024中国时尚科技创新峰会在杭州隆重举行,本次大会以“新质焕能,革故鼎新”为主题,为持续推动服装产业鼎力创新,以新质生产力的新特征为引领,布局高质量发展新赛道,充分…

MySQL基础练习题15-进店却未进行交易过的顾客

题目:有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID ,以及他们只光顾不交易的次数。 准备数据 分析数据 题目:有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID ,以及他们只光顾不交易的次…

c++迭代器的介绍

迭代器主要的作用就是为了可以像数组那样实现指针向后移动到下一个数据。同时迭代器统一了所有容器,让所有容器可以通过迭代器互通数据。 那么下面我们来看看迭代器 数组的优势 我们数组的优势就是内存连续,那么我们将首地址的地址进行加减就可以访问…

【多线程】补充内容 {线程池;线程安全的单例模式;STL容器、智能指针的线程安全;其他常见的各种锁:自旋锁、读写锁}

一、线程池 1.1 概念 线程池一种线程使用模式: 线程过多会带来调度开销,进而影响缓存局部性和整体性能。 而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务:(线程池的优点) 这避免了在处…

将真实世界带入实验室—如何使用ALPS进行网络损伤仿真测试

不完美的真实世界网络 不同于稳定、可控的传统网络实验室的网络环境,真实世界的网络环境面临着许多挑战和风险,这些挑战在很大程度上增加了网络的脆弱性和复杂性: (1)物理损伤:真实世界的网络基础设施&am…

Java扫码点餐系统奶茶店类型堂食配送小程序源码

🥤【奶茶新风尚!扫码点餐系统,堂食配送两不误】🥤 🏠【堂食新体验:一键下单,即享美味】🏠 踏入心仪的奶茶店,不再需要排队等候点单,只需拿起手机&#xff0…

TongHttpServer 简介

1. 概述 随着网络技术的飞速发展,高并发大用户场景越来越普遍,单一应用服务节点已经不能满足并发需求,为了提高整个系统可靠性,扩展性,吞吐率,通常将多个应用服务器通过硬负载/软负载组成集群,负载均衡器根据不同负载算法将请求分发到各个应用服务器节点。 Tong…

飞书打卡 快捷指令

使用快捷指令定时飞书打卡 在网上找了一圈,只有钉钉打卡的快捷指令,但是公司换飞书,哪个打工人不怕忘记打卡呢,所以自己研究了一下,其实也很简单。 找url 问题的最关键是打开飞书的打卡界面 如果只是打开飞书APP 很…

手动上电电路(电路收藏)

SW1按下 V1栅极对地 V1通 Vout给Mcu工作 GPIO2 高电平 V2通 SW1松开 V1栅极依然通过V2对地 维持V1通 Vout。再次按下SW1 GPIO1 对地 使Mcu收到中断 将GPIO2 输出低电平 V2关 松开SW1 V1栅极悬空 V1断开 Vout被截断

大数据基础:Spark重要知识汇总

文章目录 Spark重要知识汇总 一、Spark 是什么 二、Spark 四大特点 三、Spark框架模块介绍 3.1、Spark Core的RDD详解 3.1.1、什么是RDD 3.1.2、RDD是怎么理解的 四、Spark 运行模式 4.1、Spark本地模式介绍 4.2、Spark集群模式 Standalone 4.3、Spark集群模式 Stan…

中国十大顶级哲学家,全球公认的伟大思想家颜廷利:人类为何拥有臀部

人类为何拥有臀部?若众生皆无此部位,又如何能寻得一处真正属于自己的“座位”?在博大精深的中国传统文化中,汉字“座”与“坐”均蕴含“土”字元素。在易经的智慧里,作为五行之一的“土”,象征着人类社会的…

将gitee 上的nvim 配置 从gitee 上下载下来,并配置虚拟机

首先是下载 gitee 上的配置。 然后是 配置 tmux 然后是配置nvim . 1 在init.lua 文件中注释掉所有的与第三方插件有关的内容。 2 在packer 的文件中 , 注释掉所有的与 第三方插件有关的代码。 3 首先要保证 packer 能够正确的安装。 4 然后开始 安装 所有的插件…

汇川技术|CANlink、CANopen、Profibus-DP网络编辑器的使用

哈喽,你好啊,我是雷工! 本节学习CANlink、CANopen、Profibus-DP网络编辑器的使用。 以下为学习笔记。 01 CANlink编辑器 在AC810的【网络组态】中未看到CANlink主站的功能,所以先简单了解,等具体使用时再具体查看。 …

2024最全RabbitMQ集群方案汇总

之前在网上找rabbitmq集群方案有哪几种时,基本上看到的答案都不太一样,所以此文的主要目的是梳理一下rabbitmq集群方案,对rabbitmq集群方案的笔记并不是搭建的笔记。 总结了一些文章,rabbitmq集群大概有五种方案:普通…

一文搞懂网络IO和java中的IO模型

目录 1.绪论 2.IO分类 3.用户空间和内核空间 4.同步阻塞IO 5.同步非阻塞IO 6.IO多路复用 6.1 基本原理 6.2 linux对IO多路复用的实现方式 6.3.1 select 1.实现原理 2.缺点 6.3.2 poll 1.实现原理 6.3.3 epoll 1.epoll数据结构 2.epoll的函数 3.epoll的优点 4…

【实践出真知】使用Docusaurus将md文档组织起来就是一个网站(写API文档,写教程、写日记、写博客的有福了)

文章目录 前言一、Docusaurus 是什么?二、一键生成网站框架并预览1. 系统需求2. 脚手架项目网站(一键生成网站框架)3. 生成的目录内容4. 网站运行与展示 总结 前言 前段时间,学习Flet,访问到Flet中文网,被…

魔方财务新版QRuser用户中心主题

本主题支持魔方财务3.5.7版本!可自由切换魔方财务3.5.7版本与其他版本。本主题基于官方default开发,主要面向企业,三端自适应,支持并完美适配多语言。界面精美,简洁清新,主题内新增多处bootstrap-select的调…

软考系统架构师-计算机网络基础

目录 3.1 网络的基本概念 3.2 通信技术 3.3 网络技术 3.4 组网技术 1.网络设备及其工作层级 2.网络协议 (1)应用层协议。 (2)传输层协议。 (3)网络层协议。 3.交换机 4&#xff0e…

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人,它能像一位经验丰富的工程师,理解你的问题,并从 Speckle 文档中精准地找到答案。更厉害的是,它甚至可以帮你生成代码片段! 🚀 本文将详…