Shader

这是国外一个很详细的Shader入门基础网址UnityGames
当然国内也有翻译UnityGames翻译
还有就是猫都能学会的Shader入门指南

  • 零基础自学shader,有基础的同学勿喷,楼主最喜欢-- 打破沙锅问到底,杜绝任何一个只是盲区。所以现阶段主要在于shader的理论。我们Unity里面用什么语言编写Shader呢,现在总共有3种语言可以编写Shader代码。

    • Cg(C for Graphic,NVIDIA推出的,已经不更新了)。
    • HLSL(High Level Shading Language,微软的Direct推出,用于win平台,对手:OpenGL)。
    • GLSL(OnpenGL Shading Language,OpenGL推出,对手Direct3D)
    • 然后,因为Microsoft和NVIDIA合作,所以Cg/HLSL实际上是同一种语言
    • ShaderLab语言,这个东西只是为Unity Shader服务的语言,目的就是让shader编程更加简单,但是,Unity为了最大化的跨平台支持,选择重点支持HLSL,在实际使用中很多时候HLSL和CG是一样的。需要嵌套在命令CGPROGRAM和ENDCG之间。还有就是CGINCLUDE(与CGPROGRAM这俩不一样)代码块会被插入到每一个Pass中,因此我们可以把Pass中的公共的字段,结构和方法等声明在CGINCLUDE代码块中。
  • shader中文名叫着色器,顾名思义,它的作用可以先简单理解为给屏幕上的物体画上颜色。而什么东西负责给屏幕上画颜色?当然是GPU,所以我们写shader的目的就是告诉GPU往屏幕怎么画。然后就是一些固定代码结构,比如说Properties是什么,SubShader是什么,Pass等等。当然想要学shader,楼主以为是这样一个过程:
    首先.需要搞懂Shader是干啥的。从基础的开始,shader代码关键字是什么意思,尽管你不知道它能在这个shader里面起到什么作用,比如说这一行:

    他是将当前subshader的所有pass的渲染队列设为”Geometry+1“层,为什么要这么设置呢,后面再说。有了这些理论知识,拿到shader代码,至少不会一脸蒙逼。
    其次.不仅仅需要理论知识,看代码是必须的,要知道别人写的这个shader代码是什么意思,有什么作用,这里就不能像前面的知其然不知其所以然了,不仅要知道这句话是什么意思,还要知道为什么要这样写,写了这句话能出来什么效果,所以第二阶段就是读代码。
    最后.准备工作做好了,就需要上手了,从简单的开始写,熟能生巧就可以了。文章中有理解错误的,下面就是第一阶段,请大家多多指教。
  • 在unity中新建一个shader(Stander Surface Shader),然后在vs中打开,代码结构如下:
  • 代码解释
    所有shader代码必须由Shader “shader路径” { } 包括在里面.
    上面乱糟糟的代码提取出来是这个样子
  • Properties{…} 指的是本shader定义的属性,类似于C#中的定义int,string等字段,定义自己需要的属性字段,定义属性的格式为:
    _Name (“display name”, 属性类型(type)) = “name” { options } :

    • _Name---------------属性的名字,简单说就是变量名,在之后整个Shader代码中将使用这个名字来获取该属性的内容
    • display name ----- Inspector面板显示的名称
    • type ------这个属性的类型有以下几种:
    • Color ------一种颜色,由RGBA(红绿蓝和透明度)四个量来定义;
    • 2D ----- 一张2的阶数大小(256,512之类)的贴图。这张贴图将在采样后被转为对应基于模型UV的每个像素的颜色,最终被显示出来;
    • Rect ----- 一个非2阶数大小的贴图;
    • Cube ----- 即Cube map texture(立方体纹理),简单说就是6张有联系的2D贴图的组合,主要用来做反射效果(比如天空盒和动态反射),也会被转换为对应点的采样;
    • Range(min, max) - 一个介于最小值和最大值之间的浮点数,类似滑动条(比如透明度渲染的截止值可以是从0至1的值等);
    • Float - 任意一个浮点数;
    • Vector - 一个四维数;
    • 提示: 其中每一个类型还可以设置默认值,如下:
      • Color 的默认值 - - 以0~1定义的rgba颜色,比如(1,1,1,1);
      • 2D/Rect/Cube - - 对于贴图来说,默认值可以为一个代表默认tint颜色的字符串,可以是空字符串或者"white",“black”,“gray”,“bump”,“red”,"empty string"中的一个,
      • Float,Range - - 某个指定的浮点数
      • Vector - - 一个4维数,写为 (x,y,z,w)
      • 另外还有一个{option},它只对2D/Rect/Cube贴图有关,在写输入时我们最少要在贴图之后写一对什么都不含的空白的{},当我们需要打开特定选项时可以把其写在这对花括号内。如果需要同时打开多个选项,可以使用空白分隔。可能的选择有ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal中的一个,这些都是OpenGL中TexGen的模式,
  • SubShader{…} 最基础的解释就到这里,具体怎么用后面会写到。
  • 下一篇写SubShader{…} 的相关基础 Unity Shader 详细自学(二)

Unity Shader 详细自学(一)相关推荐

  1. unity shader入门精要_Unity Shader 入门(一):渲染流水线

    一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门紧要学习 candycat1992/Unity_Shaders_Book​github.com 1.2 还有一些图形学的历史 ...

  2. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  3. 2d shader unity 阴影_【Unity Shader】平面阴影(Planar Shadow)

    来介绍一种适用于移动平台的高性能实时阴影解决方案--平面阴影(Planar Shadow). 由于Unity内置的实时阴影实现方式是屏幕空间阴影贴图(Screen Space Shadow Map)非 ...

  4. Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一.实践 参考 前言 遮罩纹理(mask texture)是本章要介绍的最后一种纹理,它非常有用,在很多商业游戏中 都可以见到它的身影. ...

  5. Unity Shader知识点(二)写一个基础漫反射Shader

    前言 我们刚学习Shader时,往往会被计算机图形学相关复杂的数学.物理知识所困扰,并在学习过程中丧失兴趣.个人以为,在代码以外,学习Shader应当有本科线性代数课程基础的概念框架,在这一基础上,完 ...

  6. Unity Shader - URP ShadowCast ShadowRecieve - 投影 和 接受阴影

    文章目录 Shadow Caster Using URP Shadow Caster Pass Using Custom Shadow Caster Pass 先来看看 [没有] apply shad ...

  7. 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊

    发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章. 参考:[Unity Shader编程]之十五 屏幕高斯模糊 ...

  8. Unity Shader入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

  9. Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线

    文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...

  10. 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)

    写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...

最新文章

  1. K8s, Kafka事件溯源架构模式和用例示例
  2. GGGit与Github
  3. 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
  4. 数据结构与算法专题——第九题 外排序
  5. SQLyog客户端常用快捷键
  6. c#用友U8API开发之环境搭建(1)
  7. 微信公众号 Hash模式授权
  8. MAUI 入门教程系列(5.XAML及页面介绍)
  9. 你真的理解了const和volatile关键字么?(我看不一定)
  10. 烷烃同分异构体数目的计算
  11. 第四周小组作业:WordCount优化
  12. 花了一晚上时间,终于把Python的基本用法归纳好了
  13. Uva 11201麻球繁衍(设概率方程的技巧)
  14. ISAM error: no free disk space故障分析处理
  15. 七夕到了,程序员怎么过七夕
  16. PHP版单文件index.php直接生成QQ微信支付宝三合一收款二维码完整源码
  17. 二叉树公共祖先问题-代码随想录-刷题笔记
  18. 程序人生:黑帽seo新手入门基础教程 1
  19. 计算机怎么恢复上一步,电脑怎么撤销上一步操作
  20. 面试难,应聘难,好工作,今安在?——《编程之美——微软技术面试心得》为你探路!即将上市,敬请关注!...

热门文章

  1. 虚拟机安装Mac OS系统
  2. 06-Sentinel限流熔断应用实践
  3. 计算机网络实验四协议分析心得,计算机网络原理实验_使用网络协议分析仪Wireshark...
  4. 解决Ubuntu18.04和Win10双系统系统时间不对的问题
  5. 常用颜色中英文名称及RGB数值表
  6. Linux 内核 颜色,Linux操作系统内核版的表示方法是( )
  7. 什么样的会员管理才叫有效果的会员运营方案?
  8. iOS 咻一咻,雷达,搜索动画,radarView
  9. 将Table数据记录生成表格图片
  10. 台式计算机 如何组装,如何组装一台台式电脑?