什么是Shader

Shader,中文名为着色器。

Shader其实就是专门用来渲染图形的一种技术,通过shader,我们可以自定义显卡渲染画面的算法,使画面达到我们想要的效果。小到每一个像素点,大到整个屏幕。

Shader分为两类 :

  • 顶点Shader
    3D图形都是由一个个三角面片组成的,顶点Shader就是计算每个三角面片上的顶点,并为最终像素渲染做准备。
  • 像素(片段)Shader
    顾名思义,就是以像素为单位,计算光照、颜色的一系列算法。 几个不同的图形API都有各自的Shader语言,在DirectX中,顶点shader叫做 Vertex Shader ,像素Shader叫做 Pixel Shader; 在OpenGL中,顶点Shader也叫做 Vertex Shader ,但像素Shader叫做 Fragment Shader,也就是我们常说的片段Shader或者片元Shader。
    说白了,Shader其实就是一段代码,这段代码的作用是告诉GPU具体怎样去绘制模型的每一个顶点的颜色以及最终每一个像素点的颜色。
  • Shader编程语言
    既然Shader是一段代码,那必然要用一种语言来书写它,目前主流的有三种语言:
    基于OpenGL的OpenGL Shading Language,简称GLSL。
    基于DirectX的High Level Shading Language,简称HLSL。
    还有NVIDIA公司的C for Graphic,简称Cg语言。
    GLSL与HLSL分别是基于OpenGL和Direct3D的接口,两者不能混用。而Cg语言是用于图形的C语言,这其实说明了当时设计人员的一个初衷,就是让基于图形硬件的编程变得和C语言编程一样方便,自由。正如C++和 Java的语法是基于C的,Cg语言本身也是基于C语言的。如果您使用过C、C++、Java其中任意一个,那么Cg的语法也是比较容易掌握的。Cg语言极力保留了C语言的大部分语义,力图让开发人员从硬件细节中解脱出来,Cg同时拥有高级语言的好处,如代码的易重用性,可读性高等。
    Cg语言是Microsoft和NVIDIA相互协作在标准硬件光照语言的语法和语义上达成了一致,所以,HLSL和Cg其实是同一种语言。
    美术人员看到这里时也不用害怕,语法上并不难,而且在后续的章节中碰到相关的语法时我们会详细的进行说明。

什么是Unity Shader

显卡有NVIDIA、ATI、Intel等等。。。
图形API有OpenGL、DirectX、OpenglES、Vulkan、Metal等等。。。
Shader编程语言有GLSL、HLSL、Cg等等。。。
是不是有点头晕,该怎么去选择呢?在Unity中我们又应该如何做呢?
其实在Unity中反而一切变的简单起来了,我们只需关心如何去这实现我们想要的效果就好了,其余的事情全部交给Unity来自动处理。因为我们在Unity中编写的Shader最终会根据不同的平台来编绎成不同的着色器语言,那么我们在Unity中应该用什么语言来书写Shader呢?
官方的建议是用Cg/HLSL来编写,当然你也可以使用GLSL,主要是因为Cg/HLSL有更好的跨平台性,更倾向于使用Cg/HLSL来编写Shader程序。
对于Unity新的渲染管线URP(最早名称是LWRP)、HDRP默认全部才用HLSL编写,同时也支持Cg编写。
Unity Shader严格来说并不是传统上的Shader,而是Unity自身封装后的一种便于书写的Shader,又称为ShaderLab。

  • 在Unity中有3种Shader(其实就是三种不同的写法):
    Surface Shaders 表面着色器
    Vertex/Fragment Shaders 顶点/片断着色器
    Fixed Function Shaders 固定管线着色器
    其中Fixed Function Shaders已经被淘汰,完全没有学习的必要了。
    Surface Shader其实就是Unity对Vertex/Fragment Shader的又一层包装,以使Shader的制作方式更符合人类的思维模式,同时可以以极少的代码来完成不同的光照模型与不同平台下需要考虑的事情。
    Unity新的渲染管线URP也抛弃了Surface Shaders。只支持Vertex/Fragment Shader.
    对于新入门的同学只学习Vertex/Fragment Shaders就可以了。
    从性能上将,Surface shaders也性能低很多。
    另外,学会Shader也会给我们带来很多的好处:
    游戏中模型显示粉色的情况你一定碰到过吧,是Shader丢失呢,还是Shader不符合当前平台呢,又或者是Shader上有语法的错误呢?如果我们有了解并学会Shader的话,这些问题就不会再是一脸懵逼啦。
    內建Unity Shader仅仅只是“通用”用例,不足以满足我们所有的画面表现需求。
    一旦掌握Shader,可以为游戏/应用创造独一无二的视觉享受。根据实际需求,为游戏和应用实现特定功能的Shader。
    能大大的帮助我们做渲染上的性能优化,因为通过Shader可以控制渲染什么以及如何渲染。
    撰写Shader的能力对于游戏团队非常重要,掌握Shader技能的开发一直是炙手可热的职位。现在一个不争的事实就是,技术美术永远是各大厂商的稀缺资源。

1、什么是Shader相关推荐

  1. 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形

    转载于小道的博客园 XDGE_RayMarchine 1- 利用Frag Shader绘制图形​www.cnblogs.com # Render/RayMarchine/Base 1- 利用Frag绘 ...

  2. 早上突然看明白 shader和材质球的关系

    计算机的世界不外乎 指令+数据 shader即Gpu指令,材质即数据 转载于:https://www.cnblogs.com/jiahuafu/p/7348663.html

  3. unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

    最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...

  4. (转)径向模糊效果shader

    转自:http://blog.csdn.net/xoyojank/article/details/5146297 最先在这里看到:http://www.gamerendering.com/2008/1 ...

  5. 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但

    片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.

  6. unity加载ab后,场景shader不起效问题(物件表现黑色)

    需要把unity自带的shader,加入到默认列表 转载于:https://www.cnblogs.com/lancidie/p/9293827.html

  7. DX11 preprocessor Dynamic shader linkage

    (参照例子DXSDK sample:DynamicShaderLinkage11) 一.preprocessor 实现shader静态分支的经典方法,代码示例如下 shader中(如果显卡不支持DX1 ...

  8. 编写和调试Shader程序(1)

    编写和调试Shader程序 (1)DirectX EffectEdit JohnsonFeng 常用的Shader编写程序有ATI Render Monkey和NVIDIA FX Composer,另 ...

  9. 【OpenGL】向Shader中传递数据

    传递顶点属性信息 之前讲过,vertex shader会被每个顶点调用,通常一个顶点会包含很多信息,例如顶点坐标.顶点法向量.纹理坐标等等,我们称这些信息为顶点的属性.在之前的OpenGL版本里,每个 ...

  10. osg中运用Shader(osg初级篇2)

    关于shader的概念,可以参见我的另一篇博客<opengl版本发展史及各种概念的厘清>,这里列举一个例子,用来实现一个特效,屏幕的左半部显示为红色.首先我们准备好两个shader程序: ...

最新文章

  1. python使用imbalanced-learn的SMOTEENN方法同时进行上采样和下采样处理数据不平衡问题
  2. 300英雄服务器维护多久,300英雄7月19日停机更新公告
  3. Apache Tomcat 拒绝服务漏洞通告
  4. eclipse安装快速打开项目所在位置的插件
  5. 2020-11-22(树,森林和二叉树转换)
  6. 3w并发mysql架构_(DBA之路【一】)mysql 基本架构
  7. 《看聊天记录都学不会C#?太菜了吧》(3)变量:我大哥呢?$:小弟我罩着你!
  8. 从“小众”到“首选”,推动云原生产业落地华为云作用几何?
  9. Officescan防毒墙安装部署手册
  10. 【学习资源】免费资源网站,仅供学习参考
  11. 【实习周报】2019年4月 前端开发实习工作周报汇总
  12. 微信小程序商城API文档
  13. 自定义函数求两个整数的绝对差值及排序
  14. python绘图画猫咪_Turtle库画小猫咪
  15. SAP 系统图片修改以及 ABAP屏幕图片(大小调整)自适应设置
  16. 迭代最小二乘拟合椭圆
  17. [小样本医学图像]Generalized Organ Segmentation by Imitating One-shot Reasoning using Anatomical Correlation
  18. 32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位
  19. 九度OJ——1023Excel排序
  20. “互联网+”大学生创新创业大赛概述

热门文章

  1. python操作Active Directory
  2. cloudflare速度怎么样_CloudFlare自定义加速节点优化网站速度小技巧
  3. 超强!Python for S60(pys60)介绍
  4. 【MATLAB】曲柄摇杆机构摇杆3运动方程分析
  5. Word2016如何查看分隔符?
  6. “许霆”回家是场喜剧
  7. Vsync机制和Choreographer详解
  8. 凯恩斯主义(扩张性财政政策)的深远影响--美国股市百年(二)
  9. 世界文豪莎士比亚,10句经典语录,带你感受他眼中的世界
  10. [微软官方]SQLSERVER的兼容级别