Normal:  法线

Normao mapping: 法线贴图

Lighting mapping: 光照贴图

Bump mapping:     凹凸贴图;模拟粗糙外表面的技术。 FX-Water simple.shader中即用到了。模拟波浪效果。

Rim lighting: 边缘光照; 在对象的边缘部分添加�亮度。

Base Texture, 基础纹理。

Detail Texture,细节纹理。与base texture使用同样的uv,可是在material中的Tiling值不同。

Cubemap:立方图

Cubemap reflection,立方图反射。

  1. Lambert 漫反射的lightmodel

cg函数:数学、几何、纹理映射、偏导、调试几大类。

from   wenku.baidu.com/link?url=5lj1AuzFz6YEZDt72eHEIooI42GhwA_hL0_YO6N827tmzqYV85kNqL7WXmvZZ5JJv7GZiYXaIZKAKSY2Rnaf8IdpL2HiwzsiCydgdOcUfWu

tex2D:  Tex2D(sampler2D tex, float2 s),二维纹理查询。 返回四元向量值。  纹理映射函数都返回四元向量值。

mul: 矩阵乘法

UnpackNormal: U3D的标准法线解压函数; 在UnityCG.cginc中。

  1. unity3d 定制的表面着色器(Surface Shader)的标准输出结构是这种:
  2.  
  3. struct SurfaceOutput
  4.  
  5. {
  6.  
  7. half3 Albedo; //反射率
  8.  
  9. half3 Normal; //法线
  10.  
  11. half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像能够自己发光
  12.  
  13. half Specular; //镜面
  14.  
  15. half Gloss; //光泽
  16.  
  17. half Alpha; //透明
  18.  
  19. };

#pragma surfacesurfaceFunction lightModel [optionalparams]

surfaceFunction -表示Cg函数中有表面着色器(surface shader)代码。这个函数的格式应该是这样:void surf (InputIN,inout SurfaceOutput o),Input是你自定义的结构。Input结构中应该包括全部纹理坐标(texturecoordinates)和和表面函数(surfaceFunction)所须要的额外的必需变量。

lightModel-在光照模式中使用。内置的是Lambert (diffuse)和 BlinnPhong(specular)。

  1. //vertex shader的输入

struct appdata_base { float4 vertex : POSITION; //顶点位置 float3 normal : NORMAL; //法线方向 float4 texcoord : TEXCOORD0;//纹理坐标。。?};

  1.  
  1. // scroll bump waves
  2. float4 temp;//四元向量xyzw
  3. v.vertex.xzxz表示去除vertexx z x z四个分量组成一个新的向量; 计算后给temp赋值。
  4.  temp.xyzw = v.vertex.xzxz * _WaveScale / unity_Scale.w + _WaveOffset;
  5. o.bumpuv[0] = temp.xy * float2(.4, .45);
  6. o.bumpuv[1] = temp.wz;

from

http://hi.baidu.com/stupidboys1027/item/e6ac3cbb4faccbd684dd799a

语意输入,语意输出, uniform

依据语意将參数与顶点的信息绑定。

  1. 非常明显地看到,入口变量中有三种不同类型的參数:语义型输入參数,语义型输出參数,uniform输入參数。
  2. 首先我们来理解“语义”,这个词的真正含义,事实上,更准确地说我们应该把它叫“绑定语义”(Binding Semantics),从Binding这个词我们就能想像得到,POSITION这个语义,它就是用来把pInitial 这个參数与外部环境(OpenGL)中的顶点位置向量绑在一起。输出语义也是这种原理。
  3.  
  4. 让我们来回答開始时提出的问题:从哪里来,到哪里处。
  5.  
  6. 1、从哪里来。
  7. 如今让我们假设,OpenGL在对顶点进行渲染之前,在程序中都自己主动生成了这样一个数据结构struct vertex; 这个数据结构包括了vertex.position, vertex.normal, vertex.color, vertex.texcoord.等等全部与顶点相关的状态信息。而这些信息都是公开的,可以被外部函数所引用。所以,CG中的语义型输入參数的值就是从这些信息中自己主动获取。如样例中的“float4 pInitial : POSITION”,通过POSITION这个绑定语义,把pInitial这个变量与vertex.position这个信息绑定在一起,于是pInitial就被赋值了。这是不是和C++中的引用一样的原理呢?
  8. 注意:输入參数是仅仅读的。
  9. 2、到哪里去?
  10. 假设知道了从哪里来,那么到哪里去也非常好理解,(out float3 color : COLOR),有个OUT在前面作修饰的參数就是语义型输出參数。这里通过COLOR这个绑定语义,把color向量与vertex.color这个值绑定在一起。在CG的代码中,经过一系列的运算和处理之后,终于得到顶点的新的颜色,把这个颜色值又一次返回给OpenGL的顶点属性中,OpenGL再通过读取该属性对顶点进行渲染。
  11.  
  12. 总的来说,语义型參数的输入与输出都是由CG自己主动完毕,程序要做的仅仅是把它与相应的语义绑定。
  13.  
  14. 说了那么多,另一个uniform输入參数,我们还没有说。假设说语义型參数是CG自己主动处理的,那么uniform型參数就是要程序猿在程序中为它赋值的。

http://blog.sina.com.cn/s/blog_63507a56010115gr.html

from cg users manual

float2 * float2; 相应分量相乘后得到的向量。 不是叉乘。

dot, 点乘, 得到的是标量。 相应分量相乘后的和值。

标量与向量相乘, 是将向量的每一个分量乘以标量后得到的新向量。 (向量放缩了。)

mul, 矩阵乘法; 矩阵乘以向量、 或者矩阵相乘。

Swizzle operator:

-------float3(a,b,c).zyx yields float3(c, b, a)

-------float4(a,bc,d).xxyy yields float4(a,a,b,b)

Texture Lookups 须要两个參数: Texture sampler, texture coordinate

--------texture sampler:   sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampleRECT.

--------tex2D/RECT/CUBE, nonprojective

--------text2D/RECT/CUBEproj, projective texture lookup

float, 32bit浮点数, s23e8 + 1bit

halft, 16bit,                s10e5

int, 32 bit integer

fixed, 12bit

bool,

sampler*, texture object的HANDLE。

string

向量、矩阵。

mul(MVP, pos)---->将vertex的postion转化为屏幕上的坐标



tex2D(texture, texcoordinate)--------->Output the color taken from our texture



vertex的输出 是 fragment的输入





屏幕绘制过程:

1) 屏幕绘制到temporary texture中; 而不是通常的screen buffer

2) temporary texture 会经过filter的处理。

3) 处理结果放到screen buffer中准备绘制到屏幕上显示给用户

shader 4 杂 一些和函数名词、数据结构的更多相关文章

  1. 零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构

    http://www.cnblogs.com/tanlon/p/3879081.html 在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVF ...

  2. [原]零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构

    在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVFormatContext  AVFormatContext是一个贯穿始终的数据结构,很多函 ...

  3. windows窗口过程函数名词解析

    windows窗口过程函数名词解析 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 1. LR ...

  4. 【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)

    学习资料:http://www.sikiedu.com/course/37/task/433/show 本节学习目标: 学习Shader中结构体struct的使用. 学习在片元函数(vertex)和顶 ...

  5. 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)

    学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ...

  6. socket调用流程的函数及数据结构

    如有错误,欢迎指正. 如果需要,可以提供visio原文件. 参考: 1. <追踪Linux TCPIP代码运行--基于2.6内核> 2. Linux Kernel 2.6.26

  7. 【翻译&转载】shader的导数函数介绍

    原文链接:http://www.aclockworkberry.com/shader-derivative-functions/ 他人的翻译:http://blog.sina.com.cn/s/blo ...

  8. Unity3D -- shader常用函数和变量

    最近在学习Unity Shader,写Shader的时候总是忘记Unity为我们提供的函数.变量怎么写的,这里整理一下,方便自己查阅,也提供给网友,学习Shader不易. 1.函数 float3 Wo ...

  9. STL函数库的应用第三弹——数据结构(栈)

    Part 1:栈是什么 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表. 这一端被称为栈顶,相对地,把另一端称为栈底. 向一个栈插入新元素又称作进栈.入栈或 ...

随机推荐

  1. Shell学习笔记:#*、%*字符串掐头去尾方法

    一.语法 在shell中可以通过#.%对字符串进行掐头去尾操作,使用方法如下: # 表示掐头 % 表示去尾 单个#或%表示最小匹配 双个$或%表示最大匹配  二.例子1 假设我们定义一个变量为: fi ...

  2. https页面打不开

    https://blog.csdn.net/leedaning/article/details/71552625

  3. spring boot配置文件中 spring.mvc.static-path-pattern 配置项

    spring boot项目中的静态资源文件存放在static文件下面,当通过浏览器访问这些静态文件时,发现必须要添加static作为前缀才能访问,折腾了一番后发现,这个前缀跟 spring.mvc.s ...

  4. codeforces 354 D. Transferring Pyramid

    D. Transferring Pyramid time limit per test 3 seconds memory limit per test 256 megabytes input stan ...

  5. Dubbo的直接提供者

    1.场景 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从 ...

  6. JSTL使用

    1.标签函数库 核心标签库                 c I18N格式标签库   fmt SQL标签库  sql XML标签库  xml 函数标签库 fn 2.JSTL支持EL 二:表达式标签 ...

  7. hdoj1233 还是畅通工程(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决. 代码 Prime算法: # ...

  8. thinkphp图像的裁剪、缩放、加水印

    ThinkPHP 图片处理函数,需要文字水印字体,可在windows下 控制面板 > 大图标(右上角) > 字体 找到需要的字体 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  9. SQL注入使用Django中继数据包bypassWAF

    原理 本人基于文章bypassword的文章在HTTP协议层面绕过WAF所编写一款工具. 环境 Python3.7.0 Django 2.1 Requests 使用范围 POST注入 可以分块传输的漏 ...

  10. In 和Exists

    1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....) 2.exist会针对子查询的表使用索引. not exist会对主子查询都 ...