Directx11教程十七之TextureTranslation(纹理动画技术)

本文介绍了一种用于游戏开发中的动画纹理技术,通过不断更新纹理的UV坐标实现流动效果,如流动的岩浆或河流。使用虚幻四引擎的示例进行讲解,并提供了具体的Shader代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节教程的的结构如下:




第一,动画纹理技术

顾名思义,动画纹理就是纹理就是3D模型的纹理想动画一样会改变的,当然这里的改变是指同一张纹理中 顶点UV坐标值的改变进而造成纹理的改变,
在游戏中可用于“”流动的岩浆“,“”“流动的河流””等效果,下面上图,我用过虚幻四游戏引擎,貌似官方的水体材质的shader就用到了纹理移动技术,

如图: 虚幻四官方材质  :流动的水



下面放出的材质可视化编辑部分截图:



//移动图片UV
	static float textureTranslation = 0.0f;
	textureTranslation += 0.01f;
	if (textureTranslation > 1.0f)
	{
		textureTranslation -= 1.0f;
	}


看纹理动画技术是如此的强大,放出我的shader代码:

Texture2D ShaderTexture:register(t0);  //纹理资源
SamplerState SampleType:register(s0);   //采样方式

//VertexShader
cbuffer CBMatrix:register(b0)
{
	matrix World;
	matrix View;
	matrix Proj;
};

cbuffer CBTexTranslation:register(b1)
{

	float TexTranslation;
	float3 pad;
};

struct VertexIn
{
	float3 Pos:POSITION;
	float2 Tex:TEXCOORD0;  //多重纹理可以用其它数字
};


struct VertexOut
{
	float4 Pos:SV_POSITION;
	float2 Tex:TEXCOORD0;
};


VertexOut VS(VertexIn ina)
{
	VertexOut outa;
	outa.Pos = mul(float4(ina.Pos,1.0f), World);
	outa.Pos = mul(outa.Pos, View);
	outa.Pos = mul(outa.Pos, Proj);
	outa.Tex= ina.Tex;
	return outa;
}


float4 PS(VertexOut outa) : SV_Target
{
	float4 color;
     outa.Tex.x += TexTranslation;
	 outa.Tex.y += TexTranslation;
    color = ShaderTexture.Sample(SampleType, outa.Tex);
	return color;
}


就是如此的简单,也没太多的东西要总结的:








纹理动了,每帧渲染每个像素的纹理UV都在改变


我的源代码链接如下:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值