(十四)unity shader基础之——————基础纹理:上篇(uv坐标、纹理采样、纹理属性介绍)

纹理最初的目的就是使用一张图片来控制模型的外观。使用纹理映射技术可以把一张图黏在模型表面,逐纹素(名字和像素进行区分)地控制模型的颜色。

美术建模时候通常会在建模软件中利用纹理展开技术把纹理映射坐标存储在每个顶点上。纹理映射坐标定义了该顶点在纹理中对应的2D坐标。通常坐标使用一个二维变量(u,v)来表示,其中u是横向坐标,v是纵向坐标,因此纹理映射坐标也被称为uv坐标。

纹理大小可以是多种多样的,例如可以是256X256或者1024X1024,但顶点uv坐标范围通常都被归一化到[0,1]范围内。需要注意,纹理采样时使用的纹理坐标不一定是在[0,1]范围内,实际上这种不在[0,1]范围内的纹理坐标有时会非常有用。与之关系紧密的是纹理的平铺模式,它决定渲染引擎在遇到不在[0,1]范围内的纹理坐标时如何进行纹理采样。

unity使用的纹理空间通常只有一种坐标系,unity使用的纹理空间是符合OpenGL的传统的,也就是说原点位于纹理的左下角,如下图:

 

一、单张纹理

我们通常使用一张纹理来代替物体的漫反射颜色,本节在shader中使用单张纹理作为模拟颜色。

1.1实践

本节使用Blinn-Phong光照模型来计算光照。

1.首先定义纹理属性:

Properties {
		_Color ("Color Tint", Color) = (1, 1, 1, 1)
		_MainTex ("Main Tex", 2D) = "white" {}
		_Specular ("Specular", Color) = (1, 1, 1, 1)
		_Gloss ("Gloss", Range(8.0, 256)) = 20
	}

2.然后声明pass的光照模式、指令、相应变量:

SubShader {		
		Pass { 
			Tags { "LightMode"="ForwardBase" }
		
			CGPROGRAM
			
			#pragma vertex vert
			#pragma fragment frag

			#include "Lighting.cginc"
			
			fixed4 _Color;
			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed4 _Specular;
			float _Gloss;

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于在 Unity 中实现树木摇动的效果,您可以使用 Shader 来实现。下面是一个简单的示例,展示了如何使用 Shader 实现树木摇动的效果: 首先,创建一个新的 Shader 文件,然后在其中添加以下代码: ``` Shader "Custom/TreeWind" { Properties { _MainTex ("Tree Texture", 2D) = "white" {} _WindStrength ("Wind Strength", Range(0, 1)) = 0.5 _WindSpeed ("Wind Speed", Range(0, 10)) = 2.0 } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; float _WindStrength; float _WindSpeed; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { // 计算风的影响 float windOffset = sin(_Time.y * _WindSpeed + IN.uv_MainTex.x) * _WindStrength; // 根据风的偏移来更新纹理坐标 float2 newUV = IN.uv_MainTex + float2(windOffset, 0); // 从树纹理采样颜色 fixed4 c = tex2D(_MainTex, newUV); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } ``` 在这个示例中,我们使用了一个简单的 Lambert 表面着色器来实现树木的着色效果。_MainTex 属性用于传递树的纹理,_WindStrength 和 _WindSpeed 属性控制风的强度和速度。 在 surf 函数中,我们首先计算风的偏移量,然后将其添加到纹理坐标上。最后,我们从树纹理采样颜色,并将其作为表面输出的颜色。 保存 Shader 文件后,将其添加到树木的材质中,并将树木模型的纹理赋给 _MainTex 属性。您还可以调整 _WindStrength 和 _WindSpeed 属性来控制树木摇动的效果。 希望这个示例能帮助到您!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值