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

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

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

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

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

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

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

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

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

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

点击一下工具栏的图标“”,此时我们的左边的资源管理列表和右下角渲染窗口里面会多出一些东西,如下图:

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

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

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

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

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

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

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

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

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

修改Effect的代码如下:

/*
keywords: material classicdate: 2023-07-17*///#define NOT_INCLUDE_FOREIMAGEtexture 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 Alphafloat FadeOutAlpha1=FadeOutAlpha*FadeOutColor.a;//compute FadeOut Alphafloat BackAlpha1=BackColor.a * BackAlpha;		//compute BackImage Alpha;float3 BackColor1=BackColor.xyz * BackAlpha1;	//compute BackImage Colorfloat BackAlpha2=max(0.0f,1.0f-(FadeInAlpha1+FadeOutAlpha1));//compute FadeIn-Out BackImage Alphafloat3 color=FadeInColor.xyz * FadeInAlpha1 + FadeOutColor.xyz * FadeOutAlpha1 + BackColor1 * BackAlpha2;//Calculate the resultant color of the following 3 textures#ifdef NOT_INCLUDE_FOREIMAGEreturn float4(color,1.0f);#elsefloat4 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();}
}

 点击工具的“”按钮,会重新编译Effect代码。此时选中资源管理列表中的材质对象。此时右边属性窗口会显示选中材质的输入参数,如下图:

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

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

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

最后给上整个工程的下载路径:https://download.csdn.net/download/xiaoyafang123/88059384

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29262.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】链表及无头单向非循环链表实现

目录 1.顺序表的问题 2.链表的概念、结构及分类 3.无头单向非循环链表实现 3.1创建节点 3.2头插数据 3.3头删数据 3.4尾插 3.5尾删 3.6链表销毁 3.7查找一个元素 3.8在pos之前插入 3.9在pos之后插入 3.10删除pos位置 3.11删除pos之后的位置 1.顺序表的问题 顺…

【Spring | 应用上下文】

应用上下文 应用上下文和资源路径构造应用上下文构造ClassPathXmlApplicationContext实例 — 快捷方式使用通配符蚂蚁式图案类路径&#xff1a;前缀 应用上下文和资源路径 本节介绍如何使用资源创建应用程序上下文&#xff0c;包括使用 XML 的快捷方式、如何使用通配符以及其…

搭建srt服务器

目录 1、下载和编译srt2、下载和编译srt-live-server3、编译工程,并把编程出来的可执行程序放到nfs4、板子上跑程序5、用ffplay从srt服务器上流6、srt中./configure遇到的问题解决方法1、下载源码2、下载好之后cp到ubuntu3、解压安装4、创建软链接:创建快捷名字tclsh,放到us…

信音电子在创业板IPO:募资约9亿元,预计上半年收入约4.3亿元

7月17日&#xff0c;信音电子&#xff08;中国&#xff09;股份有限公司&#xff08;下称“信音电子”&#xff0c;SZ:301329&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;信音电子的发行价为21.00元/股&#xff0c;发行数量为为4300万股&#xff0c;募资总额…

vue 当新增样式无法生效的情况下如何处理

使用scoped属性时&#xff0c;会遇到样式问题。需要使用样式穿透解决 <style lang"scss" scoped> </style> 可以使用以下方法 &#xff1a;deep css 使用 >>> less 使用 /deep/ scss 使用 ::v-deep 代码写法如下: .a :deep(.b) { } .…

Bash 第十行

195 第十行 给定一个文本文件 file.txt&#xff0c;请只打印这个文件中的第十行。 示例: 假设 file.txt 有如下内容&#xff1a; Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 你的脚本应当显示第十行&#xff1a; Line 10 来源&#xff1a;…

8年测试总结,App自动化测试-Appium常遇问题+解决(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 问题1&#xff1a…

正则表达式与文本处理器

文本处理器三剑客&#xff1a;grep&#xff08;查找&#xff09; sed awk 正则表达式&#xff1a;由一类特殊字符以及文本字符所编写的一种模式&#xff0c;处理文本当中的内容 其中的一些字符不表示字符的字面含义&#xff0c;这些字符表示控制或者通配的功能 通配符&…

拿了 7 个大厂 offer,我有话说

我有一个朋友&#xff0c;举办了一个分享会。他春招期间收割了阿里、京东、美团、拼多多、网易、腾讯云智等多家公司的实习 offer。 他最近从一家A大厂实习换到了另外一家B大厂实习&#xff0c;分享会长达100分钟&#xff0c; 共解答了 40 多个问题。 我也从中抽取一些比较有共…

Ceph 应用(CephFS文件存储、块存储、对象存储)

目录 一&#xff1a;创建 CephFS 文件系统 MDS 接口 1、服务端操作 &#xff08;1&#xff09;在管理节点创建 mds 服务 &#xff08;2&#xff09;查看各个节点的 mds 服务 &#xff08;3&#xff09;创建存储池&#xff0c;启用 ceph 文件系统 &#xff08;4&#xff09;…

【SQL】计算每个人的完成率

目录 前提任务的完成率前三名拓展&#xff1a;达梦如何去实现除法有余数拓展&#xff1a;MySQL 任务的完成率前三名 前提 达梦数据库&#xff1a; select 1/3; # 0不要求四舍五入 任务的完成率前三名 # nick_name 人名 # finishNum 当前这个人的任务完成数 # total 当前这…

跨文化合作:如何解决海外网红营销中的文化差异?

随着社交媒体的快速发展&#xff0c;海外网红营销已成为许多品牌和企业获取国际市场的有效方式。然而&#xff0c;由于不同国家和地区存在着独特的文化差异&#xff0c;如语言、价值观、习俗等&#xff0c;这也给品牌进行海外网红营销带来了一系列挑战。本文Nox聚星将和大家探讨…