본문 바로가기

유니티/Asset

[ Asset - ObiRope ] 02 . Obi Solver

[ Obi Solver ]

[ Obi Solver ]

 입자 물리학을 시뮬레이션하고 제약 조건을 적용하는 역할을 한다.

 Solver 는 다음 3가지 사항을 기억해야 힌다 .

  • Scene의 모든 GameObject에 추가할 수 있으며 동일한 장면에서 동시에 작동하는 둘 이상의 솔버가 있을 수 있다 .
  • 모든 Actor는 업데이트 및 렌더링을 위해 Solver의 자식으로 존재해야 한다 .
  • Solver는 다른 Solver완전히 독립적이다. 따라서 다른 Solver에 의해 업데이트되는 Actor는 서로 상호 작용/충돌하지 않는다. 동일한 Solver의 Actor만 서로 반응한다.

 

Solver는 항상 로컬 공간 에서 시뮬레이션을 수행한다 . 

즉, 솔버를 변환, 회전 또는 스케일링하면 시뮬레이션이 전체적으로 엄격하게 변환된다.

 

Solver의 선형/회전 이동의 비율을 관성력의 형태로 다시 시뮬레이션에 주입할 수 있다. 

예를 들어 전체적인 캐릭터 움직임이 의상 시뮬레이션에 영향을 미치는 정도를 제어할 수 있다. 

이를 위해 Solver는 두 개의 매개변수를 노출하여 선형 및 회전 관성력을 독립적으로 제어한다 . 

cf ) 해당 옵션은 아래 예시에서 자세히 다룬다 .


 

 

[  구성요소 ]

Solver는 동작의 특정 측면에 영향을 미치는 매개변수가 포함되어 있다 . 총 4개의 색션으로 구성되어 있다.

각자 살펴보자 .


 

[ 01 . Solver Settings ]

Backend : 사용할 시뮬레이션 백엔드 . 지정된 백엔드 사용이 불가시 Oni 백엔드로 풀백을 시도한다 .

Mode : 2D 혹은 3D 모드에서 시뮬레이션 여부를 선택한다 .

Interpolation : 입자렌더링시 보간 옵션이다 . None의 연산속도가 빠르지만 Interpolate는 시각적 결과가 우수하다

                         선택시 1프레임의 지연이 발생한다 (슬로우 모션 효과에 적합하다)


 

[ 02 . Simulation Settings ]

중력, 감쇠, 관성 등과 같은 외부/내부 힘에 관한 다양한 전역 매개변수

 

  • Gravity Space : Solver의 로컬 공간(Self) 혹은 월드 공간(World)에 중력을 적용할지 여부 . Self 선택시 중력의 방향이 Solver와 함께 회전한다 .
  • Gravity : Solver의 Local 공간에서 표현되는 이 Solver의 입자에 적용되는 중력의 방향 및 크기이다 .
  • Sleep Threshold : 해당 값보다 낮은 운동 에너지를 지닌 모든 입자는 제자리에 고정된다 . 속도나 힘의 미세한 변화로  인해 액터가 흔들리거나 매우 느리게 움직이는 것처럼 보이게 하고 싶지 않을때 유용하다 . 만약 입자가 아무리 작더라도 입자에 적용되는 힘의 영향을 받고자 한다면 0으로 설정한다 . 즉,낮을수록 작은 에너지에도 반응한다
  • Damping : 입자 속도에 적용되는 속도 감쇠. 운동 에너지를 줄이려면 값을 높이자 . 또한 ,감쇠 값이 높으면 수중 효과를 시뮬레이션하는 데 유용할 수 있다. 0이 아닌 낮은 값(예: 0.15)은 공기역학적 항력을 고려하여 대부분의 상황에서 시뮬레이션의 사실성을 향상시킬 수 있다.
  • World Linear Inerita Scale : Solver 변환의 표준 공간 선형 관성이 파티클에 적용되는 정도를 제어한다. 값의 범위는 0(없음)에서 1(100%)까지이다.즉 , 직선이동에 대한 관성이다

http://obi.virtualmethodstudio.com/manual/6.3/obisolver.html

World Linear Inerita Scale이 1로 설정된 천 조각을 포함하는 Solver의 이동이다 .

갑자기 정지 혹은 이동시 천이 관성을 받음을 볼 수 있다 .

  • World Angular Inerita Scale : 이전 속성과 유사하지만 선형 관성(변환) 대신 각 관성(회전)을 제어합니다. 원심력  코리올리 힘이 고려 됩니다 . 즉 , 회전에 대한 관성이다 .

World Angular Inerita Scale1로 설정된 천 조각을 포함하는 Solver 이동. Solver가 갑자기 멈출 때 천이 계속 앞으로

이동하는 방법과 솔버가 이동을 다시 시작할 때 뒤로 어떻게 시작되는지 볼 수 있다 .

 

cf ) 선형 관성과  각형 관성에 관하여

더보기

선형 관성과 각 관성은 운동의 변화에 ​​대한 물체의 저항과 관련된 개념이지만 각각 선형 운동과 각 운동과 같은 다른 유형의 운동에 적용됩니다. 두 가지의 차이점을 살펴보겠습니다.

  1. 선형 관성: 병진 관성이라고도 하는 선형 관성은 직선 운동(직선 이동)의 변화에 ​​저항하는 물체의 속성입니다. 관성의 법칙이라고도 하는 뉴턴의 제1 운동 법칙에 의해 지배되며, 정지한 물체는 정지 상태를 유지하려는 경향이 있고 운동 중인 물체는 외력이 작용하지 않는 한 같은 속도와 같은 방향으로 움직이려는 경향이 있습니다.

물체의 선형 관성은 질량과 직접적인 관련이 있습니다. 질량이 큰 물체는 선형 관성이 더 높습니다. 즉, 선형 속도의 변화에 ​​더 잘 견딥니다. 이것이 가벼운 물체에 비해 무거운 물체를 가속하거나 감속하는 것이 더 어려운 이유입니다.

  1. 각 관성: 회전 관성 또는 관성 모멘트라고도 하는 각 관성은 각 운동(축을 중심으로 한 회전)의 변화에 ​​저항하는 물체의 속성입니다. 선형 관성의 회전 아날로그입니다. 선형 관성과 마찬가지로 각 관성도 뉴턴의 첫 번째 운동 법칙을 따르지만 회전 운동과 관련됩니다.

물체의 각도 관성은 질량 분포와 회전축 모두에 따라 달라집니다. 회전축에서 더 멀리 집중된 더 많은 질량을 가진 물체는 더 높은 각관성을 가집니다. 예를 들어, 회전하는 피겨 스케이팅 선수를 생각해 보십시오. 스케이터가 팔을 몸에 더 가까이 당기면 관성 모멘트가 줄어들어 각운동량 보존으로 인해 더 빨리 회전할 수 있습니다.

요약하면 선형 관성과 각도 관성의 주요 차이점은 적용되는 모션 유형입니다. 선형 관성은 선형 운동의 변화에 ​​대한 저항을 다루며 물체의 질량에 따라 달라집니다. 한편, 각관성은 회전 운동의 변화에 ​​대한 저항을 다루며 질량 분포와 회전축 모두에 따라 달라집니다.

 

  • Max Anisotropy : Obi의 유체 입자는 완전한 구형이 아닌 타원형일 수 있다. 해당 옵션은  물체의 표면에 모양을 더 잘 적응시키는 데 사용되어 더 정확한 충돌 감지와 더 부드러운 렌더링을 보여준다. Max anistropy를 사용하면 타원체 반경 사이의 최대 비율을 결정할 수 있다. 값이 1이면 모든 입자가 구형이 된다(비등방성 비활성화). 1보다 큰 값은 최대 이방성이 높을수록 입자가 더 타원형이 된다. 즉 , 1은 입자가 구체 그 이상은 입자가 타원형으로 설정하는 옵션이다 .

이때 , 유체 렌더링은 비등방성을 활성화하면(1이면) 엄청난 이점을 얻을 수 있다. 

더 낮은 유체 해상도를 사용하고 훨씬 더 매끄럽게 보이는 유체 표면을 얻을 수 있다.

 

cf ) 최대 이방성 (비등방성)관하여

더보기

최대 비등방성은 컴퓨터 그래픽 및 렌더링 맥락에서 보는 각도에 따라 텍스처 왜곡 수준을 제어하기 위해 텍스처 매핑 기술에 사용되는 매개변수를 나타냅니다. 일반적으로 비등방성은 서로 다른 방향에서 측정할 때 재료 특성의 차이를 의미합니다.

컴퓨터 그래픽에서 텍스처는 시각적 세부 정보와 표면 특성을 3D 모델에 추가하는 데 사용되는 2D 이미지입니다. 3D 개체에 텍스처가 지정되면 텍스처 좌표가 모델의 정점에 할당되어 2D 텍스처를 3D 표면에 매핑하는 데 도움이 됩니다.

텍스처 매핑에는 사실적이고 매끄럽게 보이는 방식으로 3D 모델의 표면에 텍스처를 적용하는 프로세스가 포함됩니다. 그러나 원통의 측면이나 구의 가장자리와 같이 다양한 각도나 곡선이 있는 표면을 처리할 때 기존 텍스처 매핑 기술은 왜곡이나 시각적 아티팩트를 유발할 수 있습니다.

이방성 필터링이 작동하는 곳입니다. 비등방성 필터링은 텍스처 왜곡을 줄이기 위해 표면의 방향을 고려하는 텍스처 필터링 방법입니다. Max Anisotropy 매개변수는 텍스처에 적용되는 비등방성 필터링 정도를 제어하는 ​​데 사용됩니다.

Max Anisotropy가 1로 설정되면 비등방성 필터링이 비활성화되고 질감을 모든 방향에서 균일하게 처리하는 표준 등방성 필터링을 사용하여 텍스처 매핑이 수행됨을 의미합니다. 최대 비등방성 값을 높이면 텍스처 필터링이 더 비등방성이 되어 다양한 각도의 표면에 텍스처를 더 정확하게 매핑할 수 있으므로 왜곡과 시각적 아티팩트가 줄어듭니다.

더 높은 최대 이방성 값을 사용하면 특히 높은 수준의 곡률 또는 비스듬한 각도가 있는 표면을 처리할 때 질감이 있는 3D 모델의 시각적 품질을 크게 향상시킬 수 있습니다. 그러나 비등방성 필터링은 등방성 필터링에 비해 더 많은 처리 능력이 필요하기 때문에 계산 복잡성이 증가합니다.

최신 컴퓨터 그래픽 API 및 렌더링 엔진에서 Max Anisotropy 매개변수는 개발자나 아티스트가 원하는 수준의 텍스처 품질과 애플리케이션 또는 게임의 성능 균형을 달성하기 위해 조정할 수 있는 설정으로 노출되는 경우가 많습니다.

 

  • Simulate When Invisible:  시뮬레이션을 항상 업데이트해야 하는 경우 이 기능을 활성화하고, 장면에 여러 솔버가 있지만 항상 표시되지 않는 경우 성능을 개선하려면 비활성화 하자 .

 

[ 03 . Collision Settings ]

해당 옵션은 Solver의 충돌감지파이프라인을 제어한다 .

  • CCD(Continuous Collision Detection)  : 충돌 감지 중에 경계 상자를 확장하는 데 사용되는 입자/강체 속도의 백분율이다. 값이 1이면 속도의 100%를 사용하여 전체 연속 충돌 감지가 이루어진다 .값이 0이면 순전히 정적 충돌 감지 가 된다 .

  • collision margin : 접촉을 생성할 때 사용되는 입자 경계 상자(CCD 확장 후)에 추가된 여백이다. 입자의 경계 상자 내의 모든 충돌체/입자는 접촉 생성을 위해 고려된다 . 이 값은 상대적으로 낮게 유지되어야 한다. 큰 값은 더 많은 접촉을 생성하여 매우 복잡한 장면에서 견고성을 향상시킬 수 있지만 성능에 부정적인 영향을 미친다.

  • Max Depenetration : 충돌체에서 입자를 꺼내기 위해 입자에 적용되는 최대 속도(미터/초). 이것은 이미 충돌체 내부에 있는 물리 단계를 시작하는 입자에만 적용된다 . 낮은 값은 입자를 충돌체에서 부드럽게 제거한다. 높은 값을 사용하면 솔버가 입자를 즉시 ​​제거하여 충돌체에서 "점프"할 수 있다.

옷감은 지면 내부에서 시작하며, 0.1m/s로 설정된 침투 감소는 완만하게 충돌을 해결합니다.
10m/s로 설정된 침투는 바닥에서 "점프"합니다.

  • Shock Propagation : 높은 값은 다른 입자를 지지하는 입자의 질량을 인위적으로 증가시킨다. 더 나은 적재 안정성을 얻기 위해 사용한다 .
  • Surface collision iterationsn : 표면 충돌을 미세 조정하기 위해 수행되는 최대 반복 횟수이다 .
  • Surface collision tolerance : 아래에서 표면 충돌 미세 조정이 중지되는 허용 오차 임계값. 이 값을 약간 늘리면 평평한 표면에 대해 보다 안정적인 표면 충돌을 얻는 데 도움이 될 수 있다.

 

 

[ 03 . Constrain Settings ]

Solver 가 관리하는 모든 Actor에 대해 각 제약 조건 유형을 전체적으로 활성화/비활성화할 수 있다. 

 

이러한 방식으로 제약 조건을 비활성화하면(개별 액터에 대한 제약 조건 구성 요소를 비활성화하는 것과 반대로)

솔버가 해당 특정 제약 조건 유형과 관련된 모든 계산을 완전히 건너뛸 수 있다.

 

예를 들어 충돌 제약 조건  입자 충돌 제약 조건을 비활성화하면 전체 충돌 감지 파이프라인을 건너뛴다. 

이를 통해 내부적으로 수행되는 작업을 사용자 정의하고 불필요한 오버헤드를 제거할 수 있다.

즉 , 사용하지 않는다면 제약조건을 꺼주는게 최적화에 좋을 것이다 .

해당 옵션은 각 타입마다 4개의 옵션을 보여준다 .

  • Enabled : 해당 제약조건 옆에 체크표시이다 . 만약 사용하지 않는 제약조건이라면 비활성화 시키는게 좋다 . 만약    사용하지 않는 옵션이라면 활성화 해도 성능저하는일어나지 않는다 . 
  • Evaluation : 제약 조건의 적용방법을 결정한다 . 순차 (속도) / 병렬 (안정) 두가지 옵션이 존재한다 . 순차사용을 권장.
  • Iterations : 제약조건을 하위단계당 몇변 평가할지를 정한다 . 높을수록 실제와 가깝지만 성능을 위해서는 낮게 유지.다만 , 특정 상황 (로프)에서는 3보다 높게 설정함이 합리적일수 있다 .
  • Relaxation : SOR(Successive Over-Relaxation) 요인. 제약 조건을 충족하려고 할 때 수렴을 개선하는 한 가지 방법은 제약 조건을 "완화"하는 것이다.. 2는 최대값으로 제약 조건에 대해 두 배(200%) 완화를 수행할 수 있다. 높은 값을 사용하면 두 모드(순차 또는 병렬)에서 수렴 속도를 높이는 데 도움이 되지만 시뮬레이션 안정성이 저하될 수 있다는 점에 유의하자. 1보다 작은 값은 제약 조건을 부분적으로만 적용한다. 예를 들어, 완화 계수가 0.25인 제약 조건은 정상적인 효과의 25%만 갖는다. Distance 제약조건으로 예를 들자면 1의 값에서 팽팽한 거리를 유지하던 로프는 Relaxation을 0.1로 변경함으로 거리제약을 느슨하게 설정 할 수 있다.

출처

http://obi.virtualmethodstudio.com/manual/6.3/obisolver.html