diff --git a/README.md b/README.md index f82b71d3..3db42898 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,29 @@ +# dhewm3 branch of StormEngine2 + +Before StormEngine2 switched to (RB)Doom3BFG, it was based on dhewm3. + +This branch contains all the changes, based on the same old dhewm3 commit it (apparently) used. + +Furthermore, in `base/` you can find its materials and shaders. +* The shaders (`base/glprogs/*`) are released under GPLv3 (same as Doom3 sourcecode). +* The materials (`base/materials/*`) are released under + [*CreativeCommons Attribution-ShareAlike*](https://creativecommons.org/licenses/by-sa/4.0/) (**CC BY-SA 4.0**). + +Thanks a lot to **motorsep** for donating this code and game data! + +Some features this code (together with the shaders) have, that standard Doom3 and dhewm3 don't: +- soft particles with custom translucency sorting and fogging +- ink/cel shading +- image-based bloom +- blurry reflections +- Fresnel +- *maybe* improved heat haze +- improved vehicles +- LODs + +-------------------- +Below: original dhewm3 ReadMe: + # ABOUT _dhewm 3_ is a _Doom 3_ GPL source modification. diff --git a/base/glprogs/_description.txt b/base/glprogs/_description.txt new file mode 100644 index 00000000..29b9ca11 --- /dev/null +++ b/base/glprogs/_description.txt @@ -0,0 +1,3 @@ +interaction.vfp : Toon + Specular (needs to be controlled by the materials) + Improved ambient +interaction_nospecular.vfp : Toon with no Specular +interaction_original.vfp : Original shader compatible with Doom 3 diff --git a/base/glprogs/bumpyEnvironment.vfp b/base/glprogs/bumpyEnvironment.vfp new file mode 100644 index 00000000..576515ea --- /dev/null +++ b/base/glprogs/bumpyEnvironment.vfp @@ -0,0 +1,83 @@ +# Normal-Mapped CubeMap Lookup Vertex Program +# +# Vertex Attributes +# 9 tangent(?) +# 10 bitangent(?) +# +# Environment Values +# 5 local view position +# 6 modelMatrix[0] +# 7 modelMatrix[1] +# 8 modelMatrix[2] + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +TEMP R0; + +# tc0 : normal-map UV +MOV result.texcoord[0], vertex.texcoord[0]; + +SUB R0, program.env[5], vertex.position; + +# tc1 : view vector in global space +DP3 result.texcoord[1].x, program.env[6], R0; +DP3 result.texcoord[1].y, program.env[7], R0; +DP3 result.texcoord[1].z, program.env[8], R0; + +# tc2-4 : tangent-space to global-space matrix +DP3 result.texcoord[2].x, program.env[6], vertex.attrib[9]; +DP3 result.texcoord[3].x, program.env[7], vertex.attrib[9]; +DP3 result.texcoord[4].x, program.env[8], vertex.attrib[9]; + +DP3 result.texcoord[2].y, program.env[6], vertex.attrib[10]; +DP3 result.texcoord[3].y, program.env[7], vertex.attrib[10]; +DP3 result.texcoord[4].y, program.env[8], vertex.attrib[10]; + +DP3 result.texcoord[2].z, program.env[6], vertex.normal; +DP3 result.texcoord[3].z, program.env[7], vertex.normal; +DP3 result.texcoord[4].z, program.env[8], vertex.normal; + +MOV result.color, vertex.color; + +END + +# Normal-Mapped CubeMap Lookup Fragment Program +# +# Textures +# 0 environment cubemap +# 1 normalmap + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP globalEye, localNormal, globalNormal, reflVec, R0; + +# load normal map and normalize +TEX localNormal, fragment.texcoord[0], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +DP3 R0.x, localNormal, localNormal; +RSQ R0.x, R0.x; +MUL localNormal.xyz, R0.x, localNormal; + +# normalize global view vector +DP3 R0.x, fragment.texcoord[1], fragment.texcoord[1]; +RSQ R0.x, R0.x; +MUL globalEye, R0.x, fragment.texcoord[1]; + +# transform local normal to global space +DP3 globalNormal.x, fragment.texcoord[2], localNormal; +DP3 globalNormal.y, fragment.texcoord[3], localNormal; +DP3 globalNormal.z, fragment.texcoord[4], localNormal; + +# construct reflection vector and look up cubemap +DP3 R0.x, globalNormal, globalEye; +MUL reflVec, R0.x, globalNormal; +MAD reflVec, reflVec, 2.0, -globalEye; + +TEX result.color.xyz, reflVec, texture[0], CUBE; + +END \ No newline at end of file diff --git a/base/glprogs/bumpyMirror.vfp b/base/glprogs/bumpyMirror.vfp new file mode 100644 index 00000000..3724c555 --- /dev/null +++ b/base/glprogs/bumpyMirror.vfp @@ -0,0 +1,120 @@ +# Normal-Mapped Refraction Vertex Program +# +# Local Values +# 0 UV scrolling values +# 1 magnitude of deformation + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +PARAM clearVec = { 1.0, 0.0, 0.0, 1.0 }; +TEMP R0, R1; + +# tc0 : scrolled texture coordinates +ADD result.texcoord[0].xy, vertex.texcoord[0], program.local[0]; + +# tc1 : deformation magnitude scaled by projection distance +MOV R0, clearVec; +DP4 R0.z, state.matrix.modelview.row[2], vertex.position; + +DP4 R1.x, state.matrix.projection.row[0], R0; +DP4 R1.y, state.matrix.projection.row[3], R0; + +MAX R1.y, R1, 1.0; +RCP R1.y, R1.y; +MUL R1.x, R1.x, R1.y; +MIN R1.x, R1, 0.02; + +MUL result.texcoord[1], R1.x, program.local[1]; + +MOV result.texcoord[2], program.local[2]; +MOV result.texcoord[3], program.local[3]; + +END + +# Normal-Mapped Refraction Fragment Program +# +# Textures +# 0 _currentRender +# 1 normalmap +# +# Environment Values +# 0 screen non power of two adjust +# 1 fragment.position to 0.0-1.0 screen coordinates factor + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP R0, localNormal, basePos, sPos, outCol; + +PARAM off1 = { -1.0, 0.0, 1.0, 1.0 }; + +# load normalmap +TEX localNormal, fragment.texcoord[0], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +PARAM weight = { 0.1111111,1,1,1 }; + +# offset normalized screen coordinates by scaled normal, then apply npot adjustment +MUL basePos.xy, fragment.position, program.env[1]; +MAD_SAT basePos.xy, localNormal, fragment.texcoord[1], basePos; +TEX outCol.xyz, basePos, texture[0], 2D; +MUL outCol.xyz, outCol, weight.x; + +TEMP offs; + +MUL offs.xy, fragment.texcoord[2].xyyy, fragment.texcoord[2].z; + +MOV sPos.z, 0; +MOV sPos.w, fragment.texcoord[2].w; + +# everything's a blur ( 3x3 box ) +# 1 +MAD sPos.xy, off1.xxxx, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 2 +MAD sPos.xy, off1.xyyy, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 3 +MAD sPos.xy, off1.xzzz, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 4 +MAD sPos.xy, off1.yxxx, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 5 +MAD sPos.xy, off1.yzzz, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 6 +MAD sPos.xy, off1.zxxx, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 7 +MAD sPos.xy, off1.zyyy, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; +# 8 +MAD sPos.xy, off1.zzzz, offs, basePos; +#TEX R0.xyz, sPos, texture[0], 2D; +TXB R0.xyz, sPos, texture[0], 2D; +MAD outCol.xyz, R0, weight.x, outCol; + +MUL outCol.xyz, outCol, fragment.texcoord[3].x; + +MOV result.color.xyz, outCol; + + +END \ No newline at end of file diff --git a/base/glprogs/depthTest.vfp b/base/glprogs/depthTest.vfp new file mode 100644 index 00000000..383c2189 --- /dev/null +++ b/base/glprogs/depthTest.vfp @@ -0,0 +1,115 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +# cgc version 3.1.0013, build date Apr 18 2012 +# command line args: -profile arbvp1 -posinv +# source file: inkCustom_vert.cg +#vendor NVIDIA Corporation +#version 3.1.0.13 +#profile arbvp1 +#program main +#semantic main.inParms : C0 +#semantic main.inParms2 : C1 +#semantic main.inParms3 : C2 +#semantic main.inParms4 : C3 +#var float4 inParms : C0 : c[0] : 0 : 1 +#var float4 inParms2 : C1 : c[1] : 1 : 1 +#var float4 inParms3 : C2 : c[2] : 2 : 1 +#var float4 inParms4 : C3 : c[3] : 3 : 1 +#var float4 genParms : $vout.TEXCOORD4 : TEX4 : 4 : 1 +#var float4 genParms2 : $vout.TEXCOORD5 : TEX5 : 5 : 1 +#var float4 genParms3 : $vout.TEXCOORD6 : TEX6 : 6 : 1 +#var float4 genParms4 : $vout.TEXCOORD7 : TEX7 : 7 : 1 +PARAM c[4] = { program.local[0..3] }; +MOV result.texcoord[4], c[0]; +MOV result.texcoord[5], c[1]; +MOV result.texcoord[6], c[2]; +MOV result.texcoord[7], c[3]; +END +# 4 instructions, 0 R-regs +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +# cgc version 3.1.0013, build date Apr 18 2012 +# command line args: -profile arbfp1 -fastmath -fastprecision +# source file: inkCustom_frag.cg +#vendor NVIDIA Corporation +#version 3.1.0.13 +#profile arbfp1 +#program main +#semantic main.screenAdjust : ENV1 +#semantic main.depthImage : TEXUNIT0 +#var float4 screenAdjust : ENV1 : env[1] : 0 : 1 +#var sampler2D depthImage : TEXUNIT0 : texunit 0 : 1 : 1 +#var float4 genParms : $vin.TEXCOORD4 : TEX4 : 2 : 1 +#var float4 genParms2 : $vin.TEXCOORD5 : : 3 : 0 +#var float4 genParms3 : $vin.TEXCOORD6 : : 4 : 0 +#var float4 genParms4 : $vin.TEXCOORD7 : TEX7 : 5 : 1 +#var float2 fragPos : $vin.WPOS : WPOS : 6 : 1 +#var float4 outColor : $vout.COLOR : COL : 7 : 1 +#const c[0] = 1 2995 3000 -15000 +#const c[1] = 256 0.0078125 -1 0 +#const c[2] = 1 0 2 -1 +#const c[3] = 0.25 +PARAM c[4] = { { 1, 2995, 3000, -15000 }, + { 256, 0.0078125, -1, 0 }, + { 1, 0, 2, -1 }, + { 0.25 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R0.zw, fragment.position.xyxy, env[1].xyxy; +TEX R0.x, R0.zwzw, texture[0], 2D; +MAD R0.y, R0.x, c[0], -c[0].z; +RCP R0.y, R0.y; +MOV R1.z, fragment.texcoord[4].x; +MAD R1.x, R0.y, c[0].w, -fragment.texcoord[7].y; +RCP R1.y, fragment.texcoord[7].z; +MUL_SAT R1.x, R1, R1.y; +ADD R1.z, fragment.texcoord[7].x, -R1; +MAD R1.y, R1.x, R1.z, fragment.texcoord[4].x; +MAD R2.xy, R1.y, c[1].wzzw, R0.zwzw; +MAD R1.zw, R1.y, c[2].xyyx, R0; +TEX R1.x, R2, texture[0], 2D; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.z, -R0.x, R1.x; +ADD R1.x, R0, -R2; +ADD R2.z, R1.x, -R1; +MAD R2.xy, R1.y, c[2], R0.zwzw; +MAD R1.zw, R1.y, c[1], R0; +TEX R1.x, R2, texture[0], 2D; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.z, -R0.x, R1.x; +ADD R1.x, R0, -R2; +ADD R1.x, R1, -R1.z; +MAD R2.xy, R1.y, c[2].xwzw, R0.zwzw; +MAD_SAT R1.z, -R2, c[2], fragment.texcoord[7].w; +MAD_SAT R1.x, -R1, c[2].z, fragment.texcoord[7].w; +ADD R2.z, R1.x, R1; +MAD R1.zw, R1.y, c[2].xywx, R0; +TEX R1.x, R2, texture[0], 2D; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.z, -R0.x, R1.x; +ADD R1.x, R0, -R2; +ADD R2.y, R1.x, -R1.z; +ADD R1.zw, R0, R1.y; +ADD R0.zw, R0, -R1.y; +TEX R2.x, R0.zwzw, texture[0], 2D; +TEX R1.x, R1.zwzw, texture[0], 2D; +ADD R0.z, -R0.x, R1.x; +ADD R0.x, R0, -R2; +ADD R0.z, R0.x, -R0; +MAD_SAT R0.x, -R2.y, c[2].z, fragment.texcoord[7].w; +ADD R0.x, R2.z, R0; +MAD_SAT R0.z, -R0, c[2], fragment.texcoord[7].w; +ADD R0.z, R0.x, R0; +MUL R0.x, R0.y, c[0].w; +MAD R0.y, -R0.z, c[3].x, R0.z; +ADD R0.x, R0, -c[1]; +MUL R0.z, R0, c[3].x; +MUL_SAT R0.x, R0, c[1].y; +MAD R0.x, R0, R0.y, R0.z; +MUL_SAT R0.x, R0, fragment.texcoord[4].z; +MAD result.color.xyz, -R0.x, fragment.texcoord[4].y, c[0].x; +MOV result.color.w, c[0].x; +END +# 54 instructions, 3 R-regs diff --git a/base/glprogs/foggedAdd.vfp b/base/glprogs/foggedAdd.vfp new file mode 100644 index 00000000..88935f24 --- /dev/null +++ b/base/glprogs/foggedAdd.vfp @@ -0,0 +1,22 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[6] = { program.local[0..5] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { 1 } }; +TEMP R0; +TEMP R1; +RCP R0.x, fragment.position.w; +MUL R0.x, fragment.position.z, R0; +MAD_SAT R1.x, R0, fragment.texcoord[2], fragment.texcoord[2].y; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +ADD R1.x, -R1, c[0]; +MUL result.color.xyz, R0, R1.x; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedAddSoft.vfp b/base/glprogs/foggedAddSoft.vfp new file mode 100644 index 00000000..4218151e --- /dev/null +++ b/base/glprogs/foggedAddSoft.vfp @@ -0,0 +1,34 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[7] = { program.local[0..6] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 1, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +MUL R0.xy, fragment.position, env[1]; +TEX R1.x, R0, texture[1], 2D; +MAD R1.x, R1, c[0].z, -c[0].w; +RCP R1.y, R1.x; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R1.z, fragment.position, c[0], -c[0].w; +RCP R1.z, R1.z; +ADD R1.y, R1, -R1.z; +RCP R1.x, fragment.position.w; +MUL R1.x, fragment.position.z, R1; +MUL R1.y, R1, fragment.texcoord[3].x; +MAD_SAT R1.z, R1.x, fragment.texcoord[2].x, fragment.texcoord[2].y; +MUL_SAT R1.x, R1.y, c[0]; +ADD R1.y, -R1.z, c[0]; +MUL R1.x, R1.y, R1; +MUL result.color.xyz, R0, R1.x; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedAddSoftDist.vfp b/base/glprogs/foggedAddSoftDist.vfp new file mode 100644 index 00000000..c0b8213e --- /dev/null +++ b/base/glprogs/foggedAddSoftDist.vfp @@ -0,0 +1,37 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[8] = { program.local[0..7] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.texcoord[4], c[3]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 1, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +MUL R1.xy, fragment.position, env[1]; +TEX R1.x, R1, texture[1], 2D; +MAD R1.x, R1, c[0].z, -c[0].w; +RCP R1.y, R1.x; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R1.z, fragment.position, c[0], -c[0].w; +RCP R1.z, R1.z; +ADD R1.y, R1, -R1.z; +RCP R1.x, fragment.position.w; +MUL R1.x, fragment.position.z, R1; +MAD_SAT R1.z, R1.x, fragment.texcoord[2].x, fragment.texcoord[2].y; +MUL R1.y, R1, fragment.texcoord[3].x; +MUL_SAT R1.y, R1, c[0].x; +ADD R1.z, -R1, c[0].y; +MUL R1.y, R1.z, R1; +MAD_SAT R1.x, R1, fragment.texcoord[4], fragment.texcoord[4].y; +MUL R0.xyz, R0, R1.y; +MUL result.color.xyz, R0, R1.x; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedBlend.vfp b/base/glprogs/foggedBlend.vfp new file mode 100644 index 00000000..334a7922 --- /dev/null +++ b/base/glprogs/foggedBlend.vfp @@ -0,0 +1,21 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[6] = { program.local[0..5] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +TEMP R0; +TEMP R1; +RCP R1.x, fragment.position.w; +MUL R1.w, fragment.position.z, R1.x; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +ADD R1.xyz, fragment.texcoord[1], -R0; +MAD_SAT R1.w, R1, fragment.texcoord[2].x, fragment.texcoord[2].y; +MAD result.color.xyz, R1.w, R1, R0; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedBlendSoft.vfp b/base/glprogs/foggedBlendSoft.vfp new file mode 100644 index 00000000..747582a5 --- /dev/null +++ b/base/glprogs/foggedBlendSoft.vfp @@ -0,0 +1,34 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[7] = { program.local[0..6] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R2.xy, fragment.position, env[1]; +TEX R2.x, R2, texture[1], 2D; +MAD R1.w, R2.x, c[0].y, -c[0].z; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R2.y, fragment.position.z, c[0], -c[0].z; +RCP R1.w, R1.w; +RCP R2.x, R2.y; +ADD R2.x, R1.w, -R2; +RCP R1.w, fragment.position.w; +MUL R2.x, R2, fragment.texcoord[3]; +MUL R1.w, fragment.position.z, R1; +MUL_SAT R2.x, R2, c[0]; +ADD R1.xyz, -R0, fragment.texcoord[1]; +MAD_SAT R1.w, R1, fragment.texcoord[2].x, fragment.texcoord[2].y; +MAD result.color.xyz, R1.w, R1, R0; +MUL result.color.w, R0, R2.x; +END diff --git a/base/glprogs/foggedBlendSoftDist.vfp b/base/glprogs/foggedBlendSoftDist.vfp new file mode 100644 index 00000000..10015234 --- /dev/null +++ b/base/glprogs/foggedBlendSoftDist.vfp @@ -0,0 +1,37 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[8] = { program.local[0..7] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.texcoord[4], c[3]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R1.xy, fragment.position, env[1]; +TEX R2.x, R1, texture[1], 2D; +MAD R1.w, R2.x, c[0].y, -c[0].z; +RCP R2.x, R1.w; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R2.y, fragment.position.z, c[0], -c[0].z; +RCP R2.y, R2.y; +ADD R2.x, R2, -R2.y; +RCP R1.w, fragment.position.w; +MUL R1.w, fragment.position.z, R1; +ADD R1.xyz, -R0, fragment.texcoord[1]; +MAD_SAT R2.y, R1.w, fragment.texcoord[2].x, fragment.texcoord[2]; +MAD result.color.xyz, R2.y, R1, R0; +MUL R2.x, R2, fragment.texcoord[3]; +MUL_SAT R0.x, R2, c[0]; +MAD_SAT R0.y, R1.w, fragment.texcoord[4].x, fragment.texcoord[4]; +MUL R0.x, R0.w, R0; +MUL result.color.w, R0.x, R0.y; +END diff --git a/base/glprogs/foggedMul.vfp b/base/glprogs/foggedMul.vfp new file mode 100644 index 00000000..a64ed39e --- /dev/null +++ b/base/glprogs/foggedMul.vfp @@ -0,0 +1,22 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[6] = { program.local[0..5] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { 1 } }; +TEMP R0; +TEMP R1; +RCP R1.x, fragment.position.w; +MUL R1.w, fragment.position.z, R1.x; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +ADD R1.xyz, -R0, c[0].x; +MAD_SAT R1.w, R1, fragment.texcoord[2].x, fragment.texcoord[2].y; +MAD result.color.xyz, R1.w, R1, R0; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedMulSoft.vfp b/base/glprogs/foggedMulSoft.vfp new file mode 100644 index 00000000..be08cc0a --- /dev/null +++ b/base/glprogs/foggedMulSoft.vfp @@ -0,0 +1,35 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[7] = { program.local[0..6] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 2995, 3000, 1 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R2.xy, fragment.position, env[1]; +TEX R2.x, R2, texture[1], 2D; +MAD R1.w, R2.x, c[0].y, -c[0].z; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R2.y, fragment.position.z, c[0], -c[0].z; +RCP R1.w, R1.w; +RCP R2.x, R2.y; +ADD R2.x, R1.w, -R2; +RCP R1.w, fragment.position.w; +MUL R2.x, R2, fragment.texcoord[3]; +MUL R1.w, fragment.position.z, R1; +ADD R1.xyz, -R0, c[0].w; +MUL_SAT R2.x, R2, c[0]; +MAD_SAT R1.w, R1, fragment.texcoord[2].x, fragment.texcoord[2].y; +MUL R1.w, R1, R2.x; +MAD result.color.xyz, R1.w, R1, R0; +MOV result.color.w, R0; +END diff --git a/base/glprogs/foggedMulSoftDist.vfp b/base/glprogs/foggedMulSoftDist.vfp new file mode 100644 index 00000000..9e39ddff --- /dev/null +++ b/base/glprogs/foggedMulSoftDist.vfp @@ -0,0 +1,39 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[8] = { program.local[0..7] }; +MOV result.texcoord[1], c[0]; +MOV result.texcoord[2], c[1]; +MOV result.texcoord[3], c[2]; +MOV result.texcoord[4], c[3]; +MOV result.color, vertex.color; +MOV result.texcoord[0].xy, vertex.texcoord[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 2995, 3000, 1 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R1.xy, fragment.position, env[1]; +TEX R2.x, R1, texture[1], 2D; +MAD R1.w, R2.x, c[0].y, -c[0].z; +RCP R2.x, R1.w; +TEX R0, fragment.texcoord[0], texture[0], 2D; +MUL R0, R0, fragment.color.primary; +MAD R2.y, fragment.position.z, c[0], -c[0].z; +RCP R2.y, R2.y; +ADD R2.x, R2, -R2.y; +RCP R1.w, fragment.position.w; +MUL R1.w, fragment.position.z, R1; +MAD_SAT R2.y, R1.w, fragment.texcoord[4].x, fragment.texcoord[4]; +MUL R2.x, R2, fragment.texcoord[3]; +ADD R1.xyz, -R0, c[0].w; +MUL_SAT R2.x, R2, c[0]; +MAD_SAT R1.w, R1, fragment.texcoord[2].x, fragment.texcoord[2].y; +ADD R2.y, -R2, c[0].w; +MUL R1.w, R1, R2.x; +MAX R1.w, R1, R2.y; +MAD result.color.xyz, R1.w, R1, R0; +MOV result.color.w, R0; +END diff --git a/base/glprogs/gaussBlurX_15.vfp b/base/glprogs/gaussBlurX_15.vfp new file mode 100644 index 00000000..364803eb --- /dev/null +++ b/base/glprogs/gaussBlurX_15.vfp @@ -0,0 +1,69 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[5] = { program.local[0..3], + { 0.14285715 } }; +TEMP R0; +MOV R0.x, c[0]; +MOV result.texcoord[0], vertex.texcoord[0]; +MOV result.texcoord[4].xzw, c[0]; +MUL result.texcoord[4].y, R0.x, c[4].x; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[3] = { { 0, 0.015625, 0.03125, 0.046875 }, + { 0.0625, 0.078125, 0.09375, 0.109375 }, + { 0.125 } }; +TEMP R0; +TEMP R1; +TEMP R2; +TEMP R3; +MOV R2.y, c[0].x; +MOV R2.x, fragment.texcoord[4].y; +MOV R0.y, c[0].x; +MOV R0.x, fragment.texcoord[4]; +ADD R3.xy, fragment.texcoord[0], -R0; +ADD R1.xy, R3, R2; +ADD R2.zw, R1.xyxy, R2.xyxy; +TEX R0.xyz, R1, texture[0], 2D; +MUL R1.xyz, R0, c[0].z; +TEX R0.xyz, R3, texture[0], 2D; +MAD R0.xyz, R0, c[0].y, R1; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[0].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].y, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].z, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[2].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].z, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].y, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +MAD R0.xyz, R1, c[0].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +MAD R0.xyz, R1, c[0].z, R0; +ADD R2.xy, R3, R2; +TEX R1.xyz, R2, texture[0], 2D; +MAD result.color.xyz, R1, c[0].y, R0; +END diff --git a/base/glprogs/gaussBlurY_15.vfp b/base/glprogs/gaussBlurY_15.vfp new file mode 100644 index 00000000..19674153 --- /dev/null +++ b/base/glprogs/gaussBlurY_15.vfp @@ -0,0 +1,69 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[5] = { program.local[0..3], + { 0.14285715 } }; +TEMP R0; +MOV R0.x, c[0]; +MOV result.texcoord[0], vertex.texcoord[0]; +MUL result.texcoord[4].y, R0.x, c[4].x; +MOV result.texcoord[4].x, c[0]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[3] = { { 0, 0.015625, 0.03125, 0.046875 }, + { 0.0625, 0.078125, 0.09375, 0.109375 }, + { 0.125 } }; +TEMP R0; +TEMP R1; +TEMP R2; +TEMP R3; +MOV R2.y, fragment.texcoord[4]; +MOV R2.x, c[0]; +MOV R0.y, fragment.texcoord[4].x; +MOV R0.x, c[0]; +ADD R3.xy, fragment.texcoord[0], -R0; +ADD R1.xy, R3, R2; +ADD R2.zw, R1.xyxy, R2.xyxy; +TEX R0.xyz, R1, texture[0], 2D; +MUL R1.xyz, R0, c[0].z; +TEX R0.xyz, R3, texture[0], 2D; +MAD R0.xyz, R0, c[0].y, R1; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[0].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].y, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].z, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[2].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +MAD R0.xyz, R1, c[1].z, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].y, R0; +TEX R1.xyz, R3, texture[0], 2D; +ADD R2.zw, R3.xyxy, R2.xyxy; +ADD R3.xy, R2.zwzw, R2; +MAD R0.xyz, R1, c[1].x, R0; +TEX R1.xyz, R2.zwzw, texture[0], 2D; +MAD R0.xyz, R1, c[0].w, R0; +TEX R1.xyz, R3, texture[0], 2D; +MAD R0.xyz, R1, c[0].z, R0; +ADD R2.xy, R3, R2; +TEX R1.xyz, R2, texture[0], 2D; +MAD result.color.xyz, R1, c[0].y, R0; +END diff --git a/base/glprogs/glowComp.vfp b/base/glprogs/glowComp.vfp new file mode 100644 index 00000000..3dd1dc2e --- /dev/null +++ b/base/glprogs/glowComp.vfp @@ -0,0 +1,24 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[4] = { program.local[0..3] }; +MOV result.texcoord[0], vertex.texcoord[0]; +MOV result.texcoord[4], c[0]; +MOV result.texcoord[5], c[1]; +MOV result.texcoord[6], c[2]; +MOV result.texcoord[7], c[3]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { 1 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +MUL R0.xy, fragment.position, env[0]; +MUL R0.xy, R0, env[1]; +TEX R0.xyz, R0, texture[0], 2D; +TEX R1.xyz, fragment.texcoord[0], texture[1], 2D; +MAD R1.xyz, fragment.texcoord[4].x, R1, R0; +TEX R0.xyz, fragment.texcoord[0], texture[2], 2D; +MAD result.color.xyz, R0, fragment.texcoord[4].y, R1; +MOV result.color.w, c[0].x; +END diff --git a/base/glprogs/heatHaze.vfp b/base/glprogs/heatHaze.vfp new file mode 100644 index 00000000..ce31bd26 --- /dev/null +++ b/base/glprogs/heatHaze.vfp @@ -0,0 +1,61 @@ +# Normal-Mapped Refraction Vertex Program +# +# Local Values +# 0 UV scrolling values +# 1 magnitude of deformation + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +PARAM clearVec = { 1.0, 0.0, 0.0, 1.0 }; +TEMP R0, R1, R2; + +# tc0 : scrolled texture coordinates +ADD result.texcoord[0].xy, vertex.texcoord[0], program.local[0]; + +# tc1 : deformation magnitude scaled by projection distance +MOV R0, clearVec; +DP4 R0.z, state.matrix.modelview.row[2], vertex.position; + +DP4 R1.x, state.matrix.projection.row[0], R0; +DP4 R1.y, state.matrix.projection.row[3], R0; + +MAX R1.y, R1, 1.0; +RCP R1.y, R1.y; +MUL R1.x, R1.x, R1.y; +MIN R1.x, R1, 0.02; + +MUL result.texcoord[1], R1.x, program.local[1]; + +END + +# Normal-Mapped Refraction Fragment Program +# +# Textures +# 0 _currentRender +# 1 normalmap +# +# Environment Values +# 0 screen non power of two adjust +# 1 fragment.position to 0.0-1.0 screen coordinates factor + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP R0, localNormal; + +# load normalmap +TEX localNormal, fragment.texcoord[0], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +# offset normalized screen coordinates by scaled normal, then apply npot adjustment +MUL R0.xy, fragment.position, program.env[1]; +MAD_SAT R0.xy, localNormal, fragment.texcoord[1], R0; +MUL R0.xy, R0, program.env[0]; + +# look up _currentRender +TEX result.color.xyz, R0, texture[0], 2D; + +END \ No newline at end of file diff --git a/base/glprogs/heatHazeWithMask.vfp b/base/glprogs/heatHazeWithMask.vfp new file mode 100644 index 00000000..15260e3b --- /dev/null +++ b/base/glprogs/heatHazeWithMask.vfp @@ -0,0 +1,74 @@ +# Normal-Mapped Masked Refraction Vertex Program +# +# Local Values +# 0 UV scrolling values +# 1 magnitude of deformation + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +PARAM clearVec = { 1.0, 0.0, 0.0, 1.0 }; +TEMP R0, R1, R2; + +# tc0 : unmodified UV +MOV result.texcoord[0].xy, vertex.texcoord[0]; + +# tc1 : scrolled UV +ADD result.texcoord[1].xy, vertex.texcoord[0], program.local[0]; + +# tc2 : deformation magnitude scaled by projection distance +MOV R0, clearVec; +DP4 R0.z, state.matrix.modelview.row[2], vertex.position; + +DP4 R1.x, state.matrix.projection.row[0], R0; +DP4 R1.y, state.matrix.projection.row[3], R0; + +MAX R1.y, R1, 1.0; +RCP R1.y, R1.y; +MUL R1.x, R1.x, R1.y; +MIN R1.x, R1, 0.02; + +MUL result.texcoord[2], R1.x, program.local[1]; + +END + +# Normal-Mapped Masked Refraction Fragment Program +# +# Textures +# 0 _currentRender +# 1 normalmap +# 2 mask texture +# +# Environment Values +# 0 screen non power of two adjust +# 1 fragment.position to 0.0-1.0 screen coordinates factor + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP R0, localNormal, maskTex; + +PARAM subOne = { -1, -1, -1, -1 }; +PARAM scaleTwo = { 2, 2, 2, 2 }; + +# load mask texture, skip pixel if value too low +TEX maskTex.xy, fragment.texcoord[0], texture[2], 2D; +SUB maskTex.xy, maskTex, 0.01; +KIL maskTex; + +# load normalmap and adjust by mask +TEX localNormal, fragment.texcoord[1], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; +MUL localNormal, localNormal, maskTex; + +# offset normalized screen coordinates by scaled normal, then apply npot adjustment +MUL R0.xy, fragment.position, program.env[1]; +MAD_SAT R0.xy, localNormal, fragment.texcoord[2], R0; +MUL R0.xy, R0, program.env[0]; + +# look up _currentRender +TEX result.color.xyz, R0, texture[0], 2D; + +END \ No newline at end of file diff --git a/base/glprogs/heatHazeWithMaskAndVertex.vfp b/base/glprogs/heatHazeWithMaskAndVertex.vfp new file mode 100644 index 00000000..eac15244 --- /dev/null +++ b/base/glprogs/heatHazeWithMaskAndVertex.vfp @@ -0,0 +1,77 @@ +# Normal-Mapped Masked ( Texture and Vertex Color ) Refraction Vertex Program +# +# Local Values +# 0 UV scrolling values +# 1 magnitude of deformation + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +PARAM clearVec = { 1.0, 0.0, 0.0, 1.0 }; +TEMP R0, R1, R2; + +# tc0 : unmodified UV +MOV result.texcoord[0].xy, vertex.texcoord[0]; + +# tc1 : scrolled UV +ADD result.texcoord[1].xy, vertex.texcoord[0], program.local[0]; + +# tc2 : deformation magnitude scaled by projection distance +MOV R0, clearVec; +DP4 R0.z, state.matrix.modelview.row[2], vertex.position; + +DP4 R1.x, state.matrix.projection.row[0], R0; +DP4 R1.y, state.matrix.projection.row[3], R0; + +MAX R1.y, R1, 1.0; +RCP R1.y, R1.y; +MUL R1.x, R1.x, R1.y; +MIN R1.x, R1, 0.02; + +MUL result.texcoord[2], R1.x, program.local[1]; + +MOV result.color, vertex.color; + +END + +# Normal-Mapped Masked ( Texture and Vertex Color ) Refraction Fragment Program +# +# Textures +# 0 _currentRender +# 1 normalmap +# 2 mask texture +# +# Environment Values +# 0 screen non power of two adjust +# 1 fragment.position to 0.0-1.0 screen coordinates factor + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP R0, localNormal, maskTex; + +PARAM subOne = { -1, -1, -1, -1 }; +PARAM scaleTwo = { 2, 2, 2, 2 }; + +# load mask texture, skip pixel if value too low +TEX maskTex.xy, fragment.texcoord[0], texture[2], 2D; +MUL maskTex.xy, maskTex, fragment.color; +SUB maskTex.xy, maskTex, 0.01; +KIL maskTex; + +# load normalmap and adjust by mask +TEX localNormal, fragment.texcoord[1], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; +MUL localNormal, localNormal, maskTex; + +# offset normalized screen coordinates by scaled normal, then apply npot adjustment +MUL R0.xy, fragment.position, program.env[1]; +MAD_SAT R0.xy, localNormal, fragment.texcoord[2], R0; +MUL R0.xy, R0, program.env[0]; + +# look up _currentRender +TEX result.color.xyz, R0, texture[0], 2D; + +END \ No newline at end of file diff --git a/base/glprogs/inkEffect.vfp b/base/glprogs/inkEffect.vfp new file mode 100644 index 00000000..90605daf --- /dev/null +++ b/base/glprogs/inkEffect.vfp @@ -0,0 +1,83 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[4] = { program.local[0..3] }; +MOV result.texcoord[4], c[0]; +MOV result.texcoord[5], c[1]; +MOV result.texcoord[6], c[2]; +MOV result.texcoord[7], c[3]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[3] = { { 1, 9995, 10000, -50000 }, + { -1, 0, 1, 2 }, + { 0.25 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +TEMP R3; +MUL R0.zw, fragment.position.xyxy, env[1].xyxy; +TEX R0.x, R0.zwzw, texture[0], 2D; +MAD R0.y, R0.x, c[0], -c[0].z; +RCP R0.y, R0.y; +RCP R1.y, fragment.texcoord[4].w; +MAD R1.x, R0.y, c[0].w, -fragment.texcoord[4].z; +MUL_SAT R1.x, R1, R1.y; +ADD R1.z, fragment.texcoord[4].y, -fragment.texcoord[4].x; +MAD R1.y, R1.x, R1.z, fragment.texcoord[4].x; +MAD R2.xy, R1.y, c[1], R0.zwzw; +TEX R1.x, R2, texture[0], 2D; +MAD R1.zw, R1.y, c[1].xyzy, R0; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.z, -R0.x, R2.x; +ADD R1.x, R0, -R1; +ADD R1.x, R1, -R1.z; +MAD R1.w, R0.y, c[0], -fragment.texcoord[6].x; +RCP R2.x, fragment.texcoord[6].y; +MUL_SAT R2.w, R1, R2.x; +MAD R2.y, fragment.texcoord[7], fragment.texcoord[7].z, -fragment.texcoord[7]; +MAD R2.z, R2.w, R2.y, fragment.texcoord[7].y; +MAD R2.xy, R1.y, c[1].yzzw, R0.zwzw; +MUL R3.x, -R1, R2.z; +MAD R1.zw, R1.y, c[1].xyyx, R0; +TEX R1.x, R2, texture[0], 2D; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.w, -R0.x, R2.x; +ADD R1.z, R0.x, -R1.x; +MAD R1.x, fragment.texcoord[5].z, fragment.texcoord[5].w, -fragment.texcoord[5].z; +MAD R2.w, R2, R1.x, fragment.texcoord[5].z; +ADD R1.z, R1, -R1.w; +MUL R1.x, R2.z, -R1.z; +MAD_SAT R1.z, R1.x, c[1].w, R2.w; +MAD_SAT R1.x, R3, c[1].w, R2.w; +ADD R3.x, R1, R1.z; +MAD R2.xy, R1.y, c[1].zxzw, R0.zwzw; +MAD R1.zw, R1.y, c[1].xyxz, R0; +TEX R1.x, R2, texture[0], 2D; +TEX R2.x, R1.zwzw, texture[0], 2D; +ADD R1.z, -R0.x, R1.x; +ADD R1.x, R0, -R2; +ADD R2.y, R1.x, -R1.z; +ADD R1.zw, R0, R1.y; +ADD R0.zw, R0, -R1.y; +TEX R2.x, R0.zwzw, texture[0], 2D; +TEX R1.x, R1.zwzw, texture[0], 2D; +ADD R0.z, -R0.x, R1.x; +ADD R0.x, R0, -R2; +ADD R0.z, R0.x, -R0; +MUL R0.x, R2.z, -R2.y; +MUL R0.z, R2, -R0; +MAD_SAT R0.x, R0, c[1].w, R2.w; +MAD_SAT R0.z, R0, c[1].w, R2.w; +ADD R0.x, R3, R0; +ADD R0.x, R0, R0.z; +MUL R0.w, R0.x, c[2].x; +MAD R1.x, fragment.texcoord[6].z, R0.w, -R0.w; +RCP R0.z, fragment.texcoord[7].x; +MAD R0.x, R0.y, c[0].w, -fragment.texcoord[6].w; +MUL_SAT R0.x, R0, R0.z; +MAD R0.x, R0, R1, R0.w; +MUL_SAT R0.x, R0, fragment.texcoord[5]; +MAD result.color.xyz, -R0.x, fragment.texcoord[5].y, c[0].x; +MOV result.color.w, c[0].x; +END diff --git a/base/glprogs/inkEffectLinear.vfp b/base/glprogs/inkEffectLinear.vfp new file mode 100644 index 00000000..9839ffe6 --- /dev/null +++ b/base/glprogs/inkEffectLinear.vfp @@ -0,0 +1,99 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[4] = { program.local[0..3] }; +MOV result.texcoord[4], c[0]; +MOV result.texcoord[5], c[1]; +MOV result.texcoord[6], c[2]; +MOV result.texcoord[7], c[3]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[3] = { { 1, 9995, 10000, -50000 }, + { -1, 0, 1, 2 }, + { 0.25 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +TEMP R2; +MUL R0.zw, fragment.position.xyxy, env[1].xyxy; +TEX R0.x, R0.zwzw, texture[0], 2D; +MAD R0.x, R0, c[0].y, -c[0].z; +RCP R1.x, R0.x; +MUL R2.y, R1.x, c[0].w; +MAD R0.x, R1, c[0].w, -fragment.texcoord[4].z; +RCP R0.y, fragment.texcoord[4].w; +MUL_SAT R0.x, R0, R0.y; +ADD R1.y, fragment.texcoord[4], -fragment.texcoord[4].x; +MAD R0.y, R0.x, R1, fragment.texcoord[4].x; +MAD R1.zw, R0.y, c[1].xyzy, R0; +TEX R0.x, R1.zwzw, texture[0], 2D; +MAD R1.y, R0.x, c[0], -c[0].z; +MAD R1.zw, R0.y, c[1].xyxy, R0; +TEX R0.x, R1.zwzw, texture[0], 2D; +RCP R1.y, R1.y; +MAD R1.x, R1.y, c[0].w, -R2.y; +MAD R0.x, R0, c[0].y, -c[0].z; +RCP R0.x, R0.x; +MAD R0.x, -R0, c[0].w, R2.y; +ADD R0.x, R0, -R1; +ADD R1.y, R2, -fragment.texcoord[6].x; +RCP R1.z, fragment.texcoord[6].y; +MUL_SAT R2.w, R1.y, R1.z; +MAD R1.xy, R0.y, c[1].yxzw, R0.zwzw; +TEX R1.x, R1, texture[0], 2D; +MAD R1.w, fragment.texcoord[7].y, fragment.texcoord[7].z, -fragment.texcoord[7].y; +MAD R2.x, R2.w, R1.w, fragment.texcoord[7].y; +MAD R1.x, R1, c[0].y, -c[0].z; +RCP R1.y, R1.x; +MAD R1.zw, R0.y, c[1].xyyz, R0; +MUL R2.z, -R0.x, R2.x; +TEX R0.x, R1.zwzw, texture[0], 2D; +MAD R0.x, R0, c[0].y, -c[0].z; +RCP R0.x, R0.x; +MAD R1.x, -R0, c[0].w, R2.y; +MAD R1.y, R1, c[0].w, -R2; +MAD R0.x, fragment.texcoord[5].z, fragment.texcoord[5].w, -fragment.texcoord[5].z; +MAD R2.w, R2, R0.x, fragment.texcoord[5].z; +ADD R1.x, R1, -R1.y; +MUL R0.x, R2, -R1; +MAD_SAT R1.x, R0, c[1].w, R2.w; +MAD_SAT R0.x, R2.z, c[1].w, R2.w; +ADD R2.z, R0.x, R1.x; +MAD R1.zw, R0.y, c[1].xyzx, R0; +MAD R1.xy, R0.y, c[1].xzzw, R0.zwzw; +TEX R1.x, R1, texture[0], 2D; +TEX R0.x, R1.zwzw, texture[0], 2D; +MAD R1.y, R0.x, c[0], -c[0].z; +MAD R0.x, R1, c[0].y, -c[0].z; +RCP R1.x, R1.y; +RCP R0.x, R0.x; +MAD R1.x, R1, c[0].w, -R2.y; +MAD R0.x, -R0, c[0].w, R2.y; +ADD R1.z, R0.x, -R1.x; +ADD R1.xy, R0.zwzw, R0.y; +ADD R0.zw, R0, -R0.y; +TEX R0.x, R1, texture[0], 2D; +MAD R0.y, R0.x, c[0], -c[0].z; +TEX R1.x, R0.zwzw, texture[0], 2D; +MAD R0.x, R1, c[0].y, -c[0].z; +RCP R0.y, R0.y; +RCP R0.x, R0.x; +MAD R0.x, -R0, c[0].w, R2.y; +MAD R0.y, R0, c[0].w, -R2; +ADD R0.y, R0.x, -R0; +MUL R0.x, R2, -R1.z; +MUL R0.y, R2.x, -R0; +MAD_SAT R0.x, R0, c[1].w, R2.w; +MAD_SAT R0.y, R0, c[1].w, R2.w; +ADD R0.x, R2.z, R0; +ADD R0.x, R0, R0.y; +MUL R0.z, R0.x, c[2].x; +MAD R0.w, fragment.texcoord[6].z, R0.z, -R0.z; +RCP R0.y, fragment.texcoord[7].x; +ADD R0.x, R2.y, -fragment.texcoord[6].w; +MUL_SAT R0.x, R0, R0.y; +MAD R0.x, R0, R0.w, R0.z; +MUL_SAT R0.x, R0, fragment.texcoord[5]; +MAD result.color.xyz, -R0.x, fragment.texcoord[5].y, c[0].x; +MOV result.color.w, c[0].x; +END diff --git a/base/glprogs/interaction.vfp b/base/glprogs/interaction.vfp new file mode 100644 index 00000000..16efb265 --- /dev/null +++ b/base/glprogs/interaction.vfp @@ -0,0 +1,234 @@ +# Interaction Vertex Program +# +# Vertex Attributes +# 8 texcoord +# 9 vertex normal(?) +# 10 vertex tangent(?) +# 11 vertex bintangent(?) +# +# Environment Values +# 4 local light position +# 5 local view position +# 6-8 light projection UVW +# 9 light falloff U +# 10-11 normal map UV +# 12-13 diffuse map UV +# 14-15 specular map UV +# 16 vertex colour modulate +# 17 vertex colour add + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +TEMP R0, R1; + +PARAM clearTC = { 0.0, 0.5, 0.0, 1.0 }; + +SUB R0.xyz, program.env[4], vertex.position; + +# tc0 : light vector in texture space +DP3 result.texcoord[0].x, R0, vertex.attrib[9]; +DP3 result.texcoord[0].y, R0, vertex.attrib[10]; +DP3 result.texcoord[0].z, R0, vertex.attrib[11]; + +# tc1 : normal map UV +DP4 result.texcoord[1].x, vertex.attrib[8], program.env[10]; +DP4 result.texcoord[1].y, vertex.attrib[8], program.env[11]; + +# tc2 : light falloff +DP4 result.texcoord[2].x, vertex.position, program.env[9]; +MOV result.texcoord[2].yzw, clearTC; + +# tc3 : light projection +DP4 result.texcoord[3].x, vertex.position, program.env[6]; +DP4 result.texcoord[3].y, vertex.position, program.env[7]; +DP4 result.texcoord[3].w, vertex.position, program.env[8]; + +# tc4 : diffuse map UV +DP4 result.texcoord[4].x, vertex.attrib[8], program.env[12]; +DP4 result.texcoord[4].y, vertex.attrib[8], program.env[13]; + +# tc5 : specular map UV +DP4 result.texcoord[5].x, vertex.attrib[8], program.env[14]; +DP4 result.texcoord[5].y, vertex.attrib[8], program.env[15]; + +SUB R1.xyz, program.env[5], vertex.position; + +# tc6 : view vector in texture space +DP3 result.texcoord[6].x, R1, vertex.attrib[9]; +DP3 result.texcoord[6].y, R1, vertex.attrib[10]; +DP3 result.texcoord[6].z, R1, vertex.attrib[11]; + +# no support for material stage in the engine yet +# tc7 : gloss map UV +#DP4 result.texcoord[7].x, vertex.attrib[8], program.env[14]; +#DP4 result.texcoord[7].y, vertex.attrib[8], program.env[15]; + +# calculate vertex color ( output = vertexColor * env[16] + env[17] ) +# +# env[16] env[17] +# 1.0 0 1 +# color 1 0 +# 1.0 - color -1 1 + +MAD result.color, vertex.color, program.env[16], program.env[17]; + +END + +# Interaction Fragment Program +# +# Textures +# 0 normalization cube map ( not used in this version ) +# 1 normal map +# 2 light falloff texture +# 3 light projection texture +# 4 diffuse map +# 5 specular map +# 6 specular lookup table +# 7 gloss map (material stage support in the engine is not present, yet) +# +# Environment Values +# 0 diffuse modifier +# 1 specular modifier + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +PARAM aVec = { 1.0, 0.0, 0.0, 1.0 }; + +# parms0 : specular power +PARAM parms0 = { 24.0, 0.0, 0.0, 0.0 }; + +# gloss values ( default, high gloss, low gloss ) +PARAM gVals = { 16, 150, 2, 0 }; + +# "half-lambert" scale and bias ( set bias to something like 1 if you dont want this ) +PARAM halfLamb = { 0.4, 0.6, 0, 0 }; + +# lighting bias ( more of the model gets lit than normally ), shadow sharpen scale, shadow sharpen bias +PARAM p0 = { 0.1, 8, -1.5, 0 }; + +TEMP toView, toLight, halfVec, zeDots, lightProj, R0, R1, diffColor, specColor, outColor, localNormal; + +# normalize view vector +DP3 toView.w, fragment.texcoord[6], fragment.texcoord[6]; +RSQ toView.w, toView.w; +MUL toView.xyz, toView.w, fragment.texcoord[6]; + +# normalize light vector +DP3 toLight.w, fragment.texcoord[0], fragment.texcoord[0]; +RSQ toLight.w, toLight.w; +MUL toLight.xyz, toLight.w, fragment.texcoord[0]; + +# construct half vector +ADD halfVec.xyz, toView, toLight; +DP3 halfVec.w, halfVec, halfVec; +RSQ halfVec.w, halfVec.w; +MUL halfVec.xyz, halfVec.w, halfVec; + +# look up normal ( rxgb swizzle ) +TEX localNormal, fragment.texcoord[1], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +DP3 R0.x, localNormal, localNormal; +RSQ R0.x, R0.x; +MUL localNormal.xyz, R0.x, localNormal; + +# load light projection and falloff +TXP lightProj.xyz, fragment.texcoord[3], texture[3], 2D; +TXP R0.xyz, fragment.texcoord[2], texture[2], 2D; +MUL lightProj.xyz, lightProj, R0; + +# load diffuse map +TEX diffColor.xyz, fragment.texcoord[4], texture[4], 2D; +MUL diffColor.xyz, diffColor, program.env[0]; + +# calculate dotproducts for diffuse/specular +DP3 zeDots.x, toLight, localNormal; +DP3_SAT zeDots.y, halfVec, localNormal; + +# apply specular power +POW R0.x, zeDots.y, parms0.x; +MUL R0.x, R0, program.env[1]; + +# default Doom3 doubles the specularity +ADD R0.x, R0, R0; + +# look up specular map +TEX specColor, fragment.texcoord[5], texture[5], 2D; + +# assemble lighting +MAD outColor.xyz, specColor, R0.x, diffColor; + +# TOON (unoptimized wip) +#DP3 zeDots.w, toView, localNormal; +#DP3 zeDots.x, toLight, localNormal; +#DP3 zeDots.x, toLight, {0,0,1}; +MAD_SAT zeDots.z, zeDots.x, halfLamb.x, halfLamb.y; +# slightly increase diffuse response +ADD_SAT zeDots.x, zeDots, p0.x; + +# shadow sharpening +MAD_SAT zeDots.x, zeDots, p0.y, p0.z; +# + +# mix in half-lambert ? +MUL zeDots.x, zeDots.x, zeDots.z; + +# gloss mapping in specular texture alpha ( must be below ~250 to be used, otherwise default gloss value is used ) +# subtract 0.98, if value is above 0, consider it as not being glossmapped ( because texture with no alpha has alpha of 1 by default ) + +TEMP gloss; +SUB gloss.w, specColor.w, 0.98; +# lerp between 2 - 150 gloss power +LRP gloss.x, specColor.w, gVals.y, gVals.z; +CMP gloss.x, gloss.w, gloss, gVals; +#CMP gloss.x, gloss.w, gVals, gloss; +# + + +# specular shading +#MAD R0.x, R0, 0.5, 0.2; +#FLR R0.x, R0.x; +#MUL R0.x, R0.x, 2; +#MUL R0.x, R0.x, 0.75; +# +#MAD_SAT R0.x, zeDots.y, gloss.x, gloss.y; + +POW_SAT R0.x, zeDots.y, gloss.x; + +#MAD_SAT R0.x, zeDots.y, 8.0, -7; +##MAD_SAT R0.y, zeDots.y, 64.0, -63; +#MAD_SAT R0.y, zeDots.y +#ADD R0.x, R0.x, R0.y; +MUL R0.x, R0, 2; +MUL R0.x, R0, program.env[1]; +# + +#MUL zeDots.x, zeDots.x, zeDots.z; +MUL R0.x, R0, zeDots.x; +LRP zeDots.x, zeDots.x, 1.0, 0.25; + +TEX R1.y, aVec, texture[0], CUBE; +SUB R1.y, R1, 0.2; +#DP3 zeDots.w, toView, localNormal; +#MAD_SAT zeDots.w, zeDots.w, 0.4, 0.6; +CMP zeDots.x, R1.y, 1.0, zeDots.x; + +MOV outColor, diffColor; +MAD outColor, specColor, R0.x, diffColor; +#MAD_SAT zeDots.w, zeDots, 90, -6; +#MUL outColor, zeDots.w, outColor; +# + +MUL outColor.xyz, outColor, zeDots.x; +MUL outColor.xyz, outColor, lightProj; + +#MOV outColor.xyz, gloss.x; + +# apply vertex color +MUL result.color.xyz, outColor, fragment.color; + +END \ No newline at end of file diff --git a/base/glprogs/interaction_nospecular.vfp b/base/glprogs/interaction_nospecular.vfp new file mode 100644 index 00000000..597f5353 --- /dev/null +++ b/base/glprogs/interaction_nospecular.vfp @@ -0,0 +1,174 @@ +# Interaction Vertex Program +# +# Vertex Attributes +# 8 texcoord +# 9 vertex normal(?) +# 10 vertex tangent(?) +# 11 vertex bintangent(?) +# +# Environment Values +# 4 local light position +# 5 local view position +# 6-8 light projection UVW +# 9 light falloff U +# 10-11 normal map UV +# 12-13 diffuse map UV +# 14-15 specular map UV +# 16 vertex colour modulate +# 17 vertex colour add + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +TEMP R0, R1; + +PARAM clearTC = { 0.0, 0.5, 0.0, 1.0 }; + +SUB R0.xyz, program.env[4], vertex.position; + +# tc0 : light vector in texture space +DP3 result.texcoord[0].x, R0, vertex.attrib[9]; +DP3 result.texcoord[0].y, R0, vertex.attrib[10]; +DP3 result.texcoord[0].z, R0, vertex.attrib[11]; + +# tc1 : normal map UV +DP4 result.texcoord[1].x, vertex.attrib[8], program.env[10]; +DP4 result.texcoord[1].y, vertex.attrib[8], program.env[11]; + +# tc2 : light falloff +DP4 result.texcoord[2].x, vertex.position, program.env[9]; +MOV result.texcoord[2].yzw, clearTC; + +# tc3 : light projection +DP4 result.texcoord[3].x, vertex.position, program.env[6]; +DP4 result.texcoord[3].y, vertex.position, program.env[7]; +DP4 result.texcoord[3].w, vertex.position, program.env[8]; + +# tc4 : diffuse map UV +DP4 result.texcoord[4].x, vertex.attrib[8], program.env[12]; +DP4 result.texcoord[4].y, vertex.attrib[8], program.env[13]; + +# tc5 : specular map UV +DP4 result.texcoord[5].x, vertex.attrib[8], program.env[14]; +DP4 result.texcoord[5].y, vertex.attrib[8], program.env[15]; + +SUB R1.xyz, program.env[5], vertex.position; + +# tc6 : view vector in texture space +DP3 result.texcoord[6].x, R1, vertex.attrib[9]; +DP3 result.texcoord[6].y, R1, vertex.attrib[10]; +DP3 result.texcoord[6].z, R1, vertex.attrib[11]; + +# calculate vertex color ( output = vertexColor * env[16] + env[17] ) +# +# env[16] env[17] +# 1.0 0 1 +# color 1 0 +# 1.0 - color -1 1 + +MAD result.color, vertex.color, program.env[16], program.env[17]; + +END + +# Interaction Fragment Program +# +# Textures +# 0 normalization cube map ( not used in this version ) +# 1 normal map +# 2 light falloff texture +# 3 light projection texture +# 4 diffuse map +# 5 specular map +# 6 specular lookup table +# +# Environment Values +# 0 diffuse modifier +# 1 specular modifier + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +# parms0 : specular power +PARAM parms0 = { 24.0, 0.0, 0.0, 0.0 }; + +TEMP toView, toLight, halfVec, zeDots, lightProj, R0, R1, diffColor, specColor, outColor, localNormal; + +# normalize view vector +DP3 toView.w, fragment.texcoord[6], fragment.texcoord[6]; +RSQ toView.w, toView.w; +MUL toView.xyz, toView.w, fragment.texcoord[6]; + +# normalize light vector +DP3 toLight.w, fragment.texcoord[0], fragment.texcoord[0]; +RSQ toLight.w, toLight.w; +MUL toLight.xyz, toLight.w, fragment.texcoord[0]; + +# construct half vector +ADD halfVec.xyz, toView, toLight; +DP3 halfVec.w, halfVec, halfVec; +RSQ halfVec.w, halfVec.w; +MUL halfVec.xyz, halfVec.w, halfVec; + +# look up normal ( rxgb swizzle ) +TEX localNormal, fragment.texcoord[1], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +DP3 R0.x, localNormal, localNormal; +RSQ R0.x, R0.x; +MUL localNormal.xyz, R0.x, localNormal; + +# load light projection and falloff +TXP lightProj.xyz, fragment.texcoord[3], texture[3], 2D; +TXP R0.xyz, fragment.texcoord[2], texture[2], 2D; +MUL lightProj.xyz, lightProj, R0; + +# load diffuse map +TEX diffColor.xyz, fragment.texcoord[4], texture[4], 2D; +MUL diffColor.xyz, diffColor, program.env[0]; + +# calculate dotproducts for diffuse/specular +DP3 zeDots.x, toLight, localNormal; +DP3_SAT zeDots.y, halfVec, localNormal; + +# apply specular power +POW R0.x, zeDots.y, parms0.x; +MUL R0.x, R0, program.env[1]; + +# default Doom3 doubles the specularity +ADD R0.x, R0, R0; + +# look up specular map +TEX specColor.xyz, fragment.texcoord[5], texture[5], 2D; + +# assemble lighting +MAD outColor.xyz, specColor, R0.x, diffColor; + +# TOON (unoptimized wip) +DP3 zeDots.w, toView, localNormal; +DP3 zeDots.x, toLight, localNormal; +MAD zeDots.z, zeDots.x, 0.6, 0.4; +ADD_SAT zeDots.x, zeDots, 0.1; +MAD_SAT zeDots.x, zeDots, 24, -11.5; + +MAD R0.x, R0, 0.5, 0.5; +FLR R0.x, R0.x; +MUL R0.x, R0.x, 2; +MUL R0.x, R0.x, 0; + +MUL zeDots.x, zeDots.x, zeDots.z; +LRP zeDots.x, zeDots.x, 1.0, 0.3; +MOV outColor, diffColor; +MAD outColor, specColor, R0.x, diffColor; +MAD_SAT zeDots.w, zeDots, 90, -6; +MUL outColor, zeDots.w, outColor; +# + +MUL outColor.xyz, outColor, zeDots.x; +MUL outColor.xyz, outColor, lightProj; + +# apply vertex color +MUL result.color.xyz, outColor, fragment.color; + +END \ No newline at end of file diff --git a/base/glprogs/interaction_original.vfp b/base/glprogs/interaction_original.vfp new file mode 100644 index 00000000..76dccfd4 --- /dev/null +++ b/base/glprogs/interaction_original.vfp @@ -0,0 +1,153 @@ +# Interaction Vertex Program +# +# Vertex Attributes +# 8 texcoord +# 9 vertex normal(?) +# 10 vertex tangent(?) +# 11 vertex bintangent(?) +# +# Environment Values +# 4 local light position +# 5 local view position +# 6-8 light projection UVW +# 9 light falloff U +# 10-11 normal map UV +# 12-13 diffuse map UV +# 14-15 specular map UV +# 16 vertex colour modulate +# 17 vertex colour add + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +TEMP R0, R1; + +PARAM clearTC = { 0.0, 0.5, 0.0, 1.0 }; + +SUB R0.xyz, program.env[4], vertex.position; + +# tc0 : light vector in texture space +DP3 result.texcoord[0].x, R0, vertex.attrib[9]; +DP3 result.texcoord[0].y, R0, vertex.attrib[10]; +DP3 result.texcoord[0].z, R0, vertex.attrib[11]; + +# tc1 : normal map UV +DP4 result.texcoord[1].x, vertex.attrib[8], program.env[10]; +DP4 result.texcoord[1].y, vertex.attrib[8], program.env[11]; + +# tc2 : light falloff +DP4 result.texcoord[2].x, vertex.position, program.env[9]; +MOV result.texcoord[2].yzw, clearTC; + +# tc3 : light projection +DP4 result.texcoord[3].x, vertex.position, program.env[6]; +DP4 result.texcoord[3].y, vertex.position, program.env[7]; +DP4 result.texcoord[3].w, vertex.position, program.env[8]; + +# tc4 : diffuse map UV +DP4 result.texcoord[4].x, vertex.attrib[8], program.env[12]; +DP4 result.texcoord[4].y, vertex.attrib[8], program.env[13]; + +# tc5 : specular map UV +DP4 result.texcoord[5].x, vertex.attrib[8], program.env[14]; +DP4 result.texcoord[5].y, vertex.attrib[8], program.env[15]; + +SUB R1.xyz, program.env[5], vertex.position; + +# tc6 : view vector in texture space +DP3 result.texcoord[6].x, R1, vertex.attrib[9]; +DP3 result.texcoord[6].y, R1, vertex.attrib[10]; +DP3 result.texcoord[6].z, R1, vertex.attrib[11]; + +# calculate vertex color ( output = vertexColor * env[16] + env[17] ) +# +# env[16] env[17] +# 1.0 0 1 +# color 1 0 +# 1.0 - color -1 1 + +MAD result.color, vertex.color, program.env[16], program.env[17]; + +END + +# Interaction Fragment Program +# +# Textures +# 0 normalization cube map ( not used in this version ) +# 1 normal map +# 2 light falloff texture +# 3 light projection texture +# 4 diffuse map +# 5 specular map +# 6 specular lookup table +# +# Environment Values +# 0 diffuse modifier +# 1 specular modifier + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +# parms0 : specular power +PARAM parms0 = { 12.0, 0.0, 0.0, 0.0 }; + +TEMP toView, toLight, halfVec, zeDots, lightProj, R0, diffColor, specColor, outColor, localNormal; + +# normalize view vector +DP3 toView.w, fragment.texcoord[6], fragment.texcoord[6]; +RSQ toView.w, toView.w; +MUL toView.xyz, toView.w, fragment.texcoord[6]; + +# normalize light vector +DP3 toLight.w, fragment.texcoord[0], fragment.texcoord[0]; +RSQ toLight.w, toLight.w; +MUL toLight.xyz, toLight.w, fragment.texcoord[0]; + +# construct half vector +ADD halfVec.xyz, toView, toLight; +DP3 halfVec.w, halfVec, halfVec; +RSQ halfVec.w, halfVec.w; +MUL halfVec.xyz, halfVec.w, halfVec; + +# look up normal ( rxgb swizzle ) +TEX localNormal, fragment.texcoord[1], texture[1], 2D; +MAD localNormal.xyz, localNormal.wyzw, 2.0, -1.0; + +DP3 R0.x, localNormal, localNormal; +RSQ R0.x, R0.x; +MUL localNormal.xyz, R0.x, localNormal; + +# load light projection and falloff +TXP lightProj.xyz, fragment.texcoord[3], texture[3], 2D; +TXP R0.xyz, fragment.texcoord[2], texture[2], 2D; +MUL lightProj.xyz, lightProj, R0; + +# load diffuse map +TEX diffColor.xyz, fragment.texcoord[4], texture[4], 2D; +MUL diffColor.xyz, diffColor, program.env[0]; + +# calculate dotproducts for diffuse/specular +DP3 zeDots.x, toLight, localNormal; +DP3_SAT zeDots.y, halfVec, localNormal; + +# apply specular power +POW R0.x, zeDots.y, parms0.x; +MUL R0.x, R0, program.env[1]; + +# default Doom3 doubles the specularity +ADD R0.x, R0, R0; + +# look up specular map +TEX specColor.xyz, fragment.texcoord[5], texture[5], 2D; + +# assemble lighting +MAD outColor.xyz, specColor, R0.x, diffColor; +MUL outColor.xyz, outColor, zeDots.x; +MUL outColor.xyz, outColor, lightProj; + +# apply vertex color +MUL result.color.xyz, outColor, fragment.color; + +END \ No newline at end of file diff --git a/base/glprogs/portalSky.vfp b/base/glprogs/portalSky.vfp new file mode 100644 index 00000000..0d574bee --- /dev/null +++ b/base/glprogs/portalSky.vfp @@ -0,0 +1,18 @@ +# this really just displays a texture in screen-space + +!!ARBvp1.0 + +OPTION ARB_position_invariant; + +MOV result.texcoord[0], vertex.texcoord[0]; +END + +!!ARBfp1.0 + +OPTION ARB_precision_hint_fastest; + +TEMP R0; +MUL R0.xy, fragment.position, program.env[1]; +MUL R0.xy, R0, program.env[0]; +TEX result.color.xyz, R0, texture[0], 2D; +END \ No newline at end of file diff --git a/base/glprogs/shadow.vp b/base/glprogs/shadow.vp new file mode 100644 index 00000000..7fb0647f --- /dev/null +++ b/base/glprogs/shadow.vp @@ -0,0 +1,13 @@ +!!ARBvp1.0 + +TEMP R0; + +SUB R0, vertex.position, program.env[4]; +MAD R0, program.env[4], R0.w, R0; + +DP4 result.position.x, state.matrix.mvp.row[0], R0; +DP4 result.position.y, state.matrix.mvp.row[1], R0; +DP4 result.position.z, state.matrix.mvp.row[2], R0; +DP4 result.position.w, state.matrix.mvp.row[3], R0; + +END \ No newline at end of file diff --git a/base/glprogs/simpleFresnel.vfp b/base/glprogs/simpleFresnel.vfp new file mode 100644 index 00000000..5809d1b2 --- /dev/null +++ b/base/glprogs/simpleFresnel.vfp @@ -0,0 +1,24 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[2] = { program.local[0..1] }; +PARAM env[] = { program.env[0..5] }; +TEMP R0; +ADD R0.xyz, -vertex.position, env[5]; +MOV result.color, vertex.color; +MOV result.texcoord[2], c[0]; +MOV result.texcoord[3], c[1]; +DP3 result.texcoord[0].z, vertex.normal, R0; +DP3 result.texcoord[0].y, R0, vertex.attrib[10]; +DP3 result.texcoord[0].x, R0, vertex.attrib[9]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { 1 } }; +TEMP R0; +DP3 R0.x, fragment.texcoord[0], fragment.texcoord[0]; +RSQ R0.x, R0.x; +MAD R0.x, -R0, fragment.texcoord[0].z, c[0]; +POW R0.x, R0.x, fragment.texcoord[2].x; +MAD R0.x, R0, fragment.texcoord[2].y, fragment.texcoord[2].z; +MUL result.color, fragment.texcoord[3], R0.x; +END diff --git a/base/glprogs/softParticleAlpha.vfp b/base/glprogs/softParticleAlpha.vfp new file mode 100644 index 00000000..a72de9ba --- /dev/null +++ b/base/glprogs/softParticleAlpha.vfp @@ -0,0 +1,27 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[1] = { program.local[0] }; +MOV result.texcoord[0], vertex.texcoord[0]; +MOV result.texcoord[4], c[0]; +MOV result.color, vertex.color; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +PARAM c[1] = { { -15000, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +TEMP R1; +MUL R0.xy, fragment.position, env[1]; +TEX R0.x, R0, texture[0], 2D; +MAD R0.y, fragment.position.z, c[0], -c[0].z; +MAD R0.x, R0, c[0].y, -c[0].z; +RCP R0.y, R0.y; +RCP R0.x, R0.x; +ADD R0.x, R0, -R0.y; +MUL R1.x, R0, fragment.texcoord[4]; +TEX R0, fragment.texcoord[0], texture[1], 2D; +MUL_SAT R1.x, R1, c[0]; +MUL R0.w, R0, fragment.color.primary; +MUL result.color.w, R0, R1.x; +MUL result.color.xyz, R0, fragment.color.primary; +END diff --git a/base/glprogs/softParticleRGB.vfp b/base/glprogs/softParticleRGB.vfp new file mode 100644 index 00000000..0367f873 --- /dev/null +++ b/base/glprogs/softParticleRGB.vfp @@ -0,0 +1,60 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +# cgc version 3.1.0013, build date Apr 18 2012 +# command line args: -profile arbvp1 -posinv +# source file: softParticleRGB_vert.cg +#vendor NVIDIA Corporation +#version 3.1.0.13 +#profile arbvp1 +#program main +#semantic main.inParms : C0 +#var float4 inParms : C0 : c[0] : 0 : 1 +#var float4 vertexTC : $vin.TEXCOORD0 : TEXCOORD0 : 1 : 1 +#var float4 vertexColor : $vin.COLOR0 : COLOR0 : 2 : 1 +#var float4 texCoord : $vout.TEXCOORD0 : TEX0 : 3 : 1 +#var float4 genParms : $vout.TEXCOORD4 : TEX4 : 4 : 1 +#var float4 outColor : $vout.COLOR : COL0 : 5 : 1 +PARAM c[1] = { program.local[0] }; +MOV result.texcoord[0], vertex.texcoord[0]; +MOV result.texcoord[4], c[0]; +MOV result.color, vertex.color; +END +# 3 instructions, 0 R-regs +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +# cgc version 3.1.0013, build date Apr 18 2012 +# command line args: -profile arbfp1 -fastmath -fastprecision +# source file: softParticleRGB_frag.cg +#vendor NVIDIA Corporation +#version 3.1.0.13 +#profile arbfp1 +#program main +#semantic main.screenAdjust : ENV1 +#semantic main.depthImage : TEXUNIT0 +#semantic main.mainImage : TEXUNIT1 +#var float4 screenAdjust : ENV1 : env[1] : 0 : 1 +#var sampler2D depthImage : TEXUNIT0 : texunit 0 : 1 : 1 +#var sampler2D mainImage : TEXUNIT1 : texunit 1 : 2 : 1 +#var float3 fragPos : $vin.WPOS : WPOS : 3 : 1 +#var float4 texCoord : $vin.TEXCOORD0 : TEX0 : 4 : 1 +#var float4 genParms : $vin.TEXCOORD4 : TEX4 : 5 : 1 +#var float4 vColor : $vin.COLOR : COL0 : 6 : 1 +#var float4 outColor : $vout.COLOR : COL : 7 : 1 +#const c[0] = -15000 2995 3000 +PARAM c[1] = { { -15000, 2995, 3000 } }; +PARAM env[] = { program.env[0..1] }; +TEMP R0; +MUL R0.xy, fragment.position, env[1]; +TEX R0.x, R0, texture[0], 2D; +MAD R0.y, fragment.position.z, c[0], -c[0].z; +MAD R0.x, R0, c[0].y, -c[0].z; +RCP R0.y, R0.y; +RCP R0.x, R0.x; +ADD R0.x, R0, -R0.y; +MUL R0.w, R0.x, fragment.texcoord[4].x; +TEX R0.xyz, fragment.texcoord[0], texture[1], 2D; +MUL_SAT R0.w, R0, c[0].x; +MUL R0.xyz, R0, fragment.color.primary; +MUL result.color.xyz, R0, R0.w; +END +# 12 instructions, 1 R-regs diff --git a/base/glprogs/zFadeSimple.vfp b/base/glprogs/zFadeSimple.vfp new file mode 100644 index 00000000..8aa322f6 --- /dev/null +++ b/base/glprogs/zFadeSimple.vfp @@ -0,0 +1,14 @@ +!!ARBvp1.0 +OPTION ARB_position_invariant; +PARAM c[6] = { program.local[0..5] }; +MOV result.texcoord[0], c[0]; +MOV result.texcoord[1], c[1]; +END +!!ARBfp1.0 +OPTION ARB_precision_hint_fastest; +TEMP R0; +RCP R0.x, fragment.position.w; +MUL R0.x, fragment.position.z, R0; +MAD_SAT R0.x, R0, fragment.texcoord[0], fragment.texcoord[0].y; +MUL result.color, R0.x, fragment.texcoord[1]; +END diff --git a/base/materials/colors.mtr b/base/materials/colors.mtr new file mode 100644 index 00000000..de2526bf --- /dev/null +++ b/base/materials/colors.mtr @@ -0,0 +1,12 @@ +// -------------------------------------------------------------- +// COMMON COLORS +// -------------------------------------------------------------- +textures/color/black +{ + noFragment + { + blend diffusemap + map textures/colors/black.tga + linear // no mip maps + } +} \ No newline at end of file diff --git a/base/materials/common.mtr b/base/materials/common.mtr new file mode 100644 index 00000000..4e2a318a --- /dev/null +++ b/base/materials/common.mtr @@ -0,0 +1,307 @@ +_default +{ + { + map _default + } +} + +_tracemodel +{ + collision +} + +// a caulk brush will behave as a normal solid surface +// for collision detection and utility flood filling, and +// should be used whenever you know the area isn't going to +// be visible, but it needs to be closed off for things to +// work right. Curves and models don't stop the utility +// flood filling, so you need to have solid brushes behind +// them. Setting the faces that won't ever be seen to +// caulk will save some rendering time and data space. +textures/common/caulk +{ + qer_editorimage textures/editor/caulk.tga + noshadows + forceOpaque // will still seal levels +} + +//================================================================================== +// Clipping materials begins +//================================================================================== +// a monster clip brush is solid to monsters only +textures/common/monster_clip +{ + qer_editorimage textures/editor/monsterclip.jpg + nonsolid + monsterclip + noshadows +} + +// only solid for players +textures/common/player_clip +{ + qer_editorimage textures/editor/playerclip.tga + noimpact + nonsolid + playerclip + noshadows +} + +// solid for all entities, including projectiles +textures/common/full_clip +{ + qer_editorimage textures/editor/fullclip.tga + monsterclip + playerclip + moveableclip + noshadows +} + +// solid only for projectiles +textures/common/weapon_clip +{ + qer_editorimage textures/editor/weap_clip.tga + moveableclip + noshadows +} + +// solid to players and monsters only +textures/common/clip +{ + qer_editorimage textures/editor/clip.tga + noimpact + nonsolid + monsterclip + playerclip + noshadows +} + +// ASE/LWO models can have a hull (simplified copy of the original mesh) with this material so that engine +// uses lower poly model for collision detection instead of the actual visible model to improve performance +textures/common/collision +{ + qer_editorimage textures/editor/collision.tga + noshadows + collision +} + +textures/common/collision_terrain +{ + qer_editorimage textures/editor/collision.tga + noshadows + noSelfShadow + noimpact + nosteps + noOverlays + collision +} +//================================================================================== +// Clipping materials end +//================================================================================== + +// aassolid brushes create solid space in AAS files +textures/common/aassolid +{ + qer_editorimage textures/editor/aas_solid.tga + qer_nocarve + nonsolid + noshadows + aassolid +} + +// aasobstacle brushes are used to compile obstacles into AAS +// that can be enabled/disabled +textures/common/aasobstacle +{ + qer_editorimage textures/editor/aas_obstacle.tga + qer_nocarve + nonsolid + noshadows + aasobstacle +} + +// surfaces with this material will not render in-game +textures/common/nodraw +{ + qer_editorimage textures/editor/nodraw.tga + nonsolid + noShadows + noSelfShadow +} + +// sound speaker entity needs a material too :) +textures/common/speaker +{ + qer_editorimage textures/editor/speaker.tga + qer_nocarve + noshadows +} + +textures/common/shadow +{ + noSelfShadow + nonsolid + noimpact + nosteps + forceShadows +} + +textures/common/ladder +{ + qer_editorimage textures/common/ladder.tga + nonsolid + monsterclip + playerclip + noimpact + ladder + noshadows +} + + +//====================================================================== +// GUIs Begin +//====================================================================== +// Use this material for the interactive view screen and use +// a "gui" key referencing appropriate gui file, like "guis/yourguifile.gui" on the entity. +// A model-entity can only have 3 GUI screens +textures/common/entityGui { + qer_editorimage textures/editor/entityGui.tga + discrete + playerclip + guiSurf entity +} + +textures/common/entityGui2 { + qer_editorimage textures/editor/entityGui2.tga + discrete + playerclip + guiSurf entity2 +} + +textures/common/entityGui3 { + qer_editorimage textures/editor/entityGui3.tga + discrete + guiSurf entity3 + playerclip +} +//====================================================================== +// GUIs End +//====================================================================== + +// vis portal brushes (one face with vizportal material and the rest 5 with nodraw material) are used to prevent engine +// from rendering what's not in the player's view to improve performance +textures/editor/visportal +{ + qer_editorimage textures/editor/visportal.tga + areaportal + noshadows +} + + +//====================================================================== +// For De Triggers +//====================================================================== + +// standard trigger uses this one +textures/common/trig_std +{ + qer_editorimage textures/editor/trigger_std.tga + qer_nocarve // don't let an awry CSG operation cut it up + noshadows + trigger +} + +textures/common/trig_relay +{ + qer_editorimage textures/editor/trigger_relay.tga + qer_nocarve // don't let an awry CSG operation cut it up + noshadows + trigger +} + +textures/common/trig_hurt //de pain, DE PAIN!!! +{ + qer_editorimage textures/editor/trigger_hurt.tga + qer_nocarve // don't let an awry CSG operation cut it up + noshadows + trigger +} + +textures/common/trig_touch +{ + qer_editorimage textures/editor/trigger_touch.tga + qer_nocarve // don't let an awry CSG operation cut it up + noshadows + trigger +} + +//====================================================================== +// Triggers End! +//====================================================================== + +//====================================================================== +// MISC TEXTURES FOR ENTITIES +//====================================================================== + +textures/editor/location +{ + qer_editorimage textures/editor/location.tga + qer_nocarve + noshadows +} + +textures/editor/location_separator +{ + qer_editorimage textures/editor/location_separator.tga + qer_nocarve + noshadows +} + +textures/editor/quest +{ + qer_editorimage textures/editor/quest.tga + qer_nocarve + noshadows +} + +textures/editor/quest_complete +{ + qer_editorimage textures/editor/quest_complete.tga + qer_nocarve + noshadows +} + +textures/editor/quest_primary +{ + qer_editorimage textures/editor/quest_primary.tga + qer_nocarve + noshadows +} + +textures/editor/commstream +{ + qer_editorimage textures/editor/commstream.tga + qer_nocarve + noshadows +} + +textures/editor/camera_view +{ + qer_editorimage textures/editor/camera_view.tga + qer_nocarve + noshadows +} + +textures/editor/target_null +{ + qer_editorimage textures/editor/target_null.tga + qer_nocarve + noshadows +} + +textures/editor/tip +{ + qer_editorimage textures/editor/tip.tga + qer_nocarve + noshadows +} \ No newline at end of file diff --git a/base/materials/enemies.mtr b/base/materials/enemies.mtr new file mode 100644 index 00000000..5ec8a534 --- /dev/null +++ b/base/materials/enemies.mtr @@ -0,0 +1,321 @@ +// ================================================================== +// UNION SECURITY ' S LIGHT PATROLMAN MATERIAL +// ================================================================== + +// ---------------------- BASE LIGHT PATROLMAN (short sleeve) -------------------------------- + +models/enemies/base_head +{ + clamp + flesh + forceOverlays + noSelfShadow +// toonGradientImage textures/toon_lut/toon_lut_01.tga this work in non-BFG engine? THF + + /*{ + blend bumpmap + map models/md5/enemies/union_patrolman/base_head_local.tga + }*/ + { + blend diffusemap + map models/md5/enemies/union_patrolman/base_head_d.tga + } + //specularmap models/md5/enemies/union_patrolman/base_head_s.tga + { + blend add + map models/md5/enemies/union_patrolman/base_head_d.tga + rgb 0.01 + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00075, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0012, 0.0005 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 1024.0, 9.0, 256.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 120.0, 2, 3 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0022, -0.001, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 2000, -2.5, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 100000, -0.9, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + }*/ //This is in BFG engine, old engine doesn't support glsl. Kept in for completness. +} + +models/enemies/base_torso_short_sleeve +{ + clamp + flesh + forceOverlays + noSelfShadow + /*{ + blend bumpmap + map models/md5/enemies/union_patrolman/base_torso_short_sleeve_local.tga + }*/ + { + blend diffusemap + map models/md5/enemies/union_patrolman/base_torso_short_sleeve_d.tga + } + //specularmap models/md5/enemies/union_patrolman/base_torso_short_sleeve_s.tga + { + blend add + map models/md5/enemies/union_patrolman/base_torso_short_sleeve_d.tga + rgb 0.01 + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00075, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0012, 0.0005 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 1024.0, 9.0, 256.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 120.0, 2, 3 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0022, -0.001, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -2.1, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 100000, -0.9, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + }*/ //This is in BFG engine, old engine doesn't support glsl. Kept in for completness. +} + +models/enemies/base_legs +{ + clamp + flesh + forceOverlays + noSelfShadow +// toonGradientImage textures/toon_lut/toon_lut_01.tga In BFG engine, not sure if it's in old engine. + /*{ + blend bumpmap + map models/md5/enemies/union_patrolman/base_legs_local.tga + }*/ + { + blend diffusemap + map models/md5/enemies/union_patrolman/base_legs_d.tga + } + //specularmap models/md5/enemies/union_patrolman/base_legs_s.tga + { + blend add + map models/md5/enemies/union_patrolman/base_legs_d.tga + rgb 0.01 + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00075, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0012, 0.0005 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 1024.0, 9.0, 256.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 120.0, 2, 3 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0022, -0.001, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -2.1, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 100000, -0.9, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + }*/ //This is in BFG engine, old engine doesn't support glsl. Kept in for completness. +} + +models/enemies/base_boots_kneepads +{ + clamp + flesh + forceOverlays + noSelfShadow +// toonGradientImage textures/toon_lut/toon_lut_01.tga in BFG engine. + /*{ + blend bumpmap + map models/md5/enemies/union_patrolman/base_boots_kneepads_local.tga + }*/ + { + blend diffusemap + map models/md5/enemies/union_patrolman/base_boots_kneepads_d.tga + } + //specularmap models/md5/enemies/union_patrolman/base_boots_kneepads_s.tga + { + blend add + map models/md5/enemies/union_patrolman/base_boots_kneepads_d.tga + rgb 0.01 + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00075, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0012, 0.0005 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 1024.0, 9.0, 256.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 120.0, 2, 3 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0022, -0.001, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -2.1, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 100000, -0.9, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + }*/ //In Bfg, etc. As above. +} + + +models/enemies/base_eyebrows +{ + clamp + flesh + twoSided + forceOverlays + noshadows + polygonOffset 0.2 +// toonGradientImage textures/toon_lut/toon_lut_01.tga in BFG engine + + { + blend diffusemap + map models/md5/enemies/union_patrolman/base_eyebrows_d.tga + alphaTest 0.5 + } +} + +models/enemies/base_eyeR +{ + translucent + noshadows + //deform eyeBall + sort decal + flesh + polygonOffset 2 + { + blend filter + //blend diffusemap + map models/md5/enemies/union_patrolman/base_eye_d.tga + //centerScale 0.4, 0.4 + } +} + +models/enemies/base_eyeL +{ + translucent + noshadows + //deform eyeBall + sort decal + flesh + polygonOffset 2 + { + blend filter + //blend diffusemap + map models/md5/enemies/union_patrolman/base_eye_d.tga + //centerScale 0.4, 0.4 + } +} + +// ----------------------- Doom 3 style eyes BEGINS -------------------------------- +models/enemies/base_eyeR_d3 +{ + translucent + noshadows + deform eyeBall + sort decal + flesh + //polygonOffset 2 + clamp + { + blend filter + map models/md5/enemies/union_patrolman/base_eye_d.tga + centerScale 0.85, 0.85 + } +} + +models/enemies/base_eyeL_d3 +{ + translucent + noshadows + deform eyeBall + sort decal + flesh + //polygonOffset 2 + clamp + { + blend filter + map models/md5/enemies/union_patrolman/base_eye_d.tga + centerScale 0.85, 0.85 + } +} +// ----------------------- Doom 3 style eyes ENDS -------------------------------- \ No newline at end of file diff --git a/base/materials/example_distanceFade.mtr b/base/materials/example_distanceFade.mtr new file mode 100644 index 00000000..82961aac --- /dev/null +++ b/base/materials/example_distanceFade.mtr @@ -0,0 +1,24 @@ +// +// fading mesh / particles with this material as player approaches it +// +textures/distanceFade { + noshadows + noimpact + translucent + + { + vertexProgram zFadeSimple.vfp + + vertexParm 0 0.00390625, -0.5, 0, 0 // zScale, zBias ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 1 1, 1, 1, 1 // RGBA multiplier + + fragmentProgram zFadeSimple.vfp + + maskColor + } + { + blend gl_dst_alpha, gl_one_minus_dst_alpha + map _black + maskAlpha + } +} \ No newline at end of file diff --git a/base/materials/example_foggedTransparent.mtr b/base/materials/example_foggedTransparent.mtr new file mode 100644 index 00000000..df190bcf --- /dev/null +++ b/base/materials/example_foggedTransparent.mtr @@ -0,0 +1,131 @@ +textures/foggedBlend +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend blend + + vertexProgram foggedBlend.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + + fragmentProgram foggedBlend.vfp + fragmentMap 0 textures/particles/smokepuffb.tga // source texture ( preferably with alpha-channel ) + } +} + +textures/foggedAdd +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend add + + vertexProgram foggedAdd.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + + fragmentProgram foggedAdd.vfp + fragmentMap 0 textures/particles/smokepuffb.tga // source texture + } +} + +textures/foggedMul +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend filter + + vertexProgram foggedMul.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + + fragmentProgram foggedMul.vfp + fragmentMap 0 invertColor( textures/particles/barrelpoof.tga ) // source texture + } +} + +textures/foggedBlendSoft +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend blend + + vertexProgram foggedBlendSoft.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 2 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram foggedBlendSoft.vfp + fragmentMap 0 textures/particles/smokepuffb.tga // source texture ( preferably with alpha-channel ) + fragmentMap 1 _currentDepth // depth image + } +} + +textures/foggedAddSoft +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend add + + vertexProgram foggedAddSoft.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 2 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram foggedAddSoft.vfp + fragmentMap 0 textures/particles/smokepuffb.tga // source texture + fragmentMap 1 _currentDepth // depth image + } +} + +textures/foggedMulSoft +{ + noSelfShadow + noshadows + translucent + nonsolid + noimpact + sort 110 + + { + blend filter + + vertexProgram foggedMulSoft.vfp + vertexParm 0 .39, .39, .39, 1 // fog color + vertexParm 1 0.001, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 2 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram foggedMulSoft.vfp + fragmentMap 0 invertColor( textures/particles/barrelpoof.tga ) // source texture + fragmentMap 1 _currentDepth // depth image + } +} \ No newline at end of file diff --git a/base/materials/example_fresnel.mtr b/base/materials/example_fresnel.mtr new file mode 100644 index 00000000..ade65413 --- /dev/null +++ b/base/materials/example_fresnel.mtr @@ -0,0 +1,16 @@ +textures/fresnelTest { + noshadows + noimpact + translucent + + { + blend add + + vertexProgram simpleFresnel.vfp + + vertexParm 0 4, 0.9, 0.1, 0 // fresnel power, scale, bias + vertexParm 1 1, 0, 1, 1 // RGBA + + fragmentProgram simpleFresnel.vfp + } +} \ No newline at end of file diff --git a/base/materials/fogs.mtr b/base/materials/fogs.mtr new file mode 100644 index 00000000..b5c32642 --- /dev/null +++ b/base/materials/fogs.mtr @@ -0,0 +1,25 @@ +fogs/defaultFog +{ + fogLight + noShadows + lightFalloffImage lights/fog_simple_falloff.tga + { + map lights/fog_simple_falloff.tga + //map _fog // internal fog image + colored // use entity's color assigned in the editor or via shaderparms + zeroClamp + } +} + +fogs/defaultFancyFog +{ + fogLight + noShadows + lightFalloffImage lights/fog_fancy_falloff.tga + { + map lights/fog_fancy.tga + //map _fog // internal fog image + colored // use entity's color assigned in the editor or via shaderparms + zeroClamp + } +} \ No newline at end of file diff --git a/base/materials/gadgets.mtr b/base/materials/gadgets.mtr new file mode 100644 index 00000000..d1cd1346 --- /dev/null +++ b/base/materials/gadgets.mtr @@ -0,0 +1,399 @@ +table distortCompassAlpha { { 1, 1, 1, 1, 0.95, } } +table simpleNoise { { +0.456193348, 0.48338368, 0.413897276, 0.274924468, 0.27190332, 0.04531722, 0.395770388, +0.039274924, 0.607250748, 0.28700906, 0.290030208, 0.160120844, 0.586102712, 0.703927484, +0.021148036, 0.6797583, 0.42296072, 0.108761328, 0.311178244, 0.09063444, 0.208459212, +0.429003016, 0.024169184, 0.299093652, 0.111782476, 0.72507552, 0.063444108, 0.03021148, +0.069486404, 0.57401812, 0.018126888, 0.447129904, 0.746223556, 0.36253776, 0.706948632, +0.2265861, 0.003021148, 0.078549848, 0.595166156, 0.187311176, 0.283987912, 0.761329296, +0.661631412, 0.613293044, 0.353474316, 0.10574018, 0.033232628, 0.096676736, 0.172205436, +0.534743196, 0.099697884, 0.265861024, 0.716012076, 0.450151052, 0.169184288, 0.262839876, +0.525679752, 0.06042296, 0.3776435, 0.410876128, 0.516616308, 0.507552864, 0.205438064, +0.5287009, 0.223564952, 0.49848942, 0.214501508, 0.404833832, 0.419939572, 0.145015104, +0.081570996, 0.501510568, 0.232628396, 0.441087608, 0.477341384, 0.697885188, 0.250755284, +0.335347428, 0.691842892, 0.368580056, 0.18126888, 0.637462228, 0.401812684, 0.69486404, +0.66465256, 0.31722054, 0.277945616, 0.123867068, 0.16616314, 0.138972808, 0.74018126, +0.12084592, 0.737160112, 0.308157096, 0.432024164, 0.163141992, 0.19637462, 0.0755287, +0.190332324, 0.486404828, 0.003021148, 0.652567968, 0.24169184, 0.220543804, 0.631419932, +0.229607248, 0.398791536, 0.564954676, 0.628398784, 0.268882172, 0.054380664, 0.510574012, +0.6042296, 0.592145008, 0.40785498, 0.39274924, 0.350453168, 0.567975824, 0.480362532, +0.259818728, 0.495468272, 0.3021148, 0.329305132, 0.598187304, 0.522658604, 0.561933528, +0.009063444, 0.193353472, 0.157099696, 0.655589116, 0.682779448, 0.755287, 0.374622352, +0.371601204, 0.01510574, 0.610271896, 0.114803624, 0.444108756, 0.356495464, 0.380664648, +0.77039274, 0.247734136, 0.25679758, 0.640483376, 0.625377636, 0.622356488, 0.178247732, +0.685800596, 0.141993956, 0.048338368, 0.175226584, 0.051359516, 0.549848936, 0.570996972, +0.084592144, 0.126888216, 0.673716004, 0.552870084, 0.51359516, 0.643504524, 0.359516612, +0.749244704, 0.459214496, 0.006042296, 0.132930512, 0.465256792, 0.492447124, 0.21148036, +0.667673708, 0.462235644, 0.305135948, 0.46827794, 0.504531716, 0.129909364, 0.519637456, +0.027190332, 0.389728092, 0.066465256, 0.117824772, 0.764350444, 0.057401812, 0.296072504, +0.326283984, 0.33232628, 0.238670692, 0.341389724, 0.676737152, 0.700906336, 0.537764344, +0.55891238, 0.338368576, 0.314199392, 0.658610264, 0.743202408, 0.293051356, 0.688821744, +0.758308148, 0.102719032, 0.731117816, 0.583081564, 0.719033224, 0.63444108, 0.435045312, +0.036253776, 0.577039268, 0.540785492, 0.489425976, 0.728096668, 0.244712988, 0.154078548, +0.43806646, 0.70996978, 0.752265852, 0.042296072, 0.722054372, 0.323262836, 0.148036252, +0.580060416, 0.646525672, 0.093655588, 0.546827788, 0.601208452, 0.320241688, 0.474320236, +0.555891232, 0.253776432, 0.616314192, 0.531722048, 0.34743202, 0.365558908, 0.1510574, +0.13595166, 0.383685796, 0.012084592, 0.4531722, 0.767371592, 0.416918424, 0.712990928, +0.61933534, 0.280966764, 0.670694856, 0.344410872, 0.202416916, 0.087613292, 0.072507552, +0.217522656, 0.734138964, 0.425981868, 0.386706944, 0.58912386, 0.235649544, 0.199395768, +0.64954682, 0.184290028, 0.471299088, 0.54380664 } } + +//------------------------------------------------------------------------- +// +// VIEW GADGETS +// +//------------------------------------------------------------------------- + +// ============ Compass ============ + +models/gadgets/compass +{ + //noShadows + noSelfShadow + unsmoothedTangents + { + blend diffusemap + map models/md5/gadgets/view_compass/compass.tga + } + { + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0025, -0.01, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -0.0001, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 10000, -0.005, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + } +} + +models/gadgets/compass_lens +{ + noShadows + unsmoothedTangents + { + blend diffusemap + map models/md5/gadgets/view_compass/compass_lens_d.tga + } + { + blend specularmap + map models/md5/gadgets/view_compass/compass_lens_s.tga + } + { + blend add + map models/md5/gadgets/view_compass/compass_lens_anim.tga + scroll 1, time * -70 + } + { + blend add + map models/md5/gadgets/view_compass/compass_lens_anim.tga + translate 1, 7 + scroll 1, time * 7 + } + { + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0025, -0.01, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -0.0001, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 100000, -0.005, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + } +} + +models/gadgets/compass_screen_arrow +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + noBlur + //uncompressed + linear + blend blend + map models/md5/gadgets/view_compass/compass_screen_arrow.tga + } + { + noBlur + //uncompressed + linear + blend add + map models/md5/gadgets/view_compass/compass_screen_arrow.tga + rgb 0.025 + } +} + +models/gadgets/compass_screen_nswe +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + noBlur + //uncompressed + linear + blend blend + map models/md5/gadgets/view_compass/compass_screen_nswe.tga + + } + { + noBlur + //uncompressed + linear + blend add + map models/md5/gadgets/view_compass/compass_screen_nswe.tga + rgb 0.01 + } +} + +models/gadgets/compass_disk_debug1 +{ + noShadows + noimpact + translucent + noOverlays + clamp + //sort nearest + { + noBlur + //blend add + blend blend + map models/md5/gadgets/view_compass/compass_pquest1_debug.tga + + } + { + noBlur + blend add + map models/md5/gadgets/view_compass/compass_pquest1_debug.tga + rgb 0.01 + } +} + +models/gadgets/axis_debug +{ + noShadows + noimpact + //translucent + noOverlays + clamp + //sort nearest + { + noBlur + blend diffusemap + map models/md5/gadgets/view_compass/axis_debug.tga + + } + { + noBlur + blend add + map models/md5/gadgets/view_compass/axis_debug.tga + rgb 0.05 + } +} + +//--------------- Primary Quests dots ---------------------------------- +models/gadgets/compass_dot_pquest1 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + if ( parm9 == 121 ) + uncompressed + //linear + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_dot_pquest1.tga + } + { + if ( parm9 == 121 ) + uncompressed + //linear + noBlur + blend add + map models/md5/gadgets/view_compass/compass_dot_pquest1.tga + rgb 0.25 + } +} + +models/gadgets/compass_dot_pquest2 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + if ( parm10 == 121 ) + uncompressed + //linear + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_dot_pquest2.tga + } + { + if ( parm10 == 121 ) + uncompressed + //linear + noBlur + blend add + map models/md5/gadgets/view_compass/compass_dot_pquest2.tga + rgb 0.25 + } +} + +models/gadgets/compass_dot_pquest3 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + if ( parm11 == 121 ) + uncompressed + //linear + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_dot_pquest3.tga + } + { + if ( parm11 == 121 ) + uncompressed + //linear + noBlur + blend add + map models/md5/gadgets/view_compass/compass_dot_pquest3.tga + rgb 0.25 + } +} +//--------------------------------------------------------------------------- + +models/gadgets/compass_screen_pquest1 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_screen_pquest1.tga + } + { + noBlur + blend add + map models/md5/gadgets/view_compass/compass_screen_pquest1.tga + rgb 0.85 + } +} + +models/gadgets/compass_screen_pquest2 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_screen_pquest2.tga + } + { + noBlur + blend add + map models/md5/gadgets/view_compass/compass_screen_pquest2.tga + rgb 0.85 + } +} + +models/gadgets/compass_screen_pquest3 +{ + noShadows + noimpact + translucent + noOverlays + clamp + sort nearest + { + noBlur + blend blend + map models/md5/gadgets/view_compass/compass_screen_pquest3.tga + } + { + noBlur + blend add + map models/md5/gadgets/view_compass/compass_screen_pquest3.tga + rgb 0.85 + } +} + +//----------------------------- Compass Pick-up model disks materials-------------------------------------- + +models/gadgets/compass_screen_arrow_pickup +{ + noShadows + noimpact + translucent + noOverlays + clamp + //deform turbulent simpleNoise 0.07 (time * 0.2) 0.5 + deform turbulent simpleNoise 0.1 * simpleNoise[ time * 0.07 ] simpleNoise[ time * 0.2 ] simpleNoise [ time * 0.5 ] + { + blend blend + map models/md5/gadgets/view_compass/compass_screen_arrow.tga + alpha 2 * simpleNoise[ time * 0.05 ] + } + { + blend add + map models/md5/gadgets/view_compass/compass_screen_arrow.tga + rgb 0.015 + alpha 2 * simpleNoise[ time * 0.07 ] + } +} + +models/gadgets/compass_screen_nswe_pickup +{ + noShadows + noimpact + translucent + noOverlays + clamp + { + blend blend + map models/md5/gadgets/view_compass/compass_screen_nswe.tga + alpha simpleNoise[ time * 0.01 ] + rotate 2 * sinTable[ time * 0.04 ] + + } + { + blend add + map models/md5/gadgets/view_compass/compass_screen_nswe.tga + rgb 0.01 + alpha simpleNoise[ time * 0.01 ] + rotate 2 * sinTable[ time * 0.04 ] + } +} +//------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/base/materials/gfx.mtr b/base/materials/gfx.mtr new file mode 100644 index 00000000..86ddc241 --- /dev/null +++ b/base/materials/gfx.mtr @@ -0,0 +1,28 @@ +textures/bigchars +{ + { + blend blend + maskDepth + colored + nopicmip + linear + map textures/conchars.tga + } +} + +console +{ + { + map textures/colors/black.tga + linear // no mip maps + } +} + +splashScreen +{ + { + forceHighQuality + blend blend + map guis/assets/splash/init.tga + } +} diff --git a/base/materials/glass.mtr b/base/materials/glass.mtr new file mode 100644 index 00000000..e0f70499 --- /dev/null +++ b/base/materials/glass.mtr @@ -0,0 +1,69 @@ +textures/glass/device_glass +{ + noSelfShadow + noshadows + twosided + translucent + glass + forceoverlays + sort decal + + qer_editorimage textures/glass/device_glass_d + { + blend blend + map textures/glass/device_glass.tga + alpha 0.5 + } + + { + blend blend + map textures/glass/device_glass_d + alpha 0.65 + } +} + +textures/glass/reflective_glass +{ + noSelfShadow + noshadows + twosided + translucent + glass + forceoverlays + sort decal + + qer_editorimage textures/glass/device_glass_d + + { + blend bumpmap // this stage is needed to workaround issue of not having cubeMap reflections without diffusemap stage + map _flat + } + { + vertexProgram heatHaze.vfp + vertexParm 0 0 , 0 // texture scrolling + vertexParm 1 .5 // magnitude of the distortion + + fragmentProgram heatHaze.vfp + fragmentMap 0 _currentRender + fragmentMap 1 normalMap textures/sfx/heathaze_local.tga // the normal map for distortion + } + { + maskcolor + map makealpha( textures/glass/device_glass.tga ) + alpha 0.3 // tweak alpha to tune reflection strength + } + { + blend gl_dst_alpha, gl_one + maskalpha + cubeMap env/test // envshot cmd has to be issues when in 640x480 resolution (r_mode 3) and g_fov 90 to avoid artifacts + red Parm0 + green Parm1 + blue Parm2 + texgen reflect + } + { + blend blend + map textures/glass/device_glass_d + alpha 0.5 + } +} \ No newline at end of file diff --git a/base/materials/items.mtr b/base/materials/items.mtr new file mode 100644 index 00000000..9890616e --- /dev/null +++ b/base/materials/items.mtr @@ -0,0 +1,119 @@ +//------------------------------------------------------------------------- +// +// PDA gadget pick-ups +// +//------------------------------------------------------------------------- + +// ======================== PDA Audio log pick-up radio ======================== + +table lcdFlicker { { 0.5, 0.5, 0.5, 0.5, 0.44, 0.47, 0.45, 0.45, 0.5, 0.5, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 } } +table lcdFlicker2 { { 0.6, 0.6, 0.6, 0.6, 0.54, 0.57, 0.55, 0.55, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 } } +table lcdFlicker3 { { 0.3, 0.3, 0.3, 0.3, 0.24, 0.27, 0.25, 0.25, 0.3, 0.3, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2 } } + +models/items/pda_pickups/pda_audio1 +{ + qer_editorimage models/items/pda_pickups/pda_audio1_d.tga + + diffusemap models/items/pda_pickups/pda_audio1_d.tga + //specularmap models/items/pda_pickups/pda_audio1_s.tga + bumpmap models/items/pda_pickups/pda_audio1_local.tga + { + blend add + map models/items/pda_pickups/pda_audio1_d.tga + rgb 0.02 + } + { + blend filter + + vertexProgram inkEffect.vfp + + vertexParm 0 0.75, 0.0025, -0.01, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -0.35, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 10000, -0.005, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffect_skinned.glsl + vertexParm 0 0.75, 0.0025, -0.01, 0 // inkAmount, nearFarScale, nearFarBias + vertexParm 1 1.5, 5000, -0.35, 0 // inkSize, inkScale, inkBias (near) + vertexParm 2 1.2, 10000, -0.005, 0 // inkSize, inkScale, inkBias (far) + + fragmentProgram inkEffect_skinned.glsl + fragmentMap 0 _currentDepth + + maskDepth + }*/ +} + +models/items/pda_pickups/pda_audio1_top_screen +{ + qer_editorimage models/items/pda_pickups/pda_audio1_top_screen_d.tga + translucent + { + blend blend + map models/items/pda_pickups/pda_audio1_top_screen_d.tga + alpha lcdFlicker[ time * 0.5 ] + } + { + blend add + map models/items/pda_pickups/pda_audio1_top_screen_d.tga + rgb 0.01 + } +} + +models/items/pda_pickups/pda_audio1_middle_screen +{ + qer_editorimage models/items/pda_pickups/pda_audio1_middle_screen_d.tga + translucent + { + blend blend + map models/items/pda_pickups/pda_audio1_middle_screen_d.tga + alpha lcdFlicker2[ time * 0.7 ] + } + { + blend add + map models/items/pda_pickups/pda_audio1_middle_screen_d.tga + rgb 0.05 + } +} + +models/items/pda_pickups/pda_audio1_bottom_screen +{ + qer_editorimage models/items/pda_pickups/pda_audio1_bottom_screen_d.tga + translucent + { + blend blend + map models/items/pda_pickups/pda_audio1_bottom_screen_d.tga + alpha lcdFlicker3[ time ] + } + { + blend add + map models/items/pda_pickups/pda_audio1_bottom_screen_d.tga + rgb 0.03 + } +} + +// --------------- Placeholders for health --------------------------------- +textures/items/health/health01 + { + qer_editorimage models/items/health/health01.tga + diffusemap models/items/health/health01.tga + } + +textures/items/health/armor01 + { + qer_editorimage models/items/armor/armor01.tga + diffusemap models/items/armor/armor01.tga + } + +textures/items/invigorator/invigorator + { + qer_editorimage models/items/invigorator/invigorator.tga + diffusemap models/items/invigorator/invigorator.tga + } \ No newline at end of file diff --git a/base/materials/lights.mtr b/base/materials/lights.mtr new file mode 100644 index 00000000..8caee6db --- /dev/null +++ b/base/materials/lights.mtr @@ -0,0 +1,182 @@ + + +// ######## tables + +// sinTable and cosTable must be defined for the rotate function to work +table sinTable { { +0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411, 0.146730, 0.170962, +0.195090, 0.219101, 0.242980, 0.266713, 0.290285, 0.313682, 0.336890, 0.359895, +0.382683, 0.405241, 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998, +0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173, 0.671559, 0.689541, +0.707107, 0.724247, 0.740951, 0.757209, 0.773010, 0.788346, 0.803208, 0.817585, +0.831470, 0.844854, 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210, +0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776, 0.970031, 0.975702, +0.980785, 0.985278, 0.989177, 0.992480, 0.995185, 0.997290, 0.998795, 0.999699, +1.000000, 0.999699, 0.998795, 0.997290, 0.995185, 0.992480, 0.989177, 0.985278, +0.980785, 0.975702, 0.970031, 0.963776, 0.956940, 0.949528, 0.941544, 0.932993, +0.923880, 0.914210, 0.903989, 0.893224, 0.881921, 0.870087, 0.857729, 0.844854, +0.831470, 0.817585, 0.803208, 0.788346, 0.773010, 0.757209, 0.740951, 0.724247, +0.707107, 0.689541, 0.671559, 0.653173, 0.634393, 0.615232, 0.595699, 0.575808, +0.555570, 0.534998, 0.514103, 0.492898, 0.471397, 0.449611, 0.427555, 0.405241, +0.382683, 0.359895, 0.336890, 0.313682, 0.290285, 0.266713, 0.242980, 0.219101, +0.195090, 0.170962, 0.146730, 0.122411, 0.098017, 0.073565, 0.049068, 0.024541, +0.000000, -0.024541, -0.049068, -0.073565, -0.098017, -0.122411, -0.146730, -0.170962, +-0.195090, -0.219101, -0.242980, -0.266713, -0.290285, -0.313682, -0.336890, -0.359895, +-0.382683, -0.405241, -0.427555, -0.449611, -0.471397, -0.492898, -0.514103, -0.534998, +-0.555570, -0.575808, -0.595699, -0.615232, -0.634393, -0.653173, -0.671559, -0.689541, +-0.707107, -0.724247, -0.740951, -0.757209, -0.773010, -0.788346, -0.803208, -0.817585, +-0.831470, -0.844854, -0.857729, -0.870087, -0.881921, -0.893224, -0.903989, -0.914210, +-0.923880, -0.932993, -0.941544, -0.949528, -0.956940, -0.963776, -0.970031, -0.975702, +-0.980785, -0.985278, -0.989177, -0.992480, -0.995185, -0.997290, -0.998795, -0.999699, +-1.000000, -0.999699, -0.998795, -0.997290, -0.995185, -0.992480, -0.989177, -0.985278, +-0.980785, -0.975702, -0.970031, -0.963776, -0.956940, -0.949528, -0.941544, -0.932993, +-0.923880, -0.914210, -0.903989, -0.893224, -0.881921, -0.870087, -0.857729, -0.844854, +-0.831470, -0.817585, -0.803208, -0.788346, -0.773010, -0.757209, -0.740951, -0.724247, +-0.707107, -0.689541, -0.671559, -0.653173, -0.634393, -0.615232, -0.595699, -0.575808, +-0.555570, -0.534998, -0.514103, -0.492898, -0.471397, -0.449611, -0.427555, -0.405241, +-0.382683, -0.359895, -0.336890, -0.313682, -0.290285, -0.266713, -0.242980, -0.219101, +-0.195090, -0.170962, -0.146730, -0.122411, -0.098017, -0.073565, -0.049068, -0.024541 } } + +table cosTable { { +1.000000, 0.999699, 0.998795, 0.997290, 0.995185, 0.992480, 0.989177, 0.985278, +0.980785, 0.975702, 0.970031, 0.963776, 0.956940, 0.949528, 0.941544, 0.932993, +0.923880, 0.914210, 0.903989, 0.893224, 0.881921, 0.870087, 0.857729, 0.844854, +0.831470, 0.817585, 0.803208, 0.788346, 0.773010, 0.757209, 0.740951, 0.724247, +0.707107, 0.689541, 0.671559, 0.653173, 0.634393, 0.615232, 0.595699, 0.575808, +0.555570, 0.534998, 0.514103, 0.492898, 0.471397, 0.449611, 0.427555, 0.405241, +0.382683, 0.359895, 0.336890, 0.313682, 0.290285, 0.266713, 0.242980, 0.219101, +0.195090, 0.170962, 0.146730, 0.122411, 0.098017, 0.073565, 0.049068, 0.024541, +0.000000, -0.024541, -0.049068, -0.073565, -0.098017, -0.122411, -0.146730, -0.170962, +-0.195090, -0.219101, -0.242980, -0.266713, -0.290285, -0.313682, -0.336890, -0.359895, +-0.382683, -0.405241, -0.427555, -0.449611, -0.471397, -0.492898, -0.514103, -0.534998, +-0.555570, -0.575808, -0.595699, -0.615232, -0.634393, -0.653173, -0.671559, -0.689541, +-0.707107, -0.724247, -0.740951, -0.757209, -0.773010, -0.788346, -0.803208, -0.817585, +-0.831470, -0.844854, -0.857729, -0.870087, -0.881921, -0.893224, -0.903989, -0.914210, +-0.923880, -0.932993, -0.941544, -0.949528, -0.956940, -0.963776, -0.970031, -0.975702, +-0.980785, -0.985278, -0.989177, -0.992480, -0.995185, -0.997290, -0.998795, -0.999699, +-1.000000, -0.999699, -0.998795, -0.997290, -0.995185, -0.992480, -0.989177, -0.985278, +-0.980785, -0.975702, -0.970031, -0.963776, -0.956940, -0.949528, -0.941544, -0.932993, +-0.923880, -0.914210, -0.903989, -0.893224, -0.881921, -0.870087, -0.857729, -0.844854, +-0.831470, -0.817585, -0.803208, -0.788346, -0.773010, -0.757209, -0.740951, -0.724247, +-0.707107, -0.689541, -0.671559, -0.653173, -0.634393, -0.615232, -0.595699, -0.575808, +-0.555570, -0.534998, -0.514103, -0.492898, -0.471397, -0.449611, -0.427555, -0.405241, +-0.382683, -0.359895, -0.336890, -0.313682, -0.290285, -0.266713, -0.242980, -0.219101, +-0.195090, -0.170962, -0.146730, -0.122411, -0.098017, -0.073565, -0.049068, -0.024541, +0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411, 0.146730, 0.170962, +0.195090, 0.219101, 0.242980, 0.266713, 0.290285, 0.313682, 0.336890, 0.359895, +0.382683, 0.405241, 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998, +0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173, 0.671559, 0.689541, +0.707107, 0.724247, 0.740951, 0.757209, 0.773010, 0.788346, 0.803208, 0.817585, +0.831470, 0.844854, 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210, +0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776, 0.970031, 0.975702, +0.980785, 0.985278, 0.989177, 0.992480, 0.995185, 0.997290, 0.998795, 0.999699 } } + +table convexFade { { +0.0000000, 0.0249307, 0.0498458, 0.0747300, 0.0995678, 0.1243436, 0.1490421, 0.1736480, +0.1981460, 0.2225208, 0.2467572, 0.2708403, 0.2947549, 0.3184864, 0.3420199, 0.3653407, +0.3884345, 0.4112868, 0.4338834, 0.4562103, 0.4782536, 0.4999996, 0.5214348, 0.5425459, +0.5633196, 0.5837433, 0.6038040, 0.6234894, 0.6427872, 0.6616854, 0.6801723, 0.6982363, +0.7158664, 0.7330514, 0.7497807, 0.7660440, 0.7818310, 0.7971320, 0.8119375, 0.8262383, +0.8400255, 0.8532904, 0.8660250, 0.8782212, 0.8898714, 0.9009684, 0.9115055, 0.9214758, +0.9308734, 0.9396923, 0.9479270, 0.9555725, 0.9626240, 0.9690770, 0.9749277, 0.9801723, +0.9848076, 0.9888306, 0.9922391, 0.9950306, 0.9972037, 0.9987569, 0.9996892, 1.0000000 } } + +table concaveFade { { +0.0000000, 0.0003108, 0.0012431, 0.0027962, 0.0049692, 0.0077608, 0.0111692, 0.0151922, +0.0198275, 0.0250720, 0.0309227, 0.0373757, 0.0444271, 0.0520726, 0.0603073, 0.0691261, +0.0785237, 0.0884940, 0.0990310, 0.1101280, 0.1217782, 0.1339744, 0.1467089, 0.1599738, +0.1737609, 0.1880617, 0.2028672, 0.2181682, 0.2339552, 0.2502184, 0.2669477, 0.2841327, +0.3017627, 0.3198268, 0.3383136, 0.3572118, 0.3765096, 0.3961950, 0.4162557, 0.4366793, +0.4574530, 0.4785641, 0.4999992, 0.5217452, 0.5437885, 0.5661154, 0.5887120, 0.6115643, +0.6346580, 0.6579789, 0.6815124, 0.7052438, 0.7291585, 0.7532415, 0.7774780, 0.8018527, +0.8263507, 0.8509566, 0.8756551, 0.9004309, 0.9252687, 0.9501528, 0.9750680, 1.0000000 } } + + +table plasmatable { { .9, 1, 1.6, .8, 2, 1, 1.5, 1.7, .8, 1, 1.2, .9, .9, .8, 1.3, .8, .9, .8, 1.6, .7, 1.7, .9, 1.1, .9, .8, .9, 1 } } + +table flicker1 { { 0, .3, .1, .5, .3, .8, .9, .5, .2, .1, .7, .4, 1, .2, .5, 0, .2, .7, .5 } } + +table jet_flicker1 { { 1, .9, .95, .87, 1, .92, .85, .9, .97, .83, .80, .89, 1, 0.95, 1, 0.91, .97, .89, .90 } } + +lights/defaultPointLight +{ + lightFalloffImage makeintensity( lights/square_light_simple_falloff.tga ) + { + forceHighQuality + map lights/square_light_simple.tga + colored + zeroClamp + } +} + +lights/defaultProjectedLight +{ + lightFalloffImage _noFalloff + { + forceHighQuality + map lights/square_light_simple.tga + colored + zeroClamp + } +} + +lights/ambientLight2 +{ + ambientLight + //lightFalloffImage makeintensity( lights/square_light_simple_falloff2.tga ) + lightFalloffImage makeintensity( lights/square_light_simple.tga ) + //lightFalloffImage makeintensity( lights/poop_falloff.tga ) + { + forceHighQuality + map lights/square_light_simple.tga + colored + zeroClamp + } +} + +lights/terrain_clouds_shadows +{ + { + blend filter + forceHighQuality + //map invertColor(textures/skies/clouds_gray1_add.tga) + map textures/skies/clouds_ground_gray1_filter.tga + colored + scale 10.25, 10.25 + translate time * -0.007, time * 0.001 + //rgb 0.7 + } +} + +lights/plasma_fly +{ + { + map lights/round_light2_simple_falloff.tga + zeroClamp + rotate time * 3.7 + rgb flicker1[ time * 1 ] + colored + } +} + +lights/jetStream +{ + { + map lights/round_light2_simple_falloff.tga + zeroClamp + rgb jet_flicker1[ time * 1 ] + colored + } +} + +lights/pdaPickupRadio +{ + { + map lights/round_light2_simple_falloff.tga + zeroClamp + red 0.25 * lcdFlicker3[ time ] + green 0.25 * lcdFlicker3[ time ] + blue 0.23 * lcdFlicker3[ time ] + //colored + } +} \ No newline at end of file diff --git a/base/materials/lod.mtr b/base/materials/lod.mtr new file mode 100644 index 00000000..d9123ed8 --- /dev/null +++ b/base/materials/lod.mtr @@ -0,0 +1,66 @@ +// =========================================================================== +// +// LOD system test materials +// +// =========================================================================== + +models/lod_thing/lod1 +{ + qer_editorimage models/mapobjects_static/lod_thing/lod1.tga + noShadows + lod1 + bumpmap _flat + { + blend diffusemap + map models/mapobjects_static/lod_thing/lod1.tga + } +} + +models/lod_thing/lod2 +{ + qer_editorimage models/mapobjects_static/lod_thing/lod2.tga + noShadows + lod2 + bumpmap _flat + { + blend diffusemap + map models/mapobjects_static/lod_thing/lod2.tga + } +} + +models/lod_thing/lod3 +{ + qer_editorimage models/mapobjects_static/lod_thing/lod3.tga + noShadows + lod3 + bumpmap _flat + { + blend diffusemap + map models/mapobjects_static/lod_thing/lod3.tga + } +} + +models/lod_thing/lod4 +{ + qer_editorimage models/mapobjects_static/lod_thing/lod4.tga + noShadows + lod4 + bumpmap _flat + { + blend diffusemap + map models/mapobjects_static/lod_thing/lod4.tga + } +} + +models/lod_thing/lod4_persistent +{ + qer_editorimage models/mapobjects_static/lod_thing/lod4.tga + noShadows + lod4 + persistentLOD + bumpmap _flat + { + blend diffusemap + map models/mapobjects_static/lod_thing/lod4.tga + } +} \ No newline at end of file diff --git a/base/materials/map_models.mtr b/base/materials/map_models.mtr new file mode 100644 index 00000000..965d9380 --- /dev/null +++ b/base/materials/map_models.mtr @@ -0,0 +1,425 @@ +// -------------------------------------------------------------------------------- +// S T A T I C M A P M O D E L S +// -------------------------------------------------------------------------------- + +models\static_vehicles\starship_parked +{ + metal + unsmoothedTangents + { + blend diffusemap + map textures/grid1024.tga + } + /*{ + blend filter + + vertexProgram inkEffectLinear.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00085, 0.0001, 1024.0, 5000.0 + + // line strength, line "blackness", edge-bias, far-edge-bias multiplier + vertexParm 1 700, 0.75, -6.25, 11.0 + + // far-edge-bias start, far-edge-bias range, far-ink-strength multiplier, far-ink-strength start + vertexParm 2 512.0, 2048.0, 5.0, 512.0 + + // far-ink-strength range, near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 512.0, 1.5, 2 + + fragmentProgram inkEffectLinear.vfp + fragmentMap 0 _currentDepth + + maskDepth + }*/ + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.0015, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0007, 0.05 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 512.0, 1.5, 2.5 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +// --------------------------------------------------------------------------------------- +// PLANETS +// --------------------------------------------------------------------------------------- +models/planets/phaeton_clouds +{ + translucent + noShadows + noSelfShadow + discrete + nonsolid + noimpact + { + forceHighQuality + nopicmip + maskColor + map makealpha(models/planets/cloud_layer_mask.tga) + } + { + //blend gl_dst_color, gl_one + blend gl_dst_alpha, gl_one + maskAlpha + forceHighQuality + nopicmip + //blend blend + map models/planets/cloud_layer_deform_add.tga + translate time * 0.0025, 1 + } +} + +models/planets/ganymede_clouds +{ + translucent + noShadows + noSelfShadow + discrete + nonsolid + noimpact + { + forceHighQuality + nopicmip + maskColor + map makealpha(models/planets/cloud_layer_mask.tga) + } + { + //blend gl_dst_color, gl_one + blend gl_dst_alpha, gl_one + maskAlpha + forceHighQuality + nopicmip + //blend blend + map models/planets/cloud_layer_deform_add.tga + translate time * 0.015, 1 + } +} + +models/planets/phaeton_surface +{ + noShadows + noSelfShadow + nonsolid + noimpact + unsmoothedTangents + { + blend diffusemap + map models/planets/phaeton_surface_d.tga + vertexColor + } + { + blend bumpmap + map models/planets/phaeton_surface_local.tga + } + // atmospheric glow is experimental; seems to only apply to physical polygons and is affected by vertex color of the mesh + { + blend add + map models/planets/glow_mask2.tga + vertexColor + red 0.157 + green 0.694 + blue 1.0 + //glow + } +} + +models/planets/ganymede_surface +{ + noShadows + noSelfShadow + nonsolid + noimpact + unsmoothedTangents + { + blend diffusemap + map models/planets/ganymede_surface_d.tga + vertexColor + } + { + blend bumpmap + map models/planets/phaeton_surface_local.tga + } + // atmospheric glow is experimental; seems to only apply to physical polygons and is affected by vertex color of the mesh + { + blend add + map models/planets/glow_mask2.tga + vertexColor + red 0.157 + green 0.694 + blue 1.0 + //glow + } +} + +models/planets/moon_surface +{ + noShadows + noSelfShadow + nonsolid + noimpact + unsmoothedTangents + { + blend diffusemap + map models/planets/moon_surface_d.tga + vertexColor + } + // atmospheric glow is experimental; seems to only apply to physical polygons and is affected by vertex color of the mesh + { + blend add + map models/planets/glow_mask2.tga + vertexColor + red 0.157 + green 0.694 + blue 1.0 + //glow + } +} + +models/planets/phaeton_atmosphere +{ + noshadows + noimpact + translucent + { + forceHighQuality + nopicmip + maskColor + map makealpha(models/planets/fresnel_mask.tga) + } + + /*{ + blend gl_dst_alpha, gl_one + maskAlpha + forceHighQuality + nopicmip + + vertexProgram simpleFresnel.vfp + + vertexParm 0 2, 1.2, 0.0075, 0 // fresnel power, scale, bias + vertexParm 1 0.157, 0.694, 1, 0.5 // RGBA + + fragmentProgram simpleFresnel.vfp + }*/ + /*{ + blend add + + vertexProgram simpleFresnel.vfp + + vertexParm 0 3, 0.5, 0.0075, 0 // fresnel power, scale, bias + vertexParm 1 0.157, 0.694, 1, 0.5 // RGBA + + fragmentProgram simpleFresnel.vfp + }*/ +} + +models/planets/ganymede_atmosphere +{ + noshadows + noimpact + translucent + { + forceHighQuality + nopicmip + maskColor + map makealpha(models/planets/fresnel_mask.tga) + } + /*{ + blend gl_dst_alpha, gl_one + maskAlpha + forceHighQuality + nopicmip + + vertexProgram simpleFresnel.vfp + + vertexParm 0 2, 1.2, 0.0075, 0 // fresnel power, scale, bias + //vertexParm 1 0.157, 0.694, 1, 0.5 // RGBA + vertexParm 1 0.545, 0.698, 0.796, 0.5 // RGBA + + fragmentProgram simpleFresnel.vfp + } */ +} + +models/planets/planetary_debris +{ + noShadows + //noSelfShadow + nonsolid + noimpact + unsmoothedTangents + { + blend diffusemap + map models/planets/planetary_debris_d.tga + } + { + blend bumpmap + map models/planets/planetary_debris_local.tga + } +} + +// -------------------------------------------------------------------------------------------------- +// ARCHITECTURE +// -------------------------------------------------------------------------------------------------- +models/arch/ganymede_landing_pad +{ + unsmoothedTangents + stone + noShadows + { + blend diffusemap + map models/mapobjects_static/architecture/landing_pad_d3.tga + } + { + blend filter + + vertexProgram inkEffect.vfp + vertexParm 0 0.0012, 0.0003, 2048.0, 5000.0 // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 1 700, 0.75, -0.0002, 0.1 // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 3 512.0, 1, 2.5 // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +models/arch/ganymede_landing_pad_ramp +{ + unsmoothedTangents + metal + //noShadows + { + blend diffusemap + map models/mapobjects_static/architecture/landing_pad_ramp_d.tga + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.0015, 0.0005, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0007, 0.05 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 512.0, 1.5, 2.5 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +models/arch/ganymede_landing_pad_railing +{ + //unsmoothedTangents + metal + { + blend diffusemap + map models/mapobjects_static/architecture/landing_pad_railing_d.tga + } + /*{ + blend bumpmap + map models/mapobjects_static/architecture/landing_pad_railing_local.tga + }*/ + { + blend filter + + vertexProgram inkEffect.vfp + vertexParm 0 0.001, 0.0003, 2048.0, 5000.0 // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 1 700, 0.75, -0.0002, 0.1 // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 3 512.0, 1, 2.5 // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +// -------------------------------------------------------------------------- +// DOORS +// -------------------------------------------------------------------------- + +models/arch/personel_entry_door +{ + metal +// noShadows +// nonsolid +// forceshadows + collision +// unsmoothedTangents + qer_editorimage models/mapobjects_static/doors/personnel_entry_door1_d.tga + { + blend diffusemap + map models/mapobjects_static/doors/personnel_entry_door1_d.tga + } + specularmap models/mapobjects_static/doors/personnel_entry_door1_s.tga + bumpmap models/mapobjects_static/doors/personnel_entry_door1_local.tga + { + blend filter + + vertexProgram inkEffect.vfp + vertexParm 0 0.001, 0.0003, 2048.0, 5000.0 // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 1 700, 0.75, -0.0002, 0.1 // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 3 512.0, 1, 2.5 // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +// -------------------------------------------------------------------------- +// Devices with GUIs +// -------------------------------------------------------------------------- + +models/devices/touchscreen_device1_2screens +{ + metal + noShadows + unsmoothedTangents + qer_editorimage models/md5/mapobjects_animated/devices/touchscreen_device1_2screens_d.tga + { + blend diffusemap + map models/md5/mapobjects_animated/devices/touchscreen_device1_2screens_d.tga + } + { + blend filter + + vertexProgram inkEffect.vfp + vertexParm 0 0.001, 0.0003, 2048.0, 5000.0 // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 1 700, 0.75, -0.0002, 0.1 // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 3 512.0, 1, 2.5 // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} \ No newline at end of file diff --git a/base/materials/particles.mtr b/base/materials/particles.mtr new file mode 100644 index 00000000..d582b5b0 --- /dev/null +++ b/base/materials/particles.mtr @@ -0,0 +1,591 @@ +// ------------------------------------------------------------------------------ +// WEATHER +// ------------------------------------------------------------------------------ +textures/particles/snowflake1 +{ + qer_editorimage textures/particles/snowflake1a.tga + noShadows + translucent + nonsolid +// sort 110 +// { +// blend blend +// map textures/particles/snowflake1a.tga +// } + { + //blend add + blend blend + + //vertexProgram softParticleRGB.vfp + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + + //fragmentProgram softParticleRGB.vfp + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + //fragmentMap 1 forceHighQuality textures/particles/snowflake1b.tga // certain textures should be forced to high quality for the shader to work properly + fragmentMap 1 forceHighQuality textures/particles/snowflake1b_alpha.tga // certain textures should be forced to high quality for the shader to work properly + } + /*{ + blend blend + + vertexProgram foggedBlendSoft.vfp + vertexParm 0 0.39, 0.44, 0.48, 1 // fog color + vertexParm 1 0.000001219512, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 2 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram foggedBlendSoft.vfp + fragmentMap 0 forceHighQuality textures/particles/snowflake1b_alpha.tga // source texture ( preferably with alpha-channel ) + fragmentMap 1 _currentDepth // depth image + }*/ +} + +textures/particles/snowflakes_blowdust1 +{ + //qer_editorimage textures/particles/snowflakes_blowdust1a.tga + qer_editorimage textures/particles/snowflakes_blowdust1a_trans.tga + noShadows + translucent + nonsolid + //sort 110 + /*{ + blend add + map textures/particles/snowflakes_blowdust1.tga + } + { + blend blend + map textures/particles/snowflakes_blowdust1a_trans.tga + alpha 1 + }*/ + { + //blend add + blend blend + + //vertexProgram softParticleRGB.vfp + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.005, 0, 0, 0 // "softness" factor + + //fragmentProgram softParticleRGB.vfp + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + //fragmentMap 1 forceHighQuality textures/particles/snowflakes_blowdust1a.tga // certain textures should be forced to high quality for the shader to work properly + fragmentMap 1 forceHighQuality textures/particles/snowflakes_blowdust1a_alpha.tga // certain textures should be forced to high quality for the shader to work properly + } + /*{ + blend blend + + vertexProgram foggedBlendSoft.vfp + vertexParm 0 0.39, 0.44, 0.48, 1 // fog color + vertexParm 1 0.000001219512, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) + vertexParm 2 0.005, 0, 0, 0 // "softness" factor + + fragmentProgram foggedBlendSoft.vfp + fragmentMap 0 forceHighQuality textures/particles/snowflakes_blowdust1a_alpha.tga // source texture ( preferably with alpha-channel ) + fragmentMap 1 _currentDepth // depth image + }*/ +} + +textures/particles/snowflakes_blowdust_ground1 +{ + qer_editorimage textures/particles/snowflakes_blowdust_ground1.tga + noShadows + translucent + nonsolid + twosided + polygonOffset 0.1 +// { +// blend add +// map textures/particles/snowflakes_blowdust1.tga +// } + { + blend add + //blend blend + + vertexProgram softParticleRGB.vfp + //vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleRGB.vfp + //fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/snowflakes_blowdust_ground1.tga // certain textures should be forced to high quality for the shader to work properly + //fragmentMap 1 forceHighQuality textures/particles/snowflakes_blowdust_ground1_alpha.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/snowflakes_small_blowdust_ground1 +{ + qer_editorimage textures/particles/snowflakes_small_blowdust_ground1.tga + noShadows + translucent + nonsolid +// twosided +// polygonOffset 0.1 +// { +// blend add +// map textures/particles/snowflakes_blowdust1.tga +// } + { + //blend add + blend blend + + //vertexProgram softParticleRGB.vfp + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + //fragmentProgram softParticleRGB.vfp + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + //fragmentMap 1 forceHighQuality textures/particles/snowflakes_small_blowdust_ground1.tga // certain textures should be forced to high quality for the shader to work properly + fragmentMap 1 forceHighQuality textures/particles/snowflakes_small_blowdust_ground1_alpha.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +// ------------------------------------------------------------------------------ +// P R O J E C T I L E S +// ------------------------------------------------------------------------------ +textures/particles/rocket_flame +{ + noselfShadow + noshadows + translucent + discrete + nonsolid + noimpact + //sort decal + //sort 110 + sort nearest + /*{ + blend add + map textures/particles/rocket_flame_a.tga + vertexcolor + colored + } */ + /*{ + blend add + + vertexProgram foggedAdd.vfp + vertexParm 0 0.39, 0.44, 0.48, 1 // fog color + vertexParm 1 0.00001219512, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) where fadeRange is shaderParms 3 of the fog, fadeStart is distance from the camera in game's units + + fragmentProgram foggedAdd.vfp + fragmentMap 0 textures/particles/rocket_flame_a.tga // source texture + vertexcolor + colored + }*/ +} + +textures/particles/rocket_smoke +{ + noselfShadow + noshadows + translucent + discrete + nonsolid + noimpact + //sort decal + sort 110 + + /* { + blend blend + map textures/particles/rocket_smoke_a.tga + vertexcolor + colored + } */ + { + blend blend + + vertexProgram foggedBlend.vfp + vertexParm 0 0.39, 0.44, 0.48, 1 // fog color + vertexParm 1 0.00001219512, 0.0, 0, 0 // fog fade range, fog start distance ( to "sync" to scene units : zScale = 1.0 / fadeRange; zBias = -( 1.0 / fadeRange ) * fadeStart; ) where fadeRange is shaderParms 3 of the fog, fadeStart is distance from the camera in game's units + + fragmentProgram foggedBlend.vfp + fragmentMap 0 textures/particles/rocket_smoke_a.tga // source texture ( preferably with alpha-channel ) + vertexcolor + colored + } +/* { + blend blend + + vertexProgram particleBlend_SoftDistFog.glsl + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 // distanceFadeStart, distanceFadeRange + vertexParm 2 1.0, 1.0, 1.0, 0.00005 // pseudoFog color RGB, "fog thickness" value + + fragmentProgram particleBlend_SoftDistFog.glsl + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/rocket_smoke_a.tga + + vertexColor + }*/ //used in bfg engine +} + +textures/particles/sentinelCOMAR_jetstream_small_dark +{ + translucent + noShadows + noSelfShadow + twosided + //sort 120 + clamp + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/round_sharp_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/sentinelCOMAR_jetstream_small_light +{ + translucent + noShadows + noSelfShadow + twosided + //sort 121 + clamp + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/round_sharp_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/sentinelCOMAR_jetstream_main_dark +{ + translucent + noShadows + noSelfShadow + twosided + //sort 121 + clamp + /*{ + blend blend + map textures/particles/round_sharp_blend.tga + clamp + vertexColor + }*/ + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/round_sharp_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/sentinelCOMAR_jetstream_main_light +{ + translucent + noShadows + noSelfShadow + twosided + //sort 122 + clamp + /*{ + blend blend + map textures/particles/round_sharp_blend.tga + vertexColor + clamp + }*/ + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/round_sharp_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +// ------------------------------------------------------------------------------ +// S M O K E S +// ------------------------------------------------------------------------------ + +textures/particles/smoke_anime_dark +{ + translucent + noShadows + noSelfShadow + twosided + //sort 101 + //sort 120 + sort 110 +/* { + blend blend + map textures/particles/smoke_anime3_test_blend.tga + vertexColor + //clamp + } */ + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smoke_anime3_test_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +/* { + blend blend + + vertexProgram particleBlend_SoftDistFog.glsl + + vertexParm 0 0.05, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 // distanceFadeStart, distanceFadeRange + vertexParm 2 1, 1, 1, 0.000005 // pseudoFog color RGB, "fog thickness" value + + fragmentProgram particleBlend_SoftDistFog.glsl + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/smoke_anime3_test_blend.tga + + vertexColor + }*/ // in bfg engine +} + +textures/particles/smoke_anime_light +{ + translucent + noShadows + noSelfShadow + twosided + //sort 102 + //sort 121 + sort 111 + /*{ + blend blend + map textures/particles/smoke_anime3_test_blend.tga + vertexColor + clamp + }*/ + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smoke_anime3_test_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +/* { + blend blend + + vertexProgram particleBlend_SoftDistFog.glsl + + vertexParm 0 0.05, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 // distanceFadeStart, distanceFadeRange + vertexParm 2 1, 1, 1, 0.000005 // pseudoFog color RGB, "fog thickness" value + + fragmentProgram particleBlend_SoftDistFog.glsl + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/smoke_anime3_test_blend.tga + + vertexColor + }*/ +} + +textures/particles/smoke_anime_details +{ + translucent + noShadows + noSelfShadow + twosided + //sort 103 + //sort 122 + /*{ + blend blend + map textures/particles/smoke_anime3detail_test_blend.tga + vertexColor + clamp + }*/ + { + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smoke_anime3detail_test_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/smoke_anime_stripe1_dark +{ + translucent + noShadows + noSelfShadow + twosided + //sort 102 + //sort 121 + { + blend blend + map textures/particles/smoke_anime_stripe1_blend.tga + vertexColor + clamp + } + / + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smoke_anime3_test_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/smoke_anime_stripe2_dark +{ + translucent + noShadows + noSelfShadow + twosided + //sort 102 + //sort 121 + { + blend blend + map textures/particles/smoke_anime_stripe2_blend.tga + vertexColor + clamp + } + / + blend blend + vertexColor + + vertexProgram softParticleAlpha.vfp + + vertexParm 0 0.01, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleAlpha.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smoke_anime3_test_blend.tga // certain textures should be forced to high quality for the shader to work properly + } +} + +textures/particles/plasma_burn_smoke_puff +{ + noSelfShadow + noShadows + translucent + discrete + nonsolid + sort 122 + clamp + { + blend blend + map textures/particles/smoke_puff1.tga + colored + vertexColor + } +} + +// -------------------------------------------------------- +// BLOOD PARTICLES +// -------------------------------------------------------- + +textures/particles/blood_blob1 +{ + noSelfShadow + noShadows + translucent + discrete + twosided + nonsolid + noimpact + { + blend blend + map textures/particles/blood_particle1.tga + vertexColor + colored + } +} + +textures/particles/blood_blob2 +{ + noSelfShadow + noShadows + translucent + discrete + twosided + nonsolid + noimpact + { + blend blend + map textures/particles/blood_particle2.tga + vertexColor + colored + } +} + +textures/particles/blood_blob3 +{ + noSelfShadow + noShadows + translucent + discrete + twosided + nonsolid + noimpact + { + blend blend + map textures/particles/blood_particle3.tga + vertexColor + colored + } +} + +textures/particles/blood_splatter1_thin +{ + noSelfShadow + noShadows + translucent + discrete + twosided + nonsolid + noimpact + { + blend blend + map textures/particles/blood_splatter1_thin.tga + vertexColor + colored + } +} \ No newline at end of file diff --git a/base/materials/particles_special_test.mtr b/base/materials/particles_special_test.mtr new file mode 100644 index 00000000..0d8b8a4b --- /dev/null +++ b/base/materials/particles_special_test.mtr @@ -0,0 +1,71 @@ +textures/particles/particletest_blend_soft +{ + qer_editorimage textures/particles/smokepuffb.tga + noShadows + translucent + sort 10 + + { + blend blend + + vertexProgram particleBlend_SoftDistFog.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 // distanceFadeStart, distanceFadeRange + vertexParm 2 0, 0, 1, 0.001 // pseudoFog color RGB, "fog thickness" value + + fragmentProgram particleBlend_SoftDistFog.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/smoke01.tga + + vertexColor + } +} + +textures/particles/particletest_add_soft +{ + qer_editorimage textures/particles/smokepuffb.tga + noShadows + translucent + sort 10 + + { + blend add + + vertexProgram particleAdd_SoftDistFog.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 + vertexParm 2 0, 0, 1, 0.001 + + fragmentProgram particleAdd_SoftDistFog.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/smoke01.tga + + vertexColor + } +} + +textures/particles/particletest_filter_soft +{ + qer_editorimage textures/particles/smokepuffb.tga + noShadows + translucent + sort 10 + + { + blend filter + + vertexProgram particleFilter_SoftDistFog.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + vertexParm 1 128, 128, 0, 0 // + vertexParm 2 0, 0, 1, 0.001 + + fragmentProgram particleFilter_SoftDistFog.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 textures/particles/smoke_filter.tga + + vertexColor + } +} \ No newline at end of file diff --git a/base/materials/portalsky.mtr b/base/materials/portalsky.mtr new file mode 100644 index 00000000..d515c06f --- /dev/null +++ b/base/materials/portalsky.mtr @@ -0,0 +1,39 @@ +textures/skies/portal_sky +{ + qer_editorimage textures/editor/portal_sky.tga + forceOpaque // will still seal levels + noshadows + noimpact + sort portalSky + + { + map _currentRender + + clamp + screen + + // fix up the projection based on the screen coords + translate global4 * 0.5, global5 * 0.5 + scale global4 * 0.5, global5 * 0.5 + } +} + +textures/editor/portal_sky +{ + qer_editorimage textures/editor/portal_sky.tga + forceOpaque // will still seal levels + noshadows + noimpact + sort portalSky + + { + map _currentRender + + clamp + screen + + // fix up the projection based on the screen coords + translate global4 * 0.5, global5 * 0.5 + scale global4 * 0.5, global5 * 0.5 + } +} diff --git a/base/materials/sfx.mtr b/base/materials/sfx.mtr new file mode 100644 index 00000000..4ca2a5cb --- /dev/null +++ b/base/materials/sfx.mtr @@ -0,0 +1,146 @@ +table strip6frames { snap { 0, 1, 2, 3, 4, 5 } } // used to playback blood animation strip of 6 frames + +// -------------------------------------------------------------------------------- +// SPECIAL EFFECT MATERIALS +// -------------------------------------------------------------------------------- + +textures/sfx/door_lights1_onoff +{ + translucent + noshadows + noSelfShadow + nonsolid + //forceoverlays + sort decal + { + if ( parm7 == 0 ) + blend blend + map textures/sfx/door_lights1.tga + red ( 255 / 255 ) + green ( 15 / 255 ) + blue ( 0 / 255 ) + alphaTest 0.5 + } + { + if ( parm7 == 0 ) + blend add + map textures/sfx/door_lights1.tga + red ( 255 / 255 ) + green ( 15 / 255 ) + blue ( 0 / 255 ) + glow + } + { + if ( parm7 == 1 ) + blend blend + map textures/sfx/door_lights1.tga + red ( 142 / 255 ) + green ( 219 / 255 ) + blue ( 255 / 255 ) + alphaTest 0.5 + } + { + if ( parm7 == 1 ) + blend add + map textures/sfx/door_lights1.tga + red ( 142 / 255 ) + green ( 219 / 255 ) + blue ( 255 / 255 ) + glow + } +} + +textures/sfx/door_lights1_locked // red lights +{ + translucent + noshadows + noSelfShadow + nonsolid + sort decal + { + blend blend + map textures/sfx/door_lights1.tga + red ( 255 / 255 ) + green ( 15 / 255 ) + blue ( 0 / 255 ) + alphaTest 0.5 + } + { + blend add + map textures/sfx/door_lights1.tga + red ( 255 / 255 ) + green ( 15 / 255 ) + blue ( 0 / 255 ) + glow + } +} + +textures/sfx/door_lights1_open // blue lights +{ + translucent + noshadows + noSelfShadow + nonsolid + sort decal + { + blend blend + map textures/sfx/door_lights1.tga + red ( 142 / 255 ) + green ( 219 / 255 ) + blue ( 255 / 255 ) + alphaTest 0.5 + } + { + blend add + map textures/sfx/door_lights1.tga + red ( 142 / 255 ) + green ( 219 / 255 ) + blue ( 255 / 255 ) + glow + } +} + +// ------------------------------------------------------------------------- +// animated blood splatter (on impact with living bodies) +// ------------------------------------------------------------------------- +textures/sfx/blood_string1 +{ + noSelfShadow + noshadows + translucent + discrete + twosided + nonsolid + noimpact + + qer_editorimage textures/sfx/blood_string1_strip.tga + + { + blend blend + map textures/sfx/blood_string1_strip.tga + scale 1 , 1 / 6 + scroll 0 , strip6frames[ time * 2 ] + colored + vertexColor + } +} + +// -------------------------------------------------------------------------------- +// FLARES +// -------------------------------------------------------------------------------- + +textures/sfx/flare_basic +{ + noshadows + translucent + nonsolid + deform flare ( 16 + parm4 ) // shaderParm4 set on flare's entity sets its size; e.g. shaderParm4 10 would result in ( 16 + 10 ) + qer_editorimage textures/editor/flare.tga + { + if ( parm7 == 0 ) // if a light with this flare breaks, flare gets removed + blend add + map _quadratic + colored + vertexcolor + } +} \ No newline at end of file diff --git a/base/materials/test_glow.mtr b/base/materials/test_glow.mtr new file mode 100644 index 00000000..226e751d --- /dev/null +++ b/base/materials/test_glow.mtr @@ -0,0 +1,254 @@ +textures/blurX_16_512 +{ + { + blend gl_one, gl_zero + + vertexProgram gaussBlurX_15.vfp + vertexParm 0 parm0 + + fragmentProgram gaussBlurX_15.vfp + fragmentMap 0 _glow512 + } +} + +textures/blurY_16_512 +{ + { + blend gl_one, gl_zero + + vertexProgram gaussBlurY_15.vfp + vertexParm 0 parm0 + + fragmentProgram gaussBlurY_15.vfp + fragmentMap 0 _glow512 + } +} + +textures/blurX_16_256 +{ + { + blend gl_one, gl_zero + + vertexProgram gaussBlurX_15.vfp + vertexParm 0 parm0 + + fragmentProgram gaussBlurX_15.vfp + fragmentMap 0 _glow256 + } +} + +textures/blurY_16_256 +{ + { + blend gl_one, gl_zero + + vertexProgram gaussBlurY_15.vfp + vertexParm 0 parm0 + + fragmentProgram gaussBlurY_15.vfp + fragmentMap 0 _glow256 + } +} + +textures/blurX_16_128 +{ + { + blend blend + + vertexProgram blurX_16_128.vfp + + fragmentProgram blurX_16_128.vfp + fragmentMap 0 _glow128 + + //colored + } +} + + + +textures/blurY_16_128 +{ + { + blend blend + + vertexProgram blurY_16_128.vfp + + fragmentProgram blurY_16_128.vfp + fragmentMap 0 _glow128 + + //colored + } +} + +textures/glowComp +{ + { + blend blend + vertexProgram glowComp.vfp + vertexParm 0 parm0, parm1, 1, 1 // effect scale of 512 image, effect scale of 256 image, unused, unused + + fragmentProgram glowComp.vfp + fragmentMap 0 _currentRender + fragmentMap 1 _glow512 + fragmentMap 2 _glow256 + } +} + +textures/glowMaterial +{ + { + blend blend + map _currentGlow + } +} + +// glow test materials + +textures/inkTest/btex1a_glow +{ + qer_editorimage textures/base_floor/a_bluetex1a_02.tga + + { + blend diffusemap + map _white + red 0.5 + green 0.5 + blue 0.5 + } + { + blend specularmap + map _white + rgb 0.5 + } + { + blend bumpmap + map _flat + } + { + blend filter + + vertexProgram depthTest.vfp + + vertexParm 0 0.002, 0.75, 700, 1 // ink line size, ink strength + vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + vertexParm 3 0.00095, 512.0, 4096.0, -0.00060 + + fragmentProgram depthTest.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + { + blend blend + map _white + glow + } +} + +textures/inkTest/btex1a_glow2 +{ + qer_editorimage textures/base_floor/a_bluetex1a_02.tga + + { + blend diffusemap + map _white + red 0.5 + green 0.5 + blue 0.5 + } + { + blend specularmap + map _white + rgb 0.5 + } + { + blend bumpmap + map _flat + } + { + blend filter + + vertexProgram depthTest.vfp + + vertexParm 0 0.002, 0.75, 700, 1 // ink line size, ink strength + vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + vertexParm 3 0.00095, 512.0, 4096.0, -0.00060 + + fragmentProgram depthTest.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + { + blend add + map textures/glowtest.tga + rgb 0.5 + } + { + blend blend + map textures/glowtest.tga + glow + } +} + +textures/sfx/flare_glow +{ + noshadows + translucent + nonsolid + deform flare 32 + qer_editorimage textures/editor/flare.tga + { + if ( parm7 == 0 ) + blend add + map _quadratic + //colored + rgb 0.25 + vertexcolor + glow + } +} + +models/mapobjects_static/glowing_cube +{ + qer_editorimage models/mapobjects_static/glowing_cube_d.tga + unsmoothedTangents + { + blend diffusemap + map models/mapobjects_static/glowing_cube_d.tga + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.0015, 0.0001, 2048.0, 3000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.00085, 0.0005 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 1024.0, 9.0, 256.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 2048.0, 2, 3 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + { + blend add + map models/mapobjects_static/glowing_cube_glow.tga + rgb 0.85 + } + { + blend blend + map models/mapobjects_static/glowing_cube_glow.tga + glow + } +} \ No newline at end of file diff --git a/base/materials/test_inks.mtr b/base/materials/test_inks.mtr new file mode 100644 index 00000000..463d8103 --- /dev/null +++ b/base/materials/test_inks.mtr @@ -0,0 +1,170 @@ +textures/inkTest/btex1a +{ + qer_editorimage textures/base_floor/a_bluetex1a_02.tga + + //bumpmap addnormals( textures/base_floor/a_bluetex1a_local.tga, heightmap( textures/base_floor/a_bluetex1a_b02.tga, 1 ) ) + //diffusemap textures/base_floor/a_bluetex1a_d02.tga + { + blend diffusemap + map _white + red 0.5 + green 0.5 + blue 0.5 + } + { + blend specularmap + map _white + rgb 0.5 + } + { + blend bumpmap + map _flat + } + { + blend filter + + vertexProgram depthTest.vfp + //vertexParm 0 0.0012, 0.5, 400, 1 // ink line size, ink strength + //vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + //vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + //vertexParm 3 0.001, 256.0, 256.0, -0.00025 // ink line size far, sizeChangeStart, sizeChangeRange, inkBias ( should be negative ) + + vertexParm 0 0.0012, 0.75, 700, 1 // ink line size, ink strength + vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + vertexParm 3 0.00095, 512.0, 4096.0, -0.00060 + + fragmentProgram depthTest.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +textures/inkTest/a_diafloor_1b_fin +{ + qer_editorimage textures/base_floor/a_diafloor_1b_fin.tga + + //diffusemap textures/base_floor/a_diafloor_d1b_fin.tga + //specularmap textures/base_floor/a_diafloor_s1_fin.tga + //bumpmap addnormals( textures/base_floor/a_diafloor_local_fin.tga , heightmap( textures/base_floor/a_diafloor_b1_fin.tga, 4 ) ) + { + blend diffusemap + map _white + red 0.65 + green 0.5 + blue 0.35 + } + { + blend specularmap + map _white + rgb 0.5 + } + { + blend bumpmap + map _flat + } + + + { + blend filter + + vertexProgram depthTest.vfp + //vertexParm 0 0.002, 0.5, 400, 1 // ink line size, ink strength + //vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + //vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + //vertexParm 3 0.001, 256.0, 256.0, -0.00025 // ink line size far, sizeChangeStart, sizeChangeRange, inkBias ( should be negative ) + + vertexParm 0 0.0012, 0.75, 700, 1 // ink line size, ink strength + vertexParm 1 0.0075, 0.75, 32.0, 64.0 // inner edge threshold near, inner edge threshold far, nearDistance, lerpRange + vertexParm 2 1200.0, 1024.0 // fadeStart, fadeRange + vertexParm 3 0.00095, 512.0, 4096.0, -0.00060 + + fragmentProgram depthTest.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} + +shaderDemos/testReflect2 +{ + noshadows + qer_editorimage textures/base_floor/a_diafloor_d1b_fin.tga + + { + mirrorRenderMap 512 256 + blend add + maskColor + } + { + blend add + vertexProgram bumpyMirror.vfp + vertexParm 0 0, 0 // texture scrolling + vertexParm 1 2 // magnitude of the distortion + vertexParm 2 0.001953125, 0.00390625, 1, 0 // ( 1 / mirrorMapWidth, 1 / mirrorMapHeight ) + vertexParm 3 0.3 // how much of the reflection will be added + //vertexParm 2 0.00390625, 0.0078125, 0.5, 0.5 // ( 1 / mirrorMapWidth, 1 / mirrorMapHeight ) + fragmentProgram bumpyMirror.vfp + fragmentMap 0 _scratch // mirror image + fragmentMap 1 _flat + } + + //bumpmap textures/base_floor/a_diafloor_local_fin.tga + + { + blend diffuseMap + //map textures/base_floor/a_diafloor_d1b_fin.tga + map _white + rgb 0.25 + } + + { + blend specularmap + //map textures/base_floor/a_diafloor_d1b_fin.tga + map _white + rgb 0.25 + } + //specularmap textures/base_floor/a_diafloor_s1_fin.tga +} + +shaderDemos/testReflect +{ + noshadows + qer_editorimage textures/base_floor/a_diafloor_d1b_fin.tga + + { + mirrorRenderMap 512 256 + blend add + maskColor + } + { + blend add + vertexProgram bumpyMirror.vfp + vertexParm 0 0, 0 // texture scrolling + vertexParm 1 2 // magnitude of the distortion + vertexParm 2 0.001953125, 0.00390625, 2.5, 0 // ( 1 / mirrorMapWidth, 1 / mirrorMapHeight ) + vertexParm 3 0.3 // how much of the reflection will be added + //vertexParm 2 0.00390625, 0.0078125, 0.5, 0.5 // ( 1 / mirrorMapWidth, 1 / mirrorMapHeight ) + fragmentProgram bumpyMirror.vfp + fragmentMap 0 _scratch // mirror image + fragmentMap 1 textures/base_floor/a_diafloor_local_fin.tga + } + + bumpmap textures/base_floor/a_diafloor_local_fin.tga + + { + blend diffuseMap + //map textures/base_floor/a_diafloor_d1b_fin.tga + map _white + rgb 0.25 + } + + { + blend specularmap + //map textures/base_floor/a_diafloor_d1b_fin.tga + map _white + rgb 0.25 + } + //specularmap textures/base_floor/a_diafloor_s1_fin.tga +} diff --git a/base/materials/test_misc.mtr b/base/materials/test_misc.mtr new file mode 100644 index 00000000..1240ad01 --- /dev/null +++ b/base/materials/test_misc.mtr @@ -0,0 +1,66 @@ +textures/test/fresnel +{ + { + map _black + } + { + blend add + + vertexProgram simpleFresnel.vfp + vertexParm 0 4, 0.5, 0, 0 // fresnelPower, fresnelScale, fresnelBias + vertexParm 1 1, 1, 1, 1 // RGBA Tint + + fragmentProgram simpleFresnel.vfp + fragmentMap 0 normalMap textures/sfx/heathaze_local.tga // normalmap, use _flat otherwise + fragmentMap 1 textures/sfx/heathaze_local.tga // optional texture to multiply with + } +} + +textures/test/reflectiveBlurred +{ + noshadows + { + mirrorRenderMap 512 256 + blend blend + alpha 1 + translate 0.5 , 0.5 + scale 0.5 , 0.5 + } +} + +textures/fresnel_sphere +{ + { + blend bumpmap // this stage is needed to workaround issue of not having cubeMap reflections without diffusemap stage + map _flat + } + { + vertexProgram heatHaze.vfp + vertexParm 0 0 , 0 // texture scrolling + vertexParm 1 3.75 // magnitude of the distortion + + fragmentProgram heatHaze.vfp + fragmentMap 0 _currentRender + fragmentMap 1 normalMap textures/sfx/heathaze_local.tga // the normal map for distortion + } + { + blend gl_dst_alpha, gl_one + maskalpha + cubeMap env/test // envshot cmd has to be issues when in 640x480 resolution (r_mode 3) and g_fov 90 to avoid artifacts + red Parm0 + green Parm1 + blue Parm2 + texgen reflect + } + { + blend add + + vertexProgram simpleFresnel.vfp + vertexParm 0 5, 1, 0, 0 // fresnelPower, fresnelScale, fresnelBias + vertexParm 1 0, 1, 1, 1 // RGBA Tint + + fragmentProgram simpleFresnel.vfp + fragmentMap 0 normalMap textures/sfx/heathaze_local.tga // normalmap, use _flat otherwise + fragmentMap 1 textures/sfx/heathaze_local.tga // optional texture to multiply with + } +} \ No newline at end of file diff --git a/base/materials/test_skies.mtr b/base/materials/test_skies.mtr new file mode 100644 index 00000000..34467c82 --- /dev/null +++ b/base/materials/test_skies.mtr @@ -0,0 +1,77 @@ +textures/skies/test_skybox +{ + qer_editorimage textures/editor/test_skybox.tga + noFragment + noshadows + nooverlays + noimpact + forceOpaque // allows for transparent windows to be drawn on top (in front) of the sky + { + blend add // allows for transparent windows to be drawn on top (in front) of the sky + forceHighQuality + //cameraCubeMap env/test_sky2t + cameraCubeMap env/sky_gray_cloudy2_fogged + texgen skybox + texgen wobblesky .0 .0 .0 + } +} + +textures/skies/clouds_gray_layer1 +{ + qer_editorimage textures/skies/clouds_gray_layer1.tga + translucent + noshadows + { + forceHighQuality + nopicmip + maskcolor + map makealpha(textures/skies/skydome_cloud_mask.tga) + } + { + blend gl_dst_alpha, gl_one + maskalpha + forceHighQuality + nopicmip + //map textures/skies/clouds_gray_layer1_add.tga + map textures/skies/clouds_gray1_add.tga + //red 0.4 + //blue 0.01 + //green 0.1 + scale 1.55, 1.55 + translate time * 0.001, time * 0.015 + } +} + +textures/skies/skybox_black +{ + qer_editorimage textures/colors/black.tga + noFragment + noshadows + nooverlays + noimpact + forceOpaque // allows for transparent windows to be drawn on top (in front) of the sky + { + blend add // allows for transparent windows to be drawn on top (in front) of the sky + forceHighQuality + cameraCubeMap env/pure_black + texgen skybox + texgen wobblesky .0 .0 .0 + } +} + +textures/skies/skybox_deep_space +{ + qer_editorimage textures/editor/skybox_deep_space.tga + noFragment + noshadows + nooverlays + noimpact + forceOpaque // allows for transparent windows to be drawn on top (in front) of the sky + { + blend add // allows for transparent windows to be drawn on top (in front) of the sky + forceHighQuality + cameraCubeMap env/deep_space + texgen skybox + texgen wobblesky .01 .01 .01 + } +} \ No newline at end of file diff --git a/base/materials/test_softparticles.mtr b/base/materials/test_softparticles.mtr new file mode 100644 index 00000000..64030e6c --- /dev/null +++ b/base/materials/test_softparticles.mtr @@ -0,0 +1,22 @@ +// soft particle test +textures/particles/smokepuff_soft +{ + qer_editorimage textures/particles/smokepuffb.tga + noShadows + translucent + sort 10 + + { + blend add + + vertexProgram softParticleRGB.vfp + + vertexParm 0 0.1, 0, 0, 0 // "softness" factor + + fragmentProgram softParticleRGB.vfp + fragmentMap 0 _currentDepth + fragmentMap 1 forceHighQuality textures/particles/smokepuffx.tga // certain textures should be forced to high quality for the shader to work properly + + //vertexColor + } +} \ No newline at end of file diff --git a/base/materials/vehicles_buggy.mtr b/base/materials/vehicles_buggy.mtr new file mode 100644 index 00000000..983934a6 --- /dev/null +++ b/base/materials/vehicles_buggy.mtr @@ -0,0 +1,124 @@ +// --------------------------------------------------------------------------- +// PLAYER's BUGGY +// --------------------------------------------------------------------------- + +models/md5/vehicles/buggy/buggy +{ + noShadows + noSelfShadow + unsmoothedTangents + { + blend diffusemap + map models/md5/vehicles/buggy/buggy2_d.tga + } + { + maskcolor + map makealpha( scale( models/md5/vehicles/buggy/buggy2_reflection_mask1.tga, 1.0, 0.5, 0.85, 1.0 )) // same as alpha 0.85, but can manipulate particular RGB values for more elaborate reflections + //map makealpha(models/md5/vehicles/buggy/buggy2_reflection_mask1.tga) + //alpha 0.85 // used for fine tuning of cubemap reflections + } + { + //blend gl_dst_color, gl_one + blend gl_dst_alpha, gl_one + maskalpha + cubeMap env/cubemap_start + texgen reflect + } + /*{ + blend bumpmap + map models/md5/vehicles/buggy/buggy2_local.tga + } */ + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.0008, 0.0003, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0007, 0.01 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 512.0, 2, 3.5 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } + /*{ + blend filter + + vertexProgram inkEffectLinear.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.00085, 0.0001, 128.0, 2024.0 + + // line strength, line "blackness", edge-bias, far-edge-bias multiplier + vertexParm 1 700, 0.75, -2.37, 10.0 + + // far-edge-bias start, far-edge-bias range, far-ink-strength multiplier, far-ink-strength start + vertexParm 2 32.0, 512.0, 6.0, 128.0 + + // far-ink-strength range, near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 2048.0, 2, 1.0 + + fragmentProgram inkEffectLinear.vfp + fragmentMap 0 _currentDepth + + maskDepth + } */ + { + blend add + map models/md5/vehicles/buggy/buggy2_lights.tga + //scale 4 , 4 + } + { + blend add + map models/md5/vehicles/buggy/buggy2_glow.tga + //scale 4 , 4 + glow + } +} + +models/vehicles/buggy_tire +{ + noShadows + noSelfShadow + //unsmoothedTangents + //nonsolid + { + blend diffusemap + map models/md5/vehicles/buggy/tire2_d.tga + } + { + blend bumpmap + map models/md5/vehicles/buggy/tire2_local.tga + } + { + blend filter + + vertexProgram inkEffect.vfp + + // ink line size, ink line size far, ink size change start, ink size change range + vertexParm 0 0.001, 0.0003, 2048.0, 5000.0 + + // line strength, line "blackness", edge-bias (lower values produce more inking on inner creases close up), far-edge-bias multiplier (?) + vertexParm 1 700, 0.75, -0.0002, 0.1 + + // far-edge-bias start (how far from the view far-range algo kicks in; 2048 is a good value), far-edge-bias range (), far-ink-strength multiplier (the higher the more crease inking on the far away objects), far-ink-strength start + vertexParm 2 2048.0, 3072.0, 180.0, 56.0 + + // far-ink-strength range (higher number will fade away inks sooner), near ink edge scale, far ink edge scale ( based on far bias range settings ) + vertexParm 3 512.0, 1, 2.5 + + fragmentProgram inkEffect.vfp + fragmentMap 0 _currentDepth + + maskDepth + } +} diff --git a/base/materials/video.mtr b/base/materials/video.mtr new file mode 100644 index 00000000..83cd6b58 --- /dev/null +++ b/base/materials/video.mtr @@ -0,0 +1,25 @@ +// default video in PDA +video/default_pda_video { + translucent { + videomap "video/default_pda_video.roq" + linear + } +} + +video/placeholder { + translucent { + map guis/assets/video_placeholder_material.tga + } +} + +video/loadvideo { + translucent { + videomap video/loadvideo.RoQ + } +} + +video/communication_stream { + translucent { + videomap video/loadvideo.RoQ + } +} \ No newline at end of file