目录

1.什么是Shader

2.Unity Shader使用的什么语言

3.Shader的创建

4.材质与Shader的关系

5.Shader框架


1.什么是Shader

Shader其实就是一段代码,这段代码的作用是告诉GPU具体怎样去绘制模型的每一个顶点的颜色以及最终每一个像素点的颜色。 Unity Shader则更加简单我们只需要在一实现的效果是什么样子的其他的一切都可以交给unity处理。

2.Unity Shader使用的什么语言

由于unity是一个跨平台的游戏开发引擎,所以为了是shader能更好的适应各个平台。官方建议使用CG(C for Graphic)因为cg语言跨平台性强。
Shader在unity称为ShaderLab

shader在GPU中的渲染流程。

3.Shader的创建

在文件夹下右键 选中 Create–> Shader

Unity提供了很多种Shader的模板;
下面简单介绍一下这些模板

①Standard Surface Shader
标准表面着色器,是一种基于物理的着色系统(使用了Physically BasedRendering(简称PBR)技术,即基于物理的渲染技术),以模拟现实真实的方式来模拟材质与灯光之间的关系,可以很轻易的表现出各种金属反光效果,同时此种Shader的书写逻辑也更符合人类的思维模式。
②Unlit Shader Vertex/Fragment
Shader,也就是最基本的顶点片断着色器,不受光照影响的Shader,多用于特效、UI上的效果制作。
③Image Effect
Shader Glow/泛光/辉光等说法)、调色、景深、模糊等,这些基于最终整个屏幕画面而进行再处理的Shader就是后处理。
④Compute Shader Compute
Shader是运行在图形显卡上的一段程序,独立于常规渲染管线之外的,它可以直接将GPU作为并行处理器加以利用,从而使GPU不仅具有3D渲染能力,还具有其他的运算能力。

4.材质与Shader的关系

①一个Shader可以与无数个材质关联。
②一个材质同一时刻只能关联于一个Shader。(为什么说是同一时刻,因为我们可以通过代码去动态改变材质所关联的Shader)
③材质可以赋与模型,但是Shader不行。
④材质就像是Shader的实例,每个材质都可以参数不一样呈现不同的效果,但是当 Shader改变时,关联它的所有材质都会相应的改变。
⑤举个例子:比如游戏中的怪物,我们只需做一个Shader,然后每个怪物给它一个材质球,材质球上赋与不同的贴图与参数来表现不同的怪物。

5.Shader框架

在我们创建出Shader之后将代码删掉只留下框架如下:

Shader “name”{[Properties ] SubShader [FallBack] [CustomEditor]}
可以拆分为以下部分 Shader “name”
Properties
SubShader
FallBack
CustomEditor
方括号表示的是可选,意思是可有可无。

Properties
属性,材质球面板中显示的贴图和一些参数什么的都是在此Properties中进行定义设置的。如果你确定你的Shader不需要这个Properties可以直接删掉
SubShader
子着色器,Shader可以含有一个或者多个SubShader。通过SubShader可以为不同的硬件,渲染管线和运行时设置定义不同的GPU设置和着色器程序。Unity在加载Shader会将所有的SubShader都遍历出来,并最终选择那个支持用户的机型。
FallBack
回滚,有的时候我们写的Shader难免在一些机器上会出现不支持的问题,而这个时候我们只要添加了FallBack,并且在后面的双引号内写上了其它Shader的有效路径名称,那么在碰到不支持的硬件时这个Shader就会自动切换。直到找到符合的Shader。

补充

①shader不能直接使用要绑定材质才能用

②shader的模板的选择并不是最重要的,即使这个不是你想要的模板你创建之后也可以进行更改,编写成你想要的效果。

③shader编写错误之后就会从你的Material--> Inspector-->shader 中消失。

Shader基础学习(一)相关推荐

  1. UE5 Shader基础学习笔记——13-20 DetailNormal/Smoothstep/Length/CeilFloorRound/DDXDDY/SinCos/Power

    UE5 Shader基础学习笔记--13-20 DetailNormal/Smoothstep/Length/CeilFloorRound/DDXDDY/SinCos/Power Lec13 Deta ...

  2. UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合

    UE5 Shader基础学习笔记--01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合 Lec01 ...

  3. shader基础学习摘要(二) 兰伯特光照模型

    在第6.4节中,书中给出了计算基本光照模型中漫反射光部分的计算公式分别表示为: 目录 漫反射模型 逐像素光照(逐顶点光照改进版) 逐顶点光照(兰伯特原版) 半兰伯特光照模型 漫反射模型 兰伯特定律:反 ...

  4. shader基础学习摘要(三)高光反射

    高光反射 理论推导 代码实践 Phone光照模型 逐顶点 逐像素 Blinn-Phong光照模型 内置函数 理论推导 在6.2.4节中,我们给出了基本光照模型中高光反射部分的计算公式 高光反射求的夹角 ...

  5. 视频教程-shader 基础之 2D技巧集合-Unity3D

    shader 基础之 2D技巧集合 多年游戏开发经验,曾担任主程,技术美术TA,现在是独立游戏开发者 是帧同步框架: LockstepEngine RayMarch框架: Unity-Raymarch ...

  6. Unity之Shader基础探索

    Unity之Shader基础探索 一.什么是Shader? 1.Shader的开发语言 2.着色器用途 3.着色器的编辑 4.着色器性能分析工具 5.着色器编译 6.异步着色器的编译工作原理 7.内置 ...

  7. Unity Shader 基础教程

    Unity-Shader-基础教程 在Github上看到一篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础入门,我在这里翻译一下,分享给大家,英文水 ...

  8. 【转】oracle PLSQL基础学习

    [转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...

  9. python创建对象的格式为_Python入门基础学习(面向对象)

    python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

最新文章

  1. Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
  2. vue通信方法EventBus的实现
  3. TensorRT学习笔记(三)
  4. python爬虫beautifulsoup实例-Python爬虫学习(二)使用Beautiful Soup库
  5. centos mysql 5.6.36_CentOS 6.9 升级MySQL 5.6.36到5.7.18
  6. 深度学习 点积的概念
  7. [Python图像处理] 二十一.图像金字塔之图像向下取样和向上取样
  8. mysql语句的左外链接_MySQL中的JOIN连接
  9. 获取控件坐标位置一直是0
  10. assertpythonraise_使用assertRaise测试异常消息
  11. 整合php和mysql lnmp,安装配置LNMP服务器(Nginx+PHP+MySQL)
  12. 美国人这样教育小学生_节选
  13. hdu 3925 一道复杂的简单题
  14. Winform开发全套31个UI组件开源共享
  15. Axure RP从入门到精通(一)原型设计工具简介
  16. OVM免费混合虚拟化系列教程之一:关于配置要求!
  17. meta的http-equiv属性
  18. 传统蓝牙base on pincode配对以及安全简单配对(Secure Simple Pairing)流程介绍
  19. winform设置默认打印机
  20. JZOJ 5516 Function

热门文章

  1. Android Button动画与炫酷跳转
  2. 锐捷显示服务器禁止设置多个ip,宝塔面板如何禁止某个IP(IP段)访问
  3. 打印整数二进制的奇数位和偶数位
  4. 高效能TCP通讯基础组件Beetle.Express
  5. python有声读书_来香一个,用Python做有声小说!
  6. 安全宝金融创新论坛:民企有胜出机会
  7. org.apache.ibatis.executor.ExecutorException: No constructor xx matching [java.lang.Long, java.lang]
  8. 对于html中div标签height属性的个人理解
  9. Fancybox 的学习
  10. 装袋法(bagging)和随机森林(random forests)的区别