겟타G팀의 겟타드래곤/겟타라이거/겟타포세이돈은 세.최.날 버전이 아닌, TVA 버전의 근본 오리지널 컬러링을 요청하셨고,
블랙겟타의 경우 세.최.날에 등장하는 컬러링을 깔끔한 무광으로 요청하셨습니다.
각 작업 완료된 사진 위주로 소개드리며 필요한 경우 짧은 코멘트를 첨가하겠습니다.
먼저, '진 체인지 겟타로보!! - 세계 최후의 날'에 등장하는 블랙겟타 입니다.
스파이크 인출 상태가 순정 킷에서는 가래떡처럼 두껍고 뭉툭하기에 모두 잘라내고 자작한 신규 스파이크로 개조했습니다.
다음은 겟타 드래곤 - TVA 원작 컬러 버전입니다.
세.최.날에서 등장하는 겟타 드래곤은 온통 레드 계열 설정색이고, 겟타 라이거는 또 온통 블루 계열 설정색입니다.
겟타는 빨+파+노 조합이 근본인데, 세.최.날을 볼 때는 왜 어색함을 느끼지 못했는지 모르겠습니다.
막상 TVA 버전으로 도색하니 '아, 이게 겟타지!!' 하는 생각이 들었습니다.
다음은 겟타 라이거 - TVA 원작 컬러 버전입니다.
겟타 라이거 세.최.날 버전의 경우 단순히 설정색만 다른 것이 아니라, 일부 디테일이 원작 TVA와 다릅니다.
가슴의 양측 어깨 부근은 원래 붉은색으로 분할되어야 하고, 양 날개의 엔진 첨단부 부근에는 검은색 두꺼운 라인 디테일이 있어야 합니다. 철저하게 원작 지향이므로 패널라인을 추가한 후 분할 도색했습니다.
다음은 겟타 포세이돈 - TVA 원작 컬러 버전입니다.
겟타 포세이돈이 세.최.날 등장 겟타G팀 중 그나마 TVA와 유사한 컬러패턴을 갖고있으나, 자세히 보면 몇몇 부분의 설정색이 완전히 다릅니다. 몸통의 빨간색 파츠 안쪽 역삼각형, 헤드 양 볼의 삼각형 디테일의 색상이 다르며, 로켓백팩의 경우 단 한파츠도 TVA와 설정색이 같은 부분이 없습니다. TVA 원본 설정색에 맞추어 싸그리 도색해줍니다.
이렇게 해서 블랙겟타와 겟타G팀의 도색이 완료되었습니다.
나가레 료마, 진 하야토, 쿠루마 벤케이 셋이 모였을 때 파충류건 인베이더건 무서울 것이 없습니다겟타 사이클론~!! / 더블 토마호크!! / 드릴 암!!등작 작품도 다르고, 극 중 사용하는 장면도 나오진 않지만... 그래도 더블 겟타 머신건!!
크기가 작다는 것을 익히 들어 알고있었기에 그동안 일부러 외면했었는데, 의뢰를 통해 접해본 SMP 겟타 시리즈는 놀라울 정도로 조형이 뛰어났습니다. 개인적으로는 그 어떤 대형 합금 완성품과 비교해도 SMP쪽이 더 뛰어나다고 느껴지네요.
물론 이건 제 개인 기호가 많이 섞여있습니다.
저는 슈퍼로봇은 밀도 높은 디테일보다는 덩어리감이 중요하다고 보거든요.
이제 이녀석들은 곱게 곱게 포장해서 의뢰인분께 전달드리고, 다음 의뢰작을 또 시작해야겠습니다.
특정 목적의 함수 수행에 걸리는 시간이 오래걸리는 경우 백그라운드에서 돌아가게 냅두고 지정시간이 지나면 타임아웃 처리하여 함수 콜 다음행으로 진행시키는 코드입니다.
예문으로 OpenCV의 BlobDetection 수행 상황을 가정해봅니다.
#include <opencv2/opencv.hpp>
#include <opencv2/features2d.hpp>
#include <thread>
#include <future>
#include <iostream>
using namespace cv;
using namespace std;
// Blob Detection 함수
vector<KeyPoint> detectBlobs(const Mat& image, Ptr<SimpleBlobDetector> detector)
{
vector<KeyPoint> keypoints;
detector->detect(image, keypoints);
return keypoints;
}
int main()
{
// 이미지 로드
Mat img = imread("example.jpg", IMREAD_GRAYSCALE);
if (img.empty())
{
cout << "이미지를 불러올 수 없습니다." << endl;
return -1;
}
// SimpleBlobDetector 설정
Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create();
// 비동기 호출
auto future = async(launch::async, detectBlobs, img, detector);
// 타임아웃 설정 (예: 2초)
chrono::seconds timeout(2);
// 결과 대기
if (future.wait_for(timeout) == future_status::ready)
{
// 완료된 경우 결과 가져오기
vector<KeyPoint> keypoints = future.get();
cout << "Blob Detected: " << keypoints.size() << " 개" << endl;
// 키포인트 그리기 및 출력
Mat output;
drawKeypoints(img, keypoints, output, Scalar(0, 0, 255),
DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("Blob Detection", output);
waitKey(0);
}
else
{
// 타임아웃 발생
cout << "Blob Detection Time Out!" << endl;
}
return 0;
}
BlobDetection에서 2초 이상의 시간이 걸리는 경우, 이미 호출된 detectBlobs()함수는 끝날때까지 수행하지만, main() 함수에서는 2초 Timeout으로 "Blob Detection TIme Out !" 이라는 메세지를 출력할 것입니다.
초 단위가 아닌, 밀리초 단위로 Timeout을 걸고 싶을 때는 chrono::seconds 대신 chrono::milliseconds를 사용하면 됩니다.
주의하실 점은, 이미 펑션콜 된 detectBlobs는 제 기능을 계속 수행중이며, detectBlobs의 return이 오기 전까지는 main() 함수 역시 return을 하지 못하고 대기하게 됩니다. 즉, 비동기 호출 함수 내부에서 무한루프가 걸리는 경우를 조심해야 한다는말씀입니다.
이점을 주의하신다면 다양한 경우의 필요에 의한 펑션콜에 Timeout 속성을 부여할 수 있습니다.