본문 바로가기

Houdini/Houdini1_Volumes

02_VOLUME NODE 다루기 & 시각화


오늘은 Volume에 대해 직접 노드를 다뤄보면서 붕 뜨는 느낌을 눌러보자.

 


볼륨이라는 정보의 컨테이너를 만들어보자.

  • 두 종류(일반 볼륨, vdb)가 있지만, 일반 볼륨부터 이야기해보자.

 

Volume Node

Volume Node Info
Volume Parameter

point의 위치값이 volume의 중심위치가 된다.

Min / Max 는 volume의 바운딩 박스를 의미한다.

현재 volume name으로 지정한 것이 없기 때문에 volume name이 0으로 표기되는 것이다.

 

Volume parameter에서 name에 이름을 기입해주면 volume info의 name 부분도 바뀌게 된다.

density 라고 이름지어봤다.
Node info의 volume name이 0에서 density로 바뀌었다.

볼륨을 만든다는 것은 voxel이라는 단위에 어떠한 정보를 저장하는 것을 의미한다.

Rank : voxel에 어떠한 유형의 정보를 저장하고 싶은지를 정해줄 수 있다.

  • Scalar : float 정보가 저장된다고 이해하면 된다.
  • 나머지는 표기된 그대로 이해하면 될 듯 하다.

현재 Initial Value가 0, 0, 0 이기 때문에 Scene View에서 아무것도 볼 수 없다.

값을 주게 되면 시각적으로 volume이 나타나게 된다.

현재 scalar이기 때문에 initial value로 첫번째 데이터만 입력해도 된다.(두번째, 세번째 데이터는 입력을 해도 별다른 반응이 없다.)

볼륨의 이름과 rank를 잘 정해주는 것이 반드시 필요하다.

  • attribute wrangle에서 가치있다고 생각되는 정보를 어트리뷰트로 남겨놓는 것과도 같다.

오른쪽 볼륨이 더 어두워보이는 이유는 모든 voxel이 가지는 기본값이 왼쪽 볼륨보다 낮기 때문이다.(현재 0.2를 할당했음)

 

vector 볼륨을 만들어보자.(이름은 wind로)

vector의 각각의 요소가 쪼개져있다.

wind.x도 wind.y도 wind.z도 모두 scalar 볼륨이다. 이 세 볼륨이 동시에 다뤄질 때 비로소 vector 볼륨으로써 의미가 있다.

  • attribute vop에서 vector를 float 정보로 쪼개어놓는 것을 연상하면 도움이 된다.

왼쪽 : scalar 볼륨 / 오른쪽 : vector 볼륨, 현재 밝기의 차이가 나는 이유는 vector 볼륨이 scalar 볼륨 세개를 겹쳐놓은 것이기 때문이다.

Center : 볼륨을 만들 때, 반드시 필요한 정보 중 하나로 내가 만드는 볼륨이 위치하게 될 위치값이 필요하다고 했는데, Center 항목이 바로 그 위치값이다.

Center가 적용된 것을 볼 수 있다.

attribute wrangle로 volume의 위치에 변화를 줘보자.

포인트의 위치를 바꿔줌으로써 볼륨의 위치 또한 바뀌게 되었다

  • 볼륨은 초기에 Center에 입력해준 값에 의해 생성이 되지만, Attriubte wrangle 등을 이용해서 옮겨줄 수 있다는 것이다.(만들고, 옮겨준다)

 

이제 볼륨의 사이즈를 바꿔보자.

Node info에도 사이즈가 나와있다. size 변경으로 바운딩 박스의 Min / Max가 바뀌고 있다.

size의 변경으로 Scene View 상의 해상도에서도 차이가 나게 된다.

size 1, 1, 1
size 2, 1, 1 / 위의 size 1, 1, 1의 이미지와는 해상도에서 차이를 보인다.

 

Uniform Sampling : 무엇을 기준으로 voxel을 나누기를 원하는지에 대한 항목

Max Axis : Size 중에서 가장 큰 value를 가진 축을 기준으로 voxel을 나누겠다는 의미

  • 위 이미지를 해석한다면, Max Axis로 10번 나누겠다는 의미이다.

size가 현재 4, 3.2, 2이다. x가 가장 큰 값이기 때문에, Max Axis는 x가 되고, x에 대해서 10번 쪼갠 것을 확인할 수 있다.

왜 y축은 8번 나눈것으로 나오는 것일까? Max Axis value인 4를 10으로 나눈 0.4를 가지고 y축의 size(3.2)를 나눠서 그렇다. z축도 동일하다.

 

Uniform Sampling이 Y Axis라면 어떻게 될까?

y 축에 대해 10번 나뉘게 되었다. 이렇게 나오게 된 voxel size 0.3을 가지고 x size(4)와 z size(2)를 나눠준 결과가 각각 voxel 13개, voxel 7개로 나오게 되는 것이다.

 

Uniform Sampling이 Z Axis라면 어떻게 될까?

z 축에 대해 10번 나눴고, 이렇게 나온 voxel size 0.2를 가지고 x와 y의 size를 나눠준 값이 20, 15인 것이다.

 

실제로는 특정 축이 아닌, By Size를 사용할 확률이 가장 높다.

voxel 사이즈를 Div Size(division size)에 기입해서 직접 정해줄 수 있고, 그에 따라서 x, y, z를 쪼개게 된다.

voxel 사이즈를 가지고 볼륨의 size를 나눠준 뒤, 필요한 voxel의 갯수를 정하게 된다.


미리 의도를 가지고 volume을 만들어보자.

만약 내가 만들고싶은 볼륨이 온도에 대한 scalar 볼륨이라면, 어디에 만들지, 얼마나 크게 볼륨을 만들지를 정해야한다.

 

토미를 만들고, 토미를 덮을 수 있는 크기의 볼륨을 만들어준다.

현재 만들어진 볼륨의 이름은 temperature이고, voxel의 사이즈는 0.3이다. 현재 uniform sampling이 max axis이기 때문에, 사이즈가 가장 큰 축인 y의 사이즈를 10번 나눠줘서 나오게 된 voxel 사이즈이고, 이렇게 나온 voxel size를 가지고 size(2, 3, 1)을 나눠줬을 때, 필요한 voxel의 갯수가 해상도로 나오게 된 것이다.

 

uniform sampling을 by size로 바꾸면 어떻게 될까?

voxel 사이즈를 div size인 0.1로 정해줬고 해상도가 위의 내용보다 올라간 것을 확인할 수 있다.


지금까지의 내용을 vdb로 만들어보자.

VDB Parameter

vdb 노드를 꺼낸다고 해서 일반 볼륨만큼의 작업수행이 되지는 않는다.

아래쪽에 다른 노드들을 추가로 달아줘야 일반 볼륨만큼의 작업 결과를 얻을 수 있다.

 

Name : volume name과 동일하다. 

동일하게 temperature라는 이름으로 들어갔고, 일반 볼륨과는 다르게 여기에서는 Vertices 아래에 VDBs가 기록되어있다.

Type : volume의 rank와 같은 개념.

  • float은 rank의 scalar와 같다고 보면 된다.

  • Vector float을 선택해주면 일반 볼륨과는 다르게 vector 볼륨이 생성된다.

vector float vdb
vector 볼륨

위의 두 이미지는 확실히 차이가 있다.

 

기본적으로 vdb는 voxel 사이즈를 미리 정할 수 있도록 되어있다.

 

vdb 아래 연결해주는 노드

vdb activate node

VDB Activate Parameter

Value : 일반 볼륨의 Initial Value와 같은 의미

현재는 size가 0,0,0 인지라 voxel이 1,1,1 로 되어있다.

size를 키워주면 밀도가 차들어가는 것을 볼 수 있다.

 

일반 볼륨과 vdb를 merge로 묶었을 때의 node info이다.

일반 볼륨은 녹색으로 표기되고, vdb는 파란색으로 표기된다.

point와 primitive가 4개인 이유는 각각의 볼륨과 vdb가 각각 point와 primitive를 가지고 있기 때문이다.


우리는 볼륨을 결과로써 출력하는 것 까지가 목표이기 때문에, 우리가 눈으로 보기 원하는 볼륨을 쉽게 특정할 수 있어야 한다.

위의 이미지처럼 보여주는 것은 그냥 우리 작업하기 편하라고 밀도정보가 있는 것들을 다 보여주는 있는 후디니 내부 편의기능일 뿐이다.

 

실제로 출력을 하러 가게 되면 구체적인 밀도의 이름을 골라줘야한다.

어떠한 볼륨을 출력하고 싶은지, 출력을 위해 밀도에 어떠한 영향을 주고 싶은지, 이런 훈련을 위해서 volume visualization은 꽤 많은 도움이 된다.

 

light를 설치하는 이유는 밀도로 표현되는 볼륨은 light에 따라 결과의 느낌이 상당히 다르다. 같이 다루는 연습이 필요하다.

 

조명을 설치하자.

light를 설치만 했을 뿐인데도 느낌이 많이 달라졌다.

위쪽이 어두운 이유는 light의 빛이 도달하지 못해서 저렇게 나오는 것이다.

light 추가 후 light 색상까지 변경한 결과

 

각각의 볼륨을 volume visualization으로 보자.

 

Volume Visualization Parameter

가장 먼저 해줘야할 것은 우리가 보고 싶은 볼륨의 이름을 density field 항목에 적어주는 것이다.

  • 이용중인 볼륨의 이름이 무엇인지 잘 알아야한다.

현재 우리가 가진 볼륨 이름을 잘 알아야 한다.
temperature.x를 density, diffuse field에 넣어주었다.

Minimum / Maximum

fit function의 clamp와 같은 역할을 한다.

위에서 들어오는 밀도에 대해 maximum 이상의 밀도는 maximum으로 제한해버린다.(minimum도 마찬가지)

 

Minimum을 0, Maximum을 4로 해줄 경우,

temperature.x = 1, temperature.y = 0.5, temperature.z = 4 라고 할 때,

Density ramp에는 Minimum / Maximum에 대해 0~1 까지의 값으로 마치 fit function을 적용하는것과 같이 값이 들어간다.

그래서 결국 temperature.x는 1에서 0.25와 같은 밀도로 보이게 된다.

왼쪽 : maximum 1일때의 temperature.x / 오른쪽 : maximum 4일때의 temperature.x

Density Scale : 밀도의 정보를 증폭시킬 수 있다. temperature.x의 실제 value가 바뀌는 것이 아니고, 볼륨을 어느정도로 시각화할지에 사용될 밀도만 변경된다.

Density Scale이 클수록 밀도가 짙어지면서 뒤의 wire도 가려지게 된다.

Density Scale 20의 모습. 뒤의 와이어가 보이질 않는다.

만약 temperature.x가 1이고, volume visualization의 maximum이 2라고 하면, temperature.x는 0.5로 표현이 될 것이다.

현재 0.5로 표현되기 때문에 diffuse ramp에서 0.5에 해당되는 녹색이 밀도에 표현되고 있다.

Density field와 Diffuse field는 독립적으로 작용한다.

density ramp의 0.5에 해당하는 값이 1이 된다고 해서 색이 파란색이 되거나 하지는 않는다.

density ramp의 0.5에 해당하는 값을 1로 올려주면, 밀도가 1로 표현되지만, diffuse ramp에 영향을 주지는 않는다.

 

diffuse range : parameter 맨 위의 min / max 값을 무시하고 새롭게 범위를 지정한다.

여전히 min / max의 범위는 0~2 사이이지만, diffuse range가 켜지면서 diffuse 필드는 위의 min / max를 따르지 않고 diffuse field의 값에 대해서 min / max가 0 / 1로 잡고 분석하겠다는 의미이다. 그렇기 때문에 현재 들어오는 temperature.x의 값 1은 1로 표현되면서 파란색을 나타내는 것이다.

diffuse range 가 0~2 일 때
diffuse range가 0~4 일 때.


물체를 기준으로 볼륨을 만들어보자.

 

isooffset : 폴리곤의 안과 밖을 구분해서 밀도나 SDF의 결과를 보여준다.(이때의 결과는 일반 볼륨의 결과이다.)

vdb from polygons : isooffset과 거의 동일한 기능을 하지만, 결과는 vdb의 결과이다.

두 노드는 정보량에서 차이가 있다.

isooffset : 바운딩 박스를 기준으로 모든 voxel에 정보가 다 존재한다.

vdb from polygons : 불필요하다고 판단되는 voxel은 제거한다.

 

왼쪽은 isooffset, 오른쪽은 vdb from polygons의 결과

위의 이미지는 isooffset은 밀도로써 표현된 부분이고, vdb from polygons는 SDF가 표현된 것이다.

 (세팅을 바꿔주면 된다.)

vdb from polygons를 distance VDB가 아닌 fog VDB로 바꿔준 모습

둘 다 밀도로써 표현이 되었는데도 다르게 나타나는 이유는, 둘의 해상도가 다르기 때문이다. 가장 결정적으로 둘의 voxel 사이즈가 다르다.(voxel 사이즈가 작을수록 더욱 세밀한 표현이 가능하다.)

voxel의 사이즈를 맞춰주고 일반볼륨에 이름을 부여했다.

일반 볼륨과 VDB의 사용된 voxel의 수가 차이가 난다.

 

volume visualization을 연결했고, density field에 volume name을 기입했다.

diffuse field에 volume name이 들어가는 순간, 바깥쪽이 살짝 날아간다. 그 이유는, 밀도가 0에 가까운 부분에 대해서 검은색으로 묘사되면서 살짝 날아가는 것이다.

 

왼쪽 : isooffset / 오른쪽 : vdb from polygons

vdb를 잘 보면 경계면을 따라 선같은 것이 보인다.

vdb는 표면이 어디에 있는지, SDF가 0인 곳을 먼저 찾아주게 되고 안쪽으로 몇칸 / 바깥쪽으로 몇칸 이런식으로 정보를 만들어주기 때문에 위와같은 윤곽선이 나타나게 된다.

isooffset의 경우, 바운딩 박스 안에 대해서 모두 다 정보를 만들어주고 있어서 vdb와 같은 윤곽선이 보이지 않는 것이다.

 

VDB from Polygons parameter

interior band voxels의 값을 올린다면 어떻게 되는가?

기본 exterior band voxel 3 / interior band voxel 3
exterior band voxel 3 / interior band voxel 10

interior band voxel이 10이라는 의미는...

SDF를 기준으로 10칸을 안쪽으로 들어가서 경계를 만든다. 경계가 감싸게 되는 안쪽은 정보를 날려준다. 날려주게 되면서, 이 곳은 안쪽이고, 높은 값을 유지하자 라는 의미에서 1이 된다.

경계면을 기준으로 10칸을 들어가면서 SDF의 값은 어떻게 될까?

SDF에서 signed을 뺀다면, distance field 값이 올라가게 된다. 표면에서 멀어질수록 distance field 값이 올라가니까 밀도처럼 묘사가 되서 안으로 들어갈수록 점점 진해지는 것이다. 들어가면 들어갈수록 진해지다가 어느 시점 이후로는 비슷한 큰 값, 1을 가지게 된다.

 

만일 interior band voxel이 1이라면, SDF가 0인 곳을 기준으로 한칸만 들어가서 경계를 만들고, 그 안쪽은 모두 색이 꽉 칠해지게 된다.

exterior band voxel 3 / interior band voxel 1

Fill Interior : SDF 기준 안쪽에 대한 모든 voxel에 대해 거리값에 비례해서 밀도값이 정해지는 것. 표면에 가까울수록 표면과의 거리가 작기 때문에 밀도가 작게 표현되어서 어두워보이고, 들어가면 들어갈수록 거리에 비례해서 진하게 표현된다.

Fill Interior On

interior band voxels의 값을 높게 올려주는 것과 fill interior를 체크해주는 것은 비슷한 결과를 보여준다.

 

voxel size를 더 낮춘다면?

voxel size 0.01

그리고 interior band voxels의 값을 올려준다면,

그라데이션 되면서 밀도가 낮은 부분에 대해서 우리 눈으로 묘사되지 않는 것을 볼 수 있다.

exterior band voxel 3 / interior band voxel 10

밀도가 낮아서 사라진 부분이 아쉽다면, volume visualization을 활용해서 사라진 부분을 볼 수 있다.

density ramp를 조절해준다.

밀도가 낮은 부분들을 볼 수 있다.


이제 SDF의 결과를 확인해보자.

isooffset을 활용하여 sdf를 만들어준 모습니다.

이 결과는 볼륨을 보고 있는 것이 아니다.

voxel과 표면과의 거리가 0인 곳을 면으로 치환해서 보고 있는 것이다.

순수하게 밀도로 보기 위해 primitive 노드를 달아준다.

volume tap이 있다.
primitive node의 volumes tap parameter

display mode : 어떤 방식으로 display 해줄 것인지 정할 수 있다.

smoke 방식이 우리가 원하는 밀도로서 보는 방식이고, isosurface가 현재 우리가 보고 있는 면으로 치환된 방식이다.

굳이 primitive 노드를 활용하지 않고서도, volume visualization 노드를 연결함으로써 밀도로써 확인이 가능하다.

SDF의 결과로 표면에 가까운 voxel은 0에 가까운 값을 가지고 있게 되고, 표면 안으로 들어가면 들어갈수록 voxel이 가지는 SDF의 값은 작아진다. 일반적인 Distance field라면 커졌을 수도 있지만, SDF이기 때문에 들어가면 들어갈수록 값이 작아진다.

그리고 표면 바깥에서는 멀면 멀수록 값이 커지기 때문에 바운딩박스 끝부분으로 갈수록 진하게 보이는 것이고, 안쪽은 속이 비어보이는 것이다.

 

volume visualization의 min 값을 -1로 하면 어떻게 될까?

SDF의 0으로 묘사되던 부분이 0.5로 묘사되게 된다. (밀도가 있는 것 처럼 표현이 가능하다는 것이다.)

경계에서 보이지 않았어야하는 구간들이 마치 0.5라는 밀도를 가진것처럼 되었기 때문에 안쪽에 대한 묘사가 살짝 사라지게 되었다.

 

이런 방법을 활용한다면, 원래 경계면쪽이라서 0으로 묘사되어야하는데 어디를 주목하는지 바꿔주니까 다른 값처럼 활용이 가능하다는 생각이 들어야한다.

 

현재 min / max 값은 -1 / 1이다.

ramp는 0~1 사이의 값을 요구한다.

ramp에 들어가기 위해 min / max는 어떤 조정이 발생하게 된다. (이 조정에 의해 0이라는 값은 0.5가 된다.)

우리가 보게 될 값은, 위의 조정을 거친 0~1사이의 값에 대해 ramp 함수에 대응되는 값이다.

현재 이 ramp에 의해 0은 0으로 묘사되고, 1은 1로 묘사되게 되고, 0.5는 이 ramp 함수의 대응에 따라 0.5로 묘사된다.

만약 위와 같은 ramp 함수였다면, 0은 0으로 출력되고, 1은 0으로 출력되며, 0.5는 1로 출력이 될 것이다.

ramp 그래프가 이와 같다면 기본적인 ramp 그래프의 결과를 반전시킨 결과가 나온다.

바운딩 박스쪽으로 갈수록 보이지 않게 되고, 안쪽이 더 진하게 묘사된다.

SDF로 모든 voxel의 거리값을 구했다. 

이 때 0이라는 값은 표면에 해당하는 값이었다.

안과 밖을 음수 / 양수로 구분하는 점에서 굉장히 큰 의미가 있지만, 이 값을 밀도로 시각화하기엔 무리가 있었다.

가장 중요한 표면이 0이기 때문에 밀도로 보여줄 것이 없었다.

그리고 밖으로 나가면 나갈수록 밀도가 커지기 때문에 비주얼적인 측면에서 가치가 떨어진다.

그래서 volume visualization의 조건을 바꿔줌으로써 음수와 양수를 모두 주목할 수 있도록 했고, 우리가 관심있는 SDF = 0 의 값을 밀도 1로 표현이 가능하도록 해줬다.

가지고 있는 것을 그대로 보는 것이 아니고, 콕 찝어서 원하는 곳을 주목할 수 있도록 만들어준 것이다.

 

여기까지가 기본이다...

 

그래프를 이동시켜줌으로써 우리가 주목하는 값에 대해 확인이 가능하다.

SDF가 약 0.2 정도 되는 voxel을 모아서 보고 있는 것이다.

이것을 이해해야 convert vdb의 isovalue를 이해할 수 있다.

 


diffuse field를 활용해보자.

기본적으로 모든 구간에 대해 밀도를 1로 표현했고, diffuse 또한 모든 구간에 대해 흰색을 적용한 상태이다.

 

러버토이의 표면은 SDF에 의해 0이라는 값을 가지고 있다.

지금 diffuse field에서 이용하는 볼륨이 a이기 때문에 0이라는 값에 빨간 값을 준다면, 표면이 있던 곳에 빨간색이 묘사될 것이다.

구간을 좁힌다면 위와같이 묘사도 가능하다.
좀 더 두껍게 표면을 묘사했다.

안쪽에 파란색이 들어가기 원한다면 어떻게 해주면 될까?

현재 빨간 띠 부분이 a라는 볼륨의 0에 해당되는 정보를 다루고 있기 때문에 안쪽에 해당되는 정보는 그래프의 왼편에 대한 부분일 것이다.

 

이번에는 바깥쪽의 밀도를 좀 걷어내보자.

density field의 ramp 그래프에서 0.5 이상의 부분이 낮아지면 바깥쪽 밀도를 걷어낼 수 있다.

흰색을 검정색으로 바꿔주는 것도 가능하다.

field의 어떤 부분이 대략 어떤 값을 가지고 있을지 알고 골라내줄 수 있어야한다. 머리로 상상이 되어야한다.

 


volume visualization의 emission tap을 확인해보자.

emission은 적극적으로 어떤 빛을 내뿜을지 택해주는 부분이다.

 

볼륨 이름에 대해 자유자재로 바꿔써보자. 지금 아니면 기회가 잘 없다.(꼭 density가 아니어도 된다는 의미이다.)
smoke, pyro solver 등을 사용하게 되면, 어쩔 수 없이 density field, temperature field, velocity field와 같은 뻔한 field만 사용하게 된다. 그러다보면, 이해가 아닌 암기에 의한 작업을 할 수도 있다. 무언가 꼬여서 temperature field, density field를 넘어서는 이상한 상황이 나올수도 있다. 이 때 암기로 작업을 하면, 이런 꼬인 부분에 대해 손을 볼 수가 없다. 이것은 알고 쓴다고 말할 수 없다.
상황에 따라 필요한 볼륨을 유연하게 사용할 수 있어야한다.

러버토이 안쪽에서 노란 빛이 나오게 하고 싶다면, 어떻게 세팅하면 될까?

 

field는 어떤 볼륨을 사용하고 싶은가? 를 적어주면 된다.

emission scale이 0일 때는, emission이 반응하지 않는다.

 

smoke와 비슷하다.


isooffset의 uniform sampling division 값을 바꿔보자.

uniform sampling divisions 값을 100으로 올려서 해상도를 올려줬다.


이제 vdb로 위의 내용을 작업해보자.

거의 비슷하지만, 작업에 제한이 생기는 부분이 있다.

이 부분을 보고나면 무조건적으로 vdb가 좋다 라고 말하기 애매한지 알게 된다.(어쩐지 대부분의 경우 vdb가 좋다 라고 어제 강의에서 이야기하셨는지 알꺼같다.)

정보 효율을 위해 날려버린 voxel들이 일반 볼륨만큼 자유롭게 값을 조절하는 것을 방해하게 된다.

 

vdb from polygons에서 선택되어있는 distance vdb가 SDF라고 생각하면 된다.

 

volume visualization을 연결하면 field를 적었음에도 아무것도 나오지 않는다. 

현재 min / max가 0 / 1 로 되어있고, ramp 그래프로 들어가게 되었을 때, 0은 0으로 표현되기 때문에 아무것도 나오지 않는다.(내생각)

 

선생님 설명

우리가 vdb from polygons로 구해준 것은 SDF이다. 그렇기 때문에 0을 기준으로 음수값과 양수값이 존재한다. 0보다 작은 값은 표면보다 안쪽의 내용이 되고, 0보다 큰 값은 표면 바깥쪽의 내용이 된다.

min / max를 바꿔주고 0에 해당하는 부분에 주목해보자.

vdb로 구하는 distance vdb의 정보로도 표면에 대한 내용에 집중해서 밀도를 높여주는 작업을 수행할 수 있다.

 

일반 볼륨에서처럼 우리가 주목하는 값을 조절해보자. 

density ramp의 그래프를 이동해줌으로써 sdf가 0이 아닌, 양수 혹은 음수의 값에 주목할 수 있었다.

하지만 vdb로 만들어준 현재는 일정 값 이상(혹은 이하)이 되면 사라져버린다.

이 부분이 일반 볼륨과는 다른 부분이다.

 

왜그럴까?

이 파라미터들이 중요해진다.

exterior / interior band voxels은 표면으로부터 각각 바깥으로 몇칸 / 안으로 몇칸의 voxel의 정보를 구할 것인지를 정하는 항목이다. 이 band voxel 값 이상(혹은 이하)의 정보는 관심밖이라 다 지워진다. 딱히 묘사할 정보가 없는 상태인 것이다. 

 

그렇기 때문에 volume visualization에서 density ramp의 그래프를 옮겨줄 때 사라지는 것은 그 부분이 묘사할 정보가 없기 때문인 것이다. 

 

fill interior를 켜줄 경우, 표면 안쪽에 대해서는 SDF가 존재한다는 의미이기 때문에 자유롭게 값을 묘사할 수 있다.

 

표면 바깥에 대한 정보를 더 얻기 위해서는 exterior band voxels 값을 많이 올려주면 된다.


이제 해상도를 올려보자.

이 때, exterior / interior band voxels의 값도 조절해줘야한다. 그 이유로는 해상도가 커지면 voxel size는 그만큼 작아지게 되고 3칸으로 커버되던 공간도 더 많은 칸으로 커버를 해줘야한다.

우리가 주목해서 볼 수 있는 공간이 상대적으로 좁아진다는 것을 의미한다.

 

Max Vis Res는 volume visualization의 해상도를 의미한다. 그냥 우리가 눈으로 볼 수 있는 해상도를 조절할 수 있을 뿐이고 voxel size를 조절하는 것과는 다르다.

이 값도 과해지면 눈에 보이지 않게 된다. 적당한 값에 두고 작업하는 것이 필요하다.

 

exterior band voxels를 둘 다 동일하게 30으로 적용했지만, voxel size의 차이가 발생함으로써 볼 수 있는 구간이 다름을 알 수 있다.


뭔가 알듯 말듯 하면서 모를듯 말듯 하기도 하고...

volume이 쉽지 않다...

머릿속으로 주목하려는 정보에 대해 대응되는 값의 범위나 위치 등을 잘 파악할 수 있도록 좀 더 봐야겠다.