메뉴 건너뛰기

A11Y

지난 강좌들에서 잠시 언급했던 $fn = 100; 코드를 기억하시나요? 렌더링 품질을 높여주는 이 특별 변수들에 대해 깊이 있게 알아보겠습니다. 바로 $fn, $fs, $fa 입니다.

완벽한 곡면은 없다: 조각(Fragment)의 개념

우리가 3D 모델링에서 sphere(구)나 cylinder(원기둥)처럼 둥근 모양을 만들 때, 그 결과물은 완전한 곡면이 아닙니다. 컴퓨터는 완벽한 곡면 대신, 아주 잘게 쪼갠 직선이나 평면을 여러 개 이어 붙여 곡면처럼 '보이게' 만듭니다. 3D 프린터로 출력된 최종 결과물은 바로 이 수많은 작은 평면들의 집합체입니다.

이 작은 조각(fragment)들을 어떻게 제어하느냐에 따라, 우리 모델의 표면이 거칠게 느껴질 수도, 아주 매끄럽게 느껴질 수도 있습니다. 바로 이 '조각'을 제어하는 도구가 $fn, $fs, $fa 입니다.


1. $fn (Fragment Number): 조각의 '개수'로 품질 결정하기

$fn은 "Fragment Number"의 약자로, 360도 전체 원을 만드는 데 사용할 조각(평면)의 총 개수를 직접 지정하는 변수입니다.

예시 1: $fn=6

cylinder(r=20, h=10, $fn=6);

이 코드는 반지름 20, 높이 10인 기둥을 만들되, 밑면의 원을 정확히 6개의 평면으로 만들라는 의미입니다.

촉감 예측: 3D 프린터로 출력된 결과물은 원기둥이 아니라 육각기둥이 됩니다. 손으로 만져보면 6개의 뚜렷한 모서리와 평평한 면을 느낄 수 있습니다.

예시 2: $fn=100

cylinder(r=20, h=10, $fn=100);

이 코드는 같은 크기의 기둥을 정확히 100개의 평면으로 만들라는 의미입니다.

촉감 예측: 100개의 작은 면들이 모여 만들어졌기 때문에, 각 면 사이의 경계가 거의 느껴지지 않습니다. 손으로 만져보면 아주 부드럽고 매끄러운 원기둥으로 느껴집니다.

언제 사용하나요?

$fn은 너트나 볼트 머리처럼 정확한 각의 개수가 필요할 때 매우 유용합니다. 예를 들어, 육각 너트를 모델링하려면 $fn=6을 사용하면 됩니다.

2. $fs (Fragment Size): 조각의 '크기'로 품질 결정하기

$fs는 "Fragment Size"의 약자로, 원을 구성하는 각 조각의 최대 길이(mm)를 지정합니다. 개수를 직접 정하는 대신, 조각 하나의 크기를 정해주는 방식입니다.

예시 1: $fs=5

cylinder(r=20, h=10, $fs=5);

이 코드는 반지름 20인 원을 만들 때, 사용되는 각 직선 조각의 길이가 최대 5mm를 넘지 않도록 하라는 의미입니다. OpenSCAD는 이 조건에 맞춰 필요한 조각의 개수(약 25~26개)를 자동으로 계산합니다.

촉감 예측: 약간의 각을 느낄 수 있는, 부드러움이 부족한 기둥이 됩니다.

예시 2: $fs=0.5

cylinder(r=20, h=10, $fs=0.5);

이번에는 각 조각의 최대 길이를 0.5mm로 매우 작게 설정했습니다. OpenSCAD는 이 조건을 맞추기 위해 약 251개의 조각을 사용하게 됩니다.

촉감 예측: $fn=100보다도 훨씬 많은 조각을 사용하므로, 손끝으로는 구별할 수 없는 매우 매끄러운 원기둥이 만들어집니다.

언제 사용하나요?

$fs는 모델의 크기와 상관없이 일정한 수준의 부드러움을 유지하고 싶을 때 유용합니다. 큰 원이든 작은 원이든 조각의 크기를 기준으로 품질이 결정되므로 일관된 결과물을 얻을 수 있습니다.

3. $fa (Fragment Angle): 조각의 '각도'로 품질 결정하기

$fa는 "Fragment Angle"의 약자로, 각 조각들이 이루는 모서리의 최대 각도를 지정합니다.

예시 1: $fa=30

cylinder(r=20, h=10, $fa=30);

이 코드는 조각과 조각이 만나는 모서리의 각도가 최대 30도를 넘지 않도록 하라는 의미입니다. 전체 360도를 30도로 나누면 12가 나오므로, 12각형 기둥이 만들어집니다.

촉감 예측: 12개의 각이 만져지는, 다소 각진 기둥이 됩니다.

예시 2: $fa=5

cylinder(r=20, h=10, $fa=5);

이번에는 모서리 각도를 최대 5도로 매우 작게 설정했습니다. 360도를 5도로 나누면 72가 나오므로, 72개의 면을 가진 기둥이 만들어집니다.

촉감 예측: 72개의 면으로 이루어져 있으므로, 매우 부드러운 원기둥으로 느껴집니다.

언제 사용하나요?

$fa$fs와 마찬가지로 모델의 크기에 크게 구애받지 않고 전반적인 부드러움을 설정하고 싶을 때 사용합니다.


세 변수의 우선순위와 사용법 정리

세 변수를 동시에 사용하면 어떻게 될까요? OpenSCAD에는 명확한 우선순위 규칙이 있습니다.

  1. $fn이 최우선: $fn 값이 0이 아닌 값으로 설정되어 있다면, OpenSCAD는 $fs$fa 값을 완전히 무시하고 $fn에 지정된 개수만큼 조각을 만듭니다.
  2. $fn이 없을 경우: $fn이 설정되지 않았다면, OpenSCAD는 $fs$fa 값을 모두 고려하여, 두 조건 중 더 높은 품질(더 많은 조각)을 만드는 쪽을 선택합니다.

최종 요약: 언제 무엇을 쓸까요?

  • 정확한 다각형이 필요할 때 (예: 육각 너트, 삼각형 기둥):
    망설임 없이 $fn을 사용하세요. (예: ... $fn=6;)
  • 그냥 부드러운 곡면을 원할 때:
    코드 맨 위에 $fs=0.5;$fa=5; 처럼 기본값을 작게 설정해두면 모든 곡면이 알아서 부드럽게 만들어집니다.

품질과 성능, 그 사이의 줄다리기: 렌더링 성능에 대한 이해

$fn, $fs, $fa 값을 조절하여 모델의 부드러움을 제어하는 법을 배웠습니다. 하지만 여기에는 중요한 대가, 바로 컴퓨터의 계산 시간과 성능이 따릅니다. 조각의 수가 많아질수록 계산량은 기하급수적으로 늘어납니다.

고품질 설정이 성능에 미치는 영향

  1. 미리보기(F5) 속도 저하: $fn 값을 매우 높게 설정하면, 미리보기 화면 업데이트가 느려지고 마우스 조작 시 버벅거릴 수 있습니다.
  2. 렌더링(F6) 시간 급증: 최종 렌더링 시, 낮은 품질에서 몇 초면 끝날 작업이 높은 품질에서는 수 분 이상 걸릴 수 있습니다.
  3. 파일 크기 증가: 조각의 수가 많아지면 최종 STL 파일의 크기가 커지고, 슬라이서 프로그램에서 처리하는 시간 또한 길어집니다.

현명한 작업 흐름: 품질과 속도 모두 잡기

효율적인 작업 전략의 핵심은 "모델링은 빠르게, 출력은 고품질로" 입니다. 작업 단계에 따라 품질 설정을 다르게 가져가는 것입니다.

1단계: 설계 및 모델링 (빠른 미리보기)

모델의 형태를 잡고 수정하는 단계에서는 속도가 중요합니다. 이때는 일부러 낮은 품질 설정을 사용합니다.

// --- 모델링 중: 빠른 미리보기를 위해 낮은 값 사용 ---
$fn = 24;

// 여기에 여러분의 모델링 코드를 작성합니다.
cylinder(r=20, h=10);
// ... 기타 복잡한 코드들

$fn=24 정도로 설정하면 미리보기는 거의 즉각적으로 반응하며, 형태를 파악하는 데 아무런 문제가 없습니다.

2단계: 최종 렌더링 및 내보내기 (고품질)

모델 디자인이 모두 완성되었을 때, 딱 한 번만 품질 설정을 높여줍니다.

// --- 최종 렌더링 시: 아래 주석을 풀고 위 라인을 주석 처리 ---
// $fn = 24;
$fn = 120;
// 또는 더 부드럽게
// $fs = 0.4;
// $fa = 3;

// 여기에 여러분의 모델링 코드를 작성합니다.
cylinder(r=20, h=10);
// ... 기타 복잡한 코드들

이제 F6 키를 눌러 렌더링을 시작합니다. 시간은 좀 걸리겠지만, 이미 디자인을 완성했으므로 차분히 기다리기만 하면 매끄러운 고품질 모델을 얻을 수 있습니다.

최종 요약: 실용적인 조언

  • 작업 중에는 $fn=24; 또는 $fn=32;를 사용하여 디자인에 집중하세요.
  • 모델의 크기와 중요도에 맞춰 적절한 품질을 선택하세요. 지름 3mm짜리 구멍에 $fn=200은 과유불급입니다.
  • 최종 출력 직전에만 품질 설정을 높이는 습관을 들이면, 쾌적한 OpenSCAD 모델링 환경을 유지할 수 있습니다.
번호 제목 날짜 조회 수
36 About: MSAA, Microsoft Active Accessibility 2024.09.05 671
35 센스리더에서 지원하는 SSML 2024.09.05 956
34 About: Microsoft Windows IUIAutomation Interface 2024.09.06 658
33 윈도우 접근성 기술: MSAA와 UIAutomation 비교 2024.09.09 671
32 시각장애인 접근성 향상을 위한 응용프로그램 조작 인터페이스 2024.09.11 720
31 접근성 역할에서 "link"와 "button"의 차이 2024.09.24 1120
30 시각장애인을 위한 음성 접근성 정보 제공 방법 2024.09.25 690
29 시각장애인 접근성 음성 정보의 맹점 2024.10.02 713
28 시각장애인을 위한 소리 정보 제공 시 기본 파형 사용 주의사항 2024.10.02 712
27 센스리더의 "기능 검색" 기능에 대하여 2024.10.08 911
26 센스리더의 브라우저 탭키 환경과 가상커서 탭키 환경 2024.10.11 1062
25 시각장애인과의 협업을 위한 특수문자 발음의 이해 2024.10.18 721
24 여러 단계로 이루어진 서비스 제공시 시각장애인 접근성 개선 방안 2024.10.22 734
23 [세미나] 시각장애 개발자와 함께 하는 아이디어 마이닝 #1. 목적 2024.11.11 769
22 시각장애 개발자와 함께하는 아이디어 마이닝 #2. 텍스트와 오디오 2024.11.12 842
21 시각장애 개발자와 함께하는 아이디어 마이닝 #3. 이미지 2024.11.13 712
20 시각장애 개발자와 함께하는 아이디어 마이닝 #4. 의사 코드 2024.11.14 694
19 시각장애 개발자와 함께하는 아이디어 마이닝 #5. HTML 2024.11.18 798
18 시각장애 개발자와 함께하는 아이디어 마이닝 #6. 스크립트 언어 2024.11.19 819
17 시각장애 개발자와 함께하는 아이디어 마이닝 #7. 스크립트 예시, CMD 2024.11.20 775