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才能达 ...
随机推荐
- java读取TXT文件中的数据
将文件放在一个指定的磁盘目录下: File file = new File("指定的文件路径"); try{ BufferedReader br = new BufferedRea ...
- DB Migrations更新数据库命令
在项目迭代的过程中,数据库结构常常需要跟随业务需求的变化做出调整,尤其在迭代的初期阶段,加一个字段减一个字段的需求更是家常便饭.在小型团队中,往往是负责开发功能模块的程序员在完成本地开发环境数据库的变 ...
- API的理解和使用——哈希类型的命令
哈希常用的命令复习 命令 功能 hset key field value 设置哈希值 hsetnx 设置哈希值,field或键必须不存在 hget 获取某个file对应的值 hdel 删除一个或多个f ...
- HDU - 1541 Stars 【树状数组】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意 求每个等级的星星有多少个 当前这个星星的左下角 有多少个 星星 它的等级就是多少 和它同一 ...
- webpack为什么加载不了css?
原文地址: https://segmentfault.com/q/1010000005099261 这个app是用react写的. webpack的loader设置是这样的 module:{ load ...
- haproxy 修改 访问路径
# 匹配 jsessionid,并去除 jessionid参数reqrep ^([^\ :]*)\ /a/test.html;jsessionid=.*\?(.*) \1\ /b/test.html? ...
- [干货]兼容HTML5的Placeholder属性-更新版v0.10102013
HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等.Placeholder是HTML5新增的另一个属性,当input或者textarea设置了 ...
- legend2---开发日志14(游戏对用户友好的设计思路)
legend2---开发日志14(游戏对用户友好的设计思路) 一.总结 一句话总结: 不强制,但是激励:比如宗门灵力等级从强制提升到提升宗门和用户的修炼速度 1.丹药有必要做成随机数值么? 没有 1. ...
- properties文件的解析
此文章是从网上看到一篇实用小文章,感觉不过,摘录下来的!如有问题,可及时联系,可立刻做相应处理! Java读取.properties 配置文件的几种方法 在做java工程时, 经常会将一些配置信息放到 ...
- hdu-5793 A Boring Question(二项式定理)
题目链接: A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java ...