Godot Shader:无需建模用一张图片在Godot中生成一座山

原理类似置换贴图,只不过还想借助生成的高度区分出海面山体以及山顶的树木
效果不理想。没有办法像Blender那样在材质层次混合,要实现PBR效果只能靠引入大量的材质贴图。下面简述一下制作的思路

效果图

Godot Shader:无需建模用一张图片在Godot中生成一座山_第1张图片

1. 在Godot中新建一个PlaneMeshInstance

Godot Shader:无需建模用一张图片在Godot中生成一座山_第2张图片

Godot Shader:无需建模用一张图片在Godot中生成一座山_第3张图片
增加细分
Godot Shader:无需建模用一张图片在Godot中生成一座山_第4张图片

Godot Shader:无需建模用一张图片在Godot中生成一座山_第5张图片

2.贴图制作

一张Perlin Noise

一张遮罩

Godot Shader:无需建模用一张图片在Godot中生成一座山_第6张图片
把噪声和遮罩以类似相乘的方式叠加一下

Godot Shader:无需建模用一张图片在Godot中生成一座山_第7张图片

3.着色器代码
shader_type spatial;
uniform sampler2D height_map : hint_white; 
uniform float height_scale = 1.0;
uniform float uv_scale : hint_range(0.1,2.0) = 1.0;
uniform vec4 water_color : hint_color;
uniform vec4 stone_color : hint_color;
uniform vec4 tree_color : hint_color;

varying float height;



void vertex(){
     
	VERTEX.y = height = texture(height_map,UV * uv_scale).y * height_scale;
}

void fragment(){
     
	if(height < 0.1){
     
		ALBEDO = water_color.rgb;
	}else if(height < 0.2){
     
		ALBEDO = stone_color.rgb;
	}else{
     
		ALBEDO = tree_color.rgb;
	}
}
4.材质

Godot Shader:无需建模用一张图片在Godot中生成一座山_第8张图片

你可能感兴趣的:(Godot笔记,#,Godot,实践,Godot,Shader)