使用NVIDIA FX Composer验证多纹理合成效果

这篇具有很好参考价值的文章主要介绍了使用NVIDIA FX Composer验证多纹理合成效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近项目上有一个需求,需要将4张带透明通道纹理合成为一张,并且每张纹理指定一个全局透明度。由于纹理过多,合成效果无法保证,为了减少项目的风险,领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我花了几天时间研究了一下NVIDIA FX Composer工具的使用,并且通过此工具简单验证了一下4张纹理的合成效果。

NVIDIA FX Composer工具安装包的下载地址

NVIDIA FX Composer工具使用说明书下载地址

下面我们先简单介绍一下NVIDIA FX Composer工具的使用,NVIDIA FX Composer打开以后会弹出一个向导窗口提示你新建工程,向导窗口如下:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

你点击“New Project”按钮新建一个工程,然后会弹出如下窗口:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

这里我把工程命名为“FadeInOutComposite”,工程路径指定为“F:\KStudy\NVIDIA FX Composer\Projects”。你可以按你自己的需求指定工程名称和路径。点击“OK”按钮以后,工程就新建好了,会弹出工具的主界面。主界面如下图所示:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

图中已经大概对每个区域有个简单的介绍。

下面我们就一步一步来实现我们需要的4张纹理合成效果,步骤如下:

  • 添加一个平面对象到场景中,我们需要把我们最终合成的纹理通过平面对象呈现出来。

点击一下工具栏的图标“使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成”,此时我们的左边的资源管理列表和右下角渲染窗口里面会多出一些东西,如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

  • 为了让我们更方便的观察这个平面的图像,我们需要把右下角渲染窗口的视图改为顶视图。操作如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

此时可以清楚的看到平面显示的内容。

  • 添加一个新的材质和Effect对象,来实现我们想要的4张纹理合成效果。

在资源管理列表窗口的“Effects”栏目上右键,会弹出如下窗口:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

点击“Add Effect...”菜单,会弹出如下窗口:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

勾选“HLSL FX”.然后点击"Next"按钮,弹出如下窗口:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

按上图框选的方式填写,然后点击"next"按钮,弹出如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

点击"Finish"按钮完成材质和Effect的添加。然后删除原本自带的默认材质和Effect,将新创建的材质“FadeInOutComposite_Material”拖动到渲染窗口的平面上,此时工程显示的效果如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

  • 修改Effect的内容,使其支持4张纹理和多个透明通道的输入。

修改Effect的代码如下:

/*
keywords: material classic

date: 2023-07-17

*/

//#define NOT_INCLUDE_FOREIMAGE

texture BackTexture <
    string UIName =  "Back Texture";
    string ResourceType = "2D";
>;

texture FadeOutTexture <
    string UIName =  "Fade-out Texture";
    string ResourceType = "2D";
>;

texture FadeInTexture <
    string UIName =  "Fade-in Texture";
    string ResourceType = "2D";
>;

texture ForeTexture <
    string UIName =  "Fore Texture";
    string ResourceType = "2D";
>;

sampler2D BackSampler = sampler_state {
    Texture = <BackTexture>;
    FILTER = MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};  
sampler2D FadeOutSampler = sampler_state {
    Texture = <FadeOutTexture>;
    FILTER = MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};  
sampler2D FadeInSampler = sampler_state {
    Texture = <FadeInTexture>;
    FILTER = MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};  
sampler2D ForeSampler = sampler_state {
    Texture = <ForeTexture>;
    FILTER = MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};  

float FadeInAlpha;
float FadeOutAlpha;
float BackAlpha;
float ForeAlpha;

float4x4 WorldViewProj : WorldViewProjection;

/* data from application vertex buffer */
struct appdata {
    float3 Position	: POSITION;
    float4 UV		: TEXCOORD0;
};

/* data passed from vertex shader to pixel shader */
struct vertexOutput {
    float4 HPosition	: POSITION;
    float2 UV		: TEXCOORD0;
};

vertexOutput mainVS(appdata IN){
	vertexOutput OUT = (vertexOutput)0;
	OUT.HPosition = mul(float4(IN.Position, 1.0), WorldViewProj);
	OUT.UV = IN.UV;
	return OUT;
}

float4 mainPS(vertexOutput IN) : COLOR {
	float4 BackColor=tex2D(BackSampler,IN.UV);
	float4 FadeInColor=tex2D(FadeInSampler,IN.UV);
	float4 FadeOutColor=tex2D(FadeOutSampler,IN.UV);
	float FadeInAlpha1=FadeInAlpha*FadeInColor.a;	//compute FadeIn Alpha
	float FadeOutAlpha1=FadeOutAlpha*FadeOutColor.a;//compute FadeOut Alpha
	float BackAlpha1=BackColor.a * BackAlpha;		//compute BackImage Alpha;
	float3 BackColor1=BackColor.xyz * BackAlpha1;	//compute BackImage Color
	float BackAlpha2=max(0.0f,1.0f-(FadeInAlpha1+FadeOutAlpha1));//compute FadeIn-Out BackImage Alpha
	float3 color=FadeInColor.xyz * FadeInAlpha1 + FadeOutColor.xyz * FadeOutAlpha1 + BackColor1 * BackAlpha2;//Calculate the resultant color of the following 3 textures
	#ifdef NOT_INCLUDE_FOREIMAGE
	return float4(color,1.0f);
	#else
	float4 ForeColor=tex2D(ForeSampler,IN.UV);
	float ForeAlpha1=ForeAlpha * ForeColor.a;//compute ForeImage Alpha;
	float Follow3TexAlpha=max(0,1.0f - ForeAlpha1);
	float3 color1 = ForeColor.xyz * ForeAlpha1 + color * Follow3TexAlpha;
	return float4(color1,1.0f);
	//return float4(1.0f,1.0f,0.0f,1.0f);
	#endif
}

technique technique0 {
	pass p0 {
		CullMode = None;
		AlphaBlendEnable = True;
		SrcBlend = SRCALPHA;
		DestBlend = INVSRCALPHA;
		VertexShader = compile vs_3_0 mainVS();
		PixelShader = compile ps_3_0 mainPS();
	}
}

 点击工具的“使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成”按钮,会重新编译Effect代码。此时选中资源管理列表中的材质对象。此时右边属性窗口会显示选中材质的输入参数,如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

  • 给FadeInOutComposite_Material材质指定对应的输入参数。

给选中的材质指定对应的背景,淡入,淡出,前景纹理图像和指定的Alpha值,最终右下角渲染窗口中会实时显示你指定参数的效果,如下图:

使用NVIDIA FX Composer验证多纹理合成效果,D3D11,FX Composer工具使用,多纹理合成

此时你可以通过修改属性窗口中输入参数查看右下角渲染窗口的实时效果。

最后给上整个工程的下载路径:https://download.csdn.net/download/xiaoyafang123/88059384文章来源地址https://www.toymoban.com/news/detail-582977.html

到了这里,关于使用NVIDIA FX Composer验证多纹理合成效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • three.js实现雷达扫描效果(纹理贴图)

    three.js实现雷达扫描效果(纹理贴图) 图例 步骤 创建两个平面,分别纹理贴图,底图模型.add(光波模型) 关闭材质的深度测试 光波旋转 代码 图片(透明的)

    2024年02月01日
    浏览(44)
  • 方波分解与合成的电路验证

    一、课题内容及其目标 1.1课题内容 本课题主要从信号与系统、电路分析与设计、电路仿真等方面对方波分解与合成的进行电路验证。 课题内容: 本课题主要模块为: 方波的合成:采用理想信号作为输入激励,采用加法电路对方波进行合成,方波频率以学号为要求。 方波的产生

    2024年02月06日
    浏览(40)
  • 网页语音合成API运行无效果问题处理

    h5提供了语音合成的api,包括SpeechSynthesis、SpeechSynthesisUtterance,具体使用方法可参考语音合成(TTS)应用方案一二三_成江的博客-CSDN博客,现在的mdn上介绍说这是一个实验中的功能,但是从兼容性列表可以看到,除了移动端的opera和安卓webview,支持性是很友好的。 尽管上面提到

    2024年02月16日
    浏览(41)
  • python --moviepy合成视频加转场效果(淡入淡出),FFmepg

    示例一: 上述四行代码实现Moviepy模块的加载、然后读入视频文件、对视频前15秒进行淡入处理、输出调整后视频到结果视频文件。以上四行代码也可以精简为如下两行: 淡出处理类似,只要把函数fadein改成fadeout,并调整时间参数即可。 MoviePy是一个用于视频编辑的Python模块,

    2024年02月02日
    浏览(41)
  • PHP 如何创建一个 composer 包 并在 项目中使用自己的 composer sdk 包

    第一步创建一个composer SDK项目 创建一个 composer.json文件或使用 命令 (如果不清楚怎么弄 直接跳过即可,一般都会默认配置) composer init  这是生成的composer.json文件 将自己要使用的包添加到 require 中,如果没有require则自己添加 (composer文件中必须用双引号不能使用单引号)

    2024年03月13日
    浏览(46)
  • Composer使用教程

    Composer 不会全局安装包,也就是说你全局安装了composer,你以后在哪个文件夹下面安装包都不会影响到你在其他文件夹的包,通俗的来讲,就是你全局安装composer后,你的每个文件夹都是一个虚拟环境 Composer: PHP 项目的\\\"包(class)\\\"依赖管理工具 这些包,可以是你自己写的, 也可以

    2024年02月09日
    浏览(34)
  • MQTT 客户端 MQTT.fx 使用说明

    官网:https://softblade.de/en/download-2/ 说明:最后的免费版本是 MQTT.fx 1.7.1,官网已经没有免费的版本 下载 MQTT.fx 1.7.1 https://nowjava.com/download/44364 【需关注其公众号才能下载】 一路 Next 即可 安装好后,直接启动MQTT.fx 点击第 1 步中界面设置按键(齿轮图标)打开新窗口创建一个

    2024年02月03日
    浏览(44)
  • 【C/C++】使用C++和Direct3D (d3d)获取屏幕截图并根据传入分辨率进行缩放图片大小

    目录 一,函数清单 1.Direct3DCreate9 函数 2.IDirect3D9::CreateDevice 方法 3.IDirect3DDevice9::GetDisplayMode 方法 4.IDirect3DDevice9::CreateOffscreenPlainSurface 方法 5.IDirect3DDevice9::GetFrontBufferData 方法 6.IDirect3DDevice9::D3DXLoadSurfaceFromSurface 方法 7. D3DXSaveSurfaceToFile 函数 二,关键代码实现 三,最终实现

    2024年01月18日
    浏览(48)
  • linux系统中Composer 的安装与使用

    Composer 是 PHP 的包管理(依赖管理)工具。 如果在一个PHP项目中一些库依赖于其他库,就声明所依赖的库,Composer 就会找出相应版本的包并安装,默认情况下下载到项目的某个目录中(例如 vendor)进行安装。 第一步:安装PHP环境 因为composer工具是依赖PHP环境进行管理的,所

    2024年02月03日
    浏览(35)
  • 使用composer构建软件包时文件(夹)权限设置

    在构建软件包的时候你可能会需要对包源内文件或文件夹的权限做出相应的调整,以确保软件包在部署到客户端后可以正常运行。在此之前我们先来了解一下Apple文件系统内文件或文件夹的权限设定。   常见的文件或文件夹会有Owner, Group, Everyone这三种类型的所有权: ·Owner—

    2024年01月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包