首页 > 其他分享 >干货——UGUI渲染RT渲染半透明并与背景完美融合

干货——UGUI渲染RT渲染半透明并与背景完美融合

时间:2024-09-07 23:24:15浏览次数:14  
标签:RT RenderTexture 渲染 创建 times UGUI 混合

文章目录

在游戏开发和图形界面设计中,常常有在UGUI中渲染模型或特效的需求。当我们渲染的内容包含半透明效果时,和UI背景融合就成为一个难题,本文提供一种方法来来实现完美融合,该方法应用的前提是模型或特效的混合模式不能涉及DstColor或DstAlpha,在实际应用中几乎不会使用这类混合模式。

一、技术概述

1. UGUI

  • UGUI 是 Unity 自带的一套 UI 系统,提供了丰富的组件和功能,方便开发者快速创建各种用户界面。
  • UGUI 的渲染是在屏幕空间进行的,默认情况下不支持直接渲染到 RenderTexture。

2. RenderTexture

  • RenderTexture 是一种特殊的纹理,可以作为渲染目标,将场景或物体渲染到其中。
  • 通过将 UGUI 渲染到 RenderTexture,我们可以实现一些特殊的效果,如动态 UI、特效等。

3. 半透明效果与融合

  • 半透明效果可以通过设置材质的透明度来实现,而与背景的融合则需要考虑渲染顺序、混合模式等因素。

二、实现步骤

该实例使用的版本为Unity 6000, 其他版本可能有细微差别。

1. 创建 RenderTexture

  • 在 Unity 编辑器中,通过 “Assets - Create - Rendering - Render Texture” 创建一个新的 RenderTexture 资源。
  • 设置 RenderTexture 的尺寸、格式等属性,以满足项目的需求。
    在这里插入图片描述

2. 设置相机

  • 创建一个新的相机,专门用于渲染 模型或特效 到 RenderTexture。
  • 将相机的 Clear Flags 设置为 Solid Color,颜色设为RGBA(0,0,0,255)
  • 将相机的 Target Texture 设置为创建的 RenderTexture。
    在这里插入图片描述

3. 创建特效

  • 创建一个测试粒子,设置颜色为RGBA(252,82,4,255),并将Layer设置为UIEffect
  • 使用上步创建的相机渲染到RenderTexture。

4. RenderTexture 渲染到UGUI

  • 创建UI背景,染色设为RGBA(128,128,128,255)
  • 创建一个RawImage,将步骤1创建的RenderTexture填入。
    在这里插入图片描述
    经过一番操作后,你获得的会是上面的样子,一个大大的黑底!
    这显然不是我们想要的结果,下面将介绍如何实现完美的混合。

三、实现完美混合

1. 混合模式

Unity官网文档
不妨定义混合计算模式为 _BlendOp,颜色混合因子 _SrcBlend_DstBlend,透明度混合因子 _SrcBlendA_DstBlendA。其中源指当前片元着色器输出的值,目标指渲染缓冲当前记录的值。

则混合公式:
_FinColor = _SrcColor * _SrcBlend [ _BlendOp ] _DstColor * _DstBlend
_FinAlpha = _SrcAlpha * _SrcBlendA [ _BlendOp ] _DstAlpha * _DstBlendA

定义UI背景X, 要混合的半透明面片分别为A、B,为了便于理解先假定BlendOp都为加法运算,让我计算看最终的混合结果:
f 1 c o l o r = A c o l o r × A s r c B l e n d + X c o l o r × A d s t B l e n d f 1 a l p h a = A a l p h a × A s r c B l e n d A + X c o l o r × A d s t B l e n d A f 2 c o l o r = B c o l o r × B s r c B l e n d + f 1 c o l o r × B d s t B l e n d f 2 a l p h a = B a l p h a × B s r c B l e n d A + f 1 a l p h a × B d s t B l e n d A f1_{color} = A_{color}\times A_{srcBlend} + X_{color}\times A_{dstBlend} \\ f1_{alpha} = A_{alpha}\times A_{srcBlendA} + X_{color}\times A_{dstBlendA} \\ f2_{color} = B_{color}\times B_{srcBlend} + f1_{color}\times B_{dstBlend} \\ f2_{alpha} = B_{alpha}\times B_{srcBlendA} + f1_{alpha}\times B_{dstBlendA} \\ f1color​=Acolor​×AsrcBlend​+Xcolor​×AdstBlend​f1alpha​=Aalpha​×AsrcBlendA​+Xcolor​×AdstBlendA​f2color​=Bcolor​×BsrcBlend​+f1color​×BdstBlend​f2alpha​

标签:RT,RenderTexture,渲染,创建,times,UGUI,混合
From: https://blog.csdn.net/wufeng0000/article/details/141997061

相关文章

  • import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from ‘axios
    在 importaxios,{AxiosInstance,AxiosRequestConfig,AxiosResponse}from'axios';  中: 不加花括号(只导入axios): -你只能使用默认导入的 axios  对象本身来进行HTTP请求,例如 axios.get('/api/endpoint') 。-没有导入特定的类型定义,在使用相关对象......
  • 手动添加Spring Boot的配置文件application.properties
      本文介绍在IntelliJIDEA软件中,为SpringBoot项目添加配置文件的操作方法。  最近,在IntelliJIDEA软件中新创建了一个SpringBoot项目,是通过如下图所示的方法直接新建的。  但是,随后发现这样创建的SpringBoot项目没有配置文件。如下图所示,其他的基本项目架构都是存在的......
  • 22748 Financial Reporting and Analysis
    22748FinancialReportingandAnalysisGroupCase-Study,Autumn2024Submissionrequirementsof thecase study1) RecommendedStart :you may startthe case studyassignment at anytimeafter week 4 (census date). 2) Groupsize :4-6students.......
  • 【Ynoi 2019 模拟赛】Yuno loves sqrt technology III
    LuoguP5048YunolovessqrttechnologyIII题意给定一个长度为\(n\)的序列\(a\)。有\(m\)次询问:查询区间\([l,r]\)中众数的出现次数。强制在线。数据范围与约定\(1\len,m,a_i\le5*10^5\)。题解十年前《蒲公英》的做法,这道题只能拿\(80\)分,因为这道题卡了空......
  • C++ 调用 C# - DllExport 方案
    3F/DllExport:.NETDllExportwith.NETCoresupport(aka3F/DllExportakaDllExport.bat)目前还不支持.NET6以及后续的版本,看起来作者生活上遇到了一些麻烦,暂时也不打算处理了无法使用.NET6工作·问题#197·3F/DllExport---Unabletogetworkingusing.NET6......
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
    背景当您在使用npm时遇到npmERR!codeCERT_HAS_EXPIRED错误时,这通常是因为您的本地计算机上的根证书已过期。这个错误可能是由于您的操作系统或Node.js环境中的证书问题导致的。本文将介绍如何解决这个常见的问题,以确保您可以顺利使用npm进行包管理。原文链接:https://blog.c......
  • To enable inbound and outbound TCP traffic specifically for port 18917 using `uf
    ToenableinboundandoutboundTCPtrafficspecificallyforport18917usingufwonDebian12,followthesesteps:AllowinboundTCPtrafficonport18917:sudoufwallow18917/tcpAllowoutboundTCPtrafficonport18917(ifyouhaverestrictedoutgoingtra......
  • INSERT ... ON DUPLICATE KEY UPDATE 问题记录
    起因:需要新增复制数据并更新原数据状态,故采用INSERT...ONDUPLICATEKEYUPDATE的方式来插入和更新数据问题:数据插入及更新异常环境:MySQL5.7.32数据表结构:点击查看代码CREATETABLE`example_table`(`col_a`varchar(255)NOTNULL,`col_b`varchar(255)NOTN......
  • 深入剖析 FreeRTOS:实时操作系统的卓越之选
    摘要: 本文全面深入地探讨了FreeRTOS,这一广泛应用于嵌入式系统的实时操作系统。详细阐述了FreeRTOS的起源与发展历程,介绍其基本概念、特点及工作原理。深入分析了FreeRTOS的内核架构、任务管理、内存管理、中断处理等关键组成部分。探讨了FreeRTOS在物联网、工业控制、......
  • 第十一章 图论 Part4
    目录任务127.单词接龙思路Kama105.有向图的完全可达性思路463.岛屿的周长思路任务127.单词接龙字典wordList中从单词beginWord到endWord的转换序列是一个按下述规格形成的序列beginWord->s1->s2->...->sk:每一对相邻的单词只差一个字母。对于1<=i<=......