热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

热浪扭曲效果

热浪扭曲•每个人都对自然界中的这种大气效果很熟悉•光线在穿过不同密度的介质时会弯曲热微光•热空气密度比冷空气小•密度影响介
   热浪扭曲         每个人都对自然界中的这种大气效果很熟悉         光线在穿过不同密度的介质时会弯曲 热微光         热空气密度比冷空气小         密度影响介质的折射率         热空气上升的同时会被冷空气替代, 这会改变光射入眼睛的路线          渲染场景到RGBA离屏缓存(可渲染的纹理)         颜色写入RGB值         扭曲度写入Alpha通道         绘制全屏长方形到后备缓冲区         对离屏缓冲采样以获得扭曲度         用扰动贴图来确定扰动向量, 用扭曲度放缩后偏移原始纹理坐标         基于扰动纹理坐标的可增长泊松分布(根据扭曲度来进行偏移) 扭曲度         逐像素判断当前像素被扭曲的程度         当光线穿过更多的气体时, 折射程度也相应增加         扭曲随场景深度增加    开始时把渲染目标的Alpha通道清为1.0,表示最大深度    Pixel shader把每个像素的深度写入alpha通道          深度提供了一个很好的全局扭曲方案, 但是你的美工们希望局部控制         热浪几何体可以用来定义扭曲范围, 如热空气出口和喷气发动机尾         热浪纹理可以使热浪几何本上的扭曲动起来 热度几何体 & 热度纹理         像素扭曲度来源来热度纹理         扭曲度被深度放大         用高度进一步放大 (纹理坐标) 并且 N.V 来避免生硬的边缘         扭曲度被写入Alpha通道 全屏矩形          全屏矩形用离屏缓存(可渲染的纹理)来绘制并且用扰动贴图作为纹理 扰动贴图         一个2D向量储存在红色和绿色通道内         在全屏矩形两个方向上卷动贴图并采样两次         平均两次采样并把值变换到 [-1.0, 1.0] 的范围内         用扭曲度放缩向量         结果就是扭曲向量扭曲向量         扭曲向量用于偏移原始纹理坐标         向量的大小取决于扭曲度         这个新的扰动纹理用于读入离屏缓存 可增长泊松分布         模糊中心在扰动纹理坐标的中间         偏移基于扭曲度 扭曲 Shader
float4 main (PsInput i) :COLOR{   // fetch from perturbation map with scrolling texture coords   float3 vPerturb0 =tex2D (tPerturbationMap, i.texCoord1);   float3 vPerturb1 =tex2D (tPerturbationMap, i.texCoord2);               // scale and bias: (color - 0.5f)*2.0f   vPerturb0 = SiConvertColorToVector(vPerturb0);   vPerturb1 = SiConvertColorToVector(vPerturb1);    // average perturbation vectors   float2 offset = (vPerturb0.xy + vPerturb1.xy) * 0.5f;    // get distortion weight from renderable texture (stored in alpha)   float4 cDistWeight =tex2D (tRBFullRes, i.texCoord0);    // square distortion weight   cDistWeight.a *= cDistWeight.a;    // compute distorted texture coords   offset.xy = ((offset.xy * cDistWeight.a) * fPerturbScale) + i.texCoord0;    // fetch the distorted color   float4 o;   o.rgb = SiPoissonDisc13RGB(tRBFullRes, offset, 1.0f/screenRes.xy, cDistWeight.a);   o.a = 1.0f;   return o;}
 可增长泊松分布 Shader
float3 SiGrowablePoissonDisc13FilterRGB(sampler tSource,float2 texCoord,float2 pixelSize,float discRadius){   float3 cOut;   float2 poisson[12] = {float2(-0.326212f, -0.40581f),                         float2(-0.840144f, -0.07358f),                         float2(-0.695914f, 0.457137f),                         float2(-0.203345f, 0.620716f),                         float2(0.96234f, -0.194983f),                         float2(0.473434f, -0.480026f),                         float2(0.519456f, 0.767022f),                         float2(0.185461f, -0.893124f),                         float2(0.507431f, 0.064425f),                         float2(0.89642f, 0.412458f),                         float2(-0.32194f, -0.932615f),                         float2(-0.791559f, -0.59771f)};   // Center tap   cOut = tex2D (tSource, texCoord);   for (int tap = 0; tap <12; tap++)   {      float2 coord = texCoord.xy + (pixelSize * poisson[tap] * discRadius);       // Sample pixel      cOut += tex2D (tSource, coord);   }   return (cOut / 13.0f);} 
  

推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 本文介绍了三种解决 Git Push 冲突的方法,包括创建新分支、手动解决冲突和强行推送。这些方法适用于不同的开发场景,如版本迭代、多人协作和个人开发。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Visual Studio 2019 安装指南
    作为一名拥有三年经验的程序员,由于长期专注于C语言,我意识到自己的技术栈过于单一。在转型为Android驱动开发工程师后,这种局限性更加明显。本文将介绍如何安装Visual Studio 2019,并配置C++开发环境,以帮助读者拓宽技术视野。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • 本文介绍了实现人工智能的多种方法,并重点探讨了当前最热门的技术——通过深度学习训练神经网络。文章通过具体实例详细解释了神经网络的基本原理及其应用。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 拼多多的崛起之路
    随着4G通信技术的发展,互联网产品从PC端转向移动端,图像传输速度更快、更清晰,智能设备的应用提升了用户体验。移动互联网的普及为拼多多的崛起提供了时代背景。 ... [详细]
author-avatar
朗月清风的海角
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有