|
|
|
[
Permlink
| « Hide
]
Lex Neva added a comment - 17/Jan/07 02:51 PM
I'm fairly certain that this is an issue with many 3d games. This problem has never been solved in a manner that is compatible with real-time rendering, and I believe that such a solution is generally considered impossible. There may be exceptions, such as the current First Look viewer with a new rendering pipeline that seems to at least solve this problem for the case where a hollow prim has a transparent texture on its hollow and outside faces. However, I don't think we'll see an actual universal solution for this problem for a long time, if ever.
There are solutions, but they require additional subdivisions of geometry happening on the fly, client-side.
It is a "tough" problem, but not a "hard" problem. Give it some time and someone who has a clue about real time graphics and re-tessellation of prims and it can be fixed. I think this should rather be high priority, though. It's a biggie with regards to graphics integrity. Have you checked out the First Look viewer? Does it repro for you there?
Joshua, just tried it and it repros in First Look viewer as well.
^ Great example of an issue which could benefit from an attached screenshot to help illustrate the point.
This sounds like Z-fighting? (If so, I see it @ my place in Grasmere because I'm very fond of transparencies. Torley, it's not really Z-fighting, that occurs when 2 surfaces are on the same spot in 3D space (see http://en.wikipedia.org/wiki/Z-fighting
This happens because the Z-buffer (which you can see if you go to Snapshot > Capture > Depth) doesn't allow transparent texturing. You can make it work in a lot of situations, but it breaks when several objects are both behind VWR 824 was identified as a major issue, and resolved as a dupe of this. I have increased this to a major to reflect that.
My own justification for the uplift is that a complex textured build is ruined by this bug e.g. I have a door texture that has a transparency for the glass, the door leads onto a balcony which has a wrought iron textured railing (with transparency. The Z-ordering bug means that passers by do not get to see a balcony with a door but a jumble of prims fighting on their screen. I've added a snapshot of how I see this bug. I use transparencies all over the place and this bug hurts a lot.
The screenshot "Z-Order bug example" shows what at first glance may seem to be a normal screenshot. It is a view from my dining room through the partition doors across the Salon to the rear doors. As the screenshot shows, the rear door texture which is actaully on the back wall of my house appears to be in front of the partition doors and "in" my dining room. A representation worthy of M.C. Escher I think. The Salon is at least 5metres square, the textures both have transparencies and despite their disitnt separation in coordinate space all recent viewers have this problem. The only solution I have found is to waste precious prims on constructing prim doors and windows to avoid transparency, and that assumes you are happy not to have glazingin your doors and windows. Any workarounds that do not involve additional prim usage are most welcome. I am having the same problem and it drives be bonkers. I did notice that the only time I seem to see it is when I am on my own property. Perhaps I am interested in other things at other properties and just don't notice but maybge there is some truth to this and another clue provided. I hate what it does to my land as i look it over after I have worked so hard on it. I am sure others feel the same way.
I have noticed that this also occurs with 2 textures that do not appear transparent at all.
I had a book case with afreebie books texture and a wallpaper texture. Placed the book case in front of the wall with the wallpaper on and then changed the angle of view and the wallpaper was see instead of the books. I chanege one of the textures and it stopped happening. So I Iooked at the textures in Gimp and they both have alpha channels even though it isnt neccessary for them to have. So I dont think its due to transparency itself but due to the alpha channel data overriding the other channels data in some way. I dont know how occlusion works technicallly so I am stuck at this point but I hope this information helps in some way for those who do know. [ Show » ] bob wellman - 02/Aug/07 05:01 AM I have noticed that this also occurs with 2 textures that do not appear transparent at all. I had a book case with afreebie books texture and a wallpaper texture. Placed the book case in front of the wall with the wallpaper on and then changed the angle of view and the wallpaper was see instead of the books. I chanege one of the textures and it stopped happening. So I Iooked at the textures in Gimp and they both have alpha channels even though it isnt neccessary for them to have. So I dont think its due to transparency itself but due to the alpha channel data overriding the other channels data in some way. I dont know how occlusion works technicallly so I am stuck at this point but I hope this information helps in some way for those who do know. OK, this shows the issue - perhaps a bit more obviously. The "rug" below the furniture that is obviously rendered improperly (loveseat has no transparency in it at all) has some edges that have transparent alpha - to remove an unwanted tassled edge.
Bob: "So I Iooked at the textures in Gimp and they both have alpha channels even though it isnt neccessary for them to have. So I dont think its due to transparency itself but due to the alpha channel data overriding the other channels data in some way."
Correct, the renderer sees a texture has an alpha channel and from then the object is treated differently. When a texture has no need for an alpha, people should know how to not use it, it only takes up disk space and causes such problems. voted for this issue, Im also experiencing this problem.
the issue clearly isnt limited to intersecting objects, like the screens show. Im getting similar issues, in some rare cases I get the windows of the neighbour´s house clipping in front of my walls when Im standing inside my house. this happens despite the two houses being about 20 meters apart at the "offending" place! I acknowledge that intersecting objects require complex solutions, but objects which are obviously seperated should work fine. Ive yet to see a game with similar issues, to be honest. the view angle seems to be a major factor. seems like the z order only works correctly in a 2D sense and only when viewed straight on. thus the alpha rendering appears to not exactly be 3D graphics programming. would love to see a fix for this. i don't like walls in my hair. bit by bit sl is returning to a no alpha no flexi world. soon everything will have to be default to render properly. including avatars.
Additional screenshot that illustrates the problem well. The rug is on the floor BEHIND the window.
Another screen shot that illustrated the problem well. The bamboo should appear in front of the railing and the water in the pond below should appear behind the railing.
This bug has been bothering me since the beginning of secondlife.. its impossible to have a plant in front of a textured window
Updated version info to reflect this still happening in latest viewer.
In this picture, I have a tree in the foreground that is semi-transparent. I have a window behind it, which is also semi-transparent. The tree appears BEHIND the windows, even though it is not.
I believe the same issue in hair using lots of alpha textures? As noted elsewhere, the issue does not appear when the avatar is facing south (here facing north).
This problem has been persistent since atleast v1.7. Though it's impact has become lessened in recent versions there are still moments where it can lead to atrocious graphic faults.
This problem is solvable, but as already noted it is a difficult one to do without hogging performance. It may be a good one to provide as an advanced graphics option; put the slider up and the rendering engine will use greater sub-divisions to solve transparency issues. At some point in the future computers may be fast enough to be able to keep this slider right up. Have it affected by LOD as well and lower-end users may be able to at least enjoy the advantage in non-laggy periods, but have it scale back to normal if things get too tough.
Alternatively just an on/off option, either you play without alpha sorting issues and take the performance hit, or you play with them at greater speeds. Could be a good option for snapshots as well, meaning snapshots will always come out perfect even if the game itself looks a bit iffy. 3D environments seven years ago had no problem with this bug and yet they ran stable on the midrange computers of that day. It's all about bugsquashing and optimizing the code.
llyara:
7 years ago people used mask transparency usually, not partial alpha transparency. It's a crapload simpler to sort mask transparency right. Can you name one 3D environment you have seen the last seven years that use alpha transparency that has experienced this type of z-ordering bug?
I've seen it in games using the Quake 3 engine, it's actually really easy to do. When you make a map just turn the compilation onto basic, all it will do is create the geometry and other essentials, but not do any pre-rendering. The alpha can actually screw up worse than SL's does.
The key thing to note is that most games from the last 7 years use pre-rendered scenes, and as a result are able to identify areas where these bugs may happen, and generates information which allows the game-engine to reduce or eliminate the issue when you come to play the game. In SL the load from trying to do this would be HUGE, either on the simulator side or on the client side. All it takes is a single object to switch from opaque, to 50% transparency and your performance is fucked. Wouldn't this be significantly improved by splitting prims into simpler parts as a matter of course, on the client side, before they're rendered? Break cubes into 6 planes, cylinders into 4 equal curves + top & bottom, etc.
Thinking specifically of "Issue - Transparency-render-1.jpg", if the cylinder was turned into 4 equal curves, I'm fairly certain that from every angle alpha sorting should work correctly. It's not a complete solution, but should work well until we can get real time raytracing clients! Yes, Xugu, that's basically also what Thygrrr Talaj is saying in the 2nd comment here.
Afaik, as simple cube in SL already consists of 56 vertices (rather than the minimum 8) (each cube face has 18 mesh faces) (at least that's what wireframe mode shows), so maybe a crude subdivision per face could help, but I'm worried this will cost far too much (often already too low) framerate. I'm having the same issue.. i'd love to see it resolved..
This old bug makes a lot of design ideas impossible.
Sorry, my first thought on how to solve this was based on detecting this problem, and then solving it. Hadn't occurred until later that just subdividing as a matter of course would help.
So, best algorithm idea I've had so far: 1. Find furthest and nearest point of all on screen semi-transparent objects (fairly expensive, but shouldn't be too bad as long as there aren't too many semi-transparent objects on screen). First 3 steps are fairly well straight forward, AFAIK. Last one's still not terribly easy, alas, but I think shouldn't be impossible for someone with a better grasp on geometry than me... Or am I talking nonsense? I intentionally created a fan with alpha to demonstrate this, if I could drop a copy on one of the Lindens, I'd be more than happy to.
Added Snapshot1_001 wich shows how i arranged two transparent textures. One is far infront of the other.
Added Snapshot1_002 wich shows how it looks in SL when i move the camera infront of it. (thats how it should always look)
Added Screenshot1_003 wich shows how its mostly look if i the cam isnt right infront of it. the most of the objects that are infront of it are now displayed behind the background. Wich doesnt makes much sense for me. Exept that there is a Zbuffer issue somewhere.
Using: Second Life 1.18.6 (76116) Dec 19 2007 09:54:25 (Second Life WindLight) CPU: AMD (Unknown model) (2009 MHz) I totally support fixing this bug as soon as possible. It's one of the most ridiculous things I have noticed in SL, and I do not understand why it hasn't been fixed earlier.
The most annoying thing for it to happen regularly to is hair... Hair goes invisible if you stand infront of a texture with an alpha channel, which is very common with walls with windows in. Also plants! I have plants by my walls, but they don't even appear because the wall has a transparent section of window in it. It's not even like the plant is overlapping the window section itself, but because it's the same texture, the plant completely disappears. This is utterly ridiculous... This happens even when the window part of it isn't visible! I used the texture that had the window in it, resized it down so that the window wasn't even visible (so the wall section was there only) and the plant still disappears. This severely needs to be fixed soon... Given two viewers, one with alpha sorting bug and one without it - but 30% slower - then I'd take the slower version.
Posted screenshot. I pretty much am always wearing "pants" when I should be wearing a skirt, because so much of my wardrobe utilizes alpha. It's very discouraging. The worst thing about SL, to me, is this horrible bug. It also makes my life as a photographer a living hell sometimes.
Holly, if you have tga images that need no transparency, you should try to save them without transparency channel. Any texture that
Also please note, as I've said before in other issues about this bug, this is not a SL-bug! It happens basically in every app that used OpenGL with transparent textures. When building, try to avoid prims being both in front of and behind eachother. You should be able to safely use transparent textures, as long as the prims are separated. For example, a cylinder placed in the hole of a torus will Read why this is a problem on http://www.opengl.org/wiki/index.php/Alpha_Blending Daedalus was not in some impossible mode and even suggested a solution. Not one that I prefer but it has been usable for quite some time. I agree though that someone should look for a solution. If it causes the performance to degrade then I am fine with that. If that were the case, then I'd say leave it as an graphical setting and let users decide whether they want the performance degradation or not from correcting this bug.
Between hair and wings in Second Life (two very popular accessories) it's pretty amazing that people have been so tolerant of this for so long. I used to play City of Heroes and we basically never saw alpha stacking issues like we see in SL. I don't know what it is that makes SL so different, but it's very difficult (and sometimes impossible) to design around this problem visually.
If the solution would cause rendering lag, then just have it be a selectable option for people who have graphics cards capable of dealing with this?... oh wait, I see Crash just said that a second ago. For the record, yes, I'm using the Windlight First Look viewer. The bug is as persistent as ever from what I've seen. I'll try to take some screencaps soon. Removed Affects Version/s of "First Look: WindLight" – as it says when you're editing an issue, "ONLY select a "First Look" if this issue ONLY affects that version." We do this to better focus on FL-specific issues. Thanks! You do this to ONLY focus on FL specific issues? I don't get it...
So you only correct bugs that affects FirstLook viewer? A bug which affect ALL viewers is, for me and for many users, MORE IMPORTANT than a bug which affects only the FL !! This bug is MORE THAN ONE YEAR OLD and the only thing you have to tell us is that ? I never seen a game with that transparency problem, I never heard anything about it (and I went to a 3D school and had many friends in Game Design section) and it's a BASE to create "3D" objects with transparency map in video games (cause poly are too heavy to calculate), moreover, it's an OBLIGATION in a game like SL where you HAVE TO build objects with least prims as possible !!! So we HAVE TO build object with bugs ? I don't like to build bugged stuff.... So maybe you can close this topic instead of replying that kind of message ? It would be more clear for all players posting here for ... nothing. Thanks for your (non)work. That's right...
People from the SL community can't do anything to help Linden Labs to solve this problem at this step. Now, we all need to see this bug Assigned. (or closed) === Act now ! ==== The SL builders community (and moreover, the SL residents community) can't believe there is no solution... At least - thanks to Linden team to communicate on this JIRA VWR issue with people waiting for this bug to be solved for a long time now @Enka, you seem to have read Torley's comment backwards. The reference to First Look/Windlight was removed from this item because this issue DOES affect other versions – in fact, just as you say, all versions. The idea is to broaden the focus of this item, not narrow it or reject it.
@Shaka, even if this problem isn't assigned, even if it isn't immediately actionable, it still ought to remain open for discussion and to maintain visibility so long as the problem itself persists. I can perfectly well understand that it's a "hard problem" in a computational sense; I can understand that it may even be a specific problem insofar as SL is yoked to OpenGL for its 3D rendering. However, it's also possible that the current handling of alpha stacking is not optimal and can be improved, even if not perfected-- perhaps with a performance tradeoff, perhaps with better algorithmic methods the Lindens haven't explored yet. It HAS been discussed – see https://wiki.secondlife.com/wiki/Bug_triage/2007-07-16/Transcript Let's keep this visible, even if it's frustrating not to have a deus ex machina solve it for us right away I have tried designing prim dresses using alphas and it is just about impossible to make them look right. For example, lace (see-through) panels just get in each other's way and look horrid. You can't tell the panel on your backside from those on your front. If you want to have anything besides an ugly straight bottom prim panel, you have to use a transparent end. Same result.
A fix for this would go a long way towards improving how clothing looks in SL. I would trade a performance hit for a fix. Hello, do the lindens have any info on this at all, please atleast inform us... like "We have no idea whats going on or how to fix this", or "we are undergound invstigation into this problem", or "it is definitely most likely, possibly, maybe going to get fixed very somewhat soonish" or I would settle with a "We have other things we're working on, but we will get to this eventually". I just want some news on this.
Aeron, check out some of the duplicates and related to bugs - yes, the Lindens have an idea of what's going on - in fact, they, and anyone who does significant 3D modelling work knows what's going on. As solution to the problem involves either significant frame-rate drops (down to say 1 frame every 2-3 seconds), much faster hardware, or a major breakthrough in computer science (which would probably immediately lead to the create of a Computer Science Nobel, and it's immediate awarding to the person figuring out out).
Switching to Ray-Tracing would ease this, I think - but considering Intel just demonstrated it on 8-way CPUs in realtime in much simpler environments - and significant parts of how SL works would have to be rebuilt - probably not this year or next. @TaraLi – that's the classic comp-sci (and OpenGL) explanation, yep, but there's no guarantee that the current implementation in SL, even for "easy" cases, is optimal. There may be room for improvement here without a Nobel-level breakthrough
One thing I've noticed is that the usual explanations for the intractability of the alpha-stacking problem using a Z- buffer approach revolve around partial overlaps, or varying nearness, of un-subdivided, or partially sub-divided, objects. Yet we see alpha-stacking problems with prims that clearly don't exhibit this ambiguous distance relationship – where the something entirely "far away" appears in front of something entirely "close". (Understanding here that there are undoubtedly multiple issues, mathematical and implementational!) Anyhow, point is, like a lot of things in SL – a partial improvement would be welcome even when a perfect result can't be achieved. Even a major performance hit might be acceptable in certain cases – e.g.due to additional subdivision time to build a 'correct-er' snapshot image. For those interested in some Linden discussion of the issue, it's been brought up in a few bug triages: around 15:18 in https://wiki.secondlife.com/wiki/Bug_triage/2007-07-16/Transcript Sorry, this just happens to be one of the most annoying bugs in existance.
I am a computer science major, my current field of study however isn't graphics but artificial intelligence, I might have a look into it though. I realize that sl's graphics are not the same as most other games, via the fact it a bunch of primative's instead of meshes and the like. However I recall that a nurbs modeller exists which handles the rendering of them in real-time preview rather well, it was called... Rhinoceros. But that is of no real help really. @Coyote Pace - "Yet we see alpha-stacking problems with prims that clearly don't exhibit this ambiguous distance relationship – where the something entirely "far away" appears in front of something entirely "close".
Agreed. My old house had a horrid problem with its mostly windowed exterior walls. I'd put a semi-transparent prim plant or bush inside and it would look like it was outside even though the windows were a good 3m away from the prim. I finally gave up and bought a house that wasn't so see through. At least you can now tell what's inside and what's out. One thing that I was thinking about for clothing – it would be cool if you could link a flexi transparent and non-transparent prim together to have them act as one prim. That way you could design a prim skirt that had transparency where you needed it and solid panels where you didn't. I am no computer graphics expert so I have no idea if this is feasible. While not having the expertise of others, here are some observations and questions... I thought it would be clever to put 6-8 photos on a wall. Instead of using 6-8 prims, I thought 1 prim, with the pictures laid out, and transparency around would be a good solution. See all the other comments as to why this is only marginally acceptable.
Now I am working with sculpties... First project was a lantern. It seems the use of transparents in the windows affects the way the sculptie rezzes... or maybe it is a plane ordering issue as above, that just exacerbates in sculpties. FURTHER I notice that is the window is 'frosted,' say a 50% transparent in PhotoShop, The problem is not as drastic. Is there a percentage of transparency that seems to be a tipping point? Hi all, I'm just a noob in SL terms only 26 days old or so, but was having fun until i discovered this problem.. at first i thought it was my low end graphic card, until i fell over this resource.
Same problems as everyone else, being new i was trying to design something which has 4 prims with transparent sections all aligned and with a few cm's in between., hoping to create a nice 3D aspect to the whole thing. it looks great and works well..until you move - the whole magical moving layers trick is very weird to say the least and completely random as to which layer is in front first.. very confusing to a noob who then thinks he has positioned it all wrong and starts trying to adjust it.. 8-( I hope this can be fixed, its the kiss of death to designers and has certainly thrown a spanner in the works for me, so it certainly has my vote and yes keep the issue open. I am afraid that this is not a SL viewer problem, but of 3D rendering libraries, you know those mysterious things called openGL, DirectX or R98, which in turn depend on our graphic cards. I think one of these libraries id buggy (all are, more or less) and miss the rendering of certain types of textures. I know this because Cortona (a VRML language browser) had the same bug, but I don't remember with which renderer. What I remember is that the bug was only with .PNG textures. It was not a matter of transparency, as GIF textures with transparency were correctly rendered.
So this is not a matter of Z-buffer (the thing which tells which texture is closer or behind another). If so, all the texture type would be affected in the same way. So it is not an "impossible problem" as it is solved in some cases. I rather think that it is some gross bug that the library designers were lazy to solve, and escaped their responsabilities in saying that, as usual, it is a "security feature", or that "it is bad coding to use textures with transparency, which should be forbidden". This is a serious bug, which brings constant inconvenience for users. Linden labs cannot solve the bug itself, but I think it now has enough weight to enforce the library designers to solve this bug, or to change library. How is the Z-buffer done in OpenGL actually? I've been investigating some of this stuff as part of my university coursework (chose it as a little project for a class), and I've found that if you store depth information with pixels, it's really easy to prevent alpha sorting issues. The only problem is that if SL doesn't currently have per-pixel depth information, then it would be very costly to add.
The way I've done it is that when you render the scene you render two images, or in my case simple arrays. One has the colour/alpha data for all pixels rendered so far, and the other has depth information for each pixel. When you write new pixels, if the depth of the new pixel is less (closer) than the existing one in the image so-far, then you add the new data over the top, if it is greater (further away) then you write it in behind the existing pixel (if it has transparency). Obviously if you're able to render the scene in a particular order, you don't need the full-sized 'depth' image, only the part needed for the area you're working on, so long as you're able to do that bit in one-pass it's okay. Haravikk, I cannot reply your question, I don't know how openGL works. I know it is a library of about 250 functions, that is implemented on many graphic cards. Also the SL viewer for Linux works using the openGL, so it would be interesting to know if this texture muddling also occurs on Linux client.
It is worth noting that a game like Oblivion has a 10 times better rendering than SL (like realistically walking through grass and bushes), a 10-30 times better fps, it never gets stuck for 10 seconds when lanching a menu, I never seen it filling the memory with memory leak, and making windows swap (a time consuming operation where Windows scrape the hard drive and stops the game for 30 secs) and above all there is not this texture muddling like the one we are speaking about in SL. Of course SL relies on the Internet (and has land management functions), so that it is doomed to be slower than a CD game like Oblivion. But the example of Oblivion shows us that many things (texture muddling, memory leaks) could be fixed without major trouble in SL, especially there is no "problem generally considered as impossible to fix". I think your ideas about rendering are interesting. The main difficulty about rendering a scene is that the workload increases exponetially with the number of faces to render, if we all the time have to check which face is before/behind another. Such exponential problems are considered difficult to impossible to solve otherwise than with heavy exponential calculation time. But your idea should, I think, overpass this problem and make it a more linear problem, so that we could render a 10 times more complex scene with only 10 times more calculations, not 1000 times more. By the way OpenGL is not a software, it is a specification for a set of functions. There is a standard licensed openGl, but also a free implementation called mesa (google: openGL + wiki). Same for other renderers. So in the worse case, if the library creators are unable or lazy to fix their work correctly, it would be possible to create another implementation. Only little problem, this is a work for an engineer team, not for geeks writing code with their feet. Also getting the requested infos will not be easy. Yichard Muni, thats very poor standard to compair a single player directx game to a opengl mmo. But, for the record, Oblivion only renders the first layer of transparency, everything beyond it is treated as non-transparent, meaning it doesn't have this problem. Also Oblivion uses prebuilt (and optimized) meshes, not primitives like sl, which causes a whole host more problems for sl (but also what makes it great :3). Now putting that aside.
Haravikk, have you taken into account the edge surfaces of rounded objects where more then one part of an object may be contained in the same pixel? Not to mention the haze effect on transparent surfaces based on distance to the viewer. IIRC sl renders on a object level not a pixel based one... as such really this is a complex issue and there are few ways around it beyond a much slower trace solution, as I mentioned the object base, thus sl parses the entire transparent texture, not just the transparent part of the transparent texture. As a side note: Aeron, the fact that we have a single player or several players (MMO) don't change the rendering problems. However there are some objective dsadvantages of SL, compared to Oblivion:
-resources are on internet, much slower to load than on a CD -land access management scripts are said to much slow down the fps -the ability to build in world poses constrains on the objects and on the scene calculation. (that we must accept, otherwise SL loses one of its advantages. But to build out of the world, with a 3D editing software, would not so much reduce the interest of SL) But this don't explain all the difference between oblivion and SL. The way objects are described (primitives, meshes, nodes, kind of texture, etc) influences only the parsing of the scene, when the viewer is building the scene into the memory, before actually rendering it. Rendering only comes later, and only at this moment directx or OpenGL make a difference. Of course there could be some simplifications, for instance only one layer of transparency allowed (althought I did not noticed that in Oblivion). but then such simplifications should appear in the same way, whatever we are in Oblivion or in SL. Also I still have the old cortona installed, and it allows to choose openGl or DirectX (but I am not sure it actually switch from the one to the other). I tried, but I did not noticed any difference, the texture muddling problem appears in both case. But with Cortona, the bug appears, not with transparent textures, but with PNG textures, even if they don't have transparency. All this point at a bug in the libraries themselves. After what you say, openGl would not have the bug, and openGL would have it. @Yichard:
While some of what you mention is true, Oblivion (and other "packaged" non-dynamic games like FPSes) benefits from the ability to pre-compile maps, or areas within maps. This allows them to build special tables describing the correct order to draw items, however this can't be done in SL because the cost of compiling this data is very high. Cut-down methods that are similar could be used, but the effect wouldn't be significant enough to warrant the extra load. In games like FPSes static objects are actually broken down into a per-polygon level, and rendered in order from furthest visible to nearest, using things called binary space partition (BSP) trees, which can also be used for physics. These allow a game to rapidly fetch all visible polygons, and render them in the correct order. They will still have trouble with dynamic objects though, like explosions and such (in most games it's usually possible to demonstrate alpha issues in these cases). @Aeron:
Now, this system only tracks the depth of the nearest pixel, as a result, items behind can still fight for priority. However, it solves the majority of cases since the fighting usually only occurs between two items. Incredibly complex objects/scenes will still suffer as normal, but it is rare for a scene to contain such large amounts of transparency without other objects blocking them (and thus preventing the issue as they will take priority). The only way to solve the issue perfectly is to use per-polygon render ordering as mentioned, but the cost of calculating a BSP tree on-the-fly is huge. I've been investigating was to do a simplified BSP tree on-the-fly, and while so far it's good for physics, it doesn't help much with rendering. If simulators had more powerful processors, or sets of simulators had a shared processor they could use, then it could be possible to break sims up into areas and compile BSP trees for static objects within those areas periodically, but I shudder to think of the complexity and potential to introduce even more bugs in such a system. They wouldn't be true BSP trees, but approximations of an object's shape to provide hints to the viewer. okie, oblivion could have such tips like you say, like BSP or pre-rendered scenes (VRML also had such tips, like boxes containing the objects, and allowing to decide if the objet at a whole must be rendered or not). Also, in oblivion, entering for instance in a house makes you enter in another scene, where the surrounding landscape don't exist, and don't need to be rendered. There even are no transparent windows, contrarily to SL where the surrounding landscape still exists and can be seen through the windows, and thus must be rendered. All these tips are lessering the problem of the exponential calculation time.
But you can also have in Oblivion very realistic landscapes, and travel though them at high speed and on large distance: prerendering should then be calculated for millions of places. I don't know how these landscapes are made, they are probably sprites alway presenting their face to the user (like particules do in SL). These sprites mandatorily have transparency, so that you see through leaves or grass blades. Then, not only oblivion keeps a very good FPS, but also I never saw this texture muddling problem we are speaking in this thread. anyway you are speaking about the rendering order (in which order faces must be drawn) a complex problem certainly, but which is basically independent of what kind of face it is, a coloured face, an opaque face, a gif or png face (pngs are buggy in Cortona), or a transparent face (wich are buggy in SL, although all faces are jpg). If rendering order was faulty, all the faces whould be affected in the same way, with or without transparency. This texture muddling problem probably arises from a wrong method for applying transparencies, at a stage where the viewer however knows very well which texture is behind the other. Probably the library designers (less likely LL. Cortona engineers told me that the library was faulty) assumed that transparent textures would be rare (we were in the beginning of 3D), and, to avoid the cost of computing the correct mixing of the two textures, they just made the trade-off of rendering only one of them at random. (and, as you know in this case, the random order is nearby alway the wrong order). But today transparent textures are a common and indispensible feature, and such a trade-off is no longer acceptable, and people complain, like in this thread. Well this isn't an easy fix, otherwise it would be fixed already. I found a game that has a simular problem, Vampire: The Masquerade: Bloodlines, in the haunted hotel. The curtains and the railing may have overlap issues. If I was brave enough to look through the viewer code, I could take a look, but I don't even know where I would find it, let alone where to start working on it.
The only 'easy' semi-solution may not even be possible, as it would require hooking two unrelated sections, in which one may not even be part of the viewer. Basically if two objects do not intersect determine whichever is closer for rendering purposes as you would a non transparent object. If they do intersect do what you do now till realtime raytracing becomes possible. By intersect I mean the bounding boxes, so many problems would still exist, but many of the 'totally' unrelated surfaces that overlap strangely would be eliminated. The page is really ugly and poorly made, but I also found this, which refers how to fix this problem in OpenGL. Here is a custom css sheet to make the site more readable if you want to delve further into it. Thanks for your interest! Actually that ugly page describes what we (and other engines) do already, although it omits some important details.
An approach I find attractive is VWR-6713 - it doesn't solve the alpha sorting problem per se, but it does allow an enormous amount of content to totally avoid being actually affected by it, when used appropriately by content creators. That would work very well Tofu, and would be well accepted as a possible way to improve this issue. But this still leaves the problem of 8-bit alpha not correctly overlapping.
If only there was a way to feed levels of semi-transparency into the z-buffer in a way simular to the 1-bit textures but still have thier level of transparency overlap, abiet this won't work for intersecting objects like the cylinder through the hole of a torus or tube, but it would solve some of the problems. But I do think some residents are at a point where they would choose working a little better now over say, delayed until we can find a way to competely fix it. While thats is some hypocrisy on my part I cannot deny I would perfer some of the stranger overlaps to be gone sooner then later. hmmm... at a moment or another, there should be a multiplication (arithmetic) of a pixel of the texture by the content of the z buffer. I don't know how this is made, but replacing the variable format of the z buffer from 1 bit to 8 bits should not require much rewriting and should not much slow the processor (replacing 1 bit test by a 8 bit multiplication, eventually a one step multiplication should be faster than the several steps for a test). At least this is a guess.
I tried the 1 bit transparency for a foliage, and obtained a good result, provided that we use a large enough texture so that the edges don't appear jagged. At least this is a lesser evil than the texture muddling problem. Moving to Nice to Have and keeping open for voting.
Well, a solution to the most visible and embarassing SL bug would be just "nice to have"... sorry if we disturbed.
Nice to have? Parallax mapping is nice to have. Shadows are nice to have. Windlight is nice to have. This bug has been around since atleast version 1.6.0 and it's still here. Although it has been somewhat fixed over the years there are still alot of cases out there.
Is there a detailed explanation somewhere why it hasn't been fixed yet? linux RC10
OpenGL version string: 2.1.2 NVIDIA 173.14.05 i usually stop to see my hair while i walk on a fur (transparent on transparent, but now i see correctly all transparent item with the right layer. Vendor rezzed on glass object too. Ilyara: because this problem is inherent to current openGL technology. Every app that uses it has the problem, but it's usually not visible because of proper modelling and texturing (for example, the issue does not occur with 1-bit transparency). People in SL often just ignore the problem when building (partly because of prim limits too), resulting in lots of problematic cases.
I have to agree that this is more important than "Nice to have" - this issue wrecks the aesthetics of many locations / builds.
I know it's a really tough problem to solve robustly, though - but that doesn't make it less important. Bizarrely, the Linux client on my Intel GMA-X3100-based laptop seems to struggle less with this than my GeForce 6600 main machine! It's dog slow, and can't even render my avvie's name correctly - but it does seem to get the z-order right more consistently. Maybe because it's doing more in software? Very odd. Anyhow, a robust, perfect fix is very probably too much to hope for - but this issue is annoying enough that even a partial fix would be better than nothing. I have to agree here that this is not just "Nice to have". There MUST be some ways this can be improved. Don't get me wrong, I'm well aware of the technical issues faced, but there may be ways to generate additional information for static (non-moving) objects in a scene in order to better sort the textures on them. Additionally, if there were a way to have it render perfectly every time, but only for high-end machines, I'd still love to see it, especially if it was an option during things like snapshots, or if there were cut-back versions so that more mid-range machines could get some benefit to.
The truth is, a lot of users may be willing to take a performance hit to get more correct rendering in these cases. I mean I'm an advocator of performance, but correctness is important too, and if it gets to be too much of a cost, you just switch it off for a while. That would be a different issue, but for Snapshots, you could use raytracing. It certainly won't be usable for realtime rendering though.
For another solution, read the 2nd comment posted by Thygrrr Talaj on 18 Jan 07 to this very issue. If a potential fix turns out to be too expensive to use for the whole scene, applying it just to a subject of objects - say, the 4 largest transparent objects - would be better than nothing. I would at least take care of a majority of curtains-against-alpha-based-windows or intersecting-plane-trees situations.
Regarding my earlier comment about the laptop - I'll try and get some snapshots to back that up - I'm not sure yet whether the difference I'm seeing is a Windows client vs. Linux client or an nVidia vs. Intel thing. This problem is also present with particle effects being displayed over other prims that have alpha channels in them. I would assume the particles have alpha data as well.
I had a problem with a particle flame not being displayed over a floor that was solid white marble. After reading this issue's comments I removed the alpha channel from the floor texture and that solved it. Does not do anything for helping with situations where alpha is required tho, and I have another situation where a particle fountain wants to get displayed behind low prim tress that are 10 meters behind it! I voted for this issue, needs to be fixed if at all possible! Yes Chiron, particules do have an alpha channel. I already created textures for particules, and when the alpha channel is not present, the particules appear as squares.
It is to be noticed that the problem don't appear with particules: particules superimposed to each other merge correctly. Even different types of particules don't muddle together. Probably particules are processed a bit differently than objects (they are one face alway facing the user). But I never saw the muddling problem. So the problem may appear at a later stage in the rendering. And it is not so bad to solve, then. Waiting for this, a building workaround useable in some cases would be to use only one texture for several prims, so that these prims, at least, would not muddle together. However this is a known tip to optimise the rendering (less lag). This bug is really messing up my efforts to create an attractive natural looking forest area. Many of the nicest trees and plants are made with alpha textures. When I try to put these together into a landscape, it all comes out looking WRONG. It is especially bad on the shoreline of a lake or pond where the plants conflict with the water prims. This is making it impossible for me to create the kind of landscape I want. "Nice to have"? Please, this is much more serious than that.
again I checked: particules can superimpose by tens, with each a different texture: they never muddle, and add their alpha channels properly. I never saw a particule transparency canceling the particules behind. Particules are "sprites", that is a single face always looking toward the observer.
Also linden trees seems to heavily rely on alpha channels. They seem to be true meshes, not the LL "prims". I never saw a Linden Tree disappearing behind another, alway their transparencies merge correctly. So the problem is specific to rendering LL prims (cube, sphere, etc) This segregation tells us that the problem is not "some fundamental difficulty of 3D rendering" or "a rendering library problem". If it was so, all the objects would be affected in the same way. The problem is specific to the LL prims: at a moment, some parameter may be passed wrongly, when dealing wih transparencies. Probably somebody made a "simplification", decreeing that "people don't want to use multiple alpha channels". And correcting this minor mistake will need to rehearse the whole rendering pipeline, a costy task. I don't want to be naughty, but probably the best way to find the bug would be to check who says that the users are faulty, and look at which part of the development they were responsible. Yichard,
particles and Linden trees are indeed exceptions, but that does not indicate alpha sorting is working correctly. Particles are not 3D objects. They are 2D planes, always facing your camera. Therefor, they can never be both in front of and behind eachother, which is what causes this. Think of layers in PhotoShop, they're 2D layers, can have full transparency and do not have any problems with that, simply because the layers do not intersect. Linden trees have no full alpha channel. A pixel on the tree either is fully transparent or it is completely opaque. See VWR-6713. Therefor it is possible to handle the transparency on a per-pixel basis in the z-buffer. As said, the z-buffer cannot handle transparency, as it would interfere with its functioning. You can test this by uploading a texture wiith 1-bit transparency and apply it to objects that have this problem. You can make a texture with 1-bit transparency by converting an image to have a colour palette, so you get for example 256 colours, of which 1 is transparent, like those ancient, terrible gifs used to be. Mo Noel, you can't upload gifs, but most drawing softwares can reduce colour depth to 256 colours (like in a gif) and edit this palette to make one of the 256 colours transparent. From there, you can create a tga with an alpha channel as you use to do with textures (here is not the place to explain this, please see tutorials on how to create textures)
Daedalus, okie for Linden Trees to have a 1 bit transparency, although I am not sure of this. But particules are indeed 3D objects, in the meaning they are rendered as other 3D objects, even if they happen to have only one face alway facing the user. they are not like a chat window superinmposed to the scene. This can be checked easily, if you look at particules going through objects or ground: they correctly intersect these objects, or disappear behind them. In addition, Mo Noel, rather than tga, you can use png the same way as gifs, 256 colours with one transparent. That should upload fine and fix the problem, however, you can then of course not have half-transparency, like the dark windows in the screenshots attached to this issue. But for a fence or anything, this should work. Most likely you'll save a few bytes as well, which makes us all happier.
Yichard, Re-opening after this issue was inexplicably closed by Nanduka Balogh with the "resolution" of "Contact Support".
On the right, a SsculptCrafter made robot (one sculptie), before applying any transparency. Unique number/colors for each face to show it's OK everywhere - except that parts will flicker annoyingly when I move and a second after that.
In the center, I applied 1% transparency to show the bug. Obviously faces are now rendered in an arbitrary order.... On the left, a SculptCrafter made animated texture robot; as you can see the transparent part of the texture makes only one set of arms visible, frame 3 of its walking cycle to be precise. But the same bug happens in the same way, making nontransparent faces look rendered out of order! I guess the viewer code works like this: if (any transparency at all) { Skip face sorting, use fixed arbitrary order; }else { Do face sorting sort of correctly, but do it randomly when faces overlap so it flickers; }I'm showing that "code" thing to point out that the incredibly annoying flickering when faces overlap perfectly (as the arms of the robots do from the side) is not present when the transparency bug is active, so please look it over while you fix the transparency bug, you might fix the annoying random-like flickering too within 5 minutes if you just look the code over while you're at it. Contagious, the flickering you mention is called z-fighting, look it up on Wikipedia at http://en.wikipedia.org/wiki/Z-fighting
Your pseudo-code on the transparency-issue is quite correct. If there is any transparency, the prims cannot be used in the z-buffer, so you can say it skips face sorting. But of course they do need to be rendered, so they're drawn over the scene with non-transparent objects. The problem is these prims are drawn in full. So anytime two or more transparent prims intersect, they're not drawn intersected, but on top of eachother. Any solution to fix this is too heavy. For example ray-tracing would work, but even on powerful machines, scenes can take seconds to minutes to hours to render a still image. I suppose a framerate of 1 frame per minute would be worse than prims rendered on top of each other. Actually there have been experiments and progress with Real Time Raytracing, it is still experimental however. Its progess is impressive, but still not ready for anything production. It requires massive hardware still, but is `much` faster then 1 frame every few minutes.
http://graphics.cs.uni-sb.de/Publications/2005/Ecosystems/Ecosystems_Teaser00.jpg Moore's Law works in favor of Ray-Tracing, because it assures us that computers will get faster - much faster - while monitor resolutions will grow at a much slower pace. As computational capabilities outgrow computational requirements, the quality of rendering Ray-Tracing in real time will improve, and developers will have an opportunity to do more than ever before. However its application is still not ready for secondlife, not everyone has the hardware to back this type of thing, even my high-end system would rattle under its load. But I did like the solution suggested in VWR-6713, as seen here: http://www.humus.name/?page=3D&ID=61 Daedalus, yes, but what I don't understand is precisely why prims with transparency textures cannot use the z buffer. Why are these primes teated differently? If there really was an intrinsic problem, we should also see z-fighting and texture muddling with non-transparent faces. I understant that transparent textures need more computation or memory to render, but not why they follow a different channel.
Anyway this is not a Linden lab problem, it is in the rendering library, which is probably already several years old, and is not likely to be upgraded. the famous "openGL" and the like, which, by the way, all more or less exhibit the same bug. The z buffer only holds 1 reference per pixel, the one on top, transparent things layer which would require something more like a z matrix, and would require extra processing since you can't use tricks to speed up locating the thing closest to the camera.
Ah, I didn't yet know about that realtime raytracing, looks very interesting. Thanks Aeron
Yichard, afaik, z-fighting also occurs with opaque textures. I'll see if I can test that. I'm having the impression that textures are not presented to the sorting algorithm in a fixed order, so textures with identical Z-values flicker are correctly sorted but in an fluctuating way.
Z-ORDER INPUT SOLUTION Say ABCD are totally identical faces except the color. Frame 1: Sorting gets ABCD as imput, and outputs ADBC. Which is correct sorting. (the changing order is a side-effect of some queueing or buffering mechanisms, which themselves may or may not be adapted to produce fixed order) The fix would be to present the textures in exactly the same order each time. With knowledge of the exact sorting algorithm used (or using a sorting algorithm that makes it easier), you could present the textures as always ABCD, ABCD, ABCD and if something is blinking, have a fixed way to re-add it to the mix. ABCD would output ADBC (on equal values, many sorting algorithms will move things around in a totally predictable way, which we will count on) ABCD would output ADBC again, no flickering B blinks off (rotating of a transparent texture, or whatever) ACD would output ADC B blinks on input may now be ACDB if not for the fix! We need input to be ABCD again, and since every texture is stripped of any ID in a texture pipeline, sort it according to an arbitrary fixed test (i.e. reddest upperleft pixel first, on ties bluest first, on ties greenest first, on ties tolerate leftover flickering). Obstacles to Z-ORDER INPUT SOLUTION: ALTERNATE SOLUTION: offer a 500$ to whoever reduces flickering by at least 95%. It's much, much better than waiting for the next openGL library to come out and hoping they fixed it! Or put a Linden coder on it - some days I wish there was a garanteed Linden coder attached to whatever graphic issue has most votes. And once Z-fighting is fixed, or mostly fixed, I have a feeling that fix will contain code useful in fixing the transparency non-Z-sorting bug... I have a feeling the flickering bug is what causes Linden Labs to turn Z-sorting off for transparency as the result of Z-fighting within a complex transparent sculptie may be one of the worst eye sores known to residentkind. Contagious, sounds good in theory.. but, you have to realize that z-fighting has been around since 3d games we're all but in thier infancy and it is still here today.
I don't wish to be a nay-sayer but generaly speaking, z-fighting between objects near each other in the z-buffer will flicker, it is to be expected, this happens in transparent and non-transparent surfaces equally. Surfaces that are along the same spacial plane and overlap will z-fight, there is little avoiding this. The best LL could do is increase the precision of the depth buffer and that will lower flicker on non-transparent, non coplanar overlapping surfaces. Generally it is up to the content creator to resolve this issue rather then delve into lazy and costly practices. Also it is not ABCD that needs sorting but A,B,C,D,E,F,.....,KXZ,KYA,KTB,....,NVO, and keeping track of every set of overlapping textures that can occur in a dynamic 3d environment is very costly. It is niave to think that if this could be solved so simply that it hasn't been done. I will re-quote as stated in an ealier comment by Daedalus Young. Subdividing can get complex, and multipies out of control as objects intersect each other. The page I linked was to help solve it for flat surfaces so they do no flip over each other as much when they are not overlapping and they are not intersecting. (some is better then none in my opinion). Another way to reduce this problem would be just to alphablend them based on the objects distance, objects of equal distance, even if they intersect like a ring around a pole would get the same blend value. This has inherent problems of its own. The last way I will consider mentioning is ray tracing (rather ray casting) the scene, the rays could stop when they hit opaque objects or opaque parts of transparent textures but otherwise will collect the extra overlapping textures. This method is very handware intensive and not currently within SL's scope of users. (forgive me if I don't make sense i'm tired) Aeron, in short my argument is this:
-If we get to consistently pick the same overlap pattern for the same position, z-fighting will not cause flickering in nontransparent objects. By no means we care if that pattern is any more correct than any other frame in the flicker cycle, we just stick to one and only one. Pre-ordering the prims (not the face) and having a consistent face sorting algorithm would be enough. -Once that's done, the flickering problem is not so bad as to make complex, overlapping things like my robot's arms from the side be dizzyingly superflickering, and Z-sorting for partly transparent objects like my bot will be an option - or at least it will be much, much easier to make a "close enough" or "woohoo clean" fix. P.S.: what is the issue or meta-issue for Z-fighting? I have a quick trick to reduce it a lot. There doesn't yet seem to be a separate z-fighting issue (searched with Google). And it's different from the alpha-z-buffer issue (this one), so I'd say go ahead and open a new issue.
z flicker should NOT happen, even with very close surfaces. Of course if two surfaces are perfectly coplanar, the viewer has no way to know which of them has to be displayed (this is why the builders have to avoid such a situation). a 3D VRML viewer like Cortona rendered this case as a dashed surface, a way to render both faces equally, but there was no flickering. Another VRML viever, Blaxun, which had much less values allowed in its z buffer, showed much more face muddling for nearby coplanar faces, but still no flickering. Flickering in Second Life indicates that the scene is not alway rendered in the same order, that some elements of randomization occur, which is not good and should be avoided (some months ago we had a very unpleasant flickering textures problem, which seems gone for now).
However the problem in this thread is about very non-coplanar faces being muddled. It is different of the problem which occurs with coplanar faces. And I think that there is no theoretical limitation creating the texture muddling, when there is one for rendering coplanar faces. Contagious, the "useful code" would be to ELIMINATE THE RANDOM RENDERING ORDER. A still scene should alway render its faces in the same order, to avoid flicker in any situation. The solution to the texture muddling should be to allow for SEVERAL VALUES FOR EACH PIXEL IN THE Z-BUFFER, each with its own alpha coefficient and distance. This theoretically allows for the correct mixing of an infinite number of superimposed alphatextured faces, however at the cost of a memory load proportionnal to the number of values allowed, and a calculation time less than proportionnal. Today a tradeoff would be to allow 2 or 3 values. This would only little impact the frame rate, while solving the issue into most situations. Until further increase in computers power still allows for more values... But the main problem I see is that these parts of the viewer are not written by Linden Labs, but they are provided as libraries (the famous openGL, etc) that Linden Labs cannot modify (because they are copyrighted, not open source, and I guess very complicated). The library creators will not admit that there is a bug, and probably Linden labs has not enough strength for writing their own library. So the hope relies probably on the capacities of IBM, allied with the experience of the Second Life team. Muni, you are right. I did check it, other software don't flicker like that (so it's not some permanent hardware flaw) so there is no excuse for Second Life to not fixing it, bar dependence on some proprietary code.
...which is the case unfortunately, but then my pre-sorting trick might still work at getting the code non-random. Since I have not succeeded in opening an issue, here is the quick fix: Camera smoothing and related settings cranked up to the max produce for me up to 9 seconds of heavy flickering; even for movements which during that whole 9 seconds were less than a pixel. The quick fix is to crank the camera smoothing and related sliders all the way down, making the flicker 90% less. Until someone bothers to make the camera smoothing (which IS LL owned code) stop caring about less than half a pixel of movement left in leftover camera smoothing - rerendering extremely small differences like that stretches the problem to several seconds after user stopped moving. And back to the transparency problem - is it a problem in proprietary code, or a Linden Labs code problem? ... in such an extend that the problems appears only with the SL viewer, we can guess that it is in the Linden lab code, not in the library. However I would be cautious with such a reasoning. Indeed such kind of libraries are surely complex, and, as most softwares today, they are probably written in the Microsoft style, this means that the most common cases work correctly, but if you are not in these common cases they will say that it is you who have a psychological problem, why the heck you want to use transparencies. Add to this that you probably have to guess most of the documentation, you must be born with knowing how to use the libraries. Into such conditions, even the best coders will have trouble to use the libraries. I remember that Cortona (an however good soft) had a similar bug, not with transparencies, but with textures stored in PNG files, even without transparencies. This tells us that the bug was not in the rendering library, but in the file parsing.
So it is difficult to conclude. My best guess is an uncomplete library, unable to handle the multi-transparency situation (for instance because it has only one value in the z-buffer, or perhaps more trite problems). A second guess is a correct but ill documented library, that LL was not able to make it work properly. Well, we have only guesses, not infos. It would be fair to see somebody of the development team explaining us a bit how it works, and where the problem come from. Otherwise, even if we find a solution here, all this discussion is a bit useless. I'll join the chorus of people complaining about this behavior - and attach a file. My file shows the problem pretty clearly, its a picture of a house - built from a sphere that is semi-transparent. Inside the house is a curtain that is built with a texture that includes an alpha channel. The texture has a section at the top and bottom that is completely transparent, and the bulk of the texture, in the middle that is opaque fabric.
The desired and intended behavior is that the sections of the texture that are transparent, be rendered as such, and the opaque sections are likewise rendered as such. The opaque section, are rendered as opaque when an opaque object is in the background (the floor in this case). But are rendered as semi-transparent when a transparent object is in the background (the sphere/wall in this case). aaron I've just come across this problem and it's very frustrating. I'm not even a builder; just an ordinary user of things made by other people. I can't put a pot plant in the corner of my living room, because although the pot is well inside the room, the plant appears to be half outside, because of the transparency problems.
I can't believe this problem has been recognised for almost 2 years and not yet resolved when SL manages to do so many amazingly clever things. Thanks LL for what you have enabled for us and please fix this one soon I have uploaded a quick videoclip demonstrating that most alpha problems are related to prim center coordinates. Hopefully this will give people some idea on how to build things to circumvent this problem. As said before this is not directly related to Second Life as I have seen the same problem in other environments, though they are rare since in most cases the items in those places are usually created by proffessionals, who know what they're doing and can avoid pittraps such as this one.
So, watch and learn. -Ilyara I didn't grasp how to "solve" this problem
Can please some of you be patient and publish a wiki with the exact explanation? Video didn't teach me anything except that some mysterious magic is working somewhere, and many other recipes appear quite difficult to grasp. Being a "popularizer" and teache in SL I would love to teach other people how to circumvent this problem which IS really disastrous... If Lindens don't mind solving it, at lease we must workaround in some ways Greetings, Hmmmm....
I happened to see the problem on ONE prim, on itself. It was a quarter of a torus. When looking from a certain angle, the inner side was visible through the outer side (on certain angles of viewing, part of the inner side faces the viewer, but are normally hidden). So i don't think that there are "tips" to avoid the problem. But there certainly are SOLUTIONS, as Linden trees don't show this texture muddling, and no more bushes and grasses in Oblivion. And oblivion scenes have a much higher frame rate, despites running on the same machine and being sometimes complex. (many characters, etc). This already all is said before, but for the sake of completeness, I'll say it again:
Ilyara, it's actually to do with objects being both in front of and behind eachother at the same time. The reason your 4-prim bush works is because the planes are Yichard, the Linden trees work because they are 1-bit transparency images. That makes them compatible with the z-buffer, as the pixels are either opaque or transparent. Full transparent images I can't give you more tips, evaluate each situation and see if there's absolutely no other way of doing it like it is. It's a matter of kill-your-darlings. Recently in a game level design I came across this issue too, where one object really needing transparency intersected with one that had transparency for eye-candy purposes. Although I'd loved to keep it, I could only really solve it by not using the eye-candy transparency. So just a tiny bit less win, but it solved a huge deal of fail. "it's actually to do with objects being both in front of and behind eachother at the same time."
That's what the bush example is illustrating. If you read the text you see it says 'Same Coordinates'. As for the Red/Blue example the pillars represent the center of the prims in both cases. Clearly not on the same spot. In the second example the blue prim is big enough so the red prim is inside the blue one. But the alpha problem show is that when the center of the red prim is infront of the blue prim center, the whole red prim is drawn infront of the blue one, despite it being inside it. And when you turn the camera around the center of the blue prim becomes closer to the camera, and thus the entire blue prim is drawn infront of the red one. here is some light on this ugly issue:
http://www.opengl.org/wiki/index.php/Alpha_Blending in short, SL uses OpenGL as a rendering library (set of ready made functions). A good image of its working is that each face is painted in turn in the z buffer, a memory space that we can figure as a succession of painted layers. Save that once a layer is covered, it is discarded, and in fact only the uppermost layer (last painted) is memorized. Faces are painted in any order, and when a new face has to be painted in a position where it is already covered, it is not painted (this would be useless). there are other limitations to openGL, such as the very small number of lights (8, less in SL the sun and the moon) which also make some glitches like lights appearing or disappearing when there are more than 6. So we understand where this bug comes from, but also that it is not near of being solved: the last attempt to rewrite openGL properly was abandonned by lack of funds. Today the whole thing is managed by a consortium named the Khronos Group, which is made of 3Dlabs, Apple, ATI, Dell, Evans & Sutherland, Hewlett-Packard, IBM, Intel, Matrox, nVidia, SGI and Sun Microsystems. So it is these people that we must badger, not Linden labs. (although Linden Labs could become a part of it) However there are several versions of open GL, and some may correct the bug. (added) Also the 1 bit alpha channel brings back the problem to non-transparent faces (when it is opaque) and a non-existent face (when it is transparent). This explains why 1 bit alpha textures don't show the bug. So it would be unfair to say that it is a Linden labs problem, it is a difficult limitation to 3D rendering, which was not overcome by openGL and the largest companies workinf for it. Only a new version of OpenGL implementing several layers of transparency in the z-buffer will stop this. Implementing 2, or 3... transparency layers in the z-buffer would multiply its memory requirements by 2, 3... etc. This was a severe limitation 10 years ago, but should not be today. On the other hand, Oblivion also uses openGL, and it displays an outstanding better quality and frame rate than SL. This is partly due to "optimisations", such as one bit alpha channel textures (for grass, bushes) (unless they are rendered with 3D textures) and a much limited set of textures per scene. But this doesn't explains all, and I strongly suspect that the SL viewer code would require some optimisations also. @Yichard Muni
Actually, oblivion uses DX 9, it only uses opengl if you apply a patch that is shoddy at best, or run it under wine. I've taken the liberty of uploading screenshots illustrating the performance difference between the two. DX 9 (135 fps): OpenGL Patch (45 fps): http://farm4.static.flickr.com/3140/3024664821_f93f0c3bf6_o.png __________________________________ Oblivion Minimum System Requirements: Windows XP, Windows 2000, Windows XP 64-bit It also lags in the extreme when compared to DX 10 versions of games like Crysis, which gets 80fps on medium-high graphics on my 800 USD machine featuring a modest geforce 8800 GTS. Direct X games generally do not suffer from the alpha blending bug. In addition to this, direct x 11 will also support gpu and/or software realtime raytracing, and will be firmware updatable on most geforce cards that current support DX10. By contrast games like Kotor II and Neverwinter Nights II are limited, sluggish, and suffer numerous VBO related issues (both are extremely choppy until you disable them, and still not fantastic for what they are, running at 25fps or less or less on the same machine). Neverwinter Nights II, opengl, low settings (43 fps): http://farm4.static.flickr.com/3043/3024664813_35a30fbefa_o.png Crysis, DX 10, same machine (88 fps): http://farm4.static.flickr.com/3037/3025491840_2e7303178d_b.jpg You'll note in the second screenshot, there are no alpha blending issues, despire thousands of plants with alpha textures. So, it seems to me that rewriting SL to support direct x would solve any number of problems, but, no one wants to hear that; it's too much work, it would leave out mac and linux users without LL going to the expense of writing an API to support gpu based direct X, and it's evil + loaded with trans fat on top of that, so, I won't suggest it. However, proof is in the pudding as it were. *All screenshots taken on the following machine: 2.4 ghz 64-bit Intel dual core processor Someone also mentioned something about a nobel prize and raytracing. DX 11 will support both software and onboard GPU realtime raytracing. Can anyone explain to me why this issue hasn't been fixed? Even a partial/hack fix might be more acceptable than what we have now. Maybe only calculate full alpha blending for the (semi-)transparent prims closest to the camera, then render all others behind it as opaque? I would find this solution preferable to the graphical shenanigans that are so prevalent in SL today with all the prim hair and prim skirts and windows and railings and everything else.
Can anyone explain why this issue isn't "major", or more importantly, why it's not assigned to anyone after almost two years? It's not like this is some minor, isolated issue that only affects a few specific builds, or only manifests on certain hardware configurations. This occurs on PCs and Macs (possibly Linux but I don't have a box to test with at the moment), and on a wide array of video cards. Oh yeah, and it looks nasty. As I understand it the reason it's still around is that no-one has a solution that's feasible. The problem is that in order to calculate the rendering order of objects, the rendering engine uses the distance from the camera to the centre of the object. In the case of an object that is visible through another object, if its centre is closer than the object it can be seen through, rendering order is incorrectly calculated.
Ray tracing would fix this by calculating the exact path that light takes to get to the camera. The other suggestion has been to have the client break prims down into smaller prims for rendering, to avoid this, but that woud take time and I'm unaware of any way of calculating the exact breakdown required in order to solve this, without essentially ending up back at ray tracing. A few people have point out it doesn't happen on this object, or that object, or in some other 3D application. The issue is not present in all cases where transparency is used, only (AFAIK) in cases where one object is both infront and behind another, from the camera's POV, such as a transparent cylinder containing another object. hmmm.... why it hasn't been fixed???
To realy fix it would require more layers in the z-buffer, to allow for several layers of transparency. When Open GL was developped 10 years ago, it was probably simplified to save memory. But now this simplification doesn't make sense, it would save only some megaoctets when memories are now measured in gigaoctets. However redesigning openGL would cost money, and worse than money, pride, for companies which would have to work together. Unless it is the LL browser which doesn't use the openGL library properly, as other openGL softwares don't have the bug. Some days ago, I did a built which used about ten superimposed full alpha transparency prims, which did not showed the bug. Is this because they all used the same texture? Not sure, because one month ago I had the bug with one prim hiding another part of itself. So my idea is that the bug is not in the library, but in the viewer. My ten prims yesterday were hollow cylinders, that is one face showing through another one. Both faces were rendred properly, and others cylonders showing through also showed properly. Probably because there was only one texture for all, and in this case they are all renderd in one step, like particules. But one month ago the prims had only one face, and a face showing through itself did not worked. I have seen this issue manifest on a pair of regular box prims; one was a railing, fully behind the other prim, and the other was a picture, solid on all but one side, with an image on the main (closest) face. The image did not actually use transparency, but because it was an SL screenshot, it was apparently saved as a 24-bit PNG and marked as having transparency info. At certain angles, even though the picture was still closer to the camera than the railing, the railing was rendered in front of the picture.
A very unpleasant effect for an art gallery, to be sure It hasn't been fixed for one or more reasons.
1. Nobody has been assigned to it, and some months ago someone arbitrarily flagged this issue resolved, when of course it wasn't. 2. It can't be fixed, due either to flaws in OpenGL or current graphics drivers. 3. Linden Lab doesn't care, because although this is the fourth most reported error, and unresolved, they haven't even If the answer is #2, then builders will have to do what other game manufacturers do – plan their builds accordingly. However, it's more likely #3. Linden Lab only cares about flashy effects they can show off to reporters. Serious flaws, such as the inability to teleport, lost inventory, etc aren't newsworthy and get no attention. Rised to Major because it restricts the experience extremely and unnecessary. It also restricts the posibilities of design and hinders the furniture and prefab market.
There is no easy workaround to solve this problem and is related to any range within Second Life. Seriously: Why is this still a bug?
It's still a bug because no-one has a solution. You either calculate which surface light hits first (ray tracing, too CPU intensive), or you end up with this issue. 3D environments that don't visibly have this bug solve it by not designing items with one entirely enclosed within a transparent object.
Xuqu, there ARE solutions. I can only repeat what I said above,, in nov 17:
To realy fix it would require more layers in the z-buffer, to allow for several layers of transparency. When Open GL was developped 10 years ago, it was probably simplified to save memory. But now this simplification doesn't make sense, it would save only some megaoctets when memories are now measured in gigaoctets. However redesigning openGL would cost money, and worse than money, pride, for companies which would have to work together. Not sure why you think this is a z-buffer issue. From what I can tell, the graphics code calculates which object is infront (and therefore rendered first) based on the relative positions of their centres. The inner, smaller cylinder in the example images is very slightly closer to the camera, and so is rendered infront of the bigger but "behind" cylinder. It's not a problem holding the data, it's a problem calculating it at all.
Calculating which object is in before of behind which other is a very difficult problem. In some cases, it even not has a solution (torus, or two triangles partially hiding each other) and anyway the calculation time increases exponentially with the number of faces. So this algorythm is used only very partially, with "bounding boxes" enclosing more complex objects. This can save calculations in some cases ,like a car hidden behind a wall.
So the method used is the z buffer, which is a copy of the screen, pixel per pixel. Each face is rendered in any order, and its value for a given pixel placed in the corresponding memory of the z buffer. Then an information on distance is added. When another face is calculated, and the distance of the pixel is higher, then the pixel is not calculated. If it is closer, the pixel replaces the previous, with the new shorter distance. This works perfectly well with all opaque faces. But when transparencies appear, we must have several layers in the z buffer, which increases memory use (3 times, if there are 3 layers) and somewhat also calculation time. Probably in SL there are two layers. So, when all th faces with a given texture are calculated together, their transparencies merge properly. But if a second texture is calculated later, it replaces the previous in the second layer. This makes that one of the texture replaces the other, depending on which is calculated first (the order can be different from a frame to the other, making the textures flicker). Even if a texture is applied for instance to a torus, then the bug appears with only one texture, on itself. Probably this sytem with one transparent layer in the z buffer was implemented for transparent faces without textures. In this case it works well. But with several textures one layer is not enough, we should have at least 2 transparency layers (3 in total). This would consume some megaooctets only. At least this is what I guess, because we discuss in the vacuum, without any return or whatsoever... Check out the Imprudence client: http://imprudenceviewer.org/
Whatever they did with this viewer, they seem to have greatly reduced this problem. I thought it had been resolved, until panning my camera back and forth to shift perspectives caused it to recur. I haven't had much of a chance to use this viewer, just having found it last night, but it's pretty quck. Only issue that would keep me from using it full time is it has no sound support (yet). This is probably the most annoying bug in all of SL, except for the disappearing inventory. As a builder, I find it unbelievably frustrating. And I realize that a fix might be difficult, because it's true... it is difficult sometimes to translate "depth" and "perception" out of 0s and 1s.
But I remember a time when this bug did not exist. So how was it done back then? (Approximately before April 2007.) Unfortunately this isn't a bug that can be solved (in realtime). This is a limitation of graphics engines that are based on rasterization (instead of ray tracing for example). Transparent objects cannot use the depth buffer to determine how they should blend together against other transparent objects, as such they need to be rendered separately.
Ideally, you would want to draw each transparent pixel in order from far away in the scene to the camera's position (in the inverse order of distance). Unfortunately doing so in real-time is simply not possible on modern hardware. We're thus forced to do very coarse depth sorting which will always have corner case bugs which are simply unavoidable. Videogames avoid this by having professional artists that create geometry that specifically minimizes or avoids this inherent limitation of current graphics technology. Unfortunately, the only option is to NOT create transparent objects and geometry that overlap or are closely adjacent. For objects that you don't want partial transparency, you can instead vote for the following jira, which deals with the adding of support to treat alpha textures as masks (every pixel is either opaque or invisible, with no partial transparency and thus no blending), which allows us to use the depth buffer and would thus not suffer from alpha sorting errors: BigPapi what you write is not true, and it is enough to play a game like Oblivion for everybody to check it: when you walk into an Oblivion forest or bush, you go through a photorealistic tangle of leaves and grass blades, which makes ridiculous anything we can see in SL. Oblivion doesn't use flat alphatextured sprites, but probably alphatextured meshes or NURBS.
-I have NEVER seen any alpha transparency muddling problem in Oblivion, even in these forests and bushes which obviously use several alpha textures. -Let us also say that I have NEVER see any aliasing effect or pixellation (which may appear with 1 bit transparent textures). -I have NEVER seen any angulous butts or stretched clothing in Oblivion. Probably they use NURBS for the characters, or at least highpoly meshes. -The avatars in Oblivion have REALISTIC walks and animations, not the gaudy walks we have in SL. Nowhere else we have Elves walking like Donald Duck. -and with all this, I have NEVER seen any lag or even a noticeably low frame rate, even in complex scenes involving grass or curved trees or towns, and 4-5 characters. -etc The truth is very probably that Oblivion uses up to date rendering libraries, or a system they developped themselves, when SL uses 12 years old rendering libraries or worse. Pity I no more have the game, I would post screen shots which would REALLY close this discussion. I agree there are some shortcoming in Oblivion, which mark the real limits of the 2006 technology. But where are the "special optimisation methods" used in game building? Why these methods would not be known and used into SL?? oh, ok, thank to you to make us understand at last that this is not the roleplay here to have civilized discussions. Enjoy your roleplay then. if you want, I still have several other JIRAs open. As I said, I shall not reopen a JIRA closed by a Linden. But now there will be other roleplays to deal with. (rewrote this post, for more accurate info)
I no more have the game, but we have now many Oblivion videos on Youtube. I selected some among the many available: -for photorealistic vegetation in a huge scene: http://www.youtube.com/watch?v=6esRjBvU9nc&feature=related -For the number of objects: http://www.youtube.com/watch?v=UyHiIeBsc9E -for the number of characters: (not nice video) http://www.youtube.com/watch?v=w3FOMfLHS_8&feature=related -This one gives all the PC characteristics, and max graphic settings, for a fair comparizon (many other videos do) http://www.youtube.com/watch?v=pTofa9ehovU&feature=related and this is only Youtube quality, imagine the same, full screen, and sharp. Theses videos are a shame for SL. Yes, we can. Yichard: What I wrote remains true. Oblivion uses a piece of middleware called SpeedTree to render all of it's foliage. SpeedTree has been designed by extremely talented professionals in such a way that the rendering of their foliage doesn't exhibit any obvious alpha sorting errors. My post was very specific in stating that videogames avoiding by having their professional artists explicitly design their geometry in such a way that you never see these issues (or avoid them entirely), and SpeedTree is yet another example of this.
Yes, Oblivion and other modern games have more advanced materials systems (which we've previously mentioned as something we're looking to add when when we have the development resources to do so. Everything else you mentioned is a perfect example of the things that you can do when you have professional artists working in a structured environment on art. We have an open system where close to all of our content is created by amateurs in the public at large and where we don't place many limits on the efficiency of the content they create. So yes, of course a modern AAA videogame looks better than the average SL scene. Professional game artists (which Bethesda's most certainly are) are simply that good and their engine has been created to perform well and look beautiful, not to allow anyone to dynamically create any content that they want with few limits. Like I said before, for objects that you don't want partial transparency, you can instead vote for the following jira, which deals with the adding of support to treat alpha textures as masks (every pixel is either opaque or invisible, with no partial transparency and thus no blending), which allows us to use the depth buffer and would thus not suffer from alpha sorting errors: That has been one of my points all along. Since most people in Second Life aren't proffessionals, alot of things are going to be bad looking.
There are ways around it with increased primcount and other solutions. It's like most things about finding the right balance. Though, this "bug" has been improved over the years. There was a time where all alpha textures where brightly visible through the water surface. Back then two plane trees would flicker like crazy all the time, nowadays you don't see that flickering nearly as much. I do hope that the future will bring a solution that will end this behaviour if a more advanced version of OpenGL or something comes out.... So, avoid making bad stuff. I am reopening because Linden Labs needs to make a choice. Here are the two options:
-Set it as "Won't fix" if it's truly unfixable at LL's programming skill level, and other constraints. It may be a placeholder for "won't fix NOW". -Assign it to some Linden. Either choice is good enough from the classification point of view, "Closed" is not because it's misleading. Contagious,. although he didn't say so in his comment BigPapi in his last comment stated pretty much that this was unfixable and closed it as expected behavior. I hate to speculate on motives but I'm guessing he chose expected behavior rather than won't fix because as explained above this is unavoidable for any system that isn't designed with objects and textures designed so people don't see these errors or that they don't happen which is impossible with a user created system like SL is.
As to your demand that they make a choice I think it's clear per the above comments by BigPapi and others that it's not a choice they can make because there's no way for them to "fix" this problem. Contagious and Gordon:
what I would like to see from Linden labs is not vague generalities or opinions, but a precise TECHNICAL STUDY on what blocks the resolution of this issue: Bigdady Linden: Most video games, including oblivion, also have user created content. These are the wellknown "mods". I remember one in Oblivion, which property was to make all the female character topless! What is relevant here is that the result of these amateur mods is as good as the professionnal content. This is because the mod-ers use the same rendering system, and also that they can import 3D files created with gmax (a free version of the pro soft 3DSmax, limited to only a special file format for mods). What makes 3DSmax so superior to SL's prim system, or to an old VRML rendering soft like ISB? For instance when we create an object, and use several textures, 3DS calculates in one click a texture map and unique texture for it, thus greatly enhancing the rendering cost of the whole object. In the old ISB this map must be calculated by hand, which may need several days and cannot easily be modified. So VRML worlds, and SL too, have one texture per prim, thus strongly slowing the rendering. There are many other problems like this, which can be solved if someone decides to become part of the solution instead of looking for excuses. Especially there are several JIRAs about importing real 3D file formats. Just ask. Sigh, closing this again. OpenGL AND DirectX both suffer from this drawback in the rendering of partially transparent objects, because rasterization libraries that rely on the depth buffer for simple occlusion sorting ALL have this issue. There is NO magic rasterization library that doesn't suffer this problem. I am re-pasting a link from the OpenGL wiki that explains the issue and why there is no solution to it:
http://www.opengl.org/wiki/Alpha_Blending PLEASE DO NOT REOPEN THIS ISSUE. Especially if you haven't read or understand the above linked wiki page! Alpha sorting problems can ONLY be solved in one of three ways: I've been recommending #1 all this time, because #2 & #3 are currently impossible to do in real time for the geometry that our residents create in world. Yes, impossible. No, not because we "don't get it." If we were to implement #2 or #3, the viewer framerate would quickly approach 0, which would make it very hard to move around. Like I said a couple of times already, for objects that you don't want partial transparency, you can instead vote for the following jira, which deals with the adding of support to treat alpha textures as masks (every pixel is either opaque or invisible, with no partial transparency and thus no blending), which allows us to use the depth buffer and would thus not suffer from alpha sorting errors: I think that "Resolved - Won't Finish" is a more accurate closing of this issue. Saying it is Expected Behavior implies that one likes the way it's being handled now and for the future. Either that or change the whole thing to a feature request so that the alpha sorting order remains something that LL would/should solve IF/WHEN the technology is there to do it.
I agree with snickers on this, while I'm also well aware of the limits of current graphics technology, it is coming forwards all the time so to say that the problem can ONLY be resolved one way is a narrow stance to take. Who knows, maybe it's even possible that somewhere down the line a new technique can be developed that will solve the issue without the need for ray-tracing, why shouldn't that technique be developed by Linden Labs?
For example, what if we had a system that allowed builders to assign priorities to faces of an object relative to others in the same linked-set? The Myth: The Fallen Lords and Myth 2: Soulblighter engine (11 years old now) allowed map-makers to import 3dmf models and assign priorities in this way so that complex/interesting geometry can be created and yet avoid the clashes that could be caused by faces that are too close to one-another. Let us (the builders) provide these hints to the Second Life graphics engine, and we could probably resolve a ton of common-cases. I mean, a lot of cases are unavoidable. Do you expect us to drop a one-prim fence that uses a texture in favour of using tens or hundreds of prims for a much laggier and resource-hogging effect? What if I have a house with an alpha-window and someone puts up a tree outside within view of my window? What about the random grass in some sims? BigPapi,
I have a simple fix, at the viewer level, which is likely to work with the today graphic library and allow full freedom to content creator. But re-open first this feature request... Please also post somewhere the shedule for the modularization of the viewer. All other fixes are in dependence of this one. If you have a way to resolve this, make a patch, then post the patch. Otherwise just lit this one lie, as much as I would like to see this get fixed, the comments have only gone in circles since it was opened. I really think LL should just lock this one, as much as I hate to say it (Someone somewhere will eventually reopen it, because they don't understand the above page or never bothered to read any of this, and demands for it to get fixed).
Closing it and saying "work as expected" is not a solution. I can accept it's a limitation in all 3D lib but I can't accept it to be "normal behavior".
To me you MUST: 1) Allow alpha masking, that will fix about 80% of the issues and cad reduce texture size. http://jira.secondlife.com/browse/VWR-6713 2) Add a page in the support/FAQ/Wiki to explain the problem to content creator and user 3) Then you can change is to "Closed - Won't fix" What about sorting faces within single prims, so that they do not overlap themselves strangely? It would be a boon to sculptie animation well beyond flexi sculpts and at low ressource cost.
When several prims are present, prim A would still be either completely in front or completely behind prim B, but at least object A would not overlap itself strangely and object B would not overlap itself strangely. A prim sorting only itself is not so ressource intensive. Do I need to open a separate issue to get that done? P.S.: with prims sorting their own faces artists could now position prims so that the issue would not be so annoying. P.P.S.: if you're thinking case study, think of a single-prim sculptie spider with 2 walk frames being shown in succession with llTextureAnim while making the other one invisible (an easy output of my tool). If you make the self-sort fix, you are getting very MMORPG server worthy with one fix. Sorting faces wouldn't help sculpties at-all as they are a single face anyway.
I think that for any real benefit this would have to apply to an entire linked-set as a lot of the sorting issues occur with objects beside one another, or intersecting. "Expected behavior"? Do you mean you entirely despair of making alpha textures overlay and sort correctly? Never ever? Ah geez, come on, don't give up. Have some milk and cookies, take a nap, and you'll feel like playing some more.
We can overlay many alpha-textured prims with no problem if they are all the same texture. This works even if each prim's texture is offset to show a different portion of the texture, or if repeats are altered to show different percentages of the texture. Is this maybe a clue to where the solution lies? Please keeping working on this. "Expected behavior"...laughing ruefully....I think you must have really been in a lot of pain as you gave that resolution. Nope, no matter how accustomed we get to things being borked, we expect better things from you. Did you read BigPapi Linden's comment - 06/Mar/09 08:48 AM before reopening this?
Anyone else think "Not
Complaining people; if it's simple, write it and submit it as a patch. If you can't, please PLEASE accept that perhaps your understanding of 3D rendering isn't as complete as you think it is, and maybe that actually it's a lot harder than you think. hihihi, getting closer of the solution.
harleen Gretsky, did you read my comment 07/Mar/09 12:20 AM before quoting BigPapi Linden??? There IS a simple fix which may solve at 100% the problem, without adding constrains to the content creators, without changing for a better library and rewriting all. It is probably the "optimisation" used by other games like Oblivion, where this ridiculous problem is never seen. But this would require a reorganization of the rendering module of the viewer, so a patch will not do. And such a task would require professionnal equipment, with all the simulators and test benches and quality assessment. But before describing this solution, I want to see High level Linden Labs people asking me officially. You understand why. Yes I did read your comment and when you have the solution posted here or in LL's hands then reopening this is the right thing to do based on BigPapi Linden's comment. But until then...
Closing this again. This IS expected behavior. If you can fix it then fix it, and post a patch. Otherwise this is just going to go around in circles forever.
ROFL If it is just what you expect of SL, then it is fine... note: I shall be offline for a while, due to RL issues. Useless to post again and again just to repeat the same thing. I shall reply later if LL asks for the simple solution. u don't understand, this isn't a linde bug, but an opengl2.x problem, create a workaround for this Linden must re-design all rendering engine...
PS: 180.55 nvidia driver "seem" not suffer about alpha overlap... (PNB 1.23.0) @Yichard: If you want to vote for something that has an actual chance of happening, try this: http://jira.secondlife.com/browse/VWR-6713
@Yichard
Oblivion uses 1-bit alpha which is what Snickers is pointing to in VWR-6713. This doesn't fix 100% of the problem, it just allows content creators to decide to either suffer jagged texture edges on some systems with no sorting issues, or to have nicer effects which require great-care to avoid sorting issues. Oblivion on XBox 360 (and I suspect a lot of modern graphics cards in the PC version) can do the 1-bit alpha quite nicely, by interpolating the 1-bit alpha at higher zooms to create "smooth" (i.e - curved) edges for a nice effect. If used right it's a great way to handle alpha, but isn't some magical fix that will solve everything for everyone. I still thing being able to identify relative sort-orders may be something worth investigating, I'll post an issue if I find time; basically these allow you to specify which faces render over others, with greater complexity this can become very powerful. This problem is caused by alpha textures, since these are partially invisible, or completely based on a invisible base, you will see such things. Unfortunately there is no real solution for this yet.
(this was discussed during to days bug triage meeting) Yichard,
1) Try your test with sets of shapes more complicated than a couple of planes (for example, the center of one object inside another, looking through). Straight-up planes usually work fine even in the current browser. 2) Claiming you have a solution that you plan to hold hostage is not particularly productive. I agree with Jen. Try putting something with crossed-planes inside a ring for example. The tree sticking up through the railing in the photos above is a good example. Plus Yichard, you can/should re-open the issue yourself. Lindens won't read closed issues at all no matter how many comments they may attract.
sigh seems someone still has something to say here and maybe even something usefull how to fix it, but noone will look at it as long this bug is still closed, so lets keep thinking of it and atleast stay in mind.
Please read BigPapi Linden's comments before reopening, thanks.
Harleen, did you read Yichard's comments before re-closing? Do you know for a fact that Big Papi is correct and that Yichard is wrong?
@snickers - Did you read all of the REST of the comments on this topic? We know how Oblivion does it - alpha masking versus alpha blending. If he's actually cracked this problem - to make alpha BLENDING simple, then he can be making a hell of a lot more money selling the solution to Nvidia or ATI/AMD, than he could possibly make selling it to Linden Labs.
If someone comes up to you and says "I know how to build a perpetual motion machine" or "I know how to travel faster than light" - you don't say "Oh, cool, here's a big wad of cash!" or "Of course, you're obviously smarter than everyone else on the planet!" You say "Where's the machine?" or "Got close-up photos of Alpha Centauri?" Scientists do NOT just ignore people with un-obvious claims on a whim - see the history of the Alcubierre drive for proof. @Yichard - you want exact information on what libraries have this "bug". It's not a bug - it's a matter of computational difficulty. Do you have any clue what O notation is, or P vs NP problems? There is one rather nice solution to the problem, but ... it requires new hardware, as it means ripping out the current rendering system and replacing it with ray-tracing. Fortunately, ray-tracing is embarrassingly parallel, and that's something the new computational GPUs are going to excel at. That'll fix the alpha blending problem - it'll also give us reflections, reflections of reflections, refraction, distance fogging, and a whole host of nice new features. Pop for one of these http://www.physorg.com/news177617175.html Out of curiosity, how many people with theories on how to solve this have ever written a 3D rendering engine? How many of you can even code? I have written a 3D engine, from scratch (no libraries, all my own code). Nothing fancy, but enough to know the sort of short-cuts that have to be taken to make these things work in real time.
I'm not saying it can't be done, I am going to say however that I'm not aware of any way of doing it, nor of any examples of someone fixing this problem through changing the engine (as others have pointed out, Oblivion & co. do it in the content creation stage - they have FAR more powerful tools for content creation though). Subdividing as a matter of course would probably help (and has been suggested by various people starting from comment #2), but is not a fix. I suspect a few people are thinking "subdivide the object until the problem goes away", however detecting the problem basically takes us back to raytracing (so not currently considered practical for realtime rendering). Anyone with a technical background who thinks they have a solution, the Unreal Engine recently became free for non-commercial use ( http://www.unrealtechnology.com/ @TaraLi:
Yes I've read all the comments here. First, I never agreed with LL CLOSING this topic as Resolved / Expected behavior. The problem still exists. It's NOT expected behavior as far as the end user is concerned. A fix may not be technically feasible given today's hardware and software but that doesn't mean this isn't a bug. It is. Closing it as NOT GOING TO FIX is more appropriate. Next, my comment was directed at Harleen for re-closing a topic on behalf of the Lindens. That was presumptive. I was not saying that Yichard HAS a fix. Only that if he did, reclosing the topic takes away any opportunity to provide it. Finally, LL has exhibited on many occasions that they are capable of screwing up and/or not knowing how to fix something and/or IGNORING fixes provided by the community. The entire development of Nicholaz' viewer was centered around him fixing things that LL wouldn't and in some cases, wouldn't even acknowledge. Yet, later, they got fixed. So let's not be presumptive that LL consists of "scientists" who know exactly what can and can't be done. K? 1) A bug is NOT when the software doesn't do what the user expects - it's when the software doesn't do what the programmer expects. Otherwise, there's a whole lot of people who consider it a bug that SL doesn't render images with photographic precision at infinite resolution. The z-fighting that we see in SL is expected, and a known issue, but it is NOT a bug.
2) Reclosing a JIRA report on behalf of the Lindens is NOT presumptive, it's an expected part of how the public JIRA is expected to work - with many eyes making the problem shallow, the Lindens hope that users with some experience will go through and close bugs that are duplicates, that are actually what's expected, and other semi-obvious possibilities, to allow them to focus on the things that actually ARE problems, or perhaps features that can be added. In addition, Yichard is quite capable of re-re-opening the issue, and posting the fix. He's said that he won't provide the solution until certain conditions are met. In the mean time, if Yichard wishes to get the solution out there, he's welcome to A) download the source code, code up a replacement rendering engine which fixes the problem, and make said client available to users, or B) sell the solution to any one of a number of other companies who can pay him a LOT more for it (I'm sure most major game makers and movie graphics rendering farms would dearly LOVE to have the algorithm that does this in a reasonable time, as it would speed up THEIR work incredibly, while allowing them to do really nice effects they haven't been able to so far...) 3) While Linden Labs is in fact not omniscient, when a large group of people BESIDES the Lindens acknowledge the issue, explain the issue in much the same manner, and agree that it is HARD - then anyone wanting to make claims that it is really easy, and that everyone who doesn't see that is totally mistaken, can expect to want to see proof that they are wrong. This is a KNOWN issue in Computer Science in general, there is quite a bit of study that goes on around graphics rendering, and a number of the people here are tired of people saying "I don't care if you can't do it , do it anyway! I want it! I want it! I WANT IT!" Explanations have been made - that those explanations mean that what someone wants, they can't have - that's not MY problem. I'm not qualified in psychiatry. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||