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

案例 —— 怪物出水

一,Ocean Setup

设置海洋Surface Grid(使用Large Ocean工具架)

  • 调节默认Grid的大小尺寸及细分(使用非常小尺寸来测试);
  • 调整频谱输入点的多少,频谱Grid Size,波浪方向,速度,起伏大小等等,以确定surface形态及动态;

 

按离相机远近细分Grid以展现足够细节,并删除相机额外的部分;

  • TriDivide
//转化为相机坐标
@P = fromNDC('/obj/camera', @P);

将频谱分为低频和高频(particle fluid mask)

  • 高频用于渲染;

二,Water Setup

使用预设的Tank设置,并根据角色轨迹,绘制交互范围;

 

模拟解算前,调整相关参数
  • 添加vorticity、id属性;
  • 设置粒子间隔为0.2,解算器最大子步为1(默认2);
    • 由于是大尺寸镜头,可稍微降低体素精度Grid Scale为2.2(默认为2);
  • 设置为FLIP(Swirly)模式;
  • Velocity Smoothing(0.01),以更加飞溅;

添加并设置碰撞体
  • 关闭Surface Collide(贵);
  • 使用Move Outside Collidion;
  • 缓存以增加解算效率(16bit),Cache Frames预加载一帧以加速解算;

        由于ocean surface是有波浪变形的,而解算时的水面时未变形平静的,最后水面变形会与碰撞体不匹配的,解决方法有:

  • Guide Simulation,引入引导的surface和vel,会非常的慢;
  • 对于比较平静的海面,可使用海洋频谱反向变形碰撞体,最后还原碰撞体;

注,可缩小模拟范围,以快速模拟测试;

模拟解算设置
  • 删除空中飞溅的大小块,通过体素内粒子密度判断;
    • volume rasterize particles
  • 添加阻力POP Drag(0.15);
    • 对分离的低密度粒子使用更高的阻力;
  • 添加些噪波POP Force;
    • 针对水面以上的粒子,低密度粒子或碰撞体周围的粒子;
  • 添加最大速度限制POP Speed Limit;

注,Gas Project Non Divergent Adaptive节点Error Tolerance默认非常慢,改为0.01;

压缩以减少缓存大小
  • Fluid Compress,压缩粒子及volume;

针对粒子压缩:

  • 如相机相对稳定,也可删除相机外的粒子;
  • 如pscale值一样,可转化为detail属性;
  • 压缩属性值为16bit(attribute cast),如v、vorticity;
  • 删除不必要的属性;
  • Convert VDB Points,使用vdb存储点,以压缩数据;

 

针对volume压缩:

  • vel场可不用完全的精度,如降低2倍(VDB Resample);
  • 降低surface场激活体素(VDB Active SDF);

 

三,Meshing Setup

  • 注意避免水花和边界碰撞;
  • 控制flip解算精度,避免添加过多的细节;大部分细节来自于whitwater;

注,取小范围解算粒子,以快速测试mesh;

Meshing
  • 先对解包vdb点,在还原pscale属性;
  • Particle Fluid Surface,Spherical模式会快很多;
    • 可降低voxel scale以提高精度;
    • 提高adaptivity自适应;
    • 勾选过滤,以控制表面凹凸不平;

 

注,如空中mesh大块大块,可调节pscale属性;还可根据粒子相对密度,来控制pscale属性;

//向下掉落时,越来越小
@pscale *= fit(@P.y,2,30,1,0.4) * fit(@v.y,-1,-13,1,0.6) * fit(@ptdensity,2,16,0.4,1);

  

注,通过v,对凹凸不平的表面模糊平滑(blur,deltamush);

剔除外围边界mesh
  • 根据绘制的边界曲线,压平y轴;
  • 根据边界框和相机,剔除外围边界mesh;
  • 控制边界v、vorticity;
float dist = xyzdist(1, @P);
float depth = volumesample(2,0,@P);
float multi = fit(dist,2,12,0,1);
if(depth < -1) i@group_keep=1;
@P.y *= multi;
@v *= multi;
@vorticity *= multi;

应用低频频谱并添加变形速度
  • 在blast剔除前应用;
  • 将频谱变形的速度,添加到解算速度上;

为whitewater创建自定义的surface、vel

  • 对变形后的mesh操作生成surface、vel(vdb from polygon);
  • 降低vel场的精度vdb resample(降低2倍),调整激活范围vdb activate;
  • 将这两个场存储为16位(primitive);
  • 分开缓存mesh,和surface、vel(白水最关心此两个场);
    • 由于此两个缓存有许多共同的节点,单独缓存会重复计算;

//缓存water_surface节点时,先缓存water_fields
fieldsNode = hou.node('/obj/water_sim/water_fields/render')
fieldsNode.render(frame_range=(hou.frame(), hou.frame()))

四,Whitewater Source Setup

  • 对缓存的surface/vel场,Cache Frames预加载一帧以加速解算;

模拟对白水影响的空气场
  • 以角色作为发射源,生成烟雾;
  • 使用水体surface场、角色,作为碰撞场;
    • 应用于force_output接口;
  • 使用Gas Vortex Confinement添加更多的涡旋;
  • Cache Frames预加载一帧以加速解算;
  • 限制最大速度;
float speed = length(v@vel);
v@vel = v@vel/speed * min(speed, 20);
白水发射源粒子
  • 使用已经变形后的mesh,定义发射源区域(通过mesh的curvature,vorticity,v);
    • 使用默认whitewater source节点(使用解算后的压缩粒子)生成emission volume,不理想;
  • 在发射区域scatter撒点,并删除不必要的属性(保留emission、v);
    • 对emission压缩属性值为16bit(attribute cast);
    • 并转化为vdb存储点Convert VDB Points,以压缩数据;
  • 缓存此发射源粒子;
//控制发射区域
int pts[] = pcfind(0, "P", @P, ch("radius"), chi("maxpts"));float curature = 0;
foreach(int pt; pts){vector closeP = point(0, "P", pt);vector Pdiff = normalize(@P - closeP);curature += max(0, dot(Pdiff, @N));
}@emission = fit(curature, 0.1, 1, 0, 1) * fit(@vorticity, 0.5, 2, 0, 1) * fit(length2(@v), 8, 100, 0, 1);

增加白水发射源粒子并添加更多细节

  • 解包发射源粒子vdb点;
  • 对速度属性v,添加noise;
    • anti-aliased noise,只改变方向,不改变大小;
    • random,随机速度大小(0.9~1);
  • 添加粒子数量,point replicate;
    • 通过属性控制复制的量;
  • 略微向速度方向移动下粒子,避免粒子太靠近surface;
  • 由于解算的飞溅粒子,相对成块,在对位置添加些noise(attribute noise);
  • 为更像水花的结构,可在添加平滑(attribute blur);
  • 在使用point replicate增加粒子数量;

五,Whitewater Setup

解算控制
  • 使用默认的whitewater solver节点,不会有很好的控制(air场);
  • 直接使用POP solver节点,以获取更多控制;
    • 添加重力POP Force;
    • 删除水面过低不必要的粒子POP Kill;
    • 在DOP外设置life;
    • 邻近的粒子间速度会大致相同(通过张力等),通过转化的速度场实现;
    • 使用空气场驱动粒子,并通过粒子密度控制airresistance;
    • 通过粒子密度控制重力;
    • 降低高密度区的点数,避免粒子过渡聚集;
    • 对高密度区速度引入noise,以破开形态;
    • 与水面交互,将内部的粒子推出到表面并附加水面速度(pop advect by volumes);
    • 与水面和角色交互,角色相对高精度,将内部的粒子推出到表面;
      • 反弹速度reflvel的切线速度,并融合些角色碰撞速度;

wedding缓存
  • 为避免内存溢出,可分割发射源分开缓存(使用wedge);
  • 删除角色背后的粒子,以优化缓存(VDB Occlusion Mask);
  • 删除不必要的属性和组;

六,Solaris Render

  • File Merge,可将wedding后缓存一起加载;

Solaris

  • Reference导入对应的usd模型;
  • 参加demelight,并添加环境贴图hdr;
  • 默认karma渲染可能非常模糊,关闭Enable Depth of Field;
  • 通过Correction Toolbar,设置ACES;

 

ocean surface 

  • 将surface分为远近两部分,并创建相应材质;

相关文章:

案例 —— 怪物出水

一&#xff0c;Ocean Setup 设置海洋Surface Grid&#xff08;使用Large Ocean工具架&#xff09; 调节默认Grid的大小尺寸及细分&#xff08;使用非常小尺寸来测试&#xff09;&#xff1b;调整频谱输入点的多少&#xff0c;频谱Grid Size&#xff0c;波浪方向&#xff0c;速度…...

vue中使用print.js实现页面打印并增加水印

1.安装print.js npm install print-js --save2.在main.js文件中引入并注册(我使用的是print.js的源码文件&#xff0c;并且做了一修改&#xff09; //引入 import Print from ./utils/print//注册 Vue.use(Print); //注册3.在页面中使用 <template> <div class&quo…...

计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(下)

文档编辑软件Word 2016 5.4 Word 2016的表格应用5.4.1 创建表格5.4.2 编辑表格5.4.3 设置表格 5.5 Word 2016的图文混排5.5.1 文本框操作5.5.2 图片操作5.5.3 形状操作5.5.4 艺术字操作 5.6 Word 2016的页面格式设置5.6.1 设置纸张大小、页面方向和页边距5.6.2 设置页眉、页脚和…...

简单洗牌算法

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐目前主更 专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ 在学习了ArrayList之后&#xff0c;我们可以通过写一个洗…...

JVM: 堆上的数据存储

文章目录 一、对象在堆中的内存布局1、对象在堆中的内存布局 - 标记字段2、JOL打印内存布局 二、元数据指针 一、对象在堆中的内存布局 对象在堆中的内存布局&#xff0c;指的是对象在堆中存放时的各个组成部分&#xff0c;主要分为以下几个部分&#xff1a; 1、对象在堆中的…...

AI产品经理的职责与能力:将AI技术转化为实际价值

一、AI产品经理的职责 发现和解决问题&#xff1a;AI产品经理需要具备敏锐的洞察力&#xff0c;能够发现用户需求和痛点&#xff0c;并提出相应的解决方案。传递价值给用户&#xff1a;AI产品经理需要确保产品能够满足用户的需求&#xff0c;提供价值&#xff0c;并提升用户体…...

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测 目录 【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本…...

如何对B站的热门视频进行分析

1. 视频内容分析 主题和类型&#xff1a;确定视频的主题和类型&#xff08;如游戏、教育、生活、科技等&#xff09;&#xff0c;分析其是否符合当前流行趋势或特定兴趣群体。内容创意&#xff1a;评估视频内容的创意性和原创性&#xff0c;是否具有吸引力和独特性。内容质量&…...

MobaXterm tmux 配置妥当

一、事出有因 缘由&#xff1a;接上篇文章&#xff0c;用Docker搭建pwn环境后&#xff0c;用之前学过的多窗口tmux进行调试程序&#xff0c;但是鼠标滚动的效果不按预期上下翻屏。全网搜索很难找到有效解决办法&#xff0c;最后还是找到了一篇英文文章&#xff0c;解决了&…...

排序算法:快速排序,golang实现

目录 前言 快速排序 代码示例 1. 算法包 2. 快速排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 快速排序的思想 快速排序的实现逻辑 1. 选择基准值 (Pivot) 2. 分区操作 (Partition) 3. 递归排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行…...

step:菜单栏静态加载和动态加载

文章目录 文章介绍静态加载动态加载补充材料 文章介绍 对比静态加载和动态加载。 主界面main.qml之前使用的是动态加载&#xff0c;动态加载导致的问题&#xff1a;菜单栏选择界面切换时&#xff0c;之前的界面内容被清空。 修改方法&#xff1a;将动态加载改为静态加载 左边是…...

【简历】武汉某985大学:前端简历指导,拿offer可能性低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份985武汉某大学25届的前端简历&#xff0c;那么985面向的肯定是大厂的层次&#xff0c;但是作为前端简历&#xff0c;学校部分&a…...

推荐系统的核心逻辑 MVP

我们将设计一个基于内容经济的推荐系统&#xff08;Minimum Viable Product, MVP&#xff09;。这个系统将通过收集用户行为数据&#xff0c;计算用户相似度&#xff0c;并生成个性化的推荐结果。推荐系统将包括数据收集、数据存储、数据处理和推荐服务几个关键部分。 MVP功能…...

Java中的BIO,NIO与操作系统IO模型的区分

Java中的IO模型 Java中的BIO&#xff0c;NIO&#xff0c;AIO概念可以是针对输入输出流&#xff0c;文件&#xff0c;和网络编程等其他IO操作的。 但是主要还是在网络编程通信过程中比较重要&#xff0c;因为很多情况网络编程需要它们来提供更好的性能。 所以本篇文章偏向于网络…...

AI砸掉了这些人的饭碗

在一般打工人眼里&#xff0c;金融圈往往被认为是高端脑力工作者的聚集地&#xff0c;他们工资高&#xff0c;学历高&#xff0c;能力强&#xff0c;轻易无法被替代。 可最近&#xff0c;偏偏一个“非人类”的物种&#xff0c;要来抢他们的饭碗。相关报道称&#xff0c;华尔街…...

端口及对应服务

端口是计算机网络中用于区分不同服务的逻辑概念。每个端口号都是一个16位的数字&#xff0c;其取值范围从0到65535。端口号被分为以下几类&#xff1a; 公认端口&#xff08;Well-known ports&#xff09;&#xff1a;范围从0到1023&#xff0c;这些端口通常被分配给常见的服务…...

剑指offer题解合集——Week7day1[滑动窗口的最大值]

滑动窗口的最大值 题目描述 给定一个数组和滑动窗口的大小&#xff0c;请找出所有滑动窗口里的最大值。 例如&#xff0c;如果输入数组 [2,3,4,2,6,2,5,1] 及滑动窗口的大小 3 &#xff0c;那么一共存在 6 个滑动窗口&#xff0c;它们的最大值分别为 [4,4,6,6,6,5] 注意&am…...

深入解读财报,开启美股投资之旅

投资股票市场&#xff0c;尤其是美股市场&#xff0c;对于许多投资者来说是一项充满挑战的活动。然而&#xff0c;无论投资者是倾向于技术分析还是基本面分析&#xff0c;财报都是他们不可或缺的工具。本文将带领读者深入了解如何通过阅读和分析财报&#xff0c;发现潜在的投资…...

邦芒支招:成功找到工作要掌握的3个知识点

社会进步&#xff0c;企业商业竞争越来越激烈&#xff0c;不管身为一名职场小白或是想调换一下目前的工作的人&#xff0c;都想找到一个称心如意的好工作。拥有以下三点知识点&#xff0c;可以使我们找到工作。 1、迫不得已&#xff0c;别做这件事 拍桌子说“我不开了”的时候有…...

Educational Codeforces Round 168 (Rated for Div. 2)-7.30复盘

A. Strong Password 简单题&#xff0c;找到相同的两个相邻字母之间插一个跟他们不同的大写字母即可 inline void solve(){cin>>s;int id0;char hh ;for(int i1;i<s.size();i){if(s[i-1]s[i]){idi;break;}} for(int i0;i<26;i){if(s[id]!ai&&s[id1]!ai) …...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...