블렌더에서 Color는 R/G/B 요소로 구성된다. 그런데 이를 하나의 실수값으로 변환하는 경우가 많은데, 어떻게 3개의 값을 1개의 실수값으로 변환하는가가 늘 궁금했다. 아래와 같다고 한다.
0.2126(R) + 0.7152(G) + 0.0722(B)
공간정보시스템 / 3차원 시각화 / 딥러닝 기반 기술 연구소 @지오서비스(GEOSERVICE)
블렌더에서 Color는 R/G/B 요소로 구성된다. 그런데 이를 하나의 실수값으로 변환하는 경우가 많은데, 어떻게 3개의 값을 1개의 실수값으로 변환하는가가 늘 궁금했다. 아래와 같다고 한다.
0.2126(R) + 0.7152(G) + 0.0722(B)
Ambient Occlusion은 물체를 보다 다 입체적으로 보이는데 매우 중요한 요소입니다. 아래는 AO 뿐만 아니라 다양한 곳에 응용될 수 있는 블렌더 쉐이더 노드 구성입니다.
적용된 매시의 렌더링 결과를 보면 다음과 같습니다.
위의 노드 구성 중 Bevel은 오직 Cycles 렌더링에서만 작동하며 Bump 맵핑처럼 매시의 가장자리를 렌더링하기 위해 사용됩니다. 이 노드는 실제 매시의 지오메트리를 변경하지 않고 오직 쉐이더만으로 효과를 냅니다. 덧붙여 아래는 좀더 구체적인 응용을 위해 재구성된 노드입니다.
Noise Texture는 좀더 불규칙한(자연스러운) Bevel 효과를 얻기 위함이고 Multiply는 최종 효과를 보다 두드러지게 표현되도록 하기 위함입니다.
사실 위의 노드 구성은 AO를 위한 것은 아닙니다. AO에 대한 것만을 원한다면 이에 특화된 Ambient Occlusion 노드가 있으니 이를 이용하기 바랍니다.
gwc-card 내부에 gwc-vscrollview를 배치하고 자연스러운 resizing을 위한 코드인데 추후 범용적인 개선이 필요하기에 메모를 남김.
먼저 DOM 구성을 위한 코드는 다음과 같다.
const domLayout = document.createElement("div"); domLayout.classList.add("layer-editor-attributes", "gwc-show-animation"); const htmlContent = .... ; const html = /* html */``; domLayout.innerHTML = html; const domCard = domLayout.querySelector("gwc-card"); domCard.resizablePanel.resizableLeft = false; domCard.resizablePanel.resizableRight = true; domCard.resizablePanel.resizableTop = false; domCard.resizablePanel.resizableBottom = true; domCard.resizablePanel.minWidth = 200; domCard.resizablePanel.minHeight = 68; ${htmlContent}
스타일은 다음과 같다.
.layer-editor-attributes { width: 0; height: 0; } .layer-editor-attributes gwc-card { top: 120px; left: 20px; width: 270px; height: 180px; } .layer-editor-attributes gwc-card gwc-vscrollview { margin: 0.3em 0; width: 100%; height: 100%; } .layer-editor-attributes .content { height: 0; } .layer-editor-attributes .content .vertical-linear-layout { gap: 0.2em; } .layer-editor-attributes .content > div > div > gwc-label { width: 7.5em; zoom: 0.8; } .layer-editor-attributes .content gwc-textinput { flex: 1; zoom: 0.8; } .layer-editor-attributes gwc-resizable-panel { height: 100%; }
위 스타일 코드 중 15번째에서 height를 0으로 주고 있다는 것이 핵심이다. 추후 이 부분에 대해서 그 이유를 파악하고 응용쪽이 아닌 컴포넌트 쪽에 반영할 필요가 있다.