/*---------unity3D_图形学相关笔记-------------
_图形学:
一,学习图形学能更好的了解渲染的流程,知其然亦知其所以然。
一,学习图形学能更好的了解渲染的流程,知其然亦知其所以然。
二,游戏开发种经常需要平衡CPU和GPU之间得性能消耗。比如:loading(资源本地或网络请求等相关预加载)。
loading做法:
1,CPU做若干张图片交替。(占用大量资源,技术要求低)
2,GPU 旋转一张图片。(资源占用少,利用率高,相对要求较高)
三,编写炫酷特效。
loading做法:
1,CPU做若干张图片交替。(占用大量资源,技术要求低)
2,GPU 旋转一张图片。(资源占用少,利用率高,相对要求较高)
三,编写炫酷特效。
四,优化必备技能。
五,编程进阶必备技能。
_OpenGL和DX:
_OpenGL渲染流程:
CPU:FBX => meshrender 。
Fbx obj :模型文件 里面包含了 uv 顶点位置,法线 切线等渲染所需得信息。
meshrender : 将这些信息传递到GPU。 其中包含两部分:skin mesh render / mesh render mesh filter。二者成对出现。
skin mesh render : 带蒙皮得骨骼。
mesh render mesh filter : mesh render 主要是将顶点信息传递到GPU,mesh filter 表示将哪个模型信息传递给GPU。
GPU 渲染管线:
顶点着色器 => 光栅化 => 片段着色器 => alpha 测试 => 模板测试 => 深度测试 => blend => Gbuffer => frontbuffer =>frame buffer =>显示器。
顶点着色器 :1,计算顶点颜色。 2,将物体坐标系 转换到 相机坐标系。
CPU:FBX => meshrender 。
Fbx obj :模型文件 里面包含了 uv 顶点位置,法线 切线等渲染所需得信息。
meshrender : 将这些信息传递到GPU。 其中包含两部分:skin mesh render / mesh render mesh filter。二者成对出现。
skin mesh render : 带蒙皮得骨骼。
mesh render mesh filter : mesh render 主要是将顶点信息传递到GPU,mesh filter 表示将哪个模型信息传递给GPU。
GPU 渲染管线:
顶点着色器 => 光栅化 => 片段着色器 => alpha 测试 => 模板测试 => 深度测试 => blend => Gbuffer => frontbuffer =>frame buffer =>显示器。
顶点着色器 :1,计算顶点颜色。 2,将物体坐标系 转换到 相机坐标系。
光栅化:将顶点 转换成 像素。(像素 :通常由RBGA 4通道组成。如屏幕 :720*1280 ,即 横排有 720像素 和竖排 有1280像素。)
片段着色器:1,纹理采样。 从纹理像素 赋给 像素。 2,像素跟灯光的计算。
Alpha测试: 挑选合格Alpha的像素(即需要显示的像素或某种条件的像素,主要是筛选)。
模板测试: 像素还可以携带模板信息。(多通道信息,达到条件的模板值)。
深度测试: 符合条件的像素就通过,否则就丢弃。(主要跟相机有关)
blend: 将当前要渲染的像素和已经渲染的像素进行混合运算。
(buffer 即缓冲区)
Gbuffer:存放 RGBA 模板值和深度值 等值。
(buffer 即缓冲区)
Gbuffer:存放 RGBA 模板值和深度值 等值。
Front buffer 和 Frame buffer: 类似当前显示 和下一个需要显示得像素,进行互相交替得一个通道。
_shader 的由来与结构:
1,shader语言。
openGL : SGI 跨平台。GLSL :(openGL shader lauguage)
dx : 微软开发。非跨平台。性能好。HLSL : (high level shader lauguage)
CG: 微软和英伟达 联合开发的一种语言。跨平台 基于C语言,而且性能好。
openGL : SGI 跨平台。GLSL :(openGL shader lauguage)
dx : 微软开发。非跨平台。性能好。HLSL : (high level shader lauguage)
CG: 微软和英伟达 联合开发的一种语言。跨平台 基于C语言,而且性能好。
2,unity shader 语言。
shader语言全部包含(opengl dx cg)。
shader语言全部包含(opengl dx cg)。
CG和HLSL 包含在CGPROGRAM...ENDCG 语法块内。
GLSL包括在GLSLPROGRAM... ENDGLSL语法块内。
unity自己的语言。shaderlab。
3, unity shader分类。
fixed shader : shader 1.0。主要是开关式。
fixed shader : shader 1.0。主要是开关式。
顶点片段着色器 :shader 2.0。包含前者,并且功能里面的公式我们可以自己定义。
surface shader : 前二者的封装。
4, shaderlab 结构。
Shader "Hidden/test1" //shader 的名字 “括号是shader种类或者说这个shader归属哪一种 / 后面是这个shader的名字” { Properties //属性 类似Class中的属性(字段) { _MainTex ("Texture", 2D) = "white" {} } //可能存在多个subshader标签。unity会在所有subshader列表中选择当前环境中合适的subshader。 //当所有subshader失败时,使用会使用[Fallback]中指定的shader,如fallback "default" ; SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always //可能有多个pass //有多少个pass 就会渲染多少次 //[pass tags] pass的标签 [render Setup] 渲染设置 [texture setup] 纹理设置。只有在fiexd funtion shader中才可用。 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // just invert the colors col.rgb = 1 - col.rgb; return col; } ENDCG } } } //end shader
*/