zoukankan      html  css  js  c++  java
  • Unity Shader 渲染时的顶点变换过程和五个空间的介绍




    渲染游戏就是把一个一个的顶点经过层层出来表现在屏幕上的过程。

    顶点着色器主要是把输入的数据进行矩阵变换位置,计算光照公式生成逐顶点颜⾊,⽣成/变换纹理坐标。并且把位置和纹理坐标这样的参数发送到片段着色器。
    顶点着色器的最基本任务就是:把顶点从模型空间转换到屏幕空间。有三个顶点变换过程

    片元着色器主要是处理由光栅化阶段生成的每个片元,最终计算出每个像素的最终颜色。
    片元着色器主要任务是:得到该片元在在屏幕空间的像素位置。

    1、模型空间

    模型空间又叫对象空间、局部空间。

    每个模型都有一个Mesh 这里存储了它的顶点信息,顶点信息就是他的顶点坐标,这个顶点坐标是相对于这个模型的自身中心来说的,这个中心是建模的时候设定的,以这个空间为坐标系称为模型空间。
    每个模型都有一个自己独立的坐标空间,当他移动或者旋转时候,模型空间也会跟着变化。

    2、世界空间

    第一步:从模型空间变换到世界空间。

    Unity中的世界空间是不会改变的,如果一个物体没有父物体,那么它Transform上显示的位置就是相对于世界空间的位置。

    3、观察空间

    第二步:从世界空间变换到观察空间。

    观察空间又叫摄像机空间。
    摄像机位于观察空间的原点。观察空间和其他空间不同的一点是只有观察空间使用右手坐标系,摄像机的前方即Z轴负方向。

    4、裁剪空间

    第三步:从观察空间变换到裁剪空间。

    裁剪空间又叫齐次裁剪空间
    裁剪空间的目标是能够方便的对渲染图元进行剪裁:完全位于这个空间的图元会被保留,完全在外的会被剔除,空间边界的会被裁剪。
    这块空间是由摄像机可看到空间,即一个视锥体决定的。视锥体的6个面叫裁剪平面。

    齐次坐标就是把n维向量用n+1维表示。主要用于区别向量和点,(x,y,z,w) w为0为向量,w为1为点。

    5、屏幕空间

    第四步:从裁剪空间变换到屏幕空间。

    最后一步就是把视锥体投影到屏幕空间,变换后来得到真正的像素位置,而不是虚拟的三维坐标了。

    在Unity中,从裁剪空间到屏幕空间的转换是自动完成的。我们的顶点着色器只需要把顶点转换到裁剪空间即可。

    6、图

    参考于《Unity Shader入门精要》

  • 相关阅读:
    Android学习八---OpenCV JAVA API
    Android学习七---Hello OpenCV samples
    Android学习六---OpenCV for android samples
    android学习五---OpenCV for android环境搭建
    android学习四---Activity和Intent
    Servlet总结(Zpoor,你还说你不会Servlet?)
    Eclipse使用小技巧
    Java-List(冷静分析,稍加思索,识破)
    JDBC——setting useSSL=false, or set useSSL=true
    Java-foreach分析总结
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/12550300.html
Copyright © 2011-2022 走看看