Unity Shader--简介
来源:互联网 发布:网盘搜索 知乎 编辑:程序博客网 时间:2024/05/02 02:59
unity的shader大致分为如下几类:
最容易上手的Surface Shader,他只能用CG/HLSL语言来编写.
较为复杂但可以深度定制的Vertex Shader和Fragment Shader,可以选择Cg/HLSL,GLSL等等。
1.Surface Shader:他可以大概的看成Unity预置的Shader模板,通常只理物体的表面表现(例如高光,反射等等)。正如Unity官方所说:
直接写一个与照明交互的Shader是复杂的。因为你要考虑不同的光照类型,不同的阴影选项,不同的渲染路径(Forward和Deffered),直接写Shader来处理这些东西是十分复杂的过程。
而Surface Shader是一个代码生成方案,用它编Shader比使用更底层的Vertex Shader/Fragment Shader更容易。但需要注意的是,Surface Shader也不是什么自定义的语言、魔法或者忍术;它只是自动帮你完成那些需要手写的、重复的通用代码。你仍然是用CG/HLSL语言来编写Surface Shader。如果shader不涉及光照,不要用这个surface shader。
2.Vertex Shader和Fragment Shader。
如果简单的模板不能满足我们对于性能、效果等的要求,我们可以采用Vertex Shader和Fragment Shader,功能十分强大。它可以选择不同的语言,但有一些小地方需要注意,比如GLSL就需要在PC设备上强制Unity引擎使用Opengl渲染,Metal只能支持iOS平台。
经过优化的Vertex Shader和Fragment Shader性能通常优于Sufrace Shader,而且定制的代码可以实现Surface Shader模板中不能达到的效果。例如下面这个带有假折射的玻璃效果,Sufrace Shader不容易完成,而Vertex Shader和Fragment Shader则比较轻松搞定。如果不需要涉及到光照,可以考虑使用这个。
3.固定管线编程 fixed function shaders: 功能有限,是传统的shader ,可在所有平台运行,效率高。完全是用ShaderLab来写的。
shader模板:
Shader “MyShader” {
Properties { _MyTexture (“My Texture”, 2D) = “white” { }
// other properties like colors or vectors go here as well
}
SubShader { // here goes the ‘meat’ of your // - surface shader or // - vertex and program shader or // - fixed function shader }
SubShader { // here goes a simpler version of the SubShader // above than can run on older graphics cards }
}
至少要有一个subshader,每次gpu渲染只会执行一个subshader;引擎会按顺序执行subshader,如果第一个shader能够被良好的支持,就会按顺序执行下一个subshader,所以越往下应该是越简单的shader。如果所有的subshader都不能被良好执行,就会执行[FallBack]
其中,surface shaders or vertex and fragment shaders可以用ShaderLab syntax 或者cg,hlsl,glsl语法编写,fixed function shaders只能用ShaderLab syntax编写
ShaderLab不区分大小写
渲染流程图:
- Unity Shader--简介
- unity shader简介与入门
- Unity Shader(ShaderLab)着色器简介
- unity 边缘检测shader简介(二)
- unity 边缘检测shader简介(一)
- unity shader
- Unity Shader
- Unity-Shader
- unity shader
- Unity Shader
- Unity Shader
- Unity Shader
- unity shader
- 【Unity Shaders】学习笔记之Shader简介(一)
- 【Unity Shaders】学习笔记之Shader简介(一)
- Unity描边[Unity Shader]
- <shader> 简介
- Shader简介
- NKOI 1472 警卫安排
- 软件测试_JUnit+Ant构建自动的单元测试(1)
- 微信内置浏览器切换到公众号编辑状态的实现方法。
- stm32 Bootloader设计(YModem协议) (转载)
- Spring之aop入门实例
- Unity Shader--简介
- UIButton 控制UIImage自由改变大小
- ShareSDK实现第三方登录和分享
- android6.0 动态申请权限
- java 通用导出一个excel
- Windows编译Caffe指南
- Linux系统使用总结(1)
- My97DatePicker 只显示月份
- python logging模块