当前位置: 首页 > news >正文

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料,尝试用简单的逻辑对这些内容进行整理。

1、透明对象的特殊对待

不要小瞧png图片和jpg图片的差异!在一般的三维平台,png代表的是带透明通道的纹理,而jpg代表的是不带透明的纹理。透明纹理和不透明纹理虽然都能被渲染出来,但是它们在三维模型组织、三维渲染等方面分家的。不透明对象由于只需要判断是离屏幕最近即可判断可见,而不透明对象可能需要先进行空间排序,还需要考虑与别的物体的混合模式(Blend)。因此他们需采用不同的渲染批次(DrawCall)。一旦渲染批次多了,那么渲染效率就会降低。

2、WebGPU在透明对象的瓶颈

一般而言,我们无法通过仅通过对象前后排序(犹如PS中的图层排序)从而做到让模型的透明计算正常。在WorldWind平台原来也是才基于物体排序技术,但只能解决50%的问题。在那里经常遇到从透明窗户看外面的时候,外面模型看不到的情况。在2019年,Arcgis4.X的三维平台也会出现这种情况。

如果显存足够,其实我们非常暴力的把每个像素点都存储所对应的三维点。但这种技术是很难通用的,某个像素可能对应几十个甚至上百个三维投影点,不可能先存储再排序在计算的。

下面这个代码记为公式1:

下面是对N个投影点按距离排序,最后计算颜色的过程,非常粗暴
其中0是最远的点,N是最近的单
color0=p0*a0+backgroundColor*(1-a0);
color1=p1*a1+color0*(1-a1);
....
colorN=pN*an+colorNs1*(1-an)

3、Depth Peeling算法

^_^不要怕,这个算法很好理解。

还是前面的公公式,可见p1的颜色是最重要的颜色,把握了p1,就等于把握了半壁江山。Depth Peeling算法就是先从最重要的p1开始。已知p1是深度值最浅的一个像素,可以采用第一次Pass(渲染过程,类似把画板全刷一次)。接下来第二次Pass找到p2点,以此类推,可以设置最多寻找几层。

下面这张图就是用了4个Pass,按距离寻找的三角面。可见这种做法解决的前面几层三角面的情况,可以实现计算量少,对性能要求低的情况。

另外由于公式1是从后往前,而本算法是从往后,因此在计算颜色的算法上需要调整。对公式1进行调整可得到如下规律 

c0=p0*a0+b*(1-a0)
c1=p1*a1+c0*(1-a1)=p1*a1+p0*(1-a1)*a0+b*(1-a0)*(1-a1)
c2=p2*a2+c1*(1-a2)=p2*a2+p1*a1*(1-a2)+p0*a0*(1-a1)*(1-a2)+b*(1-a0)*(1-a1)*(1-a2)
c3=p3*a3+c2*(1-a3)=p3*a3+p2*a2*(1-a3)+p1*a1*(1-a2)*(1-a3)+p0*a0*(1-a1)*(1-a2)*(1-a3)+b*(1-a0)*(1-a1)*(1-a2)*(1-a3)
c3=p4*a4+c3*(1-a4)=p4*a4+p3*a3*(1-a4)+p2*a2*(1-a3)*(1-a4)+p1*a1*(1-a2)*(1-a3)*(1-a4)+p0*a0*(1-a1)*(1-a2)*(1-a3)*(1-a4)+b*(1-a0)*(1-a1)*(1-a2)*(1-a3)*(1-a4)
cn=pn*an+E(pi*ai*π(1-aj))....E表示累加,π表示累乘。
---------------------------------------------------
+p4*a4               			=p4*a4*m        其中m=1
+p3*a3*(1-a4)   			=p3*a3*m	其中m=m*(1-a4)
+p2*a2*(1-a3)*(1-a4)		       =p2*a2*m	其中m=m*(1-a3)
+p1*a1*(1-a2)*(1-a3)*(1-a4)		=p1*a1*m	其中m=m*(1-a2)

可见在整个过程中仅需记录m即可实现从前往后的计算,这是一个非常大的计算效率提升策略!

相关文章:

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料,尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异!在一般的三维平台,png代表的是带透明通道的纹理,而jpg代表的是不带透明的…...

Linux零基础入门--Makefile和make--纯干货无废话!!

目录 Makefile的概念与使用 Makefile的编写 多个源文件的Makefile编写 Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件,用于自动化构建 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefi…...

vim编辑器的一些配置和快捷键

记录vim编辑器的一些配置和快捷键,边学边用: yy 复制dd 删除p:粘贴ctrly 取消撤销u:撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o:下方插入一个空行:e 打开文件编辑 其他配置: 上移一行和下移一行&a…...

电子应用设计方案-31:智能AI音响系统方案设计

智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备,通过融合语音识别、自然语言处理、音频播放等技术,为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...

【设计模式】【结构型模式(Structural Patterns)】之装饰模式(Decorator Pattern)

1. 设计模式原理说明 装饰模式(Decorator Pattern) 是一种结构型设计模式,它允许在不改变对象接口的前提下,动态地给对象增加额外的责任或功能。这种模式创建了一个装饰类,用于包装原有的类,并在保持类方法…...

【AI】JetsonNano启动时报错:soctherm OC ALARM

1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后,启动时报错:soctherm OC ALARM,启动失败;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...

QT:生成二维码 QRCode

目录 1.二维码历史2.QT源码3.界面展示4.工程源码链接 1.二维码历史 二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它是指在一维条码…...

【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)

LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...

神经网络中常见的激活函数Sigmoid、Tanh和ReLU

激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…...

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁&#xf…...

基于python爬虫的智慧人才数据分析系统

废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...

LeetCode-315. Count of Smaller Numbers After Self

目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…...

根据导数的定义计算导函数

根据导数的定义计算导函数 1. Finding derivatives using the definition (使用定义求导)1.1. **We want to differentiate f ( x ) 1 / x f(x) 1/x f(x)1/x with respect to x x x**</font>1.2. **We want to differentiate f ( x ) x f(x) \sqrt{x} f(x)x ​ wi…...

WPF关于打开新窗口获取数据的回调方法的两种方式

一种基于消息发送模式 一种基于回调机制 基于消息发送模式 父页面定义接收的_selectedPnNumberStandarMsg保证是唯一 Messenger.Default.Register<PlateReplaceApplyModel>(this, _selectedPnNumberStandarMsgToken, platePnNumberModel > { …...

复杂网络(四)

一、规则网络 孤立节点网络全局耦合网络&#xff08;又称完全网络&#xff09;星型网络一维环二维晶格 编程实践&#xff1a; import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…...

用MATLAB符号工具建立机器人的动力学模型

目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型&#xff0c;表示为二阶微分方程组。本文以一个二杆系统为例&#xff0c;介绍如何用MATLAB符号工具得到微分方程表达式&#xff0c;只需要…...

SQL优化与性能——数据库设计优化

数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目&#xff0c;合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间&#xff0c;并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...

FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现

FPGA存在的意义&#xff1a;为什么adc连续采样需要fpga来做&#xff0c;而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一&#xff1a;读取adc数…...

我们来学mysql -- 事务之概念(原理篇)

事务的概念 题记一个例子一致性隔离性原子性持久性 题记 在漫长的编程岁月中&#xff0c;存在一如既往地贯穿着工作&#xff0c;面试的概念这类知识点&#xff0c;事不关己当然高高挂起&#xff0c;精准踩坑时那心情也的却是日了&#x1f436;请原谅我的粗俗&#xff0c;遇到B…...

基于特征子空间的高维异常检测:一种高效且可解释的方法

本文将重点探讨一种替代传统单一检测器的方法&#xff1a;不是采用单一检测器分析数据集的所有特征&#xff0c;而是构建多个专注于特征子集(即子空间)的检测器系统。 在表格数据的异常检测实践中&#xff0c;我们的目标是识别数据中最为异常的记录&#xff0c;这种异常性可以…...

Anthropic研究院议程:不止做AI大模型,更要定义AI时代的全球规则

当大模型竞赛进入白热化,多数科技公司都在比拼参数、速度、模型能力时,OpenAI竞品Anthropic走出了一条完全不同的路。 近期,Anthropic 正式公布 Anthropic Institute(Anthropic研究院)全新研究议程,不再只埋头做模型研发,而是站在行业顶层视角,深度拆解AI对经济、安全、…...

NVIDIA Profile Inspector深度指南:解锁显卡隐藏性能的完整教程

NVIDIA Profile Inspector深度指南&#xff1a;解锁显卡隐藏性能的完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏画面撕裂、输入延迟高、帧率不稳定而烦恼吗&#xff1f;NVIDIA Pr…...

AI原生研发不是升级,是重铸:SITS 2026核心议题深度拆解(含7个未公开技术白皮书线索)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生软件研发&#xff1a;SITS 2026核心议题深度解读 AI原生软件研发正从“AI-augmented”迈向“AI-native”范式跃迁——系统设计、开发流程、运行时契约与交付形态均以大模型为第一性原理重构。SIT…...

3分钟掌握MarkDownload:从网页到结构化笔记的智能转换

3分钟掌握MarkDownload&#xff1a;从网页到结构化笔记的智能转换 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownload …...

终极视频加速神器:如何用Video Speed Controller提升300%学习效率

终极视频加速神器&#xff1a;如何用Video Speed Controller提升300%学习效率 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否曾因视频播放速度太慢而浪费宝贵时间&…...

瓷砖规格有哪些?瓷砖用量如何计算?

瓷砖规格有哪些?瓷砖用量如何计算? 目前建材市场上出现的瓷砖规格有许多种,每一种瓷砖规格所装饰出来的效果都各有千秋,如果想节省瓷砖和降低造价,那么在购买瓷砖前计算要铺贴的使用量就十分必要。了解瓷砖规格以及瓷砖用量,对于购买瓷砖的消费者而言,一定会有所帮助的…...

LinkSwift:彻底告别网盘下载限速的终极解决方案

LinkSwift&#xff1a;彻底告别网盘下载限速的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...

从CI/CD到AI/CD:SITS2026定义的下一代测试流水线(附头部大厂内部迁移路径图)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI研发自动化测试&#xff1a;SITS2026专题 AI研发流程中&#xff0c;测试环节正从人工验证转向模型感知驱动的闭环自动化。SITS2026&#xff08;Semantic Intelligence Testing Suite 2026&#xff09…...

5分钟快速上手Noto Emoji:打造完美表情符号体验的终极指南

5分钟快速上手Noto Emoji&#xff1a;打造完美表情符号体验的终极指南 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 在数字沟通中&#xff0c;表情符号已经成为表达情感、丰富对话的重要元素。然而&#xff0…...

告别黄牛票困扰:Python自动化抢票工具DamaiHelper深度解析

告别黄牛票困扰&#xff1a;Python自动化抢票工具DamaiHelper深度解析 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪演唱会的门票一秒钟售罄而烦恼吗&#xff1f;是否厌倦了高价从黄…...