[MOD] Real Grass 2
-
- Posts: 195
- Joined: Thu Apr 02, 2015 9:03 am
Re: [MOD] Real Grass 2
Hey there. I've a little graphical bug to report.
The grass generated by this mod seems to render some unintended slim vertical lines. I only noticed it when "realistic grass" is turned on, does not matter whether "shader" or "billboard" version is used... probably something with the used textures in this mod. I'll attach some screenshots.
The lines are really thin, and are almost invisible when playing in FullHD. They become very annoying when retro rendering mode is enabled (or simply using low resolutions) because of aliasing.
The grass generated by this mod seems to render some unintended slim vertical lines. I only noticed it when "realistic grass" is turned on, does not matter whether "shader" or "billboard" version is used... probably something with the used textures in this mod. I'll attach some screenshots.
The lines are really thin, and are almost invisible when playing in FullHD. They become very annoying when retro rendering mode is enabled (or simply using low resolutions) because of aliasing.
- Attachments
-
- Grass bug report.jpg (230.8 KiB) Viewed 3769 times
- Teralitha
- Posts: 359
- Joined: Wed Jul 17, 2019 3:44 pm
Re: [MOD] Real Grass 2
My player.log file
- Attachments
-
- PlayerLog.zip
- (13.94 KiB) Downloaded 165 times
- TheLacus
- Posts: 1305
- Joined: Wed Sep 14, 2016 6:22 pm
Re: [MOD] Real Grass 2
haloterm wrote: ↑Sat Oct 03, 2020 12:21 pm I played around with grass distance using console commands and noticed I can easily go up to a distance of 1000 without major performance issues. Since I use distant terrain, this improves the look in the distance incredibly. But I have to set this each time I load a save. I tried to modify the json settings file of the mod directly, but the mod ignores this and stays at 300.
Would it be possible to allow such high values to set in the mod options in the next version, instead of the current maximum of 300?
Hi, I uploaded a new version that should address these requests and issues.ifkopifko wrote: ↑Sun Dec 20, 2020 1:04 pm Hey there. I've a little graphical bug to report.
The grass generated by this mod seems to render some unintended slim vertical lines. I only noticed it when "realistic grass" is turned on, does not matter whether "shader" or "billboard" version is used... probably something with the used textures in this mod. I'll attach some screenshots.
The lines are really thin, and are almost invisible when playing in FullHD. They become very annoying when retro rendering mode is enabled (or simply using low resolutions) because of aliasing.
- TheLacus
- Posts: 1305
- Joined: Wed Sep 14, 2016 6:22 pm
Re: [MOD] Real Grass 2
Hi, thank you for log file. The crash happens when Distant Terrain is instantiating terrains as part of transition ring (quoting relevant part of log for future reference).
Code: Select all
0x250AE994 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.TerrainData:set_detailPrototypes (UnityEngine.TerrainData,UnityEngine.DetailPrototype[])
0x250A71A0 (Mono JIT Code) RealGrass.RealGrass:AddTerrainDetails (DaggerfallWorkshop.DaggerfallTerrain,UnityEngine.TerrainData)
0x250A6F80 (Mono JIT Code) RealGrass.RealGrass:DaggerfallTerrain_OnPromoteTerrainData (DaggerfallWorkshop.DaggerfallTerrain,UnityEngine.TerrainData)
0x250A5B80 (Mono JIT Code) (wrapper delegate-invoke) <Module>:invoke_void_DaggerfallTerrain_TerrainData (DaggerfallWorkshop.DaggerfallTerrain,UnityEngine.TerrainData)
0x250A5AB5 (Mono JIT Code) DaggerfallWorkshop.DaggerfallTerrain:RaiseOnPromoteTerrainDataEvent (UnityEngine.TerrainData)
0x250A5997 (Mono JIT Code) DaggerfallWorkshop.DaggerfallTerrain:PromoteTerrainData ()
0x2541B4E8 (Mono JIT Code) DistantTerrain.DistantTerrain:UpdateTerrainDataTransitionRing (DistantTerrain.DistantTerrain/TransitionTerrainDesc)
0x2541B1E0 (Mono JIT Code) DistantTerrain.DistantTerrain:PlaceTerrainOfTransitionRing (int)
0x2541AC8C (Mono JIT Code) DistantTerrain.DistantTerrain/<UpdateTerrainsTransitionRing>c__Iterator0:MoveNext ()
0x22A61430 (Mono JIT Code) UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)
However this doesn't explain why you don't see any grass at all when only this mod is enabled. If you would like to investigate a bit more i can give you a save made in an in-game season where grass is surely present.
- Attachments
-
- SAVE416.zip
- (235.5 KiB) Downloaded 155 times
- Teralitha
- Posts: 359
- Joined: Wed Jul 17, 2019 3:44 pm
Re: [MOD] Real Grass 2
I had disabled distant terrain and the dream textures, while lowering various real grass settings and I got it to work without crashing. Not sure if its worth it though. I also looked in that log and I saw some messages saying something about how a shader was incompatible with my gpu or something.
- Daniel87
- Posts: 391
- Joined: Thu Nov 28, 2019 6:25 pm
Re: [MOD] Real Grass 2
Hey TheLacus,
I used you mod in conjunction with my own and it looks pretty damn amazing! Your mod perfectly compensates for the shortcomings of mine. It looks almost as if they are made for each other <3.
One problem remains nevertheless:
I have a different tile texture layout for MapPixels without Locations. This allowes me to swap the Texture2DArray for these MapPixels (which should make up the majority of the game world) and replace it with a Texture Set that doesnt have the "only in location" textures, allowing me to add additional transitions between stone, dirt and grass.
But whenever this is the case, it is quite random if the grass of your mod is actually spawned on textures that are actually not grass:
Since now the texture order is different than from the original, see picture below.
Left: Original Textures, Right: My own Texture Set.
Would you be willing to write a quick fix in the future, once my mod is released?
Secondary problem resulting from the first problem is:
If the MapPixel features a location, the original textures are used.
This means your mod, when running with mine, would have to actively check if the MapPixel has a location and choose either the original DFU grass layout or the one for my mod, depending on the MapPixel that is loaded. something along the lines of
if (dfTerrain.MapData.hasLocation && WOModEnabled) {
// adjusted Real Grass 2 grass layout
} else {
// original Real Grass 2 grass layout
}
I used you mod in conjunction with my own and it looks pretty damn amazing! Your mod perfectly compensates for the shortcomings of mine. It looks almost as if they are made for each other <3.
One problem remains nevertheless:
I have a different tile texture layout for MapPixels without Locations. This allowes me to swap the Texture2DArray for these MapPixels (which should make up the majority of the game world) and replace it with a Texture Set that doesnt have the "only in location" textures, allowing me to add additional transitions between stone, dirt and grass.
But whenever this is the case, it is quite random if the grass of your mod is actually spawned on textures that are actually not grass:
Since now the texture order is different than from the original, see picture below.
Left: Original Textures, Right: My own Texture Set.
Would you be willing to write a quick fix in the future, once my mod is released?
Secondary problem resulting from the first problem is:
If the MapPixel features a location, the original textures are used.
This means your mod, when running with mine, would have to actively check if the MapPixel has a location and choose either the original DFU grass layout or the one for my mod, depending on the MapPixel that is loaded. something along the lines of
if (dfTerrain.MapData.hasLocation && WOModEnabled) {
// adjusted Real Grass 2 grass layout
} else {
// original Real Grass 2 grass layout
}
In Julianos we Trust.
- King of Worms
- Posts: 4757
- Joined: Mon Oct 17, 2016 11:18 pm
- Location: Scourg Barrow (CZ)
- Contact:
Re: [MOD] Real Grass 2
I kind of like some patches of the grass even on the rocky surface. Maybe just reduce the grass amount there to 50% or even less compared to grass surface. Just a impression based on that image. It might be a bad idea ofc
DREAM Nexus https://www.nexusmods.com/users/73250038?tab=user+files
DREAM Forums viewtopic.php?f=27&t=1168
DISCORD: king_of_worms_cz
DREAM Forums viewtopic.php?f=27&t=1168
DISCORD: king_of_worms_cz
- TheLacus
- Posts: 1305
- Joined: Wed Sep 14, 2016 6:22 pm
Re: [MOD] Real Grass 2
Hi, I would be happy to make this mod compatibleDaniel87 wrote: ↑Sat May 01, 2021 2:57 pm Hey TheLacus,
I used you mod in conjunction with my own and it looks pretty damn amazing! Your mod perfectly compensates for the shortcomings of mine. It looks almost as if they are made for each other <3.
One problem remains nevertheless:
I have a different tile texture layout for MapPixels without Locations. This allowes me to swap the Texture2DArray for these MapPixels (which should make up the majority of the game world) and replace it with a Texture Set that doesnt have the "only in location" textures, allowing me to add additional transitions between stone, dirt and grass.
But whenever this is the case, it is quite random if the grass of your mod is actually spawned on textures that are actually not grass:
I'll need more informations about additional transitions that include grass. This mod defines grass layout for all tiles as shown in the tilemap atlas. Is it only a matter of mapping different tile indexes (for example i see that that tile 10 in your mod corresponds to tile 15 of classic game), or does your mod also have additional layouts not shown in the picture that should receive grass? Can you make an example of how grass should be positioned on those additional transitions?
- Daniel87
- Posts: 391
- Joined: Thu Nov 28, 2019 6:25 pm
Re: [MOD] Real Grass 2
Hy!TheLacus wrote: ↑Sat May 01, 2021 11:31 pmHi, I would be happy to make this mod compatibleDaniel87 wrote: ↑Sat May 01, 2021 2:57 pm Hey TheLacus,
I used you mod in conjunction with my own and it looks pretty damn amazing! Your mod perfectly compensates for the shortcomings of mine. It looks almost as if they are made for each other <3.
One problem remains nevertheless:
I have a different tile texture layout for MapPixels without Locations. This allowes me to swap the Texture2DArray for these MapPixels (which should make up the majority of the game world) and replace it with a Texture Set that doesnt have the "only in location" textures, allowing me to add additional transitions between stone, dirt and grass.
But whenever this is the case, it is quite random if the grass of your mod is actually spawned on textures that are actually not grass:
I'll need more informations about additional transitions that include grass. This mod defines grass layout for all tiles as shown in the tilemap atlas. Is it only a matter of mapping different tile indexes (for example i see that that tile 10 in your mod corresponds to tile 15 of classic game), or does your mod also have additional layouts not shown in the picture that should receive grass? Can you make an example of how grass should be positioned on those additional transitions?
I use 80% of the original atlas, but I removed many of its textures, since they are only used in location blocks.
I utilize the two rotation and flip Bits the same way as in the original atlas. The tiles I added are only mirrored versions of original tiles as well as some corner tiles. Mostly its only a matter of different tile indexes, but for 2-4 tiles, you might have to place the grass in a different corner of the tile.
Let me send you my custom lookup table for further clarification:
Code: Select all
static protected TileObject[] tileTable = {
// Water - Dirt
new TileObject(MakeLookup(0, false, false), 0,0,0,0),
new TileObject(MakeLookup(4, true, false), 1,0,0,0),
new TileObject(MakeLookup(4, false, true), 0,1,0,0),
new TileObject(MakeLookup(4, true, true), 0,0,1,0),
new TileObject(MakeLookup(4, false, false), 0,0,0,1),
new TileObject(MakeLookup(5, true, false), 1,1,0,0),
new TileObject(MakeLookup(5, false, true), 0,1,1,0),
new TileObject(MakeLookup(5, true, true), 0,0,1,1),
new TileObject(MakeLookup(5, false, false), 1,0,0,1),
new TileObject(MakeLookup(6, false, true), 1,1,1,0),
new TileObject(MakeLookup(6, true, true), 0,1,1,1),
new TileObject(MakeLookup(6, false, false), 1,0,1,1),
new TileObject(MakeLookup(6, true, false), 1,1,0,1),
new TileObject(MakeLookup(21, false, false), 0,1,0,1),
new TileObject(MakeLookup(21, true, false), 1,0,1,0),
new TileObject(MakeLookup(1, false, false), 1,1,1,1),
// Dirt - Grass
new TileObject(MakeLookup(7, true, false), 2,1,1,1),
new TileObject(MakeLookup(7, false, true), 1,2,1,1),
new TileObject(MakeLookup(7, true, true), 1,1,2,1),
new TileObject(MakeLookup(7, false, false), 1,1,1,2),
new TileObject(MakeLookup(8, true, false), 2,2,1,1),
new TileObject(MakeLookup(8, false, true), 1,2,2,1),
new TileObject(MakeLookup(8, true, true), 1,1,2,2),
new TileObject(MakeLookup(8, false, false), 2,1,1,2),
new TileObject(MakeLookup(9, false, true), 2,2,2,1),
new TileObject(MakeLookup(9, true, true), 1,2,2,2),
new TileObject(MakeLookup(9, false, false), 2,1,2,2),
new TileObject(MakeLookup(9, true, false), 2,2,1,2),
new TileObject(MakeLookup(22, true, false), 2,1,2,1),
new TileObject(MakeLookup(22, false, false), 1,2,1,2),
new TileObject(MakeLookup(2, false, false), 2,2,2,2),
// Grass - Stone
new TileObject(MakeLookup(10, true, false), 3,2,2,2),
new TileObject(MakeLookup(10, false, true), 2,3,2,2),
new TileObject(MakeLookup(10, true, true), 2,2,3,2),
new TileObject(MakeLookup(10, false, false), 2,2,2,3),
new TileObject(MakeLookup(11, true, false), 3,3,2,2),
new TileObject(MakeLookup(11, false, true), 2,3,3,2),
new TileObject(MakeLookup(11, true, true), 2,2,3,3),
new TileObject(MakeLookup(11, false, false), 3,2,2,3),
new TileObject(MakeLookup(12, false, true), 3,3,3,2),
new TileObject(MakeLookup(12, true, true), 2,3,3,3),
new TileObject(MakeLookup(12, false, false), 3,2,3,3),
new TileObject(MakeLookup(12, true, false), 3,3,2,3),
new TileObject(MakeLookup(24, true, false), 3,2,3,2),
new TileObject(MakeLookup(24, false, false), 2,3,2,3),
new TileObject(MakeLookup(3, false, false), 3,3,3,3),
// Dirt - Stone
new TileObject(MakeLookup(13, true, false), 3,1,1,1),
new TileObject(MakeLookup(13, false, true), 1,3,1,1),
new TileObject(MakeLookup(13, true, true), 1,1,3,1),
new TileObject(MakeLookup(13, false, false), 1,1,1,3),
new TileObject(MakeLookup(14, true, false), 3,3,1,1),
new TileObject(MakeLookup(14, false, true), 1,3,3,1),
new TileObject(MakeLookup(14, true, true), 1,1,3,3),
new TileObject(MakeLookup(14, false, false), 3,1,1,3),
new TileObject(MakeLookup(15, false, true), 3,3,3,1),
new TileObject(MakeLookup(15, true, true), 1,3,3,3),
new TileObject(MakeLookup(15, false, false), 3,1,3,3),
new TileObject(MakeLookup(15, true, false), 3,3,1,3),
new TileObject(MakeLookup(23, true, false), 3,1,3,1),
new TileObject(MakeLookup(23, false, false), 1,3,1,3),
//Dirt - Grass - Stone
new TileObject(MakeLookup(16, true, false), 1,1,2,3),
new TileObject(MakeLookup(16, false, true), 3,1,1,2),
new TileObject(MakeLookup(16, true, true), 2,3,1,1),
new TileObject(MakeLookup(16, false, false), 1,2,3,1),
new TileObject(MakeLookup(27, true, false), 1,1,3,2),
new TileObject(MakeLookup(27, false, true), 2,1,1,3),
new TileObject(MakeLookup(27, true, true), 3,2,1,1),
new TileObject(MakeLookup(27, false, false), 1,3,2,1),
new TileObject(MakeLookup(17, true, false), 2,2,1,3),
new TileObject(MakeLookup(17, false, true), 3,2,2,1),
new TileObject(MakeLookup(17, true, true), 1,3,2,2),
new TileObject(MakeLookup(17, false, false), 2,1,3,2),
new TileObject(MakeLookup(28, true, false), 2,2,3,1),
new TileObject(MakeLookup(28, false, true), 1,2,2,3),
new TileObject(MakeLookup(28, true, true), 3,1,2,2),
new TileObject(MakeLookup(28, false, false), 2,3,1,2),
new TileObject(MakeLookup(18, true, false), 3,3,1,2),
new TileObject(MakeLookup(18, false, true), 2,3,3,1),
new TileObject(MakeLookup(18, true, true), 1,2,3,3),
new TileObject(MakeLookup(18, false, false), 3,1,2,3),
new TileObject(MakeLookup(29, true, false), 3,3,2,1),
new TileObject(MakeLookup(29, false, true), 1,3,3,2),
new TileObject(MakeLookup(29, true, true), 2,1,3,3),
new TileObject(MakeLookup(29, false, false), 3,2,1,3),
//Dirt - Stone & Grass
new TileObject(MakeLookup(30, true, false), 3,1,2,1),
new TileObject(MakeLookup(30, false, true), 1,3,1,2),
new TileObject(MakeLookup(30, true, true), 2,1,3,1),
new TileObject(MakeLookup(30, false, false), 1,2,1,3),
//Dirt - Water & Grass
new TileObject(MakeLookup(31, true, false), 2,1,0,1),
new TileObject(MakeLookup(31, false, true), 1,2,1,0),
new TileObject(MakeLookup(31, true, true), 0,1,2,1),
new TileObject(MakeLookup(31, false, false), 1,0,1,2),
//Dirt - Water & Stone
new TileObject(MakeLookup(32, true, false), 3,1,0,1),
new TileObject(MakeLookup(32, false, true), 1,3,1,0),
new TileObject(MakeLookup(32, true, true), 0,1,3,1),
new TileObject(MakeLookup(32, false, false), 1,0,1,3),
//Grass - Dirt & Stone
new TileObject(MakeLookup(33, true, false), 3,2,1,2),
new TileObject(MakeLookup(33, false, true), 2,3,2,1),
new TileObject(MakeLookup(33, true, true), 1,2,3,2),
new TileObject(MakeLookup(33, false, false), 2,1,2,3),
//Stone - Dirt & Grass
new TileObject(MakeLookup(34, true, false), 2,3,1,3),
new TileObject(MakeLookup(34, false, true), 3,2,3,1),
new TileObject(MakeLookup(34, true, true), 1,3,2,3),
new TileObject(MakeLookup(34, false, false), 3,1,3,2),
//Road - Dirt & Grass
new TileObject(MakeLookup(19, false, false), 19,19,19,19),
new TileObject(MakeLookup(20, true, false), 1,20,19,20),
new TileObject(MakeLookup(20, false, true), 20,1,20,19),
new TileObject(MakeLookup(20, true, true), 19,20,1,20),
new TileObject(MakeLookup(20, false, false), 20,19,20,1),
new TileObject(MakeLookup(26, true, false), 2,26,19,26),
new TileObject(MakeLookup(26, false, true), 26,2,26,19),
new TileObject(MakeLookup(26, true, true), 19,26,2,26),
new TileObject(MakeLookup(26, false, false), 26,19,26,2)
};
Code: Select all
static byte MakeLookup(int index, bool rotate, bool flip)
{
if (index > 255)
throw new IndexOutOfRangeException("Index out of range. Valid range 0-255");
if (rotate) index += 64;
if (flip) index += 128;
return (byte)index;
}
1. the tile (byte)
2. bottom left corner (int)
3. bottom right corner (int)
4. top right corner (int)
5. top left corner (int).
Code: Select all
public class TileObject {
public byte Tile;
public int Bl, Br, Tr, Tl;
public TileObject(byte tile, int bl, int br, int tr, int tl) {
Tile = tile;
Bl = bl;
Br = br;
Tr = tr;
Tl = tl;
}
}
In Julianos we Trust.
- Daniel87
- Posts: 391
- Joined: Thu Nov 28, 2019 6:25 pm
Re: [MOD] Real Grass 2
Hi TheLacus,
I completely changed my system of texturing landscapes. I stick to the original TextureAtlas and just appended it by some more textures, so our mods are now perfectly compatible.
But while testing, I came across a minor incompatibility between your mod and Basic Roads:
Is this anything that can be fixed?
I completely changed my system of texturing landscapes. I stick to the original TextureAtlas and just appended it by some more textures, so our mods are now perfectly compatible.
But while testing, I came across a minor incompatibility between your mod and Basic Roads:
Is this anything that can be fixed?
In Julianos we Trust.