除了使用Cg/HSL 着色器程序以外, OpenGL 着色器语言(GLSL)着色器可以直接书写shader。

然而,使用原生的GLSL只推荐作为测试使用,或者你清晰的知道你的目标平台是 Mac OS  X,OpenGL ES移动设备,或者是Linux。在所有常见情况下,Unity会将 Cg/HLSL语言编译为优化过的GLSL语言。

GLSL 片段

GLSL程序片段写在GLSLPROGRAM和ENDGLSL关键字之间。

在GLSL中,所有着色器功能入口被叫做main()。当unity加载GLSL着色器,它会为顶点程序加载一次 标记了VERTEX 预处理指令的资源,对片段程序再加载一次标记了FRAGMENT预处理指令的资源。所以在GLSL片段中分离 顶点和片段程序的方式是用 #ifdef VERTEX……#endif 和#ifdef FRAGMENT …… #endif来分别包含vertex程序和fragment程序。

标准包含文件已经向Cg/HLSL着色器提供了这些指令,它们知识有一个 .glslinc 扩展

UnityCG.glslinc

顶点着色器的输入从预定义的GLSL变量中获取(gl_Vertex,gl_MultiTexCoord0,……)或者使用用户定义的特性。通常只有切线向量需要用户自定义:

attribute vec4 Tangent;

顶点程序传到片段程序的数据是通过 varying 变量传输的,比如:

varying vec3 lightDir; // vertex shader computes this, fragment shader uses this
External OES textures

外部的OES 贴图

Unity在shader编译时做了一些预处理;比如,基于图形API(GLES3,GLCore)时,texture2D/texture2DProj 函数可能被texture/textureProj取代。有一些扩展不支持新的转换,特别注意这里面的: GL_OES_EGL_image_external

如果你想要在GLSL着色器中采样 外部的贴图,使用 textureExternal/textureProjExternal 来取代texture2D/texture2DProj,例子:

gl_FragData[0] = textureExternal(_MainTex, uv);

  

GLSL 着色器程序的更多相关文章

  1. GLSL着色器,来玩

    对实现动画的前端同学们来说,canvas可以说是最自由,最能全面控制的一个动画实现载体.不但能通过javascript控制点.线.面的绘制,使用图片资源填充:还能改变输入参数作出交互动画,完全控制动画 ...

  2. openGL之着色器程序的使用

    #define GLEW_STATIC #include <GL\glew.h> #include <GLFW\glfw3.h> #include<iostream> ...

  3. [GLSL]着色器周记02——火焰特效 【转】

    http://www.cnblogs.com/tkgamegroup/p/4214081.html 这周学了好多.包括伪随机数.柏林噪声.先说伪随机数.伪随机数我们用的是周期函数而不是那种由前一项乘一 ...

  4. WebGL 着色器语言(GLSL ES)

    1.类型转换内置函数 转换/函数/描述 转换为整形数/int(float)/将浮点数的小数部分删去,转换为整形数(比如,将3.14转换为3) 转换为整形数/intl(bool)/true被转换为1,f ...

  5. OpenGLES2.0着色器语言glsl

    OpenGLES2.0中是强制使用可编程的渲染管线的,使用的是glsl着色器语言,因为着色器语言是使用的GPU,即图形处理单元,而不是CPU,这样可以使CPU从繁重的几何计算和像素的处理中解脱出来了. ...

  6. OpenGl中使用着色器的基本步骤及GLSL渲染简单示例

    OpenGL着色语言(OpenGL Shading Language,GLSL)是用来在OpenGL中着色编程的语言,是一种具有C/C++风格的高级过程语言,同样也以main函数开始,只不过执行过程是 ...

  7. OpenGL入门1.3:着色器 GLSL

    前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一 ...

  8. OpenGL管线(用经典管线代说着色器内部)

    图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性.OpenGL作为图形硬件标准,是最通用的图形管线版本.本文用自顶向下的思路来简单总结OpenGL图形管 ...

  9. 【OPENGL】第三篇 着色器基础(二)

    在这一小节,主要学习GLSL的基本数据类型以及控制结构.GLSL具备了C++和Java的很多特性,我们会先了解所有着色阶段共有的特性,再了解各个着色器的专属特性. 1.着色器的基本结构 一个着色器程序 ...

随机推荐

  1. Eclipse Java EE IDE for Web Developers 4.5.1 安装hibername tools 插件

    方式一:在线安装(太慢) 方式二:离线安装,下载hibernate tools 插件到本地,然后在eclipse菜单栏点击 help: ①添加插件,选择下载后的插件,内容框中可选择hibernate ...

  2. Chrome划词翻译-Saladict

    Saladict 沙拉查词是一款专业划词翻译扩展,为交叉阅读而生.大量权威词典涵盖中英日韩法德西语,支持复杂的 划词操作.网页翻译.生词本.PDF,以及 Vimium 全键盘操作 . 迄今为止最好用的 ...

  3. mqtt第一次接触

    一.接触的原因 公司最近要求接手关于系统集成道闸的部分,其中系统和第三方系统是通过mqtt进行交互的.所以提前了解一下mqtt的基础概念. 二.mqtt的基本概念 1. mqtt的定义 Message ...

  4. easyPOI使用

    更多的easyPOI资源的网在easypoi的官网. 1 在pom.xml中添加依赖 <dependency> <groupId>cn.afterturn</groupI ...

  5. git使用-git仓库

    1.初始化版本库 git init 2.添加文件到版本库 git add git commit 3.查看仓库状态 git status 4.撤销初始化命令 rm -rf .git

  6. ROS 八叉树地图构建 - 给 octomap_server 增加半径滤波器!

    为了在每帧点云中滤除噪声点,选择了半径滤波器,也用高斯滤波器测试过,但是没有半径效果好,这里记录下在 octomap_server 中增加半径滤波器的步骤,并在 launch 中配置滤波器参数. 一. ...

  7. 在java中,怎样创建编写javascript的环境?

    刚开始还没有学到这一块的时候,预习的时候也是在网上搜索这一类的信息时候, 可是都是八竿子碰不到边的!在此也是呕心沥血的为读者献上最好的: 1.首先:点击空白处>右键>project: 2. ...

  8. vue-loader处理vue文件

    loader:"vue-loader" ,引导vue文件被vue-loader/lib/index.js处理 第一步:解析vue文件 const utils = require(' ...

  9. Linux top详解

    命令 top 参数说明: d:改变显示的更新速度 q:  没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...

  10. Excel清除隐藏的引号或空格

    问题场景 导出到Excel的数据内容有时候被"暗中"添加了[引号]或[空格]等字符. 尤其还"隐藏"了,以至于相同的内容,数据格式都没有问题,不能进行函数操作, ...