uv坐标

UV坐标

不打扰是莪最后的温柔 提交于 2020-04-04 18:07:38
1. 什么是uv坐标   所有的图象文件都是二维的一个平面。水平方向是U,垂直方向是V,通过这个平面的,二维的UV坐标系。我们可以定位图象上的任意一个象素。但是一个问题是如何把这个二维的平面贴到三维的NURBS表面和多边形表面呢? 对于NURBUS表面。由于他本身具有UV参数,尽管这个UV值是用来定位表面上的点的参数,但由于它也是二维的,所以很容易通过换算把表面上的点和平面图象上的象素对应起来。所以把图象贴带NURBUS表面上是很直接的一件事。 但是对于多边形模型来讲, 贴图 就变成一件麻烦的事了。所以多边形为了 贴图 就额外引进了一个UV坐标,以便把多边形的顶点和图象文件上的象素对应起来,这样才能在多边形表面上定位纹理贴图。所以说多边形的顶点除了具有三维的空间坐标外。还具有二维的UV坐标。 对于纹理 贴图 而言,一张贴图的U和V坐标的数值范围都是0到1,而不管他的实际分辨率是多少,MAYA会自动把UV纹理坐标换算成贴图的象素坐标。   2. 什么是UV   "UV"这里是指u,v纹理 贴图 坐标的简称(它和空间模型的X, Y, Z轴是类似的). 它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将 图像 上每一个点精确对应到模型物体的表面. 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图.

UV坐标

喜夏-厌秋 提交于 2020-04-04 18:06:32
1. 什么是uv坐标   所有的图象文件都是二维的一个平面。水平方向是U,垂直方向是V,通过这个平面的,二维的UV坐标系。我们可以定位图象上的任意一个象素。但是一个问题是如何把这个二维的平面贴到三维的NURBS表面和多边形表面呢? 对于NURBUS表面。由于他本身具有UV参数,尽管这个UV值是用来定位表面上的点的参数,但由于它也是二维的,所以很容易通过换算把表面上的点和平面图象上的象素对应起来。所以把图象贴带NURBUS表面上是很直接的一件事。 但是对于多边形模型来讲, 贴图 就变成一件麻烦的事了。所以多边形为了 贴图 就额外引进了一个UV坐标,以便把多边形的顶点和图象文件上的象素对应起来,这样才能在多边形表面上定位纹理贴图。所以说多边形的顶点除了具有三维的空间坐标外。还具有二维的UV坐标。 对于纹理 贴图 而言,一张贴图的U和V坐标的数值范围都是0到1,而不管他的实际分辨率是多少,MAYA会自动把UV纹理坐标换算成贴图的象素坐标。   2. 什么是UV   "UV"这里是指u,v纹理 贴图 坐标的简称(它和空间模型的X, Y, Z轴是类似的). 它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将 图像 上每一个点精确对应到模型物体的表面. 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图.

URP学习之五--LitShader

99封情书 提交于 2020-03-21 18:33:25
这节我们来看一下URP下的LitShader。LitShader也是基于物理渲染的,很多方法和属性看过默认管线PBR代码的应该都会很熟悉,我们现在再过一遍,加深一下印象,同时疏通一下以前可能没有掌握的地方。 先看Shader的Properties: // Specular vs Metallic workflow [HideInInspector] _WorkflowMode("WorkflowMode", Float) = 1.0 工作流还是Specular和Metallic。说到这两个流程的区别,其实笔者认为他们只是在不同输入形式同样的算法下产生同样的结果。所以叫工作流,因为材质需要的贴图产出流程是不一样的。但是不同输入的形式其实决定了可控制参数的多少和基于物理自定义效果的程度。 首先看看Metallic Workflow:Metallic工作流的输入是五张贴图(当然并不是每张贴图都是必须的),分别是主纹理、法线、环境遮蔽、金属度、自发光。 对比一下Specular Workflow:Specular工作流输入的是还是五张贴图:分别是主纹理、法线、环境遮蔽、高光贴图、自发光。 通过对比我们发现两个工作流唯一不同的输入就是 金属度贴图vs高光贴图 那么究竟这两种输入方式对于渲染效果有着什么影响呢(其实熟悉PBR的小伙伴都知道,借着URP的机会讲讲PBR~手动滑稽)

Unity Shader——Writing Surface Shaders(1)——Surface Shader Examples

我怕爱的太早我们不能终老 提交于 2020-01-30 04:09:00
  这里有 Surface Shader 的一些例子。下面的这些例子关注使用内建的光照模型;关于如何使用自定义光照模型的例子参见 Surface Shader Lighting Examples 。 简单   我们将会以一个非常简单的shader作为开始,并在此基础上逐渐完善。下面这个shader会把表面颜色置成“白色”。它使用内建的Lambert(漫反射)光照模型。 Shader "Example/Diffuse Simple" { SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Lambert struct Input { float4 color : COLOR; }; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = 1; } ENDCG } Fallback "Diffuse" }   以下是使用两个 lights 作用在某个模型上的样子: 纹理   一个全白的对象太无聊了,所以让我们添加一个纹理。我们将会在shader中添加一个 Properties block ,这样我门就能在材质中获得一个纹理选择器。以下粗体为其他改变: Shader "Example/Diffuse Texture" {

StarWink UV顶点动画制作详解

谁都会走 提交于 2020-01-20 07:58:07
StarWink UV顶点动画制作详解 我们先来看最终效果 实现原理: 1.利用算法得到圆形差值的UV坐标(中间为0)去采样纹理,得到圆形扩散的循环纹理动画。 2.利用算法得到循环的圆形扩散遮罩,并作为顶点偏移遮罩控制顶点动画。 3.模型顶点UV做了同一块模型上的UV顶点坐标一致性的处理,使得同一块模型上的所有点偏移量一致。 此次制作使用ASE来做算法说明(代码不直观)。 算法实现: 1. 利用UV的取值范围映射到指定的取值范围,并求模(Remap和Length) 第一个算法是Remap方法: 将某个区间的取值范围([Min Old, Max Old])映射到指定区间范围([Min New, Max New])。 算法为:如要将Val从[a, b]映射到[A, B],则公式为 Val = A + Val * (B - A) / (b - a) 第二个算法是length方法,意思是求取向量模长。公式:Sqrt ( Dot ( Iput, Iput ) )。此处将 [-1, 1]的取值范围的二维坐标取模,因为中间点(0, 0)的模长为0,边界处模长为1,所以得到一个[0, 1]灰度渐变的圆(这里的渐变为线性的)。 2. 两向量间的距离,(Distance) 当B向量Time Speed = 0时,Distance如下图所示。 公式:Sqrt (dot ( ( B-A ), ( B-A

【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)

和自甴很熟 提交于 2020-01-17 15:59:14
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 暗黑系 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想了解更多有关表面着色器的细节知识。 你想实现一个入门级别的卡通效果shader(Toon Shader)。 你想知道渐变纹理(ramp texture)的使用方式。 你想了解边缘光照(rim lighting)的知识。 准备工作 我们想实现一个toon shader - 一种能让模型看起来具有卡通效果的shader,在图形学领域,这被称作非真实感图形学(Non Photorealistic Rendering)。 为了实现这种卡通效果,我们得做以下几件事: 减少原始模型上使用的颜色种类。 自定义光照模型,使明暗边界更清晰。 将模型的边缘绘制成黑色。 表面着色器的工作流程 在教程的第一部分我使用了一个简化版的表面着色器流程图,事实上关于表面着色器的工作流程还有很多内容。首先我们看一个相对完整的工作流程图: (译者注:上面很多部分都是可选的,如果我们不自定义这些部分,那将使用Unity自己提供的处理函数。这里尤其注意可选部分的使用格式。 #pragma surface surfaceFunction lightModel [optionalparams] 对于像素处理函数surfaceFunction

Unity OF 3DMax毛坯房制作标准

ぐ巨炮叔叔 提交于 2020-01-15 02:53:08
Unity OF 3DMax毛坯房制作标准 1、 模型 2、 贴图 3、 模型塌陷展UV 4、 灯光 5、 Radiosity 6、 Render To Texture 7、 烘焙 8、 导出 1. 模型 回目录 1)单位统一为:米 导出时也选择厘米,导出的fbx文件直接导入unity3D,unity3D中的1刚好对应3Dmax中的1。 下图中右边为unity3D中的Cube,Scale为1:1:1 。左边Cube 是3Dmax中建立的1:1:1米的模型。 2)cad导入格式可选其中任意一个都可以 3) 导入CAD图之后把物体放在场景0.0.0位置。 4)使用CAD实际尺寸建立模型,同时参照结构图看有无丢失房梁。 5)模型制作过程中对齐边或者点,需要用2.5维对齐捕捉工具。 6)如果甲方需求做空调孔需要在制作墙体的时候将空调孔留出。制作空调洞的时候可用超 级布尔制作,将空调孔的位置塌陷成单独物体制作。 7)注意厨房、卫生间家具的高度。(一般厨房洗菜池和卫生间的洗脸池的高度为900mm)。 8)墙体的制作为一个box对象挤出,不能出现多个box拼凑搭建。 9)楼梯踏步没有图纸说明的情况下高度一般在150mm-1800mm之间。 10) 制作墙体模型时要比实际标高多出300MM(地面以下为200mm.顶以上为100mm),水平零面在地面高度。 11)图层命名方便管理

Unity Shader 基础教程

耗尽温柔 提交于 2019-12-03 16:08:27
Unity-Shader-基础教程 在Github上看到一篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础入门,我在这里翻译一下,分享给大家,英文水平很烂,大致能明白Unity-Shader是什么,渲染管线的工作流程,以及Unity Shader的一些类型和怎样编写Unity Shader。 ( 原文链接 ) 第一部分:什么是Shader? Shader是计算机图形渲染管线的一部分,它是一小段应用程序,告诉计算机在场景中怎样对物体渲染和着色。这个过程包括计算颜色和光照值,并将其给予对象,以至于对象被显示在屏幕上。和上面一样,Shader也被用来创建游戏中的一些特殊的和后期处理效果。 在现代游戏引擎中(包括Unity),Shader运行在可编程的GPU渲染管道中,在GPU中允许并行运行,并且能够很快速的进行许多着色计算。 第二部分:渲染管道 为了学习Shader,我们将简单的了解渲染管道,我们将在本教程中讨论下面这张图片: 我更加倾向把Shader看做是由一种信息类型(模型数据、颜色等等)到另外一种信息类型(像素/片元)的变换,对象数据继承与对象本身,例如模型中的点、法线、三角形、UV坐标等等。我们可以把自定义数据/传递到shader中使用,颜色、纹理、数字等等这些。 着色器流水线的第一步是顶点函数。正如你所知的,顶点就是一些点

网格简化

蓝咒 提交于 2019-12-01 10:00:43
原文链接 网格简化可以减少网格的三角片数量,同时尽量保持住网格的几何信息或其它属性(如纹理)。它是网格处理里的经典问题,广泛应用于各个领域: 游戏领域:游戏场景里的网格都很简单,适合快速渲染;简单的模型也适合快速的物理碰撞检测 多分辨率加载模型(Level of Detail) 三维模型的网页展示 通常情况下,我们讲的网格简化,需要保持住网格的拓扑结构,它区别于下图的Wrap操作。同时,它也区别于 Remesh ,虽然都能达到网格简化的目的。它一般经过一系列局部的简化操作(比如顶点删除,边塌陷),来达到网格简化目的。 顶点简化 基于顶点的简化分为两步: 移除顶点和顶点的邻接三角片,产生一个洞 把洞补上 边简化 基于边的简化分为两步: 移除边以及边相邻的三角片 把边的两个端点合并为一个顶点 简化误差度量 基于局部操作的误差度量:每次误差计算,都是与上次迭代的局部面片做比较。它的特点: 操作简单,计算速度快 局部迭代有累计误差 基于全局操作的误差度量:每次误差计算,都是与原始网格做比较。它的特点: 计算速度相对较慢 对整体误差的控制优于局部操作 带纹理坐标的网格简化 单纯的网格简化和带纹理坐标的网格简化是有区别的,前者的简化的对象是下面左图所示的网格,后者的简化对象是UV域的网格(下面右图所示)。 带纹理坐标的网格简化,不仅要尽量保持住网格的几何特征,而且还要保持住UV域网格的边界几何

PlayCanvas PBR材质shader代码分析(vertex shader)

白昼怎懂夜的黑 提交于 2019-11-26 22:59:21
顶点shader主要对顶点坐标变换,将顶点坐标从local->world->view->clip 空间变换 local空间:模型物体坐标系 world空间:世界空间坐标系 view空间: 相机空间 clip空间: 裁剪空间 local->world空间简化后其实就是这么一行代码: vec4 posW = dModelMatrix * vec4(localPos, 1.0); 此图由 https://tinygltf.xyz/drawgeometry/ 网站脚本编写后截图输出 dModelMatrix就是将顶点local坐标系转换到了世界坐标系下。 dModelMatrix是通过getModelMatrix()方法获取 mat4 getModelMatrix() { #ifdef DYNAMICBATCH return getBoneMatrix(vertex_boneIndices); #elif defined(SKIN) return matrix_model * (getBoneMatrix(vertex_boneIndices.x) * vertex_boneWeights.x + getBoneMatrix(vertex_boneIndices.y) * vertex_boneWeights.y+ getBoneMatrix(vertex_boneIndices.z) *