Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
나무 만들기
이것은 나무와 다른 유형의 식물을 처음부터 만드는 방법에 대한 짧은 튜토리얼입니다.
목표는 모델링 기술에 초점을 맞추는 것이 아니라(이에 대한 많은 튜토리얼이 있습니다), Godot에서 그것들을 좋게 보이게 만드는 방법입니다.
나무로 시작하세요
SketchFab에서 이 트리를 가져왔습니다.
https://sketchfab.com/models/ea5e6ed7f9d6445ba69589d503e8cebf
블렌더에서 열었습니다.
정점 색상으로 페인트
가장 먼저 할 일은 정점 색상을 사용하여 바람이 불 때 나무가 얼마나 흔들리는지 그리는 것입니다. 즐겨 사용하는 3D 모델링 프로그램의 정점 색상 페인팅 도구를 사용하여 다음과 같이 페인팅하면 됩니다.
이것은 약간 과장되었지만 색상은 흔들림이 나무의 모든 부분에 얼마나 영향을 미치는지 나타냅니다. 이 척도는 이를 더 잘 나타냅니다.
나뭇잎에 대한 사용자 정의 셰이더 작성
다음은 나뭇잎에 대한 셰이더의 예입니다.
shader_type spatial;
render_mode depth_prepass_alpha, cull_disabled, world_vertex_coords;
이것은 공간 셰이더입니다. 전면/후면 컬링이 없으며(잎을 양쪽에서 볼 수 있음) 알파 프리패스가 사용되므로 투명도 사용으로 인해 발생하는 깊이 아티팩트(그리고 그림자가 남음)가 줄어듭니다. 마지막으로 흔들림 효과의 경우 세계 좌표를 권장하므로 나무를 복제하고 이동하는 등의 작업이 가능하며 다른 나무와 계속 함께 작동합니다.
uniform sampler2D texture_albedo : source_color;
uniform vec4 transmission : source_color;
여기에서는 텍스처와 투과 색상을 읽어 나뭇잎에 백라이트를 추가하고 표면 아래 산란을 시뮬레이션하는 데 사용합니다.
uniform float sway_speed = 1.0;
uniform float sway_strength = 0.05;
uniform float sway_phase_len = 8.0;
void vertex() {
float strength = COLOR.r * sway_strength;
VERTEX.x += sin(VERTEX.x * sway_phase_len * 1.123 + TIME * sway_speed) * strength;
VERTEX.y += sin(VERTEX.y * sway_phase_len + TIME * sway_speed * 1.12412) * strength;
VERTEX.z += sin(VERTEX.z * sway_phase_len * 0.9123 + TIME * sway_speed * 1.3123) * strength;
}
나뭇잎의 흔들림을 만드는 코드입니다. 기본입니다(시간과 축 위치를 곱하여 사인파를 사용하지만 잘 작동함). 강도에 색상이 곱해집니다. 모든 축은 1.0에 가까운 서로 다른 작은 곱셈 계수를 사용하므로 축이 동기화되어 표시되지 않습니다.
마침내 남은 것은 프래그먼트 셰이더뿐입니다:
void fragment() {
vec4 albedo_tex = texture(texture_albedo, UV);
ALBEDO = albedo_tex.rgb;
ALPHA = albedo_tex.a;
METALLIC = 0.0;
ROUGHNESS = 1.0;
SSS_TRANSMITTANCE_COLOR = transmission.rgba;
}
그리고 이것이 거의 전부입니다.
트렁크 셰이더는 알파 채널에 쓰지 않고(따라서 알파 프리패스가 필요하지 않음) 작동하기 위해 전송이 필요하지 않다는 점을 제외하면 유사합니다. 셰이더 모두 노멀 매핑, AO 및 기타 맵을 추가하여 개선할 수 있습니다.
셰이더 개선하기
이 작업을 수행하는 방법에 대한 더 많은 리소스를 읽을 수 있습니다. 이제 기본 사항을 알았으므로 Crysis가 이를 수행하는 방법에 대한 GPU Gems3의 장을 읽어 보시기 바랍니다(여기에 표시된 다른 많은 기술은 더 이상 사용되지 않으므로 주로 sway 코드에 중점을 둡니다).
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch16.html