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入门精要》

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/12550300.html
Copyright © 2011-2022 走看看