프레넬(Fresnel)

아래와 같은 glsl 코드가 있을때 …

vec3 viewDirection = normalize(vPosition - cameraPosition);
vec3 normal = normalize(vNormal);
float fresnel = ...
vec3 color = vec3(fresnel);

gl_FragColor = vec4(color, 1.0);

세번째 줄의 코드를 다음처럼 하면 …

float fresnel = pow(dot(viewDirection, normal) + 1., 10.);

또는 다음처럼 하면 …

float fresnel = pow(abs(dot(viewDirection, normal) + .3), 2.);

물리적 광원에 대한 개별 노드 지정 (TSL 방식)

three.js 쉐이더 언어인 TSL에서 물리적 광원에 대한 개별 노드를 지정하는 방식을 정리해 봅니다. TSL을 통해 표현하고자 하는 재질은 다음과 같습니다.

코드는 다음과 같습니다.

const geometry = new THREE.IcosahedronGeometry(1, 64);
const material = new THREE.MeshStandardNodeMaterial({
  color: "black",
  // wireframe: true,
});
const mesh = new THREE.Mesh(geometry, material)

const path = './Metal053B_2K-JPG';

const texColor = new THREE.TextureLoader().load(`${path}/Metal053B_2K-JPG_Color.jpg`);
material.colorNode = texture(texColor);

const texNormal = new THREE.TextureLoader().load(`${path}/Metal053B_2K-JPG_NormalGL.jpg`);
material.normalNode = normalMap(texture(texNormal), float(1.));

const texMetalness = new THREE.TextureLoader().load(`${path}/Metal053B_2K-JPG_Metalness.jpg`);
material.metalnessNode = mul(texture(texMetalness), 1.);

const texRoughness = new THREE.TextureLoader().load(`${path}/Metal053B_2K-JPG_Roughness.jpg`);
material.roughnessNode = mul(texture(texRoughness), float(0.7));

광원 노드에 집중하기 위해서 텍스쳐 데이터를 사용했습니다. 텍스쳐 본연의 표현을 위해 재질의 기본 색상을 블랙으로 지정했구요. 사용한 노드는 colorNode, normalNode, metalnessNode, roughnessNode입니다.

광원에 대한 노드는 아니지만 Displacement에 대한 노드를 알아보기 위해 표현하고자 하는 재질은 다음과 같습니다.

코드는 다음과 같습니다.

const geometry = new THREE.IcosahedronGeometry(1, 64);
const material = new THREE.MeshStandardNodeMaterial({
  color: "black",
  // wireframe: true,
});
const mesh = new THREE.Mesh(geometry, material)

const path = './Rock058_2K-JPG';

...

const texAO = new THREE.TextureLoader().load(`${path}/Rock058_2K-JPG_AmbientOcclusion.jpg`);
geometry.setAttribute('uv2', new THREE.BufferAttribute(geometry.attributes.uv.array, 2));
material.aoNode = mul(texture(texAO), float(1.));

const texDisplacement = new THREE.TextureLoader().load(`${path}/Rock058_2K-JPG_Displacement.jpg`);
const displacementNode = texture(texDisplacement);
const displaceStrength = 0.3;
const displacementValue = displacementNode.r.sub(0.5).mul(displaceStrength);
const newPosition = positionWorld.add(normalLocal.mul(displacementValue));
material.positionNode = newPosition;

Displacement 표현을 위해서는 Vertex Shader에 해당하는 positionNode를 이용해야 합니다. 추가로 AO 노드에 대한 사용 코드도 보입니다.

알고 있으면 너무 좋은 프론트엔드 웹 기술

웹은 인류가 만든 최고의 문화 또는 기술 중 하나입니다. 웹을 통해 이룰 수 있는 그 가능성은 무한하며 그 가능성을 현실로 이루기 위해서는 기술이 필요한데, 이러한 기술에 대해 설명합니다.

#Compression Stream API

#Screen Capture API

#Encoding API

#Web Speech API

#Broadcast Channel API

#Drag and Drop Multi Files / Folder

#File System Access API

#Cross Orgin Communication API

#Web Crypto API

#Web Storage API

#WebAssembly

#Web Component API

#Screen Wake Lock API

#Beacon API

#WebRTC

#CSS Custom Highlight API

#Channel Messaging API

#View Transitions API

#WebWorker (Dedicated Worker)

#IndexedDB API

#WebSocket

#Web Audio API

#Notifications API

#Prioritized Task Scheduling API/h2>

위의 영상에 더해 더 많은 영상을 제공하고 지속적으로 내용이 추가되므로 해당 채널에 방문하여 참고하시기 바랍니다.

지오서비스웹(GEOSERVICE-WEB)

소 개

GEOSERVICE-WEB은 지오서비스(지리, 지도, 위치 등과 관련된 서비스)를 웹에서 제공합니다. 지오서비스웹의 목표는 웹에서 누구나 쉽게 지도 기반의 비지니스를 효과적으로 해결하기 위한 서비스를 제공하는데 있습니다. 웹브라우저에서 아래의 URL을 입력하여 이용할 수 있습니다.

https://www.geoservice.co.kr

지오서비스웹은 공간(Spatial)과 위치(Location)에 대한 다양한 서비스를 웹에서 이용할 수 있습니다. 예를 들어 지오코딩 등과 같은 기능을 이용해 공간 데이터를 생성하고 시각화할 수 있습니다. 또한 자신이 가진 데이터를 아카이브에 업로드하여 언제 어디서든 사용할 수 있으며 다른 사용자와 기본적으로 공유할 수 있습니다. 원한다면 내가 올린 데이터는 공유하지 않도록 설정할 수도 있습니다.

업데이트

  • [2025/09/02] 지오코딩 결과에 19자리의 PNU 코드가 제공됩니다.
  • [2025/09/02] 헤깔려 틀리게 입력한 도로명주소도 지오코딩이 가능해졌습니다.
  • [2025/08/20] 최신 주소 DB(2025년 7월 구축)로 업데이트 되었습니다.
  • [2025/07/15] 지오코딩 결과를 SHP 뿐만 아니라 CSV 형식으로 바로 저장되도록 하였습니다.
  • [2025/03/14] 2025년 1분기 최신 주소 DB로 업데이트 되었습니다.
  • [2025/03/04] 통계 데이터에 대한 파이차트 맵 분석(시각화) 기능이 추가되었습니다.
  • [2024/10/22] SHP 데이터를 SVG 데이터로 생성하는 기능이 추가되었습니다.
  • [2024/10/16] 주소 DB가 2024년 10월 DB로 업데이트되었습니다.
  • [2024/10/14] 티센 폴리곤 생성 기능 추가, 공간 및 속성으로 필터링 하여 공간 데이터를 추출하는 기능 추가
  • [2024/10/01] 공간 데이터에 대한 NULL Shape 지원 및 압축 파일 안의 한글 파일명 오류 등이 수정되었습니다.
  • [2024/08/08] 공간 데이터 편집 기능이 추가되었습니다.
  • [2024/07/20] 지오코딩 등을 위한 입력 데이터 형식으로 CSV 파일 뿐만 아니라 엑셀 파일을 그대로 사용할 수 있도록 하였습니다.
  • [2024/07/08] 주소 DB가 2024년 6월 DB로 업데이트되었습니다.
  • [2024/04/03] 지오코딩과 역지오코딩 수행 속도가 개선되었습니다. (1건 당 평균 0.01초 소요)
  • [2024/02/25] SVG 형식의 행정구역도를 제공합니다. (아카이브에서 사용자명을 gizmo로 입력해 조회 가능)
  • [2024/02/16] 주소 DB가 2024년 1월 DB로 업데이트 되었으며 리버스지오코딩의 정확도가 개선되었습니다.
  • [2024/01/10] 새로운 지오코딩 엔진(gc_v3)으로 업데이트 되었습니다.
  • [2023/12/15] 주소 DB가 2023년 11월 DB로 업데이트 되었습니다.
  • [2023/11/30] 지오코딩 정확도 개선 및 UI 편의성 개선
  • [2023/10/31] HTTPS 적용 및 접속 URL 변경(https://www.geoservice.co.kr)
  • [2023/09/12] 통계분석 기능으로 색상단계구분도 분석이 추가되었습니다.
  • [2023/08/14] 속성 데이터 조인 기능과 지점 간 거리 분석 기능이 추가되었습니다.
  • [2023/07/30] 주요 기능 2가지 추가(헥사곤 데이터 생성, 밀도분석) 및 최신 주소DB(2023년 7월)로 업데이트 되었습니다.
  • [2023/02/21] 지번주소(2023년 2월), 도로명주소(2023년 1월) DB가 업데이트 되었습니다.
  • [2022/10/29] 기능 추가 및 사용자 편의성이 개선되었습니다.
  • [2022/09/25] 기능 추가 및 사용자 편의성이 개선되었습니다.
  • [2022/09/06] 사용자가 제공한 피드백을 통해 확인된 버그 제거 및 기능 개선
  • [2022/08/01] GEOSERVICE-WEB v1.0 서비스 시작

사용자 메뉴얼

지오서비스웹(GEOSERVICE-WEB) 기능 별 메뉴얼

FAQ

지오코딩(역지오코딩 포함) 변환 건수 무제한 사용(설치형 임대 라이선스) 소개

엑스알 지오코더 (XrGeocoder) v4.5 설치형 임대 라이선스 및 사용 설명