sources : Niftools forum
Texture and UV
Author: ttl269
U and V are X and Y coordinates
on source texture mapped to range from 0.0 to 1.0. So U=0, V=0 is top
left corner, U=1 V=0 is top right corner, U=1, V=1 is bottom right
corner, U=0.5 V=0.5 is in middle of source texture.
UV Scale defines
ratio between pixel in source texture and pixel in texture mapped on
model. If scale U and V are both set to 1.0 it means, that one pixel
from source texture is mapped on one pixel on model - most common
setting. Setting U scale to 2.0 and V to 1.0 means, that in U direction
two pixels from source texture are mapped on one pixel on model, i.e.
two copies of source texture are mapped in U direction on model - you
will see two textures on same area of model, but of course texture will
be in U direction stretched to fit same area.
U represents X direction, V represents Y direction on 2D texture.
UV
scale set to other values than 1.0, 1.0 has nearly no use on normal
models. It is more likely used for animated textures effects. But
setting UV scale to 0.0, 0.0 causes that no pixels from source texture
are mapped on model.
Texture Clamp Mode determines whether the
pixels out of source texture area (out of range 0.0-1.0) are mapped on
model or not - i.e. if source texture pixels is repeated in desired
direction when U or V coordinate get out of range from 0.0-1.0. CLAMP
means no, WRAP means yes. Most common setting is WRAP_S WRAP_T.
S represents U direction, i.e. X direction, T represents V direction, i.e. Y direction…
Skyrim Specific
BSLightingShaderProperty:
- in UV Scale set both X and Y to 1.0, otherwise you will not see textures
- TextureClampMode set to WRAP_S WRAP_T
- Alpha set to 1.0, If you have 0.01 - it is nearly invisible. It may be produced when NIF exported from 3Dsmax?
NiTriShapeData:
set
"BS Num UV Sets" to 4097, you also have to fill right values in
Tangents and Bitangents arrays - right click over NiTriShape and select
"Mesh -> Update Tangent Space". Otherwise normal map texture will not
be used in right way.
Forr static object. If yes:
1)
NiStringExtraData block with WeaponBack value attached to root
BSFadeNode? Delete it - it is used only for nifs of weapon objects.
2) If your nif will not be used for LoadScreen Object in CK, delete BSInvMarker.
3)
BSXFlags - it is important for game. Common static objects usually have
only BSXFlags in Extra Data of root node and have set its Integer Data
to 130 in case the nif has collision.
----
originally posted by ttl269
Vertex Colors
If you don't use
them, i. e. in NiTriShapeData is "Has Vertex Colors" set to "no", you
have to unset all Shader flags related to vertex colors in
BSLightingShaderProperty, i.e. in Shader Flags 1 there must be unset
flag "SLSF1_Vertex_Alpha" and in Shader Flags 2 must be unset flag
"SLSF2_Vertex_Colors".
If you use them (in NiTriShapeData is "Has
Vertex Colors" set to "yes" and Vertex Colors array is filled with
values), you have to set flag "SLSF2_Vertex_Colors". In case you use
vertex colors only for coloring of selected vertices, it is enough. If
you want to use also alpha components of vertex colors to get per
vertice transparency, you also have to set flag "SLSF1_Vertex_Alpha".
Tangents and Bitangents
They should be used on every mesh using normal map except body parts (parts using skin tint). To set Tangents and Bitangents:
-
make sure NiTriShapeData of your mesh has "Has Normals" set to "yes"
and that "Normals" array is filled properly, i.e. it don't contains
zeroes - if yes, right-click over "NiTriShapeData" and select "Mesh
-> Face Normals"
- make sure that value in "BS Num UV Sets" in "NiTriShapeData" is set to 4097, if not, set it to that value.
- right-click over "NiTriShape" (not NiTriShapeData) and select "Mesh -> Update Tangents Space"
If
you have a lot of NiTriShapes which need to get/update Tangents and
Bitangents in their NiTriShapeData, set "BS Num UV Sets" in all
NiTriShapeData blocks to 4097 and then go to to menu "Spells" and select
"Batch -> Update All Tangent Spaces".
Body parts (parts with
human skin) which uses "Skyrim Shader Type" of "Skin Tint" don't use
neither Tangents and Bitangents nor Normals - look at some vanilla nif
with armor or clothing where part of human skin is visible (for example
meshes\clothes\blacksmith\f\torso_1.nif) . In its NiTriShapeData you
find "Has Normals" set to "no", "BS Num UV Sets" set to 1 and "Has
Vertex Colors" set to "no". In "BSLightingShaderProperty" there is
"Skyrim Shader Type" set to "Skin Tint" and in "Shader Flags1" you find
set flags "SLSF1_Model_Space_Normals" and "SLSF1_FaceGen_RGB_Tint".
Clarification -
skin tint and model space normals (at least doing
testing here) are not mutually dependent. You can have one w/o the other
(which I do for some "fake" body parts). The ones that don't use
normals/tangents are meshes that have SLSF1_Model_Space_Normals.
Conversely, you can have meshes use tangent normals and also use skin
tints/SSS/SLSF1_FaceGen_RGB_Tint -- these do require BS NUM 4097 and all
that. However, if you want seamless everything, best to stick with one
or the other.
Other tips and tricks:
- BSDismember for
skyrim meshes is OPTIONAL, but good practice to have. If using
BSDismember though, make sure it's set to a part referenced by your
ArmorAddon, otherwise your mesh simply won't show.
- Copy
BSLightingShaderProperties by copying from another nif file and pasting
on the root node. Do NOT paste on top of a NiTriShape, won't work (even
though it looks like it works)
- Certain meshes have a
BSBehaviorGraphExtraData. This is useful for things like custom animated
tails. To use it, copy it to your desired mesh, making sure that your
mesh is rigged already w/ tail bones. Then change the TXT to Name=BGED
and Behaviour Graph File=AuxBones\Tail\TailProject.hkx