1、什么是OpenGL、DirectX

shader可以认为是一种渲染命令,由openGL或者dx进行解析,来控制渲染丰富多彩的图形

OpenGL 使用GLSL编写shader
DirectX 使用HSSL编写shader
英伟达CG 编写shader(跨平台)

2、unity shader的分类

使用的是ShaderLab编写unity中的shader
1、表面着色器
2、顶点/片元着色器
3、固定管线着色器

3、shader基本结构

shader “Siki/01 myshader”{ // 这里写的是shader的名字,及路径Properties{ //暴漏在外面进行调整的属性// 属性_Color("_Color",Color) = (1,1,1,1)  // 颜色_Vector("Vector",Vector)= (1,2,3,4) // 四维向量_Int("Int",Int) = 2145              //整数_Float("Float",Float) = 4.5         //小数_Range("Range",Range(1,11)) = 6     //区间(例:1到11默认值是6)_2D("Texture",2D) = "red"{}         // 图片贴图(默认红色)_Cube("Cube",Cube) = "white"{}      // 立方体贴图(默认白色)_3D("Texure",3D) = "black"{}        //3D贴图(默认黑色)}SubShader{ // 子shader 可以写多个,从第一开始,如果不满足执行下面的shaderPass{ //至少有一个Pass// 在这里编写shader代码 HLSLPROGRAMCGPROGRAM// 使用CG语言编写shader代码// 使用属性的时候需要先声明float4 _Color;fixed4 _Col;  // 一般颜色都使用fixed来存储float4 _Vector;float _Int;float _Float;float _Range;sampler2D _2D;samplerCube _Cube;sampler3D _3D;ENDCG  }}Fallback “VertexxLit” // 备选方案
}

4、shader的顶点函数与片元函数

unityCG.cginc中一些常用的函数
// 摄影机方向(视角方向)
float3 WorldSpaceViewDir(float4 v)    //根据模型空间中的顶点坐标 得到(世界空间)从这个点到摄像机的观察方向
float3 UnityWorldSpaceViewDir(float4 v) // 世界空间中的顶点坐标 =》 世界空间从这个点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v)   // 模型空间中的顶点坐标 =》 模型空间从这个点到设想相机的观察方向// 光源方向
float3 WorldSpaceLightDir(float4 v)  // 模型空间中的顶点坐标 =》 世界空间中从这个点到光源方向
float3 UnityWorldSpaceLightDir(float v) // 世界空间中的顶点坐标 =》 世界空间中从这个点到光源方向
float ObjSpaceLightDir(float v)  // 模型空间中的顶点坐标 =》模型空间中从这个点到光源方向// 方向转换
float3 UnityObjectToWorldNormal(float3 norm) // 把法线方向 模型空间 =》 世界空间
float3 UnityObjectToWorldDir(float3 dir)   //把方向 模型空间 =》 世界空间
float3 UnityWorldToObjectDir(float3 dir) // 把方向 世界空间 =》 模型空间
shader “Siki/01 myshader”{ SubShader{ Pass{ CGPROGRAM//顶点函数 声明一个名为vert的顶点函数//基本作用是 完成顶点坐标从模型空间到剪裁空间的转换(从游戏环境转换到视野相机屏幕上)#progrma vertex vert// 片元函数 这里只是声明了,片元函数的函数名// 基本作用 返回模型对应的屏幕上的每一个像素的颜色值#progrma fragment fragfloat4 vert(float4 v : POSITION) :SV_POSITION{   // 通过语义告诉系统,我这个参数是干嘛的,比如POSITION是告诉系统我需要顶点坐标//SV_POSITION这个语义来解释说明返回值,意思是返回值是剪裁空间下的顶点坐标float4 pos = mul(UNITY_MATRIX_MVP,v); // 将顶点坐标乘以一个矩阵并返回return pos;}xxx frag(yyy){   // xxx为返回值 yyy为参数}ENDCG  }}Fallback “VertexxLit” // 备选方案
}

unity3D shader概念笔记相关推荐

  1. [Unity3D]Shader学习笔记之点和矢量

    简介 点(point)是n维空间(游戏中主要使用二维和三维空间)中的一个位置,它没有大小.宽度这类概念. 矢量(vector,也被称为向量)是指n维空间中一种包含了模(magnitude)和方向(di ...

  2. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  3. 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...

  4. Unity3D Shader入门指南(二)

    关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...

  5. 猫都能学会的Unity3D Shader入门指南(二)

    关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...

  6. Unity3D Shader 入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

  7. 【Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42215079 作者:毛星云(浅墨) ...

  8. Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/42215079 作者:毛星云(浅墨) ...

  9. 【浅墨Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)

    本文主要讲解了Unity中SurfaceShader的具体写法,以及几个常用的CG函数的用法. 在这里先说明一下,表面着色器将分为两次讲解,本文介绍表面着色器的基本概念和一些写法,用内置的兰伯特光照模 ...

最新文章

  1. portal商品展示功能逻辑
  2. CC2541对AT24CXX系列存储器的支持
  3. 心形尺寸比例图解_0元图解建筑史-05 | 中国木构建筑的特征与详部演变(2)——斗栱、厅堂殿堂...
  4. 异常空格,ASCII (194,160)问题
  5. User Status code in SalesPipeline
  6. 【转载】C#中可使用string.Empty代表空字符
  7. MySQL笔记(一)创建数据库、创建表、修改表、删除表,以及建立约束
  8. Ansible 入门:安装 简例 playbook应用
  9. 【Spark工作原理】Spark任务调度理解
  10. C++之vs2017导出动态库失败
  11. Material Design学习之 Dialog(顺便把前两天AppBarLayout没讲的部分提一提)
  12. 小波分析工具包 matlab,matlab小波工具箱下载|
  13. 强化学习(一):Q-learning,附源码解读
  14. TP50、TP90、TP99的理解和使用
  15. java 静态 非静态_Java中的静态类和非静态类
  16. 最新小笑授权系统源码V6.5+开心免授权版
  17. nginx 配置端口转发
  18. 如何解除计算机远程控制,如何远程控制另一台电脑?
  19. 关于kernels启动报错的问题
  20. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤

热门文章

  1. 五方面提高销售流程管理的CRM系统
  2. 线性代数1.2行列式的性质
  3. 【实战】Vue Element+Node.js开发企业通用管理后台系统——Vue进阶(下)
  4. 电池容量 单位 意义
  5. 基于多源数据的混合智能音乐合成与生成技术与应用
  6. 财政指标是什么意思_国民经济主要指标是意思主要是什么?
  7. Json hijacking/Json劫持漏洞
  8. 2021-i春秋-春季赛逆向WP
  9. 计算机及其学科知识体系的理解,如何成为一名优秀的计算机人才
  10. servlet中cookie详解