PyPRP Release Planning

Revision as of 09:55, 17 April 2009 by Gpnmilano (Talk | contribs) (Added Documentation link for PlEaxListenerMod)

What needs to be done in the code?

Instructions

If you have any changes to PyPRP that are not in the trunk yet, but you would like to have in the release, please add them to this list, along with a rough estimate of how many weeks it will take you to get it done. Include just the development work in the estimate, not documentation - that will come in a later step. Break independent features down into separate entries as far as possible, and indicate dependencies.

What I imagine to see in this list are finished features from branches that only need to be merged to the trunk, small clean-up work, things that can be brought into beta quality with a small amount of testing, etc. Not big things that haven't even been started yet, that are considered experimental, or that would take a lot of development effort. This is not a wish list, an entry is only made by the person who is willing and able to complete it in the course of a few weeks. I imagine that the list should turn out fairly short, because most things waiting to be released are in the trunk already.

If you are not sure whether your modifications should be integrated into the release or not and would like to discuss this, please indicate so. I personally don't feel qualified to judge the release-worthiness of new features on my own and I hope in such cases a decision can be reached by peer-review from Plasma experts.

Also, if you know about anything that is in the trunk, but should not stay there (because it is unfinished and breaks something, or for whatever reason), please list that here too.

- Christian walther

List - add your entries here

  • Feature: Application of modifiers on export merged in r387
    By: CWalther
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Bugfix: Don't read the whole file into memory when using an hsStream in read mode merged in r388
    By: CWalther
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Bugfix: Revision 380 - QuickScript_SoundRegion: multiplayer sync issue merged in r389
    By: D'Lanor
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: Advanced AlcScript properties for DrawableSpans merged in r392
    By: Paradox
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: plExcludeRegionModifier
    By: GPNMilano
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: plMaintainersMarkerModifier
    By: GPNMilano
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: plResponderEnableMsg
    By: GPNMilano
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: Advanced AlcScript properties for Sound Classes
    By: GPNMilano
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: plEAXListenerMod
    By: GPNMilano
    Estimated time: 2 weeks (but ready to merge)
    Depends on: documentation needed for the individual settings
    Needs discussion: could be implemented to call from a specific list to set the settings rather than setting it all by alcscript. Must also be attached to the soft volume export code as it needs to be attached to a soft volume scene object to work properly
  • Feature: PRP_MatClasses
    By: GPNMilano
    Estimated time: 0 weeks (ready to merge)
    Depends on: full documentation needed for all the new settings and changes
    Needs discussion: an age whose materials are not changed will export fine, but the materials will be bright and shiny compared to how they were in previous versions, as well as several mapto changes
  • Bugfix: Revision 385 - Dynamic environment map coordinates merged in r390
    By: CWalther
    Estimated time: 0 weeks (ready to merge)
    Depends on: nothing
    Needs discussion: no
  • Feature: Single-package distribution
    By: CWalther
    Estimated time: 1 week
    Depends on: nothing
    Needs discussion: yes - here

Compiling a What's New List and Documentation

Instructions

Below is a list of changes in the trunk since the 1.5 release, gathered from Subversion. Please review and flesh out the entries about your changes according to the following guidelines. The main part of this step consists of writing documentation for all the new and changed features. When everything is done, I will transform this into the official "What's New" list to be included in the release (and displayed on its own wiki page).

  • Description: Write a one-line, end-user-readable description that captures the essence of the change here, or confirm the preliminary one that I have cooked up from the SVN log and superficial review of the code change.
  • Category: I have tried to roughly categorize the changes into new features ("Feature"), changes to existing features ("Change"), and bugfixes ("Fix"), in order to group the final list into these categories. Choose one category and if necessary correct the one I have tentatively chosen.
  • Detail/Documentation Link: If your change or new feature needs a more detailed description than provided in the Description column, or documentation on how to use (reference or tutorial style), write that documentation here on the wiki and place a link to it in this column. For short pieces of documentation, you may insert a subsection into this document under Details below (see examples about renormal and modifier application). This section will be moved to its own page in the end. For longer explanations, start a new article. You may also link to an existing article, provided that you make sure it is up to date with respect to the changed feature. If you feel you are unable to adequately document your changes within a few weeks or would like assistance with it, please state so in the release discussion thread on the forum as soon as possible, so that we can find someone else to do it. Of course, being still available to assist the documenter with a basic introduction and answers to questions would be helpful in that case.
  • Changes Existing Age: For changes and new features (there is probably little point to it if the previous behavior was a bug), indicate here whether the change affects how an existing age exports, compared to PyPRP 1.5, and if so describe how. If the age does export differently, but it is possible to restore the way it exported in 1.5 by making changes to the Blender file, indicate so in the How to Convert column. If these modifications are mechanical enough, we might provide scripts that perform them under PyPRP Wizards. In addition to being useful to the end user, the total information collected in these columns will serve as a basis for the decision whether to call the release "1.6" or "2.0".
  • Revision: This column is only here for your reference and will not end up in the released product. The first number is the revision(s) in which the change ended up in the trunk, in parentheses the revision(s) in which it was initially committed to a branch.
  • If you consider any of your changes not newsworthy, you may remove the row from the list. You may also combine multiple rows into one or split single rows into several as you see fit.
  • Once you're done with an entry in the list, including completed documentation, enter "yes" into the Done column. If the list entry is completed, including documentation link, but the documentation article/section itself is not finished yet, you may enter "documenting" into the Done column to indicate that you're working on it, but that is not required.

Hope that is enough explanation to allow us to get this done in an orderly manner. Questions and suggestions are welcome as usual.

- Christian walther

List

Done Revision [trunk (original)] Author Category Description Detail/Documentation Link Changes Existing Age? How? How to Convert?
yes 268 D'Lanor Fix Fixed double export of sound emitters. discussion No
273 Hoikas Fix Fixed Python error when exporting a sprite with no flags specified.
yes 294 (284) CWalther Fix Fixed incorrect export of soft volumes that have a rotation or scale.
yes 294 (285, 293) CWalther Fix Fixed a typo to allow use of extended soft volume syntax (!(...) etc.) for visregions.
314 Nadnerb  ? piggyback changes for tagged lightmap layers
314 (313) RTR Feature Added support for external WAV and OGG files.
315 Nadnerb Fix Fixed capitalization of camera message AlcScript command "createnewdefaultCam" to "createnewdefaultcam".
yes 321 (318) CWalther Feature Alternative way of computing normals for objects with flat faces and rounded edges. #Normal Recomputation No
yes 321 (320) CWalther Fix Fixed repeated texture compression when two materials in Blender use the same texture image.
yes 325 (312, 317) D'Lanor Feature New QuickScript_StateAnimation added. StateAnimation No
325 (312) D'Lanor Feature QuickScript_SDLIntActEnabler: modified to recognize StateAnimation activator.
325 (312) D'Lanor Change QuickScript_SoundRegion: matched volume to emitter.
325 (319) D'Lanor  ? QuickScript_SimpleClickable: can play a single animation now, autorun option now consequently affects all actions, start actions either automatically or through Python.
325 Paradox Change Lamp visregions are no longer inverted.
338 Paradox Fix Fixed incorrect alpha component on exported vertex colors when no "Alpha" vertex color layer is present.
343 Nadnerb Change Footprint and Ripple materials no longer get the MADD blendflag set.
343 Nadnerb Change "none" parameters no longer actually write params to pythonfilemods, and instead behave as "spacers" to change the param indexes.
343, 375 Nadnerb Fix Recognize the "Alpha" vertex color layer by its name (case-insensitively) instead of simply checking for a second layer.
344 Nadnerb Feature New message: plEventCallbackMsg, proper support for plMessageWithCallbacks.
346 Nadnerb Feature Added plOccluder export: objects with type: occluder are exported as occluders.
yes 352, 357 (349, 355) CWalther Fix Fixed MemoryError during checksumming at the end of an export.
371 (370) RTR Fix Fixed kickables passing thru each other.
372 (331) D'Lanor Feature QuickScript_StateAnimation: added option to temporarily disable the clickable activator.
372 (333) D'Lanor Change QuickScript_StateAnimation: oneshot callback marker must be specified separately now.
372 (335) D'Lanor Fix QuickScript_SoundRegion fixes: forces object type to logic region, soundemitters list processing works properly now.
372 (362) D'Lanor Fix QuickScript_SoundRegion: added enter and exit triggers to objectinvolume.
372 (362) D'Lanor Fix QuickScript_Footstep: multiple footstep sounds were not appended conform "specs".
372 (363) D'Lanor Feature QuickScript selfanimation: added seekpoint option.
373 (362) D'Lanor Fix Fixed Uru crash with ages exported for ABM/UU.
yes 373 (362, 287) CWalther & D'Lanor Change Shadows are now twice as strong for any given light. Shadows are stronger Impossible (could halve light energy to restore weak shadows, but that obviously changes the rest of the lighting)
382, 383 Nadnerb Feature Allow setting of visual.icicle AlcScript flags by name.
yes 387 (283, 341, 342) CWalther Feature Export the modified mesh for objects that have modifiers. #Export with Modifiers Applied Modifiers are applied Remove modifiers (but why would you have modifiers but not want to apply them?)
yes 388 (377) CWalther Fix Fixed potential MemoryError when reading files (e.g. texture cache).
389 (380) D'Lanor Fix QuickScript_SoundRegion: multiplayer sync issue fixed.
yes 390 (385) CWalther Fix Fixed dynamic environment map coordinates for objects with parents, ipos, or tracking.
392 (378) Paradox Change Changed AlcScript schema for setting DrawableSpan RenderLevel flags.
(374) GPNMilano Feature Added plEaxListenerMod for reverb effects with soft volumes Adding echos to sounds No
tbd CWalther Feature PyPRP is installed as a single folder now. No
tbd GPNMilano

Details

Normal Recomputation

Renormal.jpeg

By default, exporting the mesh shown at the bottom of the image results in the look at the top right of the image: the large faces of the cube are shaded as if they were strongly curved. Enabling normal recomputation on an object, on the other hand, results in the look at the top left, much improving the appearance of objects that are supposed to have large flat faces and rounded edges (simulated by narrow bevel faces).

To enable this feature on an object, either add a logic property to the object of type String, named renormal, with value areaweighted, as shown here,

Renormal-logicprop.png

or set the visual.renormal property to areaweighted in AlcScript:

MyObject:
    visual:
        renormal: areaweighted

Background: To compute the vertex normals that are then exported by PyPRP and control the shading in Uru, Blender takes the average of the (real) normals of all adjacent faces of the vertex. This is what is shown at the bottom right of the image. In some situations, choosing different normals, as shown at the bottom left of the image, leads to better results. Unfortunately, Blender doesn't allow the user to modify the vertex normals, it just computes them using its fixed average rule. Therefore, the only way to achieve normals as on the left side is to do it in the export plugin which is free to export different normals than Blender tells it to. This is what PyPRP does when the renormal property is set. When set to areaweighted (the only currently implemented option), it averages the normals of the adjacent faces of a vertex as well, but weighted by the face area. This has the effect that large faces have a strong influence on the vertex normals, pulling them towards their real surface normals and therefore appearing flatter, while small faces have little influence and appear more curved.


Export with Modifiers Applied

In the past, if you had associated modifiers to your Blender meshes, PyPRP would ignore them and still export the unmodified mesh. To have modifiers applied, you needed to save the document, choose Apply on each modifier to bake it into the mesh, export, and revert to the saved state to get the nondestructive modifiers back. Now, PyPRP does that for you – for all objects that have modifiers, the modified mesh is exported.

Examples of useful modifiers are EdgeSplit to get sharp edges and Array for repeated objects. Keep in mind however that many modifiers make the mesh more complex and thereby reduce performance in Uru, just as if you had modeled the more complex mesh by hand. In particular, the Subsurf modifier can generate a very large number of faces, so don't go overboard with it, as tempting as it may seem to smooth your objects.