Home   Help Search Login Register  

Author Topic: Adding Damage to your addon - Tutorial  (Read 4481 times)

0 Members and 1 Guest are viewing this topic.

Offline Gnat

  • Addons Depot
  • Moderator
  • *****
  • I Bite!
    • Gnats
Adding Damage to your addon - Tutorial
« on: 18 Jun 2008, 14:40:49 »
I won't pretended to be a definitive expert on this, but it seems no one else has compiled known bits all together.

Draft Version 0 - 18th June 2008

What I will address in this tut;
- Adding damage textures over a model once fully damaged
- Animating sections of the model upon damage
- Basic windscreen damage

What I won't address (until further knowledge);
- Level 2 or intermediate damage textures
- Window armour

Scope
- Most if not all ArmA vehicles
- You can edit the P3D file (and have O2 installed)



DAMAGE TEXTURES
Step 1
- Face selection
- In all your Resolution and XXXX View LODs ensure the WHOLE vehicle is highlighted (ALT-A) in O2 and the whole vehicle is named "zbytek"
- If at any time you add to the model, ensure you Redefine "zbytek" to be the whole model again.

Step 2 - Material definitions
- In every Resolution and XXXX View LOD ensure every texture you plan to make damaged has a MATERIAL definition
- This also typically means each texture will also have a "_NOHQ.paa" and a "_SMDI.paa" version of the textures.



      0- CTRL-Click on a Texture in the texture list
      0- From the menu select FACES -> FACE PROPERTIES
      0- Material definition appears in the lower right box
- If the texture does not have this, you probably have no choice except to create a Material definition.


Step 3 - Destruct RVMATs
- Once all textures have been checked / fixed you don't need to re-enter O2
- For each texture with a Materials definition you need to know 2 things
      (a) the filename and location of the NOHQ file
      (b) the dimensions of the texture (eg 1024x512 or 256x256 etc)
- Now create a FILENAME_destruct.rvmat for each texture using a copy of below;
Quote
ambient[]={1.0,1.0,1.0,1.0};
diffuse[]={1.0,1.0,1.0,1.0};
forcedDiffuse[]={0.0,0.0,0.0,0.0};
emmisive[]={0.0,0.0,0.0,1.0};
specular[]={1.0,1.0,1.0,0.0};
specularPower=40.0;
PixelShaderID="NormalMapMacroASSpecularDIMap";
VertexShaderID="NormalMapAS";
class Stage1
{
   texture="SIG_general\effects\bottom_nohq.pac";
   uvSource="tex";
   class uvTransform
   {
      aside[]={1.0,0.0,0.0};
      up[]={0.0,1.0,0.0};
      dir[]={0.0,0.0,0.0};
      pos[]={0.0,0.0,0.0};
   };
};
class Stage2
{
   texture="ca\data\destruct\vehicle_destr256_256_mc.paa";
   uvSource="tex";
   class uvTransform
   {
      aside[]={1.0,0.0,0.0};
      up[]={0.0,1.0,0.0};
      dir[]={0.2,0.0,0.0};
      pos[]={0.2,0.0,0.0};
   };
};
class Stage3
{
   texture="#(argb,8,8,3)color(1,1,1,1)";
   uvSource="tex";
   class uvTransform
   {
      aside[]={1.0,0.0,0.0};
      up[]={0.0,1.0,0.0};
      dir[]={0.0,0.0,0.0};
      pos[]={0.0,0.0,0.0};
   };
};
class Stage4
{
   texture="ca\data\destruct\vehicle_destr256_256_smdi.paa";
   uvSource="tex";
   class uvTransform
   {
      aside[]={1.0,0.0,0.0};
      up[]={0.0,1.0,0.0};
      dir[]={0.0,0.0,0.0};
      pos[]={0.0,0.0,0.0};
   };
};

- These new files will have to be in the same directory location as you other .rvmat files
- An example; If the main texture is bottom.pac and the rvmat is bottom.rvmat, the new file should be bottom_destruct.rvmat

There are 3 Red Highlighted section in the above code you need to customize;
  - The FIRST section needs to point to your relevant _NOHQ texture
  - The SECOND and THIRD section should (not need) point to the default BIS texture of the same size as you texture
      0- i.e. 1024_512 or 2048_1024
      0- Most dimensions are covered by BIS from 2048x2048 through 256x256

Once finished you should have 5 files for each texture;
   - 1 main, 1 Normal Map (NOHQ), 1 Spectral Map (SMDI), 1 standard Material RVMAT and 1 Destroyed RVMAT



Step 4 - CONFIG.CPP
- Not proven but likely in each CfgSkeletons you will need to inherit a BIS class, in this example "Car"

Quote
class CfgSkeletons
{
   class car;
   class MyAddonSkeleton: car
   {
   isDiscrete=1;
   skeletonInherit = "";

- Again not proven but likely in each CfgModels you will need to inherit a BIS class, in this example "Car" again

Quote
class CfgModels
{
   class default{};
   class Vehicle: Default
   {
      sectionsInherit="";
      sections[] = {xxxx, xxxxx, xxxxxx, xxxxxx};
   };
   
   class Car: Vehicle
   {
      sectionsInherit="Vehicle";
      sections[]=
      {xxxxxx, xxxxx, xxxxx, xxxxx, xxxxxx};
   };
   class MyAddonP3D: Car
   {
      skeletonName = "MyAddonSkeleton";
      sectionsInherit="car";

- Under CfgVehicles you then need to make a class Damage definition.
  Below is an example

Quote
class CfgVehicles
{
class Landrover; // extended class
class MyAddon: Landrover
   {
............
............
      class Damage
      {
         tex[] = {};
         mat[] = {
            "SIG_general\effects\bottom.rvmat",
            "SIG_general\effects\bottom.rvmat",
            "SIG_general\effects\bottom_destruct.rvmat",
.............
............
.............
            "SIG_general\effects\LastDamageTexture.rvmat",
            "SIG_general\effects\LastDamageTexture.rvmat",
            "SIG_general\effects\LastDamageTexture_destruct.rvmat"
         };
      };
............
............

- The definitions are done in groups of 3 definitions;
    0- First definition is NO damage
    0- Second definition is HALF damage
    0- Third definition is FULL damage
- In the example above there is no HALF damage definition, it simply copies the NO damage definition.
- For half damage you could experiement with another "half" RVMAT file and reference it in the second line.

** - With above complete for ever texture, this should now mean that you will see damage on your vehicle.

EXCLUSION - GLASS
- Glass needs extra work, I will describe one way to get "broken glass" effect (PENDING)


NEXT - Animation - PENDING being writtem
- Covers HIDING sections of the vehicle once damaged (i.e. unnessisary model detail)
- Also covers animating things like LANDCONTACTs etc

..... if I didn't forget something;

Example Finished Product




Final Note:
No doubt some of above is simply a "Parrot copy" and can in reality be changed and IT WILL STILL WORK, but without spending hours upon hours finding out what bits can be changed or altered slightly I have simple written down what works for me.
If you find working variations PLEASE let us all know.
Cheers
Gnat  ;)
« Last Edit: 30 Jul 2011, 13:49:53 by Gnat »

Offline Colonel_Klink

  • Members
  • *
  • Independent Addon Creator
    • DC3D Game Modelling Zone
Re: Adding Damage to your addon - Tutorial
« Reply #1 on: 19 Jul 2009, 10:26:50 »
Great stuff Gnat. I wondered how BIS worked their way around the damaged vehicles. BTW the damaged General Lee looks great.
Rebel without a pause...D.I.L.L.I.G.A.F.