U3D Shader基础
一个SubShader(渲染方案)是由一个个Pass块来执行的。每个Pass都会消耗对应的一个DrawCall。
以下内容不需要入门的时候立刻阅读和理解,建议逐渐深入学习后,不时回来看看即可。
什么是GPU?
exposures)”的方法。使用累积缓存可以产生许多图像效果来提高图像的真实性,其中包括:反走样、运动模糊、软阴影、深度域(景深)和卷积。要产生这些效果,必须将图像渲染多次,对场景位置(或所选的物体)进行微小的、渐增的改变,然后累积结果。
成为Shader Model 4.0的组成部分。OpenGL只可通过它的一个插件来使用几何着色器,但极有可能在3.1版本中该功能将会归并。几何着色器的输出连接光栅化器的输入。但是并不实用。
针对DX11. 该技术需要消耗大量硬件资源,因此开发人员不会在场景中的每个地方都使用它,一般只考虑玩家视角近景和轮廓边缘。利用GPU硬件加速,将现有3D模型的三角形拆分得更细小、更细致,也就是大大增加三角形数量,使得渲染对象的表面和边缘更平滑、更精细。
坐标系
计算机3D中,3D坐标系采用的主要是,笛卡儿坐标系(Cartesian坐标系),也称直角坐标系。
当x轴朝右,y朝上,z朝屏幕里的时候,为左手坐标系。
当x轴朝右,y朝上,z朝屏幕外即面朝你的时候,为右手坐标系。
所以,Unity使用的是左手坐标系。
D3D左手 即 裁剪空间里(x,y,z,w) z= z/w 即[0,1]
OpenGL使用右手 ,即 裁剪空间里(x,y,z,w) z= (z/w + 1)/2 即[-1,1]
#pragma target 3.0 :定义Shader模型为Shader Model 3.0,
2.0, Direct3D 9 (默认缺省值)。支持32张贴图 + 64个计算
3.0,
Direct3D 9。支持512张贴图 + 512个计算
4.0,
只支持DirectX 11。
5.0, 只支持DirectX
11。
【Unity Shader内置矩阵】
uniform
float4x4 UNITY_MATRIX_MVP; // model view projection 矩阵
uniform float4x4 UNITY_MATRIX_MV; // model view 矩阵
uniform float4x4 UNITY_MATRIX_P; // projection 矩阵
uniform float4x4 UNITY_MATRIX_T_MV;
// model view 矩阵的转置(transpose)矩阵
uniform float4x4 UNITY_MATRIX_IT_MV;
// model view 矩阵的逆矩阵的转置矩阵
uniform float4x4 UNITY_MATRIX_TEXTURE0; // 纹理矩阵
uniform float4x4 UNITY_MATRIX_TEXTURE1; // 纹理矩阵
uniform float4x4 UNITY_MATRIX_TEXTURE2; // 纹理矩阵
uniform float4x4 UNITY_MATRIX_TEXTURE3; // 纹理矩阵
uniform float4 UNITY_LIGHTMODEL_AMBIENT; // 环境颜色
注意:View矩阵并不是相机的matrix(xy一致,z是反的,也就是相机下的子物体(1,1,1)在UNITY_MATRIX_MV实际是(1,1,-1))
【Unity Vertex Data】
Unity顶点函数的输入数据 appdata 在UnityCG.cginc中定义,有以下三种
【1 appdata_base】
位置vertex,法线normal,贴图uv texcoord
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
【2 appdata_tan】
位置vertex,法线normal,切线tangent 贴图uv texcoord
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
【3 appdata_full】
位置vertex,法线normal,切线tangent 贴图uv texcoord 顶点颜色color
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
#if defined(SHADER_API_XBOX360)
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
fixed4 color : COLOR;
};
【自定义struct】
:后面加semantics即可
POSITION
NORMAL
TEXCOORD0-6
TANGENT
COLOR
U3D Shader基础的更多相关文章
- Unity Shader 基础(4) 由深度纹理重建坐标
在PostImage中经常会用到物体本身的位置信息,但是Image Effect自身是不包含这些信息的,因为屏幕后处其实是使用特定的材质渲染一个刚好填满屏幕的四边形面片(四个角对应近剪裁面的四个角). ...
- 【Unity Shader】Shader基础
目录 Chapter3 Unity Shader 基础 Chapter3 Unity Shader 基础 概述 在Unity需要材质(Material)与Unity Shader配合使用来达到满意的效 ...
- Unity Shader基础
Unity Shader基础 先上代码,代码一般是这样的. void Initialization(){ //先从硬盘加载代码再加载到GPU中 string vertexShaderCode = Lo ...
- u3d shader学习笔记1
促使我学习SHADER的重要原因是希望深入理解3D渲染的机制,在此基础上可以灵活达到某种效果与性能的平衡,开发出具有良好体验的VR应用. 因为VR应用体验的好坏,直接由游戏的帧率决定,而游戏的帧率则受 ...
- ShaderLab中vertex fragment类Shader基础格式笔记
//U3D用的shader语言叫ShaderLab,基础语法官方文档地址 //https://docs.unity3d.com/Manual/SL-Shader.html //开头指明名字,可以在别的 ...
- [原]Unity3D深入浅出 - Shader基础开发
概述 简单来讲,shader是为渲染管线中的特定处理截断提供算法的一段代码.Shader是伴随着可编程渲染管线出现的,开发者可使用Shader对渲染过程加以控制,拥有更大的创作控件,因此Shader的 ...
- Shader基础(固定管线着色器)
在Shader的编码中,要养成不加空格的习惯,否则会有时候出现一些错误 固定管线着色器: 优点:实现简单 缺点:处理的效果比较差 //设置Shader的路径 Shader "MyFixedS ...
- Unity3D Shader基础教程
原文地址:http://bbs.9ria.com/thread-212557-1-1.html 此教程将指引你如何建立自己的Shaders,让你的游戏场景看起来更好.Unity配备了强大的阴影和材料的 ...
- Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ...
随机推荐
- [容易]在O(1)时间复杂度删除链表节点
题目来源:http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/
- (扫盲)jQuery extend()和jQuery.fn.extend()的区别
1.认识jQuery extend()和jQuery.fn.extend() jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部 ...
- vi中如何替换某字符成“回车”?
vi中如何替换某字符成“回车”? 在 vi 中::s/,/^M/g (you need to type CTRL-V <CR> to get a ^M here)VIM - Vi IMpr ...
- CentOS7的yum安装mysql
CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 $ wget http://repo.mysql.com ...
- LeetCode:矩形区域【223】
LeetCode:矩形区域[223] 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, ...
- elasticsearch 简单聚合查询示例
因为懒癌犯了,查询语句使用的截图而不是文字,导致了发布随笔的时候提示少于150字的随笔不能发布. 我就很郁闷了. 下面的查询都是前段时间工作中使用过的查询语句. 开始的时候是使用nodejs构建es查 ...
- POJ1226 Substrings ——后缀数组 or 暴力+strstr()函数 最长公共子串
题目链接:https://vjudge.net/problem/POJ-1226 Substrings Time Limit: 1000MS Memory Limit: 10000K Total ...
- Android窗口系统第三篇---WindowManagerService中窗口的组织方式
Android窗口系统第一篇—Window的类型与Z-Order确定 Android窗口系统第二篇—Window的添加过程 上面文章梳理了一个窗口的添加过程,系统中有很多应用,每个应用有多个Activ ...
- c语言字符串 数字转换函数大全
最近学数据结构老是做实验 常用到字符串和数字的转换 想找却发现网上的资料太散 所以搜集整理一下 方便以后再用 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转 ...
- 64位 Windows 用了 32位编译平台 编译不过 MySQL API
发生在一周前的事情了,当时想感受下 MySQL C API ,就写了几个小例子.虽然是在 Windows(我的工作电脑是 64位 Windows) 上面,但是不想用 VS ,只想用文本软件写好代码后用 ...