aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
blob: 31dd790ff3d8a6e0eee001f817f6472d7f66f65b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
CURRENT PRIORITIES
=================================================
Eliminate all crashes (DONEish)
	Editing/deleting physical linkset (DONE)
	Border crossing of physical linkset (DONE)
Enable vehicle border crossings (at least as poorly as ODE)
	Avatar created in previous region and not new region when crossing border
	Vehicle recreated in new sim at small Z value (offset from root value?)
Calibrate turning radius
limitMotorUp calibration (more down?)
study PID motors (include 'efficiency' implementation
	Add to avatar movement

CRASHES
=================================================
20121129.1411: editting/moving phys object across region boundries causes crash
    getPos-> btRigidBody::upcast -> getBodyType -> BOOM
20121128.1600: mesh object not rezzing (no physics mesh).
    Causes many errors. Doesn't stop after first error with box shape.
    Eventually crashes when deleting the object.
20121206.1434: rez Sam-pan into OSGrid BulletSim11 region
	Immediate simulator crash. Mono does not output any stacktrace and
	log just stops after reporting taint-time linking of the linkset.

VEHICLES TODO LIST:
=================================================
Border crossing with linked vehicle causes crash
Neb vehicle taking > 25ms of physics time!!
Vehicles (Move smoothly)
Add vehicle collisions so IsColliding is properly reported.
	Needed for banking, limitMotorUp, movementLimiting, ...
Some vehicles should not be able to turn if no speed or off ground.
Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
Neb car jiggling left and right
	Happens on terrain and any other mesh object. Flat cubes are much smoother.
	This has been reduced but not eliminated.
Light cycle falling over when driving
Implement referenceFrame for all the motion routines.
Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
	Verify that angular motion specified around Z moves in the vehicle coordinates.
Verify llGetVel() is returning a smooth and good value for vehicle movement.
llGetVel() should return the root's velocity if requested in a child prim.
Implement function efficiency for lineaar and angular motion.
Should vehicle angular/linear movement friction happen after all the components
	or does it only apply to the basic movement?
After getting off a vehicle, the root prim is phantom (can be walked through)
    Need to force a position update for the root prim after compound shape destruction
Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
For limitMotorUp, use raycast down to find if vehicle is in the air.
Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties().
	A kludge that isn't fixing the real problem of Bullet adding extra motion.

BULLETSIM TODO LIST:
=================================================
Revisit CollisionMargin. Builders notice the 0.04 spacing between prims.
Avatar height off after unsitting (floats off ground)
	Editting appearance then moving restores.
	Must not be initializing height when recreating capsule after unsit.
Duplicating a physical prim causes old prim to jump away
	Dup a phys prim and the original become unselected and thus interacts w/ selected prim.
Scenes with hundred of thousands of static objects take a lot of physics CPU time.
BSPrim.Force should set a continious force on the prim. The force should be
	applied each tick.  Some limits?
Gun sending shooter flying.
Collision margin (gap between physical objects lying on each other)
Boundry checking (crashes related to crossing boundry)
    Add check for border edge position for avatars and objects.
    Verify the events are created for border crossings.
Avatar rotation (check out changes to ScenePresence for physical rotation)
Avatar running (what does phys engine need to do?)
Small physical objects do not interact correctly
    Create chain of .5x.5x.1 torui and make all but top physical so to hang.
        The chain will fall apart and pairs will dance around on ground
    Chains of 1x1x.2 will stay connected but will dance.
    Chains above 2x2x.4 are move stable and get stablier as torui get larger.
Add PID motor for avatar movement (slow to stop, ...)
setForce should set a constant force. Different than AddImpulse.
Implement raycast.
Implement ShapeCollection.Dispose()
Implement water as a plain so raycasting and collisions can happen with same.
Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE
	Also osGetPhysicsEngineVerion() maybe.
Linkset.Position and Linkset.Orientation requre rewrite to properly return
	child position. LinksetConstraint acts like it's at taint time!!

LINKSETS
======================================================
Linksets should allow collisions to individual children
	Add LocalID to children shapes in LinksetCompound and create events for individuals
LinksetCompound: when one of the children changes orientation (like tires
	turning on a vehicle, the whole compound object is rebuilt. Optimize this
	so orientation/position of individual children can change without a rebuild.
Verify/think through scripts in children of linksets. What do they reference
	and return when getting position, velocity, ...
Confirm constraint linksets still work after making all the changes for compound linksets.
Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt.
	For compound linksets, add ability to remove or reposition individual child shapes.
Disable activity of passive linkset children.
	Since the linkset is a compound object, the old prims are left lying
	around and need to be phantomized so they don't collide, ...
Speed up creation of large physical linksets
	For instance, sitting in Neb's car (130 prims) takes several seconds to become physical
Eliminate collisions between objects in a linkset. (LinksetConstraint)
    Have UserPointer point to struct with localID and linksetID?
    Objects in original linkset still collide with each other?

MORE
======================================================
Find/remove avatar collision with ID=0.
Test avatar walking up stairs. How does compare with SL.
    Radius of the capsule affects ability to climb edges.
Tune terrain/object friction to be closer to SL.
Debounce avatar contact so legs don't keep folding up when standing.
Implement LSL physics controls. Like STATUS_ROTATE_X.
Add border extensions to terrain to help region crossings and objects leaving region.

Performance test with lots of avatars. Can BulletSim support a thousand?
Optimize collisions in C++: only send up to the object subscribed to collisions.
    Use collision subscription and remove the collsion(A,B) and collision(B,A)
Check whether SimMotionState needs large if statement (see TODO).

Implement 'top colliders' info.
Avatar jump
Performance measurement and changes to make quicker.
Implement detailed physics stats (GetStats()).

Measure performance improvement from hulls
Test not using ghost objects for volume detect implementation.
Performance of closures and delegates for taint processing
	Are there faster ways?
	Is any slowdown introduced by the existing implementation significant?
Is there are more efficient method of implementing pre and post step actions?
	See http://www.codeproject.com/Articles/29922/Weak-Events-in-C

Physics Arena central pyramid: why is one side permiable?

INTERNAL IMPROVEMENT/CLEANUP
=================================================
Consider moving prim/character body and shape destruction in destroy()
	to postTimeTime rather than protecting all the potential sets that
	might have been queued up.
Remove unused fields from ShapeData (not used in API2)
Breakout code for mesh/hull/compound/native into separate BSShape* classes
    Standardize access to building and reference code.
	The skeleton classes are in the sources but are not complete or linked in.
Make BSBody and BSShape real classes to centralize creation/changin/destruction
	Convert state and parameter calls from BulletSimAPI direct calls to
		calls on BSBody and BSShape
Generalize Dynamics and PID with standardized motors.
Generalize Linkset and vehicles into PropertyManagers
    Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
	Potentially add events for shape destruction, etc.
Complete implemention of preStepActions
	Replace vehicle step call with prestep event.
	Is there a need for postStepActions? postStepTaints?
Implement linkset by setting position of children when root updated. (LinksetManual)
	Linkset implementation using manual prim movement.
LinkablePrim class? Would that simplify/centralize the linkset logic?
BSScene.UpdateParameterSet() is broken. How to set params on objects?
Remove HeightmapInfo from terrain specification
    Since C++ code does not need terrain height, this structure et al are not needed.
Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will
    bob at the water level. BSPrim.PositionSanityCheck().
Should taints check for existance or activeness of target?
	When destroying linksets/etc, taints can be generated for objects that are
	actually gone when the taint happens. Crashes don't happen because the taint closure
	keeps the object from being freed, but that is just an accident.
	Possibly have and 'active' flag that is checked by the taint processor?

THREADING
=================================================
Do taint action immediately if not actually executing Bullet.
	Add lock around Bullet execution and just do taint actions if simulation is not happening.

DONE DONE DONE DONE
=================================================
Cleanup code in BSDynamics by using motors. (Resolution: started)
Consider implementing terrain with a mesh rather than heightmap. (Resolution: done)
    Would have better and adjustable resolution.
Build terrain mesh so heighmap is height of the center of the square meter.
    Resolution: NOT DONE: SL and ODE define meter square as being at one corner with one diagional.
Terrain as mesh. (Resolution: done)
How are static linksets seen by the physics engine?
    Resolution: they are not linked in physics. When moved, all the children are repositioned.
Convert BSCharacter to use all API2 (Resolution: done)
Avatar pushing difficult (too heavy?)
Use asset service passed to BulletSim to get sculptie bodies, etc. (Resolution: done)
Remove old code in DLL (all non-API2 stuff). (Resolution: done)
Measurements of mega-physical prim performance (with graph) (Resolution: done, email)
Debug Bullet internal stats output (why is timing all wrong?)
	Resolution: Bullet stats logging only works with a single instance of Bullet (one region).
Implement meshes or just verify that they work. (Resolution: they do!)
Do prim hash codes work for sculpties and meshes? (Resolution: yes)
Linkset implementation using compound shapes. (Resolution: implemented LinksetCompound)
    Compound shapes will need the LocalID in the shapes and collision
    processing to get it from there.
Light cycle not banking	(Resolution: It doesn't. Banking is roll adding yaw.)
Package Bullet source mods for Bullet internal stats output
	(Resolution: move code into WorldData.h rather than relying on patches)
Single prim vehicles don't seem to properly vehiclize.
	(Resolution: mass was not getting set properly for single prim linksets)
Add material type linkage and input all the material property definitions.
	Skeleton classes and table are in the sources but are not filled or used.
	(Resolution: