diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt new file mode 100755 index 0000000..8a15abe --- /dev/null +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt | |||
@@ -0,0 +1,346 @@ | |||
1 | CURRENT PRIORITIES | ||
2 | ================================================= | ||
3 | Use the HACD convex hull routine in Bullet rather than the C# version. | ||
4 | Speed up hullifying large meshes. | ||
5 | Enable vehicle border crossings (at least as poorly as ODE) | ||
6 | Terrain skirts | ||
7 | Avatar created in previous region and not new region when crossing border | ||
8 | Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) | ||
9 | Lock axis | ||
10 | Deleting a linkset while standing on the root will leave the physical shape of the root behind. | ||
11 | Not sure if it is because standing on it. Done with large prim linksets. | ||
12 | Linkset child rotations. | ||
13 | Nebadon spiral tube has middle sections which are rotated wrong. | ||
14 | Select linked spiral tube. Delink and note where the middle section ends up. | ||
15 | Vehicle angular vertical attraction | ||
16 | vehicle angular banking | ||
17 | Center-of-gravity | ||
18 | Vehicle angular deflection | ||
19 | Preferred orientation angular correction fix | ||
20 | when should angular and linear motor targets be zeroed? when selected? | ||
21 | Need a vehicle.clear()? Or an 'else' in prestep if not physical. | ||
22 | Teravus llMoveToTarget script debug | ||
23 | Mixing of hover, buoyancy/gravity, moveToTarget, into one force | ||
24 | Setting hover height to zero disables hover even if hover flags are on (from SL wiki) | ||
25 | limitMotorUp calibration (more down?) | ||
26 | llRotLookAt | ||
27 | llLookAt | ||
28 | Avatars walking up stairs (HALF DONE) | ||
29 | Avatar movement | ||
30 | flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE) | ||
31 | walking up stairs is not calibrated correctly (stairs out of Kepler cabin) | ||
32 | avatar capsule rotation completed (NOT DONE - Bullet's capsule shape is not the solution) | ||
33 | Vehicle script tuning/debugging | ||
34 | Avanti speed script | ||
35 | Weapon shooter script | ||
36 | Move material definitions (friction, ...) into simulator. | ||
37 | Add material densities to the material types. | ||
38 | Terrain detail: double terrain mesh detail | ||
39 | One sided meshes? Should terrain be built into a closed shape? | ||
40 | When meshes get partially wedged into the terrain, they cannot push themselves out. | ||
41 | It is possible that Bullet processes collisions whether entering or leaving a mesh. | ||
42 | Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 | ||
43 | |||
44 | VEHICLES TODO LIST: | ||
45 | ================================================= | ||
46 | Border crossing with linked vehicle causes crash | ||
47 | 20121129.1411: editting/moving phys object across region boundries causes crash | ||
48 | getPos-> btRigidBody::upcast -> getBodyType -> BOOM | ||
49 | Vehicles (Move smoothly) | ||
50 | Some vehicles should not be able to turn if no speed or off ground. | ||
51 | What to do if vehicle and prim buoyancy differ? | ||
52 | Cannot edit/move a vehicle being ridden: it jumps back to the origional position. | ||
53 | Neb car jiggling left and right | ||
54 | Happens on terrain and any other mesh object. Flat cubes are much smoother. | ||
55 | This has been reduced but not eliminated. | ||
56 | Implement referenceFrame for all the motion routines. | ||
57 | For limitMotorUp, use raycast down to find if vehicle is in the air. | ||
58 | Verify llGetVel() is returning a smooth and good value for vehicle movement. | ||
59 | llGetVel() should return the root's velocity if requested in a child prim. | ||
60 | Implement function efficiency for lineaar and angular motion. | ||
61 | After getting off a vehicle, the root prim is phantom (can be walked through) | ||
62 | Need to force a position update for the root prim after compound shape destruction | ||
63 | Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint) | ||
64 | Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties(). | ||
65 | A kludge that isn't fixing the real problem of Bullet adding extra motion. | ||
66 | Incorporate inter-relationship of angular corrections. For instance, angularDeflection | ||
67 | and angularMotorUp will compute same X or Y correction. When added together | ||
68 | creates over-correction and over-shoot and wabbling. | ||
69 | Vehicle attributes are not restored when a vehicle is rezzed on region creation | ||
70 | Create vehicle, setup vehicle properties, restart region, vehicle is not reinitialized. | ||
71 | |||
72 | GENERAL TODO LIST: | ||
73 | ================================================= | ||
74 | Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects. | ||
75 | Regular triangle meshes don't do physical collisions. | ||
76 | Resitution of a prim works on another prim but not on terrain. | ||
77 | The dropped prim doesn't bounce properly on the terrain. | ||
78 | Add a sanity check for PIDTarget location. | ||
79 | Level-of-detail for mesh creation. Prims with circular interiors require lod of 32. | ||
80 | Is much saved with lower LODs? At the moment, all set to 32. | ||
81 | Collisions are inconsistant: arrows are supposed to hit and report collision. Often don't. | ||
82 | If arrow show at prim, collision reported about 1/3 of time. If collision reported, | ||
83 | both arrow and prim report it. The arrow bounces off the prim 9 out of 10 times. | ||
84 | Shooting 5m sphere "arrows" at 60m/s. | ||
85 | llMoveToTarget objects are not effected by gravity until target is removed. | ||
86 | Compute CCD parameters based on body size | ||
87 | Can solver iterations be changed per body/shape? Can be for constraints but what | ||
88 | about regular vehicles? | ||
89 | Implement llSetPhysicalMaterial. | ||
90 | extend it with Center-of-mass, rolling friction, density | ||
91 | Implement llSetForceAndTorque. | ||
92 | Change BSPrim.moveToTarget to used forces rather than changing position | ||
93 | Changing position allows one to move through walls | ||
94 | Implement an avatar mesh shape. The Bullet capsule is way too limited. | ||
95 | Consider just hand creating a vertex/index array in a new BSShapeAvatar. | ||
96 | Verify/fix phantom, volume-detect objects do not fall to infinity. Should stop at terrain. | ||
97 | Revisit CollisionMargin. Builders notice the 0.04 spacing between prims. | ||
98 | Duplicating a physical prim causes old prim to jump away | ||
99 | Dup a phys prim and the original become unselected and thus interacts w/ selected prim. | ||
100 | Scenes with hundred of thousands of static objects take a lot of physics CPU time. | ||
101 | BSPrim.Force should set a continious force on the prim. The force should be | ||
102 | applied each tick. Some limits? | ||
103 | Gun sending shooter flying. | ||
104 | Collision margin (gap between physical objects lying on each other) | ||
105 | Boundry checking (crashes related to crossing boundry) | ||
106 | Add check for border edge position for avatars and objects. | ||
107 | Verify the events are created for border crossings. | ||
108 | Avatar rotation (check out changes to ScenePresence for physical rotation) | ||
109 | Avatar running (what does phys engine need to do?) | ||
110 | Small physical objects do not interact correctly | ||
111 | Create chain of .5x.5x.1 torui and make all but top physical so to hang. | ||
112 | The chain will fall apart and pairs will dance around on ground | ||
113 | Chains of 1x1x.2 will stay connected but will dance. | ||
114 | Chains above 2x2x.4 are more stable and get stablier as torui get larger. | ||
115 | Add PID motor for avatar movement (slow to stop, ...) | ||
116 | setForce should set a constant force. Different than AddImpulse. | ||
117 | Implement raycast. | ||
118 | Implement ShapeCollection.Dispose() | ||
119 | Implement water as a plain so raycasting and collisions can happen with same. | ||
120 | Add collision penetration return | ||
121 | Add field passed back by BulletSim.dll and fill with info in ManifoldConstact.GetDistance() | ||
122 | Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE | ||
123 | Also osGetPhysicsEngineVerion() maybe. | ||
124 | Linkset.Position and Linkset.Orientation requre rewrite to properly return | ||
125 | child position. LinksetConstraint acts like it's at taint time!! | ||
126 | Implement LockAngularMotion -- implements llSetStatus(ROTATE_AXIS_*, T/F) | ||
127 | Should the different PID factors have non-equal contributions for different | ||
128 | values of Efficiency? | ||
129 | Selecting and deselecting physical objects causes CPU processing time to jump | ||
130 | http://www.youtube.com/watch?v=Hjg57fWg8yI&hd=1 | ||
131 | put thousand physical objects, select and deselect same. CPU time will be large. | ||
132 | Re-implement buoyancy as a separate force on the object rather than diddling gravity. | ||
133 | Register a pre-step event to add the force. | ||
134 | More efficient memory usage when passing hull information from BSPrim to BulletSim | ||
135 | Avatar movement motor check for zero or small movement. Somehow suppress small movements | ||
136 | when avatar has stopped and is just standing. Simple test for near zero has | ||
137 | the problem of preventing starting up (increase from zero) especially when falling. | ||
138 | Physical and phantom will drop through the terrain | ||
139 | |||
140 | |||
141 | LINKSETS | ||
142 | ====================================================== | ||
143 | Child prims do not report collisions | ||
144 | Allow children of a linkset to be phantom: | ||
145 | http://opensim-dev.2196679.n2.nabble.com/Setting-a-single-child-prim-to-Phantom-tp7578513.html | ||
146 | Add OS_STATUS_PHANTOM_PRIM to llSetLinkPrimitaveParamsFast. | ||
147 | Editing a child of a linkset causes the child to go phantom | ||
148 | Move a child prim once when it is physical and can never move it again without it going phantom | ||
149 | Offset the center of the linkset to be the geometric center of all the prims | ||
150 | Not quite the same as the center-of-gravity | ||
151 | Linksets should allow collisions to individual children | ||
152 | Add LocalID to children shapes in LinksetCompound and create events for individuals | ||
153 | LinksetCompound: when one of the children changes orientation (like tires | ||
154 | turning on a vehicle, the whole compound object is rebuilt. Optimize this | ||
155 | so orientation/position of individual children can change without a rebuild. | ||
156 | Verify/think through scripts in children of linksets. What do they reference | ||
157 | and return when getting position, velocity, ... | ||
158 | Confirm constraint linksets still work after making all the changes for compound linksets. | ||
159 | Use PostTaint callback to do rebuilds for constraint linksets to reduce rebuilding | ||
160 | Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt. | ||
161 | For compound linksets, add ability to remove or reposition individual child shapes. | ||
162 | Speed up creation of large physical linksets | ||
163 | For instance, sitting in Neb's car (130 prims) takes several seconds to become physical. | ||
164 | REALLY bad for very large physical linksets (freezes the sim for many seconds). | ||
165 | Eliminate collisions between objects in a linkset. (LinksetConstraint) | ||
166 | Have UserPointer point to struct with localID and linksetID? | ||
167 | Objects in original linkset still collide with each other? | ||
168 | |||
169 | MORE | ||
170 | ====================================================== | ||
171 | Create tests for different interface components | ||
172 | Have test objects/scripts measure themselves and turn color if correct/bad | ||
173 | Test functions in SL and calibrate correctness there | ||
174 | Create auto rezzer and tracker to run through the tests | ||
175 | Do we need to do convex hulls all the time? Can complex meshes be left meshes? | ||
176 | There is some problem with meshes and collisions | ||
177 | Hulls are not as detailed as meshes. Hulled vehicles insides are different shape. | ||
178 | Debounce avatar contact so legs don't keep folding up when standing. | ||
179 | Implement LSL physics controls. Like STATUS_ROTATE_X. | ||
180 | Add border extensions to terrain to help region crossings and objects leaving region. | ||
181 | Use a different capsule shape for avatar when sitting | ||
182 | LL uses a pyrimidal shape scaled by the avatar's bounding box | ||
183 | http://wiki.secondlife.com/wiki/File:Avmeshforms.png | ||
184 | Performance test with lots of avatars. Can BulletSim support a thousand? | ||
185 | Optimize collisions in C++: only send up to the object subscribed to collisions. | ||
186 | Use collision subscription and remove the collsion(A,B) and collision(B,A) | ||
187 | Check whether SimMotionState needs large if statement (see TODO). | ||
188 | Implement 'top colliders' info. | ||
189 | Avatar jump | ||
190 | Performance measurement and changes to make quicker. | ||
191 | Implement detailed physics stats (GetStats()). | ||
192 | Measure performance improvement from hulls | ||
193 | Test not using ghost objects for volume detect implementation. | ||
194 | Performance of closures and delegates for taint processing | ||
195 | Are there faster ways? | ||
196 | Is any slowdown introduced by the existing implementation significant? | ||
197 | Is there are more efficient method of implementing pre and post step actions? | ||
198 | See http://www.codeproject.com/Articles/29922/Weak-Events-in-C | ||
199 | Physics Arena central pyramid: why is one side permiable? | ||
200 | In SL, perfect spheres don't seem to have rolling friction. Add special case. | ||
201 | Enforce physical parameter min/max: | ||
202 | Gravity: [-1, 28] | ||
203 | Friction: [0, 255] | ||
204 | Density: [1, 22587] | ||
205 | Restitution [0, 1] | ||
206 | http://wiki.secondlife.com/wiki/Physics_Material_Settings_test | ||
207 | Avatar attachments have no mass? http://forums-archive.secondlife.com/54/f0/31796/1.html | ||
208 | Keep avatar scaling correct. http://pennycow.blogspot.fr/2011/07/matter-of-scale.html | ||
209 | |||
210 | INTERNAL IMPROVEMENT/CLEANUP | ||
211 | ================================================= | ||
212 | Can the 'inTaintTime' flag be cleaned up and used? For instance, a call to | ||
213 | BSScene.TaintedObject() could immediately execute the callback if already in taint time. | ||
214 | Create the physical wrapper classes (BulletBody, BulletShape) by methods on | ||
215 | BSAPITemplate and make their actual implementation Bullet engine specific. | ||
216 | For the short term, just call the existing functions in ShapeCollection. | ||
217 | Consider moving prim/character body and shape destruction in destroy() | ||
218 | to postTimeTime rather than protecting all the potential sets that | ||
219 | might have been queued up. | ||
220 | Remove unused fields from ShapeData (not used in API2) | ||
221 | Remove unused fields from pinned memory shared parameter block | ||
222 | Create parameter variables in BSScene to replace same. | ||
223 | Breakout code for mesh/hull/compound/native into separate BSShape* classes | ||
224 | Standardize access to building and reference code. | ||
225 | The skeleton classes are in the sources but are not complete or linked in. | ||
226 | Make BSBody and BSShape real classes to centralize creation/changin/destruction | ||
227 | Convert state and parameter calls from BulletSimAPI direct calls to | ||
228 | calls on BSBody and BSShape | ||
229 | Generalize Dynamics and PID with standardized motors. | ||
230 | Generalize Linkset and vehicles into PropertyManagers | ||
231 | Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies | ||
232 | Potentially add events for shape destruction, etc. | ||
233 | Better mechanism for resetting linkset set and vehicle parameters when body rebuilt. | ||
234 | BSPrim.CreateGeomAndObject is kludgy with the callbacks, etc. | ||
235 | Implement linkset by setting position of children when root updated. (LinksetManual) | ||
236 | Linkset implementation using manual prim movement. | ||
237 | LinkablePrim class? Would that simplify/centralize the linkset logic? | ||
238 | BSScene.UpdateParameterSet() is broken. How to set params on objects? | ||
239 | Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will | ||
240 | bob at the water level. BSPrim.PositionSanityCheck() | ||
241 | Should taints check for existance or activeness of target? | ||
242 | When destroying linksets/etc, taints can be generated for objects that are | ||
243 | actually gone when the taint happens. Crashes don't happen because the taint closure | ||
244 | keeps the object from being freed, but that is just an accident. | ||
245 | Possibly have an 'active' flag that is checked by the taint processor? | ||
246 | Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones) | ||
247 | Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'? | ||
248 | There are TOO MANY interfaces from BulletSim core to Bullet itself | ||
249 | Think of something to eliminate one or more of the layers | ||
250 | |||
251 | THREADING | ||
252 | ================================================= | ||
253 | Do taint action immediately if not actually executing Bullet. | ||
254 | Add lock around Bullet execution and just do taint actions if simulation is not happening. | ||
255 | |||
256 | DONE DONE DONE DONE | ||
257 | ================================================= | ||
258 | Cleanup code in BSDynamics by using motors. (Resolution: started) | ||
259 | Consider implementing terrain with a mesh rather than heightmap. (Resolution: done) | ||
260 | Would have better and adjustable resolution. | ||
261 | Build terrain mesh so heighmap is height of the center of the square meter. | ||
262 | Resolution: NOT DONE: SL and ODE define meter square as being at one corner with one diagional. | ||
263 | Terrain as mesh. (Resolution: done) | ||
264 | How are static linksets seen by the physics engine? | ||
265 | Resolution: they are not linked in physics. When moved, all the children are repositioned. | ||
266 | Convert BSCharacter to use all API2 (Resolution: done) | ||
267 | Avatar pushing difficult (too heavy?) | ||
268 | Use asset service passed to BulletSim to get sculptie bodies, etc. (Resolution: done) | ||
269 | Remove old code in DLL (all non-API2 stuff). (Resolution: done) | ||
270 | Measurements of mega-physical prim performance (with graph) (Resolution: done, email) | ||
271 | Debug Bullet internal stats output (why is timing all wrong?) | ||
272 | Resolution: Bullet stats logging only works with a single instance of Bullet (one region). | ||
273 | Implement meshes or just verify that they work. (Resolution: they do!) | ||
274 | Do prim hash codes work for sculpties and meshes? (Resolution: yes) | ||
275 | Linkset implementation using compound shapes. (Resolution: implemented LinksetCompound) | ||
276 | Compound shapes will need the LocalID in the shapes and collision | ||
277 | processing to get it from there. | ||
278 | Light cycle not banking (Resolution: It doesn't. Banking is roll adding yaw.) | ||
279 | Package Bullet source mods for Bullet internal stats output | ||
280 | (Resolution: move code into WorldData.h rather than relying on patches) | ||
281 | Single prim vehicles don't seem to properly vehiclize. | ||
282 | (Resolution: mass was not getting set properly for single prim linksets) | ||
283 | Add material type linkage and input all the material property definitions. | ||
284 | Skeleton classes and table are in the sources but are not filled or used. | ||
285 | (Resolution: | ||
286 | Neb vehicle taking > 25ms of physics time!! | ||
287 | (Resolution: compound linksets were being rebuild WAY too often) | ||
288 | Avatar height off after unsitting (floats off ground) | ||
289 | Editting appearance then moving restores. | ||
290 | Must not be initializing height when recreating capsule after unsit. | ||
291 | (Resolution: confusion of scale vs size for native objects removed) | ||
292 | Light cycle falling over when driving (Resolution: implemented angularMotorUp) | ||
293 | Should vehicle angular/linear movement friction happen after all the components | ||
294 | or does it only apply to the basic movement? | ||
295 | (Resolution: friction added before returning newly computed motor value. | ||
296 | What is expected by some vehicles (turning up friction to moderate speed)) | ||
297 | Tune terrain/object friction to be closer to SL. | ||
298 | (Resolution: added material type with friction and resolution) | ||
299 | Smooth avatar movement with motor (DONE) | ||
300 | Should motor update be all at taint-time? (Yes, DONE) | ||
301 | Fix avatar slowly sliding when standing (zero motion when stopped) (DONE) | ||
302 | (Resolution: added BSVMotor for avatar starting and stopping) | ||
303 | llApplyImpulse() | ||
304 | Compare mass/movement in OS and SL. Calibrate actions. (DONE) | ||
305 | (Resolution: tested on SL and OS. AddForce scales the force for timestep) | ||
306 | llSetBuoyancy() (DONE) | ||
307 | (Resolution: Bullet resets object gravity when added to world. Moved set gravity) | ||
308 | Avatar density is WAY off. Compare and calibrate with what's in SL. (DONE) | ||
309 | (Resolution: set default density to 3.5 (from 60) which is closer to SL) | ||
310 | Redo BulletSimAPI to allow native C# implementation of Bullet option (DONE) | ||
311 | (Resolution: added BSAPITemplate and then interfaces for C++ Bullet and C# BulletXNA | ||
312 | Meshes rendering as bounding boxes (DONE) | ||
313 | (Resolution: Added test for mesh/sculpties in native shapes so it didn't think it was a box) | ||
314 | llMoveToTarget (Resolution: added simple motor to update the position.) | ||
315 | Angular motor direction is global coordinates rather than local coordinates (DONE) | ||
316 | Add vehicle collisions so IsColliding is properly reported. (DONE) | ||
317 | Needed for banking, limitMotorUp, movementLimiting, ... | ||
318 | (Resolution: added CollisionFlags.BS_VEHICLE_COLLISION and code to use it) | ||
319 | VehicleAddForce is not scaled by the simulation step but it is only | ||
320 | applied for one step. Should it be scaled? (DONE) | ||
321 | (Resolution: use force for timed things, Impulse for immediate, non-timed things) | ||
322 | Complete implemention of preStepActions (DONE) | ||
323 | Replace vehicle step call with prestep event. | ||
324 | Is there a need for postStepActions? postStepTaints? | ||
325 | Disable activity of passive linkset children. (DONE) | ||
326 | Since the linkset is a compound object, the old prims are left lying | ||
327 | around and need to be phantomized so they don't collide, ... | ||
328 | Remove HeightmapInfo from terrain specification (DONE) | ||
329 | Since C++ code does not need terrain height, this structure et al are not needed. | ||
330 | Surfboard go wonky when turning (DONE) | ||
331 | Angular motor direction is global coordinates rather than local coordinates? | ||
332 | (Resolution: made angular motor direction correct coordinate system) | ||
333 | Mantis 6040 script http://opensimulator.org/mantis/view.php?id=6040 (DONE) | ||
334 | Msg Kayaker on OSGrid when working | ||
335 | (Resolution: LINEAR_DIRECTION is in vehicle coords. Test script does the | ||
336 | same in SL as in OS/BulletSim) | ||
337 | Boats float low in the water (DONE) | ||
338 | Boats floating at proper level (DONE) | ||
339 | When is force introduced by SetForce removed? The prestep action could go forever. (DONE) | ||
340 | (Resolution: setForce registers a prestep action which keeps applying the force) | ||
341 | Child movement in linkset (don't rebuild linkset) (DONE 20130122)) | ||
342 | Avatar standing on a moving object should start to move with the object. (DONE 20130125) | ||
343 | Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE. | ||
344 | Verify that angular motion specified around Z moves in the vehicle coordinates. | ||
345 | DONE 20130120: BulletSim properly applies force in vehicle relative coordinates. | ||
346 | Nebadon vehicles turning funny in arena (DONE) | ||