Disclaimer

This is MY Viewer, i decide which feature i want to add and which to remove, i share this Viewer to show the world that user base size is not important, i do rate quality by effort, thought and love put into the project, not some rough estimated numbers. I consider feature requests only if i you can name proper valid reasons i can agree on. It is my unpaid time i'm putting into this project, i'm not here to cater to every Joe's desires.

Friday, February 5, 2016

Black Dragon Viewer - Update 2.4.4.9 "Learn To Move"

Redownload 2.4.4.9-2, it contains a change that makes the Viewer export the controls after loading the defaults, allowing you to rebind them without having to press export first.


Last update saw the first iteration of fully rebindable keys, this update is the second iteration and will bring many aspects of this feature close to what i initially wanted them to be.

Despite the overly negative feedback based on ignorant, selfish needs which sabotage my work and ignore my plans which i clearly explained in my last update post, i decided to continue and improve on this initial barebone implementation. Thanks for 0 constructive feedback, good thing i don't give a shit and have a finished plan for my feature before i release it, making feedback completely obsolete anyway.



Controls



This update re-enables arrow keys for movement. They are bound as alternative control set, that means you can use both AWSD and Arrow Keys, i would highly recommend you start using AWSD as i'm not going to take any further steps to support an inferior control set. There is no reason to use arrow keys, ever, especially NOT as left handed person, you are crippling yourself. Your subjective opinion does not matter here.



Interface



I added a bunch of buttons to bind a secondary key to any action in almost all modes, some do not have an alternative binding available because it does not make sense having one, why would you want to have 2 keys for opening chat for example, same could be said for the entire alternative binding thing... but lets not get into that.

Additionally there are now trash buttons that allow you to unbind one binding selectively, without having to unbind and redo them all.

I also added a button to reload the default controls shipped with the Viewer.


The bind key dialog will now appear in the center of the screen, instead of somewhere in the left upper corner, making it less of a tedious mouse raping activity to rebind lots of keys.

I have fixed an issue in which the Sound & Media tab in preferences vanishes after closing the preferences floater a few times.

I fixed the set voice key dialog using the same floater as the rebind key dialog and made it appear in the center as well.



Viewer



From now on the Viewer will save your custom controls file into the user settings folder which hopefully fixes you being unable to save them due to missing writing permissions. Don't ask me how you managed to not have writing permissions in your Viewer folder, you broke it, not me, i fixe... worked around it for you.

The Viewer will also attempt to load your custom bindings first, failure in loading your custom bindings will result in the Viewer loading its defaults, failure in loading these as well will result in having no controls at all as opposed to simply crashing.

I fixed an issue in which the Viewer bound the last internally bound key to all upcoming empty key slots, resulting in one key doing pretty much everything that was previously not bound.



Changes



2.4.4.9


Added: Ability to selectively remove one bind.
Added: Ability to reload the default controls.
Added: Ability for the Viewer to have a seperately saved custom binding set apart from the default it is shipped with.
Added: Ability to bind a secondary binding set.
Added: Arrow Keys as secondary binding set.
Added: Load Default Controls button to Keybindings preferences tab.
Changed: Moved saved bindings to user settings.
Changed: Moved the default controls.xml file to the app settings folder.
Changed: Made the Viewer try loading the custom bindings first and fall back to the defaults if no custom bindings are found.
Changed: Stopped the Viewer from crashing when no file is found.
Changed: Stopped the Viewer from crashing when binding a key fails for whatever reason.
Changed: Don't use the same bind key dialog for setting a voice key.
Changed: Open the "Bind Key" dialog in the center of our screen instead of the upper left corner.
Changed: Version to 2.4.4.9.
Changed: Background color to red-orange to match the loginscreen background video.
Fixed: Bug in which the Viewer bound the last retrieved key for all empty coming bindings.
Fixed: Sound & Media tab vanishing after closing preferences a few times.
Fixed: Select Voice Key floater not working properly.
Removed: Some old keybinding code.

Tuesday, January 26, 2016

Black Dragon Viewer - Update 2.4.4.8 "Binding Keys"

Please make sure you downloaded 2.4.4.8-2 it contains an important fix for vehicle controls. If not, go download it and install that one.




Feature Highlight


As the update label suggests, this new update focuses primarily on binding or rebinding keys, in other words: Remapping Controls.

That's right, the feature that has been missing for over 13 years now. It is finally coming into Second Life, at least a small part of it, my userbase. I have worked the past few days up and down to get this feature up and running as it is right now. It is pretty "basic" at the moment and only allows binding one set of controls for pretty much all controls available, it is not possible to bind alternative controls yet but will be soon.

It works pretty straight forward, you click the [set key] button, popping up a small window asking you to press the key you wish to set for this action, you can then choose to add modifier keys such as CTRL, ALT and SHIFT in any possible combination, when done, press "Bind" and that's it.

To ensure it worked properly i had to remove the internal code that removed doubles, that means you can bind all actions to one key, which will result in that key probably doing a lot of funky things, please be aware of that.

Additionally there are two more buttons, "Unbind All" which does exactly what it says, unbinds all controls locally without saving it - and "Export" which manually saves your current bindings to the desired file's name, which is "controls.xml" right now until i add loadable presets. I used these buttons for many hours of debugging, be careful with these as they might break something in a case i have not yet managed to reproduce.

By far the biggest downside of this change is that all controls have been unbound and completely rebound from the scratch, it might be possible that i missed some, additionally there will be no more Arrow Key controls, the controls are now by default AWSD as they should be.

Here's an overview of the new controls:

AWSD - Move left/forward/backwards/right
Q/R - Rotate left/right 
Space - Jump/fly up 
C - Crouch/fly down
X - Stop movement
F - Toggle fly mode
Enter - Start chat





User Interface


I've re-added the "Keybindings" tab to the preferences floater, it contains all the new stuff you will need to rebind your controls.

I've also changed a few german translations to better match the new preferences layout.

I've fixed the inverted "Letter keys are used to" option, it should behave properly now.

I've added a Freeze World menu entry to the main menu, it can be found in: Dragon - Useful Features - Shortcuts - Freeze World. (Ctrl + Alt + F)



Graphics


I've made some changes to the Tone Mapping defaults, it seemed like i forgot to change them, that or i made more tweaks to it later, after i made my last tweaks. You'll have to revert the Tone Mapping settings to default with the [default] key if you've touched the sliders at least once.

I've also made some changes to the way shadows and SSAO are softened, for the better i hope, they should be softer than before while projected light shadows shouldn't be over-blurred anymore.



Blog


As you may have noticed (or not) i have made some changes to the blog, i felt that it was time to work up some parts of the blog, namely the download link which now always refers to the "pre-download" page which will link you to all important information before downloading the Viewer, hopefully reducing the "i can't see anyone" question i keep seeing a lot lately.

From now on you won't find a download link anymore in my update posts, only the sidebar will now contain the download link. I'm currently deciding if i should remove the sidebar download link and only have a download link in my blog to force people to look into the update posts.

I'm also trying to clean up my writing a bit more, making it clearer what i want and what i've changed.



Snapshots










Changelog


2.4.4.8


Added: Ability to remap almost all controls in the UI, unbind them, export them with a given name and load them on start.
Added: Freeze World shortcut menu entry.
Fixed: Wrong translation for the mouselook invert option.
Fixed: Inverted "Letter keys are used to" option.
Changed: Tone Mapping defaults, brighter.
Changed: More tweaks to SSAO/Shadow softening.
Changed: Ignores to allow commiting changes to the character folder.
Changed: Display prefs XML cleanup.
Changed: Set the default controls file name to "controls.xml".
Changed: Disabled Keyboard Layout options.
Removed: Shortcut from Debug Avatar Textures.

Sunday, January 3, 2016

Black Dragon Viewer - Update 2.4.4.7 "Occluding Ambience"

ATTENTION: 
I highly recommend you press the default buttons for all SSAO options to make sure they match the new defaults.

First update of 2016.



Let's start this year with revisiting Screen Space Ambient Occlusion (SSAO) shall we? I made some tweaks to the blurLight shader, overall increasing the smoothness of SSAO without impacting framerate negatively. Also fixed is the weird case of light being blurred twice (it's in the LL Viewer too and explains why shadows are so horribly overblurred), that means less blur on shadows, crisper shadows and most importantly projector light shadows are not ultra blurry anymore, they look fine again. While doing some tweaks to the light blurring i also fixed the ability to control shadow blur on distance and SSAO blur, both work now. These changes were necessary as i removed the ability to switch between Tofu's softening kernel and the default LL one, Tofu's is now default and cannot be toggled anymore, good riddance shitty quad kernel!

I used the time jumping around between shader files to do a little... comparison between original LL style look of graphics and my most current Black Dragon style graphics. I reverted all my tweaks, all my debugs, removed all changes, swapped my shader files with those of LL and brought all my visible graphic features on par with those of LL to show you an example of how different both Viewers look in their "recommended" default settings.

Linden's Original

Black Dragon's Default

Note: I recommend using "Custom" Tone Mapping and "Linear" Color Correction.


Also in this release is an updated layout for the Machinima Sidebar which now matches the preferences layout.

Fixed are also a few little layout inconsistencies as well as an issue with the Landmark Profile buttons which didn't enable.

For Adeon i also included my Freakangels 5 Windlight sky preset which i often keep using for a lot of pictures in modified form obviously, the original Hippotropolis Windlight sky preset which i used for the loginscreen video is also included in case you want to see it for yourself, the last is Insilico 4 which i used quite a few times for the SIM Insilico, the old loginscreen image for example, again modified for whatever shot i'm taking. The actual graphics preset i used for the video can be found here on the forums.

Below are some snapshots, showing my Avatar in pieces and funny experiments with the SSAO and projected light blurring.


Snapshots:










Changelog:


2.4.4.7


Added: RenderSSAOBlurSize Debug option to control ssao softening.
Added: Tweaks to blurLight shader, allow SSAO and Shadow smoothening controls.
Added: SSAO Blur Size slider to Machinima Sidebar.
Added: Freakangels 5 Windlight preset.
Added: Insilico 4 Windlight Preset.
Added: Hippotropolis Login Screen Windlight Preset.
Changed: Chat Preferences title bar length.
Changed: Much enhanced SSAO, smoother, darker.
Changed: Machinima Sidebar layout, applied Display panel buildup.
Changed: Version to 2.4.4.7.
Fixed: Shadows and SSAO being blurred twice.
Fixed: Distance Blur not working. Broke Shadow Gaussian and Blur Size for it.
Fixed: Control buttons in Place/Landmark Profiles not working.
Fixed: SSAO Blur Size slider in Display Preferences.
Removed: Softening Kernel options, they are no longer used.
Removed: Unused code.

Tuesday, December 29, 2015

Black Dragon Viewer - Update 2.4.4.6 "Preferred Preferences"

Today i'll release the last update of this year.


This update's main topic will be the preferences panel which has undoubtedly become a bit... of a mixed chaos. While the display preferences tab has gotten quite some upgrades and consistency changes, all the other panels were left out... until now.

I spend quite some hours doing some consistency changes to all the other preferences panels, swapping out dropdowns for radio buttons, making sure checkboxes have 0 pixels padding to the one above, changing all title colors, rewriting some labels and generally changing the layout to that of the display preferences panel, including the addition of a huge bunch of "default" buttons for all sliders as well as the ability to write the number directly, there are still a few exceptions like the general tab which has dropdowns due to coding reasons, i will be swapping out as many things as possible in future updates to make sure the preferences UI becomes as simple as possible by only using a very limited set of UI widgets that everyone should be able to understand easily, a nice side effect of this is the opportunity to add more "danger" and "default" indicators to make it even easier to quickly identify where problematic options might have broken something for you.

Here's an example of how the panels have changed:




Another obvious change you will most likely notice immediately is the reactivation of the login screen videos, coming with a new video, as always.

Fitting to the end of the year, the name of this new video is "This is Black Dragon - 2015", it could have been "was" but then again it would be unfitting for the time it was uploaded at, still in 2015. You can watch the video here as well, in full HD and in 60 FPS.



You will notice some other minor changes and probably some bugs, report me any you can find, the biggest misc addition you might notice is the ability to right click rigged meshes again, hooray for that, the camera flying off into the distance should be fixed in this version.

All other changes mostly include merging up with the latest Linden Release code and the Maintenance code which includes a tiny change to icon downloading that should hopefully delay the appearance of the famous "Texture Trashing" problem until there's a proper fix for it.

This update was suppose to include the Bento Project, for those who don't know, it's the extended skeleton with additional bones for wings, face, fingers and so on. I was on a working version at the meeting that was held right after this Project was announced, sadly i was personally asked not to include Bento in my Viewer early on and on the possibility of my Viewer getting removed from the TPVD or worse, getting blocked alltogether or even my account getting locked, i chose to not include it. If you want a Bento Viewer that is not the official one you will have to use Cool VL Viewer. I asked for an explanation as to why this would be a problem, i didn't get any specific answer on that. All i can say is: My Viewer does not support mesh upload in any form, therefor the only thing my Viewer could do with the Bento Project code included is... watch other people... with fancy graphics. I chose to exclude mesh upload a long time ago because i do not want people to upload with a Viewer that is not the official one simply because i do not want people to upload something that could look and work differently on the official Viewer and therefor for everyone, i don't want to be responsive for broken or "specific" content released upon the grid. There was/is already a discussion about LoD's, Mesh Uploads and Firestorm that looked like Firestorm could be held responsive for allowing Mesh Uploads with their possibly different handling of LoD's in conjunction with Settings. Someone saying "because of your different graphic settings creator X Y and Z are creating content that looks broken or causes framerate issues for everyone, including yourself" is the last thing i want.


Snapshots:







Changelog:


2.4.4.6


Changed: Notifications Preferences panel layout, applied Display panel buildup.
Changed: Browser Preferences panel layout, applied Display panel buildup.
Changed: Camera Preferences panel layout, applied Display panel buildup.
Changed: Chat Preferences panel layout, applied Display panel buildup.
Changed: Controls Preferences panel layout, applied Display panel buildup.
Changed: General Preferences panel layout, applied Display panel buildup.
Changed: IM Preferences panel layout, applied Display panel buildup.
Changed: Privacy Preferences panel layout, applied Display panel buildup.
Changed: RLVa Preferences panel layout, applied Display panel buildup.
Changed: Sound Preferences panel layout, applied Display panel buildup.
Changed: Colors Preferences panel layout, applied Display panel buildup.
Changed: Interface Preferences panel layout, applied Display panel buildup.
Changed: Viewer Preferences panel layout, applied Display panel buildup.
Changed: Restored my own Notification floater layout.
Changed: Made show/hide Device Settings code more dynamic for future UI changes.
Changed: Reactivated Experimental Login Background Videos again.
Changed: Login Video to my latest one.
Fixed: Device Settings falsely opening when they should close and vise versa.
Fixed: Low level German UI label fixes to better match the new preferences layout.
Fixed: Viewer not starting up anymore after merge.
Fixed: Compile errors and reverted the file panel face back.
Fixed: More compile errors.
Fixed: Group count display missing.
Merge with Linden Release
Merge with Maintenance
MAINT-335 FIXED Avatar hangs in space after cancelling teleport
MAINT-884 FIXED Spanish Mundo > Acerca del terreno > Opciones: overlapped texts
MAINT-906 expiration time gets zeroes
MAINT-909 FIXED Opening a notecard with the same name as one that is already open does not work
MAINT-925 FIXED Objects called "Second Life" are unclickable & unmuteable via local chat
MAINT-933 FIXED [PUBLIC]Show Land Owner color overlay only visible where there is water when rendering of Lights and Shadows is active.
MAINT-957 WIP Double-click Auto-pilot activates for clicks on UI elements, HUDs, some right-clicks
MAINT-1017 FIXED Disable checkbox during saving process to avoid glitch.
MAINT-1109 Toggling graphics options causes viewer memory to increase, eventually causing the rendering pipeline to fall over and crashing the viewer
MAINT-1274 FIXED Light texture picker snaps back to initial choice
MAINT-1390 FIXED Top colliders floater reopens itself if it was closed at once after opening
MAINT-1401 FIXED Pressing 'Cancel' button in 'Color picker' dialog changes color of prim to the previous
MAINT-1459 For Sale accordion overlaps Estate accordion in Place Profile panel
MAINT-1588 FIXED Square fonts in OSX mountain lion
MAINT-2130 FIXED Update Tools floater after loosing selection.
MAINT-2215 Estate tools Apply button remains available after it is clicked.
MAINT-3491 FIXED If ALM is enabled while in wireframe mode, disabling wireframe mode results in a black screen.
MAINT-3568 Mac OS X, ALM, Full Bright, Shininess
MAINT-4018 Improvements to icon fetching.
MAINT-4260 FIXED Animated agents at high altitudes randomly show up at 0,0,0
MAINT-4360 (Setting LogTextureDownloadsToSimulator causes a viewer crash)
MAINT-4483 (Mesh uploader allows Low LODs to have more triangles than High LODs)
MAINT-5064 FIXED (Mesh upload attempt causes viewer crash) (replacing BBox generation)
MAINT-5268 (Rotating an object that's used as grid reference goes crazy)
MAINT-5443 FIXED Appearance menu does not display gestures in outfit
MAINT-5416 FIXED Cannot right-click a rigged mesh that's worn
MAINT-5464 FIXED Do not add badge to links that have a port number specified.
MAINT-5478 FIXED Keep history according to calendar days and don't completely remove events while changing threshold.
MAINT-5488 ADD FIX [Experience Tools] Opening an experience compiled script in an object in an adjacent region fails to show the script is compiled with an experience in the script editor.
MAINT-5495 FIXED Drag and Drop no copy items from object contents to inventory creates multiple pop ups
MAINT-5498 LLUrlEntry regex refactoring
MAINT-5533 FIXED The fragment part of an URI is only shown if it contains a query part as well.
MAINT-5547 FIXED errors when texturing a linkset "Unable to add texture. Please wait a few seconds and try again."
MAINT-5548 FIXED Don't update snapshot when resizing Viewer if snapshot floater is closed.
MAINT-5556 FIXED Active listing folder stays listed, with empty Version folder
MAINT-5584 FIXED On voice disabled parcel or region, speak button remains disabled in ad-hoc and group voice calls - you can hear but not speak.
MAINT-5619 : Viewer seems to parse LSL syntax file three times, has warnings
MAINT-5670 FIXED should not be parsed in expandable textboxes
MAINT-5678 FIXED Materials with spaces in name import with truncated names
MAINT-5688 FIXED Viewer crashes when user in DnD calling to another user also in DnD
MAINT-5728 fix for dae uploading crash
MAINT-5738 FIXED If "Always Run" is enabled, camming is broken when sitting down.
MAINT-5742 FIXED Appearance window progress indicator spins after changing to an identical outfit
MAINT-5743 Fixed Remove gpu_table and references to it from viewer packaging
MAINT-5753 FIXED Viewer crashes when opening a texture from object contents
MAINT-5755 FIXED Activating Show Avatar Complexity disables all llSetText (hovertext) until relog
MAINT-5758 FIXED "Ban Member" from the group chatters list context menu
MAINT-5756: Unicode characters in online notifications get stripped
MAINT-5759 FIXED URL links in the UI with non-English characters, diacritics, don't get parsed correctly.
MAINT-5760 Save favorite landmarks after renaming
MAINT-5762 FIXED Groups - Message about number of groups you can join does not recognize that your account is premium
MAINT-5796 FIXED Double clicking on anything in COF removes it from your avatar - including skin, shape, hairbase and eyes - results in bakefailed avatar
MAINT-5807 WIP - initialize some uninitialized members of LLModelLoader.
MAINT-5821 FIXED Giant spew of XUI messages in SecondLife.log
MAINT-5829 FIXED About Land floater defect
MAINT-5837 FIXED Hovering text is displayed when the avatar is blocked
MAINT-5846: Change media roll of begining to 10m
MAINT-5862: Change the Linux wording in the ToS floater per Grumpity.
MAINT-5966 - file download failures need feedback
MAINT-5870 FIXED Texture mapping drop down overlaps color thumbnail.
MAINT-5871 FIXED Duplicate Calling Card created for each friend on login.
MAINT-5876 FIXED Facial expressions & Preview while not working in many languages when importing animations
MAINT-5879 Block incoming blind teleport requests from non-friends
MAINT-5892 FIXED Alt camming on rigged mesh makes the camera judder, get stuck or fly off into the distance.
MAINT-5893 FIXED Issue with muted agent's attached lighting still rendering.
MAINT-5901: Make avatar auto pilot work correctly through transparent objects
MAINT-5903 FIXED Resident's name is not automatically filled into the resident chooser for the group invite
MAINT-5909: Enable unicode text input on mac and feed that directly into the viewer.  Windows fixes still required.
MAINT-5925 FIXED Viewer allows you to locally retexture anyones content including attachments.
MAINT-5933 FIXED When a new library avatar folder is created in Clothing folder, folder rename is grayed out until relog
MAINT-5934 FIXED Have to open About Land twice to get parcel ban timings to load in parcel ban list when banned names are not cached
MAINT-5940 FIXED Viewer group info widget query cleanup
MAINT-5941 [Valhalla] Default flash to on by default (reverts MAINT-5773)
MAINT-5956 FIXED Certain dae will not upload with the new importer code
MAINT-5961 FIXED Incorrect position of "Delete all" button within "Notifications" floater
MAINT-5971 FIXED Creator and Owner are missing in Object profile
SL-192 Edit Experience Profile shows up once an Exp is acquired
WOLF-300: Try using a smaller data volume for LLLeap tests on Windows.

Monday, December 14, 2015

Black Dragon Viewer - Update 2.4.4.5 "Going Places"

Fixing the broken, protecting the fixed, i am the terminator of... bugs. *crunches a bug under his feet*



This time i got some work done on the places floater which i broke (intentionally) in the last release, it was in a catastrophic state before i broke it, the broken version was actually the good one, i just couldn't let you see it... you can thank me later.

The aforementioned fixes for the places floater were basically everything that were delaying this update so i had to get it done... even though it was a total pain, layered layers for layering layered layers in layers... you get the idea...



This update is really important as it also contains 2 crash fixes, one for a random crash i was experiencing (and you most likely too) due to leftover code that triggered a nuclear chain reaction in the Viewer, making it blow up violently as soon as certain avatars, objects, prims... whatever else it was, came into your draw distance, the other one for a crash 100% reproducible whenever you right-click while in either zoom/pan/orbit mode in the tools floater (build window) or when in object view mode in the camera controls floater, the camera controls floater thing was really tough... it took me just 50 builds to figure out a proper way to do it that works, as always the solution was as simple as it can get, so simple i would have never found it, hooray for having a nose for things like this.

Next up were the broken values for Avatar Rendering Complexity introduced in the last update, i'm sorry for that, it's the reason probably EVERYONE is always just appearing as jellybaby (or not at all), when merging with automerge i didn't see that the LL Viewer sets a default value for the new ARC debug, it was 200 because the LL Viewer sets the ARC limit depending on your general graphic preset which my Viewer doesn't have anymore, i raised the limit to the proper value of 120000, that means the probability of your friends being derendered is lowered by approximately 15%. Why only 15% you ask? because your friends are most likely resource hogs and have a much higher ARC than 120000.

This needs some explanation, first off you should read the Avatar Rendering Complexity wiki page LL made for this feature to get an idea what this actually is. Basically every avatar's "weight" is calculated, it depends on how much attachments he wears, how many prims it has, how many textures, which features does it use (glow, fullbright, materials etc) and so on, the more ARC someone has the more render resources he takes up, higher numbers = bad. If the avatar goes over your set limit, which in the case of my viewer is by default 120000, he will be rendered as impostor or "jellybaby", sort of like a 2D sprite if you know what that means, basically he will be derendered and use almost no resources, that feature is in place to A: protect you from evil graphic crashers and B: from hardware hungry framerate killer avatars like your friends or your own avatar (probably). Don't worry, your own avatar is not derendered for you, just for others with this feature enabled...oh did i say enabled? You can't disable it. That's right, no on/off toggle. I could make one but i'm sure LL is going to get soft and make one anyway, basically throwing this entire feature into trash, yay! So why did i set 120000 and not some other arbitrary number? All my avatars move in the range of 30000-150000 and as you may know i'm a furry, i wear quite some ARC heavy stuff, some of it stuff i can't just take off to reduce my ARC because it is my head, or my leg or my tail, they are however, still somewhat easy to get below 120000 if i wanted to (i don't want to because i don't use them anymore, they are old... sculpt... look like shit, you name it), also most normal avatars i see have an ARC below 120000 as well, so 120000 should be a good limit, it seems like something high enough to see low to medium weighted avatars without showing the ones that tend to tank your framerate. My current ARC is at ~36000, that should give you an idea and for those who don't know i look like this:


around 26000 of my ARC is my hair, 6000 my body and 4000 my clothes.

Additionally to the ARC value and limit there are 2 more limits set, the avatar size in bytes (8000000 = 8mb by default) and the maximum object surface an avatar can have (100m² by default), i'm not too sure about the size yet it might be a super miss, it isn't all that important but the avatar surface can play a huge role, very high surface m² can mean the avatar is wearing a shitton of textures or huge prims or might even be wearing a graphics crasher.

You can of course find the options in preferences - display - performance options and change them as you like, you can also right click someone and select to render someone always fully but i highly recommend you not to raise them all too much higher, higher values means heavier avatars means less framerate.

You can also check your own values and those of others around you with the now called "show avatar complexity information" menu entry in Dragon - Useful Features - Performance Tools.

It will display you the information like this:
Avatar Rendering Complexity
Rank
Surface m²
Size KB

Here's a snapshot from the last post to show you how it looks like.


I hope that clears up your invisible avatars issue once and for all, i'm sorry i didn't explain that in the last update where it was introduced.

Guess that's it for today, have fun with the now less crashy/buggy version.



Changelog:


2.4.4.5


Changed: Use ellipses for Inventory view, stop this endless horizontal scrolling mess.
Changed: Layout of Places floater.
Changed: Layout of Place Profile panel.
Changed: Layout of Landmark Info panel.
Changed: Fancied up forward button in History a bit.
Fixed: Clipping Landmark lists.
Fixed: Broken button rows.
Fixed: Random Crash with certain Avatars, removed some leftover code.
Fixed: Avatar Complexity Debugs being off, causing everyone to be a jellybaby.
Fixed: Crash when right-clicking in Object View or Zoom/Pan/Orbit mode.

Sunday, November 29, 2015

Black Dragon Viewer - Update 2.4.4.4 "Cutting Shadows"

Cutting and dangerous, they come in 3 flavors.

Sharp, sharper, dismemberment.


So after a long month i finally got around my lazyness and found some time in between Guild Wars 2, Dungeon of the Endless, Awesomenauts and Fallout 4 to work a bit on the Viewer, it's mostly small stuff but i got some plans for some bigger things.


Starting off with the most important news here, the Viewer is fully up-to-date with the latest LL Release, Chromium Embedded Framework Project Viewer (aka Valhalla Viewer) and the QuickGraphics Project Viewer, these were a huge amount of changes alone but you know as well as i do that i can't just update the Viewer and make an update, i have to do some changes, so let's get to them.

The preferences floater, specifically the display tab has seen some overhauling in the last update, this update will iterate on the previous changes and hopefully make it less pain in the ass to use, tabs will now save their toggle status and the scrollbar won't extend too far anymore. Also, there's a checkbox to toggle if tabs should remember their toggle status. You'll also find the new preset save/load/delete buttons and the selection dropdown there, they are still a bit rough, i think they allow deleting the default preset but that's ok, that's what the monstrous amount of default buttons are for.


The picture also shows the new quick preset icon in the topbar that allows you switching between your presets quickly.

While we are on the topic of display preferences, i added the option to control projector shadow resolutions separately from sun shadows, that means that you can now pull the resolution slider a bit higher for either of them before the Viewer goes poof, i managed to go to full 12.000 x 12.000 projector shadow resolution, the shadows were sharper and better than the original, i could also do a 4k snapshot with 8.000 x 8.000 projector shadow res, you can see the pictures in the snapshot section of this post, here's just one:


Amazing.

Also... Tone Mapping has changed, drastically, Drake kept annoying me that Tone Mapping is horribly broken until i turned in and fixed it, the difference can be seen in the following comparison:














Original (left) | New (right)

But don't worry, i did a first rough pass at changing all sliders to make it look like the old style, sadly the grey-ish-ness that is present in the default rendering is now visible in tone mapping as well...just slightly... but it's there and it horribly annoys me, i'll probably do some more finetuning in coming updates.

The rest includes some misc fixes such as profiles not requiring to log in anymore, missing strings, depth of field and ambient occlusion being greyed out, layout changes to the login panel and so on.



Snapshots:














Changelog:




2.4.4.4


Added: QuickGraphics Preset functionality to main preferences floater display tab.
Added: QuickGraphics Preset functionality to Topbar.
Added: Functionality to save subtab toggle status in display tab.
Added: Sliders to control projector shadow resolution.
Fixed: Missing About Viewer information strings in German UI.
Fixed: Snapshot Profile Panel inconsistencies.
Fixed: Tone Mapping not working in the correct gamma space.
Fixed: Issues with Depth of Field and Ambient Occlusion being greyed out.
Fixed: md5 hash of the llceflib.
Fixed: Missing Debug setting for preferences panel.
Fixed: Scroll panel for subtabs extending too far.
Fixed: Broken Autoderender over X ARC slider.
Fixed: Compile partly.
Fixed: Last compile errors.
Fixed: Merchant Outbox xml errors.
Fixed: Shadowing Style radio button not properly ticking "Default" when clicked.
Fixed: Dropdown button image scaling improperly.
Changed: Allow Water Blur Multiplicator to go up to 6.0 to create perfect mirror like reflections with water.
Changed: Modified Login Panel layout slightly, reduced top bar, added personal Viewer Version and more.
Changed: Adding ability to remember opened tabs in Preferences.
Changed: Layout of Places floater. WIP.
Changed: Moved Save/Load/Delete preset functionality to main preferences panel.
Changed: QuickGraphics quick preset pulldown layout slightly.
Changed: Seperated projector shadow resolution and sun shadow resolution.
Changed: Slight notification item layout changes.
Removed: Unused Avatar Impostor option.
Removed: Unused Autoderender Toggle.
Removed: Unused Advanced Settings floater.
Merge with Release
Merge with Chromium Embedded Framework
Merge with Quick Graphics

Saturday, October 17, 2015

Black Dragon Viewer - Update 2.4.4.3 "Get Chromed"

Long overdue update that introduces the Chromium Embedded Framework (HTML5 , WebGL and so on on prims and your internal browser)


Also a bugfix for chiclets not appearing as well as a merge to the latest LL Release and a revamp of the display preferences, i'll need feedback on that. So tell me what you think.



Display pref options now has a small |!| if the option is known to cause performance issues or other problems as well as a blue badge to show that this checkbox represents the default "Ultra" setting.



Changelog:


2.4.4.3


Fixed: German CEF string in About floater.
Fixed: Chiclet bar not appearing.
Changed: Layout and appearance of the chiclet bar.
Changed: Display Preferences layout, added expandable tabs and default/warning icons to widgets.
Removed: Commented out Keybind Preferences.
Merge with Chromium Embedded Framework.
Merge with Release.

Thursday, September 3, 2015

Black Dragon Viewer - Update 2.4.4.2 "Bugfix Update"

Long awaited next update.

It fixes a serious issue with sculpts not showing properly, the favorite bar not properly hiding, changes the defaults for SSAO a bit and adds in some more changes from Maintenance including the removal of right-click meshes, i'm sorry guys but it had to happen, it made the camera go all nuts when zooming on meshes, i'll revisit it someday, maybe we'll get this fixed at some point but for now it needs to be removed. I have no idea if the crashing is fixed i couldn't test it properly, nothing crashed me, no time...


Off again for an unknown time, games... so much games.


Changelog:



2.4.4.2


Fixed: Some sculpts showing up as apple/sphere shapes forever.
Fixed: Nav/Favbar slide being broken.
Changed: New SSAO Defaults. Stronger, darker.
Backed out changeset: 2d4993c19ec4
Backed out changeset: 4c22396103e9
MAINT-2864 FIXED Viewer crashes when clicking "Ok" on "Delete Selected Item" modal from a non existant object.
MAINT-4761 FIXED viewer crash (Crash after selecting 'Skin weights' checkbox when uploading the second model.)
MAINT-5019 FIXED Undesired "http://" added to domains sent in chat
MAINT-5127 FIXED Maps URLs copied from gcal inherit special characters that do odd things
MAINT-5219 FIXED "Ban Member" from the group chatters list context menu is greyed out when you have the ability to manage the ban list
MAINT-5269 FIXED Viewer crashes if you open Help -> About Second Life while a group member list is loading.
MAINT-5343 (Viewer sometimes crashes when updating a local tga texture when RLE or BMP compression is disabled - LLImageTGA::decodeTruecolorNonRle)
MAINT-5348 FIXED Use this screenshot option will be checked by default now.
MAINT-5376 FIXED Sort experiences by name in the LSL editor experience chooser drop down list
MAINT-5398 FIXED [BetaBreakers] TOS additional policy links cannot be scrolled or closed once opened
MAINT-5439 FIXED Gesture will not deactivate by using the deactivate button in inventory drop down menu
MAINT-5416 Reverted changeset: 9bd24c17d908
MAINT-5428 FIXED Show tooltip for both parts of url.
MAINT-5430 Crash LLAssetStorage::downloadCompleteCallback
MAINT-5432 FIXED Null check to avoid crash
MAINT-5440 FIXED Crash
MAINT-5446 FIXED GUI update problem in Edit floater's content tab
MAINT-5451 FIXED A domain name without a top level domain should not be decorated
MAINT-5463 FIXED Add hovertext to the official link badge in chat/IM, etc.
MAINT-5484 FIXED Experiences search resets the "Max Content Rating" back to general each time the experiences floater is opened.
MAINT-5488 FIXED [Experience Tools] Opening an experience compiled script in an object in an adjacent region fails to show the script is compiled with an experience in the script editor.
MAINT-5533 FIXED The fragment part of an URI is only shown if it contains a query part as well.
SL-133 WIP - possible fix for unknown joints warping to origin
SL-134 WIP - Possible fix for octree corruption/crash when mesh has unknown joints.
SL-173 FIXED Allow searching for an experience by SLurl.
SL-193  FIXED Show info icons for experiences in Key,Allowed,Blocked lists.

Thursday, July 23, 2015

Black Dragon Viewer - Update 2.4.4.1 "Bugfix Update"

Quick n dirty.


It moves the marketplace listing menu entry to Dragon - Edit and overhauls the layout of the floater, also removes the old menu entry for the merchant outbox.





Changelog:




Changed: Overhauled Marketplace Listing floater layout.
Changed: Moved Marketplace Listings menu entry from detach to its intended place.
Removed: Old Merchant Outbox menu entry.

Wednesday, July 22, 2015

Black Dragon Viewer - Update 2.4.4 "Viewer Managed Update"

Viewer Managed Marketplace baby!


Fully unfunctional of course (for me).



This update introduces the Viewer Managed Marketplace feature and adds a few RLVa fixes that should make RLVa fully functional and compatible with all current stuff from LL. Yay.

Sorry for the long delay, played lots of Mass Effect 3 again because a friend got it recently.


Snapshots:










Changelog:




Added: Some code credit.
Changed: Open Object floater layout.
Fixed: Compile.
Fixed: All kinds of broken RLVa stuff all over the place after several merges.
Merged with Viewer Managed Marketplace
DD-2 : Implement LLMarketplaceTuple and LLMarketplaceData
DD-3 : WIP : Add test data to LLMarketplaceData when opening the floater for the first time
DD-4, DD-5, DD-6, DD-7, DD-8: WIP : Add Merchant Items panel and make it somewhat work, in a clunky sort of way
DD-10 : WIP : Added embryonic tool strip at the top of the marketplace floater
DD-11 : Implement getListingURL() and parametrize it correctly. Change Show Listing to Edit Listing.
DD-12, DD-19 : Add a button to create a new listing folder. Also added a validate button though it does nothing ATM
DD-13 : Clean up Associate/Disassociate listing. Also clarify the update folder code in marketplace
DD-14 : Add all right click menu items for marketplace. Make Add, Activate and Deactivate work. Right click fails on non folder items though in marketplace
DD-15 : Allow version folder to be made active/inactive, add new methods to marketplace to make all that a bit more clear and clean
DD-16 : WIP : Update sort / show menu, not actionable yet though
DD-17 : WIP : some work on the suffix for Listing folders
DD-18 : WIP : Implement stock folder counting but no propagation so far, also update is not working
DD-19 : WIP : Add marketplace validation modal dialog to view the log (no validation text yet)
DD-20 : WIP : Implemented the cut and paste code for marketplace. Stock update still not working as expected.
DD-21 : WIP : Call DirectDelivery cap, nothing done but print out the url in the log
DD-22 : WIP : Implemented SLM API GET merchant, use it in initialization but glitch in UI (needs to reopen the floater to see content)
DD-23 : WIP : Catch the SLM_UPDATE_FOLDER notification and trigger the GET /listing route so to get the updated SLM status for the listing
DD-24 : Add FT_MARKETPLACE_STOCK as a new type for folders, implement the promotion code for Drag and Drop, display of stock folders and embryonic marketplace validation
DD-40 : Style active listings in bold, implement a working initialization indicator
DD-41 : Clean up and add back into contextual menu the clipboard options, as well as Rename and Properties
DD-42 : Rename merchant items to marketplace listings to be consistent with spec
DD-43, DD-44 : implement update_marketplace_category() and get it called swhen appropriate
DD-45 : Add Activate right click menu item to marketplace listings folders
DD-49 : Add FUI button for Marketplace Listings
DD-50 : WIP : Add tabs to the marketplace listing UI
DD-54 : WIP : Improved validation to wrap items and stock items within version folders if necessary. Also hooked up the audit button with the validation code though all printout happens in the log
DD-57 : Update stock folder count when item moved back to inventory
DD-58 : Implement associate listing UI and primitive
DD-59 : WIP : Added marketplace consitency check and cleaning when updating a marketplace folder
DD-63 : Suppress the filtering options in the marketplace option submenu. Redundants with tabs
DD-64 : Add New Folder to right click menu on marketplace
DD-65, DD-55: Treat activation/deactivation separately for listing and version folders. Also use max instead of stock for suffix for non stock folders.
DD-66 : WIP : Added new icons for stock folders
DD-68 : Simply unlist if active version folder moved out of listing
DD-69 : Fixed! Added an xml parameter to optionally allow the visualization of the root folder on an inventory panel. Used only for marketplace floater so far.
DD-70 : Use List/Delist for listing folders and Activate/Deactivate for version folders. Also create test SLM ID when creating listing.
DD-71 : Implement a new item properties floater, calls the same code as the sidepanel in the inventory but with the back button hidden
DD-72 : Fix display of stock number on listing with no associated version folder
DD-73 : Rewrote the move single item to marketplace code so to support the required folder structure better
DD-75 : Prevent dropping on filtered tabs root. Adding an allow_drop option to inventory tab and folder view folders so that case can be taken into account.
DD-76 : Do not allow Calling Cards in Marketplace Listings
DD-77, DD-90 : recycled can_move_to_outbox() into can_move_to_marketplace() so we have now the same logic for both marketplace and merchant outbox
DD-81 : Fixed the stock folder count update using an inventory observer. This observe other changes as well of interest to marketplace and should improve consistency in general
DD-82 : Update marketplace listings after delete, cut and other operations on selected items
DD-83 : New listing folders immediately renamable on creation
DD-84 : WIP : Verify restrictions when moving things to marketplace, provide clear alert for errors, parametrize alerts and tooltips correctly
DD-88 : Make Drag and Drop tooltips for Merchant Outbox and Marketplace restrictions identical
DD-89 : Add a MarketplaceListingsLogging setting to get SLM API logs. DD-22 : Fixed the delete /listing route
DD-91 : WIP : Fix taking the correct root folder (merchant outbox or marketplace listings) into account
DD-92 : WIP : Use the new LLCurl::Responder interface. Marketplace Listings functional again.
DD-95 : Prevent validation to run on folders that are not under the marketplace root
DD-97 : When clearing the version folder of a record, force activation (listed) status to false at the same time, avoiding confusing (and eventually wrong) double call to updateSLMListing
DD-98 : Add message with link to marketplace if listing cannot be edited
DD-100 : WIP : Setting up inventory panel code in marketplace listing so that panels can be deleted and rebuilt with new root
DD-101 : Do not list or associate listings that do not validate. Present user with relevant error when that happens.
DD-102 : Fix crash when emptying trash containing nested folders. Also avoid getting listings several times
DD-103 : Use the same logic than Drag and Drop for Paste operations. Prompt with dialog instead of tooltip though.
DD-104 : Use default folder icons for stock folders outside of the marketplace root
DD-105 : WIP : Adding (updating...) suffix when SLM transaction in progress
DD-106 : Unlist and deactivate old listing when reassociating a listing id
DD-107, DD-111 : Fixed! Do not allow active listing and version folders to be moved or cut or deleted (must unlist first).
DD-110 : Prevent paste of Library items into the marketplace
DD-112 : Disable the add folder button if the tab doesn't support drop on root
DD-114, DD-115, DD-116: Fixed counts on folder, folder depth and items on operations on marketplace listings
DD-117 : Prevent drag and drop of linked items into the marketplace
DD-118 : Disable Edit Listing menu option if no version folder on a listing
DD-122 : WIP : Raise error when trying to list something that is empty or has empty stock folders.
DD-126 : Fixed. Check that the version folder depth is 2 when enforcing consistency rules
DD-128 : Fixed. Do not allow clothes or body parts on active listings to be worn or rendered IW
DD-129 : Prevent DAMA when dropping under the root of a listing, even active. Finer granularity of DAMA for all drop and cut and paste cases.
DD-130 : Fixed. Count items and folders from the version folder, not the listing root
DD-133 : Fixed. Add the original items to the list of things to update after action is performed.
DD-150 : Fix U32 to S32 conversion that failed a condition in folder count
DD-152 : Fixed. Update all the descendent of a marketplace folder when moving it out of the marketplace
DD-160 : Open the root folder widget on creation in inventory panels that requires one
DD-161 : Make marketplace listings root folder not movable and add a special tooltip to that effect
DD-168 : Display an error message when SLM transactions fail
DD-170 : Handle 503 answer from SLM and added a MARKET_MERCHANT_NOT_MIGRATED state to the UI, showing only the relevant UI to the user (i.e. Merchant Outbox or Marketplace Listings).
DD-174 : Clean up UI strings for Marketplace
DD-175 : Prevent Marketplace Listings folder to be renamable
DD-176 : Show marketplace listing root even if InventoryOutboxMakeVisible is false.
DD-179 : Return no listing for a lone object lost under the marketplace listing root
DD-180 : Simple xml fix so that the last item in inventory panels is selectable
DD-183 : overloaded the buildContextMenu() method for Notecards so that we get the right menu in marketplace
DD-184 : Make sure the Properties panel shows up for items in active listed listings
DD-190 : When dismissing an alert, take into account that the last focused view may have changed since the alert was created
DD-193 : Suppress show_load_status from inventory_panel description xml since it's not used anywhere
DD-195 : Add text filtering to the marketplace listings floater
DD-196 : Add message to panel when search returns empty
DD-211 : Verify that the items have the right permissions when dropping in a stock folder, add an adequate message when failing to drop in a stock folder.
DD-213 : Differentiate pasting from moving when verifying if action is legit. Also takes into account moving within the same version folder when moving items
DD-220 : Avoid testing folders against marketplace root if we are not filtering against the marketplace
DD-221 : Pointer testing to avoid potential crash
DD-224 : WIP : Add a deleteListing method, call SLM_UPDATE_FOLDER notification if state is deleted
DD-235 : Use newly built jsoncpp libraries that do include the security fix
DD-242 : Added beta invitation message to merchants in the marketplace listings floater
DD-243 : Set up callbacks for merchant outbox importer in the postBuild
DD-246 : Clean up code when receiving delete notification. Display DAMA alert when associating listing
DD-258 : Disable the Check for Errors buttons (aka Audit) while the inventory is still fetching
DD-259 : Show only one error when failing on listing, user can see all errors in Check for Errors
DD-260 : Silence the SLM delete message so to prevent server notification to show up when deleting or unassociating things from the viewer
DD-263 : Update the count on hand on SLM in various situation where stock count changes (activate, drag/drop, associate, etc...)
DD-264 : Do not unlist listings when version folder is emptied
DD-265 : Validate the listing id when associating, show alert if value out of positive integer limit
DD-266 : Use prevalidateNonNegativeS32 instead of prevalidatePositiveS32... Grmbl...
DD-272 : Be more consistent when updating the count on hand in SLM, also prevent multiple folder update when receiving data from SLM
DD-274 : Do not display super long error description (there are in the log though)
DD-276 : Let the count on hand be updated locally when updateSLMListing returns with data from the server
DD-280 : Serialize update count on SLM by preventing sending update while previous transaction not completed
DD-281 : Do not unlist listings that go out of stock
DD-282 : Suppress Unassociate menu item. Confirm when cutting, deleting or moving a listing
DD-284 : Separate no copy from copy items when counting items in marketplace listings folders
DD-286 : We report if a stock folder contains subfolders, we do not count subfolders in stock count and we move subfolders out on drop
DD-287 : Use the current tab correctly when creating a new folder. Fixed the sorting to be applied to all tabs as intended.
DD-289 : WIP : Prevent building tabs twice
DD-290 : Add an option to filter out marketplace, use it in Recent tab
DD-291 : Trigger a GET /listing when receiving a category update
DD-292 : Decrement cargo count when dropping items one by one in the marketplace listings folder
DD-296 : Added contextual menu items to copy and move to the marketplace. Hide copy to merchant outbox. Message when moving to the marketplace.
DD-297 : Performance on login : Refactored the code so that we have a new LLMarketplaceFolderBridge class in the bridge model. Only the panels with the use_marketplace_folders param flag will use that one.
DD-298 : Do not show beta notice in Merchant Outbox panel on error
DD-299 : Suppress cap hardcoded fallback. Recheck cap after each teleport.
DD-300 : WIP : Add drop zone to marketplace (XUI work)
DD-301 : Add show only listing folders as an optional filter
DD-303 : Auto activate version folder when only one present on creation or association
DD-305 : Do not call update_marketplace_category on the marketplace listings folder itself
DD-306 : WIP : Add Check Listing to menu to audit listings individually
DD-316 : Disable New Folder under version folder hierarchy of InventoryOutboxMaxFolderCount has been reached
DD-319 : Fix wording in some error messages and tooltips
DD-320 : Special case HTTP error 422 on the Marketplace and give it a nicer error dialog
DD-321 : Fix the drop zone to react really on the drop zone
DD-322 : Use vector of UUIDs instead of pointers to items when reparenting those items
DD-324 : Alert the user when we split a stock folder
DD-329 : Do not update listing folders before the association is completed
DD-333 : Prevent dropping no copy items if it'll create folders above the folder limit
DD-335 : Improve the performance of Get listings by 400%, fix a bug when error occured on SLM
DD-336 : WIP : Introduced a reverse lookup table for version folder to listing folder to improve performance
DD-337 : Validate the version folder before setting it and show error dialog if error
DD-338 : Auto unlist when stock gets to 0 during stock folder manipulation
DD-339 : Adding loading indicator to marketplace floater when the listings data and inventory data are being fetched
DD-359 : Improve performance by caching display data while updating and preventing refreshing the whole marketplace (never useful)
DD-362 : WIP : Check stock folder count limit
DD-366 : Update validated listing folders more consistently
DD-368 : Handle the merchant / non merchant status correctly on floater open
DD-370: Fix tooltip on Drag and Drop
DD-371 : Do not go through the accept logic when user confirmation is not required (because already given)
DD-378 : Separate stock items of different permissions in different stock folders
DD-379 : a 404 on a Get /listing means that said listing is not in SLM, then delete it from the local store
DD-381 : Fix update of count on hand on drop. Will spam SLM a bit but only solution
DD-382 : Set count_on_hand correctly when creating or assigning a listing
DD-384, DD-388 : Do not trust cached values for stock folders, do not consider a non fetched stock folder empty
DD-394 : Make sure Copy and Move to Marketplace menu items are disabled if the Marketplace listing folder doesn't exist
DD-393 : Rework association so that is_listed property is not overwritten before we get data from SLM
DD-396 : Add decription check on the common 422 error on marketplace listing
DD-399 : Use folder name to create new folders when under listing level
DD-403 : Add sort by name and by most recent
DD-410 : Do not extend inventory selections to items that are not visible
DD-412 : WIP : Validate a listing before creating a listing on SLM
DD-416 : Unlist a listed listing that becomes devoid of any item
Merged Project Notice
MAINT-5370 FIXED [Notice] Hard to operate with notification window controls
MAINT-5414 FIXED Viewer crashes after opening Group info panel
MAINT-5425 FIXED No icon is shown for certain transaction notifications.
Merged with RLVa, massive broken Viewer time, again.
- fixed : wearing something while an inventory link is pending will detach the attachment and potentially leave an unworn COF link
- fixed : questionable code is questionable (aka LLAttachmentsMgr::checkInvalidCOFLinks seems redundant)
- fixed : LLInventoryCallback::fire() is called with the NULL UUID when creating links using AIS
- fixed : attaching a rezzed object delays attachment link creation by 5 seconds
- fixed : don't start creating links to attachments until LLAppearanceMgr::setAttachmentInvLinkEnable has been called
- internal : partial backout of Appearance-SyncAttach to ease the big bird merge madness
- fixed : scripted items that machine gun fire small force-wears (e.g. Sub Suit) can cause some items to not get worn