BLOG / / 22 MIN READ
보이지 않는 힘을 무지개로
투명한 플라스틱 속의 응력이 편광판 사이에서 색의 띠가 되기까지. 유한요소법, 복굴절, 간섭색, 셰이더를 따라 「응력의 빛」을 처음부터 다시 만들어 봅니다.

보이지 않는 힘은 언제나 거기 있었다. 빛을 한 방향으로 고르면, 비로소 그 모양이 보인다.
투명한 플라스틱 자를 노트북 화면 앞에 대고 편광 선글라스를 쓴 채 바라보면, 아무 무늬도 없던 자 위에 무지갯빛 띠가 떠오릅니다. 자를 살짝 구부리면 띠가 꿈틀거리며 몰려들고, 손을 놓으면 원래대로 돌아갑니다. LCD 화면은 이미 한 방향으로 편광된 빛을 내보내기 때문에, 선글라스만 있으면 집에서도 이 실험을 할 수 있습니다.
이 무늬는 장식이 아닙니다. 플라스틱 내부에 흐르는 힘의 지도입니다. 20세기 초부터 공학자들은 이 현상, 광탄성(photoelasticity) 을 이용해 다리와 기어와 뼈의 모형에 응력이 어디로 몰리는지 눈으로 확인했습니다. 컴퓨터 시뮬레이션이 흔해지기 전, 응력 해석의 가장 강력한 도구였던 셈입니다.
플레이그라운드의 「응력의 빛」은 이 실험 장비를 브라우저 안에 다시 세운 작품입니다. 이 글에서는 그 작품이 손끝의 힘을 화면의 색으로 바꾸기까지 거치는 과정을 처음부터 따라갑니다.
- 힘을 받은 플라스틱은 왜 빛을 둘로 가르는가 — 복굴절과 편광
- 그 차이가 왜 하필 무지개색으로 보이는가 — 간섭색과 색채학
- 임의의 모양 속 응력을 어떻게 실시간으로 구하는가 — 유한요소법
- 그것을 픽셀로 옮길 때 무엇이 잘못될 수 있는가 — 셰이더의 함정
중간중간의 그림은 대부분 직접 만져 볼 수 있습니다. 작품이 쓰는 광학 코드와 유한요소 코드를 그대로 가져다 이 페이지에서 돌리고 있으니, 여기서 보이는 색과 숫자는 작품의 것과 같습니다.
빛이 둘로 갈라질 때
편광, 한 방향으로 고른 빛
빛은 진행 방향에 수직으로 떨리는 전기장의 파동입니다. 햇빛이나 전구의 빛은 떨림의 방향이 무작위로 뒤섞여 있지만, 편광판을 지나면 한 방향으로 떨리는 성분만 남습니다. 이런 빛을 선편광이라고 합니다. 편광판 두 장을 서로 직각으로 겹치면 첫 장을 지난 빛은 둘째 장을 통과할 성분이 없어서 시야가 캄캄해집니다. 이 직교 배치가 광탄성 실험의 출발점입니다.
복굴절, 힘이 만드는 두 개의 굴절률
투명한 고분자는 평소에는 모든 방향으로 같은 굴절률을 가집니다. 그런데 힘을 받으면 분자 사슬이 늘어나고 눌리면서 재료가 방향성을 띠게 됩니다. 그러면 빛이 지나는 한 점에서 굴절률이 두 개가 됩니다. 이 현상을 복굴절(birefringence) 이라고 합니다.
두 굴절률의 방향은 그 점의 주응력 방향과 정확히 일치합니다. 주응력은 그 점에서 가장 세게 당기는 방향과 가장 세게 누르는 방향의 응력으로, , 로 씁니다. 1810년대에 데이비드 브루스터가 처음 관찰한 응력-광학 법칙은 두 굴절률의 차이가 주응력의 차이에 비례한다고 말합니다.
는 재료마다 다른 응력-광학 계수입니다. 두께 인 판을 지나는 동안 두 성분 사이에 쌓이는 경로차를 지연(retardation) 라 하고, 이를 위상차 로 바꾸면 다음과 같습니다.
여기서 짚어야 할 점이 하나 있습니다. 빛이 알려 주는 것은 과 각각이 아니라 그 차이뿐입니다. 차이는 그 점의 최대 전단응력의 두 배와 같습니다. 재료가 미끄러지듯 항복하는 정도를 가늠하는 양이라, 공학적으로도 쓸모가 큽니다.
아래 그림이 이 과정 전체를 보여 줍니다. 편광판을 지난 선편광(흰색)이 시편에 들어가면 주응력 방향을 따라 두 성분(청록, 분홍)으로 나뉩니다. 한 성분이 조금씩 뒤처지면서 시편을 나온 빛(노랑)은 타원을 그리고, 검광판은 그 타원의 가로 성분(보라)만 통과시킵니다.
두 겹의 검은 띠: 등경선과 등색선
직교한 두 편광판 사이에서 검광판을 통과하는 빛의 세기는 존스 행렬(Jones matrix) 세 개를 곱해 바로 구할 수 있습니다. 편광축을 로 두고, 시편의 주응력 방향이 편광축과 만큼 기울어져 있다고 합시다.
곱이 0이 되는 경우는 두 가지이고, 서로 다른 물리를 담은 두 종류의 검은 띠가 나타납니다.
- → 등경선(isoclinic). 주응력 방향이 편광축과 나란한 점들입니다. 빛이 한 성분으로만 지나가서 갈라질 일이 없습니다. 편광판 쌍을 돌리면 이 띠가 따라 움직입니다.
- → 등색선(isochromatic). 지연이 파장의 정수배()인 점들, 곧 가 같은 등고선입니다. 을 차수(fringe order) 라고 부릅니다.
응력의 크기를 읽고 싶을 때 등경선은 방해가 됩니다. 그래서 실제 실험에서는 시편 앞뒤에 1/4 파장판을 하나씩 끼운 원편광기를 씁니다. 1/4 파장판이 선편광을 원편광으로 바꾸면 '방향'이라는 개념이 사라지므로 에 대한 의존성도 없어지고, 세기는 만 남습니다. 1/4 파장판 두 장의 축을 서로 나란하게 두면 반대로 인 명시야가 됩니다.
작품의 셰이더도 이 세 식을 그대로 씁니다.
| 편광기 | 세기 | 보이는 것 |
|---|---|---|
| 원편광 · 암시야 | 등색선 (검은 바탕) | |
| 원편광 · 명시야 | 등색선 (흰 바탕, 보색) | |
| 평면 편광 | 등색선 + 등경선 |
왜 하필 무지개인가
단색광, 예를 들어 나트륨등의 589 nm 빛을 쓰면 등색선은 밝고 어두운 띠의 반복일 뿐입니다. 그런데 백색광에서는 화려한 색이 나타납니다. 이유는 위 식의 에 있습니다. 지연 는 파장과 무관한 길이지만, 그것이 만드는 위상차 는 파장마다 다릅니다. 그래서 한 점에서 어떤 파장은 완전히 지워지고 어떤 파장은 그대로 통과합니다. 흰빛에서 일부 색이 빠지면 남은 빛은 그 보색으로 보입니다.
예를 들어 nm인 점에서는 560 nm(초록) 근처가 정확히 소거됩니다. 초록이 빠진 흰빛은 자주색으로 보이고, 이 색을 예민색(sensitive tint) 이라고 부릅니다. 지연이 아주 조금만 바뀌어도 파랑 쪽이나 빨강 쪽으로 급격히 기울기 때문에, 광물학자들은 이 색을 기준점으로 씁니다.
간섭색을 계산하기
눈에 보이는 색을 구하려면 남은 스펙트럼을 사람 눈의 반응 곡선으로 적분해야 합니다. 작품은 광원 스펙트럼 로 5200 K 플랑크 복사를, 눈의 반응으로 CIE 1931 등색 함수 를 씁니다.
이렇게 얻은 XYZ를 선형 sRGB로 바꾸면, 광물학 교과서에 실린 미셸-레비 간섭색표와 같은 순서의 색이 나옵니다. 검정 → 철회색 → 흰색 → 노랑 → 주황 → 1차 자주 → 남색 → 청록 → … 순서이고, 차수가 올라갈수록 색이 바래서 결국 옅은 분홍과 초록만 번갈아 남습니다.
코드는 적분을 81개 파장의 합으로 바꾼 것이 전부입니다.
export function interferenceColor(retardation: number, light = false) {
let x = 0, y = 0, z = 0;
for (const s of SPECTRUM) { // 380–780 nm, 5 nm 간격, 광원 × CIE 가중
const a = Math.sin(Math.PI * retardation / s.nm) ** 2, w = light ? 1 - a : a;
x += s.x * w; y += s.y * w; z += s.z * w;
}
const rgb = xyzToLinearSrgb(x / WHITE[1], y / WHITE[1], z / WHITE[1]);
// 부분 von Kries 보정: 램프의 따뜻함은 살짝 남기고 주황으로 기울지는 않게
return rgb.map((v, i) => v / (0.35 + 0.65 * WHITE_RGB[i]));
}마지막 줄은 색순응 보정입니다. 5200 K 광원은 그대로 쓰면 화면에서 누렇게 보이는데, 사람의 눈은 조명색에 적응해서 그 빛을 '흰색'으로 받아들입니다. 그 적응을 65%만 흉내 내서 따뜻한 기운이 조금 남게 했습니다. CIE 곡선 자체도 표를 들고 다니지 않고 Wyman·Sloan·Shirley(2013)의 가우시안 다중 로브 근사식으로 계산합니다. 덕분에 함수 세 줄로 끝납니다.
해석해로 먼저 보기 — 눌린 원판
색을 칠할 준비가 됐으니 이제 응력이 필요합니다. 광탄성 교과서의 첫 예제는 늘 직경 방향으로 압축한 원판입니다. 위아래에서 힘 로 누른 원판의 응력은 놀랍게도 닫힌 식으로 구할 수 있습니다. 두 접촉점에서 퍼지는 플라망(Flamant) 점하중 해 두 개를 겹치고, 테두리의 힘이 0이 되도록 균일한 인장을 더하면 됩니다(Hertz 1883).
중심에서는 가로로 만큼 당기고 세로로 만큼 누르므로, 주응력 차는 입니다. 이 값은 뒤에서 유한요소 결과를 검증하는 기준이 됩니다. 아래 그림은 이 식을 픽셀마다 계산해 FIG. 3의 간섭색표로 칠한 것입니다.
원판 위에 커서를 올려 보면 접촉점 근처의 차수가 수십, 수백으로 치솟는 것을 볼 수 있습니다. 점하중 해는 접촉점에서 로 발산합니다. 실제 재료에서는 접촉면이 조금 눌려 퍼지면서 이 특이점이 사라지는데, 작품은 이를 헤르츠 접촉의 분포 근사로 흉내 냅니다(뒤에서 다시 다룹니다).
아무 모양이나 — 유한요소법
원판처럼 해석해가 있는 형상은 드뭅니다. 구멍 뚫린 띠, 아치, 갈고리, 사출 성형된 각도기에, 사용자가 누르는 곳까지 마음대로 바뀝니다.

01 원판 · 직경 압축

02 구멍 뚫린 띠 · 인장

03 아치 · 정점 하중

04 갈고리 · 매달린 하중
이런 문제를 푸는 표준 도구가 유한요소법(FEM) 입니다. 형상을 작은 삼각형으로 나누고, 각 삼각형 안에서는 변위가 단순한 형태(여기서는 선형)라고 가정해 거대한 연립방정식 하나로 바꿉니다.
평면 응력과 상수 변형률 삼각형
얇은 판에서는 두께 방향 응력을 0으로 보는 평면 응력 가정이 잘 맞습니다. 그러면 변형률과 응력은 행렬 하나로 이어집니다. 작품은 폴리카보네이트 계열의 푸아송 비 을 쓰고, 단위는 정규화해서 로 둡니다.
삼각형 꼭짓점 세 개의 변위 6개를 라 하면, 선형 보간에서 변형률은 삼각형 안에서 일정한 값 가 됩니다(CST, constant-strain triangle). 는 꼭짓점 좌표만으로 정해지는 행렬입니다. 요소 하나의 강성은 이고, 이것을 전부 더하면(조립) 전체 방정식 를 얻습니다. 받침에 고정된 자유도는 행과 열을 지워서 없앱니다.
SDF에서 메시까지
시편의 모양은 부호 거리 함수(SDF) 로 정의합니다. 평면의 모든 점에 '형상 경계까지의 거리, 안쪽이면 음수'를 돌려주는 함수입니다. 원판은 length(p) - r 한 줄이고, 구멍 뚫린 띠는 둥근 상자 SDF에서 원 SDF를 빼는 max(box, -circle)입니다. 갈고리처럼 복잡한 모양도 몇 줄의 min·max 조합으로 끝납니다.
메시는 이 SDF로 만듭니다.
- 형상 넓이와 목표 절점 수에서 간격 를 정하고, 영역을 덮는 정삼각형 격자를 깝니다.
- 무게중심이 형상 안(SDF가 음수)에 있는 삼각형만 남깁니다.
- 변 하나로만 매달렸거나 꼭짓점 하나로만 이어진 삼각형을 반복해서 걷어 냅니다.
- 경계 절점은 SDF의 기울기를 따라 를 여섯 번 반복해 표면 위로 투영합니다.
- 내부 절점은 이웃 평균 쪽으로 반씩 네 번 옮기는 라플라시안 평활화로 다듬습니다.
빌드 단계의 메시 생성기나 외부 라이브러리 없이 Worker 안에서 수백 ms 만에 끝나서, 데스크톱에서는 약 8,000 절점, 모바일에서는 약 3,600 절점으로 기기마다 다르게 만듭니다.
한 번 분해하고, 매 프레임 대입만
8,000 절점이면 미지수가 약 16,000개입니다. 이것을 매 프레임 새로 풀면 브라우저가 멈춥니다. 다행히 사용자가 바꾸는 것은 힘 뿐이고 는 그대로입니다. 그래서 로 시편당 한 번만 촐레스키 분해해 두고, 매번 전진·후진 대입 두 번으로 를 구합니다.
는 대부분이 0인 희소 행렬이지만, 분해하면 0이던 자리가 채워집니다(fill-in). 프로파일(skyline) 저장 방식은 각 행에서 처음 0이 아닌 열부터 대각선까지만 저장하는데, 촐레스키 분해의 채움은 정확히 이 범위 안에서만 일어납니다. 따라서 이 '스카이라인'이 좁을수록 메모리와 계산이 줄어듭니다. 그 폭은 절점에 번호를 붙이는 순서에 달려 있고, 역 커스힐-매키(RCM) 재정렬은 너비 우선 탐색으로 이웃끼리 가까운 번호를 받게 해서 이 폭을 좁힙니다.
아래 실험실은 작품의 buildMesh, ElasticSystem, ProfileCholesky를 이 페이지에서 그대로 실행합니다. 단계별 탭을 넘겨 보세요. 마지막 탭에서는 가장자리를 눌러 직접 힘을 걸 수 있습니다.
같은 측정을 Node에서 데스크톱 해상도(약 8,000 절점)로 다시 해 보면 다음과 같습니다.
| 시편 | 격자 순서 프로파일 | RCM 프로파일 | 비율 |
|---|---|---|---|
| 01 원판 | 2.67 M | 2.92 M | 0.91× |
| 02 구멍 뚫린 띠 | 4.66 M | 1.70 M | 2.7× |
| 03 아치 | 2.90 M | 1.29 M | 2.3× |
| 05 보 | 6.39 M | 1.42 M | 4.5× |
| 원판, 무작위 번호 | 99.5 M | — | 34× 더 큼 |
원판에서는 RCM이 오히려 9% 손해입니다. 정사각형에 가까운 형상에서는 줄 단위로 번호를 매기는 격자 순서가 이미 좋은 대역 순서이기 때문입니다. 그래도 RCM을 쓰는 이유는 형상에 상관없이 늘 괜찮은 결과를 주기 때문입니다. 밀집 행렬로 저장했다면 원판 하나에 1억 3천만 개 항목(약 1 GB)이 필요했을 것을, 290만 개(약 23 MB)로 줄입니다.
결과적으로 8,000 절점 원판의 분해는 약 250 ms, 하중이 바뀔 때 한 번 푸는 데는 약 8 ms가 걸립니다. 이 계산은 메인 스레드를 막지 않도록 Worker에서 돌고, 결과 텐서만 Float32Array로 넘겨받습니다.
solve(b: Float64Array) {
const { n, first, start, values } = this;
for (let i = 0; i < n; i++) { // L y = b
const fi = first[i], si = start[i] - fi;
let s = b[i];
for (let k = fi; k < i; k++) s -= values[si + k] * b[k];
b[i] = s / values[si + i];
}
for (let i = n - 1; i >= 0; i--) { // Lᵀ u = y
const fi = first[i], si = start[i] - fi;
b[i] /= values[si + i];
const x = b[i];
for (let k = fi; k < i; k++) b[k] -= values[si + k] * x;
}
return b;
}손끝의 힘을 경계에 나누기
사용자의 힘을 절점 하나에 몰아 걸면 원판의 해석해처럼 그 점에서 응력이 발산하고, 메시가 고와질수록 값이 끝없이 커집니다. 실제 손가락이나 누름핀은 작은 면적으로 누르니, 힘을 접촉 폭 안의 경계 절점들에 창으로 나눠 겁니다.
헤르츠 접촉의 압력 분포 와 비슷한 둥근 종 모양이고, 합은 정확히 입니다. 띠를 잡아당기는 그립만은 균일한 창을 씁니다. 사용자의 힘은 tanh로 포화시키는데, 이는 재료의 항복이 아니라 화면이 감당할 수 있는 차수를 넘지 않게 하는 예술적 제한입니다.
누르지 않아도 있는 힘
작품을 처음 열면 아무도 누르지 않았는데도 시편에 옅은 무늬가 있습니다. 실제 플라스틱도 그렇습니다. 문방구의 투명 각도기를 편광 선글라스로 보면 하중 없이도 화려한 무늬가 보이는데, 만들어질 때 생긴 잔류 응력입니다.

06 각도기 · 잔류 응력

05 보 · 4점 굽힘
고유 변형률로 잔류 응력 만들기
잔류 응력은 외력 없이 스스로 평형을 이루는 응력입니다. 사출 성형품은 바깥 표피가 먼저 굳고 안쪽 심부가 나중에 식으며 더 많이 줄어듭니다. 그러면 표피는 눌리고 심부는 당겨진 채로 굳습니다. 이런 '줄어들고 싶었던 양'을 고유 변형률(eigenstrain) 라 하는데, 열팽창과 같은 방식으로 다룰 수 있습니다.
등가 절점력 로 변위를 풀고 응력에서 고유 변형률을 빼면 잔류 응력이 나옵니다. 여기서 한 가지 요령이 필요합니다. 실제 받침에 고정한 채로 풀면 받침이 수축을 막으면서 가짜 반력이 생깁니다. 그래서 잔류 응력만은 강체 운동만 막는 두 점 받침(한 점 핀, 한 점 롤러)으로 따로 풉니다. 이런 정정 지지에서는 반력이 0이므로 결과가 스스로 평형을 이룹니다. 테스트는 물체 전체의 가 응력 크기의 이하인지 확인합니다.
각도기의 고유 변형률은 세 가지 성형 결함을 겹쳐 만듭니다.
- 표피-심부 수축 차이: 경계에서의 깊이에 따라 등방 수축이 커집니다.
- 유동 배향: 중심에서 벗어난 게이트에서 방사형으로 퍼지는 수축이며, 각도에 따라 물결칩니다.
- 웰드 라인: 창 위쪽에서 두 유동 선단이 만나는 좁은 띠입니다.
나머지 다섯 시편은 풀림 처리한 실험용 시편으로 보고, 톱으로 자른 절단면의 얇은 수축층만 남겼습니다. 그래서 테두리를 따라 가는 밝은 띠가 보입니다.
자중
시편을 실제 장비처럼 세워 걸었으니 제 무게도 응력을 만듭니다. 절점마다 면적에 비례하는 아래 방향 힘을 실제 받침 위에서 풀면 됩니다. 갈고리의 자루는 아래로 매달린 무게가 많을수록 더 당겨지므로 위로 갈수록 띠가 짙어지고, 굴림대 위의 보는 가운데가 처지며 위는 압축, 아래는 인장이 됩니다.
이 모든 응력장은 선형이라 그냥 더하면 됩니다. 잔류 응력과 자중을 합친 기본장은 시편을 열 때 한 번 계산해 두고, 사용자 하중의 해를 매번 그 위에 더합니다.
셰이더의 함정 두 가지
Worker가 보내 준 것은 절점마다의 응력 텐서 입니다. 이제 이것을 픽셀로 옮겨야 하는데, 이 단계에 그럴듯하지만 틀린 지름길이 두 개 있습니다.
함정 1 — 무엇을 보간할 것인가
가장 쉬운 방법은 절점마다 와 주방향 를 미리 계산해 두고, 그 두 스칼라를 삼각형 안에서 보간하는 것입니다. 그런데 이렇게 하면 틀립니다.
주응력 차는 텐서의 비선형 함수입니다. 더 중요한 점은 주방향에 부호가 없다는 것입니다. 와 는 같은 방향입니다. 이웃한 두 절점의 주방향이 90° 어긋나 있다고 해 봅시다. 실제 응력장에서는 그 사이 어딘가에서 두 주응력이 같아지는 등방점을 지나는데, 그곳에서 이므로 검은 점이 생겨야 합니다. 스칼라 보간은 이것을 모르고 크기를 그대로 이어 버립니다.
해법은 텐서 성분 자체를 보간하고, 픽셀마다 고유값을 다시 계산하는 것입니다. 텐서의 편차 부분은 라는 2차원 벡터로 볼 수 있습니다. 이 평면(모어 원의 평면)에서 각도는 두 배로 그려집니다. 90° 어긋난 두 주방향은 이 평면에서 정반대 벡터가 되고, 둘을 잇는 직선은 원점을 지납니다.
작품은 절점 텐서를 정점 속성으로 GPU에 넘기고, 응력 패스에서 래스터라이저가 그것을 선형 보간하게 둡니다. 고유값과 주방향은 단면 셰이더가 픽셀마다 계산합니다.
vec3 t = s.rgb / cov; // 보간된 (σxx, σyy, τxy)
float gamma = length(vec2(t.x - t.y, 2.0 * t.z)) * uSensitivity;
float theta = 0.5 * atan(2.0 * t.z, t.x - t.y);
float blur = cov > 0.99 ? fwidth(gamma) * 1.2 : 800.0 * (1.0 - cov);
vec3 fringe = lut(mode, gamma, blur);
if (uField == 2.0) { // 평면 편광: 등경선
float isoclinic = sin(2.0 * (theta - uAngle));
fringe *= isoclinic * isoclinic;
}length(vec2(σxx − σyy, 2τxy))는 를 그대로 옮긴 식입니다. 응력 패스는 4× MSAA HalfFloat 타깃에 그려서, 시편 가장자리의 부분 커버리지를 알파로 받아 텐서를 다시 나눠 씁니다(s.rgb / cov).
함정 2 — 픽셀보다 촘촘한 무늬
접촉점 근처에서는 차수가 수십까지 올라가서, 픽셀 하나 안에 띠가 여러 개 들어갑니다. 픽셀 중심의 지연 하나로 색을 고르면 샘플링 정리를 정면으로 어기게 되고, 실제로는 없는 큰 무늬(모아레)가 생깁니다. 게다가 이 무늬는 화면을 조금만 움직여도 반짝이며 바뀝니다.
물리적으로 옳은 답은 '픽셀이 덮는 영역의 평균 색'입니다. 고차 띠라면 백색광에서는 옅은 회색, 나트륨등에서는 절반 밝기의 호박색이 됩니다. 실제 실험 사진에서도 접촉점 근처는 뿌옇게 바랜 색으로 찍힙니다. 이것을 싸게 얻는 방법이 미리 흐린 LUT입니다.
- 간섭색표를 0–6,000 nm 범위의 1,024 텍셀에 굽되, 지연 축을 따라 0, 25, 50, 100, 200, 400, 800 nm만큼 상자 필터로 흐린 일곱 줄을 함께 만듭니다. 누적합(prefix sum)을 쓰면 줄마다 에 끝납니다.
- 셰이더는
fwidth(gamma)로 이 픽셀 안에서 지연이 얼마나 변하는지 잽니다. 이웃 픽셀과의 차이로 구하는 화면 공간 미분입니다. - 그 폭에 맞는 두 줄을 골라 보간합니다.
텍스처의 밉맵이 화면 크기에 맞는 해상도를 고르듯, 여기서는 지연 공간의 밉맵을 고르는 셈입니다.
3D 무대 — 빛의 막
계산은 2D지만 작품은 3D 공간에 투명한 시편을 세워 둡니다. 여기서 질문이 하나 생깁니다. 두께가 있는 시편의 어느 단면을 보여 줄 것인가?
투과광 광탄성은 두께 방향으로 지연을 적분한 값을 봅니다. 작품은 그 대신 얇은 빛의 막(light sheet) 이 시편을 가르는 한 단면을 비추는 연출을 택했습니다. 실제로 산란광 광탄성(scattered-light photoelasticity)이라는 기법이 있는데, 얇은 레이저 막으로 3차원 모형의 내부 단면을 하나씩 들여다봅니다. 시편을 바꿀 때마다 막이 판 앞에서 가운데()까지 훑고 들어오고, 막이 멈춘 뒤에 편광 무늬가 켜집니다.

이 연출에는 두 가지 근사가 들어갑니다. 먼저 단면 위치와 상관없이 같은 2D 해를 쓰는데, 이는 응력이 두께 방향으로 균일하다는 평면 응력 가정을 그대로 받아들인 것입니다. 산란광의 실제 무늬는 투과광보다 훨씬 옅지만 작품은 투과광의 색을 빌려 씁니다. 그래서 이 부분은 감상을 위한 연출입니다.
한편 광탄성이라는 방법 전체를 떠받치는 정리도 하나 있습니다. 레비-미셸(Lévy–Michell) 정리는 체적력이 없는 단순 연결된 2차원 탄성 문제에서 응력 분포가 탄성 계수와 무관하다고 말합니다. 플라스틱 모형에서 본 무늬가 같은 모양의 강철 부품에도 그대로 적용되는 이유입니다. 작품이 이라는 정규화를 마음 놓고 쓸 수 있는 것도 이 덕분입니다.
렌더링은 네 단계로 나뉩니다. ① 응력 메시를 모형 좌표의 MSAA 타깃에 그리고, ② 단면 합성은 상태가 바뀔 때만 전용 타깃에 다시 그립니다. ③ 방 배경, 불투명한 받침과 핀, 가산 합성한 유리 몸체, 단면, 막의 연무 순서로 장면을 그린 뒤, ④ sRGB로 인코딩하고 디더링해서 화면에 냅니다. 디더링은 어두운 배경에서 생기는 색 띠(banding)를 없애려고 넣었습니다.
얼마나 맞는가
예쁜 그림은 틀려도 예쁩니다. 그래서 pnpm test:photoelastic의 테스트 11개가 모델을 교과서 값과 비교합니다.
| 검증 항목 | 해석값 | FEM | 차이 |
|---|---|---|---|
| 원판 중심 (테스트, 약 5,000 절점) | 1.675 | 1.59 | −5% |
| 같은 값, 약 8,000 절점에서 다시 측정 | 1.675 | 1.648 | −1.6% |
| 보 단면의 굽힘 모멘트 | 0.324 | 0.316 | −2.5% |
| 구멍 뚫린 띠의 응력 집중 계수 (Peterson) | ≈ 2.19 | 1.95 | −11% |
| 잔류 응력의 자기평형 | 0 | 10⁻⁶ 미만 | — |
원판의 오차는 점하중이 아니라 창으로 퍼뜨린 하중을 쓰는 탓도 있습니다. 응력 집중 계수가 11% 낮게 나오는 것은 절점 응력을 면적 가중 평균으로 복원하면서 구멍 가장자리의 최댓값이 깎이기 때문으로 보입니다. 최댓값에 민감한 공학 해석이라면 초수렴 패치 복원(SPR) 같은 기법을 써야 할 부분입니다.
이 밖에 선형성(하중을 두 배로 하면 응력도 두 배), 좌우 대칭, 분포 하중의 합력, 간섭색의 순서(250 nm 흰색, 420 nm 노랑, 520–590 nm 자주)와 암시야·명시야의 보색 관계도 검사합니다. 하지만 실제 재료의 정량 재현, 접촉 역학의 정확성, 파괴 예측은 이 작품이 주장하지 않는 것들입니다.
마치며
한 장면의 색 하나를 만들기 위해 지나온 길을 돌아보면 이렇습니다.
손끝의 힘 → 창의 절점력 → 촐레스키 대입 → 변위 → 응력 텐서 → (GPU) 텐서 보간 → → 지연 → 파장마다 다른 위상차 → CIE 적분으로 미리 구운 LUT →
fwidth로 고른 흐림 단계 → 픽셀
이 사슬의 어느 고리도 혼자서는 특별하지 않습니다. 유한요소법은 교과서적이고, 간섭색 계산은 1세기 전 광물학의 것이며, 미리 흐린 LUT는 밉맵의 사촌입니다. 다만 이 고리들이 모두 보이지 않는 것을 보이게 한다는 한 방향을 향할 때, 구조 공학자의 검사 도구가 그대로 한 점의 추상화가 됩니다.
오늘 저녁에 투명한 자와 편광 선글라스를 들고 노트북 화면 앞에 앉아 보세요. 그리고 작품에서 원판의 가장자리를 눌러, 같은 무늬가 계산으로 피어나는 것을 비교해 보세요.
참고 자료
- S. Timoshenko, J. N. Goodier, Theory of Elasticity — 직경 압축 원판의 해, 평면 응력.
- J. W. Dally, W. F. Riley, Experimental Stress Analysis — 응력-광학 법칙, 평면·원 편광기의 세기식.
- W. D. Pilkey, Peterson's Stress Concentration Factors — 유한 폭 판 원형 구멍의 응력 집중 계수.
- B. E. Sørensen, "A revised Michel-Lévy interference colour chart based on first-principles calculations", European Journal of Mineralogy (2013).
- C. Wyman, P.-P. Sloan, P. Shirley, "Simple Analytic Approximations to the CIE XYZ Color Matching Functions", JCGT (2013).
- E. Cuthill, J. McKee, "Reducing the bandwidth of sparse symmetric matrices" (1969); A. George, "Computer implementation of the finite element method" (1971) — RCM.
- B. Jobard, W. Lefer, "Creating Evenly-Spaced Streamlines of Arbitrary Density" (1997) — 응력 궤적 배치.