mirror of
https://github.com/dhewm/iddevnet.git
synced 2024-11-28 15:11:56 +00:00
ef46a7566e
will need heavy cleaning up before it becomes usable at all
263 lines
20 KiB
Text
263 lines
20 KiB
Text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||
<meta name="robots" content="index,nofollow">
|
||
|
||
<title>ArtReference Q4Shaders Models - Quake 4 SDK Documentation</title>
|
||
<script type="text/javascript" src="/wiki/common/js/common.js"></script>
|
||
|
||
<script type="text/javascript">
|
||
<!--// common functions
|
||
|
||
// We keep here the state of the search box
|
||
searchIsDisabled = false;
|
||
|
||
function searchChange(e) {
|
||
// Update search buttons status according to search box content.
|
||
// Ignore empty or whitespace search term.
|
||
var value = e.value.replace(/\s+/, '');
|
||
if (value == '' || searchIsDisabled) {
|
||
searchSetDisabled(true);
|
||
} else {
|
||
searchSetDisabled(false);
|
||
}
|
||
}
|
||
|
||
function searchSetDisabled(flag) {
|
||
// Enable or disable search
|
||
document.getElementById('fullsearch').disabled = flag;
|
||
document.getElementById('titlesearch').disabled = flag;
|
||
}
|
||
|
||
function searchFocus(e) {
|
||
// Update search input content on focus
|
||
if (e.value == 'Search') {
|
||
e.value = '';
|
||
e.className = '';
|
||
searchIsDisabled = false;
|
||
}
|
||
}
|
||
|
||
function searchBlur(e) {
|
||
// Update search input content on blur
|
||
if (e.value == '') {
|
||
e.value = 'Search';
|
||
e.className = 'disabled';
|
||
searchIsDisabled = true;
|
||
}
|
||
}
|
||
|
||
function actionsMenuInit(title) {
|
||
// Initialize action menu
|
||
for (i = 0; i < document.forms.length; i++) {
|
||
var form = document.forms[i];
|
||
if (form.className == 'actionsmenu') {
|
||
// Check if this form needs update
|
||
var div = form.getElementsByTagName('div')[0];
|
||
var label = div.getElementsByTagName('label')[0];
|
||
if (label) {
|
||
// This is the first time: remove label and do buton.
|
||
div.removeChild(label);
|
||
var dobutton = div.getElementsByTagName('input')[0];
|
||
div.removeChild(dobutton);
|
||
// and add menu title
|
||
var select = div.getElementsByTagName('select')[0];
|
||
var item = document.createElement('option');
|
||
item.appendChild(document.createTextNode(title));
|
||
item.value = 'show';
|
||
select.insertBefore(item, select.options[0]);
|
||
select.selectedIndex = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//-->
|
||
</script>
|
||
|
||
|
||
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="/wiki/modern/css/common.css">
|
||
<link rel="stylesheet" type="text/css" charset="utf-8" media="screen" href="/wiki/modern/css/screen.css">
|
||
<link rel="stylesheet" type="text/css" charset="utf-8" media="print" href="/wiki/modern/css/print.css">
|
||
<link rel="stylesheet" type="text/css" charset="utf-8" media="projection" href="/wiki/modern/css/projection.css">
|
||
|
||
<!-- css only for MSIE browsers -->
|
||
<!--[if IE]>
|
||
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="/wiki/modern/css/msie.css">
|
||
<![endif]-->
|
||
|
||
|
||
|
||
<link rel="Start" href="/quake4/Quake4SDK">
|
||
<link rel="Alternate" title="Wiki Markup" href="/quake4/ArtReference_Q4Shaders_Models?action=raw">
|
||
<link rel="Alternate" media="print" title="Print View" href="/quake4/ArtReference_Q4Shaders_Models?action=print">
|
||
<link rel="Search" href="/quake4/FindPage">
|
||
<link rel="Index" href="/quake4/TitleIndex">
|
||
<link rel="Glossary" href="/quake4/WordIndex">
|
||
<link rel="Help" href="/quake4/HelpOnFormatting">
|
||
</head>
|
||
|
||
<body lang="en" dir="ltr">
|
||
|
||
<div id="header">
|
||
<div id="logo"><a href="/quake4/Quake4SDK"><img src="/wiki/common/moinmoin.png" alt="MoinMoin Logo"></a></div>
|
||
|
||
<form id="searchform" method="get" action="">
|
||
<div>
|
||
<input type="hidden" name="action" value="fullsearch">
|
||
<input type="hidden" name="context" value="180">
|
||
<label for="searchinput">Search:</label>
|
||
<input id="searchinput" type="text" name="value" value="" size="20"
|
||
onfocus="searchFocus(this)" onblur="searchBlur(this)"
|
||
onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
|
||
<input id="titlesearch" name="titlesearch" type="submit"
|
||
value="Titles" alt="Search Titles">
|
||
<input id="fullsearch" name="fullsearch" type="submit"
|
||
value="Text" alt="Search Full Text">
|
||
</div>
|
||
</form>
|
||
<script type="text/javascript">
|
||
<!--// Initialize search form
|
||
var f = document.getElementById('searchform');
|
||
f.getElementsByTagName('label')[0].style.display = 'none';
|
||
var e = document.getElementById('searchinput');
|
||
searchChange(e);
|
||
searchBlur(e);
|
||
//-->
|
||
</script>
|
||
|
||
<ul id="username"><li><a href="/quake4/ArtReference_Q4Shaders_Models?action=login" id="login">Login</a></li></ul>
|
||
<div id="locationline">
|
||
|
||
|
||
<ul id="pagelocation">
|
||
<li><a class="backlink" title="Click to do a full-text search for this title" href="/quake4/ArtReference_Q4Shaders_Models?action=fullsearch&value=linkto%3A%22ArtReference+Q4Shaders+Models%22&context=180">ArtReference Q4Shaders Models</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<ul id="navibar">
|
||
<li class="wikilink"><a href="/quake4/GettingStarted">GettingStarted</a></li><li class="wikilink"><a href="/quake4/ScriptFile">ScriptFile</a></li><li class="wikilink"><a href="/quake4/MakeAMod">MakeAMod</a></li><li class="wikilink"><a href="/quake4/LevelEditor">LevelEditor</a></li><li class="wikilink"><a href="/quake4/FXEditor">FXEditor</a></li><li class="wikilink"><a href="/quake4/GUIEditor">GUIEditor</a></li><li class="wikilink"><a href="/quake4/Sounds">Sounds</a></li><li class="wikilink"><a href="/quake4/Animations">Animations</a></li><li class="wikilink"><a href="/quake4/ArtReference">ArtReference</a></li><li class="wikilink"><a href="/quake4/DownloadableContent">DownloadableContent</a></li><li class="wikilink"><a href="/quake4/RecentChanges">RecentChanges</a></li><li class="wikilink"><a href="/quake4/FindPage">FindPage</a></li><li class="wikilink"><a href="/quake4/HelpContents">HelpContents</a></li><li class="current"><a href="/quake4/ArtReference_Q4Shaders_Models">ArtReferenc...ders Models</a></li>
|
||
</ul>
|
||
|
||
<div id="pageline"><hr style="display:none;"></div>
|
||
|
||
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="/quake4/ArtReference_Q4Shaders_Models?action=info">Info</a></li><li><a href="/quake4/ArtReference_Q4Shaders_Models?action=AttachFile">Attachments</a></li><li>
|
||
<form class="actionsmenu" method="get" action="">
|
||
<div>
|
||
<label>More Actions:</label>
|
||
<select name="action"
|
||
onchange="if ((this.selectedIndex != 0) &&
|
||
(this.options[this.selectedIndex].disabled == false)) {
|
||
this.form.submit();
|
||
}
|
||
this.selectedIndex = 0;">
|
||
<option value="raw">Raw Text</option>
|
||
<option value="print">Print View</option>
|
||
<option value="RenderAsDocbook">Render as Docbook</option>
|
||
<option value="refresh">Delete Cache</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="SpellCheck">Check Spelling</option>
|
||
<option value="LikePages">Like Pages</option>
|
||
<option value="LocalSiteMap">Local Site Map</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="RenamePage" disabled class="disabled">Rename Page</option>
|
||
<option value="DeletePage" disabled class="disabled">Delete Page</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="MyPages">My Pages</option>
|
||
<option value="SubscribeUser">Subscribe User</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="Despam">Remove Spam</option>
|
||
<option value="PackagePages">Package Pages</option>
|
||
</select>
|
||
<input type="submit" value="Do">
|
||
</div>
|
||
<script type="text/javascript">
|
||
<!--// Init menu
|
||
actionsMenuInit('More Actions:');
|
||
//-->
|
||
</script>
|
||
</form>
|
||
</li></ul>
|
||
|
||
</div>
|
||
|
||
<div id="page" lang="en" dir="ltr">
|
||
<div dir="ltr" id="content" lang="en"><span class="anchor" id="top"></span>
|
||
<span class="anchor" id="line-1"></span><p class="line874">Writing shaders for models is almost the same as texture shaders… in fact it is the same with the exception to the path of the targa files as well as a render line. <span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><p class="line867"><strong>Setting up material shaders</strong> <span class="anchor" id="line-4"></span><span class="anchor" id="line-5"></span><p class="line874">This is the clincher, and the thing that most people get wrong. It’s easy to mess this up, so in this stage it’s essential to be patient and not to panic. <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span><p class="line874">Some definitions: <span class="anchor" id="line-8"></span><strong>Materials</strong>: the actual file format. <span class="anchor" id="line-9"></span><strong>Shaders</strong>: the individual entries in the material. <span class="anchor" id="line-10"></span><span class="anchor" id="line-11"></span><p class="line874">Here’s a typical shader for a model, and we’ll be using it for an example: <span class="anchor" id="line-12"></span><span class="anchor" id="line-13"></span><pre>models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low
|
||
<span class="anchor" id="line-14"></span>{
|
||
<span class="anchor" id="line-15"></span> noselfShadow
|
||
<span class="anchor" id="line-16"></span> unsmoothedtangents
|
||
<span class="anchor" id="line-17"></span>
|
||
<span class="anchor" id="line-18"></span>renderbump -size 256 256 -trace .05 -aa 2 -mergehigh models/mapobjects/strogg/barrels_and_containers/barrels/barrel1_low_local.tga work/models/mapobjects/strogg/barrels_and_containers/barrels/barrel1_high.lwo
|
||
<span class="anchor" id="line-19"></span>
|
||
<span class="anchor" id="line-20"></span>diffusemap models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_d.tga
|
||
<span class="anchor" id="line-21"></span>bumpmap addnormals ( models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_local.tga, heightmap ( models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_h.tga, 1 ) )
|
||
<span class="anchor" id="line-22"></span>specularmap models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_s.tga
|
||
<span class="anchor" id="line-23"></span>}
|
||
<span class="anchor" id="line-24"></span></pre><span class="anchor" id="line-25"></span><p class="line874">The only thing we’re concerned with right now is the shader name and the render line. The rest of it is used to get the .tga files linked and in game. <span class="anchor" id="line-26"></span><span class="anchor" id="line-27"></span><ul><li style="list-style-type:none"><p class="line891"><strong>4.1 Where do I put my material shaders?</strong> Since you will have the game loaded onto your personal computer and may not have a network, it’ll be a tad different from what we do here at Raven. You’ll need to create your materials locally. Meaning you’ll have to create them on your computer and then save them out in the appropriate directory inside the Quake4 game. <span class="anchor" id="line-28"></span><ol type="i"><li><p class="line862">Through your computer’s Explorer, go into the Quake4 directories. <strong>(C:\Program Files\id Software\Quake 4)</strong> <span class="anchor" id="line-29"></span><span class="anchor" id="line-30"></span></li><li class="gap"><p class="line862">Open the q4base folder and find the <strong>pk4 files.</strong> <span class="anchor" id="line-31"></span><span class="anchor" id="line-32"></span></li><li class="gap"><p class="line862">Underneath the <strong>pk4 files</strong>, you’ll need to create a materials folder. Name it <strong>materials</strong> in all lower case letters. <span class="anchor" id="line-33"></span><span class="anchor" id="line-34"></span></li><li class="gap"><p class="line862">Open <strong>notepad</strong> on your computer and write out your model’s or texture’s material to render your normal map from. It’s very important that the material paths need to point to the directories you saved your model in and where your normal and skin maps will be located. <span class="anchor" id="line-35"></span><span class="anchor" id="line-36"></span></li><li class="gap"><p class="line862">After writing your material, name it and save it as an .mtr file in your newly created materials folder. Don’t save as a .txt file, but as an <strong>.mtr file</strong>. You can easily rewrite the suffix to .mtr. <span class="anchor" id="line-37"></span><span class="anchor" id="line-38"></span></li></ol><p class="line891"><strong>4.2 Writing the shader for renderbump</strong>: This is the key to make your render work. So what do you do? Well the safest and easiest thing to do is to copy and paste a previous entry and change the path names. Here’s the breakdown using the above example: <span class="anchor" id="line-39"></span><span class="anchor" id="line-40"></span></li></ul><p class="line862">The top line: <tt>models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low</tt> is the <em>Shader title</em>: this is what the game looks for when you activate a render. Think of it as an alias or a chapter title. <span class="anchor" id="line-41"></span><span class="anchor" id="line-42"></span><p class="line867"><tt>Unsmoothedtangents</tt>: Unsmoothed tangents are for animated models. If the model isn’t animated DO NOT use unsmoothed tangents. <span class="anchor" id="line-43"></span><span class="anchor" id="line-44"></span><p class="line867"><tt>Renderbump</tt>: This is the command the game looks for when you ask for a renderbump. If the shader doesn’t have this command in it, it won’t render. <span class="anchor" id="line-45"></span><span class="anchor" id="line-46"></span><p class="line867"><tt>-size 256 256</tt>: Size is pretty self-explanatory, this is the size of the final rendered Targa. <span class="anchor" id="line-47"></span><span class="anchor" id="line-48"></span><p class="line867"><tt>-trace .05</tt>: Trace is the height in which the model renders. Think of the low poly model as the surface in which the high poly is being drawn onto. If the high poly has a lot of floating geometry, you may need to render the model multiple times at different trace heights. <span class="anchor" id="line-49"></span><span class="anchor" id="line-50"></span><p class="line867"><tt>-aa 2</tt>: This is the anti-alias function. If this is set to 1 it renders your UV map 1 to 1. If it’s set at 2 it’ll render at 2 to 1. Leave it at 2 for now. <span class="anchor" id="line-51"></span><span class="anchor" id="line-52"></span><p class="line867"><tt>-mergehigh</tt>: You need this to merge the high poly model so it will render as one model. If you don’t have this in, it will render a partial model. <span class="anchor" id="line-53"></span><span class="anchor" id="line-54"></span><p class="line867"><tt>models/mapobjects/barrel/barrel1_low_local.tga</tt>: This is telling the game to write a targa named barrel1_low_local.tga to models/mapobjects/strogg/barrels_and_containers/barrels directory (remember these are path names, so each slash is a folder) to your game’s installation directory on your C drive. <span class="anchor" id="line-55"></span><span class="anchor" id="line-56"></span><p class="line867"><tt>Work/models/mapobjects/strogg/barrels_and_containers/barrels/barrel1_high.lwo</tt>: This tells the game to use this high poly model to create the normal map. You can keep your high poly models in a local directory separate from the Quake4 game on your computer. A high poly model should NEVER be on q4base. <span class="anchor" id="line-57"></span><span class="anchor" id="line-58"></span><p class="line874">Remember to open and close the shader using { and } so that the game recognizes it. <span class="anchor" id="line-59"></span><span class="anchor" id="line-60"></span><ul><li style="list-style-type:none"><p class="line891"><strong>4.3 Double check your path</strong>: If the path is wrong pointing to the high poly model, it won’t render. The game will not allow spaces in the path name, so use an underscore ( _ ) in place of a space. <span class="anchor" id="line-61"></span><span class="anchor" id="line-62"></span><p class="line891"><strong>4.4 Check your spelling and don’t forget to save</strong> <span class="anchor" id="line-63"></span><span class="anchor" id="line-64"></span><p class="line891"><strong>4.5 Set up the shaders to see the model in game</strong>: At this point, you’ll need to take a look at your work. Set up temporary targas for the _d, _h, _s and put them on base with the _local in the correct directory. The renderline is not loaded into the game unless it’s called out, so leaving it there is ok. Load into <strong><a href="/quake4/ModView">ModView</a></strong> and see the magic. See the example below: <span class="anchor" id="line-65"></span></li></ul><p class="line867"><span class="anchor" id="line-66"></span><pre>models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low
|
||
<span class="anchor" id="line-67"></span>{
|
||
<span class="anchor" id="line-68"></span> noselfShadow
|
||
<span class="anchor" id="line-69"></span> unsmoothedtangents
|
||
<span class="anchor" id="line-70"></span>
|
||
<span class="anchor" id="line-71"></span>renderbump -size 256 256 -trace .05 -aa 2 -mergehigh models/mapobjects/strogg/barrels_and_containers/barrels/barrel1_low_local.tga work/models/mapobjects/strogg/barrels_and_containers/barrels/barrel1_high.lwo
|
||
<span class="anchor" id="line-72"></span>
|
||
<span class="anchor" id="line-73"></span>diffusemap models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_d.tga
|
||
<span class="anchor" id="line-74"></span>bumpmap addnormals ( models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_local.tga, heightmap ( models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_h.tga, 1 ) )
|
||
<span class="anchor" id="line-75"></span>specularmap models/mapobjects/strogg/barrels_and_containers/barrels/medium1_low_s.tga
|
||
<span class="anchor" id="line-76"></span>}
|
||
<span class="anchor" id="line-77"></span></pre><span class="anchor" id="line-78"></span><span class="anchor" id="bottom"></span></div><p id="pageinfo" class="info" lang="en" dir="ltr">ArtReference Q4Shaders Models (last edited 2005-11-04 21:39:05 by <span title="MattVainio @ 67.129.250.254[67.129.250.254]"><a class="nonexistent" href="/quake4/MattVainio" title="MattVainio @ 67.129.250.254[67.129.250.254]">MattVainio</a></span>)</p>
|
||
|
||
<div id="pagebottom"></div>
|
||
</div>
|
||
|
||
|
||
<div id="footer">
|
||
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="/quake4/ArtReference_Q4Shaders_Models?action=info">Info</a></li><li><a href="/quake4/ArtReference_Q4Shaders_Models?action=AttachFile">Attachments</a></li><li>
|
||
<form class="actionsmenu" method="get" action="">
|
||
<div>
|
||
<label>More Actions:</label>
|
||
<select name="action"
|
||
onchange="if ((this.selectedIndex != 0) &&
|
||
(this.options[this.selectedIndex].disabled == false)) {
|
||
this.form.submit();
|
||
}
|
||
this.selectedIndex = 0;">
|
||
<option value="raw">Raw Text</option>
|
||
<option value="print">Print View</option>
|
||
<option value="RenderAsDocbook">Render as Docbook</option>
|
||
<option value="refresh">Delete Cache</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="SpellCheck">Check Spelling</option>
|
||
<option value="LikePages">Like Pages</option>
|
||
<option value="LocalSiteMap">Local Site Map</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="RenamePage" disabled class="disabled">Rename Page</option>
|
||
<option value="DeletePage" disabled class="disabled">Delete Page</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="MyPages">My Pages</option>
|
||
<option value="SubscribeUser">Subscribe User</option>
|
||
<option value="show" disabled class="disabled">------------</option>
|
||
<option value="Despam">Remove Spam</option>
|
||
<option value="PackagePages">Package Pages</option>
|
||
</select>
|
||
<input type="submit" value="Do">
|
||
</div>
|
||
<script type="text/javascript">
|
||
<!--// Init menu
|
||
actionsMenuInit('More Actions:');
|
||
//-->
|
||
</script>
|
||
</form>
|
||
</li></ul>
|
||
|
||
<ul id="credits">
|
||
<li><a href="http://moinmoin.wikiwikiweb.de/">MoinMoin Powered</a></li><li><a href="http://www.python.org/">Python Powered</a></li><li><a href="http://validator.w3.org/check?uri=referer">Valid HTML 4.01</a></li>
|
||
</ul>
|
||
|
||
|
||
</div>
|
||
</body>
|
||
</html>
|
||
|