计算机图形学理解与使用
- Shader入门(一) : http://blog.csdn.net/battletiger/article/details/76851869
- 引言
很多搞Unity的同僚都不会看重计算机图形学的提升,因为大一点的公司都会有专业的人来负责这方面的工作,也就是公司的技术美术工程师,我认为,计算机图形学虽不是Unity工程师的必备知识,但是能够很好的理解Shader确实高薪的充分必要条件.既然是高薪必备的条件,那么就应该去了解并熟悉它,不得不说的是Shader确实是比较难的地方,但是我们应该做到知其然,知其所以然,作为一个Unity工程师,我们不需要达到专业水平,只需要达到看到了Shader能够看懂,并且想要什么效果知道该怎么去修改技术美术给我们的Shader的代码,在应用的过程中不断的去理解,做到越来越熟练,运用的越来越熟练!!!
- 我们进入正题
1.计算机图形学(Shader) 作用是平衡CPU 和 GPU
2.OpenGL渲染流程:
1).模型文件
- Fbx 这个最为常用
- obj
- dae
- 手机上:一般游戏效果保持流畅,同屏顶点个数应该少于2万个,最大承载量5万个
- 一般我们会把主角色模型的顶点数控制在2000-3000个 NPC:700-1000个
1).CPU:
- SkinnedMeshRenderer 蒙皮骨骼 所谓蒙皮骨骼就是负责周围的若干顶点的运动
- MeshRenderer 关节骨骼 所谓关节骨骼就是有缝隙的不是控制周围顶点
- 这两个MeshRenderer的作用:将顶点,法线,切线等信息传递给GPU
2).GPU:
- 渲染管线/渲染管道
- 顶点着色器 --> 光栅化 --> 片段着色器 --> alpha测试 --> 模板测试 --> 深度测试 --> Blend -->
Gbufffer --> front buffer --> frame buffer
- 顶点着色器:
- 计算顶点的颜色
像素 : RGBA 4通道 RGBA8888 --> 每个像素占8bit RGBA444 --> 每个像素占4bit
- 坐标系转换
将 顶点的 物体坐标系 转换为 相机的 观察坐标系
- 光栅化
- 将 顶点 转变成 像素 两顶点间利用差值计算
- 片段着色器
- 纹理采样
- UV坐标 按照等比例缩放
- 跟灯光作用
- 材质球
- Shader
- 作用:拿到材质球的属性 然后和灯光进行计算
- Fixed Shader: 相当于OpenGl里面的Shader1.0
- Vertex Shader: 相当于OpenGL里面的Shader2.0
- Surface Shader: 相当于OpenGL里面的Shader2.0封装起来了
- Shader语言: OpenGL --> sgi公司 --> 跨平台
DX --> 微软公司 --> 只能在windows运行
CG --> 英伟达公司 --> 跨平台 ---> 我们都是用CG语言来开发的
- alpha测试 --> 模板测试 --> 深度测试
- 三大测试的作用: 检测符合条件的 像素 通过 不符合条件的像素 去掉
- Blend
- 当前渲染的 像素 跟 GBufffer
- GBuffer: RGBA 深度 模板
- Front Buffer: Float[1920*1080] 像素块的数组
- Frame Buffer: Front Buffer被放到显示器显示出来 两者就是不断的来回交换
//而且我们一定要学会看官方文档:Help --> Unity Manual --> 找到Shader
接下来我们进行Shader的编写
1.创建Shader
2.创建一个材质球
- 材质球的Shader选择你刚刚创建的Shader
3.Shader的结构
Shader "MyShader/Shader001"
{
Properties
{
}
SubShader
{
Pass
{
}
Pass
{
}
}
SubShader
{
Pass
{
}
}
SubShader
{
Pass
{
}
}
Fallback "diffuse"
}
//Shader "" "中间写路径/路径/.../名称"
//Pass 没出现一次 就渲染一次
//SubShader 表示显卡 从上至下 渲染由高到低 找到显卡能正常执行的SubShader
//如果所有的SubShader都找不到合适的显卡 就执行 Fallback
//具体的语法参考博主的其他博文,有详细的介绍
结束语:后续还会更新Shader的详细知识点解析,人如逆水行舟,不进则退,所以我觉得身为一名程序员,我们就需要不断的去学习新的或者有用的技术来充实自己;不要因为自己的懒惰,放弃自己对技术的追求,只有不断的去追求新的技术,才能更好的充实自己,才能走的更加长远!希望可以帮助到有上进心的你,希望可以激励到正在走向颓废的你,希望可以得到认同博主想法的你!