计算机图形学

计算机图形学理解与使用

很多搞Unity的同僚都不会看重计算机图形学的提升,因为大一点的公司都会有专业的人来负责这方面的工作,也就是公司的技术美术工程师,我认为,计算机图形学虽不是Unity工程师的必备知识,但是能够很好的理解Shader确实高薪的充分必要条件.既然是高薪必备的条件,那么就应该去了解并熟悉它,不得不说的是Shader确实是比较难的地方,但是我们应该做到知其然,知其所以然,作为一个Unity工程师,我们不需要达到专业水平,只需要达到看到了Shader能够看懂,并且想要什么效果知道该怎么去修改技术美术给我们的Shader的代码,在应用的过程中不断的去理解,做到越来越熟练,运用的越来越熟练!!!

  • 我们进入正题

1.计算机图形学(Shader) 作用是平衡CPU 和 GPU
2.OpenGL渲染流程:
    1).模型文件
        - Fbx 这个最为常用
        - obj
        - dae
        - 手机上:一般游戏效果保持流畅,同屏顶点个数应该少于2万个,最大承载量5万个
        - 一般我们会把主角色模型的顶点数控制在2000-3000NPC: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的详细知识点解析,人如逆水行舟,不进则退,所以我觉得身为一名程序员,我们就需要不断的去学习新的或者有用的技术来充实自己;不要因为自己的懒惰,放弃自己对技术的追求,只有不断的去追求新的技术,才能更好的充实自己,才能走的更加长远!希望可以帮助到有上进心的你,希望可以激励到正在走向颓废的你,希望可以得到认同博主想法的你!

  • 8
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值