업데이트 버전: 1.0.0.7.183.b
업데이트 내용:
1. U3dImageLayer(배경 영상, WMS등) 의 밝기, 대비, 채도, 색조 각도 설정 기능이 추가되었습니다.
- U3dImageLayer에 Image의 밝기, 대비, 채도, 색조 각도 상세 설정 기능이 추가되었습니다.
- U3dImageLayer을 상속받는 U3dImageXYZLayer등의 하위 이미지 레이어들이 해당 API를 지원합니다.
getBrightness(): number; //레이어가 출력하는 객체의 밝기 값을 반환합니다.
getContrast(): number; //레이어가 출력하는 객체의 대비 값을 반환합니다.
getSaturation(): number; //레이어가 출력하는 객체의 채도 값을 반환합니다.
getHueRotation(): number; //레이어가 출력하는 객체의 색조각도 값을 반환합니다.
getLightColorTone(): ColorRepresentation; //레이어가 출력하는 객체의 밝은 영역 색상톤 값을 반환합니다.
getDarkColorTone(): ColorRepresentation; //레이어가 출력하는 객체의 어두운 영역 색상톤 값을 반환합니다.
getLightColorToneEnabled(): boolean; //밝은 색상톤 적용 여부를 반환합니다.
getDarkColorToneEnabled(): boolean; //어두운 색상톤 적용 여부를 반환합니다.
getLightColorToneExposure(): number; //레이어가 출력하는 객체의 밝은 색 적용 민감도를 반환합니다.
getDarkColorToneExposure(): number; //레이어가 출력하는 객체의 어두운 색 적용 민감도를 반환합니다.
setBrightness(val: number): U3dImageLayer; //레이어가 출력하는 객체의 밝기 값을 설정합니다.
setContrast(val: number): U3dImageLayer; //레이어가 출력하는 객체의 대비 값을 설정합니다.
setSaturation(val: number): U3dImageLayer; //레이어가 출력하는 객체의 채도 값을 설정합니다.
setHueRotation(val: number): U3dImageLayer; //레이어가 출력하는 객체의 색조각도 값을 설정합니다.
setLightColorTone(val: ColorRepresentation | null): U3dImageLayer; //레이어가 출력하는 객체의 밝은 영역 색상톤 값을 설정합니다.
setDarkColorTone(val: ColorRepresentation | null): U3dImageLayer; //레이어가 출력하는 객체의 어두운 영역 색상톤 값을 설정합니다.
setLightColorToneEnabled(val: boolean | null): U3dImageLayer; //밝은 색상톤 적용 여부를 설정합니다.
setDarkColorToneEnabled(val: boolean | null): U3dImageLayer; //어두운 색상톤 적용 여부를 설정합니다.
setLightColorToneExposure(val: number | null): U3dImageLayer; //밝은 색 적용 민감도를 설정합니다.
setDarkColorToneExposure(val: number | null): U3dImageLayer; // 어두운 색 적용 민감도를 설정합니다.
이미지 레이어 커스텀 설정 예제 (https://3d.geon.kr/doc/tutorial-official/customImageLayer.html) 참고

2. 컴포넌트(드론등) 주행 기능 사용시, 주행 경로 형상에 버퍼감이 개선되었습니다.
3. 컴포넌트(드론등) 주행 기능 사용시, 진행 방향을 출력하는 가이드 헬퍼 객체가 추가되었습니다.
- UDirectionArrowGroup 객체가 추가되었습니다.
방향 가이드 헬퍼 객체는 아래와 같은 세부설정이 가능합니다.
- 출력 여부 설정
- 화살표 색상 및 투명도 설정
- 화살표 꼬리 길이 및 두께 설정
- 화살표 꼬리의 실선 및 점선 표현 여부 설정
- 화살표 꼬리의 점선 개당 길이 설정
- 화살표 꼬리의 점선 간격 길이 설정
- 화살표 머리의 길이 및 반지름 설정
- 화살표 머리의 둥근 표현 세그먼트 설정
- 화살표가 컴포넌트에 연결 출력시 출력 위치 오프셋 설정
- 화살표가 컴포넌트에 연결 출력시 회전값 오프셋 설정

주행 애니메이션 예제 (https://3d.geon.kr/doc/tutorial-official/animationComponents.html ) 참고
4. 지면 위치 투영 helper 객체가 추가되었습니다.
- 지면 위치 인식에 도움을 줄수 있는 지면 위치 투영 helper 객체 ULandNormalDirectionHelper가 추가되었습니다.

주행 애니메이션 예제 (https://3d.geon.kr/doc/tutorial-official/animationComponents.html ) 참고
5. 그룹화된 객체들의 경계형상을 출력할 수 있는 helper가 추가되었습니다.
- 그룹화된 객체들의 그룹 경계 형상을 출력하는 UGroupBoundaryHelper가 추가되었습니다.

그룹 경계 형상 출력 제어 예제 (https://3d.geon.kr/doc/tutorial-official/groupBoundaryHelper.html ) 참고
6. 사용자 카메라 촬영 범위(프러스텀) 영역을 출력하는 helper 가 추가되었습니다.
- 사용자 카메라 촬영 범위를 출력하고, 덮여저있는 레이어들을 투과하여 대상레이어를 투영하는 UFrustumHelper 가 추가되었습니다.

주행 애니메이션 예제 (https://3d.geon.kr/doc/tutorial-official/animationComponents.html ) 참고
7. MapControl의 마우스 입력 지점 앵커를 표현해주는 기능을 키고 끌 수 있는 API가 추가되었습니다.
- U3dApp의 getMapControl API 통해 연결된 MapControl에 enableCheckHelper() 및 disableCheckHelper() API가 추가되었습니다.
const mapControl = app.getMapControl();
mapControl.enableCheckHelper();
*enableCheckHelper => 마우스 입력 지점 앵커를 표현합니다.
*disableCheckHelper => 마우스 입력 지점 앵커를 표현하지 않습니다.
8. TMS 를 출력할 수있는 U3dOpenLayer의 출력 성능 개선 및 보정 기능이 추가 되었습니다.
- U3dApp 객체의 createTMSImageLayer API를 통해 U3dOpenLayer를 사용하여 TMS 를 출력할 수 있습니다.
- TMS 출력 성능이 향상 되었습니다.
- createTMSImageLayer 옵션에 tileBackGroundColor 옵션이 추가되었습니다.
tileBackgroundColor 미입력시, 또는 null 입력

tileBackgroundColor '#083959' 입력

*tileBackgroundColor 를 런타임중 변경시, U3dApp의 restartQuadTree API 를 호출하는 것을 권장합니다.
이미지 레이어 커스텀 설정 예제 (https://3d.geon.kr/doc/tutorial-official/customImageLayer.html) 참고
9. WMS 출력 성능이 향상되었습니다.
- WMS를 출력할 수 있는 U3dImageWMSLayer의 출력 성능이 향상되었습니다.
10. 타일 업데이트 공식이 보완되었습니다.
- 지형 및 모델 업데이트가 더욱 상세히 되도록 개선되었습니다.
11. U3dLine 의 지면또는 모델 객체를 덮는 형상으로 업데이트 하는 drape API가 추가되었습니다.
- U3dLine의 형상이 지면 과 모델 객체를 인식하여 그 위를 덮는 느낌으로 형상을 업데이트하는 drapeOnSurface API가 추가되었습니다.
- 생성 형상으로 원복하는 clearSurfaceDrape API가 추가되었습니다.
/**
* 선을 모델·지형 표면에 드레이프할 때 사용하는 옵션입니다.
*
* @typedef {object} U3dLineDrapeOnSurfaceOptions
* @property {import('@U3dApp').U3dApp} app 드레이프 대상 모델·지형 레이어를 조회할 앱
* @property {number} [offset=0] 교차 표면보다 높이거나 낮출 월드 Z 오프셋
* @property {number} [divisions] 곡선을 등간격으로 표본화할 때 사용할 월드 좌표 단위의 최대 간격. 생략하면 선의 divisions를 사용합니다
* @property {AbortSignal} [signal] 실행을 취소할 신호
*
* @memberof U3dLine
* @inner
*/
/**
* 표면 드레이프 실행 결과입니다.
*
* @typedef {object} U3dLineDrapeOnSurfaceResult
* @property {number} sampleCount 생성한 곡선 표본 수
* @property {number} hitCount 모델·지형 표면과 교차하여 높이를 갱신한 표본 수
* @property {number} missCount 표면과 교차하지 않아 원래 곡선 높이를 유지한 표본 수
*
* @memberof U3dLine
* @inner
*/
/**
* 현재 선을 모델·지형 표면에 위에서 아래로 투영합니다. <br>
* 원본 제어점은 유지하고, `divisions` 간격으로 만든 파생 표본의 Z만 교차 높이와 `offset`으로 갱신합니다. <br>
* 입력과 대상 Scene 검증을 통과한 새 호출은 진행 중인 이전 호출보다 우선하며, 모든 raycast가 끝난 뒤 기존 geometry 객체의 내용만 한 번에 교체합니다.
* 새 호출로 대체되거나 `clearSurfaceDrape()`·`dispose()`로 중단된 이전 호출은 정상 제어 흐름으로 보고 오류 메시지 없이 `undefined`를 반환합니다. <br>
* 긴 상위 반복과 후보 배열 raycast는 시간 예산 단위로 나누지만, 단일 Mesh 내부 raycast와 Scene 행렬 갱신 한 번은 동기 실행됩니다. <br>
* 대상 Scene이나 LOD가 실행 중 변경되면 변경 직후 이 메서드를 다시 호출하여 이전 요청을 대체해야 합니다. <br>
* CPU raycast가 화면의 batch/instance skinning 또는 morph 변형을 재현하지 못하는 Mesh는 현재 대상에서 제외됩니다.
*
* @param {U3dLineDrapeOnSurfaceOptions} options 드레이프 옵션
* @returns {Promise<U3dLineDrapeOnSurfaceResult | undefined>} 성공하면 표본·교차·미교차 개수, 직접 검증한 입력 오류·취소 또는 포착한 실행 오류이면 undefined
*
* @example
* const result = await line.drapeOnSurface({
* app,
* offset: 3,
* divisions: 5
* });
*/
async drapeOnSurface(options) : Promise<U3dLineDrapeOnSurfaceResult | undefined>


*지면 또는 모델 객체가 LOD 제어등으로 형상이 변했을때, drapeOnSurface를 다시 실행하면 형상이 갱신됩니다.
12. 표면 체적 분석(SurfaceVolume) 의 기능이 개선 되었습니다.
- 분석 영역의 외부까지 샘플링하여 분석되던 문제가 개선되었습니다.
- 불규칙적으로 분석 격자가 표현되던 문제가 개선되었습니다.
**상세 분석 변경 내용
* Polygon 분석 영역 기준 격자 생성 방식 개선
기존에는 분석 영역의 경계와 격자가 만나는 위치에서 일부 격자 꼭짓점이 Polygon 외부에 포함될 수 있어, 인접한 건물이나 처마 등의 형상이 분석 결과에 영향을 주는 경우가 있었습니다.
이번 업데이트에서는 정규 사각 Grid를 기준으로 생성한 후, Polygon 경계에 걸리는 Cell에 대해서만 Cell과 Polygon의 실제 교차 영역을 계산하도록 변경하였습니다.
정규 Grid 생성
↓
Polygon과 Cell 교차 검사
↓
Polygon 외부 Cell 제외
↓
경계 Cell만 Polygon 내부 영역으로 Clipping
↓
분석 영역 내부에서만 Surface 샘플링
이를 통해 사용자가 지정한 Polygon 영역 밖의 형상이 체적 계산에 포함되는 현상을 줄였습니다.
* 기준면 기준 양방향 Surface 샘플링 적용
복잡한 건물 모델에서는 위에서 아래 방향으로만 Raycast를 수행할 경우 지붕, 처마 또는 내부 구조물이 먼저 검출되어 실제 분석 대상 Surface와 다른 위치가 선택될 수 있었습니다.
이번 업데이트에서는 각 Grid 샘플 위치의 기준면을 시작점으로 위(+Z)와 아래(-Z) 방향을 모두 검사합니다.
위쪽 Surface
●
↑
│
──────────── 기준면 ────────────
│
↓
●
아래쪽 Surface
두 방향에서 검출된 Surface 중 기준면과의 거리가 더 가까운 Surface를 최종 샘플로 사용합니다.
이를 통해 절토·성토 분석 시 기준면을 중심으로 가장 인접한 대상 형상을 보다 명확하게 선택할 수 있습니다.
* 처마·벽면 등 비정상 Surface 검증 추가
양방향 Raycast를 통해 선택된 Surface라도 벽면이나 매우 급격하게 꺾인 형상이 선택될 가능성이 있습니다.
이를 방지하기 위해 다음 두 단계의 검증을 수행합니다.
surfaceSampling: {
minFaceUpDot: 0.05,
minSurfaceUpDot: 0.15,
rejectInvalidSurface: true
}
minFaceUpDot은 개별 Ray Hit의 Face 방향을 검사하고, minSurfaceUpDot은 최종적으로 선택된 세 꼭짓점이 생성하는 Triangle의 기울기를 검사합니다. 지나치게 수직에 가까운 Triangle은 체적 계산에 억지로 포함하지 않고 invalid Cell로 처리합니다.
*해당 내용은 UAnalySurfaceVolume의 setAnalysisOption 설정시에 추가적으로 입력하여 사용하시면 됩니다.
* 영역 외곽선 Boundary
분석을 수행할 Polygon의 외곽선과 내부 영역을 표시합니다. 단순한 외곽선뿐 아니라 Polygon 내부의 반투명 Fill과 다른 객체에 가려진 부분의 표현도 개별적으로 조절할 수 있습니다. 현재 Boundary 스타일은 선 색상, 투명도, 두께, Fill 색상 및 가려진 영역 스타일을 각각 별도로 관리합니다.
* Heatmap
Heatmap은 현재 표면과 기준면의 높이 차이를 시각적으로 확인하기 위한 가시화입니다.
기본적으로 height-difference 값을 사용하며, 상단 Surface와 기준면 사이의 측면을 함께 표시할 수 있습니다. offset을 통해 실제 모델 표면과 Heatmap이 정확히 겹치면서 발생할 수 있는 Z-Fighting을 줄일 수 있습니다. 기본 Heatmap opacity는 0.8, offset은 0.2입니다.
기본 색상 체계는 기존 SurfaceVolume Heatmap의 색상을 유지합니다.
높이 차가 큰 절토
빨강
↑
주황
↑
노랑
──────── 기준면 근처 ────────
중립색
청록
↓
파랑
높이 차가 큰 성토
사용자 정의 색상 표현이 필요한 경우에만 colorRamp를 지정하며, 별도로 지정하지 않으면 기본값 색상을 그대로 사용합니다.
예를 들어:

와 같이 사용할 수 있습니다.
특정 서비스에서 자체 색상 범례를 사용하는 경우에는 다음처럼 지정할 수 있습니다.

colorRamp를 지정하지 않은 경우에는 기존 SurfaceVolume 기본 색상 체계를 사용하도록 유지되어 있습니다.
Heatmap 설정은 minValue, maxValue, colorRamp, 측면 표시 여부까지 개별 보관됩니다.
* 절토 성토 수직선
수직선은 기준면과 실제 선택된 Surface 사이의 높이 차이를 직관적으로 확인하기 위한 가시화입니다.
절토와 성토를 서로 다른 색상으로 표시하며, 분석할 Surface를 찾지 못하거나 유효하지 않은 Cell에 대해서는 별도의 Invalid 색상을 사용할 수 있습니다.
기본 색상은 다음과 같습니다.
절토 Cut #ff6b35
성토 Fill #2980ff
Invalid #ff00ff
가려진 부분 #00ff88
예를 들어:
형태로 사용할 수 있습니다.
또한 radius를 설정하지 않은 경우에는 분석 resolution에 맞춰 자동 크기를 계산하고, pointSize 역시 별도 지정하지 않으면 수직선 크기를 기준으로 자동 계산하도록 되어 있습니다.
수직선 스타일은 현재 색상뿐 아니라 반지름, 투명도, 가려진 부분, 점선 간격, Endpoint 표시까지 별도로 설정할 수 있습니다.
* 기준면 Reference
기준면 가시화는 현재 분석에 실제로 사용된 referenceSamples의 위치를 확인하기 위한 기능입니다.
현재 구현 기준으로는 기준면 전체를 하나의 Surface Mesh로 생성하는 방식이 아니라 각 Grid Cell의 기준면 샘플 위치를 Point 형태로 표시하는 방식입니다.
따라서 color, opacity, pointSize를 중심으로 스타일을 설정할 수 있습니다.

현재 Reference 기본 색상은 #ff0000이며, Depth Test와 Depth Write는 기본적으로 사용하지 않습니다.
* 분석 결과 가시화 옵션 개선
SurfaceVolume 분석 결과를 사용 목적에 맞게 표현할 수 있도록 영역 외곽선, Grid, Heatmap, 절토·성토 수직선, 기준면에 대한 개별 스타일 옵션을 확장하였습니다.
각 가시화 요소는 표시 여부뿐 아니라 색상, 투명도, 선 두께, 가림 영역 표현 방식 등을 별도로 설정할 수 있습니다. 스타일 옵션은 분석 전체 기본값으로 지정하거나, 개별 분석 영역에 별도로 지정하여 사용할 수 있습니다.
| 구분 |
옵션 |
기본값 |
설명 |
| Boundary |
enabled |
true |
영역 외곽선 가시화 기능 사용 여부 |
|
|
visible |
true |
생성된 Boundary 객체의 현재 표시 여부 |
|
|
color |
#005BBB |
화면에서 직접 보이는 외곽선 색상 |
|
|
opacity |
0.95 |
외곽선 투명도 |
|
|
lineWidth |
3 |
외곽선 두께 |
|
|
fillColor |
#4FC3F7 |
Polygon 내부 Fill 색상 |
|
|
fillOpacity |
0.08 |
Polygon 내부 Fill 투명도 |
|
|
hiddenColor |
#FFFFFF |
다른 객체에 가려진 외곽선 색상 |
|
|
hiddenOpacity |
0.5 |
가려진 외곽선 투명도 |
|
|
hiddenFillColor |
#FF0000 |
가려진 영역 Fill 색상 |
|
|
hiddenFillOpacity |
0.05 |
가려진 영역 Fill 투명도 |
|
|
dashSize |
자동 (1.5 기준) |
가려진 외곽선을 점선으로 표현할 때 선 길이. 미설정 시 내부 자동값 사용 |
|
|
gapSize |
자동 (0.5 기준) |
점선 사이 간격. 미설정 시 내부 자동값 사용 |
|
|
depthTest |
true |
주변 3D 객체와의 깊이 검사 사용 여부 |
| Grid |
enabled |
true |
분석 Grid 표시 여부 |
|
|
visible |
true |
생성된 Grid 객체의 표시 상태 |
|
|
color |
#00F0B8 |
직접 보이는 Grid 선 색상 |
|
|
opacity |
0.5 |
Grid 선 투명도 |
|
|
lineWidth |
1.5 |
Grid 선 두께 |
|
|
hiddenColor |
#FFFFFF |
다른 객체에 가려진 Grid 색상 |
|
|
hiddenOpacity |
0.15 |
가려진 Grid의 투명도 |
|
|
dashSize |
자동 |
가려진 Grid 점선 길이. max(0.5, resolution × 0.15) |
|
|
gapSize |
자동 |
가려진 Grid 점선 간격. max(0.35, resolution × 0.05) |
| Heatmap |
enabled |
false |
Heatmap 생성 여부 |
|
|
visible |
true |
Heatmap 현재 표시 상태 |
|
|
valueType |
height-difference |
Heatmap에 사용할 분석 값 종류 |
|
|
opacity |
0.8 |
Heatmap 상단 Surface 투명도 |
|
|
offset |
0.2 |
원본 Surface와 Z-Fighting을 피하기 위한 높이 Offset |
|
|
sideFaces |
true |
현재 Surface와 기준면 사이의 측면 표시 여부 |
|
|
sideOpacity |
0.15 |
측면 Surface 투명도 |
|
|
minValue |
자동 |
Heatmap 색상 계산에 사용할 최소값. 미지정 시 결과값에서 자동 계산 |
|
|
maxValue |
자동 |
Heatmap 색상 계산에 사용할 최대값. 미지정 시 결과값에서 자동 계산 |
|
|
colorRamp |
기본 팔레트 |
사용자 정의 Heatmap 색상 범위. 미지정 시 기본값 사용 |
|
|
depthTest |
true |
3D 객체와 깊이 검사 여부 |
|
|
showLegend |
false |
Heatmap 범례 표시용 옵션 |
| Vertical Lines |
enabled |
true |
절토·성토 수직선 생성 여부 |
|
|
visible |
true |
수직선 객체 표시 여부 |
|
|
cutColor |
#FF6B35 |
절토 구간 색상 |
|
|
fillColor |
#2980FF |
성토 구간 색상 |
|
|
invalidColor |
#FF00FF |
유효하지 않은 샘플 표시 색상 |
|
|
radius |
자동 |
수직선 Cylinder 반지름. max(0.08, resolution × 0.004) |
|
|
opacity |
0.9 |
수직선 투명도 |
|
|
hiddenColor |
#00FF88 |
다른 객체에 가려진 수직선 색상 |
|
|
hiddenOpacity |
0.9 |
가려진 수직선 투명도 |
|
|
dashSize |
자동 |
가려진 부분 점선 길이. max(0.5, resolution × 0.15) |
|
|
gapSize |
자동 |
가려진 부분 점선 간격. max(0.35, resolution × 0.05) |
|
|
pointSize |
자동 |
수직선 시작·끝 포인트 크기. resolution과 radius 기준 자동 계산 |
|
|
showEndpoints |
true |
시작점과 끝점 포인트 표시 여부 |
|
|
depthTest |
false |
주변 객체와 깊이 검사 여부 |
| Reference |
enabled |
true |
기준면 샘플 가시화 사용 여부 |
|
|
visible |
true |
기준면 가시화 객체의 표시 여부 |
|
|
color |
#FF0000 |
기준면 샘플 포인트 색상 |
|
|
opacity |
1.0 |
기준면 포인트 투명도 |
|
|
pointSize |
자동 |
기준면 포인트 크기. max(resolution × 0.01, 1) |
|
|
depthTest |
false |
주변 객체와의 깊이 검사 여부 |
|
|
depthWrite |
false |
기준면 포인트의 Depth Buffer 기록 여 |
* 스타일 설정 예시

|