mirror of
https://gitlab.com/xonotic/xonotic
synced 2025-02-02 03:31:48 +00:00
Commit simple .vbs for automatic generation of shader from a textureset
This commit is contained in:
parent
b020f3b152
commit
1835399e65
9
misc/tools/shadescript/howto.txt
Normal file
9
misc/tools/shadescript/howto.txt
Normal file
@ -0,0 +1,9 @@
|
||||
First make sure your textures are in the correct paths, eg
|
||||
Correct: textures/yourset/wall/bricks.tga
|
||||
Wrong: textures/yourset/bricks.tga
|
||||
|
||||
Copy shade.vbs and template.shader to textures/yourset/
|
||||
|
||||
Edit the template.shader if you need non standard stuff
|
||||
|
||||
Run the shade.vbs, copy textures/yourset/yourset.shader to scripts/yourset.shader, add yourset to scripts/shaderlist.txt
|
172
misc/tools/shadescript/shade.vbs
Normal file
172
misc/tools/shadescript/shade.vbs
Normal file
@ -0,0 +1,172 @@
|
||||
option explicit
|
||||
|
||||
|
||||
Const ForReading = 1
|
||||
Const ForWriting = 2
|
||||
Const ForAppending = 8
|
||||
|
||||
dim CRLF
|
||||
|
||||
CRLF = Chr(13) & Chr(10)
|
||||
|
||||
dim scriptFullName, scriptPath
|
||||
scriptFullName = WScript.ScriptFullName
|
||||
scriptPath = Left ( scriptFullName, InStrRev ( scriptFullName, WScript.ScriptName) - 1 )
|
||||
|
||||
dim objFSO, setfolder, re, shader, objShaderTemplate, shaderTemplate
|
||||
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
||||
Set setfolder = objFSO.GetFolder(scriptPath)
|
||||
Set re = New RegExp
|
||||
|
||||
re.IgnoreCase = True
|
||||
re.Global = True
|
||||
re.Pattern = ""
|
||||
|
||||
Set shader = objFSO.OpenTextFile (scriptPath & "\" & setfolder.name & ".shader", ForWriting, True)
|
||||
|
||||
Set objShaderTemplate = objFSO.OpenTextFile(scriptPath & "\template.shader", ForReading)
|
||||
shaderTemplate = objShaderTemplate.ReadAll()
|
||||
|
||||
function filetitle(sfilename)
|
||||
filetitle = Left(sfilename, len(sfilename) - 4)
|
||||
end function
|
||||
|
||||
dim noLightmap, isLiquid, isTransparent, bounceScale, shaderString
|
||||
dim shaderHead, shaderTail, shaderQUI, shaderDiffuse, diffuseExtra
|
||||
dim subfold, texfile, fn
|
||||
|
||||
For Each subfold in setfolder.Subfolders
|
||||
' shader.write "Folder: " & subfold.Name & CRLF
|
||||
For Each texfile In subfold.Files
|
||||
'Defaults
|
||||
noLightmap = false
|
||||
isLiquid = false
|
||||
isTransparent = false
|
||||
bounceScale = 1
|
||||
shaderString = shaderTemplate
|
||||
|
||||
shaderHead = ""
|
||||
shaderTail = ""
|
||||
shaderQUI = ""
|
||||
shaderDiffuse = ""
|
||||
diffuseExtra = ""
|
||||
|
||||
' First ignore any extra map or Thumbs.db
|
||||
re.Pattern = "_bump.|_gloss.|_norm.|_glow.|Thumbs.db"
|
||||
if not re.test(texfile.name) then
|
||||
re.pattern = "decal"
|
||||
if re.test(texfile.name) then
|
||||
noLightmap = true
|
||||
end if
|
||||
|
||||
re.pattern = "water"
|
||||
if re.test(texfile.name) then
|
||||
noLightmap = true
|
||||
isLiquid = true
|
||||
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
||||
shaderHead = shaderHead & " surfaceparm water" & CRLF
|
||||
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
||||
diffuseExtra = "blendfunc blend"
|
||||
end if
|
||||
|
||||
re.pattern = "slime"
|
||||
if re.test(texfile.name) then
|
||||
noLightmap = true
|
||||
isLiquid = true
|
||||
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
||||
shaderHead = shaderHead & " surfaceparm slime" & CRLF
|
||||
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
||||
end if
|
||||
|
||||
re.pattern = "lava"
|
||||
if re.test(texfile.name) then
|
||||
noLightmap = true
|
||||
isLiquid = true
|
||||
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
||||
shaderHead = shaderHead & " surfaceparm lava" & CRLF
|
||||
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
||||
diffuseExtra = " blendfunc add"
|
||||
end if
|
||||
|
||||
re.pattern = "glass"
|
||||
if re.test(texfile.name) then
|
||||
noLightmap = true
|
||||
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
||||
diffuseExtra = " blendfunc add"
|
||||
end if
|
||||
|
||||
re.pattern = "metal"
|
||||
if re.test(texfile.name) then
|
||||
bounceScale = bounceScale + 0.25
|
||||
shaderHead = shaderHead & " surfaceparm metalsteps" & CRLF
|
||||
end if
|
||||
|
||||
re.pattern = "grate"
|
||||
if re.test(texfile.name) then
|
||||
bounceScale = bounceScale + 0.25
|
||||
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
||||
diffuseExtra = " blendfunc blend"
|
||||
end if
|
||||
|
||||
re.pattern = "shiny"
|
||||
if re.test(texfile.name) then
|
||||
bounceScale = bounceScale + 0.25
|
||||
end if
|
||||
|
||||
re.pattern = "dirt|terrain|old"
|
||||
if re.test(texfile.name) then
|
||||
bounceScale = bounceScale - 0.25
|
||||
shaderHead = shaderHead & " surfaceparm dust" & CRLF
|
||||
end if
|
||||
|
||||
shaderDiffuse = "textures/" & setfolder.name & "/" & subfold.name & "/" & texfile.name
|
||||
|
||||
fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_gloss.tga"
|
||||
if objFSO.FileExists(fn) Then
|
||||
bounceScale = bounceScale + 0.25
|
||||
end if
|
||||
|
||||
fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
|
||||
if objFSO.FileExists(fn) Then
|
||||
shaderQUI = "textures/" & setfolder.name & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
|
||||
else
|
||||
shaderQUI = shaderDiffuse
|
||||
end if
|
||||
|
||||
if not noLightmap then
|
||||
shaderTail = " {" & CRLF & " map $lightmap" & CRLF & " rgbGen identity" & CRLF & " tcGen lightmap" & CRLF & " blendfunc filter" & CRLF & " }"
|
||||
end if
|
||||
|
||||
if not bounceScale = 1 then
|
||||
re.pattern = ","
|
||||
shaderHead = shaderHead & " q3map_bounceScale " & re.Replace(bounceScale, ".") & CRLF
|
||||
end if
|
||||
|
||||
re.Pattern = "%shader_name%"
|
||||
shaderString = re.Replace(shaderTemplate, "textures/" & setfolder.name & "/" & subfold.name & "-" & filetitle(texfile.name))
|
||||
|
||||
re.Pattern = "%qei_name%"
|
||||
shaderString = re.Replace(shaderString, shaderQUI)
|
||||
|
||||
re.Pattern = "%shader_head%"
|
||||
shaderString = re.Replace(shaderString, shaderHead)
|
||||
|
||||
re.Pattern = "%diffuse_map%"
|
||||
shaderString = re.Replace(shaderString, shaderDiffuse)
|
||||
|
||||
re.Pattern = "%diffuse_map_extra%"
|
||||
shaderString = re.Replace(shaderString, diffuseExtra)
|
||||
|
||||
re.Pattern = "%shader_tail%"
|
||||
shaderString = re.Replace(shaderString, shaderTail)
|
||||
|
||||
|
||||
|
||||
shader.write shaderString & CRLF & CRLF
|
||||
end if
|
||||
Next
|
||||
Next
|
||||
shader.Close
|
||||
|
||||
|
||||
|
15
misc/tools/shadescript/template.shader
Normal file
15
misc/tools/shadescript/template.shader
Normal file
@ -0,0 +1,15 @@
|
||||
%shader_name%
|
||||
{
|
||||
qer_editorimage %qei_name%
|
||||
dpoffsetmapping - 2
|
||||
dpglossintensitymod 3
|
||||
dpglossexponentmod 4
|
||||
%shader_head%
|
||||
|
||||
{
|
||||
map %diffuse_map%
|
||||
%diffuse_map_extra%
|
||||
}
|
||||
|
||||
%shader_tail%
|
||||
}
|
Loading…
Reference in New Issue
Block a user