案例 —— 怪物出水

news2025/2/28 23:10:31

一,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分为远近两部分,并创建相应材质;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础教程(三)类和对象、异常处理和模块

8.类与对象 8.1 面向对象 面向对象的三大基本特征: 封装、继承、多态。 在面向对象编程中&#xff0c;封装&#xff08;Encapsulation&#xff09;是一种将数据和操作&#xff08;方法&#xff09;组合在一起的机制。通过封装&#xff0c;我们可以隐藏数据的具体实现细节&am…

鸿蒙系统开发【设备安全服务-应用设备状态检测】安全

设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…

算法训练1

01背包问题 背包状态方程----动态规划 二维dp 使用 f[i][j] max(f[i-1][j] ,f[i-1][j - w[i]] v[i]); 伪代码&#xff1a; int dp[100][100]; void test6() {int n; //装备数量int m; //背包容量int v[105], w[105]; //前面空间&#xff0c;后面价值for (int i 1; i &l…

快速排序(上)

快速排序 前言 快速排序算法是最流行的排序算法,且有充足的理由,因为在大多数情况下,快速排序都是最快的。所以学习快速排序算法十分有必要。当然&#xff0c;既然它这么好&#xff0c;也就不太容易理解。 正文 Hoare版快排 快速排序是Hoare在1962年提出的一种二叉树结构的…

专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用

知足知不足&#xff0c;有为有不为&#xff01;——《心安即是归处》 目录 专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用 专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用

SpringDataJPA(三):多表操作,复杂查询

一、Specifications动态查询 有时我们在查询某个实体的时候&#xff0c;给定的条件是不固定的&#xff0c;这时就需要动态构建相应的查询语句&#xff0c;在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …

Spring Boot 整合 Dubbo3 + Nacos 2.4.0

准备工作&#xff1a;Nacos 一、前置工作 安装Nacos&#xff0c;参考&#xff1a;Nacos 快速开始 此次安装 Nacos 最新版本&#xff1a;2.4.0 单机版 安装教程&#xff1a;Linux 安装 nacos 2.4.0-CSDN博客 二、创建配置文件 创建命名空间 新增配置文件 dubbo:application:i…

关于uniapp的vue2.x版本的路由守卫拦截方案

使用uni-read-pages和uni-simple-router实现&#xff0c;方案思路如下 首先在packge.json把下面两个依赖npm install 一下&#xff0c;我目前是这两个版本&#xff0c;别的版本号没有测试过 "dependencies": {"uni-read-pages": "^1.0.5",&quo…

matplotLib在图中标出最后一个点的值

import matplotlib.pyplot as plt import numpy as np# 生成100个随机数据 data np.random.rand(100)# 绘制数据 plt.plot(data, labelData Points)# 获取最后一个数据点的位置和值 last_x len(data) - 1 last_y data[-1]# 用红圈标出最后一个点 plt.plot(last_x, last_y, r…

《动手做科研》09. 万事具备,只欠行动

地址链接:《动手做科研》09. 万事具备&#xff0c;只欠行动 欢迎加入我的知识星球&#xff0c;定期分享AI论文干货知识&#xff01; 导读: 当你坚持学习到这一步&#xff0c;并且之前的内容都有跟着操作&#xff0c;那么恭喜你&#xff0c;你已经在脑力层面消化了最难的知识&am…

AI表情神同步!LivePortrait安装配置,一键包,使用教程

快手在AI视频这领域还真有点东西&#xff0c;视频生成工具“可灵”让大家玩得不亦乐乎。 现在又开源了一款超好玩的表情同步&#xff08;表情控制&#xff09;项目。 一看这图片&#xff0c;就知道是小视频平台出的&#xff0c;充满了娱乐性。发布没几天就已经有8000Star。 项…

7月Langchain-Chatchat 0.3.1最新 win系统-安装教程,踩坑2小时,5分钟拿去!

Win11安装 langchain-chatchat 0.3.1最新版 1. 虚拟环境安装和python包安装 conda create -n chat310 python3.10#这里很重要 需要先安装cuda版本的torch pip install torch2.3.1 torchvision0.18.1 torchaudio2.3.1 --index-url https://download.pytorch.org/whl/cu121pip…

六种方法实现Python文件之间的互动!

一、exec() 首先&#xff0c;我们生成一个名为**“file1.py”的python文件**&#xff1a; # file1.py print("Hello from file1!")然后&#xff0c;再生成一个名为“main.py”的python文件&#xff1a; # main.py filename file1.py with open(filename) a…

vlunstack-1(横向,phpmyadmin拿shell,xycms拿shell,cs和msf联动)

Vulnstack-1 内网环境搭建 环境配置&#xff1a; 靶机介绍 包括win7的web端&#xff0c;还有win2003为域成员&#xff0c;域控为win2008 win7内网ip&#xff1a;192.168.157.153 外网ip&#xff1a;192.168.52.143 域成员 win2003 ip 192.168.52.141 域控 win2008 ip 192.168…

基于WEB的仓库管理系统的设计与实现

点击下载源码 基于WEB的仓库管理系统的设计与实现 摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展&#xff0c;改革开放的不断深入&#xff0c;企业要想在激烈的市场竞争中立于不败之地&#xff0c;要想继续的发展与生存&#xff0…

IDEA报错无效的目标发行版:17

问题描述&#xff1a;由于要接手另外一个项目&#xff0c;之前项目用的jdk17&#xff0c;新项目用的jdk8。需要切换jdk&#xff0c;idea切换之后启动报错 检查之后发现是没切换完全&#xff0c;一共需要切换如下几个地方&#xff1a; 切换前提&#xff1a;电脑上安装了多个版本…

八戒会修特斯拉 气囊电脑 rcm故障代码RCM2_a442_presFrntRDoorOpen

--------------------------------------------------------------------------------------------------------------------------------- -------------------------------------- 作者&#xff1a; 八戒会修特斯拉 -------------------------…

手机在网状态接口如何对接?(一)

一、什么是手机在网状态&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网状态&#xff0c;返回内容有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态使用场景&#xff1f; 1.信贷审核&#…

MySQL是怎样运行的——第2章 启动选项和系统变量

文章目录 2.1 在命令行上使用选项2.1.1 选项的长形式和短形式 2.2 配置文件中使用选项2.2.1 配置文件的路径2.2.2 配置文件的内容2.2.3 配置文件的优先级 2.3 命令行和配置文件中启动选项的区别2.4 系统变量2.4.1 简介2.4.2 查看系统变量2.4.3 设置系统变量2.4.4 启动选项和系统…

Java原生序列化与反序列化、URLDNS

配套课件地址&#xff1a;https://blog.csdn.net/mocas_wang/article/details/10762101 1. 概述 1.1 序列化与反序列化 序列化是指把Java代码转化为字节序列的过程&#xff1b;而反序列化时指把字节序列恢复为Java对象的过程。序列化分为两大部分&#xff1a;序列化和反序列化…