다이나모에서 If 노드와 Scope If 노드의 차이점

2024년 10월 15일

Dynamo에서 If 노드Scope If 노드는 모두 조건에 따른 값을 처리하는 노드이지만, 그 작동 방식과 사용 목적에서 차이가 있습니다. 이 글에서는 두 노드의 차이점에 대해서 알아보고자 합니다.

1. If 노드의 작동 원리

If 노드는 기본적인 조건문 처리 노드로, 세 가지 입력을 받습니다:

  • Test: 조건이 참(True)인지 거짓(False)인지 결정하는 부분.
  • True: 조건이 참일 때 반환할 값.
  • False: 조건이 거짓일 때 반환할 값.

이 노드는 모든 입력을 미리 평가하고, True 또는 False에 해당하는 값을 반환합니다.
즉, 조건이 True든 False든 상관없이 True와 False 입력값이 모두 계산되며, 그 중 하나가 선택되어 출력됩니다.

예시:

다이나모 IF노드
이미지 1. IF노드 예시, ⓒ디지털디자인포럼
  • test 입력 값이 True일 때: 조건이 참이므로 결과는 “11”.
  • test 입력 값이 False일 때: 조건이 거짓이므로 결과는 “-9”.

if노드의 true와 false에 입력된 + 노드와 – 노드는 결과에 상관없이 if노드 실행 전 미리 실행된 후 test 결과에 따라 값을 도출합니다.

2. Scope If 노드의 작동 원리

Scope If 노드도 조건문 처리 노드지만, 불필요한 계산을 방지하는 것이 가장 큰 특징입니다. Scope If 노드는 조건에 따라 필요한 입력값만 평가합니다. 조건이 참이면 True 입력값만 계산하고, False 입력값은 무시됩니다. 반대로, 조건이 거짓이면 True 입력은 실행되지 않고 False 입력만 계산됩니다.

이는 효율적인 계산을 가능하게 해주지만, 모든 입력을 미리 평가하는 If 노드와는 다르게 동작합니다.

예시:

다이나모 Scope if 노드 예시
이미지 2. Scope IF노드 예시, ⓒ디지털디자인포럼
  • test 입력 값이 True일 때: 조건이 참이므로 결과는 “11”.
  • test 입력 값이 False일 때: 조건이 거짓이므로 결과는 “-9”.

결과 값을 보면 if 노와 동일한 것처럼 보이지만 ScopeIf 노드의 test에 입력된 값이 true이기 때문에 +노드는 정상 실행되서 11이라는 값을 도출했지만 -노드는 실행되지 않고 null이라는 값을 반환합니다. 이처럼 불필요한 입력값의 계산을 막아 효율적인 처리가 가능합니다.

3. Scope If 노드의 장점

  • 효율성: 불필요한 노드 실행을 방지해 복잡한 계산에서 성능을 향상시킬 수 있습니다.

4. Scope If 노드의 단점 및 주의 사항

Scope If는 불필요한 노드 실행을 방지하지만, 항상 더 좋은 선택은 아닙니다. 아래와 같은 단점이 있습니다.

  1. 실행 순서 문제: Scope If는 조건에 맞는 입력만 실행하므로, 그래프의 실행 순서가 꼬일 수 있습니다. 특정 노드들이 실행되지 않거나, 실행 순서가 의도와 다를 수 있습니다. 예를 들어 if노드를 사용할 경우 [이미지1]처럼 입력값을 미리 실행하기 때문에 후속처리로 코드블록에 연결해도 a*10=110, a+10-1처럼 정상적으로 작동을 하지만 scope if노드의 경우 [이미지2]처럼 불필요한 입력은 실행되지 않기 때문에 null 값을 반환해서 후속 노드 실행에 영향을 미칠 수 있습니다.
  2. 일반적인 그래프 환경에서 오류 발생 가능성: Scope If는 주로 커스텀 노드에서 사용되는 노드입니다. 일반적인 그래프에서 사용할 때는 예상치 못한 오류가 발생할 수 있습니다. If 노드가 모든 입력을 평가하는 반면, Scope If는 조건에 따라 실행되지 않는 입력이 생길 수 있기 때문에, 잘못된 동작을 할 가능성이 있습니다.
    또한 아래 [이미지3]처럼 scope if에 입력된 값이 false임에도 true에 연결된 +노드에 null을 반환하는 등의 오류가 발생할 수 있습니다. 물론 null을 반환하더라도 scope if는 정상적인 값을 반환하지만, a*10과 같은 후속노드에 연결이 되어있다면 이미지처럼 실행이 안될 수 있습니다.
다이나모 Scope IF노드 null값 반환
이미지 3. Scope IF노드 null, ⓒ디지털디자인포럼

5. 결론: If 노드와 Scope If 노드의 선택

  • If 노드는 단순한 조건 처리가 필요하고, 모든 입력을 미리 평가해야 하는 경우에 유리합니다. 디버깅이 쉽고 예측 가능한 결과를 얻을 수 있기 때문에, 복잡한 그래프에서는 더 안전할 수 있습니다.
  • Scope If 노드는 복잡한 계산에서 불필요한 입력값을 실행하지 않아 성능을 높일 수 있는 장점이 있지만, 오류가 많고 실행 순서 관리가 복잡해질 수 있습니다. 특히 커스텀 노드에서 주로 사용됩니다.

따라서, 두 노드를 사용할 때 그래프의 복잡성필요한 조건 평가 방식을 고려해 선택하는 것이 중요합니다. 단순한 작업에는 If 노드가 적합하고, 복잡한 계산이나 성능 최적화가 필요한 경우에는 Scope If 노드를 활용할 수 있습니다.


답글 남기기


관련 포스트

  • 다이나모에서 구성평면과 벡터 크기 및 방향 확인하는 방법

  • Curve 지오메트리 등분하기

  • 다이나모에서 데이터 타입(Data Type) 이해하기

  • 다이나모에서 리스트 분할하기: List.Chop 및 List.Slice 노드 사용법

  • 다이나모에서 특정 Index의 Item 추출 또는 특정 Item의 Index 추출하기

  • Dynamo에서 True값과 False값 구분하기: List.FilterByBoolMask 사용법

  • Dynamo에서 유형 파라미터 vs 인스턴스 파라미터: 차이점과 사용법

  • Dynamo에서 n번째 항까지의 총합 구하기: List.Scan 사용법