Unity图形学之法线贴图原理

news/2024/11/25 5:58:00/

1.正常贴图:RGBA 4通道 每个通道取值范围 0-255 贴图里面取值是 0-1

2.法线贴图:法线怎么存入正常贴图的过程

每个通道里面存储的是一个向量(x,y,z,w) 通常我们会对应xyzw为rgba 存储值的范围也是0-1向量的取值范围是 -1到1法线怎么存入正常贴图的过程:法线中的向量取值范围怎么变换为0-1: (-1,1) *0.5 +0.5 ==(0,1)正常贴图变成法线的过程:(0,1) -0.5 *2 == (-1,1)

3.法线贴图为蓝色:是因为法线经常是朝向Z轴的,法线倾向 Z值 ,Z值映射到贴图里面,对应的是RGBA中的B值,所以呈现蓝色

4.法线贴图从哪里来?

1.美术制作
2.U3D里设置 图片类型为 Normal Map

5.法线贴图的作用?

1.增加明暗对比度,让凸出的地方看起来更凸

法线计算:

Shader "Custom/NormalMap"
{Properties{_Color ("Color", Color) = (1,1,1,1)_MainTex ("Albedo (RGB)", 2D) = "white" {}_NorTex ("NormalMap (RGB)", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM// Physically based Standard lighting model, and enable shadows on all  light types#pragma surface surf Lambert// Use shader model 3.0 target, to get nicer looking lighting#pragma target 3.0sampler2D _MainTex;sampler2D _NorTex;struct Input{float2 uv_MainTex;float2 uv_NorTex;};fixed4 _Color;void surf (Input IN, inout SurfaceOutput o){// Albedo comes from a texture tinted by colorfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;o.Normal = UnpackNormal(tex2D (_NorTex, IN.uv_MainTex));o.Albedo = c.rgb;o.Alpha = c.a;}ENDCG}FallBack "Diffuse"
}


http://www.ppmy.cn/news/1549743.html

相关文章

TCP/IP--黑客想要通过TCP攻击,会如何攻击,应该怎么应对。

黑客想要通过TCP攻击,会如何攻击,应该怎么应对。 SYN Flood 攻击时DDOS攻击一种,洪水泛滥。黑客发送大量的SYN请求到目标服务器,但是不完成三次握手和四次挥手的过程,不发送ACK响应,服务器收到SYN请求后&a…

《探索 C++:一门强大且多功能的编程语言》

《探索 C:一门强大且多功能的编程语言》 在编程的广阔世界里,C 无疑是一颗璀璨的明星,它以其高性能、丰富的特性和广泛的应用领域,吸引着无数开发者投身其中。今天,就让我们一同深入探索一下这门令人着迷的编程语言吧。…

设计模式-创建型-抽象工厂模式

1.概念 工厂方法模式只能生产一个产品系列,抽象工厂可以生产多个产品系列 2.作用 多个具体产品组成一个产品族(产品系列),一个具体工厂负责生产一个产品族 3.应用场景 系统所需产品间由依赖关系,可以划分为同一产…

PostgreSQL中的内存上下文管理

在数据库的世界里,内存管理是性能优化的关键。PostgreSQL,作为一个高级的开源对象关系数据库系统,拥有一套精细的内存上下文管理系统,它不仅提高了数据库的性能,还增强了系统的稳定性。本文将深入探讨PostgreSQL中的内…

C++ 中的类型别名和 using 声明及其如何使用。

类型别名 类型别名允许为已存在的类型创建一个新的名称,这在处理复杂的类型表达式时特别有用,可以使代码更清晰、更易于理解。类型别名的定义可以通过两种方式实现: 使用typedef关键字‌: typedef int Integer; Integer a 10; /…

Python 3 和 JSON 数据格式

Python 3 和 JSON 数据格式 Python 3 是一种广泛使用的编程语言,以其简洁明了的语法和强大的功能而闻名。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python 3 提供了内置的 json 模块,使得在 Python 程序…

伪数组和真数组

文章目录 伪数组伪数组和真数组的区别将伪数组转换为真数组的方法法一:Array.prototype.slice.call(数据)法二:使用ES6的Array.from 方法 伪数组 1.拥有length属性,其他属性(索引)为非负整数(对象中的索引…

手写一个深拷贝工具

背景 在面向对象编程中,对象之间的复制是一个常见的需求。对象的复制通常分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)两种方式。浅拷贝只复制对象的基本数据类型和引用类型的数据地址,而深拷贝则会递归地…