Unity Shader 详细自学(一)
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 详细自学(一)相关推荐
- unity shader入门精要_Unity Shader 入门(一):渲染流水线
一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门紧要学习 candycat1992/Unity_Shaders_Bookgithub.com 1.2 还有一些图形学的历史 ...
- 【Unity Shader】(六) ------ 复杂的光照(上)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- 2d shader unity 阴影_【Unity Shader】平面阴影(Planar Shadow)
来介绍一种适用于移动平台的高性能实时阴影解决方案--平面阴影(Planar Shadow). 由于Unity内置的实时阴影实现方式是屏幕空间阴影贴图(Screen Space Shadow Map)非 ...
- Unity Shader入门精要第七章 基础纹理之遮罩纹理
Unity系列文章目录 文章目录 Unity系列文章目录 前言 一.实践 参考 前言 遮罩纹理(mask texture)是本章要介绍的最后一种纹理,它非常有用,在很多商业游戏中 都可以见到它的身影. ...
- Unity Shader知识点(二)写一个基础漫反射Shader
前言 我们刚学习Shader时,往往会被计算机图形学相关复杂的数学.物理知识所困扰,并在学习过程中丧失兴趣.个人以为,在代码以外,学习Shader应当有本科线性代数课程基础的概念框架,在这一基础上,完 ...
- Unity Shader - URP ShadowCast ShadowRecieve - 投影 和 接受阴影
文章目录 Shadow Caster Using URP Shadow Caster Pass Using Custom Shadow Caster Pass 先来看看 [没有] apply shad ...
- 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊
发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章. 参考:[Unity Shader编程]之十五 屏幕高斯模糊 ...
- Unity Shader入门
什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...
- Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线
文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...
- 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...
最新文章
- K8s, Kafka事件溯源架构模式和用例示例
- GGGit与Github
- 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
- 数据结构与算法专题——第九题 外排序
- SQLyog客户端常用快捷键
- c#用友U8API开发之环境搭建(1)
- 微信公众号 Hash模式授权
- MAUI 入门教程系列(5.XAML及页面介绍)
- 你真的理解了const和volatile关键字么?(我看不一定)
- 烷烃同分异构体数目的计算
- 第四周小组作业:WordCount优化
- 花了一晚上时间,终于把Python的基本用法归纳好了
- Uva 11201麻球繁衍(设概率方程的技巧)
- ISAM error: no free disk space故障分析处理
- 七夕到了,程序员怎么过七夕
- PHP版单文件index.php直接生成QQ微信支付宝三合一收款二维码完整源码
- 二叉树公共祖先问题-代码随想录-刷题笔记
- 程序人生:黑帽seo新手入门基础教程 1
- 计算机怎么恢复上一步,电脑怎么撤销上一步操作
- 面试难,应聘难,好工作,今安在?——《编程之美——微软技术面试心得》为你探路!即将上市,敬请关注!...
热门文章
- 虚拟机安装Mac OS系统
- 06-Sentinel限流熔断应用实践
- 计算机网络实验四协议分析心得,计算机网络原理实验_使用网络协议分析仪Wireshark...
- 解决Ubuntu18.04和Win10双系统系统时间不对的问题
- 常用颜色中英文名称及RGB数值表
- Linux 内核 颜色,Linux操作系统内核版的表示方法是( )
- 什么样的会员管理才叫有效果的会员运营方案?
- iOS 咻一咻,雷达,搜索动画,radarView
- 将Table数据记录生成表格图片
- 台式计算机 如何组装,如何组装一台台式电脑?