Shader CG语言

本文深入探讨了Unity中的Shader,包括Shader的分类、渲染管线、Shader Language如GLSL和HLSL,以及Unity特有的Surface Shader。介绍了相关书籍、网站资源和Shader Reference,如Surface Shader、Vertex Shader和Fragment Shader的差异。此外,还详细阐述了Shader的编写技巧,如Blend、LOD、纹理设置和全局雾等,为Unity开发者提供了宝贵的参考资料。
摘要由CSDN通过智能技术生成

Shader介绍

Shader是可编程图形管线的算法片段,它主要分为两类,Vertex Shader和Fragment Shader。

圣典shader总目录(在最下方)

vs自动补全代码,语法高亮显示插件

入门指导博客

相关书籍:

相关网站:

渲染管线

       渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。一个流水线式一序列可以并行和按照固定顺序进行的阶段。每个阶段都从它的前一阶段接收输入,然后把输出发给随后的阶段,就像一个在同一时间内,不同阶段不同的汽车一起制造的装配线,传统的图形硬件流水线以流水方式处理大量的顶点、几何图元和片段。

Shader Language

基于OpenGL的OpenGL Shading Language, 简称GLSL。语法体系自成一家。

OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。


OpenGL是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。


基于DirectX的High Level Shading Language,简称HLSL。移植性较差。
DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows10。


还有NVIDIA公司的C for Graphic ,简称Cg语言。可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。

Shader Reference圣典

  • SurfaceShader(表面着色器):Untiy自己发扬光大的一项使书写门槛降低和更容易的技术。把Shader的复杂性包装起来,书写过程更便捷和易用。
  • Vertex Shader and Fragment Shader(顶点着色器&片段着色器):顶点着色器---->产生纹理坐标,颜色,点大小,雾坐标,然后把它们传递给裁剪阶段。片段着色器---->进行纹理查找,决定什么时候执行纹理查找,是否进行纹理查找,及把什么作为纹理坐标。
  • FixedFunction Shader(固定功能着色器):Unity为Shader的书写自带的一层壳,Unity已经在内部为我们做了大量的工作,我们只要稍微记住一些关键字、一些规范就可以实现很多不错的效果。固定功能着色器是我们初学Unity Shader的最贱几篇文章中的主要学习对象。而后面的表面着色器、顶点着色器以及片段着色器就是在固定功能着色器的基础上嵌套了CG语言的代码而成的更加复杂的着色器。

区别

  1. 没有嵌套CG语言,也就是代码段中没有CGPROGARAM和ENDCG关键字,就是固定功能着色器
  2. 嵌套了CG语言,代码段中有surf函数的,就是表面着色器
  3. 嵌套了CG语言,代码段中有#pragma vertex name和  #pragma fragment frag 声明的,就是顶点着色器&片段着色器

Shader---->路径(直接决定shader在material里出现的路径 

Shader "Custom/LogoShader" {

}

 

Properties---->属性面板

2D:一张2的阶数大小的贴图,这张贴图将在采样后被转为对应基于模型UV的每个像素的颜色,最终显示出来。

Cube:即Cube map texture(立方体文理),简单说就是6张有联系的2D贴图的结合,主要用来做反射效果(比如天空盒和动态反射),也会被转换为对应的采样。

对于贴图来说,默认值可以是空字符或者"White"、"Black"、"Gray"、"Bump"中的一个,另外{},它只对2D、Rect、Cube贴图有关,当我们需要打开特定选项时可以把其写在这对花括号内。如果需要同时打开多个选项,可以使用空白分隔,

name ("display name", 2D) ="name" { options }

:包含在纹理属性的大括号中的选项Options是可选的,可能选项如下:

  1. TexGen纹理生产类型:即纹理的自动生成纹理坐标时的模式,可以是ObjectLinear, EyeLinear,SphereMap, CubeReflect, CubeNormal的其中之一;这些模式和OpenGL纹理生成模式相对应。注意如果使用自定义顶点程序,那么纹理生成将被忽略。如下面的例子。
  2. LightmapMode光照贴图模式:如果我们给出这个选项,纹理将能被渲染器的光线贴图属性所影响。纹理不能被使用在材质中,而是取自渲染器的设定。
_MainTex ("Albedo (RGB)", 2D) = "white" {TexGen ObjectLinear}
关键字 类型 对应Cg类型
Float 浮点数 float _MyFloat ("My float", Float) = 0.5
Range 浮点数 (在指定范围内) float _MyRange ("My Range", Range(0.01, 0.5)) = 0.1
Color 浮点四元组 float4 _MyColor ("Some Color", Color) = (1,1,1,1)
Vector 浮点四元组 float4 _MyVector("Some Vector",Vector) = (1,1,1,1)
2D 2的阶数大小的贴图 sampler2D
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值