使用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.mzph.cn/news/4964.shtml

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

相关文章

销售易的12年与七个瞬间

导读&#xff1a;企业级没有捷径 12年对一家企业意味着什么&#xff1f; 在消费互联网领域&#xff0c;12年足够长&#xff0c;短短几年内上市的故事过去屡见不鲜。在企业服务的toB领域&#xff0c;产业成熟和企业发展的时间维度被拉长&#xff0c;但故事同样精彩。 2023年7月1…

ylb-接口5产品详情

总览&#xff1a; 1、service处理&#xff08;根据产品id &#xff0c;查询产品信息&#xff09; 在api模块下service包&#xff0c;ProductService接口添加新方法&#xff08;根据产品id &#xff0c;查询产品信息queryById(Integer id)&#xff09;&#xff1a; package …

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具&#xff0c;virtualenv 是第三方开源的&#xff0c;而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中&#xff0c;在 virtualenv 的文档中可以看到他们的区别&#xff1a; 没有 app-data 种子方法&#…

Python爬虫——urllib_post请求百度翻译

post请求&#xff1a; post的请求参数&#xff0c;是不会拼接在url后面的&#xff0c;而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码&#xff0c;第一次urlencode&#xff1a;对字典参数进行Unicode编码转成字符串&#xff0c;第二次encode&#xff1a;将字…

isaac sim添加孔网格

isaac sim仿真和其它仿真实际上一样&#xff0c;对于孔的仿真&#xff0c;是没那么简单的 在此记录一下踩过的坑 1&#xff0c;首先&#xff0c;你需要在soildworks中将你的孔画出来&#xff0c;并导出stl 2&#xff0c;你可以在win10中使用3D画图查看孔的网格&#xff0c;看…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

虚拟化技术及实时虚拟化概述

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经本人同意&#xff0c;禁止转载。如有问题&#xff0c;欢迎指正。博客地址&#xff1a;https://www.cnblogs.com/wsg1100/ 文章目录 一、前言二、分时系统三、虚拟化介绍四、虚拟化实现方式及分类模拟器Type2虚拟化…

欧姆龙PLC联网

一、设备信息确认 左上角的为PLC型号,如图该PLC型号为CP1H,不同型号的欧姆龙PLC通讯方面有什么差别呢? 通讯能力和方式不同: 有些型号PLC自带网口,有些则需要扩展(上图中右侧的两个红框内为后扩展的通讯口,扩展模块可以随意组合双网口,双232串口,双485串口都可以)…

JDBC编程连接MySQL数据库遇到的两个错误

在进行java与MySQL数据库进行连接的时候我遇到了两个报错&#xff0c;在一开始的时候遇到的报错是Access denied for user yulinlocalhost (using password: YES)&#xff0c;此时我在网络上搜索发现是密码出现错误的问题&#xff08;出现该问题确实是密码错误&#xff09;&…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例&#xff0c;记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中&#xff0c;则可以参考…

设计模式——享元模式

享元模式 定义 享元模式&#xff08;Flyweight Pattern&#xff09;是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量&#xff0c;降低程序内存占用。 缺点 提高了系统的复杂度&…

spring-IOC

IOC容器 简介 IoC(Inversion of Control)控制反转&#xff0c;是一种基于面向对象编程法则的设计思想&#xff0c;它设计出的程序具有松耦合、更优良的特点。 IoC容器是Spring框架中重要的核心组件之一&#xff0c;贯穿了Spring从出生到成长的整个过程&#xff0c;Spring通过I…

零基础学习,轻松打造物业服务小程序

现如今&#xff0c;物业服务已经成为了人们生活中不可或缺的一部分。为了更好地满足人们对物业服务的需求&#xff0c;许多企业和个人开始开发物业服务小程序&#xff0c;以便提供更加便捷和高效的服务。然而&#xff0c;对于大多数人来说&#xff0c;搭建一个小程序可能需要一…

智能ai绘画软件帮你用科技点亮创意火花

李明&#xff1a;嘿&#xff0c;你听说过ai绘画软件吗&#xff1f;我最近对数字艺术产生了浓厚的兴趣 王磊&#xff1a;当然&#xff01;ai绘画软件真是太神奇了&#xff01;它可以将抽象的文字描述转换成惊人的艺术作品。 李明&#xff1a;是吗&#xff1f;它们绘制的效果怎…

数据库及数据表的相关操作(一)

目录 概念知识一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 概念知识 关系型数据库&#xff1a; 使用了关系模型的数据库系统&…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

Linux内核源代码的目录结构包括部分:

内核核心代码&#xff1a;这部分代码包括内核的各个子系统和模块&#xff0c;如进程管理、内存管理、文件系统、网络协议栈等。这些代码构成了Linux内核的核心功能。 非核心代码&#xff1a;除了核心代码之外&#xff0c;还包括一些非核心的代码和文件&#xff0c;如库文件、固…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架&#xff0c;用vscode打开工程目录 要自…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

Leetcode-每日一题【109.有序链表转换二叉搜索树】

题目 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9]输出: [0,-3,9,-…