Browse Source

Merge branch 'master' of https://github.com/HeapsIO/hide

trethaller 5 năm trước cách đây
mục cha
commit
037bdffed5

+ 3 - 0
hide/prefab/terrain/TerrainEditor.hx

@@ -584,6 +584,7 @@ class TerrainEditor {
 			case Delete: deleteTile(pos, ctx);
 			default:
 		}
+		terrainPrefab.modified = true;
 	}
 
 	function useBrush( from : h3d.Vector, to : h3d.Vector, ctx : Context ) {
@@ -804,6 +805,7 @@ class TerrainEditor {
 	}
 
 	function removeSurface( index :Int, onChange : Void -> Void ) {
+		terrainPrefab.modified = true;
 		var terrainRevertData = new TerrainRevertData();
 		var tileRevertDatas = new Array<TileRevertData>();
 		for( tile in terrainPrefab.terrain.tiles )
@@ -1089,6 +1091,7 @@ class TerrainEditor {
 	}
 
 	function onSurfaceAdd( props : Element, ctx : EditContext, path : String ) {
+		terrainPrefab.modified = true;
 		if( path == null )
 			return;
 		var split : Array<String> = [];

+ 12 - 2
hrt/prefab/terrain/Terrain.hx

@@ -39,6 +39,7 @@ class Terrain extends Object3D {
 	// Utility
 	var tmpSurfacesProps : Array<SurfaceProps> = [];
 	var unpackWeight = new h3d.pass.ScreenFx(new UnpackWeight());
+	var modified = false;
 
 	#if editor
 	var packWeight = new h3d.pass.ScreenFx(new PackWeight());
@@ -109,7 +110,10 @@ class Terrain extends Object3D {
 		#if editor
 		obj.autoCreateTile = autoCreateTile;
 	 	obj.showChecker = terrain.showChecker;
-		if( editor != null && terrain.surfaces.length > 0 ) editor.saveTextures();
+		if( modified ) {
+			modified = false;
+			if( editor != null && terrain.surfaces.length > 0 ) editor.saveTextures();
+		}
 		#end
 
 		return obj;
@@ -158,20 +162,24 @@ class Terrain extends Object3D {
 				}
 				case "w":
 				if( weight ) {
+					tile.weightMapResource = res;
 					var tex = res.toTexture();
 					if( tile.surfaceWeights.length == 0 ) @:privateAccess tile.refreshSurfaceWeights();
+					var engine = h3d.Engine.getCurrent();
 					for(i in 0 ... tile.surfaceWeights.length){
-						h3d.Engine.getCurrent().pushTarget(tile.surfaceWeights[i]);
+						engine.pushTarget(tile.surfaceWeights[i]);
 						unpackWeight.shader.indexMap = tile.surfaceIndexMap;
 						unpackWeight.shader.packedWeightTexture = tex;
 						unpackWeight.shader.index = i;
 						unpackWeight.render();
+						engine.popTarget();
 					}
 					tile.generateWeightArray();
 					tex.dispose();
 				}
 				case"i":
 				if( index ) {
+					tile.indexMapResource = res;
 					var tex = res.toTexture();
 					if( tile.surfaceIndexMap == null ) @:privateAccess tile.refreshIndexMap();
 					h3d.pass.Copy.run(tex, tile.surfaceIndexMap);
@@ -517,9 +525,11 @@ class Terrain extends Object3D {
 				tile.blendEdges();
 			if( editor != null )
 				editor.refresh();
+			modified = true;
 		});
 
 		ctx.properties.add(props, this, function(pname) {
+			modified = true;
 			ctx.onChange(this, pname);
 		});
 

+ 4 - 0
hrt/prefab/terrain/Tile.hx

@@ -18,6 +18,10 @@ class Tile extends h3d.scene.Mesh {
 	public var needNewPixelCapture = false;
 	public var insideFrustrum(default, null) = false;
 
+	// set by prefab loader for CPU access ingame
+	public var weightMapResource : hxd.res.Resource;
+	public var indexMapResource : hxd.res.Resource;
+
 	var heightmapPixels : hxd.Pixels.PixelsFloat;
 	var shader : hrt.shader.Terrain;
 	var terrain : TerrainMesh;

+ 2 - 2
hrt/shader/Terrain.hx

@@ -122,8 +122,8 @@ class Terrain extends hxsl.Shader {
 				var tile = abs(abs(floor(input.position.x)) % 2 - abs(floor(input.position.y)) % 2);
 				pixelColor = vec4(mix(vec3(0.4), vec3(0.1), tile), 1.0);
 				transformedNormal = vec3(0,0,1) * TBN;
-				roughnessValue = mix(0.9, 0.6, tile);
-				metalnessValue = mix(0.4, 0, tile);
+				roughnessValue = mix(0.1, 0.9, tile);
+				metalnessValue = mix(1.0, 0, tile);
 				occlusionValue = 1;
 				emissiveValue = 0;
 			}