【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

这篇具有很好参考价值的文章主要介绍了【程序化天空盒】过程记录02:云扰动 边缘光 消散效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

写在前面唉,最近筋疲力竭,课题组的东西一堆没做,才刚刚开始带着思考准备练习作品,从去年5月份开始到现在真得学了快一年了,转行学其他的真的好累,,不过还是加油!

下面是做面片云的部分,关于日月、天空渐变、大气散射(忘了记录了,后面一定补上)记录在了:【程序化天空盒】过程记录01:日月 天空渐变 大气散射

准备

前置知识

面片云这块儿我卡了挺久的了,主要太多知识漏洞了,带着问题学习的话完成了以下内容的学习: 

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

分析他人作品

目前我能找到的各位大佬做完并展示出来的有以下几个(仅限于我自己有刷到的,可能还有遗漏的):

首先还是之前博客里就提到的两位加上了sdf消散效果的作品:

Unity 卡通渲染 程序化天空盒 昼夜变化_哔哩哔哩_bilibili

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

云是单独的面片,不同通道放不同的信息,shader中获取。  

以及这位UP的Unity NPR 原神Cloud,Sky,Shader_网络游戏热门视频 (bilibili.com):

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

再补充一些最近看到的很棒的作品里的云: 

首先是这位程序化天空盒实现昼夜变换 - 知乎 (zhihu.com)大佬的效果,截图来自文章末尾的gif链接:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

【技术美术】风格化动态天空效果_哔哩哔哩_bilibili

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

b站上一个好厉害的UP做的,没说怎么做的,从他云的效果来看,首先边缘光是会根据太阳的位置而产生变化,但是没有上面三位大佬那样的消散效果,所以我猜测是放了一整个云贴图上去,采样得到的。看着看着我突然发现这些云就是原神的云贴图,也是我准备用的哈哈哈。 

【unity练习1√】urp程序化skybox_哔哩哔哩_bilibili

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

这位UP没有说实现方法,但从他展示的shader面板可以猜测,实现方法是直接给了整个天空的cloud贴图:以及单独的a通道控制一些bloom之类效果吧(猜的

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

正是因为是整张贴图,没办法根据太阳光的位置去做一些散射、云消散的动态效果。

【作品】技术美术Demo海滩小屋(风格化场景渲染)_哔哩哔哩_bilibili

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

这位UP在评论区说了云的制作:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

思路概括

既然做都做了,那一定要尝试动态消散效果!

Unity 卡通渲染 程序化天空盒 - 知乎 (zhihu.com)还是跟着这位大佬实现!试着总结一下文章给出的思路,

  •  maya或任何建模软件,建云的面片模型
  • 面片模型需要给到两套UV,准确映射到想要的云贴图上
  • fbx导入unity,给一个shader完成需要的效果

1 模型和贴图

暂时先不自己画白嫖原神的图(后面有时间想尝试Houdini程序化生成云来着,再看吧,蛮有趣的),原神的图R是shadow layer,G是Rim,B是SDF,A就是外黑内白的透明度了。

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

之前分析篇【Unity天空盒】卡通渲染中如何实现云的消散效果在SD里拆开看过:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

blender里摆了摆面片,我是mesh球直接拆看弄的,摆的乱七八糟,映射也是没分层123层混用了,效果调出来了之后再优化一下吧!现在就先这么着:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

导出fbx就行。(哦,记得法线要flip一下,面片没有厚度,不然算是外面一层才能穿上贴图。

我的贴图感觉融合了一下变得乱七八糟,尝试分了一下通道是下面这样的结果,不管了后续再优化,现在先放着:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

检查一下我们的面片是否正确:

简单先用shadowlayer通道上个色,好的,是正常的,可以进行下一步了: (果然天空盒还是要有云的!!)

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

2 上色

2.1 基础色 阴影色

由r通道控制,给个lerp就行,初版代码:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

效果就是上面那张图啦,但是我想要更加动态,先浅加一个早晨和傍晚的_BrightColor不同,后期可以根据需要,让早晨、白天、傍晚和晚上的颜色都不同,想要云颜色更有层次的话甚至可以把云分为两层来着色,目前颜色就先这样吧!主要代码如下,

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

暴露的参数如下, 

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

效果如下,就简单放个对比图了,搞gif太费劲,最后呈现效果的时候再放gif:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

可以发现边缘的BrightColor是由浅肤色->橘色靠拢,根据天空的颜色适当的调整就行。

2.2 边缘光

边缘光要跟着太阳(光源方向)走,首先要lightDor和worldNormal点积解决,初版代码:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

效果如下:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

这太僵硬了,想要更加动态,

  • 边缘光颜色:早晨Bloom和傍晚Bloom颜色不同,由lighDir.z控制就好
  • 边缘光强度:随着太阳升起和落下强度由弱->强->弱:由lightDir.y控制就好,至于强弱变化,善用smoothstep完美解决(不理解的话可以看看我之前写的【Unity云消散】巩固step,lerp和smoothstep,事实上所有变化效果基本都是靠lerp和smoothstep完成的)

主要代码如下,

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

Shader面板暴露参如下,

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

改后傍晚的Bloom光相比起早晨的白色,改成了橘黄色,更加和谐了(maybe),后期可以再调整,现在就先这样: 

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

边缘光强动态就先不放了,后期放个完整的gif效果。

问题还是很大,首先,看看大佬的边缘光成果:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

目前只是严格按照G通道做边缘光,G通道是这样的:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

所以得到的效果一定是规规矩矩的描边。想要上面那种随意的模糊感,就要给个noise贴图扰动一下uv,再去采样_CloudTex,拿一张noisemap:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

扰动之后,没那么整整齐齐的边缘了: 

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

【补充】用脚本控制颜色

由于想让云的颜色和天空颜色有关联,让整个天空更加完整,最好整个天空盒部分的所有颜色都趋向于脚本控制,这里赶紧搞一下~把参数全部挪到脚本里。

【补充】重做了云面片

blender里重新摆了一下。

2.3 消散效果

云贴图整整齐齐的通道给我们省去了不少麻烦!Unity 卡通渲染 程序化天空盒这位大佬在实现的时候,是完全自己做的云贴图,没有把SDF信息塞到a通道里,而是另外给的贴图。我们的云贴图就不用了,直接获取B通道的SDF信息就行。

实现起来分两步走,首先消散效果应该分为两个部分,

  • 日出日落剧烈的消散
  • 白天和晚上正常时间,云的消散

第二个比较简单,我们先来实现这个。

我们知道,片元着色器这边最终输出的颜色Alpha值是取的云贴图的a通道透明度信息:

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

关于SDF图,一开始理解错了SDF的意思,,SDF记录的信息并不是透明度,而是距离啊!!!以下理解才正确:

我们需要规定一个临界值_LerpSize,那么对于SDF图上的某一点,大于则留下(计入透明度),小于则舍去(不计入透明度)。这样控制才是正确的,_LerpSize越大消散越剧烈,意味着云也就越小。

现在要让这个消散效果动起来:又要建立函数了,_Time.y作为自变量,那_LerpSize就是随着_Time.y变化的因变量,再增加一个控制量,用cos。

那么随着时间变化m在变化,云的大小也会发生改变,如果不做一点过渡,云的范围会变化的很突然,如何过渡?m由0->1的路上,如果不断接近SDF,则Alpha由1到0。

SDF值由0变大接近m的时候,Alpha值是0逐渐变到1的,同理SDF值由1变小接近m的时候,Alpha值是由1逐渐变到0的。

结合上述关系,最后的代码如下,

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

这里写的很乱,是边做边写的,纯当一个技术记录吧,后面有时间的话再完善。

2.4 云颜色和天空联系

用脚本获取天空颜色,再用天空颜色一样的方法去给颜色变换就行,主要代码如下,

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

可控的颜色有这么多, 

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果

云部分到这里就结束了,其他部分其实也做了挺多调整的,这里就记录主要的实现过程。 之后的话,还有高空旋转云、太阳光晕、夜晚的星空和银河、整体雾效没加上,这些效果很多教程都有,后面可能就不会再写这样的博客记录了,最后摆摆相机会放个整体展示效果。文章来源地址https://www.toymoban.com/news/detail-408867.html

到了这里,关于【程序化天空盒】过程记录02:云扰动 边缘光 消散效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 使用柏林噪声程序化生成地形

    参考教程链接 项目链接 👇对噪声和柏林噪声不了解的可以看下面这个讲解。 柏林函数简介   简单来说柏林噪声是一种连续的、渐变的噪声,不理解原理也无所谓,unity自带有Mathf.PerlinNoise(X-coordinate,Y-coordinate);我们可以根据这个来制作更有层次性的柏林噪声。你可以把这个

    2024年02月15日
    浏览(41)
  • CityGML程序化建模开源引擎及数据集

    在攻读博士学位期间,我在 3D GIS 研究中遇到了以下缺点: 包含多个细节级别的 CityGML 数据集很少。 不存在程序化生成的 CityGML 格式的数据。 没有免费的程序化建模引擎。 公开可用的 CityGML 模型通常包含大量(拓扑)错误。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 为了解

    2024年02月13日
    浏览(38)
  • 分享股票量化交易程序化模型的设计思路

    一个股票量化交易程序化模型的入市设计往往伴随着设计者的偏好和交易时间框架等。主要分为震荡交易、套利交易以及趋势跟踪等。当然在近些年的发展中,也出现了类似遗传算法、人工智能神经网络等许多种类的系统模型。 但是对于大多数投资者来说,趋势跟踪系统可以

    2024年02月03日
    浏览(59)
  • 程序化交易接口策略过滤器–九宫格

    不同的程序化交易接口策略适用于不同的市场情况,有些交易策略使用于均值回归,有些则试用于方向明显的时候,有些试用于方向不明显的时候,因此,我们需要根据不同的市场情况,综合考虑方向和波动率,市场成交量来选择合适的交易策略。 本文介绍了一种选择程序化

    2023年04月09日
    浏览(47)
  • Three.js程序化3D城市建模【OpenStreetMap】

    对于我在 Howest 的研究项目,我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中,随后我将对其进行动画处理 推荐:用 NSDT编辑器 快速搭建可编程3D场景 为了使用 Node 和

    2024年02月11日
    浏览(44)
  • 用java去实现程序化广告应该有哪些步骤?

    1. 需求分析和规划 在这一阶段,我们需要详细分析和理解项目需求,并制定相应的规划和计划。这包括以下几个步骤: 项目背景和目标: 理解项目的背景和目标,确定开发的目的和意义。 功能需求分析: 分析用户需求,明确项目需要实现的功能和特性。 技术可行性评估:

    2024年04月10日
    浏览(55)
  • “小程序化”成OA数字化升级突破口

    如果说新冠疫情引发了在线办公需求的激增,那么企业对数字化转型的渴望,则是数字化办公赛道持续火热的根本原因。 2020年新冠疫情爆发,远程办公成为了大部分企业无奈又必然的选择,三年以来,随着疫情的持续蔓延和常态化管控,在线办公逐渐成为刚需,企业对于在

    2024年02月08日
    浏览(40)
  • 程序化交易(二)level2行情数据源接入

    行情在线测试 websocket行情接口 交易在线测试 在线交易接口 官方文档地址 行情交易接口用户文档 注意: 每次分配的服务器地址会发生变化,连接服务前,请务必调用该接口获取最新的服务器地址。 获取服务器: Copy 接口参数: # 参数名 类型 描述 1 market string 市场标志,沪深

    2024年02月05日
    浏览(52)
  • UE5使用Dash插件实现程序化地形场景制作

    目录 0  dash下载后激活 1 初步使用 2  导入bridge的资产路径 3 练习成果 4 参考链接 Dash插件点击蓝色的A,可以使用。 通过输入不同提示命令,来激活不同的功能。 这里需要注意是UAsserts的上一级目录。 实现程序化地形,程序化植被,日光模拟,摄像机视角等功能。 POLYGONFLO

    2024年02月07日
    浏览(40)
  • 股票程序化交易-QMT入门系列(5)-QMT核心接口介绍

    0、前言. 1、QMT前期安装准备 2、QMT中安装python依赖包 3、QMT程序化交易运行机制 4、QMT模型建立、策略运行案例 5、QMT核心接口介绍 6、QMT行情接口介绍 7、QMT交易接口介绍 8、如何实现QMT读取

    2024年01月24日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包