The White Guardian

  • Content Count

  • Joined

  • Last visited

Community Reputation

1,693 Excellent

About The White Guardian

  • Rank
    Kopernicus Grandmaster

Contact Methods

  • Website URL
  • Twitter (Nope)

Profile Information

  • Location Planet Custos, Polaris Galaxy

Recent Profile Visitors

15,549 profile views
  1. The White Guardian

    [1.4.X] KS3P

    Result of my experiment: GOTTEM! KS3P works perfectly well! Here's the root of the problem: I wasn't forcing DX11. In steps, here's what my hypothesis entailed: 1. The shaders are built for DX11 2. I start KSP without forcing DX11 so it instead runs DX9 or DX10 or whatever KSP uses by default (I'm going to guess DX10 for the purposes of this explanation) 3. KS3P initializes the shaders. 4. Unity tries to apply the shaders, but finds that the shaders request DX11 yet are asked to run on a GPU offering DX10 at best due to the program, but Unity doesn't know this and assumes that this means that the GPU doesn't support DX11 at all. 5. The shaders are marked as incompatible with the current hardware and thus Unity tries to load the fallback shaders assigned to the "incompatible" shaders. 6. The post-processing shaders have no fallback assigned, thus Unity essentially reaches for a non-existent shader. 7. This GPU-side nullref is caught by Unity through instead applying the shader Unity always reverts to when it tries to use a non-existant shader: 'Hidden/InternalErrorShader', which produces a pink output. @jrodriguez outstanding work on the shaders, they work beautifully in DX11. The problem was that I didn't think it problematic to run DX11 shaders on a gpu forced to offer DX10 or DX9. Kinda like trying to run an application built for Windows 10 on Windows XP. I'll have to write a small patch to load non-DX11 shaders when not running DX11, then it should be good to go. This should effectively cover using DX11, OpenGL or both. Here's a screenshot taken minutes ago on KSP 1.4.1, running DX11, with very exaggerated effects. It also shows the in-game editor at work because yes, all those effects were configured in-game. (Side note: the editor is opened by first holding down '3', then pressing left alt. Definitely not optimal, will be changing this and making it user-configurable)
  2. The White Guardian

    [1.4.X] KS3P

    I have a hypothesis as to what might be going wrong with the current development build of KS3P. I'm going to do some quick testing as I've as of yet lacked the time to experiment with my theory. I'll get back to everyone ASAP.
  3. The White Guardian

    [1.4.X] KS3P

    Sorry for taking so long to get back to you, but I've lacked the time to work on KS3P as much as I would've liked. In any case I'll push my progress over to GitHub tomorrow first thing in the morning. Here's hoping you can find the tripping wire that seems to be hidden in the code.
  4. The White Guardian

    A beginner's guide to Kopernicus - The basics

    The key to the problem lies in the following: What this means specifically is that Kopernicus is trying to read a piece of data that has not yet been assigned a value. To illustrate what exactly is going on, think of it like this: let's define a variable storing a whole number (otherwise called an 'integer'), and let's call it 'myNumber'. In C# we would write: public int myNumber; Note that the above command only tells the computer to prepare 32 bits for storing a number contained in the 'box' with the label 'myNumber', but we haven't actually defined a value to it. As far as the computer is concerned, 'myNumber' could have a value of 4, or 2, or 491325, etc. Thus if we ask the computer to read the value assigned to 'myNumber' if we haven't yet assigned a value to it, the computer will point out that no value is given yet and thus retrieving data is impossible. This is essentially what the computer means by 'object reference not set to an instance of an object'. In the above context, the 'object reference' would be 'myNumber' since we'd be referring to the object 'myNumber', and since we haven't given it an instance of the data type 'int', the computer has to abort execution. In other words, imagine I presented you with a cardboard box, showed you it was empty, then closed it, before asking you to give me what is inside the box. Surely you'll respond with something among the lines of "but that's impossible, the box is empty so there is nothing inside for me to give to you." Your computer runs into the same kind of problem. I hope this explanation makes sense. Anyhow, now we can investigate what exactly caused the issue. From the specific error log, we see that Kopernicus notes the error occurred in the function 'Kopernicus.OnDemandStorage.LoadTexture', which leads me to suspect that Kopernicus is trying to use OnDemandLoading to load a texture assigned but fails to find it, hence trying to assign a non-existant texture, which would of course result in a reference to a non-existant (or non-instance of a) texture, which causes errors if KSP then tries to read it. Now we can find the context as to where in your config this error occurred. Specifically, what part of the config was Kopernicus trying to parse? Before the exception occurred, we read: This leads me to suspect that the following happened: 1. Somewhere in the scaled space section of your planet, Kopernicus fails to find a texture, and thus a reference to a texture is left unassigned. 2. When KSP then tries to use this texture to apply to the scaled space mesh, it tries to apply a non-existant texture and crashes. I suggest the following steps: 1. Please verify that the filepaths to the textures in ScaledVersion{ Material{ ... } } are correct. 2a. If they are not correct, correct them and try to run it again. 2b. If they are correct, delete the entire ScaledVersion{} node and its contents and see if it now loads. Your planet should appear like a deformed Moho in map view if it loads. If this happens, get back to me and we'll look into why exactly Kopernicus can't load your textures. 3. If, on the other hand, after deleting the ScaledVersion{} node the game still freezes, show me the .body file generated. In that case something more exotic is going wrong.
  5. I am trying to make planets for KSP with kopernicus, but where do I put my planet files? Do I just make a new folder in the gamedata folder and put them in there along with my textures?

    1. The White Guardian

      The White Guardian

      Hi! Sorry for taking so long to get back to you but I've been too busy as of recently to visit the forums as much as I would've liked.

      Anyhow, nail on the head! Inside GameData, create a subdirectory (can be any name) in which you plan to store all of your mod's files. That way, any potential user only has to drag-and-drop this specific folder from a downloaded archive into their instance of GameData for everything to run smoothly, besides the fact that it keeps everything nicely organized of course.

  6. The White Guardian

    [1.4.X] KS3P

    I'm starting the in-game testing phase, and I'm afraid I have to say that it may take me a very, very long time to figure out why exactly KS3P is flailing about quite so spectacularly. For some reason, enabling effects such as anti-aliasing result in an immediate pink screen, while other effects such as ambient occlusion result in log warnings claiming that KS3P is attempting to access a non-existent shader pass. The strange and for debugging purposes most infuriating thing however is that there is absolutely no report of any kind of exceptions. This leads me to suspect that the error occurs on the GPU and not the CPU, but since I have no knowledge in this field much less have any idea how to debug it I seem to be hitting a roadblock. @jrodriguez do you have any ideas as to what might be happening?
  7. The White Guardian

    [1.4.X] KS3P

    The KS3P in-game editor is almost ready for the next release. Only the color grading editor has to be finalized. All other effects already work perfectly. The profile selector isn't finished yet, but I wrote all the necessary logic to mostly automate that process. The in-game GUI should be done in a matter of hours. After that I only need one more day to finish up the last few bits of programming and then it should be good to go; ready to roll and better than ever! No, it's where KS3P lists all of the profiles that it has parsed and indexed. Essentially you can choose here which profile you'd like to use for each scene without having to dive into the configs and do it yourself. It currently doesn't take apart profiles. This section isn't labeled "Editor," the GUI labels it as "Setup," as it is where you configure KS3P in general. Sorry for the confusion. It is a single screen. Opening the in-game GUI shows a single screen, containing the options 'Setup' and 'Editor'. Selecting either of these redraws the menu instead of creating a separate window. You're always working with a single screen to avoid clutter. Also, I feel like renaming the button for the in-game profile editor to 'profile editor' rather than just 'editor'. It's really hard for me to describe the GUI with words, trust me when I say that it's really intuitive and self-explanatory. Oops! The 'return' button is in the top-left corner, the 'close' button in the top-right. That was a typo.
  8. The White Guardian

    [1.4.X] KS3P

    I've been working on KS3P's user inferface and I have to say, it's coming along faster than I expected. Currently the UI works as follows: - Spawning the UI results in an interface with two buttons: "Setup" and "Editor". - Pressing the "Setup" button currently redirects to a blank screen, but this will allow users to setup which profiles should be used for which scenes, and will even include a button that will write the changes to KS3P's config file. - Pressing the "Editor" button results in a screen containing a list of buttons, each redirecting to a blank screen currently, although each of these buttons will ultimately lead to an editor for a specific post-processing effect. In other words, pressing the "Edit Anti-Aliasing" button will result in a screen for editing the Anti-Aliasing settings of the Post-Processing profile currently targeted for editing. Furthermore, although the UI can be hidden by using the KS3P GUI key combo a second time, there's always an x-shaped button in the top-right corner which will also hide the GUI. Lastly, whenever you're viewing a screen that isn't the GUI's 'main menu', there will be a small button titled "return" in the top-right corner that will take you back one window. I expect to have the GUI finished tomorrow, or Tuesday evening at worst. After that, there's but a few small things left to fix before release. EDIT: I should also mention, I forgot to write parsers for deferred-exclusive post-processing effects such as 'screen space reflections' because I'd completely forgotten that KS3P now has the option to force a specific rendering path. I'll be adding parsers for those before release as well.
  9. The White Guardian

    [1.4.X] KS3P

    I've spent the last few hours teaching KS3P not just how to read config files, but how to write them too. It feels like teaching a dog how to do a somersault, then how to do a backflip. In any case, I have but a few tasks left to complete: - Implement most of the GUI (framework already in place, I just need to write the effect-specific windows) - Add the camera patching logic (should be an hour of work at best) - Finalize the config exporter (no ETA on that yet) @jrodriguez could you send me your DX11 shader fixes so I can compile them in preparation for release? EDIT: completely forgot about your earlier post where you linked to your GitHub. I'll be implementing your changes shortly with lots of thanks! @steve_v OpenGL should be fixed with the next release. @Nigel Cardozo you are always free to use KS3P with releases that it wasn't designed for, though at your own risk. Since KS3P uses very little of KSP's code however, it might actually run on outdated KSP versions so long as the Unity version matches.
  10. The White Guardian

    [1.4.X] KS3P

    I was a bit skeptical of my 'autoloader' so I've commented it out for now in favor of a more manual and incredibly more efficient parsing method. All in all it's a matter of hours before all loaders have received their much overdue overhaul. The main mod is about 60% done at this point, 94% if I don't count the loaders. The GUI though is at a mere 20%, as there's still a lot of work to be done there. Rest assured though I'll patch the remaining problems and have it packed up soon. It should take a week to finish at worst. Since I'm about to have a lot more free time on my hands, development speed should accelerate greatly. Of course, before release I'll ensure the GUI is working properly by giving it its first test, that is creating a significantly less hideous default config setup. KS3P can now also tweak some rendering data, for example shadow distance, shadow quality, shadow resolution, field of view, HDR, MSAA and the camera's near clip plane. KS3P can also force the camera to use a different rendering path, but beware. Games are usually built around their rendering path, and I suspect that any shader SQUAD wrote for the game is built for Forward rendering and thus won't work with Deferred. The objects should still display just fine, Unity will just continue to render them through Forward rendering. I've added it only to give greater artist control; I cannot stress enough the importance of having at least a basic understanding of Unity's rendering paths before attempting to tweak this feature. Anyhow, I've made some more changes to the way configs are loaded: configs are no longer case-sensitive, and KS3P skips underscores when reading, thus use whatever style is more convenient for you. Note that this only applies to the names of nodes and values, not the values assigned to values. Assigning "_5" to a field expecting a number will still give an error. Speaking of which, previously encountering any kind of parsing error would force KS3P to shutdown for safety. Now, whenever KS3P parses a config node, it generates the effect's default settings, and tweaks only the values specified by the given amount. Thus you need not explicitly assign data to fields if you can leave it at its default settings. Should one assign data to a specific field, KS3P will assign the user-defined value only if it can be correctly parsed. If it fails to parse something, it makes a note in the log files and leaves the field unchanged (IE at its default value). Thus if your config results in a post-processing setup that looks a bit funny, check if any of the values failed to load. But hey, a slightly off-looking result is better than KS3P having an error-phobia, no? (Note, the result should be "off-looking" only in the case of a minor config error, it's not like KS3P is going to display funky results all the time) All in all it shouldn't be long until the next update.
  11. The sad thing about giving Fonso such an atmosphere is that currently EVE scaledspace cloud layers intersect very harshly with the scaledspace mesh. It'd require an edge-detecting shader. I can try writing something like that, but it's something I have never done before so I cannot guarantee it'll work. It's going to require a custom DLL to implement perfectly; good thing I've been practicing my C# for the past several years...
  12. The White Guardian

    [1.4.X] KS3P

    Although it'll require thorough testing before I dare consider giving it the stamp of approval, I've finished a piece of code that should make it possible to parse any kind of class from a config node without writing an explicit parsing method. Instead the computer will summarize all 'properties' in a given class (or struct) and attempt to gather the equivalent of this property from the config node, in other words a property named, say, 'kerbalCount' would require a config value to be present named 'KerbalCount', although the choice of capital letters, spaces and underscores is now completely arbitrary as KS3P will filter out both spaces and underscores and convert the string to lowercase only to allow for many different writing styles. This method is significantly less memory efficient than the previous parsing methods, but given the incredible speed at which computers operate, the difference in loading time is proportional to the amount of profiles loaded, which is usually quite low. The benefit of this method is that it significantly increases development rate as I can now create custom post-processing effects without having to spend hours writing a loader - that is, assuming the code works. This'll allow me to rapidly convert KS3P to the 2.0 Post Processing stack once the fist 1.6 release is out. Speaking of custom post-processing effects, if anyone has a post-processing effect that they'd like to see added, be sure to let me know and I'll take a look.
  13. ...I simply lacked the time and enthusiasm to do so. Right then. Should I add clouds for the current version, or wait until @Mythical Donuts releases an updated version?
  14. The White Guardian

    Kopernicus PQS Canyons?

    It is possible theoretically through noisemods with inverted height, but they don't leave a great result tbh. I could write a custom PQSMod for the task, but it'd require some experimentation. Three solutions I can think of: 1. Modifying an existing noisemod (think of floatcurves or brightness/contrast filters) 2. Creating a new noisemod 3. Using a fractal-based system. This'd require creating a repetitive equation for complex numbers, then generating complex numbers based on, for example, latitude/longitude and analyzing how quickly the series converges. The first solution isn't the best, since it requires on mods that weren't made for the task. The second solution is the best, but takes the greatest amount of skill, and the third solution, although giving the most control, creates a very repetitive pattern and isn't very performant. I'll do some testing and let you know what I find.
  15. The White Guardian

    [1.4.X] KS3P

    The in-game editor is coming together more nicely than I originally expected. The framework should be finished at this point, and tomorrow I'll begin implementing classes for each window. This new GUI usage also leads to the following announcement: post-processing bundles are now obsolete. The new workflow is as follows: 1. Simply write post-processing profiles, each for a specific KSP scene. 2. In-game, use Alt + 3 to open up the KS3P GUI. 3. You should be able to choose between an editor and a 'profile selector'. Simply pick the latter. 4. Here, you should find a list of currently supported scenes, with each scene showing the name and author of the profile currently used for that specific scene. Simply press the button corresponding to the scene you want to change, select the profile you want to use for that scene, and hit 'apply' to preview the changes (note: KS3P will attempt to refresh the camera only if applicable, IE if you change the target bundle for the VAB while you're in the tracking station, hitting 'apply' will have no apparent changes). 5. If you're happy with the changes, hit 'save' to have KS3P write your preferences to its config file. As for the editor, I'll reveal the following: - It is possible to backup the currently WIP post-processing profile rapidly using Unity's JSON-formatting. Never will KS3P attempt to overwrite a file that it didn't generate. Once you're happy with the changes, give the profile a name and hit 'export'. This'll generate a config file for you in KS3P/Export. - KS3P is very lenient when it comes to describing a scene. It'll automatically filter out spaces and capitals, in other words "Main Menu" and "mainmenu" are equally valid. On top of that, KS3P now has a vast array of keywords that you can use to target a specific scene, for example, you can target the main menu scene with "main menu", "menu", "title", "titlescreen", etc. If you're unsure as to what keywords are usable, KS3P's config file stores a list of keywords for each scene. You can also add your own identifier keywords by creating a config file (don't overwrite KS3P's builtin keywords for compatibility's sake). The logic for this isn't finalized yet; more details to come. - For safety and performance, KS3P won't immediately attempt to recompile the current editor status into a post processing profile for preview, this has to be done manually with the press of a button. If the result was successful, KS3P will notify you in the 'console' tab of the editor (this opens up a logging console unique to KS3P to avoid cluttering with KSP logs, although KS3P still reports to the default console as well), and this is precisely where it'll also inform you should it fail to compile. It should describe precisely where and why the error occurred. - It is possible to, when writing a bundle, either include or exclude scenes. For example, excluding the main menu scene will make it impossible to select it for the main menu scene in the KS3P editor. This is to allow creators to make a failsafe system: a profile with a depth-of-field setting designed for IVA might look like Jeb has licked the lens again should you use it inside the VAB, for example. All in all I'm trying everything I can to ensure the editor is as user-friendly and easy-to-use as possible. @jrodriguez Thanks for the heads up! Though implementing that will require a complete rewrite of the parsing classes which takes a long time to do, so I'll leave that on the planner for now.