From 9657a30340990d64d70d4609c3cab4e1a23ecf80 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:23:23 +0000 Subject: [PATCH] deploy: d83dfe49e2ac17ade963cf612d829641b91bdd20 --- 404.html | 4 ++-- Eigen/BiCGStab.html | 4 ++-- Eigen/DebugEigen.html | 4 ++-- Eigen/Eigen-install.html | 4 ++-- Eigen/Eigen_vector.html | 4 ++-- Eigen/SparseMatrix-Storage.html | 4 ++-- Houdini/Houdini-learn.html | 4 ++-- Houdini/Houdini-learn/control-point.html | 4 ++-- Houdini/Houdini-render-fluid.html | 6 +++--- Houdini/ice-cream.html | 4 ++-- Houdini/karma-mat.html | 4 ++-- Houdini/principled-shader.html | 4 ++-- Houdini/render-fluid-advanced-ysy.html | 4 ++-- Houdini/render-fluid-karma.html | 4 ++-- Houdini/vellum-first/vellum-first.html | 4 ++-- Houdini/write_tet.html | 4 ++-- OpenGL/config.html | 4 ++-- OpenVDB/first-openvdb.html | 4 ++-- SPlisHSPlaSH/Houdini-exporter.html | 4 ++-- SPlisHSPlaSH/Interactive.html | 4 ++-- SPlisHSPlaSH/get_mouse.html | 4 ++-- SPlisHSPlaSH/import-obj-bug.html | 4 ++-- Scholars.html | 4 ++-- Treasures.html | 4 ++-- assets/js/ef6b1661.75d95d95.js | 1 - assets/js/ef6b1661.ce03ddf2.js | 1 + .../{runtime~main.ec51748e.js => runtime~main.dfce73e0.js} | 2 +- blog.html | 4 ++-- ...ty\350\257\273\344\271\246\347\254\224\350\256\260.html" | 4 ++-- blog/archive.html | 4 ++-- blog/auto-deploy.html | 4 ++-- blog/deploy.html | 4 ++-- blog/how-to-docusaurus.html | 4 ++-- blog/paste-image.html | 4 ++-- blog/tags.html | 4 ++-- blog/tags/docusaurus.html | 4 ++-- blog/tags/front-end.html | 4 ++-- blog/tags/github.html | 4 ++-- blog/tags/markdown.html | 4 ++-- blog/tags/test.html | 4 ++-- blog/tags/vs-code.html | 4 ++-- blog/tags/welcome.html | 4 ++-- blog/test.html | 4 ++-- cmake/CMakePresets.html | 4 ++-- cmake/ExternalProject_Add.html | 4 ++-- cmake/IMPORTED.html | 4 ++-- cmake/add_custom_command.html | 4 ++-- cmake/build-windows.html | 4 ++-- cmake/ctest-googletest.html | 4 ++-- cmake/find_package.html | 4 ++-- cmake/install.html | 4 ++-- cmake/organize-libraries.html | 4 ++-- cmake/print_config.html | 4 ++-- cmake/test.html | 4 ++-- cmake/understanding-INTERFACE.html | 4 ++-- cmake/vcpkg-manifest.html | 4 ++-- cmake/vscode-cmake-tools.html | 4 ++-- compute-graphics/FEM.html | 4 ++-- compute-graphics/quternion.html | 4 ++-- cpp/assert.html | 4 ++-- cpp/chrono.html | 4 ++-- cpp/data_transfer_OOP.html | 4 ++-- cpp/errors.html | 4 ++-- cpp/fileDialog.html | 4 ++-- cpp/getRAM.html | 4 ++-- cpp/learn-std-thread.html | 4 ++-- cpp/mordenCppTut.html | 4 ++-- cpp/return_multiple_vals.html | 4 ++-- cpp/structured_bind.html | 4 ++-- cpp/variant and visit.html | 4 ++-- docusaurus.html | 4 ++-- docusaurus/deploy/auto-deploy.html | 4 ++-- docusaurus/deploy/deploy.html | 4 ++-- docusaurus/first-docusaurus/how-to-docusaurus.html | 4 ++-- docusaurus/markdown-paste/paste-image.html | 4 ++-- ffmpeg/cut-video.html | 4 ++-- ffmpeg/ffmpeg-GUI.html | 4 ++-- ffmpeg/pic2video.html | 4 ++-- git/big_files.html | 4 ++-- git/config.html | 4 ++-- git/git-diff.html | 4 ++-- ...15\345\215\225\344\270\252\346\226\207\344\273\266.html" | 4 ++-- git/merge-strategy.html | 4 ++-- index.html | 4 ++-- markdown-page.html | 4 ++-- math/tensor.html | 4 ++-- partio/partio-2.html | 4 ++-- partio/partio-3.html | 4 ++-- partio/partio-intro.html | 4 ++-- pybind11/first.html | 4 ++-- python/conda-setup.html | 4 ++-- python/cut-video.html | 4 ++-- python/debug-python-cpp.html | 4 ++-- python/distribution.html | 4 ++-- python/pre-commit.html | 4 ++-- python/proxy.html | 4 ++-- python/table-of-cotents.html | 4 ++-- readthedoc.html | 4 ++-- search.html | 4 ++-- tags.html | 4 ++-- tags/docusaurus.html | 4 ++-- tags/front-end.html | 4 ++-- tags/github.html | 4 ++-- tags/markdown.html | 4 ++-- tags/vs-code.html | 4 ++-- taichi/SPH_Taichi.html | 4 ++-- taichi/SPH_Taichi/argparse.html | 4 ++-- taichi/SPH_Taichi/read-json.html | 4 ++-- taichi/SPH_Taichi/voxelize.html | 4 ++-- taichi/build-from-source.html | 4 ++-- taichi/data_oriented.html | 4 ++-- taichi/ouput-video.html | 4 ++-- taichi/shape.html | 4 ++-- taichi/snode.html | 4 ++-- taichi/taichi-debug.html | 4 ++-- zeno/debug.html | 4 ++-- zeno/subgraph.html | 4 ++-- zeno/write-node-as-source.html | 4 ++-- zeno/zeno_install.html | 4 ++-- zeno/zeno_test.html | 4 ++-- zeno/zeno_water_render.html | 4 ++-- .../IterMethods.html" | 4 ++-- 122 files changed, 241 insertions(+), 241 deletions(-) delete mode 100644 assets/js/ef6b1661.75d95d95.js create mode 100644 assets/js/ef6b1661.ce03ddf2.js rename assets/js/{runtime~main.ec51748e.js => runtime~main.dfce73e0.js} (99%) diff --git a/404.html b/404.html index 3512a625..5462ab83 100644 --- a/404.html +++ b/404.html @@ -10,13 +10,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/Eigen/BiCGStab.html b/Eigen/BiCGStab.html index be89bbf0..b89f653f 100644 --- a/Eigen/BiCGStab.html +++ b/Eigen/BiCGStab.html @@ -10,14 +10,14 @@ - +
Skip to main content

用Eigen求解BiCGStab

对应的github repo

https://github.com/chunleili/learn-eigen

主要代码

main.cpp

#include <Eigen/Sparse>
#include <unsupported/Eigen/SparseExtra>
#include <iostream>
using namespace Eigen;


int main()
{
VectorXd x, b;
SparseMatrix<double> A;

/* ... fill A and b ... */
Eigen::loadMarket(A, "e05r0500.mtx");
Eigen::loadMarketVector(b, "e05r0500_rhs1.mtx");

std::cout<<"A: "<<A.rows()<<" "<<A.cols() <<std::endl;
std::cout<<"b: "<<b.rows()<<" "<<b.cols() <<std::endl;

BiCGSTAB<SparseMatrix<double>, IncompleteLUT<double>> solver;
solver.compute(A);
x = solver.solve(b);
std::cout << "#iterations: " << solver.iterations() << std::endl;
std::cout << "estimated error: " << solver.error() << std::endl;
std::cout<< "solver info: "<< solver.info() <<std::endl;
std::cout<< "Eigen::Success "<< Eigen::Success<<std::endl;

}
  • loadMarket用来读取market matrix格式的矩阵数据
  • BiCGSTAB<SparseMatrix<double>, IncompleteLUT<double>> solver;定义了一个求解器。第一 个模板参数是矩阵的类型,第二个是PrecondistionerPreconditioner很重要,定义得好可以使收敛速度快几万倍。
  • solver.compute()x=solver.solve(b)就是实际计算的步骤了
  • 最后对比Eigen::Success和solver.info()来比较是否求解成功
- + \ No newline at end of file diff --git a/Eigen/DebugEigen.html b/Eigen/DebugEigen.html index a4d3eb51..cce5355a 100644 --- a/Eigen/DebugEigen.html +++ b/Eigen/DebugEigen.html @@ -10,7 +10,7 @@ - + @@ -22,7 +22,7 @@ (如果你git clone过Eigen文件夹,就发现它就在Eigen源码的Debug目录下面)

然后放到下面的目录即可 %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers

(其中%VSINSTALLDIR%是Visual studio的安装目录)

这是现在的结果: 在这里插入图片描述

- + \ No newline at end of file diff --git a/Eigen/Eigen-install.html b/Eigen/Eigen-install.html index 92a34ec0..18170c82 100644 --- a/Eigen/Eigen-install.html +++ b/Eigen/Eigen-install.html @@ -10,14 +10,14 @@ - +
Skip to main content

Mac/Linux配置Eigen

使用的IDE是VS Code 我这里用的是mac,但对Linux也成立

  1. 直接把解压好的Eigen丢到/usr/local/include下面(注意名字就是Eigen)
  2. CMakeLists.txt里面加上
include_directories("/usr/local/include/")

源文件

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(test)
include_directories("/usr/local/include/")
add_executable(main main.cpp)

main.cpp

#include <Eigen/Eigen>
using namespace std;

int main()
{
cout<<"hello\n";
Eigen::Matrix<int,2,2> a;
a<<1,2,3,4;
cout<<a;
cout << endl;
}

输出

hello
1 2
3 4
- + \ No newline at end of file diff --git a/Eigen/Eigen_vector.html b/Eigen/Eigen_vector.html index c6dda61a..b677c4f2 100644 --- a/Eigen/Eigen_vector.html +++ b/Eigen/Eigen_vector.html @@ -10,14 +10,14 @@ - +
Skip to main content

用Eigen的Vector替代std::vector实现真正数学意义上的向量

三维点坐标

单个点 vec3f

单个点直接使用Eigen::Vector3f即可,记住要include Eigen/Dense

为了方便使用,我们在Common中给他起个别名vec3f

common.h

#include <vector>
#include <iostream>
#include <Eigen/Dense>

using vec3f = Eigen::Vector3f;

main.cpp

#include "Common.h"

int main()
{
std::vector<vec3f> pos_in{{1.1,2,3},{3,4,5}};
std::cout<<pos_in[1]<<std::endl;
}

output:

3
4
5

以后凡是使用三维点的地方,都只需要#include "Common.h",然后利用vec3f即可。可以用std::cout来打印,因为Eigen库里面实现了std空间中cout模版的特化。

但是目前不可以进行加减等运算,这是因为我们目前使用的std::vector不支持这些运算。

显然我们更希望管理一个点集合,这样才能进行加减。

点集Points

我们定义了一系列的点集. 主要是套用 Eigen::Matrix<vec3f, Eigen::Dynamic, 1>

同样的,我们可以在Common中起一个别名为Points

Common.h

#include <vector>
#include <iostream>
#include <Eigen/Dense>

using vec3f = Eigen::RowVector3f;
using std::vector;
using Points = Eigen::Matrix<vec3f, Eigen::Dynamic, 1>

main.cpp

#include "Common.h"
using namespace Eigen;
int main()
{
int numParticles = 10;
Points pos_in(numParticles);

pos_in[0] = vec3f {1,2,3};
pos_in[1] = vec3f {1.1,4,5};

Points pos_in2(numParticles);
pos_in2[0] = vec3f {2,2,3};
pos_in2[1] = vec3f {2.1,4,5};

Points res(numParticles);
res = pos_in + pos_in2;
for(auto&& x:res)
std::cout<<x<<std::endl;
}

打印的时候会发现所有的数值都是竖着打印的,这样很难看清哪三个是一个点。因此我们不妨在Common.h中将vec3f改为行向量.

using vec3f = Eigen::RowVector3f;

output

3 4 6
3.2 8 10
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

两点距离

使用.norm()方法可以计算两个点的距离。

    vec3f distVec = pos_in[1] - pos_in2[1];
float dist = distVec.norm();
std::cout<<distVec<<std::endl;
std::cout<<dist<<std::endl;

其中

    pos_in[0] = vec3f {1,2,3};
pos_in[1] = vec3f {1.1,4,5};

pos_in2[0] = vec3f {2,2,3};
pos_in2[1] = vec3f {2.1,5,5};

output

-1 -1  0
1.41421
- + \ No newline at end of file diff --git a/Eigen/SparseMatrix-Storage.html b/Eigen/SparseMatrix-Storage.html index 6e09a123..4f0222fb 100644 --- a/Eigen/SparseMatrix-Storage.html +++ b/Eigen/SparseMatrix-Storage.html @@ -10,13 +10,13 @@ - +
Skip to main content

3.1稀疏矩阵操作

参考: https://eigen.tuxfamily.org/dox-devel/group__TutorialSparse.html

稀疏矩阵就是绝大部分元素都为0的矩阵。

稀疏矩阵与稠密矩阵不仅数据结构上不同,可用的算法也是不同的。

我们首先看数据结构

数据结构

假设我们要存储如下矩阵

0   3   0   0   0
22 0 0 0 17
7 5 0 1 0
0 0 0 0 0
0 0 14 0 8

采用压缩列存储方案(Compressed Column Storage)存储。这点Youssad的Iterative Methods一书中有更详尽的描述。

我们需要存储的是如下四个数组:

  1. 值 Value
  2. 行号 InnerIndices
  3. 每列起始索引 OuterStarts
  4. 该列非0值个数 InnerNNZs

注:

  • 在Eigen中,默认为列主序,inner代表的是一列,故Inner Indices是行号。
  • NNZ代表Number of Non-Zeros
  • OuterStarts存储的起始索引是对应Value和InnerIndices中的索引,而非原本矩阵的索引。

故实际存储的数据为

Values:         22  7   _   3   5   14  _   _   1   _   17  8
InnerIndices: 1 2 _ 0 2 4 _ _ 2 _ 1 4
OuterStarts: 0 3 5 8 10 12
InnerNNZs: 2 2 1 1 2

例子:

一列一列地看

  • 第一列:
    • 第一列有22和7两个非零值,22对应行号为1,7对应行号为2。
    • 第一列的第一个元素22,在Values和InnerIndices数组中的索引是0,故OuterStarts=0.
    • 这一列非零数InnerNNZs为2,故从22到7是第一列。
  • 第二列
    - 第二列有3和5两个非零值,3对应的行号为0,5对应行号为2 
    - 第二列的第一个元素3,在Values和InnerIndices数组中的索引是3,故OuterStarts=3.
    - 这一列非零数InnerNNZs为2,故从3到5是第二列。
    ...

我们注意到有些多余的空间。这是为了将来插入新元素时快速插入留的空位。

可以采用SparseMatrix::makeCompressed()来释放多余的空间。这种叫做压缩模式

释放之后存储的数组为

Values:         22  7   3   5   14  1   17  8
InnerIndices: 1 2 0 2 4 2 1 4
OuterStarts: 0 2 4 5 6 8

我们注意到,由于不再有多余的空间,因此也不需要存储InnerNNZs了。因为InnerNNZs[j] == OuterStarts[j+1] - OuterStarts[j]

另外,Eigen大多数与外部库交互的包装类,返回的都是压缩模式的矩阵。但是一旦我们插入新的元素,就自动会转化为非压缩模式。

- + \ No newline at end of file diff --git a/Houdini/Houdini-learn.html b/Houdini/Houdini-learn.html index 34c3950b..f0fb2972 100644 --- a/Houdini/Houdini-learn.html +++ b/Houdini/Houdini-learn.html @@ -10,7 +10,7 @@ - + @@ -40,7 +40,7 @@ 一种方法是点击节点的info。比如点击scatter节点的info.

image

info中显示了当前有三个属性,Cd,P 和N。分别代表颜色、位置和法向

还有一种方法是利用Geometer Spreadsheet

你会发现每个图元的数值都清晰可见

image

最后也是新建一个null节点,命名为sprinkles_out

回到obj根目录,大功告成

image

动力学:空中撒点

现在让我们学习如何从空中撒糖针,然后粘到酥皮上。

首先建立一个geo节点,重命名为dynamic_sprinkles

进入节点后,增加一个平面grid,并将其放置在空中

然后增加transform,向左上方平移。这个平面相当于是生成撒点的源。 image

接着是k帧。(注意:我当时点了好几次都不行,可能是houdini的bug,重启houdini就好了)

在translate的数值上点击alt+鼠标左键

会高亮为绿色

image

这就是设置了一个key帧,下面也会同步显示出来一个绿色的钥匙标志

拖动时间轴到230帧。这时候会变蓝色。

image

然后把平移数值改成另一个位置。这时候会变黄色。在此点击alt+鼠标左键,就在230帧又key了一帧。又变为绿色。

key帧

这下动画就做好了。

接着是如何撒糖针.

首先创建一个POP network节点。POP代表Particle Operator (注意不要和DOP弄混了,POP可以看做是DOP的一种配置好了的“套餐”。所以它的类型还是DOP NetWork)

image

双击进入这个节点

image

- + \ No newline at end of file diff --git a/Houdini/Houdini-learn/control-point.html b/Houdini/Houdini-learn/control-point.html index 671ceb2a..9b7eb7fd 100644 --- a/Houdini/Houdini-learn/control-point.html +++ b/Houdini/Houdini-learn/control-point.html @@ -10,7 +10,7 @@ - + @@ -21,7 +21,7 @@ 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

- + \ No newline at end of file diff --git a/Houdini/Houdini-render-fluid.html b/Houdini/Houdini-render-fluid.html index 6f48a59c..5b1a94cd 100644 --- a/Houdini/Houdini-render-fluid.html +++ b/Houdini/Houdini-render-fluid.html @@ -10,12 +10,12 @@ - +
-
Skip to main content

如何使用Houdini渲染流体?

版本:Houdini19.5 其他版本应该也差不多

渲染器与材质是直接关联的,不同渲染器有不同的灯光、材质。

我们首先讲解如何利用Houdini自带的Mantra渲染(CPU渲染,较慢),然后讲解更快的第三方渲染器Redshift(GPU渲染,较快)。

但是,在此之前,有一些通用步骤,即读取流体粒子帧数据和表面重建。

Houdini基本常识

Houdini中视角移动的方式

Esc进入视图视角

然后左键旋转,滚轮/右键拉近拉远,中键平移

H键重置视角

G键以某个物体为中心重置视角

Houdini 节点

节点是Houdini核心中的核心!是第一公民。

这也是为什么Houdini被称为程序化建模软件。

Houdini中所有操作都可以作为一个节点。

在Network视图中用 Tab键创建节点。

读取数据和流体表面重建

粒子位置数据

首先,我们准备粒子数据。我这里的输入数据是从taichi生成的mpm3d模拟得到的序列(默认是ply格式)

如果是obj格式的话,它里面只有一些点的位置而已。 +

如何使用Houdini渲染流体?

版本:Houdini19.5 其他版本应该也差不多

如果这里的图挂了,请看csdn

渲染器与材质是直接关联的,不同渲染器有不同的灯光、材质。

我们首先讲解如何利用Houdini自带的Mantra渲染(CPU渲染,较慢),然后讲解更快的第三方渲染器Redshift(GPU渲染,较快)。

但是,在此之前,有一些通用步骤,即读取流体粒子帧数据和表面重建。

Houdini基本常识

Houdini中视角移动的方式

Esc进入视图视角

然后左键旋转,滚轮/右键拉近拉远,中键平移

H键重置视角

G键以某个物体为中心重置视角

Houdini 节点

节点是Houdini核心中的核心!是第一公民。

这也是为什么Houdini被称为程序化建模软件。

Houdini中所有操作都可以作为一个节点。

在Network视图中用 Tab键创建节点。

读取数据和流体表面重建

粒子位置数据

首先,我们准备粒子数据。我这里的输入数据是从taichi生成的mpm3d模拟得到的序列(默认是ply格式)

如果是obj格式的话,它里面只有一些点的位置而已。 例如

v 1.00718 0.992176 1.00718
v 1.09713 0.992118 1.00712
v 1.2004 0.992209 1.00721
v 1.29996 0.992199 1.0072
v 1.4 0.9922 1.0072
v 1.5 0.9922 1.0072
v 1.6 0.9922 1.0072
v 1.7 0.9922 1.0072
v 1.8 0.9922 1.0072
v 1.9 0.9922 1.0072
v 2 0.9922 1.0072
v 2.1 0.9922 1.0072
v 2.2 0.9922 1.0072
v 2.3 0.9922 1.0072
v 2.4 0.9922 1.0072
v 2.5 0.9922 1.0072
v 2.6 0.9922 1.0072
...

在这里插入图片描述

读取数据到houdini

我们新建一个geo节点,重命名为read_data 在这里插入图片描述 双击进入该节点

然后新建file节点,选择数据序列

在这里插入图片描述

我们现在得到的就是一堆点。

重建表面

接下来重建表面。使用particle fluid surface这个节点。调整particle seperation。 @@ -38,7 +38,7 @@ 在这里插入图片描述

注意:你可以自己指定保存路径和渲染的范围。我这里只是渲染一帧。

Mantra是CPU渲染,所以很慢。而且会占满你的整个CPU(如图所示。一张图我已经渲染了1分17秒才进度87%,而且CPU满载,内存消耗1.11GB)

在这里插入图片描述

如果你等不及的话,可以先保存一下没渲染完的截图。如下所示。

在这里插入图片描述 至此,完整的渲染流程结束!

结果如图: 在这里插入图片描述

- + \ No newline at end of file diff --git a/Houdini/ice-cream.html b/Houdini/ice-cream.html index 8960d64a..16ba258b 100644 --- a/Houdini/ice-cream.html +++ b/Houdini/ice-cream.html @@ -10,7 +10,7 @@ - + @@ -30,7 +30,7 @@ 这里为了区分三个冰激凌球,还做了getgroupid的attribute wrangle。

对应的代码为

int gid=0;
string mp = s@shop_materialpath;

if(mp == "/mat/ice1")
{
gid = 1;
}
else if(mp == "/mat/ice2")
{
gid = 2;
}
else if(mp == "/mat/ice3")
{
gid = 3;
}

i@groupid = gid;

s@shop_materialpath也是从attrib promote提升过来的。

最后输出的数据为 在这里插入图片描述 这些数据就是给模拟中输入的

- + \ No newline at end of file diff --git a/Houdini/karma-mat.html b/Houdini/karma-mat.html index 5fdf7094..3c7521c2 100644 --- a/Houdini/karma-mat.html +++ b/Houdini/karma-mat.html @@ -10,7 +10,7 @@ - + @@ -18,7 +18,7 @@
Skip to main content

karma-mat

两步走:

  1. material library节点导入材质到USD
  2. assign material节点赋予材质到具体的物体

导入材质

一个很常见的混淆是Material VOP和Material Path

前者是用来导入旧的材质的(除了MTLX材质以外的任何材质)

后者是专门导入MTLX新材质的 在这里插入图片描述

赋予材质 在这里插入图片描述

至于为什么要分这两步,并且还要分开旧材质和新材质呢?

这是因为USD的文件存储结构和旧的材质旧不太一样。所以任何旧的东西(包括材质、表面等)都要先导入到USD当中,相当于做一次格式转换,然后后续使用的时候,都要使用转换后的。也就是说,USD目前是出于一种半封闭状态的,其他的不太和它兼容,要想使用,就得先转换一下。

- + \ No newline at end of file diff --git a/Houdini/principled-shader.html b/Houdini/principled-shader.html index d3a6b362..20398b75 100644 --- a/Houdini/principled-shader.html +++ b/Houdini/principled-shader.html @@ -10,13 +10,13 @@ - +
Skip to main content

Houdini Principled shader几个最重要的参数讲解

Principled shader 是迪士尼推出的原理化着色器。因为它大而全,所以几乎把世界上所有的材质都涵盖在内了。所有的DCC软件都支持这个shader。blender之中叫原理化BSDF。Houdini则叫Principled Shader,标志就是迪士尼的LOGO。

在这里插入图片描述

principled shader有一大堆的参数,我们一开始不必一一知晓。只需要弄明白几个最重要的参数即可。

  1. base color是乘法关系。如果你的geo本来有颜色,shader的颜色会乘上去。如果你不希望这样,使用纯白色的shader
  2. 要表现透明材质(如水和玻璃等)时,不要用opacity。而是要用transparency。opacity只是让你的shader无效化(变淡)。
  3. 如果不是渲染金属材质,不要动metallic。metallic要么0,要么1。调到一半会导致一半是金属,一半是其他材质的奇怪景象。
  4. 最常用的参数是调整roughness。这会让你的模型变得更加明亮。
  5. 使用texture来赋予纹理等。注意base color也会乘上去。
  6. emission用来调发光物体。

在这里插入图片描述

- + \ No newline at end of file diff --git a/Houdini/render-fluid-advanced-ysy.html b/Houdini/render-fluid-advanced-ysy.html index 3e280fae..4d64a049 100644 --- a/Houdini/render-fluid-advanced-ysy.html +++ b/Houdini/render-fluid-advanced-ysy.html @@ -10,7 +10,7 @@ - + @@ -25,7 +25,7 @@ 在opt/hfs19.0.383 目录下 sudo su source houdini.uninstall

OICO 颜色管理设置

在这里插入图片描述

将渲染生成的exr图片序列输入,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击render输出图片颜色管理修正后的exr文件序列

在这里插入图片描述

将Exr多个图片合成视频

  1. 安装Adobe_After_Effects2022。
  1. 新建项目。

    在这里插入图片描述

  2. 导入所有Exr文件。

    在这里插入图片描述

  3. 选中所有导入的文件,拖入下方红框内,点击确定。

在这里插入图片描述

  1. 点击渲染队列,然后按Ctrl+M。

    在这里插入图片描述

  2. 设置输出参数后点击渲染即可得到视频文件。

在这里插入图片描述

- + \ No newline at end of file diff --git a/Houdini/render-fluid-karma.html b/Houdini/render-fluid-karma.html index 683ad7b6..0db987b1 100644 --- a/Houdini/render-fluid-karma.html +++ b/Houdini/render-fluid-karma.html @@ -10,7 +10,7 @@ - + @@ -20,7 +20,7 @@ Karma不支持在Render view中查看渲染结果

但是我们可以稍加改造,让这个scence view也内嵌显示。以下是方法:

在上面的地址栏右键 edit path as text 在这里插入图片描述

然后复制

同理edit path as text 然后把刚才的地址复制上去,再点击钉子,定住窗口。

在这里插入图片描述

这样,你就把刚才的窗口内嵌成标签页了。你在这里可以更改IPR(交互式渲染)的窗口,也就是用Houdini GL(openGL)还是Karma 在这里插入图片描述

必须注意的一点是:

在这个Karma的Scene view中不支持更改相机视角!

你必须在原本的Scene View中调节视角。

同时,Karma的分辨率与相机是不同步的!你必须手动调节!

- + \ No newline at end of file diff --git a/Houdini/vellum-first/vellum-first.html b/Houdini/vellum-first/vellum-first.html index c8855c7f..d0ae2981 100644 --- a/Houdini/vellum-first/vellum-first.html +++ b/Houdini/vellum-first/vellum-first.html @@ -10,13 +10,13 @@ - +
Skip to main content

用Houdini 创建第一个软体模拟

Houdni之中的vellum是利用PBD来进行仿真的工具包。可以仿真布料、流体、软体、头发等。我们首先介绍最简单的软体仿真。

step1: 创建一个geo节点,并进入geo节点

创建节点

然后双击进入geo

step2: 创建一个球体,然后改变其primitive type 为polygon

将其大小改小0.1倍,然后向上平移0.5

step3: 创建vellum configure ballon和 vellum solver

创建config ballon(这是houdini预先配置好的设置,相当于一个example)

然后创建vellum solver并将其连接

注意把sphere也连接好。最后节点如图

step4: 为solver设置地板碰撞

play

点击左下角的play

注意点击Real time toggle, 否则会按照模拟速度来运行,这就会太快,看起来不方便。

最终效果

可以看到软体

- + \ No newline at end of file diff --git a/Houdini/write_tet.html b/Houdini/write_tet.html index 305eebda..4945288b 100644 --- a/Houdini/write_tet.html +++ b/Houdini/write_tet.html @@ -10,7 +10,7 @@ - + @@ -24,7 +24,7 @@ 当前单元的编号 四面体第1个顶点的编号 四面体第2个顶点的编号 四面体第3个顶点的编号 四面体第4个顶点的编号

Houdini中使用python节点写出

在这里插入图片描述

各个节点的作用如下所示:

脚本的内容在附录。

在这里插入图片描述

在这里,我们要讲解一下houdini中的数据。

分为四种:

一个常见的误区是混淆points和vertices。points完全是空间中真实存在的一个点。具有位置速度等信息。但是vertices可以认为是对顶点编号的reference。例如一个正方体的角点,可以被三个面同时共享。他都是同一个几何点,但是却有三个不同的vertices归属于不同的面。这样的好处是保证了唯一性:一个point只对应一个vertex,一个vertex只被一个primitive所包含。

这里要注意的是,vertices中存的是什么完全取决于图元是什么。假如是个四面体,就可以是四个顶点编号。假如是三角形,就是三角形三个点编号。

在这里插入图片描述

正是由于三角形与四面体都被存在primitive中,所以我们才用split将其分开。方面后面输出。

注意在tetconform中勾选add surface triangles才会输出三角面。

在这里插入图片描述

最后稍微讲解下python节点中的脚本。

请注意,houdini中的python是完全面向对象的,因此万物皆为对象。

我们仅以write_nodes为例。API请查阅Houdini的官方文档。

import hou # houdini包
geo = hou.pwd().geometry() #当前python节点的第一个输入端口所对应的对象,是个SOP对象
print(geo)

import os
path = hou.hipFile.path() #hip文件所在的位置
path = os.path.dirname(path) + "/models/bunny2000_try.node"
print(f"path is {path}")

pts = geo.points() # 获取SOP对象上的point对象列表(是个list)
numpts = len(pts)
print("numpts:", numpts)

f = open(path, 'w')
f.write(str(numpts)+" 3 0 0\n")
for i in range(numpts):
pt = pts[i]
pos = pt.position() #获取point对象的position属性,就是位置
f.write(" "+str(i)+" "+str(pos[0])+" "+str(pos[1])+" "+str(pos[2])+"\n")
f.close()

完毕。

(非必要内容)在taichi中ggui显示

请见 https://github.com/chunleili/learn-meshtaichi 中的tut03

其中主要就是多写了directly_import_surf这个函数而已。

网格文件也请见这里。

结果如图

在这里插入图片描述

附录1:Houdini中python节点的脚本内容

write_faces

import hou
geo = hou.pwd().geometry()
print(geo)

import os
path = hou.hipFile.path()
path = os.path.dirname(path) + "/models/bunny2000_try.face"
print(f"path is {path}")


# write surface triangles
tris = geo.prims()
num_tris = len(tris)
f = open(path[:-4]+"face", 'w')
f.write(str(num_tris)+" 0\n")
for i in range(num_tris):
tri = tris[i].points()
f.write(" "+str(i)+" "+str(tri[0].number())+" "+str(tri[1].number())+" "+str(tri[2].number())+ " -1" +"\n")
f.close()

write_nodes

import hou
geo = hou.pwd().geometry()
print(geo)

import os
path = hou.hipFile.path()
path = os.path.dirname(path) + "/models/bunny2000_try.node"
print(f"path is {path}")

pts = geo.points()
numpts = len(pts)
print("numpts:", numpts)

f = open(path, 'w')
f.write(str(numpts)+" 3 0 0\n")
for i in range(numpts):
pt = pts[i]
pos = pt.position()
f.write(" "+str(i)+" "+str(pos[0])+" "+str(pos[1])+" "+str(pos[2])+"\n")
f.close()

write_eles

import hou
geo = hou.pwd().geometry()
print(geo)

import os
path = hou.hipFile.path()
path = os.path.dirname(path) + "/models/bunny2000_try.ele"
print(f"path is {path}")


eles = geo.prims()
num_eles = len(eles)
print("num_eles:", num_eles)
f1 = open(path[:-4]+".ele", 'w')
f1.write(str(num_eles)+" 4 0\n")
for i in range(num_eles):
ele = eles[i].points()
f1.write(" "+str(i)+" "+str(ele[0].number())+" "+str(ele[1].number())+" "+str(ele[2].number())+" "+str(ele[3].number())+"\n")
f1.close()

附录2: houdni的geo文件解析转换为tetgen格式四面体的脚本

import os
import json

def read_geo(from_path):
with open(from_path,'r') as f:
data=json.load(f)

# 读取顶点个数等信息
pointcount=data[5] # 点个数
vertexcount=data[7]
primitivecount=data[9] # 四面体个数

# 读取四面体的索引
topology = data[13]
pointref = topology[1]
tet_indices = pointref[1]# 四面体的索引,是一个一维数组

# 读取顶点的位置
attributes = data[15]
pointattributes = attributes[1]
positions = pointattributes[0][1][7][5]

return tet_indices,positions, pointcount,vertexcount,primitivecount


def write_tetgen(tet_indices,positions, pointcount, primitivecount,to_path, gen_face=False):
# 写入tetgen的node文件(也就是顶点的位置)
node_file = to_path+".node"
if(os.path.exists(node_file)):
print("remove file: "+node_file)
os.remove(node_file)
with open(node_file,'w') as f:
f.write(str(pointcount)+" 3 0 0\n")
for i in range(pointcount):
f.write(" "+str(i)+" "+str(positions[i][0])+" "+str(positions[i][1])+" "+str(positions[i][2])+"\n")

# 写入tetgen的ele文件(也就是四面体的索引)
ele_file = to_path+".ele"
if(os.path.exists(ele_file)):
print("remove file: "+ele_file)
os.remove(ele_file)
with open(ele_file,'w') as f:
f.write(str(primitivecount)+" 4 0\n")
for i in range(primitivecount):
f.write(" "+str(i)+" "+str(tet_indices[i*4])+" "+str(tet_indices[i*4+1])+" "+str(tet_indices[i*4+2])+" "+str(tet_indices[i*4+3])+"\n")

# 写入tetgen的face文件(也就是三角面的索引)
face_file = to_path+".face"
if(os.path.exists(face_file)):
print("remove file: "+face_file)
os.remove(face_file)

if(gen_face):
# 由于本身没有三角面,所以如果想生成face,就自己遍历一遍
facecount = 0
for i in range(primitivecount):
facecount += 4
with open(face_file,'w') as f:
f.write(str(facecount)+" 0\n")
face_i = 0
for i in range(primitivecount):
f.write(" "+str(face_i)+" " + str(tet_indices[i*4])+" "+str(tet_indices[i*4+2])+" "+str(tet_indices[i*4+1])+" -1\n")
face_i += 1
f.write(" "+str(face_i)+" " + str(tet_indices[i*4])+" "+str(tet_indices[i*4+3])+" "+str(tet_indices[i*4+2])+" -1\n")
face_i += 1
f.write(" "+str(face_i)+" " + str(tet_indices[i*4])+" "+str(tet_indices[i*4+1])+" "+str(tet_indices[i*4+3])+" -1\n")
face_i += 1
f.write(" "+str(face_i)+" " + str(tet_indices[i*4+1])+" "+str(tet_indices[i*4+2])+" "+str(tet_indices[i*4+3])+" -1\n")
face_i += 1

print("\n\nwrite tetgen file success! \nnode file: "+node_file+"\nele file: "+ele_file)


if __name__ == '__main__':
from_path="models/bunny1000_dilate/bunny1000_dilate.geo"
to_path=from_path[:-4]

tet_indices,positions, pointcount,vertexcount,primitivecount = read_geo(from_path)

write_tetgen(tet_indices,positions, pointcount,primitivecount,to_path, gen_face=True)

附录3:在太极ggui中显示

learn-meshtaichi tut03

import taichi as ti
import meshtaichi_patcher as Patcher

ti.init()

# CAUTION: 我们只加了这一个函数, 其他的基本不变。这个就是用来读取face文件的
def directly_import_surf():
import numpy as np
import os
pwd = os.getcwd().replace("\\", "/")
face_file_name = pwd + "/models/bunny_tet/bunny_tet.face"
# print("face_file_name: ", face_file_name)
with open(face_file_name, 'r') as f:
lines = f.readlines()
NF = int(lines[0].split()[0])
face_indices = np.zeros((NF, 3), dtype=np.int32)
for i in range(NF):
face_indices[i] = np.array(lines[i + 1].split()[1:-1], dtype=np.int32)
return face_indices.flatten()
armadillo_surf_indices = directly_import_surf()

# 读入四面体网格
def init_tet_mesh(model_name):
#基本与上面一样,只是多了一个CV关系,表示通过一个cell可以找到它的四个顶点
theMesh = Patcher.load_mesh(model_name, relations=["CV"])
theMesh.verts.place({'x' : ti.math.vec3})
theMesh.verts.x.from_numpy(theMesh.get_position_as_numpy())
display_indices = ti.field(ti.u32, shape = len(armadillo_surf_indices))
display_indices.from_numpy(armadillo_surf_indices) #这里直接读入了face文件
return theMesh, display_indices


model_name = "models/bunny_tet/bunny_tet.node"
armadillo, armadillo_indices = init_tet_mesh(model_name)
armadillo_indices.to_numpy()

window = ti.ui.Window("taichimesh", (1024, 1024))
canvas = window.get_canvas()
scene = ti.ui.Scene()
camera = ti.ui.Camera()
camera.up(0, 1, 0)
camera.fov(75)
camera.position(4.5,4.5,0.6)
camera.lookat(3.8, 3.8, 0.5)
camera.fov(75)

frame = 0
paused = ti.field(int, shape=())
paused[None] = 1
while window.running:
# 用下面这段代码,通过提前设置一个paused变量,我们就可以在运行的时候按空格暂停和继续了!
for e in window.get_events(ti.ui.PRESS):
if e.key == ti.ui.SPACE:
paused[None] = not paused[None]
print("paused:", paused[None])
if not paused[None]:
# substep()
print(f"frame: {frame}")
frame += 1
# 我们可以通过下面的代码来查看相机的位置和lookat,这样我们就能知道怎么调整相机的位置了
# print("camera.curr_position",camera.curr_position)
# print("camera.curr_lookat",camera.curr_lookat)

# movement_speed=0.05表示移动速度,hold_key=ti.ui.RMB表示按住右键可以移动视角
# wasdqe可以移动相机
camera.track_user_inputs(window, movement_speed=0.05, hold_key=ti.ui.RMB)
scene.set_camera(camera)

scene.mesh(armadillo.verts.x, armadillo_indices, color = (0.5,0.5,0.5))

scene.point_light(pos=(0.5, 1.5, 0.5), color=(1, 1, 1))
scene.ambient_light((0.5,0.5,0.5))

canvas.scene(scene)

window.show()
- + \ No newline at end of file diff --git a/OpenGL/config.html b/OpenGL/config.html index 1b05afa8..24f83938 100644 --- a/OpenGL/config.html +++ b/OpenGL/config.html @@ -10,14 +10,14 @@ - +
Skip to main content

cmake配置OpenGL的环境

我仅在Win10+VS2019+VS Code环境下测试过。

github repo请看:

https://github.com/chunleili/OpenGL

目录结构

.
├── CMakeLists.txt
├── README.md
├── extern
│   ├── assimp
│   ├── eigen
│   ├── glad
│   ├── glew
│   ├── glfw
│   ├── glm
│   └── imgui
├── rename_to_vcpkg_if_use_vcpkg.json
├── res
│   └── shader
└── src
├── include
└── main.cpp

第三方库配置 方法1:使用vcpkg的MANIFEST模式

这种方法最快捷省事。但是一旦用了vcpkg,就要全部使用vcpkg。

在项目根目录下建立vcpkg.json文件。 内容如下

{
"name": "opengl",
"version": "0.0.1",
"description": "learn the OpenGL",
"dependencies": [
"eigen3",
"imgui",
"glfw3",
"glm",
"glad",
"assimp"
]
}

根目录下的CMakeLists.txt中添加

# 假如使用了vcpkg,可以直接使用find_package来找到库
find_package(Eigen3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE Eigen3::Eigen)

find_package(imgui CONFIG REQUIRED)
target_link_libraries(main PRIVATE imgui::imgui)

find_package(assimp CONFIG REQUIRED)
target_link_libraries(main PRIVATE assimp::assimp)

find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE glfw)

find_package(glad CONFIG REQUIRED)
target_link_libraries(main PRIVATE glad::glad)

find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm)

这种方式非常简便。只要你config一下cmake就会自动在build/vcpkg_install目录下为你下载并且配置第三方库。

第三方库配置 方法2:从源码构建第三方库

这种方式的好处是别人使用的时候,不需要安装vcpkg。并且保证了版本的稳定性(vcpkg更新比较激进)

在extern文件夹下放置各个第三方库的源码。

项目根目录的CMakeLists.tst

set(EXTERN_DIR ${PROJECT_SOURCE_DIR}/extern)
# # assimp
# add_subdirectory(extern/assimp)

# eigen
add_library(Eigen INTERFACE)
target_include_directories(Eigen INTERFACE ${EXTERN_DIR}/eigen)
# glm
add_subdirectory(extern/glm)
# opengl
find_package(OpenGL REQUIRED) # windows SDK中有opengl的库
# glfw
add_subdirectory(extern/glfw)
# glad
add_library(glad INTERFACE)
target_include_directories(glad INTERFACE ${EXTERN_DIR}/glad/include)
target_sources(glad INTERFACE ${EXTERN_DIR}/glad/src/glad.c)

#glad和glew使用一个即可。这里使用glad, 因此不再使用glew
option(USE_GLEW "use glew(Not recommend, now we use glad instead)" OFF)
if(USE_GLEW)
add_subdirectory(extern/glew)
# 如果使用GLEW 并且还要link一下!
endif()

#imgui
add_subdirectory(extern/imgui)

target_link_libraries(main PRIVATE
OpenGL::GL
glad
glfw
glm
Eigen
imgui
# assimp
)

这里imgui原作者并未提供cmake支持。因此我自己写了一下cmake。如下

extern/imgui下面的CMakeLists.txt

#imgui 
add_library(imgui INTERFACE)
target_include_directories(imgui INTERFACE
${EXTERN_DIR}/imgui
${EXTERN_DIR}/imgui/backends
)
file(GLOB IMGUI_FILES
${EXTERN_DIR}/imgui/*.h
${EXTERN_DIR}/imgui/*.cpp
${EXTERN_DIR}/imgui/backends/imgui_impl_opengl3.*
${EXTERN_DIR}/imgui/backends/imgui_impl_glfw.*
${EXTERN_DIR}/imgui/backends/imgui_impl_opengl3_loader.h
)
target_sources(imgui INTERFACE ${IMGUI_FILES})

target_link_libraries(imgui INTERFACE glad glfw OpenGL::GL)

add_executable(imgui_example ${EXTERN_DIR}/imgui/examples/example_glfw_opengl3/main.cpp)
target_link_libraries(imgui_example PRIVATE imgui glad glfw)

shader等文件的拷贝

由于shader源码是要从exe所在文件夹开始找的,所以一般可以将res/shader复制到exe所在目录

复制方法如下(利用add_custom_command)

# 复制shader等到build/bin目录
add_custom_command(
TARGET main POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/res ${PROJECT_BINARY_DIR}/bin/$<CONFIG>/res
)

每当编译main.exe的时候都会自动拷贝对应的res文件夹

完整的根目录下CMakeLists.txt

cmake_minimum_required(VERSION 3.23)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(OpenGL CXX)

# set default build type to release
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")

# 设置输出目录为build/bin
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_DEBUG_POSTFIX "_d")

# compile the source
add_executable(main "")
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
target_include_directories(main PRIVATE ${SRC_DIR}/include)
file(GLOB_RECURSE SRC_FILES ${SRC_DIR}/*.cpp ${SRC_DIR}/*.h)
target_sources(main PRIVATE ${SRC_FILES})


# 复制shader等到build/bin目录
# file(COPY ${PROJECT_SOURCE_DIR}/res DESTINATION ${PROJECT_BINARY_DIR}/bin/$<CONFIG>)
add_custom_command(
TARGET main POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/res ${PROJECT_BINARY_DIR}/bin/$<CONFIG>/res
)

# -------------------------------------------------------------------------- #
# set external libraries #
# -------------------------------------------------------------------------- #
set(EXTERN_DIR ${PROJECT_SOURCE_DIR}/extern)
# # assimp
# add_subdirectory(extern/assimp)

# eigen
add_library(Eigen INTERFACE)
target_include_directories(Eigen INTERFACE ${EXTERN_DIR}/eigen)
# glm
add_subdirectory(extern/glm)
# opengl
find_package(OpenGL REQUIRED) # windows SDK中有opengl的库
# glfw
add_subdirectory(extern/glfw)
# glad
add_library(glad INTERFACE)
target_include_directories(glad INTERFACE ${EXTERN_DIR}/glad/include)
target_sources(glad INTERFACE ${EXTERN_DIR}/glad/src/glad.c)

#glad和glew使用一个即可。这里使用glad, 因此不再使用glew
option(USE_GLEW "use glew(Not recommend, now we use glad instead)" OFF)
if(USE_GLEW)
add_subdirectory(extern/glew)
# 如果使用GLEW 并且还要link一下!
endif()

#imgui
add_subdirectory(extern/imgui)

target_link_libraries(main PRIVATE
OpenGL::GL
glad
glfw
glm
Eigen
imgui
# assimp
)



# # 假如使用了vcpkg,可以直接使用find_package来找到库
# find_package(Eigen3 CONFIG REQUIRED)
# target_link_libraries(main PRIVATE Eigen3::Eigen)

# find_package(imgui CONFIG REQUIRED)
# target_link_libraries(main PRIVATE imgui::imgui)

# find_package(assimp CONFIG REQUIRED)
# target_link_libraries(main PRIVATE assimp::assimp)

# find_package(glfw3 CONFIG REQUIRED)
# target_link_libraries(main PRIVATE glfw)

# find_package(glad CONFIG REQUIRED)
# target_link_libraries(main PRIVATE glad::glad)

# find_package(glm CONFIG REQUIRED)
# target_link_libraries(main PRIVATE glm::glm)
- + \ No newline at end of file diff --git a/OpenVDB/first-openvdb.html b/OpenVDB/first-openvdb.html index c01a551c..400e3e78 100644 --- a/OpenVDB/first-openvdb.html +++ b/OpenVDB/first-openvdb.html @@ -10,7 +10,7 @@ - + @@ -18,7 +18,7 @@
Skip to main content

OpenVDB的安装与第一个demo

介绍

OpenVDB是迪士尼推出的开源库,主要用于处理图形学中的各种数据结构。例如稀疏数据结构,还有与之相关的各类应用(比如网格转换为SDF等)。

OpenVDB是个C++的库。因此你下载源码之后编译出来的是静态库和动态库。把库配置好,头文件配置好,就是把vdb安装好了。

参考:

安装

安装主要参考github

首先安装依赖

就是常规的cmake安装流程 从github上clone下来 然后参考github,安装boost tbb blosc这三个依赖库

cmake -B build
cmake --build build

另外你还可以make install。这样的好处是还可以把编译好的库安装到安装目录(其实就是把编译出来的静态和动态库拷贝到/usr/local/lib/以及把头文件拷贝到/usr/local/include/)

第一个demo

参考官方文档

在CMakeLists.txt中写入

cmake_minimum_required(VERSION 3.20)
project(main)
list(APPEND CMAKE_MODULE_PATH "/usr/local/lib/cmake/OpenVDB")
find_package(OpenVDB REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main OpenVDB::openvdb)

其CMAKE_MODULE_PATH就是FindXXX.cmake的位置。这些.cmake文件是vdb作者已经写好的,在你安装(make install)的时候会自动安装。

然后再利用find_package来查找这个cmake配置文件。

最后是link这个lib

main.cpp:

#include <openvdb/openvdb.h>
#include <iostream>
int main()
{
// Initialize the OpenVDB library. This must be called at least
// once per program and may safely be called multiple times.
openvdb::initialize();
// Create an empty floating-point grid with background value 0.
openvdb::FloatGrid::Ptr grid = openvdb::FloatGrid::create();
std::cout << "Testing random access:" << std::endl;
// Get an accessor for coordinate-based access to voxels.
openvdb::FloatGrid::Accessor accessor = grid->getAccessor();
// Define a coordinate with large signed indices.
openvdb::Coord xyz(1000, -200000000, 30000000);
// Set the voxel value at (1000, -200000000, 30000000) to 1.
accessor.setValue(xyz, 1.0);
// Verify that the voxel value at (1000, -200000000, 30000000) is 1.
std::cout << "Grid" << xyz << " = " << accessor.getValue(xyz) << std::endl;
// Reset the coordinates to those of a different voxel.
xyz.reset(1000, 200000000, -30000000);
// Verify that the voxel value at (1000, 200000000, -30000000) is
// the background value, 0.
std::cout << "Grid" << xyz << " = " << accessor.getValue(xyz) << std::endl;
// Set the voxel value at (1000, 200000000, -30000000) to 2.
accessor.setValue(xyz, 2.0);
// Set the voxels at the two extremes of the available coordinate space.
// For 32-bit signed coordinates these are (-2147483648, -2147483648, -2147483648)
// and (2147483647, 2147483647, 2147483647).
accessor.setValue(openvdb::Coord::min(), 3.0f);
accessor.setValue(openvdb::Coord::max(), 4.0f);
std::cout << "Testing sequential access:" << std::endl;
// Print all active ("on") voxels by means of an iterator.
for (openvdb::FloatGrid::ValueOnCIter iter = grid->cbeginValueOn(); iter; ++iter) {
std::cout << "Grid" << iter.getCoord() << " = " << *iter << std::endl;
}
}

编译运行之后得到结果

Testing random access:
Grid[1000, -200000000, 30000000] = 1
Grid[1000, 200000000, -30000000] = 0
Testing sequential access:
Grid[-2147483648, -2147483648, -2147483648] = 3
Grid[1000, -200000000, 30000000] = 1
Grid[1000, 200000000, -30000000] = 2
Grid[2147483647, 2147483647, 2147483647] = 4
- + \ No newline at end of file diff --git a/SPlisHSPlaSH/Houdini-exporter.html b/SPlisHSPlaSH/Houdini-exporter.html index fb8836ba..12d70c2e 100644 --- a/SPlisHSPlaSH/Houdini-exporter.html +++ b/SPlisHSPlaSH/Houdini-exporter.html @@ -10,7 +10,7 @@ - + @@ -21,7 +21,7 @@ 结果 在这里插入图片描述

splish导出到Houdini

勾选Houdini exporter(mypartio) 在这里插入图片描述

空格运行一段时间后

结果位于bin/output文件夹。格式为bgeo.gz

在这里插入图片描述

该格式可以直接导入Houdini之中

在这里插入图片描述

- + \ No newline at end of file diff --git a/SPlisHSPlaSH/Interactive.html b/SPlisHSPlaSH/Interactive.html index 0c9492cd..481d69ed 100644 --- a/SPlisHSPlaSH/Interactive.html +++ b/SPlisHSPlaSH/Interactive.html @@ -10,7 +10,7 @@ - + @@ -21,7 +21,7 @@ image

我们自己定义的获取刚体控制权的set_rb_pos方法(传递的是引用,我们转换为指针)

    //获取刚体的控制权。
void set_rb_pos(Vector3r& rb_pos)
{
// 获取并设定位置为鼠标点击位置 FIXME:
// (rb_pos) = mouse_pos;

//用wasdfb来移动
// 获取刚体质心指针
p_rb_pos = &rb_pos;
std::cout<< "rb_pos: "<< (rb_pos)<<"\n";
}

这个指针定义成一个内部的成员变量

    Vector3r* p_rb_pos = nullptr; //刚体质心位置的指针

3 从MinGL中获取键盘的输入并操作刚体指针移动刚体

先要找到键盘输入的位置,位于 GUI\OpenGL\MiniGL.cpp MiniGL::keyboard

在一长串的if-else中间增加调用自己的方法 image

这里的 get_key_input 是我们自己写的方法

    //获取键盘的输入:从GUI\OpenGL\MiniGL.cpp MiniGL::keyboard
void get_key_input(enum KEY input)
{
const float move_speed = 0.1;

if(input == KEY::down)
{
if(p_rb_pos != nullptr)
{
(*p_rb_pos)[1] -= move_speed;
printf("down!\n");
}
}
else if(input == KEY::up)
{
if(p_rb_pos != nullptr)
{
(*p_rb_pos)[1] += move_speed;
printf("up!\n");
}
}
...

其中枚举类是

enum KEY{left=0, right, up, down, forward, backward};

image

最终结果

out

附录:Interactive.h 完整代码

#pragma once
#include "SPlisHSPlasH/Common.h"

//用户交互(键盘鼠标)的中介类,用于传递和处理数据
struct Interactive
{
Vector3r mouse_pos; //鼠标位置
enum KEY{left=0, right, up, down, forward, backward};
Vector3r* p_rb_pos = nullptr; //刚体质心位置的指针

//a singleton method to get the object
static Interactive& get_inter()
{
static Interactive inter;
return inter;
}

//把mouse_pos从外界传递给Interactive内部
void get_mouse_pos(const Vector3r& rhs)
{
mouse_pos[0] = rhs[0];
mouse_pos[1] = rhs[1];
mouse_pos[2] = rhs[2];
printf("mouse pos in Inter:(%.3f,\t%.3f,\t%.3f)\n", mouse_pos[0],mouse_pos[1],mouse_pos[2]);
}

//获取键盘的输入:从GUI\OpenGL\MiniGL.cpp MiniGL::keyboard
void get_key_input(enum KEY input)
{
const float move_speed = 0.1;

if(input == KEY::down)
{
if(p_rb_pos != nullptr)
{
(*p_rb_pos)[1] -= move_speed;
printf("down!\n");
}
}
else if(input == KEY::up)
{
if(p_rb_pos != nullptr)
{
(*p_rb_pos)[1] += move_speed;
printf("up!\n");
}
}
else if(input == KEY::left)
{
if(p_rb_pos != nullptr)
{
(*p_rb_pos)[0] -= move_speed;
printf("left!\n");
}
}
else if (input == KEY::right)
{
if (p_rb_pos != nullptr)
{
(*p_rb_pos)[0] += move_speed;
printf("right!\n");
}
}
else if (input == KEY::forward)
{
if (p_rb_pos != nullptr)
{
(*p_rb_pos)[2] -= move_speed;
printf("forward!\n");
}
}
else if (input == KEY::backward)
{
if (p_rb_pos != nullptr)
{
(*p_rb_pos)[2] += move_speed;
printf("backward!\n");
}
}
}

//获取刚体的控制权。
void set_rb_pos(Vector3r& rb_pos)
{
// 获取并设定位置为鼠标点击位置 FIXME:
// (rb_pos) = mouse_pos;

//用wasdfb来移动
// 获取刚体质心指针
p_rb_pos = &rb_pos;
std::cout<< "rb_pos: "<< (rb_pos)<<"\n";
}
};
- + \ No newline at end of file diff --git a/SPlisHSPlaSH/get_mouse.html b/SPlisHSPlaSH/get_mouse.html index 5d3c8492..379905dc 100644 --- a/SPlisHSPlaSH/get_mouse.html +++ b/SPlisHSPlaSH/get_mouse.html @@ -10,7 +10,7 @@ - + @@ -21,7 +21,7 @@ GUI\OpenGL\MiniGL.cpp

void MiniGL::mousePress(GLFWwindow* window, int button, int action, int mods)
{
//TODO: get mouse in screen space
printf("x:%f\t",mouse_pos_x_old);
...
}

同样是点击才会获取

结果为:

x:969.000000    y:293.000000

在MinGL中获取世界坐标(OpenGL通用)

另一个获取世界坐标的通用方法是使用函数gluUnProject

这个函数的用法可以在GUI\OpenGL\MiniGL.cpp的unproject函数找到

打印出来的就是当前鼠标的位置(m_oldMousePos打印的其实是上一次点击的位置) image

我们借此可以学习一下gluUnProject的使用方法

void MiniGL::unproject(const int x, const int y, Vector3r &pos)
{
GLint viewport[4];
GLdouble mv[16], pm[16];
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, mv);
glGetDoublev(GL_PROJECTION_MATRIX, pm);

GLdouble resx, resy, resz;
gluUnProject(x, viewport[3] - y, znear, mv, pm, viewport, &resx, &resy, &resz);
pos[0] = (Real) resx;
pos[1] = (Real) resy;
pos[2] = (Real) resz;

printf("current world pos:(%.4f,\t%.4f,\t%.4f)\n",pos[0],pos[1],pos[2]);
}

这个函数的9个参数依次为 屏幕空间x坐标,屏幕空间y坐标,znear,modelview矩阵,projection矩阵,视口,3个世界坐标返回值

(viewport[3] - y 是为因为viewport存储值依次为视口左下角x,视口左下角y, 视口宽度, 视口高度, 而这里要把零点从左下角转换到左上角)

获取鼠标位置

对应视频讲解

https://www.bilibili.com/video/BV11G4y187Qz/

- + \ No newline at end of file diff --git a/SPlisHSPlaSH/import-obj-bug.html b/SPlisHSPlaSH/import-obj-bug.html index 1d74d22f..2ea6856e 100644 --- a/SPlisHSPlaSH/import-obj-bug.html +++ b/SPlisHSPlaSH/import-obj-bug.html @@ -10,14 +10,14 @@ - +
Skip to main content
- + \ No newline at end of file diff --git a/Scholars.html b/Scholars.html index a0571f83..51c8b7b0 100644 --- a/Scholars.html +++ b/Scholars.html @@ -10,7 +10,7 @@ - + @@ -75,7 +75,7 @@ http://kesen.realtimerendering.com/

纽约大学几何实验室

https://cims.nyu.edu/gcl/publications.html

ETH 计算及图形学实验室(CGL)

1994年由Prof. Markus Gross建立。已经有60多名phD毕业生。 https://cgl.ethz.ch/

5 博客

https://vitalight.me/

水平集方法学习资料sethian https://math.berkeley.edu/~sethian/2006/level_set.html

- + \ No newline at end of file diff --git a/Treasures.html b/Treasures.html index 64da0972..980fc0dd 100644 --- a/Treasures.html +++ b/Treasures.html @@ -10,13 +10,13 @@ - +
Skip to main content

宝藏收藏夹

这是收集各种博客、网址、学习资料、文章和课程的地方。

教程类

SIGGRAPH Course历年

SIGGRAPH历年仿真论文

连续介质力学入门

极简的ctest学习博客

learn-opengl

zeno文档

1997年SIGGRAPH刚体模拟Course:Witkin&Baraff

刚体模拟的一个博客

python的四元数库

谷歌C++风格指南

Godot(开源游戏引擎)入门

python3菜谱

pybind11文档

effective C++(博客学习笔记)

关于符号距离场的一个博客

openvdb菜谱(官方)

OpenMP文档

重构你的cpp程序以增强可测性

游戏流体力学及Unity代码

利用cmake配置好opengl环境

Houdini Vex 插件

课程类

games101课程大纲和ppt

CS839: 威斯康辛大学Sifakis的图形学仿真课程

Bender的基于物理动画入门课程资源

SIGGRAPH2019基于物理动画入门课

Dynamic Deformables Course | Pixar Animation Siggraph 2020 Talk

CPSC314: UBC的图形学入门课程

CS344: NVIDIA UDACITY的并行入门课

汪洋的OpenFOAM课程ppt

斯坦福的凸优化CVX101

斯坦福数值优化AA222

Sifakis SIGGRAPH 2012 Course: 图形学FEM入门

Barraf and Witkin 1998 SIG COurse:Physically Based Modeling: Principles and Practice

书籍类

cmake菜谱(系统学习cmake最好的书)

modern cmake中文版

Professional cmake

游戏编程设计模式

用python自动化无聊的工作

Rust程序设计语言

现代C++教程:高速上手(快速了解modern c++)

书籍:游戏编程模式

可交互的Shader学习:The Book of Shader

GPU Gems(图形学大部头经典)

资源类

便宜的CG资源:cgtrader

CG资源turbosquid

CG资源sketchfab

免费HDR和纹理:polyhaven

星球渲染纹理资源

生成好看的配色:coolors

c语言稀疏线性求解器库

线性系统求解测试数据

另一个线性系统测试数据MatrixMarket

amgcl(一个支持多重网格的C++库)

代码库

taichi 2D flip

知识类

非牛顿模型

工具类

chatPDF: 用chatGPT来读PDF文献

cursor: 根据输入生成代码(有VS Code插件)

copilot: VSCode插件 自动生成代码

latex相关

overleaf: 在线latex 已经成为类似业界标准了

mathpix:粘贴公式图片生成latex

在线latex公式编辑器

生成latex表格

mathcha: 绘图生成tikz

- + \ No newline at end of file diff --git a/assets/js/ef6b1661.75d95d95.js b/assets/js/ef6b1661.75d95d95.js deleted file mode 100644 index 190340f3..00000000 --- a/assets/js/ef6b1661.75d95d95.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4184],{5680:(n,e,t)=>{t.d(e,{xA:()=>o,yg:()=>m});var l=t(6540);function a(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function i(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(n);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,l)}return t}function g(n){for(var e=1;e=0||(a[t]=n[t]);return a}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(a[t]=n[t])}return a}var p=l.createContext({}),c=function(n){var e=l.useContext(p),t=e;return n&&(t="function"==typeof n?n(e):g(g({},e),n)),t},o=function(n){var e=c(n.components);return l.createElement(p.Provider,{value:e},n.children)},u="mdxType",d={inlineCode:"code",wrapper:function(n){var e=n.children;return l.createElement(l.Fragment,{},e)}},y=l.forwardRef((function(n,e){var t=n.components,a=n.mdxType,i=n.originalType,p=n.parentName,o=r(n,["components","mdxType","originalType","parentName"]),u=c(t),y=a,m=u["".concat(p,".").concat(y)]||u[y]||d[y]||i;return t?l.createElement(m,g(g({ref:e},o),{},{components:t})):l.createElement(m,g({ref:e},o))}));function m(n,e){var t=arguments,a=e&&e.mdxType;if("string"==typeof n||a){var i=t.length,g=new Array(i);g[0]=y;var r={};for(var p in e)hasOwnProperty.call(e,p)&&(r[p]=e[p]);r.originalType=n,r[u]="string"==typeof n?n:a,g[1]=r;for(var c=2;c{t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>g,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var l=t(8168),a=(t(6540),t(5680));const i={},g="\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f",r={unversionedId:"Houdini/Houdini-render-fluid",id:"Houdini/Houdini-render-fluid",title:"\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f",description:"\u7248\u672c\uff1aHoudini19.5 \u5176\u4ed6\u7248\u672c\u5e94\u8be5\u4e5f\u5dee\u4e0d\u591a",source:"@site/docs/Houdini/Houdini-render-fluid.md",sourceDirName:"Houdini",slug:"/Houdini/Houdini-render-fluid",permalink:"/Houdini/Houdini-render-fluid",draft:!1,editUrl:"https://github.com/chunleili/chunleili.github.io/tree/master/docs/Houdini/Houdini-render-fluid.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"control-point",permalink:"/Houdini/Houdini-learn/control-point"},next:{title:"\u5e26\u7740uv\u8fdb\u884c\u6a21\u62df(\u51b0\u6fc0\u51cc\u6848\u4f8b\uff09",permalink:"/Houdini/ice-cream"}},p={},c=[{value:"Houdini\u57fa\u672c\u5e38\u8bc6",id:"houdini\u57fa\u672c\u5e38\u8bc6",level:2},{value:"Houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f",id:"houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f",level:3},{value:"Houdini \u8282\u70b9",id:"houdini-\u8282\u70b9",level:3},{value:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa",id:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa",level:2},{value:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e",id:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e",level:3},{value:"\u8bfb\u53d6\u6570\u636e\u5230houdini",id:"\u8bfb\u53d6\u6570\u636e\u5230houdini",level:3},{value:"\u91cd\u5efa\u8868\u9762",id:"\u91cd\u5efa\u8868\u9762",level:3},{value:"\u706f\u5149\u548c\u6444\u50cf\u673a (Mantra \uff09",id:"\u706f\u5149\u548c\u6444\u50cf\u673a-mantra-",level:2},{value:"\u706f\u5149",id:"\u706f\u5149",level:3},{value:"\u9762\u5149\u6e90",id:"\u9762\u5149\u6e90",level:4},{value:"\u73af\u5883\u5149\u548cHDR\u80cc\u666f",id:"\u73af\u5883\u5149\u548chdr\u80cc\u666f",level:4},{value:"\u6444\u50cf\u673a",id:"\u6444\u50cf\u673a",level:3},{value:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570\uff08Mantra\uff09",id:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570mantra",level:2},{value:"\u6750\u8d28",id:"\u6750\u8d28",level:3},{value:"\u6e32\u67d3\u5668",id:"\u6e32\u67d3\u5668",level:2}],o={toc:c},u="wrapper";function d(n){let{components:e,...t}=n;return(0,a.yg)(u,(0,l.A)({},o,t,{components:e,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"\u5982\u4f55\u4f7f\u7528houdini\u6e32\u67d3\u6d41\u4f53"},"\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f"),(0,a.yg)("p",null,"\u7248\u672c\uff1aHoudini19.5 \u5176\u4ed6\u7248\u672c\u5e94\u8be5\u4e5f\u5dee\u4e0d\u591a"),(0,a.yg)("p",null,"\u6e32\u67d3\u5668\u4e0e\u6750\u8d28\u662f\u76f4\u63a5\u5173\u8054\u7684\uff0c\u4e0d\u540c\u6e32\u67d3\u5668\u6709\u4e0d\u540c\u7684\u706f\u5149\u3001\u6750\u8d28\u3002"),(0,a.yg)("p",null,"\u6211\u4eec\u9996\u5148\u8bb2\u89e3\u5982\u4f55\u5229\u7528Houdini\u81ea\u5e26\u7684Mantra\u6e32\u67d3\uff08CPU\u6e32\u67d3\uff0c\u8f83\u6162\uff09\uff0c\u7136\u540e\u8bb2\u89e3\u66f4\u5feb\u7684\u7b2c\u4e09\u65b9\u6e32\u67d3\u5668Redshift\uff08GPU\u6e32\u67d3\uff0c\u8f83\u5feb\uff09\u3002"),(0,a.yg)("p",null,"\u4f46\u662f\uff0c\u5728\u6b64\u4e4b\u524d\uff0c\u6709\u4e00\u4e9b\u901a\u7528\u6b65\u9aa4\uff0c\u5373\u8bfb\u53d6\u6d41\u4f53\u7c92\u5b50\u5e27\u6570\u636e\u548c\u8868\u9762\u91cd\u5efa\u3002"),(0,a.yg)("h2",{id:"houdini\u57fa\u672c\u5e38\u8bc6"},"Houdini\u57fa\u672c\u5e38\u8bc6"),(0,a.yg)("h3",{id:"houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f"},"Houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Esc\u8fdb\u5165\u89c6\u56fe\u89c6\u89d2"),"\uff0c"),(0,a.yg)("p",null,"\u7136\u540e",(0,a.yg)("strong",{parentName:"p"},"\u5de6\u952e\u65cb\u8f6c\uff0c\u6eda\u8f6e/\u53f3\u952e\u62c9\u8fd1\u62c9\u8fdc\uff0c\u4e2d\u952e\u5e73\u79fb"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"H\u952e\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"G\u952e\u4ee5\u67d0\u4e2a\u7269\u4f53\u4e3a\u4e2d\u5fc3\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("h3",{id:"houdini-\u8282\u70b9"},"Houdini \u8282\u70b9"),(0,a.yg)("p",null,"\u8282\u70b9\u662fHoudini\u6838\u5fc3\u4e2d\u7684\u6838\u5fc3\uff01\u662f\u7b2c\u4e00\u516c\u6c11\u3002"),(0,a.yg)("p",null,"\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Houdini\u88ab\u79f0\u4e3a\u7a0b\u5e8f\u5316\u5efa\u6a21\u8f6f\u4ef6\u3002"),(0,a.yg)("p",null,"Houdini\u4e2d",(0,a.yg)("strong",{parentName:"p"},"\u6240\u6709\u64cd\u4f5c"),"\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u8282\u70b9\u3002"),(0,a.yg)("p",null,"\u5728Network\u89c6\u56fe\u4e2d\u7528 ",(0,a.yg)("strong",{parentName:"p"},"Tab\u952e"),"\u521b\u5efa\u8282\u70b9\u3002"),(0,a.yg)("h2",{id:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa"},"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa"),(0,a.yg)("h3",{id:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e"},"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e"),(0,a.yg)("p",null,"\u9996\u5148\uff0c\u6211\u4eec\u51c6\u5907\u7c92\u5b50\u6570\u636e\u3002\u6211\u8fd9\u91cc\u7684\u8f93\u5165\u6570\u636e\u662f\u4ecetaichi\u751f\u6210\u7684mpm3d\u6a21\u62df\u5f97\u5230\u7684\u5e8f\u5217\uff08\u9ed8\u8ba4\u662fply\u683c\u5f0f\uff09"),(0,a.yg)("p",null,"\u5982\u679c\u662fobj\u683c\u5f0f\u7684\u8bdd\uff0c\u5b83\u91cc\u9762\u53ea\u6709\u4e00\u4e9b\u70b9\u7684\u4f4d\u7f6e\u800c\u5df2\u3002\n\u4f8b\u5982"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"v 1.00718 0.992176 1.00718\nv 1.09713 0.992118 1.00712\nv 1.2004 0.992209 1.00721\nv 1.29996 0.992199 1.0072\nv 1.4 0.9922 1.0072\nv 1.5 0.9922 1.0072\nv 1.6 0.9922 1.0072\nv 1.7 0.9922 1.0072\nv 1.8 0.9922 1.0072\nv 1.9 0.9922 1.0072\nv 2 0.9922 1.0072\nv 2.1 0.9922 1.0072\nv 2.2 0.9922 1.0072\nv 2.3 0.9922 1.0072\nv 2.4 0.9922 1.0072\nv 2.5 0.9922 1.0072\nv 2.6 0.9922 1.0072\n...\n")),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/72011fe46c6545d68884858c393fe099.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h3",{id:"\u8bfb\u53d6\u6570\u636e\u5230houdini"},"\u8bfb\u53d6\u6570\u636e\u5230houdini"),(0,a.yg)("p",null,"\u6211\u4eec\u65b0\u5efa\u4e00\u4e2ageo\u8282\u70b9\uff0c\u91cd\u547d\u540d\u4e3aread_data\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/c725f103b70f4a41a56c5021f2e7a3c5.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u53cc\u51fb\u8fdb\u5165\u8be5\u8282\u70b9"),(0,a.yg)("p",null,"\u7136\u540e\u65b0\u5efafile\u8282\u70b9\uff0c\u9009\u62e9\u6570\u636e\u5e8f\u5217"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a71a7edd221c41f0853c7125c8ac8bad.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6211\u4eec\u73b0\u5728\u5f97\u5230\u7684\u5c31\u662f\u4e00\u5806\u70b9\u3002"),(0,a.yg)("h3",{id:"\u91cd\u5efa\u8868\u9762"},"\u91cd\u5efa\u8868\u9762"),(0,a.yg)("p",null,"\u63a5\u4e0b\u6765\u91cd\u5efa\u8868\u9762\u3002\u4f7f\u7528particle fluid surface\u8fd9\u4e2a\u8282\u70b9\u3002\u8c03\u6574particle seperation\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/57942776a283480d8d821c719ec48ef7.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u5b9e\u9645\u4e0a\u8fd9\u5c31\u5b8c\u6210\u4e86\u5de5\u4f5c\u3002\u4f46\u662f\u8fd9\u6837\u7684\u8bdd\uff0c\u4f60\u6bcf\u6b21\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u90fd\u8981\u91cd\u65b0\u8bfb\u53d6\u7c92\u5b50\uff0c\u7136\u540e\u91cd\u5efa\u8868\u9762\u3002\u6211\u4eec\u4e0d\u5982\u628a\u8868\u9762\u7f13\u5b58\u4e00\u4e0b\uff0c\u4ee5\u540e\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a\u7f13\u5b58\u5373\u53ef\u3002"),(0,a.yg)("p",null,"\u65b0\u5efafile cache\u8282\u70b9\uff0c\u7136\u540e\u4fee\u6539\u4e0b\u9762\u7684\u65f6\u95f4\u5e27\u3002\u6211\u4eec\u53ea\u9700\u898150\u5e27\uff0c\u56e0\u6b64\u6539\u4e3a50\u3002\uff08\u4e0a\u9762\u7eff\u8272\u7684\u4f4d\u7f6e\u4f1a\u968f\u4e4b\u66f4\u6539\u3002\u5982\u679c\u4f60\u76f4\u63a5\u53bb\u6539\u7eff\u8272\u7684\u4f4d\u7f6e\u662f\u6539\u4e0d\u4e86\u7684\u3002\uff09\n\u5e76\u4e14\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u6307\u5b9a\u8f93\u51fa\u6587\u4ef6\u5e8f\u5217\u7684\u540d\u5b57\uff1a",(0,a.yg)("inlineCode",{parentName:"p"},"$OS"),"\u7684\u610f\u601d\u5c31\u662f\u5f53\u524d\u8282\u70b9\u7684\u540d\u5b57\u3002",(0,a.yg)("inlineCode",{parentName:"p"},"$HIP"),"\u7684\u610f\u601d\u5c31\u662f\u5f53\u524d.hip\u6587\u4ef6\u7684\u7edd\u5bf9\u8def\u5f84\u3002"),(0,a.yg)("p",null,"\u8f93\u51fa\u7684\u683c\u5f0f\u662f.bgeo.sc\u3002\u8fd9\u662fhoudini\u7279\u6709\u7684\u538b\u7f29\u683c\u5f0f\uff0c\u5bf9\u4e8eHoudini\u6765\u8bf4\u8bfb\u5199\u90fd\u5f88\u5feb\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/666d346b63534e518fa6c56e68847881.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u8f93\u51fa\u5b8c\u4e86\uff0c\u4f60\u53ef\u4ee5\u53bb\u770b\u4e00\u770b\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/aa277ae28105498d93caccc404ee7b96.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u4f60\u4f1a\u53d1\u73b0file cache\u4e4b\u540e\u7684\u8282\u70b9\u4e0a\u4f1a\u51fa\u73b0\u4e00\u4e2a\u865a\u5f71\uff0c\u8fd9\u5c31\u4ee3\u8868\u6211\u4eec\u5df2\u7ecf\u7f13\u5b58\u4e86\u3002"),(0,a.yg)("p",null,"\u6700\u540e\uff0c\u6211\u4eec\u65b0\u5efa\u4e00\u4e2anull\u8282\u70b9\uff0c\u91cd\u547d\u540d\u4e3afluid_surface\u3002\u8fd9\u4e2a\u8282\u70b9\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff0c\u5355\u7eaf\u5c31\u662f\u4e3a\u4e86\u4ee5\u540e\u597d\u5f15\u7528\u540d\u5b57\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/d744768941d04429a5c2894ca701a55a.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u56de\u5230\u6700\u5916\u5c42"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/75ea512b4a874202a0f5c60b1779cf38.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u81f3\u6b64\uff0c\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u4e86\u6d41\u4f53\u8bfb\u53d6\u6570\u636e\u548c\u8868\u9762\u91cd\u5efa"),(0,a.yg)("h2",{id:"\u706f\u5149\u548c\u6444\u50cf\u673a-mantra-"},"\u706f\u5149\u548c\u6444\u50cf\u673a (Mantra \uff09"),(0,a.yg)("p",null,"\u706f\u5149\u548c\u6750\u8d28\u90fd\u662f\u6e32\u67d3\u5668\u7279\u5b9a\u7684\uff0c\u6211\u4eec\u4ece\u6b64\u5904\u5f00\u59cb\u4f7f\u7528Mantra\u6e32\u67d3\u3002"),(0,a.yg)("h3",{id:"\u706f\u5149"},"\u706f\u5149"),(0,a.yg)("h4",{id:"\u9762\u5149\u6e90"},"\u9762\u5149\u6e90"),(0,a.yg)("p",null,"\u9996\u5148\u589e\u52a0\u9762\u5149\u6e90\u3002control+\u5de6\u952e \u70b9\u51fb\u5de5\u5177\u680f\uff08shelf tool\uff09\u7684area light"),(0,a.yg)("p",null,"\u7136\u540e\u5c31\u4f1a\u81ea\u52a8\u8fdb\u5165\u706f\u5149\u7684\u89c6\u89d2\uff0c",(0,a.yg)("strong",{parentName:"p"},"\u70b9\u51fb\u9501\u5b9a"),"\uff0c\u5c31\u53ef\u4ee5\u79fb\u52a8\u706f\u5149\u3002"),(0,a.yg)("p",null,"Houdini\u4e2d\u79fb\u52a8\u7684\u65b9\u5f0f\u662f\u5148"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Esc\u8fdb\u5165\u89c6\u56fe\u89c6\u89d2"),"\uff0c"),(0,a.yg)("p",null,"\u7136\u540e",(0,a.yg)("strong",{parentName:"p"},"\u5de6\u952e\u65cb\u8f6c\uff0c\u6eda\u8f6e/\u53f3\u952e\u62c9\u8fd1\u62c9\u8fdc\uff0c\u4e2d\u952e\u5e73\u79fb"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"H\u952e\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"G\u952e\u4ee5\u67d0\u4e2a\u7269\u4f53\u4e3a\u4e2d\u5fc3\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/bcb3bed5f9234defa7e57c5c19607c0d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u8c03\u6574\u7ed3\u675f\u4e4b\u540e\uff0c\u518d\u6b21\u70b9\u51fb\u9501\uff0c\u7136\u540e\u968f\u4fbf\u79fb\u52a8\u4e00\u4e0b\u89c6\u89d2\uff0c\u5c31\u80fd\u9000\u51fa\u3002"),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u60f3\u518d\u6b21\u8fdb\u5165\u706f\u5149\u89c6\u89d2\uff0c\u5c31\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684",(0,a.yg)("strong",{parentName:"p"},"look through light"),"\u3002\u5982\u4e0b\u56fe\u6240\u793a\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/9f5b373a4f5645df9daf8a067f40bc4b.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u9000\u51fa\u4ee5\u540e\uff0c\u968f\u4fbf\u79fb\u52a8\u4e0b\u89c6\u89d2\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f1a\u6709\u4e00\u4e2a\u9ec4\u8272\u7684\u77e9\u5f62\uff0c\u90a3\u4e2a\u5c31\u662f\u521a\u624d\u7684\u9762\u5149\u6e90\u7684\u4f4d\u7f6e\u3002"),(0,a.yg)("p",null,"\u7136\u540e\u8c03\u6574\u706f\u5149\u7684\u4eae\u5ea6\u3002\u53ef\u4ee5\u8c03",(0,a.yg)("strong",{parentName:"p"},"\u53c2\u6570Exposure"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/00ee2c62c4e841da97af6279ff62c1e5.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u5982\u6cd5\u70ae\u5236\u518d\u5236\u4f5c\u53e6\u4e00\u4e2a\u9762\u5149\u6e90\u3002"),(0,a.yg)("h4",{id:"\u73af\u5883\u5149\u548chdr\u80cc\u666f"},"\u73af\u5883\u5149\u548cHDR\u80cc\u666f"),(0,a.yg)("p",null,"\u63a5\u4e0b\u6765\u589e\u52a0\u73af\u5883\u5149\u548cHDR\u80cc\u666f"),(0,a.yg)("p",null,"\u589e\u52a0",(0,a.yg)("strong",{parentName:"p"},"environment light\u8282\u70b9")),(0,a.yg)("p",null,"\u7136\u540e\u9009\u62e9",(0,a.yg)("strong",{parentName:"p"},"Environment Map"),"\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u53ef\u4ee5\u5bfc\u5165",(0,a.yg)("strong",{parentName:"p"},"HDR\u80cc\u666f"),"\u56fe\u3002"),(0,a.yg)("p",null,"\u4f60\u53ef\u4ee5\u4ece ",(0,a.yg)("a",{parentName:"p",href:"https://polyhaven.com/"},"https://polyhaven.com/")," \u83b7\u53d6\u514d\u8d39\u7684HDR\u8d44\u6e90\uff01"),(0,a.yg)("p",null,"HDR\u7684\u4f5c\u7528\u5c31\u662f\u4e3a\u73af\u5883\u6dfb\u52a0\u73af\u5883\u5149\u7167\u3002\u56e0\u4e3a\u662f\u73af\u5883\uff0c\u4f60\u5f97\u6307\u5b9a\u662f\u4ec0\u4e48\u6837\u7684\u73af\u5883\u3002\u6bd4\u5982\uff1a",(0,a.yg)("strong",{parentName:"p"},"\u662f\u53a8\u623f\uff1f\u8fd8\u662f\u5e7f\u573a\uff1f\u8fd8\u662f\u68ee\u6797\uff1f")),(0,a.yg)("p",null,"\u6211\u4eec\u8981\u6e05\u695a\uff0c",(0,a.yg)("strong",{parentName:"p"},"HDR\u7684\u80cc\u666f\u56fe\u9ed8\u8ba4\u4e0d\u4f1a\u88ab\u6e32\u67d3\u51fa\u6765"),"\uff08\u5f53\u7136\u4f60\u4e5f\u53ef\u4ee5\u6e32\u67d3\u51fa\u6765\uff09\uff0c",(0,a.yg)("strong",{parentName:"p"},"\u6dfb\u52a0HDR\u7684\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u8bbe\u7f6e\u73af\u5883\u5149\u7167"),"\uff01"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/ee875faae8a642299ed1ad8357ab305c.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h3",{id:"\u6444\u50cf\u673a"},"\u6444\u50cf\u673a"),(0,a.yg)("p",null,"\u8bbe\u7f6e\u76f8\u673a\u7684\u65b9\u5f0f\u57fa\u672c\u4e0e\u9762\u5149\u6e90\u4e00\u81f4\uff1alook through, \u9501\u5b9a\uff0c\u8c03\u6574\uff0c\u89e3\u9501\u5e76\u9000\u51fa\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/f019b300d68d4617aec1b55bf44430fa.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h2",{id:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570mantra"},"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570\uff08Mantra\uff09"),(0,a.yg)("h3",{id:"\u6750\u8d28"},"\u6750\u8d28"),(0,a.yg)("p",null,"\u9996\u5148\uff0c\u5207\u6362\u5230Material Platte"),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u53d1\u73b0\u81ea\u5df1\u7684\u6807\u7b7e\u9875\u4e0a\u6ca1\u6709\u8fd9\u73a9\u610f\uff0c\u5c31\u53f3\u952e\uff0c\u7136\u540e\u9009\u62e9Material Platte"),(0,a.yg)("p",null,"\u8fd9\u91cc\u9762\u6240\u6709\u7684\u4e1c\u897f\uff0c\u90fd\u662f\u8fea\u58eb\u5c3c\u7684Principled shader\uff0c\u5b66\u540d\u53c8\u53ebBRDF\u6216\u8005BSDF\u3002Blender\u91cc\u9762\u53c8\u53eb\u539f\u7406\u5316BSDF\u3002\u6240\u6709\u8fd9\u4e9b\u4e1c\u897f\uff0c\u90fd\u53ea\u662f\u53c2\u6570\u4e0d\u540c\u7684\u9884\u8bbe\u800c\u5df2\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/17acc48b0a62433099524e19e8573466.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6211\u4eec\u628aBasic fluid\u62d6\u51fa\u6765\u3002\u8fd9\u662f\u4e2a\u6d41\u4f53\u7684\u9884\u8bbe\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/6484de66684346fabfca8420f127ab51.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u7136\u540e\u518d\u628a\u5b83\u62d6\u5230\u6211\u4eec\u7684\u6d41\u4f53\u5757\u4e0a"),(0,a.yg)("p",null,"\u8fd9\u65f6\u6211\u4eec\u5c31\u4f1a\u53d1\u73b0\u6d41\u4f53\u6709\u4e86\u6750\u8d28\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/e5e0ae213dcd4b569e92c631418ab486.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u60f3\u8c03\u6574\u6d41\u4f53\u7684\u6750\u8d28\uff0c\u53ef\u4ee5\u53cc\u51fb\u8fdb\u5165Basic fluid\uff0c \u7136\u540e\u8c03\u6574\u53c2\u6570\u3002\u6bd4\u5982\u6211\u4eec\u8fd9\u91cc\u7a0d\u5fae\u8c03\u6574\u4e00\u4e0b\u4e0d\u900f\u660e\u5ea6\uff08opacity\uff09"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/204093c19f8443c8935995dee991e124.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h2",{id:"\u6e32\u67d3\u5668"},"\u6e32\u67d3\u5668"),(0,a.yg)("p",null,"\u6211\u4eec\u8df3\u8f6c\u5230out\u3002\u4f1a\u53d1\u73b0\u6709\u4e2a\u9ed8\u8ba4\u7684mantra_ipr\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/1ed0a159f58b4030bb266c1576c2cdb4.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u7136\u540e\u70b9\u51fb\u6e32\u67d3\u7a97\u53e3"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a65fa327265340e9898668dad807a5dd.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u8bbe\u7f6e\u597d\u8f93\u51fa\u8def\u5f84\u7b49\u4e4b\u540e\uff0c\u70b9\u51fb\u6e32\u67d3\uff08\u6216Render To Disk\uff09\u5373\u53ef\uff01\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/c280ab4ef34a4a109abf169e62aa8f9d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6ce8\u610f\uff1a\u4f60\u53ef\u4ee5\u81ea\u5df1\u6307\u5b9a\u4fdd\u5b58\u8def\u5f84\u548c\u6e32\u67d3\u7684\u8303\u56f4\u3002\u6211\u8fd9\u91cc\u53ea\u662f\u6e32\u67d3\u4e00\u5e27\u3002"),(0,a.yg)("p",null,"Mantra\u662fCPU\u6e32\u67d3\uff0c\u6240\u4ee5\u5f88\u6162\u3002\u800c\u4e14\u4f1a\u5360\u6ee1\u4f60\u7684\u6574\u4e2aCPU\uff08\u5982\u56fe\u6240\u793a\u3002\u4e00\u5f20\u56fe\u6211\u5df2\u7ecf\u6e32\u67d3\u4e861\u520617\u79d2\u624d\u8fdb\u5ea687%\uff0c\u800c\u4e14CPU\u6ee1\u8f7d\uff0c\u5185\u5b58\u6d88\u80171.11GB\uff09"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a05a89bd08c44c1599e8c52297ee9bef.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u7b49\u4e0d\u53ca\u7684\u8bdd\uff0c\u53ef\u4ee5\u5148\u4fdd\u5b58\u4e00\u4e0b\u6ca1\u6e32\u67d3\u5b8c\u7684\u622a\u56fe\u3002\u5982\u4e0b\u6240\u793a\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a289640783204bad948a6bf362c8723d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u81f3\u6b64\uff0c\u5b8c\u6574\u7684\u6e32\u67d3\u6d41\u7a0b\u7ed3\u675f\uff01"),(0,a.yg)("p",null,"\u7ed3\u679c\u5982\u56fe\uff1a\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/6b256be323db46e4ac590dda37c213ee.jpeg",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ef6b1661.ce03ddf2.js b/assets/js/ef6b1661.ce03ddf2.js new file mode 100644 index 00000000..cc747856 --- /dev/null +++ b/assets/js/ef6b1661.ce03ddf2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4184],{5680:(n,e,t)=>{t.d(e,{xA:()=>o,yg:()=>m});var l=t(6540);function a(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function i(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(n);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,l)}return t}function r(n){for(var e=1;e=0||(a[t]=n[t]);return a}(n,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(a[t]=n[t])}return a}var p=l.createContext({}),c=function(n){var e=l.useContext(p),t=e;return n&&(t="function"==typeof n?n(e):r(r({},e),n)),t},o=function(n){var e=c(n.components);return l.createElement(p.Provider,{value:e},n.children)},u="mdxType",d={inlineCode:"code",wrapper:function(n){var e=n.children;return l.createElement(l.Fragment,{},e)}},y=l.forwardRef((function(n,e){var t=n.components,a=n.mdxType,i=n.originalType,p=n.parentName,o=g(n,["components","mdxType","originalType","parentName"]),u=c(t),y=a,m=u["".concat(p,".").concat(y)]||u[y]||d[y]||i;return t?l.createElement(m,r(r({ref:e},o),{},{components:t})):l.createElement(m,r({ref:e},o))}));function m(n,e){var t=arguments,a=e&&e.mdxType;if("string"==typeof n||a){var i=t.length,r=new Array(i);r[0]=y;var g={};for(var p in e)hasOwnProperty.call(e,p)&&(g[p]=e[p]);g.originalType=n,g[u]="string"==typeof n?n:a,r[1]=g;for(var c=2;c{t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>g,toc:()=>c});var l=t(8168),a=(t(6540),t(5680));const i={},r="\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f",g={unversionedId:"Houdini/Houdini-render-fluid",id:"Houdini/Houdini-render-fluid",title:"\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f",description:"\u7248\u672c\uff1aHoudini19.5 \u5176\u4ed6\u7248\u672c\u5e94\u8be5\u4e5f\u5dee\u4e0d\u591a",source:"@site/docs/Houdini/Houdini-render-fluid.md",sourceDirName:"Houdini",slug:"/Houdini/Houdini-render-fluid",permalink:"/Houdini/Houdini-render-fluid",draft:!1,editUrl:"https://github.com/chunleili/chunleili.github.io/tree/master/docs/Houdini/Houdini-render-fluid.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"control-point",permalink:"/Houdini/Houdini-learn/control-point"},next:{title:"\u5e26\u7740uv\u8fdb\u884c\u6a21\u62df(\u51b0\u6fc0\u51cc\u6848\u4f8b\uff09",permalink:"/Houdini/ice-cream"}},p={},c=[{value:"Houdini\u57fa\u672c\u5e38\u8bc6",id:"houdini\u57fa\u672c\u5e38\u8bc6",level:2},{value:"Houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f",id:"houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f",level:3},{value:"Houdini \u8282\u70b9",id:"houdini-\u8282\u70b9",level:3},{value:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa",id:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa",level:2},{value:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e",id:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e",level:3},{value:"\u8bfb\u53d6\u6570\u636e\u5230houdini",id:"\u8bfb\u53d6\u6570\u636e\u5230houdini",level:3},{value:"\u91cd\u5efa\u8868\u9762",id:"\u91cd\u5efa\u8868\u9762",level:3},{value:"\u706f\u5149\u548c\u6444\u50cf\u673a (Mantra \uff09",id:"\u706f\u5149\u548c\u6444\u50cf\u673a-mantra-",level:2},{value:"\u706f\u5149",id:"\u706f\u5149",level:3},{value:"\u9762\u5149\u6e90",id:"\u9762\u5149\u6e90",level:4},{value:"\u73af\u5883\u5149\u548cHDR\u80cc\u666f",id:"\u73af\u5883\u5149\u548chdr\u80cc\u666f",level:4},{value:"\u6444\u50cf\u673a",id:"\u6444\u50cf\u673a",level:3},{value:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570\uff08Mantra\uff09",id:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570mantra",level:2},{value:"\u6750\u8d28",id:"\u6750\u8d28",level:3},{value:"\u6e32\u67d3\u5668",id:"\u6e32\u67d3\u5668",level:2}],o={toc:c},u="wrapper";function d(n){let{components:e,...t}=n;return(0,a.yg)(u,(0,l.A)({},o,t,{components:e,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"\u5982\u4f55\u4f7f\u7528houdini\u6e32\u67d3\u6d41\u4f53"},"\u5982\u4f55\u4f7f\u7528Houdini\u6e32\u67d3\u6d41\u4f53\uff1f"),(0,a.yg)("p",null,"\u7248\u672c\uff1aHoudini19.5 \u5176\u4ed6\u7248\u672c\u5e94\u8be5\u4e5f\u5dee\u4e0d\u591a"),(0,a.yg)("p",null,"\u5982\u679c\u8fd9\u91cc\u7684\u56fe\u6302\u4e86\uff0c\u8bf7\u770b",(0,a.yg)("a",{parentName:"p",href:"https://blog.csdn.net/weixin_43940314/article/details/127653109?sharetype=blogdetail&sharerId=127653109&sharerefer=WAP&sharesource="},"csdn")),(0,a.yg)("p",null,"\u6e32\u67d3\u5668\u4e0e\u6750\u8d28\u662f\u76f4\u63a5\u5173\u8054\u7684\uff0c\u4e0d\u540c\u6e32\u67d3\u5668\u6709\u4e0d\u540c\u7684\u706f\u5149\u3001\u6750\u8d28\u3002"),(0,a.yg)("p",null,"\u6211\u4eec\u9996\u5148\u8bb2\u89e3\u5982\u4f55\u5229\u7528Houdini\u81ea\u5e26\u7684Mantra\u6e32\u67d3\uff08CPU\u6e32\u67d3\uff0c\u8f83\u6162\uff09\uff0c\u7136\u540e\u8bb2\u89e3\u66f4\u5feb\u7684\u7b2c\u4e09\u65b9\u6e32\u67d3\u5668Redshift\uff08GPU\u6e32\u67d3\uff0c\u8f83\u5feb\uff09\u3002"),(0,a.yg)("p",null,"\u4f46\u662f\uff0c\u5728\u6b64\u4e4b\u524d\uff0c\u6709\u4e00\u4e9b\u901a\u7528\u6b65\u9aa4\uff0c\u5373\u8bfb\u53d6\u6d41\u4f53\u7c92\u5b50\u5e27\u6570\u636e\u548c\u8868\u9762\u91cd\u5efa\u3002"),(0,a.yg)("h2",{id:"houdini\u57fa\u672c\u5e38\u8bc6"},"Houdini\u57fa\u672c\u5e38\u8bc6"),(0,a.yg)("h3",{id:"houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f"},"Houdini\u4e2d\u89c6\u89d2\u79fb\u52a8\u7684\u65b9\u5f0f"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Esc\u8fdb\u5165\u89c6\u56fe\u89c6\u89d2"),"\uff0c"),(0,a.yg)("p",null,"\u7136\u540e",(0,a.yg)("strong",{parentName:"p"},"\u5de6\u952e\u65cb\u8f6c\uff0c\u6eda\u8f6e/\u53f3\u952e\u62c9\u8fd1\u62c9\u8fdc\uff0c\u4e2d\u952e\u5e73\u79fb"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"H\u952e\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"G\u952e\u4ee5\u67d0\u4e2a\u7269\u4f53\u4e3a\u4e2d\u5fc3\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("h3",{id:"houdini-\u8282\u70b9"},"Houdini \u8282\u70b9"),(0,a.yg)("p",null,"\u8282\u70b9\u662fHoudini\u6838\u5fc3\u4e2d\u7684\u6838\u5fc3\uff01\u662f\u7b2c\u4e00\u516c\u6c11\u3002"),(0,a.yg)("p",null,"\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Houdini\u88ab\u79f0\u4e3a\u7a0b\u5e8f\u5316\u5efa\u6a21\u8f6f\u4ef6\u3002"),(0,a.yg)("p",null,"Houdini\u4e2d",(0,a.yg)("strong",{parentName:"p"},"\u6240\u6709\u64cd\u4f5c"),"\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u8282\u70b9\u3002"),(0,a.yg)("p",null,"\u5728Network\u89c6\u56fe\u4e2d\u7528 ",(0,a.yg)("strong",{parentName:"p"},"Tab\u952e"),"\u521b\u5efa\u8282\u70b9\u3002"),(0,a.yg)("h2",{id:"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa"},"\u8bfb\u53d6\u6570\u636e\u548c\u6d41\u4f53\u8868\u9762\u91cd\u5efa"),(0,a.yg)("h3",{id:"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e"},"\u7c92\u5b50\u4f4d\u7f6e\u6570\u636e"),(0,a.yg)("p",null,"\u9996\u5148\uff0c\u6211\u4eec\u51c6\u5907\u7c92\u5b50\u6570\u636e\u3002\u6211\u8fd9\u91cc\u7684\u8f93\u5165\u6570\u636e\u662f\u4ecetaichi\u751f\u6210\u7684mpm3d\u6a21\u62df\u5f97\u5230\u7684\u5e8f\u5217\uff08\u9ed8\u8ba4\u662fply\u683c\u5f0f\uff09"),(0,a.yg)("p",null,"\u5982\u679c\u662fobj\u683c\u5f0f\u7684\u8bdd\uff0c\u5b83\u91cc\u9762\u53ea\u6709\u4e00\u4e9b\u70b9\u7684\u4f4d\u7f6e\u800c\u5df2\u3002\n\u4f8b\u5982"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"v 1.00718 0.992176 1.00718\nv 1.09713 0.992118 1.00712\nv 1.2004 0.992209 1.00721\nv 1.29996 0.992199 1.0072\nv 1.4 0.9922 1.0072\nv 1.5 0.9922 1.0072\nv 1.6 0.9922 1.0072\nv 1.7 0.9922 1.0072\nv 1.8 0.9922 1.0072\nv 1.9 0.9922 1.0072\nv 2 0.9922 1.0072\nv 2.1 0.9922 1.0072\nv 2.2 0.9922 1.0072\nv 2.3 0.9922 1.0072\nv 2.4 0.9922 1.0072\nv 2.5 0.9922 1.0072\nv 2.6 0.9922 1.0072\n...\n")),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/72011fe46c6545d68884858c393fe099.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h3",{id:"\u8bfb\u53d6\u6570\u636e\u5230houdini"},"\u8bfb\u53d6\u6570\u636e\u5230houdini"),(0,a.yg)("p",null,"\u6211\u4eec\u65b0\u5efa\u4e00\u4e2ageo\u8282\u70b9\uff0c\u91cd\u547d\u540d\u4e3aread_data\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/c725f103b70f4a41a56c5021f2e7a3c5.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u53cc\u51fb\u8fdb\u5165\u8be5\u8282\u70b9"),(0,a.yg)("p",null,"\u7136\u540e\u65b0\u5efafile\u8282\u70b9\uff0c\u9009\u62e9\u6570\u636e\u5e8f\u5217"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a71a7edd221c41f0853c7125c8ac8bad.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6211\u4eec\u73b0\u5728\u5f97\u5230\u7684\u5c31\u662f\u4e00\u5806\u70b9\u3002"),(0,a.yg)("h3",{id:"\u91cd\u5efa\u8868\u9762"},"\u91cd\u5efa\u8868\u9762"),(0,a.yg)("p",null,"\u63a5\u4e0b\u6765\u91cd\u5efa\u8868\u9762\u3002\u4f7f\u7528particle fluid surface\u8fd9\u4e2a\u8282\u70b9\u3002\u8c03\u6574particle seperation\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/57942776a283480d8d821c719ec48ef7.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u5b9e\u9645\u4e0a\u8fd9\u5c31\u5b8c\u6210\u4e86\u5de5\u4f5c\u3002\u4f46\u662f\u8fd9\u6837\u7684\u8bdd\uff0c\u4f60\u6bcf\u6b21\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u90fd\u8981\u91cd\u65b0\u8bfb\u53d6\u7c92\u5b50\uff0c\u7136\u540e\u91cd\u5efa\u8868\u9762\u3002\u6211\u4eec\u4e0d\u5982\u628a\u8868\u9762\u7f13\u5b58\u4e00\u4e0b\uff0c\u4ee5\u540e\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a\u7f13\u5b58\u5373\u53ef\u3002"),(0,a.yg)("p",null,"\u65b0\u5efafile cache\u8282\u70b9\uff0c\u7136\u540e\u4fee\u6539\u4e0b\u9762\u7684\u65f6\u95f4\u5e27\u3002\u6211\u4eec\u53ea\u9700\u898150\u5e27\uff0c\u56e0\u6b64\u6539\u4e3a50\u3002\uff08\u4e0a\u9762\u7eff\u8272\u7684\u4f4d\u7f6e\u4f1a\u968f\u4e4b\u66f4\u6539\u3002\u5982\u679c\u4f60\u76f4\u63a5\u53bb\u6539\u7eff\u8272\u7684\u4f4d\u7f6e\u662f\u6539\u4e0d\u4e86\u7684\u3002\uff09\n\u5e76\u4e14\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u6307\u5b9a\u8f93\u51fa\u6587\u4ef6\u5e8f\u5217\u7684\u540d\u5b57\uff1a",(0,a.yg)("inlineCode",{parentName:"p"},"$OS"),"\u7684\u610f\u601d\u5c31\u662f\u5f53\u524d\u8282\u70b9\u7684\u540d\u5b57\u3002",(0,a.yg)("inlineCode",{parentName:"p"},"$HIP"),"\u7684\u610f\u601d\u5c31\u662f\u5f53\u524d.hip\u6587\u4ef6\u7684\u7edd\u5bf9\u8def\u5f84\u3002"),(0,a.yg)("p",null,"\u8f93\u51fa\u7684\u683c\u5f0f\u662f.bgeo.sc\u3002\u8fd9\u662fhoudini\u7279\u6709\u7684\u538b\u7f29\u683c\u5f0f\uff0c\u5bf9\u4e8eHoudini\u6765\u8bf4\u8bfb\u5199\u90fd\u5f88\u5feb\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/666d346b63534e518fa6c56e68847881.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u8f93\u51fa\u5b8c\u4e86\uff0c\u4f60\u53ef\u4ee5\u53bb\u770b\u4e00\u770b\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/aa277ae28105498d93caccc404ee7b96.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u4f60\u4f1a\u53d1\u73b0file cache\u4e4b\u540e\u7684\u8282\u70b9\u4e0a\u4f1a\u51fa\u73b0\u4e00\u4e2a\u865a\u5f71\uff0c\u8fd9\u5c31\u4ee3\u8868\u6211\u4eec\u5df2\u7ecf\u7f13\u5b58\u4e86\u3002"),(0,a.yg)("p",null,"\u6700\u540e\uff0c\u6211\u4eec\u65b0\u5efa\u4e00\u4e2anull\u8282\u70b9\uff0c\u91cd\u547d\u540d\u4e3afluid_surface\u3002\u8fd9\u4e2a\u8282\u70b9\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff0c\u5355\u7eaf\u5c31\u662f\u4e3a\u4e86\u4ee5\u540e\u597d\u5f15\u7528\u540d\u5b57\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/d744768941d04429a5c2894ca701a55a.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u56de\u5230\u6700\u5916\u5c42"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/75ea512b4a874202a0f5c60b1779cf38.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u81f3\u6b64\uff0c\u6211\u4eec\u5df2\u7ecf\u5b8c\u6210\u4e86\u6d41\u4f53\u8bfb\u53d6\u6570\u636e\u548c\u8868\u9762\u91cd\u5efa"),(0,a.yg)("h2",{id:"\u706f\u5149\u548c\u6444\u50cf\u673a-mantra-"},"\u706f\u5149\u548c\u6444\u50cf\u673a (Mantra \uff09"),(0,a.yg)("p",null,"\u706f\u5149\u548c\u6750\u8d28\u90fd\u662f\u6e32\u67d3\u5668\u7279\u5b9a\u7684\uff0c\u6211\u4eec\u4ece\u6b64\u5904\u5f00\u59cb\u4f7f\u7528Mantra\u6e32\u67d3\u3002"),(0,a.yg)("h3",{id:"\u706f\u5149"},"\u706f\u5149"),(0,a.yg)("h4",{id:"\u9762\u5149\u6e90"},"\u9762\u5149\u6e90"),(0,a.yg)("p",null,"\u9996\u5148\u589e\u52a0\u9762\u5149\u6e90\u3002control+\u5de6\u952e \u70b9\u51fb\u5de5\u5177\u680f\uff08shelf tool\uff09\u7684area light"),(0,a.yg)("p",null,"\u7136\u540e\u5c31\u4f1a\u81ea\u52a8\u8fdb\u5165\u706f\u5149\u7684\u89c6\u89d2\uff0c",(0,a.yg)("strong",{parentName:"p"},"\u70b9\u51fb\u9501\u5b9a"),"\uff0c\u5c31\u53ef\u4ee5\u79fb\u52a8\u706f\u5149\u3002"),(0,a.yg)("p",null,"Houdini\u4e2d\u79fb\u52a8\u7684\u65b9\u5f0f\u662f\u5148"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Esc\u8fdb\u5165\u89c6\u56fe\u89c6\u89d2"),"\uff0c"),(0,a.yg)("p",null,"\u7136\u540e",(0,a.yg)("strong",{parentName:"p"},"\u5de6\u952e\u65cb\u8f6c\uff0c\u6eda\u8f6e/\u53f3\u952e\u62c9\u8fd1\u62c9\u8fdc\uff0c\u4e2d\u952e\u5e73\u79fb"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"H\u952e\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"G\u952e\u4ee5\u67d0\u4e2a\u7269\u4f53\u4e3a\u4e2d\u5fc3\u91cd\u7f6e\u89c6\u89d2")," "),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/bcb3bed5f9234defa7e57c5c19607c0d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u8c03\u6574\u7ed3\u675f\u4e4b\u540e\uff0c\u518d\u6b21\u70b9\u51fb\u9501\uff0c\u7136\u540e\u968f\u4fbf\u79fb\u52a8\u4e00\u4e0b\u89c6\u89d2\uff0c\u5c31\u80fd\u9000\u51fa\u3002"),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u60f3\u518d\u6b21\u8fdb\u5165\u706f\u5149\u89c6\u89d2\uff0c\u5c31\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684",(0,a.yg)("strong",{parentName:"p"},"look through light"),"\u3002\u5982\u4e0b\u56fe\u6240\u793a\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/9f5b373a4f5645df9daf8a067f40bc4b.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u9000\u51fa\u4ee5\u540e\uff0c\u968f\u4fbf\u79fb\u52a8\u4e0b\u89c6\u89d2\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f1a\u6709\u4e00\u4e2a\u9ec4\u8272\u7684\u77e9\u5f62\uff0c\u90a3\u4e2a\u5c31\u662f\u521a\u624d\u7684\u9762\u5149\u6e90\u7684\u4f4d\u7f6e\u3002"),(0,a.yg)("p",null,"\u7136\u540e\u8c03\u6574\u706f\u5149\u7684\u4eae\u5ea6\u3002\u53ef\u4ee5\u8c03",(0,a.yg)("strong",{parentName:"p"},"\u53c2\u6570Exposure"),"\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/00ee2c62c4e841da97af6279ff62c1e5.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u5982\u6cd5\u70ae\u5236\u518d\u5236\u4f5c\u53e6\u4e00\u4e2a\u9762\u5149\u6e90\u3002"),(0,a.yg)("h4",{id:"\u73af\u5883\u5149\u548chdr\u80cc\u666f"},"\u73af\u5883\u5149\u548cHDR\u80cc\u666f"),(0,a.yg)("p",null,"\u63a5\u4e0b\u6765\u589e\u52a0\u73af\u5883\u5149\u548cHDR\u80cc\u666f"),(0,a.yg)("p",null,"\u589e\u52a0",(0,a.yg)("strong",{parentName:"p"},"environment light\u8282\u70b9")),(0,a.yg)("p",null,"\u7136\u540e\u9009\u62e9",(0,a.yg)("strong",{parentName:"p"},"Environment Map"),"\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u53ef\u4ee5\u5bfc\u5165",(0,a.yg)("strong",{parentName:"p"},"HDR\u80cc\u666f"),"\u56fe\u3002"),(0,a.yg)("p",null,"\u4f60\u53ef\u4ee5\u4ece ",(0,a.yg)("a",{parentName:"p",href:"https://polyhaven.com/"},"https://polyhaven.com/")," \u83b7\u53d6\u514d\u8d39\u7684HDR\u8d44\u6e90\uff01"),(0,a.yg)("p",null,"HDR\u7684\u4f5c\u7528\u5c31\u662f\u4e3a\u73af\u5883\u6dfb\u52a0\u73af\u5883\u5149\u7167\u3002\u56e0\u4e3a\u662f\u73af\u5883\uff0c\u4f60\u5f97\u6307\u5b9a\u662f\u4ec0\u4e48\u6837\u7684\u73af\u5883\u3002\u6bd4\u5982\uff1a",(0,a.yg)("strong",{parentName:"p"},"\u662f\u53a8\u623f\uff1f\u8fd8\u662f\u5e7f\u573a\uff1f\u8fd8\u662f\u68ee\u6797\uff1f")),(0,a.yg)("p",null,"\u6211\u4eec\u8981\u6e05\u695a\uff0c",(0,a.yg)("strong",{parentName:"p"},"HDR\u7684\u80cc\u666f\u56fe\u9ed8\u8ba4\u4e0d\u4f1a\u88ab\u6e32\u67d3\u51fa\u6765"),"\uff08\u5f53\u7136\u4f60\u4e5f\u53ef\u4ee5\u6e32\u67d3\u51fa\u6765\uff09\uff0c",(0,a.yg)("strong",{parentName:"p"},"\u6dfb\u52a0HDR\u7684\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u8bbe\u7f6e\u73af\u5883\u5149\u7167"),"\uff01"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/ee875faae8a642299ed1ad8357ab305c.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h3",{id:"\u6444\u50cf\u673a"},"\u6444\u50cf\u673a"),(0,a.yg)("p",null,"\u8bbe\u7f6e\u76f8\u673a\u7684\u65b9\u5f0f\u57fa\u672c\u4e0e\u9762\u5149\u6e90\u4e00\u81f4\uff1alook through, \u9501\u5b9a\uff0c\u8c03\u6574\uff0c\u89e3\u9501\u5e76\u9000\u51fa\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/f019b300d68d4617aec1b55bf44430fa.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h2",{id:"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570mantra"},"\u8bbe\u7f6e\u6750\u8d28\u548c\u6e32\u67d3\u5668\u53c2\u6570\uff08Mantra\uff09"),(0,a.yg)("h3",{id:"\u6750\u8d28"},"\u6750\u8d28"),(0,a.yg)("p",null,"\u9996\u5148\uff0c\u5207\u6362\u5230Material Platte"),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u53d1\u73b0\u81ea\u5df1\u7684\u6807\u7b7e\u9875\u4e0a\u6ca1\u6709\u8fd9\u73a9\u610f\uff0c\u5c31\u53f3\u952e\uff0c\u7136\u540e\u9009\u62e9Material Platte"),(0,a.yg)("p",null,"\u8fd9\u91cc\u9762\u6240\u6709\u7684\u4e1c\u897f\uff0c\u90fd\u662f\u8fea\u58eb\u5c3c\u7684Principled shader\uff0c\u5b66\u540d\u53c8\u53ebBRDF\u6216\u8005BSDF\u3002Blender\u91cc\u9762\u53c8\u53eb\u539f\u7406\u5316BSDF\u3002\u6240\u6709\u8fd9\u4e9b\u4e1c\u897f\uff0c\u90fd\u53ea\u662f\u53c2\u6570\u4e0d\u540c\u7684\u9884\u8bbe\u800c\u5df2\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/17acc48b0a62433099524e19e8573466.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6211\u4eec\u628aBasic fluid\u62d6\u51fa\u6765\u3002\u8fd9\u662f\u4e2a\u6d41\u4f53\u7684\u9884\u8bbe\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/6484de66684346fabfca8420f127ab51.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u7136\u540e\u518d\u628a\u5b83\u62d6\u5230\u6211\u4eec\u7684\u6d41\u4f53\u5757\u4e0a"),(0,a.yg)("p",null,"\u8fd9\u65f6\u6211\u4eec\u5c31\u4f1a\u53d1\u73b0\u6d41\u4f53\u6709\u4e86\u6750\u8d28\u3002\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/e5e0ae213dcd4b569e92c631418ab486.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u60f3\u8c03\u6574\u6d41\u4f53\u7684\u6750\u8d28\uff0c\u53ef\u4ee5\u53cc\u51fb\u8fdb\u5165Basic fluid\uff0c \u7136\u540e\u8c03\u6574\u53c2\u6570\u3002\u6bd4\u5982\u6211\u4eec\u8fd9\u91cc\u7a0d\u5fae\u8c03\u6574\u4e00\u4e0b\u4e0d\u900f\u660e\u5ea6\uff08opacity\uff09"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/204093c19f8443c8935995dee991e124.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("h2",{id:"\u6e32\u67d3\u5668"},"\u6e32\u67d3\u5668"),(0,a.yg)("p",null,"\u6211\u4eec\u8df3\u8f6c\u5230out\u3002\u4f1a\u53d1\u73b0\u6709\u4e2a\u9ed8\u8ba4\u7684mantra_ipr\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/1ed0a159f58b4030bb266c1576c2cdb4.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u7136\u540e\u70b9\u51fb\u6e32\u67d3\u7a97\u53e3"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a65fa327265340e9898668dad807a5dd.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u8bbe\u7f6e\u597d\u8f93\u51fa\u8def\u5f84\u7b49\u4e4b\u540e\uff0c\u70b9\u51fb\u6e32\u67d3\uff08\u6216Render To Disk\uff09\u5373\u53ef\uff01\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/c280ab4ef34a4a109abf169e62aa8f9d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u6ce8\u610f\uff1a\u4f60\u53ef\u4ee5\u81ea\u5df1\u6307\u5b9a\u4fdd\u5b58\u8def\u5f84\u548c\u6e32\u67d3\u7684\u8303\u56f4\u3002\u6211\u8fd9\u91cc\u53ea\u662f\u6e32\u67d3\u4e00\u5e27\u3002"),(0,a.yg)("p",null,"Mantra\u662fCPU\u6e32\u67d3\uff0c\u6240\u4ee5\u5f88\u6162\u3002\u800c\u4e14\u4f1a\u5360\u6ee1\u4f60\u7684\u6574\u4e2aCPU\uff08\u5982\u56fe\u6240\u793a\u3002\u4e00\u5f20\u56fe\u6211\u5df2\u7ecf\u6e32\u67d3\u4e861\u520617\u79d2\u624d\u8fdb\u5ea687%\uff0c\u800c\u4e14CPU\u6ee1\u8f7d\uff0c\u5185\u5b58\u6d88\u80171.11GB\uff09"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a05a89bd08c44c1599e8c52297ee9bef.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})),(0,a.yg)("p",null,"\u5982\u679c\u4f60\u7b49\u4e0d\u53ca\u7684\u8bdd\uff0c\u53ef\u4ee5\u5148\u4fdd\u5b58\u4e00\u4e0b\u6ca1\u6e32\u67d3\u5b8c\u7684\u622a\u56fe\u3002\u5982\u4e0b\u6240\u793a\u3002"),(0,a.yg)("p",null,(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/a289640783204bad948a6bf362c8723d.png",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"}),"\n\u81f3\u6b64\uff0c\u5b8c\u6574\u7684\u6e32\u67d3\u6d41\u7a0b\u7ed3\u675f\uff01"),(0,a.yg)("p",null,"\u7ed3\u679c\u5982\u56fe\uff1a\n",(0,a.yg)("img",{parentName:"p",src:"https://img-blog.csdnimg.cn/6b256be323db46e4ac590dda37c213ee.jpeg",alt:"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0"})))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.ec51748e.js b/assets/js/runtime~main.dfce73e0.js similarity index 99% rename from assets/js/runtime~main.ec51748e.js rename to assets/js/runtime~main.dfce73e0.js index c23c49d2..c2e1d747 100644 --- a/assets/js/runtime~main.ec51748e.js +++ b/assets/js/runtime~main.dfce73e0.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,b,d={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(f,a,c,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,c,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>d[f]=()=>e[f]));return d.default=()=>e,r.d(b,d),b},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({49:"1dc4db7c",174:"5344458d",201:"ce6ba830",224:"730727ed",226:"ce323e8f",276:"e38862e4",304:"db21cc40",462:"c7481181",467:"720324fd",497:"a80da1cf",522:"1c49a5c3",636:"00291818",648:"df8fe05c",690:"0a99450c",743:"b4fad445",801:"47057232",823:"865bfd16",866:"7c84781e",917:"43676697",936:"82f9dd9e",937:"0a9f95ff",1106:"deaf122b",1108:"3c6428cd",1170:"e9e4ad2e",1178:"78060cbc",1228:"ecb5e366",1251:"9de79606",1290:"837e0316",1353:"761b27d9",1427:"19152f9c",1478:"304a4b3f",1603:"ca79d831",1642:"9ceb8314",1680:"6dd4e662",1728:"2ae2f502",1766:"c69f0106",1858:"7b59d196",1925:"3de663f9",1937:"7b810365",1941:"d84b7e88",1953:"cb363577",1991:"b2b675dd",2048:"cd2255b2",2110:"90ce3519",2138:"1a4e3797",2154:"48b0f434",2365:"4e0816ee",2447:"4b391ba8",2711:"9e4087bc",2725:"1333721d",2896:"7be1f61a",2947:"733e1e6f",3018:"cf7c140c",3084:"6ae5be1b",3211:"b9e1c5eb",3249:"ccc49370",3261:"ba43d3de",3285:"b12fb95a",3334:"2cfde092",3499:"bae46b79",3576:"c9871e02",3624:"0ed85ff5",3824:"f1eae9e3",3976:"0e384e19",4134:"393be207",4184:"ef6b1661",4279:"df203c0f",4350:"29798907",4436:"ce01b61e",4523:"8a7db39f",4544:"bbcf1454",4608:"7627d7e9",4670:"21c87521",4722:"608ae6a4",4775:"33ea8b91",4787:"3720c009",4813:"6875c492",4907:"ab74351c",4938:"6e4f22ec",4961:"e17022ef",5127:"06b83881",5151:"55960ee5",5168:"1559ed7e",5282:"3674b4e6",5302:"a24beb83",5331:"7babe52b",5382:"503fc7a4",5514:"cbcf3901",5562:"a7bc2712",5682:"24ebf4c1",5752:"b1343578",5833:"fdd57e34",5854:"d59c6b48",5894:"b2f554cd",5898:"dc2ed254",5905:"a56154f6",5972:"20693c26",6031:"85505a31",6061:"1f391b9e",6129:"883369ba",6195:"36a290cd",6243:"e50c5db0",6327:"87ae2a60",6537:"579d1b22",6882:"1bcc8060",6942:"91d2f6e2",6980:"088a427a",6985:"1871109a",7131:"8b9c3630",7132:"24f3520e",7146:"1043ef26",7432:"f465d507",7472:"814f3328",7475:"5092ec82",7520:"f6ba3702",7538:"81ffe5e9",7577:"2ff1dd1f",7578:"a2410eac",7643:"a6aa9e1f",7693:"95b65af4",7712:"d5cd1fde",7747:"83e803f1",7916:"64cf0099",7977:"a0dc72de",8033:"84924425",8209:"01a85c17",8314:"9f9b2274",8336:"2da80cef",8401:"17896441",8517:"ec124d7f",8581:"935f2afb",8594:"fda3c85e",8649:"51117de8",8691:"c85ef733",8714:"1be78505",9203:"273c5a9f",9267:"a7023ddc",9308:"0b345f9b",9343:"209d5572",9383:"c03d8d71",9552:"b1920104",9597:"c05037aa",9616:"f4f15405",9671:"8c0555f6",9712:"c539745e",9742:"4c60ab12",9772:"43ffbeb1",9878:"9e3a0c57",9954:"7c18ab4a"}[e]||e)+"."+{49:"5c3d0524",174:"8302a0a7",201:"b2490e5d",224:"db1ef899",226:"abc3312b",276:"a760ba91",304:"01b81a70",416:"36a683d5",462:"578badcf",467:"6e81923d",497:"29db5880",522:"a279c51c",636:"cd5272a3",648:"6cd6801c",690:"2c82c92a",743:"184e59bd",801:"2f7c63de",823:"9d5d258a",866:"d57655f0",917:"9238948a",936:"2aed6b31",937:"1a2750bf",1106:"12600aa2",1108:"dfe14123",1170:"c3d68139",1178:"d6bda2f9",1228:"fe5f8a5f",1251:"17a123a3",1290:"cc058ee2",1353:"2e65ff5b",1427:"5f1a9c3a",1478:"215d01da",1603:"c77727c6",1642:"ce12af40",1680:"2c6c94f7",1728:"727523bf",1766:"f0c27fd6",1774:"fff0ea19",1858:"d3383fee",1925:"cfc7ed20",1937:"1b29037d",1941:"27663fc3",1953:"81794f1f",1991:"178a215b",2048:"31625a4e",2110:"017d97eb",2138:"be555d31",2154:"b724b4cb",2365:"e3fdb065",2447:"f97c8e88",2711:"62b12b12",2725:"59196030",2896:"90850bd6",2947:"2fc69720",3018:"a522e7e2",3084:"a02b1763",3211:"5dda6130",3249:"4539f6bc",3261:"4b847636",3285:"d69b8c11",3334:"6ce10bfe",3369:"eff6b72a",3499:"cea99b4f",3576:"58886e3d",3624:"49a39415",3824:"7d797244",3976:"1576238f",4134:"c24182af",4184:"75d95d95",4279:"5c5c2127",4350:"55efb62d",4436:"2f1bec54",4523:"90b637cb",4544:"a71d04d8",4608:"6817e06b",4670:"f4aa4c4b",4722:"f0d6647d",4775:"5a8b7627",4787:"7641be1f",4813:"22a858f7",4907:"a747d24b",4938:"3a5479e0",4961:"cbe65722",5127:"2213faed",5151:"9f8f7150",5168:"74ac761f",5282:"e0b60c6b",5302:"920e4b17",5331:"66edeec2",5382:"b256e65c",5514:"759fe3e1",5562:"b2946f22",5682:"95c33682",5752:"e0f6cee7",5833:"830391dc",5854:"27f516a3",5894:"90d6c6bb",5898:"4851e688",5905:"49b18b2e",5972:"012e34c4",6031:"4023dcb1",6061:"5c0de893",6129:"2a078ddc",6195:"2d84ab7a",6243:"4c3a2d3a",6327:"9d6565e7",6537:"0e89a05c",6882:"2e29701d",6942:"0a38b8c6",6980:"be67e888",6985:"03b84f69",7131:"d65a7f5b",7132:"738ae44e",7146:"36fd2581",7432:"19b3d74c",7472:"d1b58a27",7475:"d7d98fb7",7520:"fb0b4b5c",7538:"458f5136",7577:"a24b2385",7578:"a74e39a7",7643:"e461d287",7693:"219abcb8",7712:"152bb598",7747:"b2368e25",7916:"3eca2505",7977:"35950b20",8033:"b4b62424",8158:"900dc11d",8209:"bf8a664d",8314:"4dd39215",8336:"3a4607ba",8401:"622ee766",8517:"1e2a61c7",8581:"24a8d9ad",8594:"9c2e0cd1",8649:"bd298d76",8691:"d48fb50b",8714:"613bae91",8913:"83bce4ad",9203:"44f32833",9267:"f1ad0385",9308:"39c81af6",9343:"d8686ec8",9383:"53c059fe",9552:"830689a6",9597:"26b44d37",9616:"01761781",9671:"da4030e9",9712:"d4ed802b",9717:"f8d1f3cd",9742:"8171b2c3",9772:"78a0e280",9878:"a088cd3b",9954:"4392f649"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},b="website:",r.l=(e,f,a,d)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",29798907:"4350",43676697:"917",47057232:"801",84924425:"8033","1dc4db7c":"49","5344458d":"174",ce6ba830:"201","730727ed":"224",ce323e8f:"226",e38862e4:"276",db21cc40:"304",c7481181:"462","720324fd":"467",a80da1cf:"497","1c49a5c3":"522","00291818":"636",df8fe05c:"648","0a99450c":"690",b4fad445:"743","865bfd16":"823","7c84781e":"866","82f9dd9e":"936","0a9f95ff":"937",deaf122b:"1106","3c6428cd":"1108",e9e4ad2e:"1170","78060cbc":"1178",ecb5e366:"1228","9de79606":"1251","837e0316":"1290","761b27d9":"1353","19152f9c":"1427","304a4b3f":"1478",ca79d831:"1603","9ceb8314":"1642","6dd4e662":"1680","2ae2f502":"1728",c69f0106:"1766","7b59d196":"1858","3de663f9":"1925","7b810365":"1937",d84b7e88:"1941",cb363577:"1953",b2b675dd:"1991",cd2255b2:"2048","90ce3519":"2110","1a4e3797":"2138","48b0f434":"2154","4e0816ee":"2365","4b391ba8":"2447","9e4087bc":"2711","1333721d":"2725","7be1f61a":"2896","733e1e6f":"2947",cf7c140c:"3018","6ae5be1b":"3084",b9e1c5eb:"3211",ccc49370:"3249",ba43d3de:"3261",b12fb95a:"3285","2cfde092":"3334",bae46b79:"3499",c9871e02:"3576","0ed85ff5":"3624",f1eae9e3:"3824","0e384e19":"3976","393be207":"4134",ef6b1661:"4184",df203c0f:"4279",ce01b61e:"4436","8a7db39f":"4523",bbcf1454:"4544","7627d7e9":"4608","21c87521":"4670","608ae6a4":"4722","33ea8b91":"4775","3720c009":"4787","6875c492":"4813",ab74351c:"4907","6e4f22ec":"4938",e17022ef:"4961","06b83881":"5127","55960ee5":"5151","1559ed7e":"5168","3674b4e6":"5282",a24beb83:"5302","7babe52b":"5331","503fc7a4":"5382",cbcf3901:"5514",a7bc2712:"5562","24ebf4c1":"5682",b1343578:"5752",fdd57e34:"5833",d59c6b48:"5854",b2f554cd:"5894",dc2ed254:"5898",a56154f6:"5905","20693c26":"5972","85505a31":"6031","1f391b9e":"6061","883369ba":"6129","36a290cd":"6195",e50c5db0:"6243","87ae2a60":"6327","579d1b22":"6537","1bcc8060":"6882","91d2f6e2":"6942","088a427a":"6980","1871109a":"6985","8b9c3630":"7131","24f3520e":"7132","1043ef26":"7146",f465d507:"7432","814f3328":"7472","5092ec82":"7475",f6ba3702:"7520","81ffe5e9":"7538","2ff1dd1f":"7577",a2410eac:"7578",a6aa9e1f:"7643","95b65af4":"7693",d5cd1fde:"7712","83e803f1":"7747","64cf0099":"7916",a0dc72de:"7977","01a85c17":"8209","9f9b2274":"8314","2da80cef":"8336",ec124d7f:"8517","935f2afb":"8581",fda3c85e:"8594","51117de8":"8649",c85ef733:"8691","1be78505":"8714","273c5a9f":"9203",a7023ddc:"9267","0b345f9b":"9308","209d5572":"9343",c03d8d71:"9383",b1920104:"9552",c05037aa:"9597",f4f15405:"9616","8c0555f6":"9671",c539745e:"9712","4c60ab12":"9742","43ffbeb1":"9772","9e3a0c57":"9878","7c18ab4a":"9954"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1869|5354)$/.test(f))e[f]=0;else{var b=new Promise(((a,b)=>c=e[f]=[a,b]));a.push(c[2]=b);var d=r.p+r.u(f),t=new Error;r.l(d,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,b,d={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(f,a,c,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,c,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>d[f]=()=>e[f]));return d.default=()=>e,r.d(b,d),b},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({49:"1dc4db7c",174:"5344458d",201:"ce6ba830",224:"730727ed",226:"ce323e8f",276:"e38862e4",304:"db21cc40",462:"c7481181",467:"720324fd",497:"a80da1cf",522:"1c49a5c3",636:"00291818",648:"df8fe05c",690:"0a99450c",743:"b4fad445",801:"47057232",823:"865bfd16",866:"7c84781e",917:"43676697",936:"82f9dd9e",937:"0a9f95ff",1106:"deaf122b",1108:"3c6428cd",1170:"e9e4ad2e",1178:"78060cbc",1228:"ecb5e366",1251:"9de79606",1290:"837e0316",1353:"761b27d9",1427:"19152f9c",1478:"304a4b3f",1603:"ca79d831",1642:"9ceb8314",1680:"6dd4e662",1728:"2ae2f502",1766:"c69f0106",1858:"7b59d196",1925:"3de663f9",1937:"7b810365",1941:"d84b7e88",1953:"cb363577",1991:"b2b675dd",2048:"cd2255b2",2110:"90ce3519",2138:"1a4e3797",2154:"48b0f434",2365:"4e0816ee",2447:"4b391ba8",2711:"9e4087bc",2725:"1333721d",2896:"7be1f61a",2947:"733e1e6f",3018:"cf7c140c",3084:"6ae5be1b",3211:"b9e1c5eb",3249:"ccc49370",3261:"ba43d3de",3285:"b12fb95a",3334:"2cfde092",3499:"bae46b79",3576:"c9871e02",3624:"0ed85ff5",3824:"f1eae9e3",3976:"0e384e19",4134:"393be207",4184:"ef6b1661",4279:"df203c0f",4350:"29798907",4436:"ce01b61e",4523:"8a7db39f",4544:"bbcf1454",4608:"7627d7e9",4670:"21c87521",4722:"608ae6a4",4775:"33ea8b91",4787:"3720c009",4813:"6875c492",4907:"ab74351c",4938:"6e4f22ec",4961:"e17022ef",5127:"06b83881",5151:"55960ee5",5168:"1559ed7e",5282:"3674b4e6",5302:"a24beb83",5331:"7babe52b",5382:"503fc7a4",5514:"cbcf3901",5562:"a7bc2712",5682:"24ebf4c1",5752:"b1343578",5833:"fdd57e34",5854:"d59c6b48",5894:"b2f554cd",5898:"dc2ed254",5905:"a56154f6",5972:"20693c26",6031:"85505a31",6061:"1f391b9e",6129:"883369ba",6195:"36a290cd",6243:"e50c5db0",6327:"87ae2a60",6537:"579d1b22",6882:"1bcc8060",6942:"91d2f6e2",6980:"088a427a",6985:"1871109a",7131:"8b9c3630",7132:"24f3520e",7146:"1043ef26",7432:"f465d507",7472:"814f3328",7475:"5092ec82",7520:"f6ba3702",7538:"81ffe5e9",7577:"2ff1dd1f",7578:"a2410eac",7643:"a6aa9e1f",7693:"95b65af4",7712:"d5cd1fde",7747:"83e803f1",7916:"64cf0099",7977:"a0dc72de",8033:"84924425",8209:"01a85c17",8314:"9f9b2274",8336:"2da80cef",8401:"17896441",8517:"ec124d7f",8581:"935f2afb",8594:"fda3c85e",8649:"51117de8",8691:"c85ef733",8714:"1be78505",9203:"273c5a9f",9267:"a7023ddc",9308:"0b345f9b",9343:"209d5572",9383:"c03d8d71",9552:"b1920104",9597:"c05037aa",9616:"f4f15405",9671:"8c0555f6",9712:"c539745e",9742:"4c60ab12",9772:"43ffbeb1",9878:"9e3a0c57",9954:"7c18ab4a"}[e]||e)+"."+{49:"5c3d0524",174:"8302a0a7",201:"b2490e5d",224:"db1ef899",226:"abc3312b",276:"a760ba91",304:"01b81a70",416:"36a683d5",462:"578badcf",467:"6e81923d",497:"29db5880",522:"a279c51c",636:"cd5272a3",648:"6cd6801c",690:"2c82c92a",743:"184e59bd",801:"2f7c63de",823:"9d5d258a",866:"d57655f0",917:"9238948a",936:"2aed6b31",937:"1a2750bf",1106:"12600aa2",1108:"dfe14123",1170:"c3d68139",1178:"d6bda2f9",1228:"fe5f8a5f",1251:"17a123a3",1290:"cc058ee2",1353:"2e65ff5b",1427:"5f1a9c3a",1478:"215d01da",1603:"c77727c6",1642:"ce12af40",1680:"2c6c94f7",1728:"727523bf",1766:"f0c27fd6",1774:"fff0ea19",1858:"d3383fee",1925:"cfc7ed20",1937:"1b29037d",1941:"27663fc3",1953:"81794f1f",1991:"178a215b",2048:"31625a4e",2110:"017d97eb",2138:"be555d31",2154:"b724b4cb",2365:"e3fdb065",2447:"f97c8e88",2711:"62b12b12",2725:"59196030",2896:"90850bd6",2947:"2fc69720",3018:"a522e7e2",3084:"a02b1763",3211:"5dda6130",3249:"4539f6bc",3261:"4b847636",3285:"d69b8c11",3334:"6ce10bfe",3369:"eff6b72a",3499:"cea99b4f",3576:"58886e3d",3624:"49a39415",3824:"7d797244",3976:"1576238f",4134:"c24182af",4184:"ce03ddf2",4279:"5c5c2127",4350:"55efb62d",4436:"2f1bec54",4523:"90b637cb",4544:"a71d04d8",4608:"6817e06b",4670:"f4aa4c4b",4722:"f0d6647d",4775:"5a8b7627",4787:"7641be1f",4813:"22a858f7",4907:"a747d24b",4938:"3a5479e0",4961:"cbe65722",5127:"2213faed",5151:"9f8f7150",5168:"74ac761f",5282:"e0b60c6b",5302:"920e4b17",5331:"66edeec2",5382:"b256e65c",5514:"759fe3e1",5562:"b2946f22",5682:"95c33682",5752:"e0f6cee7",5833:"830391dc",5854:"27f516a3",5894:"90d6c6bb",5898:"4851e688",5905:"49b18b2e",5972:"012e34c4",6031:"4023dcb1",6061:"5c0de893",6129:"2a078ddc",6195:"2d84ab7a",6243:"4c3a2d3a",6327:"9d6565e7",6537:"0e89a05c",6882:"2e29701d",6942:"0a38b8c6",6980:"be67e888",6985:"03b84f69",7131:"d65a7f5b",7132:"738ae44e",7146:"36fd2581",7432:"19b3d74c",7472:"d1b58a27",7475:"d7d98fb7",7520:"fb0b4b5c",7538:"458f5136",7577:"a24b2385",7578:"a74e39a7",7643:"e461d287",7693:"219abcb8",7712:"152bb598",7747:"b2368e25",7916:"3eca2505",7977:"35950b20",8033:"b4b62424",8158:"900dc11d",8209:"bf8a664d",8314:"4dd39215",8336:"3a4607ba",8401:"622ee766",8517:"1e2a61c7",8581:"24a8d9ad",8594:"9c2e0cd1",8649:"bd298d76",8691:"d48fb50b",8714:"613bae91",8913:"83bce4ad",9203:"44f32833",9267:"f1ad0385",9308:"39c81af6",9343:"d8686ec8",9383:"53c059fe",9552:"830689a6",9597:"26b44d37",9616:"01761781",9671:"da4030e9",9712:"d4ed802b",9717:"f8d1f3cd",9742:"8171b2c3",9772:"78a0e280",9878:"a088cd3b",9954:"4392f649"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},b="website:",r.l=(e,f,a,d)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",29798907:"4350",43676697:"917",47057232:"801",84924425:"8033","1dc4db7c":"49","5344458d":"174",ce6ba830:"201","730727ed":"224",ce323e8f:"226",e38862e4:"276",db21cc40:"304",c7481181:"462","720324fd":"467",a80da1cf:"497","1c49a5c3":"522","00291818":"636",df8fe05c:"648","0a99450c":"690",b4fad445:"743","865bfd16":"823","7c84781e":"866","82f9dd9e":"936","0a9f95ff":"937",deaf122b:"1106","3c6428cd":"1108",e9e4ad2e:"1170","78060cbc":"1178",ecb5e366:"1228","9de79606":"1251","837e0316":"1290","761b27d9":"1353","19152f9c":"1427","304a4b3f":"1478",ca79d831:"1603","9ceb8314":"1642","6dd4e662":"1680","2ae2f502":"1728",c69f0106:"1766","7b59d196":"1858","3de663f9":"1925","7b810365":"1937",d84b7e88:"1941",cb363577:"1953",b2b675dd:"1991",cd2255b2:"2048","90ce3519":"2110","1a4e3797":"2138","48b0f434":"2154","4e0816ee":"2365","4b391ba8":"2447","9e4087bc":"2711","1333721d":"2725","7be1f61a":"2896","733e1e6f":"2947",cf7c140c:"3018","6ae5be1b":"3084",b9e1c5eb:"3211",ccc49370:"3249",ba43d3de:"3261",b12fb95a:"3285","2cfde092":"3334",bae46b79:"3499",c9871e02:"3576","0ed85ff5":"3624",f1eae9e3:"3824","0e384e19":"3976","393be207":"4134",ef6b1661:"4184",df203c0f:"4279",ce01b61e:"4436","8a7db39f":"4523",bbcf1454:"4544","7627d7e9":"4608","21c87521":"4670","608ae6a4":"4722","33ea8b91":"4775","3720c009":"4787","6875c492":"4813",ab74351c:"4907","6e4f22ec":"4938",e17022ef:"4961","06b83881":"5127","55960ee5":"5151","1559ed7e":"5168","3674b4e6":"5282",a24beb83:"5302","7babe52b":"5331","503fc7a4":"5382",cbcf3901:"5514",a7bc2712:"5562","24ebf4c1":"5682",b1343578:"5752",fdd57e34:"5833",d59c6b48:"5854",b2f554cd:"5894",dc2ed254:"5898",a56154f6:"5905","20693c26":"5972","85505a31":"6031","1f391b9e":"6061","883369ba":"6129","36a290cd":"6195",e50c5db0:"6243","87ae2a60":"6327","579d1b22":"6537","1bcc8060":"6882","91d2f6e2":"6942","088a427a":"6980","1871109a":"6985","8b9c3630":"7131","24f3520e":"7132","1043ef26":"7146",f465d507:"7432","814f3328":"7472","5092ec82":"7475",f6ba3702:"7520","81ffe5e9":"7538","2ff1dd1f":"7577",a2410eac:"7578",a6aa9e1f:"7643","95b65af4":"7693",d5cd1fde:"7712","83e803f1":"7747","64cf0099":"7916",a0dc72de:"7977","01a85c17":"8209","9f9b2274":"8314","2da80cef":"8336",ec124d7f:"8517","935f2afb":"8581",fda3c85e:"8594","51117de8":"8649",c85ef733:"8691","1be78505":"8714","273c5a9f":"9203",a7023ddc:"9267","0b345f9b":"9308","209d5572":"9343",c03d8d71:"9383",b1920104:"9552",c05037aa:"9597",f4f15405:"9616","8c0555f6":"9671",c539745e:"9712","4c60ab12":"9742","43ffbeb1":"9772","9e3a0c57":"9878","7c18ab4a":"9954"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1869|5354)$/.test(f))e[f]=0;else{var b=new Promise(((a,b)=>c=e[f]=[a,b]));a.push(c[2]=b);var d=r.p+r.u(f),t=new Error;r.l(d,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n