Search Unity

[TerrainEngine] Voxel Terrain : Smooth,Cubic,2D,Hexagonal Infinite Procedural Terrain

Discussion in 'Assets and Asset Store' started by dyox, Mar 19, 2013.

  1. Fenris2


    Aug 25, 2014
    I have said it before, but an engine with support would be fairly cheap at 6k-7k professionally, and that was back in the 90s when I did game dev for real. Clearly, not intended for us indies to muck about with without a real budget, and that is his call.

    As a one man shop (I think) he would spend all his time supporting us by answering endless questions if it were cheap. Then the engine would get nowhere and/or dev enthusiasm would get sucked right out after the 500th support request for 'ZOMG I paid $75 for this! Where is the button I can push to make my MMO. I wantz my monies back.' You know its true...
    dyox and Tethys like this.
  2. dyox


    Aug 19, 2011

    I wanted to clarify my last message.

    All this systems are included in V10 ( next patch V10.7). They're not part of V11 features.
    (DX11,New noises interface,host system,heightmap resolution are already done and in test for the moment)
    **A new unified building tool, working with all systems.
    This tool will be done in version V10.9.
    V10 goal : increase draw distance,reduce memory, fastest way to create procedural world,better tool and automatic network sync. (all done 90%)
    V11 features will be described in few months.

    Here a preview screen of the new HeightMap Manager : (beta, still in test with different settings)
    -Manage all type of noises, use reflection, it's easy and fast to create custom noises module
    -Manage Voxel Type, per biome, per noises, per altitude,etc...
    -Export/Import biomes.
    -Soon : Manager Camera effects/Fog/shadows/light/Sound/,etc depending of current biome/altitude/etc..
    -LibNoise speed improved, 5km² generated in 7 seconds (4 threads)
    Tethys, tatoforever and ikemen_blueD like this.
  3. tatoforever


    Apr 16, 2009
    Do you have a document or something with technical information about your TerrainEngine for programmers? I wanna see how your game framework is written, the patterns you are using and how the networking part is handled. I'll be interested in buying the engine (we don't have any problem for the money you are asking).
    PM me any NDA and details if necessary.
    dyox likes this.
  4. dyox


    Aug 19, 2011
    @tatoforever : Yes, i will contact you asap.

    Some news about V10.7 :
    -No more skirts
    -Smooth LOD (no more step on high LOD)
    -Loadtime optimized
    -Chunk generation optimized

    BEFORE (voxel size 0.5m)
    NeverLandNewGenerator 2016-03-09 04-28-21-36.jpg
    NeverLandNewGenerator 2016-03-09 04-35-46-72.jpg

    AFTER (voxel size 0.5m)
    NeverLandLast 2016-03-09 04-29-29-59.jpg
    NeverLandLast 2016-03-09 04-29-38-03.jpg
    Last edited: Mar 9, 2016
    KyleOlsen, Tethys and tatoforever like this.
  5. Tethys


    Jul 2, 2012
    Nice improvement on the LOD with the smoothness and removal of steps, looks much better!
    KyleOlsen and dyox like this.
  6. TheModdersDen


    Jul 23, 2014
    Hello, I would love to get a copy of just the 2D Terraria-like engine of sorts (preferably with code included)... If I were to JUST obtain that, how much do you predict it would cost? FYI, I am an single-user, Indie Developer, looking to make his mark for the first time and don't have a large amount of money, nor investors willing to buy, a $3000 product.
    The fact is, I don't have investors at all... Most of my stuff is either home-brewed, or bought through the means by which I can afford them. I am still in high-school, so don't go all "get a job" on me (as my main focus is on school, so I can hopefully have a shot at getting in with the bigger game making industries), and have been watching your product for a significant amount of time.
    I understand if this is how you put food on the table for your household, and will look into other means if necessary, but I really need a good 2D voxel engine of sorts, and your's has all of my desired features, and even more. I am doing this in my spare time, as a hobby, and think this would really speed up my work, and depending on how much it is, it would really be worth the money (If I can get just the Terraria-like part). Either way, I await your timely response.
    Last edited: Mar 10, 2016
  7. mgear


    Aug 3, 2010
    Tethys likes this.
  8. ikemen_blueD


    Jan 19, 2013
    You can check out on this one: Voxel Terrain 2D,!/content/18882. I think it can be a good starting point. A 2D Voxel terrain would be easier than a 3D one, in case of optimization challenges, like heightmap, noise, smoothness, memory usage & leak, multi-threads, drawcalls, random generation, LOD, data storage cost etc. But, I'm pretty sure with you, he cannot cut the 2D Terraria-like out of TE, because that would requires him lots of time to do so. When you start small, go at small steps first.
    Last edited: Mar 10, 2016
    Tethys likes this.
  9. dyox


    Aug 19, 2011
    Hi @TheModdersDen,
    If i want sell just one part of TerrainEngine,
    (2D,Cubic,Hexagonal,Smooth or Smooth + LOD),
    I need to provide the complete generic Core of TE (+/-770 .cs files)

    It contains :
    -Client Plugins systems (Processors, Water, Occlusion,Trees,grass)
    -Biomes Editor (Noises,Voxels Type per Biome,etc..)
    -Pathfinfing (Ground,Fly,Aquatic path management)
    -Improved LibNoise with Biomes Management ( 60% fastest than all existing solutions now, and manage biomes)
    -Server (Manage Local Client/Distant Clients/ IA / etc)
    -Server Plugins (World Generators,Save,XML System, IA)
    -Server TCP Network (Packets,Cryptography, Manage multiple worlds in one instance)
    -Thread Safe Queue/List/etc
    -Thread Safe Data storage/compression/save/load/fast access
    -Thread Safe Pooling System
    -Custom Ref-less Quadtree/Octree structures
    -Custom Fast array classes
    -Custom Colliders Manager

    I can not divide the Solution easily, all systems are working like plugins but they need the core (mainly server/client systems).

    Here is the editor i've made for it. Each tiles texture type have a special decoder, and all possibilities must be set up correctly, so it's specially long and complex to fill, but it can handle all types of 2D games.

    With this system it's possible to create a game like with RPG Editor.
    You can set up a blocking tile, set depth using Z voxels position,etc...
    I've also made a mesh generator that generate depth mesh/colliders, so it's possible to have 3D objects and use physics, or also rotate the camera in different angles to create a 3D/2D game (like Mario with dimension flipping).

  10. Tethys


    Jul 2, 2012
    If you are a student developer, than like others are kind of hinting at, you probably need to lower your expectations a little bit and focus on using a cheap or "home-brew" solution from a casual developer.
    Last edited: Mar 10, 2016
  11. TheModdersDen


    Jul 23, 2014
    OK. I'll look into the links that were shared! Thanks to all who replied!
  12. ikemen_blueD


    Jan 19, 2013
    @dyox I want to purchase the TE system, yahhh finally, saving enough money. I sent couple messages on Skype, did not get your reply yet. Probably, you was busy. Sorry for being impatient, I'm a bit too excited. Anyway, I'm waiting for your reply soon, so that we can discuss about the contract ;)
    Tethys likes this.
  13. Tethys


    Jul 2, 2012
    I have a thread going now that is in search of a water shader that will work with Terrain Engine. We still use Water4Advanced because we haven't found any other one that will work yet, and have been hesitant to keep buying shaders just to test them heh(Water4Advanced works, just doesn't look the best and no reflections). I figured with this new approach, maybe someone will come to us with their pack, knowing it would work in this scenario. :) I don't think we are giving away any important secret information on Terrain Engine, just mentioning how we use the water shaders.
  14. ikemen_blueD


    Jan 19, 2013
    Tethys likes this.
  15. Tethys


    Jul 2, 2012
    Haha yes Xeno had also mentioned Ceto. I love that asset - just have been hesitant due to performance cost and price tag (without being able to try it first). It is also a complete ocean system whereas I just really need a good water shader for ponds, rivers, lakes etc... May end up checking it out if nothing else better comes up. When we finally do find something I'll share it here for everyone else's reference who uses Terrain Engine as well - it could at least save others the pain of buying so many different water shaders just to try them out with TE.
    ikemen_blueD likes this.
  16. dyox


    Aug 19, 2011
    Hi everyone,

    I post this message just to inform that i still work on TerrainEngine 10.7 :
    -The new HeightMap Editor is finished, tested and working.
    -DX11 Shaders (Simple,SplatMap,Vertical Tiling, Noise, Local/World) are finished
    -Legacy shaders will be removed and replaced by standard shaders and now use keywords
    -New editor window to create combined tessellation textures (Diffuse, HeightMap,Occlusion,Normal)
    -The new TreesProcessor will not be added to this version, it works on 5.3 but not on 5.4 and need a shader/code rewrite to work on 5.4. So i prefer delay the release date after the official release of 5.4
    -TE code is now updated to 5.4 : FPS increased. 4km² Terrain : 5.3: 100fps -> 5.4: 150fps
    -LibNoise/Biome system now use a new way to select a biome name at X/Z position, it will be described on the changelog
    -10.7 Contains a generic graph event system, that will allow you to change camera effects depending of biomes
    -Grass/Details/Trees editor improved, it's now possible to work with assets per biome, and reuse 2 times the same prefab/mesh/grass texture with differents settings/biomes
    -New host system, host a game, other players connect to your world
    -Better network compression system, each processor now send his data on a unique packet
    -New Generic Server Plugins system using Reflection ( Terrain Load/Save/Generation/Network systems are now based on this system and can overrided with your own classes without any change on TE core)
    -Terrain Data now use 3 bytes instead of 2 bytes for each voxel (+5-10% memory used)

    V10.8 :
    -Fluids memory optimization, using a water level, do not generate fluids voxels
    -Fluids LOD
    -Destructible Voxels Objects + Voxel Object Editor (inside unity editor)
    -New Terrain Editor
    -New Procedural Building system (VoxelFarm like)
    -Better Pathfinding system for full authoritative dedicated server that can not use Unity collision system (mmo,strategy,etc)
    -Complete rewrite of the GameObjectProcessor :
    --No more Multi-threaded LOD system ( you must use the unity lod system)
    --No more Multi-threaded batching
    --No more Procedural Trees LOD system ( use speedtree gameobject or the new TreesProcessors)
    --No more GameObject Scripting system ( SendMessage will be called on terrain modification, but no more generic and sync system for trees etc)

    --The new GameObjectProcessor will be used only to add/remove gameobjects to the terrain, you will need to use other systems for lod,trees,etc)
    -TreesProcessor : This processor will manages all trees on the terrain (fading/batching)
    --One LOD distance for all trees ( it will not be possible to set differents lod distance for each tree like in the current system)
    --0 Class use, only struct, big garbage collector optimization (virtually no tree limit)
    --Instant generation OnTerrainLoaded
    --SpeedTree compatible
    --Multi-threaded batching, shared quatree, Cell System, Shared distance calculation, data pooling (materials array,vertices, gameobjects,etc)

    -Still modifying (slowly) the engine to generate Cubic/Spheric Voxels Planets
    -Universe Generator (Galaxies, planets, asteroids, suns). No data stored on disk, fully procedural. (GPU/CPU, client side)
    -Plan to remove all other algorithms after this release (Hexagonal,2D,Cube,Marching Cubes), only Octree based smooth terrain will be available
    -Shared Quadtree/Octree systems already done
    -New procedural way to generate grass/details/trees without using memory,generated on the fly but still persistant and sync over the network

    I'm also working on a new massive demo scene containing more biomes examples :
    -Geysers (YellowStone like)
    -Plains (Red,Orange,Green)
    -Fantasy Caves
    -Fantasy islands
    And more ;)...

    I'm also thinking of a new Grass/Details system.
    With this new system it will not be possible to use more than one GrassProcessor and one DetailsProcessor per scene.
    The old system is limited to 255 objects per processor and unlimited processors count but the new one will automatically manage objects ID and manage the data storage if you use more than 255 differents objects (but limited to one GrassProcessor and one DetailsProcessor).
  17. Frpmta


    Nov 30, 2013
    What you mean with this is that cube terrain can still be created, just that it must now be through the smooth terrain algorithm, right?
  18. ikemen_blueD


    Jan 19, 2013
    Are Unity Standard shaders quite expensive on performance to render on such massive terrain chunks? No more Multi-threaded batching, so how do we deal with drawcalls?

    These are my most favorite ones, can't wait seriously ;)
  19. neff11


    Sep 7, 2013
    Hi, is there any way to generate a planet with your engine?
    Nice work, im waiting to see your citygen and if works well together with terrain engine `ll contact you :)
  20. Reiika


    Jul 18, 2015

    Can we get a physical demo that show cases this product? I would be interested if I can actually test a running scene
  21. Redlotus99


    Apr 19, 2016
    I am interested in purchasing TerrainEngine. I have tried contacting you via email and pm. Can you please contact me?
  22. dyox


    Aug 19, 2011
    Hi, i'm posting this message to inform everyone that i'm not available due to few personal reasons.
    I'm not able to work or respond to emails/skype ( @Redlotus99, etc )
    @Reiika : Contact me by email ( Add your unity forum username on the message )

    For the support :
    I invite everyone who contacted me on skype to send me an email containing all questions (support : )

    I will respond to emails asap. ( 7-12 days from now 05/28/2016 )

    And about the next update, some screens ( voxels size 0.5m, 120 fps 5.3 / 160 fps 5.4)
    NeverLandSnow 2016-05-18 06-49-27-63.jpg NeverLandSnow 2016-05-18 06-50-02-74.jpg NeverLandSnow 2016-05-18 06-51-24-55.jpg
    Tethys, Arkade and ikemen_blueD like this.
  23. Redlotus99


    Apr 19, 2016
    @dyox I shot you an email regarding a purchase. Appreciate your time and effort.
  24. HolyFireGames


    Apr 23, 2014
    Hi @dyox , we've been trying to get our issue resolved for about a month now without success. We've been trying to reach you repeatedly on Skype with no success either. Can you please contact us to resolve the bugs we're seeing. Thanks.
    Last edited: Jul 13, 2016
  25. ikemen_blueD


    Jan 19, 2013
    Hi @dyox, I also encounter some issues. I sent you 2 help session requests, still waiting for your reply.
  26. Tethys


    Jul 2, 2012
    Has anyone had a chance to run this in VR tech? @dyox When is the next update and have you tested with VR as well? We are looking into getting our next project started in a few months and are looking at making a VR game using either TE v11 or Voxel Farm 3.0 for Unity, depending on which handles VR better.
  27. dyox


    Aug 19, 2011
    Hi, i'm sorry i'm not available for the moment. I'm working on V11 update. 1 September the trailer will be released ( Space ? Voxel Objects ? 3 new networking system ? 2 000 000 trees ? Top,Down,climbing procedural plants ? New shaders (Unlimited textures count) ? and so much more ;) ).

    @Tethys i don"t have VR so i can't test. Someone is using TE with HTC vive, so it should be ok, no bad feedbacks ;)
    Tethys, ikemen_blueD and Razmot like this.
  28. Blender007


    Oct 31, 2014
  29. KeepTrying


    Feb 23, 2011
    Anyone knows how much it's going to cost ?
    Looking only for this Terraria like 2D feature, thanks in advance.
  30. dyox


    Aug 19, 2011
    hi, @KeepTrying : Sorry it's not possible to divide the solution.

    @Blender007 : Here is what i've made for test
    NeverLand 2016-08-11 16-25-59-05.jpg NeverLand 2016-08-11 16-27-05-50.jpg NeverLand 2016-08-11 16-29-12-99.jpg TropicalPack 2016-08-11 16-13-39-85.jpg TropicalPack 2016-08-11 16-13-27-72.jpg
    KeepTrying and Tethys like this.
  31. KeepTrying


    Feb 23, 2011
    @dyox Ok my friend, so, how much the full engine is gonna cost ?
    By the way, i don't need the Source Code, i'm not a programmer.
    Thank's in advance.
  32. Blender007


    Oct 31, 2014
    @dyox HI
    Thank you for the pictures.:cool:
    I have some questions;
    TerrainEngine is a script that contains C # but the library?
    as vegetation, shader, particle, animal ...
    What you use in your videos?
    One can use the assets Marmoset Skyshop or Shaders Forge and TENKOKU, suimono, SpeedTree ... no problem?
    In one of your videos you use objects of Manuftura4K like me;)
    You can randomly insert objects like ruins, village vehicle wreck ...
    When a video demonstration of the settings as is Adam Goodrich with Gaia?
    Thank you for your answers:)
  33. Tethys


    Jul 2, 2012
    If you're not a programmer than you are in the wrong place. In order to make video games, and especially if you are going to use Terrain Engine, you will need to be a programmer. Terrain Engine isn't just some package you download and then put on Steam and say "Look I haz game give me monies". It will take 1-3 years and a team of programmers and artists to make something that someone can play, using this engine or just about any other engine out there that does what TE does (using Voxel Farm it will take much longer because it doesn't work well with Unity right out of the box and the workaround for Voxel Farm to get into Unity is super bad and limits the developer - also has not very good support).
    Martin_H, Razmot and dyox like this.
  34. Tethys


    Jul 2, 2012
    Hi Blender007. I'm not a TE developer but I have used it for 2 years now and have a live game on Steam so can answer some of your questions.

    Not sure what the first question means. You get everything in c# scripts - the tree, grass, details processors, world generation, etc... There are managers for each of these that let the user drag and drop assets into the slots of populating the different biomes. It isn't as intuitive or easy to use as Gaia, but after spending time looking at the noises and the examples you can see how the managers are supposed to work together. There still isn't an extensive learning area that shows people how to get the most out of Terrain Engine which is a sore spot with us. We have used Terrain Engine for over 2 years and have had to guess our way through learning how to use most of it. Still waiting on that tutorial site with videos and documentation (there is a very brief document for helping people get started and a very brief tutorial built into the system to at least get you going). ;)

    Dyox uses an assortment of vegetation assets in the video to demonstrate how flexible the system is. We have used ManafacturaK Assets as well as a large assortment of other Tree and asset packs as well. Anything from ores, trees, stalagmites, Houses, Fences... just about any type of 3d geometry can be put into the world processors to be used to populate the terrain. Currently we are working on our newest Biome, Town, which places houses and various town props on a section of flat terrain. The same goes for Shaders - we don't use the shaders that come with Terrain Engine, and instead use RTP for the Terrain and Uber and Alloy for stuff for the world and for voxel modifications and types (Alloy has a great triplanar shader with great PBR support). Basically the sky is the limit for what you can use in TE - the Tree processors will handle placing GO's on the Terrain and details and grass processor for simple things and the world will look amazing. The main limitations are overhead - not using too many poly's, too many high res textures, basically the normal game optimization stuff we have to go through anyway. TE is highly optimized and very flexible so you should be able to use just about anything you find to make whatever you want. :) And yes, you can also randomly add stuff as well. Our players can build a house or fence or whatever, then place it on the Terrain at runtime, and remove any time they want. Dyox has provided a processor to handle placing items manually on the terrain, developers just need to come up with the method to place the item (TE handles saving and removing). Hope that helps and good luck on your projects!
    Last edited: Aug 14, 2016
    Fenris2, recon0303, Razmot and 3 others like this.
  35. KeepTrying


    Feb 23, 2011
    @Tethys i'm not going to explain my situation here, i'm just trying to get a deal with @dyox and as far as i can see, it's not gonna happen :confused: o_O
  36. Blender007


    Oct 31, 2014
    @Tethys thank you for all that information, you should be sales representative for dyox:D
    You are responsible for Astral Terra? the game seems promising! when an Astral Terra demo?:rolleyes:
    TerrainEngine lack of tutorials and a demo:rolleyes: before considering a purchase. But the biggest problem terrainEngine is its price which is too excessive,:( even if Diox is a good programmer with a good idea and spent a lot of time but it is no commercial! two marketing rules to remember; good communication and a price corresponding to the market (customers)
    Ngui $95 X 2941 = $279,395
    Playmaker $45 x 2562 = $115,290
    Ultimate Mobile $70 X 1176 = $82,320
    TerrainComposer $45 x 589 = $26,505
    In 7 months GAIA $45 x 440 = $19,800

    If a day is TerrainEngine asset blind $ 95 I'll be the first to buy it and make it publicity, and I'm sure TE asset will most sold over 4000 Unity license.:):cool:
    @dyox if you want I can make you video editing and computer graphics,@Tethys also if you want;)
    I am on skype to discuss (Blender007)
    Last edited: Aug 17, 2016
    recon0303 and Tethys like this.
  37. dyox


    Aug 19, 2011
    Using TE Tree LOD + Grass/Details Batching : 60 fps solid on all platforms, even low spec
    1 000 000 Trees (no speedtree) : 60fps solid. V10.8. Loadtime : 2.7 seconds for 8km²
    Sans titre.jpg
    Last edited: Aug 19, 2016
  38. Tethys


    Jul 2, 2012
    This looks amazing. Please include the setting for this scene in this next update so we can see how you're getting the vegetation this dense. We haven't been able to achieve that type of look and still keep a far draw distance so that when the player reaches the top of the hill the dont see the edge being drawn on the other side. Great job, looking forward to the update!
    Jeremy2300 and dyox like this.
  39. recon0303


    Apr 20, 2014

    I agree with what your saying but remember with more users also comes more support needed and the developers time to for the support. Which is an issue for some of them due to developing there tool, plus other work... So if I was Terrain Engine, it should be sold for alot more than $ 95 bucks.. With everything it offers... It should be up there and still indie friendly with a price tag of $195.00 Since it offers much more than tools like it... So he will need to hire help for support, or spend more of his time on support, and take away something else he may be doing.. Just a thought...

    At that price for a serious indie developers and solo, still should be able to afford it, and get him the customer base .. But again this is up to the developer if that is what he is after... I would buy it at either cost... No doubt as many others would .

    If it supports not only Unity, but Unreal.. I believe Voxel Farm has come down in price , since they where to high as well for most Unity developers. Voxel Farm is $295, and Pro is $ 995 That would be smart if terrain Engine did something like that. Just my thoughts.
    Tethys likes this.
  40. ikemen_blueD


    Jan 19, 2013
    I hope the low spec, this does not imply my pc though lol :D can't wait for the V11 :D

    Btw guys, Voxel Farm with full source code costs a lot more zeros, and not Unity fully performance support though. I'm one of TE customers. And, performance for such procedural scale, TE is one of the best.
    Last edited: Aug 20, 2016
  41. neoshaman


    Feb 11, 2011
    I'm interested in this product in the future, but I have somes questions. Can it handle planet type coordinate (inflated cube with deformation correction), if yes how does it handle poles, does it handle dual contouring, does it handle isosurfaces?

    Looking at your youtube channel, you also have announced Cityengine. Is there any work done on that project? what is the current state? does it generate city at local level or is it global?

    I'm prompt to ask now because I was working on years on solving gameplay problem in a game similar to no man's sky (how to handle scope and variety). Except more oriented toward space fantasy (think cosmocat, capitaine flame, cobra, albator, ulysses 31). The release of that game kind of hasten me to reconsider this project. The biggest problem I had to solve was to find a local algorithm that give the illusion of infinite persistent traveling NPCs that interact with each others and life across infinite family generation. The main constrain being that it must be tightly coupled with terrain generation (circulation in particular, ie generally city) for which I have solved the general case but now need to figure out a way to make it work with other type of algorithm (mostly cities, trade routes and lay out).
  42. Blender007


    Oct 31, 2014
    @recon0303 I agree with you terrainEngine must sell more than $95...
    Psychologically more than $99 sales is divided by 2, Over $199 divided by 4 and $299 divided by 8 ...
    I already VoxelFarm Créator $19. I expect promotion voxelFarm indie.
    but I prefer terrainEngine:) but not finances:(
    Maybe one day Dyox revise its price:rolleyes:;)
  43. Tethys


    Jul 2, 2012
    I agree, Voxel Farms pricing makes a bit more sense for Indie devs and people using Unity. TE and Voxel Farm both have their strengths and weaknesses. IMO, Voxel Farms Unity integration is a joke... it really isn't integrated into Unity. It is this goofy workaround system where you have to publish what you want from Voxel Farm, then import basically static stuff into Unity, with very little control over anything once it is in Unity, and very little options for customization or using your own assets on the fly. Ironically, while Voxel Farm has horrible Unity integration, they have better Documentation than Terrain Engine. :p And of course if you have good learning area for your technology, the devs spend less time doing support, which is a win win for the customer and the developer. Of course all that documentation sheds light on the fact that Voxel Farm isn't actually ready for Unity yet heh. :p A HUGE advantage TE has out of the box is that it is also put together with making GAMES in mind, and Dyox has provided many extra things that take into account game making, AI, world events, pooling, etc. Lots of helper scripts and other stuff that can get a developer up and running and prototyping pretty much instantly. Voxel Farm, not even close heh. We have both Terrain Engine, obviously as it's live in our game, and we have Voxel Farm. Terrain Engine is so far ahead of VF, in terms of being ready for games. In fact, the only thing at this point that I can see VF doing a little better than TE is the VF voxel tools. VF voxel building tools are just amazing - way ahead of pretty much any other voxel building game. When those type of tools come to Terrain Engine it's going to be a glorious day!

    On a side note about development - our company watched the development of TE and VF from scratch years ago. While it seemed the VF was ahead of TE in the early days, there seems to have been very little advances at all over at VF (They are just now getting around to figuring out water lol) while they made hundreds of thousands of dollars off of a few big studios. Dyox has blown away VF's development schedule on his own, selling a few copies a year for a much lower price. IMO Terrain Engine's development has come along so much further in 2 years than VF development, despite the fact that VF made so much money off of working with AAA studios, which honestly says something about the developer's dedication to the project.
    Last edited: Aug 23, 2016
    recon0303 and dyox like this.
  44. recon0303


    Apr 20, 2014

    Another thing that would help TE, is a website..... They should have a website..
  45. Tethys


    Jul 2, 2012
    Question for @dyox or another Terrain Engine user - Has anyone used TE with Ceto ocean system yet? It looks amazing, we have been thinking of getting it and now it is on sale of course. With what I know about TE's water system, and from the description on Ceto, the water generation seems similar, using grids. If we can just use their water shaders and scripts on a grid and have TE make the ocean that could be pretty good looking maybe.

    Ceto Asset:!/content/47203
  46. ikemen_blueD


    Jan 19, 2013
    I haven't got into that step yet. But, water is a tricky part, also interested to the best solutions. Ceto looks nice but quite heavy to me. Some other assets:

    DCG Water Shader!/content/51770

    PlayWay Water System!/content/47961

    AQUAS Water/River Set!/content/52103

    I'm planning to use Aquas for a simple water plane. Making waters blocks & fluid seems overkilled the whole performance overall.
  47. dyox


    Aug 19, 2011
    I do not recommend :
    -DCG Water : Bug with chunk lod system, refraction is not working correctly (and not usable with big ocean, when close to water, fps shut down to 50fps on gtx 1080)

    With refraction

    Without refraction
    -Ceto : Only a plane at given level, can not be used on mesh

    And i can now release a video request from a company XXX as example :
    It's version 10.6, requested 15 january 2016 ( 7 months ago )

    If someone have DGC owner email/post/username, i would be happy to send them where and why the shader bug. I'm not a client, i'm just reporting few TE users report.
    Last edited: Sep 6, 2016
    ikemen_blueD likes this.
  48. dyox


    Aug 19, 2011
    Finaly AQUAS Water is the best solution to use with TerrainEngine, very very beauty-full result in few seconds.
    Rendering : 1.5 vs 5-7ms for DCG Water, and better refraction,reflection,etc.
  49. dyox


    Aug 19, 2011
    For TerrainEngine's user using AQUAS Water :
    I've made a new reflection system sharing between multiple chunks all reflections.

    From 7Fps with AQUAS_reflection -> 130 FPS with this script.
    It detect all chunks with same MaxY vertex (gameobject filter) and share camera RenderTexture between them.
    I can now render 16km² of water with LOD and perfect reflection.
    The new TE version will also use a realtime reflection probe 32 -> 128. Resultat is now ultra realistic. with 500 batch/1M vertices.

    ++ New MeshData class, now inherit from IMeshData. If you're only using vertices,normals,indices (Smooth) for your terrain, it will store only 3 arrays, and if you use uv+colors(MarchingCubes/Cubic) : 5 arrays etc. Better loadtime, less garbage collector intensive.
    SList system optimized on grass/details/gameobjects etc.
    New FList system class.

    After few test with unity 5.4, i do not recommend :
    -Using SpeedTree
    -Using Instancing
    -Using DrawMesh
    -Using DrawMeshInstance
    -Using TextureArray (shader)

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using System.Collections.Generic;
    5. [AddComponentMenu("TerrainEngine/Water/Reflection")]
    6. [ExecuteInEditMode] // Make mirror live-update even when not in play mode
    7. public class TerrainEngineReflection : MonoBehaviour
    8. {
    9.     public Transform CTransform;
    10.     public MeshRenderer Renderer;
    11.     public MeshFilter CFilter;
    13.     #region Variables
    14.     public bool m_DisablePixelLights = true;
    15.     public int m_TextureSize = 256;
    17.     public LayerMask m_ReflectLayers = -1;
    19.     private Hashtable m_ReflectionCameras = new Hashtable(); // Camera -> Camera table
    21.     private RenderTexture m_ReflectionTexture = null;
    22.     private int m_OldReflectionTextureSize = 0;
    24.     private static bool s_InsideRendering = false;
    25.     public float m_ClipPlaneOffset = 0.07f;
    26.     public float BoundY = -1;
    27.     private int LastVertexCount = 0;
    29.     static public int LastFrame = 0;
    31.     public class YRenderTexture
    32.     {
    33.         public int Y;
    34.         public RenderTexture Texture;
    35.     }
    37.     static public SList<YRenderTexture> Textures;
    39.     static public RenderTexture GetTexture(int y)
    40.     {
    41.         for (int i = Textures.Count - 1; i >= 0; --i)
    42.         {
    43.             if (Textures.array[i].Y >= y - 1 && Textures.array[i].Y <= y+1)
    44.             {
    45.                 return Textures.array[i].Texture;
    46.             }
    47.         }
    49.         return null;
    50.     }
    52.     static public void AddTexture(int y, RenderTexture Texture)
    53.     {
    54.         for (int i = Textures.Count - 1; i >= 0; --i)
    55.         {
    56.             if (Textures.array[i].Y == y || Textures.array[i].Texture == null)
    57.             {
    58.                 Textures.array[i].Y = y;
    59.                 Textures.array[i].Texture = Texture;
    60.                 return;
    61.             }
    62.         }
    64.         Textures.Add(new YRenderTexture() { Y = y, Texture = Texture });
    65.     }
    67.     public void OnWillRenderObject()
    68.     {
    69.         if (!enabled || (object)Renderer==null || (object)Renderer.sharedMaterials == null || !Renderer.enabled)
    70.             return;
    72.         Camera cam = Camera.current;
    73.         if( !cam )
    74.             return;
    76.         // Safeguard from recursive reflections.
    77.         if( s_InsideRendering )
    78.             return;
    80.         if ((object)CFilter == null)
    81.         {
    82.             CFilter = GetComponent<MeshFilter>();
    83.             if (CFilter.sharedMesh == null)
    84.                 return;
    85.         }
    87.         if (CFilter.sharedMesh.vertexCount != LastVertexCount)
    88.         {
    89.             LastVertexCount = CFilter.sharedMesh.vertexCount;
    90.             CFilter.sharedMesh.RecalculateBounds();
    91.             BoundY = CFilter.sharedMesh.bounds.max.y;
    92.         }
    94.         if(Textures.array == null)
    95.             Textures = new SList<YRenderTexture>(1);
    97.         if (Time.frameCount != LastFrame)
    98.         {
    99.             for (int i = Textures.Count - 1; i >= 0; --i)
    100.             {
    101.                 if (Textures.array[i].Texture != null)
    102.                     GameObject.DestroyImmediate(Textures.array[i].Texture);
    103.             }
    105.             LastFrame = Time.frameCount;
    106.             Textures.ClearFast();
    107.         }
    109.         s_InsideRendering = true;
    111.         Camera reflectionCamera = null;
    113.         // find out the reflection plane: position and normal in world space
    114.         Vector3 pos = CTransform.position;
    115.         pos.y += BoundY;
    116.         Vector3 normal = CTransform.up;
    118.         int oldPixelLightCount = QualitySettings.pixelLightCount;
    120.         m_ReflectionTexture = GetTexture((int)pos.y);
    122.         if (m_ReflectionTexture == null)
    123.         {
    124.             CreateMirrorObjects(cam, out reflectionCamera);
    126.             // Optionally disable pixel lights for reflection
    127.             if (m_DisablePixelLights)
    128.                 QualitySettings.pixelLightCount = 0;
    130.             UpdateCameraModes(cam, reflectionCamera);
    132.             // Render reflection
    133.             // Reflect camera around reflection plane
    134.             float d = -Vector3.Dot(normal, pos) - m_ClipPlaneOffset;
    135.             Vector4 reflectionPlane = new Vector4(normal.x, normal.y, normal.z, d);
    137.             Matrix4x4 reflection =;
    138.             CalculateReflectionMatrix(ref reflection, reflectionPlane);
    139.             Vector3 oldpos = cam.transform.position;
    140.             Vector3 newpos = reflection.MultiplyPoint(oldpos);
    141.             reflectionCamera.worldToCameraMatrix = cam.worldToCameraMatrix * reflection;
    143.             // Setup oblique projection matrix so that near plane is our reflection
    144.             // plane. This way we clip everything below/above it for free.
    145.             Vector4 clipPlane = CameraSpacePlane(reflectionCamera, pos, normal, 1.0f, m_ClipPlaneOffset);
    146.             Matrix4x4 projection = cam.projectionMatrix;
    147.             CalculateObliqueMatrix(ref projection, clipPlane);
    148.             reflectionCamera.projectionMatrix = projection;
    150.             reflectionCamera.cullingMask = ~(1 << 4) & m_ReflectLayers.value; // never render water layer
    152.             reflectionCamera.targetTexture = m_ReflectionTexture;
    153.             //GL.invertCulling = true;        //should be used but inverts the faces of the terrain
    154.             GL.SetRevertBackfacing(true);    //obsolete
    155.             Transform RTransform = reflectionCamera.transform;
    156.             RTransform.position = newpos;
    157.             Vector3 euler = cam.transform.eulerAngles;
    158.             RTransform.eulerAngles = new Vector3(0, euler.y, euler.z);
    159.             reflectionCamera.Render();
    160.             RTransform.position = oldpos;
    161.             //GL.invertCulling = true;        //should be used but inverts the faces of the terrain
    162.             GL.SetRevertBackfacing(false);   //obsolete
    164.             AddTexture((int)pos.y, m_ReflectionTexture);
    165.         }
    168.         Material[] materials = Renderer.materials;
    169.         for (int i = materials.Length - 1; i >= 0; --i)
    170.         {
    171.             materials[i].SetTexture("_ReflectionTex", m_ReflectionTexture);
    172.         }
    174.         // Set matrix on the shader that transforms UVs from object space into screen
    175.         // space. We want to just project reflection texture on screen.
    176.         Matrix4x4 scaleOffset = Matrix4x4.TRS(
    177.             new Vector3(0.5f,0.5f,0.5f), Quaternion.identity, new Vector3(0.5f,0.5f,0.5f) );
    178.         Vector3 scale = CTransform.localScale;
    179.         Matrix4x4 mtx = CTransform.localToWorldMatrix * Matrix4x4.Scale(new Vector3(1.0f / scale.x, 1.0f / scale.y, 1.0f / scale.z));
    180.         mtx = scaleOffset * cam.projectionMatrix * cam.worldToCameraMatrix * mtx;
    181.         for (int i = materials.Length - 1; i >= 0; --i)
    182.         {
    183.             materials[i].SetMatrix("_ProjMatrix", mtx);
    184.         }
    186.         // Restore pixel light count
    187.         if( m_DisablePixelLights )
    188.             QualitySettings.pixelLightCount = oldPixelLightCount;
    190.         s_InsideRendering = false;
    191.     }
    192.     #endregion
    194.     //<summary>
    195.     // Cleans up all the objects that were possibly created
    196.     //</summary>
    197.     void OnDisable()
    198.     {
    199.         if( m_ReflectionTexture ) {
    200.             DestroyImmediate( m_ReflectionTexture );
    201.             m_ReflectionTexture = null;
    202.         }
    203.         foreach( DictionaryEntry kvp in m_ReflectionCameras )
    204.             DestroyImmediate( ((Camera)kvp.Value).gameObject );
    205.         m_ReflectionCameras.Clear();
    206.     }
    208.     private void UpdateCameraModes( Camera src, Camera dest )
    209.     {
    210.         if( dest == null )
    211.             return;
    213.         //sets camera to clear the same way as current camera
    214.         dest.clearFlags = src.clearFlags;
    215.         dest.backgroundColor = src.backgroundColor;
    217.         if( src.clearFlags == CameraClearFlags.Skybox )
    218.         {
    219.             Skybox sky = src.GetComponent(typeof(Skybox)) as Skybox;
    220.             Skybox mysky = dest.GetComponent(typeof(Skybox)) as Skybox;
    221.             if( !sky || !sky.material )
    222.             {
    223.                 mysky.enabled = false;
    224.             }
    226.             else
    227.             {
    228.                 mysky.enabled = true;
    229.                 mysky.material = sky.material;
    230.             }
    231.         }
    233.         ///<summary>
    234.         ///Updates other values to match current camera.
    235.         ///Even if camera&projection matrices are supplied, some of values are used elsewhere (e.g. skybox uses far plane)
    236.         /// </summary>
    237.         dest.farClipPlane = src.farClipPlane;
    238.         dest.nearClipPlane = src.nearClipPlane;
    239.         dest.orthographic = src.orthographic;
    240.         dest.fieldOfView = src.fieldOfView;
    241.         dest.aspect = src.aspect;
    242.         dest.orthographicSize = src.orthographicSize;
    243.     }
    245.     //<summary>
    246.     //Creates any objects needed on demand
    247.     //</summary>
    248.     private void CreateMirrorObjects( Camera currentCamera, out Camera reflectionCamera )
    249.     {
    250.         reflectionCamera = null;
    252.         //Reflection render texture
    253.         if( !m_ReflectionTexture || m_OldReflectionTextureSize != m_TextureSize )
    254.         {
    255.             if( m_ReflectionTexture )
    256.                 DestroyImmediate( m_ReflectionTexture );
    257.             m_ReflectionTexture = new RenderTexture( m_TextureSize, m_TextureSize, 16 );
    258.    = "__MirrorReflection" + GetInstanceID();
    259.             m_ReflectionTexture.isPowerOfTwo = true;
    260.             m_ReflectionTexture.hideFlags = HideFlags.HideInInspector;
    261.             m_OldReflectionTextureSize = m_TextureSize;
    262.         }
    264.         //Camera for reflection
    265.         reflectionCamera = m_ReflectionCameras[currentCamera] as Camera;
    266.         if( !reflectionCamera ) // catch both not-in-dictionary and in-dictionary-but-deleted-GO
    267.         {
    268.             GameObject go = new GameObject( "Mirror Refl Camera id" + GetInstanceID() + " for " + currentCamera.GetInstanceID(), typeof(Camera), typeof(Skybox) );
    269.             reflectionCamera = go.GetComponent<Camera>();
    270.             reflectionCamera.enabled = false;
    271.             reflectionCamera.transform.position = transform.position;
    272.             reflectionCamera.transform.rotation = transform.rotation;
    273.             reflectionCamera.gameObject.AddComponent<FlareLayer>();
    274.             go.hideFlags = HideFlags.HideAndDontSave;
    275.             m_ReflectionCameras[currentCamera] = reflectionCamera;
    276.         }
    277.     }
    279.     //<summary>
    280.     //Extended sign: returns -1, 0 or 1 based on sign of a
    281.     //</summary>
    282.     private static float sgn(float a)
    283.     {
    284.         if (a > 0.0f) return 1.0f;
    285.         if (a < 0.0f) return -1.0f;
    286.         return 0.0f;
    287.     }
    289.     //<summary>
    290.     //Given position/normal of the plane, calculates plane in camera space.
    291.     //</summary>
    292.     static private Vector4 CameraSpacePlane(Camera cam, Vector3 pos, Vector3 normal, float sideSign, float m_ClipPlaneOffset)
    293.     {
    294.         Vector3 offsetPos = pos + normal * m_ClipPlaneOffset;
    295.         Matrix4x4 m = cam.worldToCameraMatrix;
    296.         Vector3 cpos = m.MultiplyPoint( offsetPos );
    297.         Vector3 cnormal = m.MultiplyVector( normal ).normalized * sideSign;
    298.         return new Vector4( cnormal.x, cnormal.y, cnormal.z, -Vector3.Dot(cpos,cnormal) );
    299.     }
    301.     //<summary>
    302.     //Adjusts the given projection matrix so that near plane is the given clipPlane
    303.     //clipPlane is given in camera space
    304.     //</summary>
    305.     private static void CalculateObliqueMatrix (ref Matrix4x4 projection, Vector4 clipPlane)
    306.     {
    307.         Vector4 q = projection.inverse * new Vector4(
    308.             sgn(clipPlane.x),
    309.             sgn(clipPlane.y),
    310.             1.0f,
    311.             1.0f
    312.             );
    313.         Vector4 c = clipPlane * (2.0F / (Vector4.Dot (clipPlane, q)));
    314.         // third row = clip plane - fourth row
    315.         projection[2] = c.x - projection[3];
    316.         projection[6] = c.y - projection[7];
    317.         projection[10] = c.z - projection[11];
    318.         projection[14] = c.w - projection[15];
    319.     }
    321.     //<summary>
    322.     //Calculates reflection matrix around the given plane
    323.     //</summary>
    324.     private static void CalculateReflectionMatrix (ref Matrix4x4 reflectionMat, Vector4 plane)
    325.     {
    326.         reflectionMat.m00 = (1F - 2F*plane[0]*plane[0]);
    327.         reflectionMat.m01 = (   - 2F*plane[0]*plane[1]);
    328.         reflectionMat.m02 = (   - 2F*plane[0]*plane[2]);
    329.         reflectionMat.m03 = (   - 2F*plane[3]*plane[0]);
    331.         reflectionMat.m10 = (   - 2F*plane[1]*plane[0]);
    332.         reflectionMat.m11 = (1F - 2F*plane[1]*plane[1]);
    333.         reflectionMat.m12 = (   - 2F*plane[1]*plane[2]);
    334.         reflectionMat.m13 = (   - 2F*plane[3]*plane[1]);
    336.         reflectionMat.m20 = (   - 2F*plane[2]*plane[0]);
    337.         reflectionMat.m21 = (   - 2F*plane[2]*plane[1]);
    338.         reflectionMat.m22 = (1F - 2F*plane[2]*plane[2]);
    339.         reflectionMat.m23 = (   - 2F*plane[3]*plane[2]);
    341.         reflectionMat.m30 = 0F;
    342.         reflectionMat.m31 = 0F;
    343.         reflectionMat.m32 = 0F;
    344.         reflectionMat.m33 = 1F;
    345.     }
    346. }
    Unity 2016-09-09 01-32-00-19.jpg
    NeverLandFluidsFast4 2016-09-09 01-13-09-04.jpg NeverLandFluidsFast4 2016-09-09 01-11-54-42.jpg NeverLandFluidsFast4 2016-09-09 01-15-44-98.jpg
    Last edited: Sep 9, 2016
    dogmachris, Tethys and ikemen_blueD like this.
  50. ikemen_blueD


    Jan 19, 2013
    hi Thomas, so many thanks man, u just save my works for water part later :) Now, I can focus on something else. Happy coding!!!