【unity shader 入门精要】CH4 数学基础

文章目录

坐标空间

模型空间(model space)或 对象空间(object space)或 局部空间(local space)

和某个模型或对象有关

世界空间(world space)

可以用于描述绝对位置。是最宏观的一个空间。

模型变换(model transform)

在模型空间和世界空间中,unity 使用的是左手系。

在这里插入图片描述

顶点变换的第一步,就是将顶点坐标从模型空间变换到世界空间中,称为模型变换

观察空间(view space)或 摄像机空间(camera space)

对于观察空间,unity使用的是右手系。

观察空间可以看作是模型空间的一个特例——该模型为摄像机。

观察变换

顶点变换的第二步,就是将顶点坐标从世界空间变换到观察空间中,称为观察变换

观察空间投影到屏幕空间

从观察空间(三维)转换到屏幕空间(二维)的操作叫做投影(projection)。

裁剪空间(clip space齐次裁剪空间)或 裁剪矩阵(clip matrix)或 投影矩阵(projection matrix)

裁剪矩阵 / 投影矩阵:观察空间 --> 裁剪空间

视锥体(view frustum)

视锥体由6个平面(称为裁剪平面 clip planes)包围而成。

视锥体有两种类型,涉及两种投影类型:

  1. 正交投影
    平行线会一直保持平行
    2D游戏 / 小地图
  2. 透视投影
    近大远小
    3D游戏

    在这里插入图片描述

    左图为透视投影,右图为正交投影

在这里插入图片描述

左图为透视投影的视锥体,右图为正交投影的视锥体。

近剪裁平面(near clip plane)和远剪裁平面(far clip plane)决定了摄像机可以看的深度范围。

透视摄像机的参数对透视投影视锥体的影响:

在这里插入图片描述

在这里插入图片描述


正交摄像机的参数对正交投影视锥体的影响:

在这里插入图片描述


在这里插入图片描述

屏幕空间(screen space)

屏幕空间是一个二维空间,因此,我们必须把顶点从裁剪空间投影到屏幕空间中,来生成对应的2D坐标。这个过程可以理解成有两个步骤。

首先,我们需要进行标准齐次除法(homogeneous division),也被称为透视除法(perspective division)。就是用齐次坐标系的w分量去除以x、y、z分量。在OpenGL中,我们把这一步得到的坐标叫做归一化的设备坐标(Normalized DeviceCoordinates, NDC)。经过这一步,我们可以把坐标从齐次裁剪坐标空间转换到NDC中。经过透视投影变换后的裁剪空间,经过齐次除法后会变换到一个立方体内。

在这里插入图片描述


而对于正交投影来说,它的裁剪空间实际已经是一个立方体了,而且由于经过正交投影矩阵变换后的顶点的w分量是1,因此齐次除法并不会对顶点的x、y、z坐标产生影响。

在这里插入图片描述

小结

顶点变换的步骤:

  1. 模型变换:模型空间 --> 世界空间
  2. 观察变换:世界空间 --> 观察空间
  3. 裁剪矩阵 / 投影矩阵:观察空间 --> 裁剪空间
  4. 裁剪空间 --> 屏幕空间

    在这里插入图片描述


    在这里插入图片描述

unity只有在观察空间使用了右手系。

法线变换

在游戏中,模型的一个顶点往往会携带额外的信息,而顶点法线就是其中一种信息。当我们变换一个模型的时候,不仅需要变换它的顶点,还需要变换顶点法线,以便在后续处理(如片元着色器)中计算光照等。

一般来说,点和绝大部分方向矢量都可以使用同一个4×4或3×3的变换矩阵M把其从坐标空间A变换到坐标空间B中。但在变换法线的时候,如果使用同一个变换矩阵,可能就无法确保维持法线的垂直性。

在这里插入图片描述

在这里插入图片描述


切线是由两个顶点之间的差值计算得到的,因此我们可以直接使用用于变换顶点的变换矩阵来变换切线。

在这里插入图片描述


即:使用原变换矩阵的逆转置矩阵来变化法线即可得到正确结果。

在这里插入图片描述

Unity Shader的内置变量(数学篇)

变换矩阵

在这里插入图片描述

摄像机和屏幕参数

在这里插入图片描述

原文地址:https://blog.csdn.net/qq_43363200/article/details/116246133

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章主要介绍Unity中地面检测方案的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.普通射线在角色坐标(一般是脚底)...
这篇文章主要介绍了Unity游戏开发中如何消除不想要的黄色警告,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带...
这篇文章主要介绍了Unity中有多少种渲染队列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解
这篇文章主要介绍Unity中如何实现Texture,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!了解Texture2D 如上图,Texture2D是一张
小编给大家分享一下Unity中DOTS要实现的特点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
这篇文章给大家分享的是有关unity中如何实现UGUI遮罩流光特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下面是核心shader:Sh...
这篇文章主要为大家展示了“Unity中如何实现3D坐标转换UGUI坐标”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下...
这篇文章主要介绍了Unity游戏开发中设计模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章主要介绍了Unity中如何实现仿真丝袜渲染,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了...
这篇文章给大家分享的是有关Unity插件OVRLipSync有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目需要接入对话口型动...
这篇文章主要介绍了Unity性能优化之DrawCall的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家...
这篇文章给大家分享的是有关Unity给力插件之Final IK怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这插件有什么用:一般游...
这篇文章给大家分享的是有关Unity中如何内嵌网页插件UniWebView的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、常见Unity中内...
小编给大家分享一下Unity如何做流体物理的几个轮子,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
小编给大家分享一下Unity中Lod和Occlusion Culling的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收...
这篇文章将为大家详细讲解有关Unity中LineRenderer与TrailRenderer有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获...
这篇文章主要介绍了Unity中coroutine问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起...
这篇文章将为大家详细讲解有关unity中spine怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。骨骼动画首先我们来看到...
这篇文章主要为大家展示了“Unity Shader后处理中如何实现简单均值模糊”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学...