Unity | Shader基础知识(什么是shader)_unity shader-程序员宅基地

技术标签: unity  Unity相关  游戏引擎  Unity中写shader  

 一、什么是Shader?

Shader的中文名叫着色器。

二、什么是着色器?

着色器的作用:这个世界是3D的,包括在Unity的场景中,我们建的球球,方块块之类的,都是3D的,但是,屏幕是2D的,把3D的东西,通过颜色的汇总,显示在2D的屏幕上。

三、颜色是怎么汇总的?

想知道颜色是怎么合到一起的,我们就找个图片,把它拆开看。

因为世界上所有的颜色,都可以通过三种颜色(红绿蓝)组合出来。

所以我们也把图片拆成这三种颜色。

1.拆图片

所有图片都是由四部分组成

R 红色、G 绿色、B 蓝色、A 透明

比如下面这个图:

 

R(红色)的部分:

G(绿色)的部分:

B(蓝色)的部分:

A(透明)的部分:

这里解释一下A:

A的意思是黑色的部分就没有图片,是透明的,就是图中的

白色的部分就是图片可以显示,有什么图片就显示什么图片

总结一下就出现了经典的话:黑透白不透

2.颜色组合 

我们每个位置,把这四种组合起来,就能出现不同的颜色(如下)

然后,把想要的颜色,上到屏幕上指定的位置,就变成了我们想要的图案。

 四、图片是怎么动起来的?

1.举个例子

 上面的圆形,就是不停的换显示的图片。

这里还不理解,可以看下面的链接

【手翻书】悲伤的小人_哔哩哔哩_bilibili

2.对于着色器来说

每张图片,对着色器来说,就是把颜色显示在不同的地方。

所以,对着色器来说,让图片动起来,就是改变颜色原本的位置。

所以,如果我们希望火焰上下动起来,我们只需要改其中一个颜色的位置。

因为火焰是红色为主的,所以改红色效果会最明显。

那么我们让火焰R图(如下图)的透明框一会变大一会变小,那显示的火焰就会一会大一会小。

还可以左右改变位置:比如我们让其他图继续严丝合缝的拼,但是把上图循环的从居中位置,往左偏一点,那火焰的颜色就会改变,右边被移开的一小部分就没有红色了,左边因为红色位置改变了,和之前的颜色颜色就会有改变,就会出现一些动态的效果。

真正的火焰燃烧时,每个位置的颜色不可能都一直保持一致,一会黄一会红,才有烧的感觉,这种情况就让红色错位就能做到了

五、着色的分类

1.顶点着色器

下图是一个颜色渐变的线,在画这个线的时候,我们一般只管点(箭头指的)的颜色,中间的颜色就是根据情况过度过去的。

结论:知道两个点的颜色,可以填出一个线的颜色。

2.几何着色器

下图是一个渐变的面,当我们用顶点画出了渐变的线,渐变的线和线之间,就可以填出渐变的面。

结论:得到渐变的线,就可以填出渐变的面。

3.细分着色器

我们往往不是做特别简单的一个面,我们可能做圆的,弧面,歪七扭八的,这时候,我们需要进一步让这个面更像我们希望的样子,就用这个着色器。

 4.像素着色器

 到了上一步,物体基础的颜色,已经出现了,但是,物体会在不同的环境下,收到反光,太阳,等其他颜色的影响,可以理解为几个颜色融合到一起,这时候就用到了像素着色器。

5.上色步骤汇总

这些个步骤放一起,也叫shader,毕竟他们只是为了一种东西染色。

 六、Unity当中我们使用的着色器

1.多个一套着色器

首先,不同的物体会用不同的着色器。

比如,石头用石头的着色器,水面有水面的着色器,可以想象,一个场景里会有很多个着色器(shader),那么,unity不可能把所有shader都收录进来,那软件得多大,所以,unity就给他收集了一部分帮助大家日常使用。

那么这些好多个shader在一起,起了个名字叫做渲染管线。

举个例子:一个美女叫美女,好多个美女在一起,有可能叫女团。

 2.unity当中的渲染管线

unity的考虑:

a.我们既然放了一些shader,所以你们可以考虑只用我们的shader。

b.如果你对我们的shader不满意,那么你可以自己建立shader。

c.如果你不光不满意我们的shader,你还觉得清晰度不够,那么我们不光让你自己建,我还能让你超高清。

备注:为啥不直接用c呢,看着就知道c好,啥都有。但是c大呀,就为啥有大小不一样的杯子,你不能办公室喝水,抱个水桶干吧。

所以unity就开了不同种的渲染管线,让你自己选择。

分别叫做:

七、其他相关知识 

着色器和材质的关系:

Unity | Shader(着色器)和material(材质)的关系-程序员宅基地 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49427945/article/details/127517986

智能推荐

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例

在多媒体通信领域,MRCP(Media Resource Control Protocol)协议被广泛用于控制语音识别和合成等媒体资源。UniMRCP是一个开源的MRCP实现,提供了客户端和服务端的库。UmcFramework是一个基于UniMRCP客户端库的示例应用程序框架,它帮助开发者快速集成和测试MRCP客户端功能。本文将详细介绍如何使用UmcFramework和unimrcpclient.xml配置文件连接到多个SIP设置,以及如何用C代码进行示例说明。

java.net.ProtocolException: Server redirected too many times (20)-程序员宅基地

文章浏览阅读3k次。报错:java.net.ProtocolException: Server redirected too many times (20)1.没有检查到cookie,一直循环重定向。解决:CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));URL url = new URL(url); ..._java.net.protocolexception: server redirected too many times (20)

springboot启动报错 Failed to scan *****/derbyLocale_ja_JP.jar from classloader hierarchy_failed to scan from classloader hierarchy-程序员宅基地

文章浏览阅读4.1k次。问题这是部分报错信息2019-07-11 14:03:34.283 WARN [restartedMain][DirectJDKLog.java:175] - Failed to scan [file:/D:/repo/org/apache/derby/derby/10.14.2.0/derbyLocale_ja_JP.jar] from classloader hierarchyjava...._failed to scan from classloader hierarchy

MATLAB-ones函数_matlab中ones函数-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏7次。在MATLAB中,ones函数用于创建一个指定大小的由1组成的矩阵或数组。_matlab中ones函数

解决PS等软件出现应用程序无法正常启动(0xc000007b)_photoshop应用程序无法正常启动0xc000007b。请单击“确认”关闭应用程序。-程序员宅基地

文章浏览阅读3.9w次,点赞2次,收藏9次。  在使用电脑办公过程中,安装应用程序时难免遇到无法安装或者无法正常启动的问题,这对我们使用电脑带来了诸多不便。那遇到应用程序无法正常启动的问题要如何解决呢?相信大家肯定都是十分疑问的,每次都是只能忍痛重新安装软件。今天,小编就和大家探讨下应用程序无法正常启动的解决方法,帮助大家排忧解难。0xc000007b电脑图解1  第一种方案:SFC检查系统完整性来尝试修复丢失文件  1、打开电脑搜索输入cmd.exe,选择以管理员身份运行,跳出提示框时选择继续。0xc000007b电脑图解2_photoshop应用程序无法正常启动0xc000007b。请单击“确认”关闭应用程序。

oracle介质恢复和实例恢复的异同-程序员宅基地

文章浏览阅读396次。1、概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制。实际上REDO LOG的存在是为两种场景准备的:实例恢复(INSTANCE RECOVERY);介质恢复(MEDIA RECOVERY)。 实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的..._oracle 实例恢复和介质恢复

随便推点

轻松搭建CAS 5.x系列(5)-增加密码找回和密码修改功能-程序员宅基地

文章浏览阅读418次。概述说明CAS内置了密码找回和密码修改的功能; 密码找回功能是,系统会吧密码重置的连接通过邮件或短信方式发送给用户,用户点击链接后就可以重置密码,cas还支持预留密码重置的问题,只有回答对了,才可以重置密码;系统可配置密码重置后,是否自动登录; 密码修改功能是,用户登录后输入新密码即可完成密码修改。安装步骤`1. 首先,搭建好cas sso server您需要按..._修改cas默认用户密码

springcloud(七) feign + Hystrix 整合 、-程序员宅基地

文章浏览阅读141次。之前几章演示的熔断,降级 都是 RestTemplate + Ribbon 和RestTemplate + Hystrix ,但是在实际开发并不是这样,实际开发中都是 Feign 远程接口调用。Feign + Hystrix 演示:  eruka(略)order 服务工程:  pom.xml<?xml version="1.0" encoding="U..._this is order 服务工程

YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度-程序员宅基地

文章浏览阅读3.4k次,点赞35次,收藏43次。学习率是影响目标检测精度和速度的重要因素之一。合适的学习率调度策略可以加速模型的收敛和提高模型的精度。在YOLOv7算法中,可以使用基于余弦函数的学习率调度策略(Cosine Annealing Learning Rate Schedule)来调整学习率。

linux中进程退出函数:exit()和_exit()的区别_linux结束进程可以用哪些函数,它们之间有何区别?-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏9次。 linux中进程退出函数:exit()和_exit()的区别(1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核。(2)调用_exit函数时,其会关闭进程所有的文件描述符,清理内存以及其他一些内核清理函数,但不会刷新流(stdin, stdout, stderr ...). exit函数是在_exit..._linux结束进程可以用哪些函数,它们之间有何区别?

sqlserver55555_sqlserver把小数点后面多余的0去掉-程序员宅基地

文章浏览阅读134次。select 5000/10000.0 --想变成0.5select 5500/10000.0 --想变成0.55select 5550/10000.0 --想变成0.555select 5555/10000.0 --想变成0.5555其结果分别为:0.5000000 0.5500000 0.5550000 0.5555000一、如果想去掉数字5后面多余的0 ,需要转化一下:selec..._sql server 去小数 0

Angular6 和 RXJS6 的一些改动_angular6,requestoptions改成了什么-程序员宅基地

文章浏览阅读3.1k次。例一:import { Injectable } from '@angular/core';import { Observable } from 'rxjs';import { User } from "./model/User";import { map } from 'rxjs/operators';import { Http, Response, Headers, RequestOp..._angular6,requestoptions改成了什么

推荐文章

热门文章

相关标签