云层渲染

2023-11-01 10:20
文章标签 渲染 云层

本文主要是介绍云层渲染,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    在Avatar引擎中采用了一种比较简单的方式生成比较真实的云效果,全部在shader中进行生成渲染。效率和效果都非常好,并具有动态效果。如图


注意两张的变化


    注意整个云层就是渲染在一个平面上的,实现的fragment shader如下

#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endifuniform vec3 uSkyColor;
uniform vec3 uCloudColor;
uniform float uCloudSize;
uniform float uTime;varying vec2 vTexCoord;float rand(vec2 n)
{return fract(cos(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);
}float noise(vec2 n)
{const vec2 d = vec2(0.0, 1.0);vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
}void main()
{// 柏林噪声float total = 0.0;vec2 pos = vTexCoord * uCloudSize;total += noise(pos * 1.0 + vec2(uTime * 2.0, 0.0));total += noise(pos * 2.0 + vec2(0.0, uTime * 3.0)) * 0.5;total += noise(pos * 4.0 + vec2(uTime * 4.0, 0.0)) * 0.25;total += noise(pos * 8.0 + vec2(0.0, uTime * 5.0)) * 0.125;vec3 color = mix(uSkyColor, uCloudColor, total);// 越边缘越透明vec2 alpha = 1.0 - abs(vTexCoord - vec2(0.5)) * 2.0;gl_FragColor = vec4(color, alpha.x * alpha.y);
}

云层通过柏林噪声实现,通过混合云和天空的颜色得到最终的云层。并通过引入uTime变量得到动态效果,注意在叠加不同频率的噪声时,各频率的噪声相位随时间按不同方向和不同速度移动,因此得到的云层变换更接近真实的云层。

这篇关于云层渲染的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322279

相关文章

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

【鸿蒙HarmonyOS NEXT】调用后台接口及List组件渲染

【鸿蒙HarmonyOS NEXT】调用后台接口及List组件渲染 一、环境说明二、调用后台接口及List组件渲染三、总结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、调用后台接口及List组件渲染 后台接口及返回数据分析 JSON数据格式如下: {"code": 0,"data": {"total": 6,"pageSize"

【爬虫渲染神器】selenium 和pyppeteer 的动态渲染ajax反爬虫

许多网页是动态加载的网页,其中不乏使用了ajax异步技术,那么我们有没有一种渲染工具,直接省略分析过程,模拟浏览器渲染的操作呢,获取到我们想要的内容。当然有,下面我们介绍两种渲染工具的实战使用。 目标网站: http://www.porters.vip/verify/sign/ 点击参看详情页的里面内容。 前一篇文章,我们介绍了,js逆向分析两种方法JS逆向–签名验证反爬虫】sign签名验证

如何将 Redshift Cryptomatte AOV 与 teamrender 结合使用,成都渲染101云渲染

这篇文章将讨论在 Cinema 4D 中将 cryptomatte AOV 与 teamrender 结合使用时常见的问题和解决方案。在 Cinema 4D 中使用 AOV 时,用户希望它们的工作方式与其他 AOV 完全相同。但事实并非如此,尤其是与 teamrender 结合使用时。  在 Cinema 4D 中,使用AOV 面板中的Multi-pass和Direct复选框之间的区别非常重要。

vue中跳转当前页无法重渲染且报错问题

1、解决报错: // router/index.jsimport Vue from 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter)// 解决报错👇const routerPush = VueRouter.prototype.pushVueRouter.prototype.push = function push(l

HarmonyOS开发实战( Beta5版)高负载组件的渲染实践规范

简介 在应用开发中,有的页面需要在列表中加载大量的数据,就会导致组件数量较多或者嵌套层级较深,从而引起组件负载加重,绘制耗时增长。虽然可以通过组件复用避免组件重复创建,但是如果每个列表项中包含的组件较多,在转场或者列表滑动的时候列表项就会一次性加载大量的数据,可能引起卡顿掉帧等性能问题。 转场场景 由于业务需求,从当前页面进入一个新页面时,会有转场动画播放,并且在动画首帧中加载新页面所需要的

浏览器输入url到渲染完成经历了那些内容

问: 浏览器输入url到渲染完成经历了那些内容 回答: 从浏览器输入 URL 到页面渲染完成的过程涉及多个步骤,每个步骤都涉及特定的网络和计算机科学技术。以下是这一过程的基本流程: URL 解析: 用户在浏览器地址栏输入 URL(统一资源定位符)。浏览器解析 URL,分解成协议(如 HTTP/HTTPS)、域名、路径、查询参数等。 DNS 查询: 浏览器检查本地缓存是否有该域名的 IP

自定义渲染组件及材质 / 引擎源码 / Dashboard

B站视频: Cocos Creator 3D 官方中文教程——《快上车3D》案例添加链接描述 (请点击跳转) cocos creator 1.x shader 没有经过包装,可以直接定义shader,替换 sprite 原来的 shader,可以参考之前博客; cocos creator 2.x 引入了材质系统,使用 shader 必须通过材质,这里介绍下如何使用自定义 shade

cocos2dx与OpenGL渲染知识

1 顶点和片段介绍 2 why不同纹理会需要重新渲染 纹理优化--------- 3 通俗易懂的 OpenGL ES 3.0 和2.0区别 –参考文档: https://blog.csdn.net/u013654125/article/details/79698469 ~ https://blog.csdn.net/sun___shine/article/details/48313749 Coc

什么叫3d建模渲染?与云渲染农场关系

3D建模渲染行业是一个涉及多个行业和领域的技术过程,它不仅仅是一个特点行业的产物,而是广泛应用于产品设计、工业设计、环境设计、动画、游戏建模和影视CG等多个领域。那么3D建模渲染又与云渲染农场有什么关系呢,一起来简单看看吧。 什么叫3d建模渲染? 这个过程可以分为两个主要阶段:建模和渲染。 3D建模:是创建三维对象或场景的过程。这可以是设计一个新的产品的外观和结构,也可以是构建一个虚