aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/bin/config-include/SimBalanced.ini
blob: fbf778fda6fcf55331571f04511ffd164173f163 (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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
;; hopefully a well balanced configuration that works well for everything.


[Startup]
    ; ##
    ; ## SYSTEM
    ; ##

    ; Sets the method that OpenSim will use to fire asynchronous
    ; events. Valid values are UnsafeQueueUserWorkItem,
    ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
    ;
    ; SmartThreadPool is reported to work well on Mono/Linux, but
    ; UnsafeQueueUserWorkItem has been benchmarked with better
    ; performance on .NET/Windows
    ;
    ; UnsafeQueueUserWorkItem refers to the fact that the code creating the event could elevate its security
    ; privileges.  However, as calling code is trusted anyway this is safe (if you set
    ;  TrustedBinaries = true in the [XEngine] section then you already have to trust that incoming code for other reasons).
    async_call_method = SmartThreadPool

    ; Max threads to allocate on the FireAndForget thread pool
    ; when running with the SmartThreadPool option above
    MaxPoolThreads = 300

    ; Allow certain jobs to be run consecutively in a job engine rather than always concurrently.
    ; This improves performance in regions with large numbers of connections (in the hundreds).
    JobEngineEnabled = true

    ; Maximum number of position, rotation and scale changes for each prim that the simulator will store for later undos
    ; Increasing this number will increase memory usage.
    MaxPrimUndos = 42

    ; If a viewer attempts to rez a prim larger than the non-physical or physical prim max, clamp the dimensions to the appropriate maximum
    ; This can be overridden in the region config file.
    ClampPrimSize = true

    ; If a prim is loaded from an external source, clamp it to Z = 0 if Z is negative.
    ClampNegativeZ = true

    ; Allow scripts to keep running when they cross region boundaries, rather than being restarted.  State is reloaded on the destination region.
    ; This only applies when crossing to a region running in a different simulator.
    ; For crossings where the regions are on the same simulator the script is always kept running.
    AllowScriptCrossing = true

    ; Main Frame time
    ; This defines the rate of several simulation events.
    ; Default value should meet most needs.
    ; It can be reduced to improve the simulation of moving objects, with possible increase of cpu and network loads.
    ; It should not be less than the physics engine step time.
    ; Being a integer multiple of it may reduce some jitter in reported physics FPS.
    ; changing this value, you need to change some of the following *EveryNFrames so their actions timing remains the same
    FrameTime = 0.0909

    ; Send scheduled updates to objects in the scene
    ; This must be a whole number
    UpdateObjectsEveryNFrames = 1

    ; Send position/velocity, etc. updates to agents in the scene
    ; This must be a whole number
    UpdateAgentsEveryNFrames = 1

    ; Apply pending forces from physics calculations to an entity.
    ; This must be a whole number
    UpdateEntityMovementEveryNFrames = 1

    ; Send coarse location updates to viewers.  In a classic viewer, this updates the minimap.
    ; This must be a whole number
    UpdateCoarseLocationsEveryNFrames = 50

    ; Physics simulation execution or syncronization, acording to engine. Should be 1
    ; This must be a whole number
    UpdatePhysicsEveryNFrames = 1

    ; Send out the on frame event to modules and other listeners.  This should probably never deviate from 1.
    ; This must be a whole number
    UpdateEventsEveryNFrames = 1

    ; Send terrain updates to viewers
    ; This must be a whole number
    UpdateTerrainEveryNFrames = 50

    ; Persitently store any objects which meet the PRIM STORAGE criteria
    ; This must be a whole number
    UpdateStorageEveryNFrames = 200

    ; Clean up temp on rez objects.
    ; This must be a whole number
    UpdateTempCleaningEveryNSeconds = 180

    ; ##
    ; ## PRIM STORAGE
    ; ##

    ; Persistence of changed objects happens during regular sweeps. The following control that behaviour to
    ; prevent frequently changing objects from heavily loading the region data store.
    ; If both of these values are set to zero then persistence of all changed objects will happen on every sweep.
    ;
    ; Objects will be considered for persistance in the next sweep when they have not changed for this number of seconds
    MinimumTimeBeforePersistenceConsidered = 60
    ; Objects will always be considered for persistance in the next sweep if the first change occurred this number of seconds ago
    MaximumTimeBeforePersistenceConsidered = 600

    ; ##
    ; ## PHYSICS
    ; ##

    ; Select a mesher here.
    ;
    ; Meshmerizer properly handles complex prims by using triangle meshes.
    ; Note that only the ODE physics engine currently deals with meshed prims in a satisfactory way
    ;
    ; ZeroMesher is faster but leaves the physics engine to model the mesh using the basic shapes that it supports
    ; Usually this is only a box

    ;meshing = Meshmerizer
    ;meshing = ZeroMesher
    ;; select ubODEMeshmerizer only with ubOde physics engine
    meshing = ubODEMeshmerizer

    ; ubODE and  OpenDynamicsEngine does allocate a lot of memory on stack. On linux you may need to increase its limit
    ; script opensim-ode-sh starts opensim setting that limit. You may need to increase it even more on large regions
    ; edit the line ulimit -s 262144, and change this last value

    ; if you use Meshmerizer and want sculpt map collisions, setting this to
    ; to true will store decoded sculpt maps in a special folder in your bin
    ; folder, which can reduce startup times by reducing asset requests. Some
    ; versions of mono dont work well when reading the cache files, so set this
    ; to false if you have compatibility problems.
    CacheSculptMaps = true

    ;; BulletSim is the default physics engine.  It provides the best performance and most functionality.
    ;; BulletSim supports varregions.
    ;; OpenDynamicsEngine was the previous default physics engine in OpenSimulator 0.7.6.1 and before.
    ;; It continues to provide a workable physics implementation.  It does not currently support varregions.
    ;; basicphysics effectively does not model physics at all, making all objects phantom.
    ;; Default is BulletSim
    ;physics = BulletSim
    ;physics = modified_BulletX
    ;physics = OpenDynamicsEngine
    ;physics = basicphysics
    ;physics = POS
    ;; alternative OpenDynamicsEngine engine. ubODEMeshmerizer meshing above MUST be selected also
    physics = ubODE

    ; ##
    ; ## SCRIPT ENGINE
    ; ##

    ;; Default script engine to use. Currently, we only have XEngine
    DefaultScriptEngine = "XEngine"

    ; Image decoding. Use CSJ2K for layer boundary decoding if true,
    ; OpenJPEG if false
    ; UseCSJ2K = true


[Map]
    ; Map tile options.
    ; If true, then maptiles are generated using the MapImageModule below.
    ; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overridden
    ; in individual region config file(s).  If you do not want to upload map tiles at all, then you will need
    ; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
    GenerateMaptiles = true

    ;WorldMapModule = "WorldMap"

    ; The module to use in order to generate map images.
    ; MapImageModule is the default.  Warp3DImageModule is an alternative experimental module that can
    ; generate better images.
    MapImageModule = "Warp3DImageModule"

    ; World map blacklist timeout in seconds
    ;BlacklistTimeout = 600

    ; Refresh (in seconds) the map tile periodically
    MaptileRefresh = 0

    ; If not generating maptiles, use this static texture asset ID
    ;MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"

    ; Draw objects on maptile.  This step might take a long time if you've got a large number of
    ; objects, so you can turn it off here if you'd like.
    DrawPrimOnMapTile = true

    ; Use terrain texture for maptiles if true, use shaded green if false
    TextureOnMapTile = true

    ; Texture prims
    TexturePrims = true

    ; Only texture prims that have a diagonal size greater than this number
    TexturePrimSize = 5

    ; Attempt to render meshes and sculpties on the map
    RenderMeshes = true

    UseAntiAliasing = true


[Network]
    ; OpenSim can send multiple simultaneous requests for services such as asset
    ; retrieval. However, some versions of mono appear to hang when there are too
    ; many simultaneous requests, default is 30 and is currently applied only to assets
    ;MaxRequestConcurrency = 30


[ClientStack.LindenUDP]
    ; The client socket receive buffer size determines how many
    ; incoming requests we can process; the default on .NET is 8192
    ; which is about 2 4k-sized UDP datagrams. On mono this is
    ; whatever the underlying operating system has as default; for
    ; example, ubuntu 8.04 or SLES11 have about 111k, which is about
    ; 27 4k-sized UDP datagrams (on linux platforms you can [as root]
    ; do "sysctl net.core.rmem_default" to find out what your system
    ; uses a default socket receive buffer size.
    ;
    ; client_socket_rcvbuf_size allows you to specify the receive
    ; buffer size LLUDPServer should use. NOTE: this will be limited
    ; by the system's settings for the maximum client receive buffer
    ; size (on linux systems you can set that with "sysctl -w
    ; net.core.rmem_max=X")
    ;
    ;client_socket_rcvbuf_size = 8388608

    ; Maximum outbound bytes per second for a single scene. This can be used to
    ; throttle total outbound UDP traffic for a simulator. The default value is
    ; 0, meaning no throttling at the scene level. The example given here is
    ; 20 megabits
    ;
    ;scene_throttle_max_bps = 2500000

    ; Maximum bytes per second to send to any single client. This will override
    ; the user's viewer preference settings. The default value is 0, meaning no
    ; aggregate throttling on clients (only per-category throttling). The
    ; example given here is 1.5 megabits
    ;
    ;client_throttle_max_bps = 187500

    ; Minimum bytes per second to send to any single client as a result of
    ; adaptive throttling. Viewer preferences set to a lower number will
    ; override the settin. The example given here ensures that adaptive
    ; throttling will never decrease per client bandwidth below 256 kbps.
    ;
    ;adaptive_throttle_min_bps = 32000

    ; Adaptive throttling attempts to limit network overload when multiple
    ; clients login by starting each connection more slowly. Disabled by
    ; default
    ;
    enable_adaptive_throttles = true

    ; Per-client bytes per second rates for the various throttle categories.
    ; These are default values that will be overridden by clients. These
    ; defaults are approximately equivalent to the throttles set by the Imprudence
    ; viewer when maximum bandwidth is set to 350kbps

    ;resend_default = 6625
    ;land_default = 9125
    ;wind_default = 1750
    ;cloud_default = 1750
    ;task_default = 18500
    ;texture_default = 18500
    ;asset_default = 10500

    ; Configures how ObjectUpdates are aggregated. These numbers
    ; do not literally mean how many updates will be put in each
    ; packet that goes over the wire, as packets are
    ; automatically split on a 1400 byte boundary. These control
    ; the balance between responsiveness of interest list updates
    ; and total throughput. Higher numbers will ensure more full-
    ; sized packets and faster sending of data, but more delay in
    ; updating interest lists
    ;
    ;PrimUpdatesPerCallback = 100

    ; TextureSendLimit determines how many packets will be put on
    ; the outgoing queue each cycle. Like the settings above, this
    ; is a balance between responsiveness to priority updates and
    ; total throughput. Higher numbers will give a better
    ; throughput at the cost of reduced responsiveness to client
    ; priority changes or transfer aborts
    ;
    ;TextureSendLimit = 20

    ; CannibalizeTextureRate allows bandwidth to be moved from the
    ; UDP texture throttle to the task throttle. Since most viewers
    ; use HTTP textures, this provides a means of using what is largely
    ; unused bandwidth in the total throttle. The value is the proportion
    ; of the texture rate to move to the task queue. It must be between
    ; 0.0 (none of the bandwidth is cannibalized) and 0.9 (90% of the
    ; bandwidth is grabbed)
    ;
    ; CannibalizeTextureRate = 0.5

    ; The time to wait before disconecting an unresponsive client.
    ; The time is in seconds. The default is one minute
    ;
    ;AckTimeout = 60

    ; The time to wait before disconecting an unresponsive paused client.
    ; A client can be paused when the file selection dialog is open during file upload.
    ; This gives extra time to find files via the dialog but will still disconnect if
    ; the client crashes or loses its network connection
    ; The time is in seconds. The default is five minutes.
    ;
    ;PausedAckTimeout = 300


[Appearance]
    ; Persist avatar baked textures
    ; Persisting baked textures can speed up login and region border
    ; crossings especially with large numbers of users, though it
    ; will store potentially large numbers of textures in your asset
    ; database
    PersistBakedTextures = true

    ; Control the delay before appearance is sent to other avatars and
    ; saved in the avatar service. Attempts to limit the impact caused
    ; by the very chatty dialog that sets appearance when an avatar
    ; logs in or teleports into a region; values are in seconds
    DelayBeforeAppearanceSave = 5
    DelayBeforeAppearanceSend = 2

    ; If true, avatar appearance information is resent to other avatars in the simulator every 60 seconds.
    ; This may help with some situations where avatars are persistently grey, though it will not help
    ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others).
    ResendAppearanceUpdates = true

    ; Turning this on responds to CachedTexture packets to possibly avoid rebaking the avatar
    ; on every login
    ReuseTextures = true


[Attachments]
    ; Controls the number of milliseconds that are slept per 100 prims rezzed in attachments
    ; Experimental setting to control CPU spiking when avatars with many attachments login/change outfit
    ; or when multiple avatars with medium level attachments login/change outfit simultaneously.
    ; If 0 then no throttling is performed.
    ThrottlePer100PrimsRezzed = 0


[Textures]
    ; If true, textures generated dynamically (i.e. through osSetDynamicTextureData() and similar OSSL functions) are reused where possible
    ; Chiefly, reuse occurs if a texture has already been generated with identical data and settings, and that texture contains no dynamic components
    ; (e.g. images pulled from an external HTTP address).
    ; Reusing previously generated textures results in a much faster update on the viewer but may cause issues if the viewer didn't receive all resolutions of the texture.
    ; Currently, it will also increase asset cache use since temporary dynamic textures are no longer deleted.
    ; Hence, currently considered experimental.
    ; Default is false.
    ReuseDynamicTextures = true

    ; If true, then textures generated dynamically that have a low data size relative to their pixel size are not reused
    ; This is to workaround an apparent LL 3.3.4 and earlier viewer bug where such textures are not redisplayed properly when pulled from the viewer cache.
    ; Only set this to true if you are sure that all the viewers using your simulator will not suffer from this problem.
    ; This setting only has an affect is ReuseDynamicTextures = true
    ; Default is false
    ReuseDynamicLowDataTextures = true


[ODEPhysicsSettings]
    ; ##
    ; ## Physics stats settings ( most ignored by ubOde )
    ;

    ; If collect_stats is enabled, then extra stat information is collected which is accessible via the MonitorModule
    ; (see http://opensimulator.org/wiki/Monitoring_Module for more details).
    collect_stats = true

    ; ##
    ; ## Physics logging settings - logfiles are saved to *.DIF files
    ; ##

    ; default is false
    ;physics_logging = true
    ;; every n simulation iterations, the physics snapshot file is updated
    ;physics_logging_interval = 50
    ;; append to existing physics logfile, or overwrite existing logfiles?
    ;physics_logging_append_existing_logfile = true

    ;##
    ;## World Settings
    ;##

    ; World Step size.
    ; with legacy ODE this value needs to be close to 0.02s
    ; with ubOde this value can be reduced to improve simulation quality with the cost of higher cpu load
    ; you will need to test acording to you needs
    ; choosing a value that is a integer sub multiple of FrameRate reduces some jitter on reported physics FPS
    world_stepsize = 0.01818
    ; number of iterations of constrains solver, higher should improve results
    ; up to a point where acumulated math errors eliminate the improvement
    ; more steps may increase CPU load. No real gain in changing
    world_solver_iterations = 10

    ;Spaces level settings. Affects memory consumption vs Collider CPU time for avatar and physical prim
    ; defines spaces partition cells min and max sizes == 2^value
    world_hashspace_level_low = -5
    world_hashSpace_level_high = 12

    meters_in_small_space = 29.9


    ; ##
    ; ## Contact properties. (the stuff that happens when things come in contact with each other)
    ; ##

    ; surface layer around geometries other geometries can sink into before generating a contact
    world_contact_surface_layer = 0.001

    ; Filtering collisions helps keep things stable physics wise, but sometimes
    ; it can be overzealous.  If you notice bouncing, chances are it's that.
    filter_collisions = true

    ; Non Moving Terrain Contact (avatar isn't moving)
    nm_terraincontact_friction = 255.0
    nm_terraincontact_bounce = 0.1
    nm_terraincontact_erp = 0.1025

    ; Moving Terrain Contact (avatar is moving)
    m_terraincontact_friction = 75.0
    m_terraincontact_bounce = 0.05
    m_terrainContact_erp = 0.05025

    ; Moving Avatar to object Contact
    m_avatarobjectcontact_friction = 75.0
    m_avatarobjectcontact_bounce = 0.1

    ; Object to Object Contact and Non-Moving Avatar to object
    objectcontact_friction = 250.0
    objectcontact_bounce = 0.2

    ; ##
    ; ## Avatar Control
    ; ##

    ; PID Controller Settings. These affect the math that causes the avatar to reach the
    ; desired velocity
    ; See http://en.wikipedia.org/wiki/PID_controller

    av_pid_derivative = 2200.0
    av_pid_proportional = 900.0

    ; specifies if the capsule should be tilted (=true; old compatibility mode)
    ; or straight up-and-down (=false; better and more consistent physics behavior)
    av_capsule_tilted = false

    ; Movement.  Smaller is faster.

    ; speed of movement with Always Run off
    av_movement_divisor_walk = 1.3

    ; speed of movement with Always Run on
    av_movement_divisor_run = 0.8

    ; When the avatar flies, it will be moved up by this amount off the ground (in meters)
    minimum_ground_flight_offset = 3.0

    ; Plant avatar.   This reduces the effect of physical contacts with the avatar.
    ; If you have a group of unruly and rude visitors that bump each other, turn this on to make that less attractive.
    ; The avatar still allows a small movement based on the PID settings above.  Stronger PID settings AND this active
    ; will lock the avatar in place
    av_planted = false

    ; No Avatar Avatar Collissions.  This causes avatar to be able to walk through each other as if they're ghosts but still interact with the environment
    av_av_collisions_off = false

    ; ##
    ; ## Object options
    ; ##

    ; amount of ODE steps where object is non moving for ODE to automatically put it to sleep
    body_frames_auto_disable = 20

    ; used to control llMove2Target
    body_pid_derivative = 35
    body_pid_gain = 25

    ; maximum number of contact points to generate per collision
    contacts_per_collision = 80

    ; start throttling the object updates if object comes in contact with 3 or more other objects
    geom_contactpoints_start_throttling = 3

    ; send 1 update for every x updates below when throttled
    geom_updates_before_throttled_update = 15

    ; ##
    ; ## Sculpted Prim settings
    ; ##

    ; Do we want to mesh sculpted prim to collide like they look?
    ; If you are seeing sculpt texture decode problems
    ; (messages such as "Decoded image with unhandled number of components: 0 shortly followed by a physcs exception")
    ; then you might want to try setting this to false.
    mesh_sculpted_prim = true

    ; number^2 non-physical level of detail of the sculpt texture.  32x32 - 1024 verticies
    mesh_lod = 32

    ; number^2 physical level of detail of the sculpt texture.  16x16 - 256 verticies
    mesh_physical_lod = 16

    ; ##
    ; ## additional meshing options
    ; ##

    ; Physics needs to create internal meshs (or convert the object meshs or scultps)
    ; for all prims except simple boxes and spheres.

    ; collisions of small objects againts larger ones can have a increased CPU load cost
    ; so this are represented by a simple BOX
    ; if all their scale dimensions are lower or equal to this option. Default is 0.1m
    ; (ubOde only)
    ; MinSizeToMeshmerize = 0.1


[BulletSim]
    ; There are two bullet physics libraries, bulletunmanaged is the default and is a
    ;   native c++ dll bulletxna is a managed C# dll.  They have comparible functionality
    ;   but the c++ one is much faster.
    ;BulletEngine = "bulletunmanaged"
    BulletEngine = "bulletxna"

    ; BulletSim can run on its own thread independent of the simulator's heartbeat
    ;   thread. Enabling this will not let the physics engine slow down avatar movement, etc.
    UseSeparatePhysicsThread = true

    ; Terrain implementation can use either Bullet's heightField or BulletSim can build
    ;   a mesh. 0=heightField, 1=mesh
    TerrainImplementation = 0
    ; For mesh terrain, the detail of the created mesh. '1' gives 256x256 (heightfield
    ;   resolution). '2' gives 512x512. Etc. Cannot be larger than '4'. Higher
    ;   magnifications use lots of memory.
    TerrainMeshMagnification = 1

    ; Should avatars collide with each other?
    AvatarToAvatarCollisionsByDefault = true

    ; Default linkset implmentation
    ; 'Constraint' uses physics constraints to hold linkset together. 'Compound'
    ;    builds a compound shape from the children shapes to create a single physical
    ;    shape. 'Compound' uses a lot less CPU time.
    LinkImplementation = 1      ; 0=constraint, 1=compound

    ; If 'true', offset a linkset's origin based on mass of linkset parts.
    LinksetOffsetCenterOfMass = false

    ; If 'true', turn scuplties into meshes
    MeshSculptedPrim = true

    ; If 'true', force simple prims (box and sphere) to be meshed
    ; If 'false', the Bullet native special case shape is used for square rectangles
    ;   and even dimensioned spheres.
    ForceSimplePrimMeshing = true

    ; If 'true', when creating meshes, remove all triangles that have two equal vertexes.
    ;   Happens often in sculpties. If turned off, there will be some doorways
    ;   that cannot be walked through.
    ShouldRemoveZeroWidthTriangles = true

    ; If 'true', use convex hull definition in mesh asset if present.
    ShouldUseAssetHulls = true

    ; If there are thousands of physical objects, these maximums should be increased.
    MaxCollisionsPerFrame = 2048
    MaxUpdatesPerFrame = 8192

    ; Detailed physics debug logging. Very verbose.
    PhysicsLoggingEnabled = False
    PhysicsLoggingDir = "."
    VehicleLoggingEnabled = False


[Sun]
    ; send a Sun update every update_interval # of frames.  A lower number will
    ; make for smoother sun transition at the cost of network
    ;update_interval = 100


[Wind]
    ; How often should wind be updated, as a function of world frames.  Approximately 50 frames a second
    wind_update_rate = 150

    ; The Default Wind Plugin to load
    wind_plugin = SimpleRandomWind


[Cloud]
    ; update interval for the cloud cover data returned by llCloud().
    ; default is 1000
    cloud_update_rate = 1000


[Trees]
    ; active_trees allows module to change its trees in time.
    ; some will be deleted, others created and rest may grow
    ; default is false. You can change it with console command tree active true | false later
    active_trees = false
    ; the trees change execution time rate (in ms)
    update_rate = 1000

    ; allow the trees to grow.
    ; DANGER
    ; this option causes high network use on the order of
    ; NumberOfTrees * NumberAvatars * 1000 / update_rate udp packets per second
    allowGrow = false


[LL-Functions]
    ; Maximum number of llListen events we allow over the entire region.
    ; Set this to 0 to have no limit imposed
    max_listens_per_region = 0

    ; Maximum number of llListen events we allow per script
    ; Set this to 0 to have no limit imposed.
    max_listens_per_script = 0

    ; Maximum number of external urls that scripts can set up in this simulator (e.g. via llRequestURL())
    max_external_urls_per_simulator = 256

    ; Use size boxes instead of meshed prims, sculpts and mesh when calculating bounding boxes.
    ; Speeds up calculations but can make them inaccurate, in some cases very inaccurate.
    UseSimpleBoxesInGetBoundingBox = false

    ; Use llCastRay V3 if true.
    ; Implements llCastRay similar but not identical to Second Life.
    ; See http://wiki.secondlife.com/wiki/LlCastRay .
    ; NEW
    ; Meshes prims for good accuracy in ray hit detection,
    ; handling basic and tortured prims, sculpts and meshes.
    ; Uses ellipsoid, correctly sized avatar capsules.
    ; Handles complex terrain, multi-prim objects and seated avatars.
    ; Implements throttling and the status codes
    ; RCERR_UNKNOWN and RCERR_CAST_TIME_EXCEEDED,
    ; so LSL scripts need to handle these responses and RCERR_SIM_PERF_LOW.
    ; WARNING
    ; Can be faster on some servers and scenes, but slower on others,
    ; compared to previous version of llCastRay in OpenSimulator.
    ; Is in most cases considerably slower than llCastRay in Second Life.
    ; Generates geometry meshes and can therefore use much system resources.
    UseLlCastRayV3 = true

    ; Accepted calculation precision error in calculations in llCastRay V3
    FloatToleranceInLlCastRay = 0.00001

    ; Accepted distance difference between duplicate hits in llCastRay V3
    FloatTolerance2InLlCastRay = 0.001

    ; Detail level when rendering prims in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    PrimDetailLevelInLlCastRay = 1

    ; Detail level when rendering sculpts in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    SculptDetailLevelInLlCastRay = 1

    ; Detail level when rendering meshes in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    MeshDetailLevelInLlCastRay = 3

    ; Detail level when rendering avatar capsules in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    AvatarDetailLevelInLlCastRay = 1

    ; Maximum number of returned hits from llCastRay V3
    MaxHitsInLlCastRay = 16

    ; Maximum number of returned hits per prim from llCastRay V3
    MaxHitsPerPrimInLlCastRay = 16

    ; Maximum number of returned hits per object from llCastRay V3
    MaxHitsPerObjectInLlCastRay = 16

    ; Report ray intersections with surfaces on exits from a prim as hits in llCastRay V3 if true
    DetectExitHitsInLlCastRay = false

    ; Detect attachments in llCastRay V3 if true
    DoAttachmentsInLlCastRay = false

    ; Throttle period length in ms before which all old llCastRay use is discarded in llCastRay V3
    ; The sum of AvailableTimeInMsPerRegionInLlCastRay and all AvailableTimeInMsPerAvatarInLlCastRay should not exceed this
    ThrottleTimeInMsInLlCastRay = 200

    ; Available time in ms for llCastRay per throttle period and 65536 m2 land area in llCastRay V3
    AvailableTimeInMsPerRegionInLlCastRay = 40

    ; Available time in ms for llCastRay per throttle period and avatar when script in attachment or vehicle in llCastRay V3
    AvailableTimeInMsPerAvatarInLlCastRay = 10

    ; Required available time in ms left to perform a new llCastRay in llCastRay V3
    RequiredAvailableTimeInMsInLlCastRay = 2

    ; Maximum available time in ms possible in llCastRay V3, not to get too high values with varregions
    MaximumAvailableTimeInMsInLlCastRay = 40

    ; Use cached meshes in llCastRay V3 if true
    ; Improves performance but uses more memory
    UseMeshCacheInLlCastRay = true


[XEngine]
    ; How many threads to keep alive even if nothing is happening
    MinThreads = 2

    ; How many threads to start at maximum load
    MaxThreads = 100

    ; Time a thread must be idle (in seconds) before it dies
    IdleTimeout = 60

    ; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal", "Highest")
    Priority = "Normal"

    ; Maximum number of events to queue for a script (excluding timers)
    MaxScriptEventQueue = 3000

    ; Stack size per thread created
    ThreadStackSize = 262144

    ; Set this to true to load each script into a separate
    ; AppDomain. Setting this to false will load all script assemblies into the
    ; current AppDomain, which will reduce the initial per-script memory overhead,
    ; but deleted scripts stay inactive using memory.
    ; Significantly improving script loading times.
    ; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
    ; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
    ; This may only be a problem if regions stay alive for a long time with lots of scripts added or edited.
    ; At this time some mono versions seem to have problems with the true option,
    ; so default is now false until a fix is found, to simply life of less technical skilled users.
    ;
    ; At least on my desktop, this seems to be what soaks up 4 - 5 times the memory.
    AppDomainLoading = false

    ; Controls whether previously compiled scripts DLLs are deleted on sim restart.
    ; If you set this to false then startup will be considerably faster since scripts won't need to be recompiled.
    ; It should be true on first run after updating opensim binary version
    ; after first run you can change to false.
    ; You can also set it to false and delete the script DLLs by hand
    ; This does not delete cached scripts state.
    DeleteScriptsOnStartup = true

    ; CompactMemOnLoad
    ; forces calls to memory garbage collector before loading each script DLL during region startup.
    ; Peak memory usage is reduced and region starts with a more compacted memory allocation.
    ; But this costs a lot of time, so region load will take a lot longer.
    ; it is more usefull if there are no previously compiled scripts DLLs (or DeleteScriptsOnStartup = true)
    CompactMemOnLoad = true

    ; Controls whether scripts are stopped by aborting their threads externally (abort)
    ; or by co-operative checks inserted by OpenSimulator into compiled script (co-op).
    ; co-op will be more stable as aborting threads can cause instability.
    ; abort was the default option in OpenSimulator 0.8 and before.
    ; If this setting is changed between co-op and abort, then existing scripts will automatically be recompiled if necessary.
    ; However, the setting change will not take affect until the next time you restart the simulator.
    ; Setting changes will not affect state information stored for scripts.
    ScriptStopStrategy = co-op

    ; Rate to poll for asynchronous command replies (ms)
    ; currently unused
    ;AsyncLLCommandLoopms = 50

    ; Compile debug info (line numbers) into the script assemblies
    CompileWithDebugInformation = true

    ; Interval (s) between background save of script states
    SaveInterval = 120

    ; Interval (s) between maintenance runs (0 = disable)
    MaintenanceInterval = 10

    ; Amount of time in milliseconds we will wait for an event to completely normally when a script stop is requested
    ; before aborting the thread (such as when an object containing scripts is taken into inventory).
    WaitForEventCompletionOnScriptStop = 1000

    ; Minimum settable timer interval. Any timer setting less than this is
    ; rounded up to this minimum interval.
    MinTimerInterval = 0.1

    ; Sensor settings
    SensorMaxRange = 1024.0
    SensorMaxResults = 64


[Groups]
    ; Groups data is cached for this number of seconds before another request is made to the groups service
    ; Set to 0 to disable the cache.
    ; Default is 30 seconds
    GroupsCacheTimeout = 30


[PacketPool]
    ;RecyclePackets = true
    ;RecycleDataBlocks = true

    ; If true, then the basic packet objects used to receive data are also recycled, not just the LLUDP packets.
    ; This reduces data churn
    RecycleBaseUDPPackets = true


[InterestManagement]
    ; This section controls how state updates are prioritized for each client
    ; Valid values are BestAvatarResponsiveness, Time, Distance,
    ; SimpleAngularDistance, and FrontBack
    UpdatePrioritizationScheme = BestAvatarResponsiveness
    ReprioritizationEnabled = true
    ReprioritizationInterval = 2000.0
    RootReprioritizationDistance = 10.0
    ChildReprioritizationDistance = 20.0

    ; TEST OPTION KEEP AS FALSE
    ; if true, don't send object updates if outside view range
    ObjectsCullingByDistance = false

    ; If n > 1, only every n UDP terse updates will be sent to observers of an avatar that are in the same region
    ; Updates will always be sent to the avatar that the update addresses and if av velocity is effectively zero (to prevent drift due to missing updates).
    ; n > 1 will reduce UDP traffic but will lead to laggier movement observed in other avatars.
    RootTerseUpdatePeriod = 0

    ; If n > 1, only every n UDP terse updates will be sent to observers of an avatar that are in another region
    ; n > 1 will reduce UDP traffic but may lead to laggier movement observed in other avatars, though values up to 4 may not generate a noticeable effect.
    ChildTerseUpdatePeriod = 0

    ; Send an update to clients if the difference from the last sent avatar position is greater than this tolerance
    RootPositionUpdateTolerance = 0.05

    ; Send an update to clients if the euclidian difference from the last sent avatar rotation is greater than this tolerance
    RootRotationUpdateTolerance = 0.1

    ; Send an update to clients if the difference from the last sent avatar velocity is greater than this tolerance
    RootVelocityUpdateTolerance = 0.001


[Statistics]
    ; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames
    ; to include in the averaging calculations
    NumberOfFrames=10


[Terrain]
    ; If 'true' each avatar is only sent terrain patches within their view distance
    ; This also changes the region terrain loading from 'lawn mower' to ordered around
    ;     the avatar outward.
    SendTerrainUpdatesByViewDistance = True


[LandManagement]
    ; When editing terrain or objects, parcel layer info is updated in the viewer.
    ;   This can be expensive for large regions. If this variable is 'true', only the
    ;   parcel layer data around the area of interest is sent. The parcel layer info
    ;   is sent for 'ParcelLayerViewDistance' around the interest point.
    ; If 'ParcelLayerViewDistance' is >= 128, the operation for legacy sized regions
    ;   will be what it has always been (send the whole region's parcel layer info).
    ; Other parcel updates (login, changing parcel ownership, ...) will still send
    ;   whole region.
    LimitParcelLayerUpdateDistance = true
    ParcelLayerViewDistance = 1024


;; If you are using a simian grid frontend you can enable
;; this module to upload tile images for the mapping fn
;;
[SimianGridMaptiles]
    RefreshTime = 3600


;;
;; These are defaults that are overwritten below in [Architecture].
;; These defaults allow OpenSim to work out of the box with
;; zero configuration
;;
[AssetService]
    ; Disable this to prevent the default asset set from being inserted into the
    ; asset store each time the region starts
    AssetLoaderEnabled = false


[AutoBackupModule]
    ;; default is module is disabled at the top level
    AutoBackupModuleEnabled = false


[ServiceThrottle]
    ;; Default time interval (in ms) for the throttle service thread to wake up
    Interval = 5000


[Materials]
     MaxMaterialsPerTransaction = 50