iddevnet/quake4/ArtReference_Q4Shaders

246 lines
14 KiB
Text
Raw Normal View History

<!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 - 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?action=raw">
<link rel="Alternate" media="print" title="Print View" href="/quake4/ArtReference_Q4Shaders?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?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?action=fullsearch&amp;value=linkto%3A%22ArtReference+Q4Shaders%22&amp;context=180">ArtReference Q4Shaders</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">ArtReference Q4Shaders</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?action=info">Info</a></li><li><a href="/quake4/ArtReference_Q4Shaders?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="line867">
<h2 id="head-1ab58a6e522f9b7804f32a3891adf55af7450010">How to make the Shader System work for you, a basic guide</h2>
<span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><p class="line862">In this document, were going to go over basic shader issues and definitions, how to write them as well as what you can and cant do with shaders. Ill be going over mostly basics, i.e.: getting things in game issues. <strong>Materials</strong> are the same as <strong>Shaders</strong>, and the term is used interchangeably throughout the Quake 4 SDK. <span class="anchor" id="line-4"></span><span class="anchor" id="line-5"></span><p class="line867"><strong>In this document you will find:</strong> <span class="anchor" id="line-6"></span><ul><li><p class="line891"><strong>Section 1</strong>: <a href="/quake4/ArtReference_Q4Shaders_Definitions">Definitions</a> <span class="anchor" id="line-7"></span></li><li><p class="line891"><strong>Section 2</strong>: <a href="/quake4/ArtReference_Q4Shaders_Textures">How to write a shader for textures (longhand)</a> <span class="anchor" id="line-8"></span></li><li><p class="line891"><strong>Section 3</strong>: <a href="/quake4/ArtReference_Q4Shaders_Guides">Texture Guides</a> <span class="anchor" id="line-9"></span></li><li><p class="line891"><strong>Section 4</strong>: <a href="/quake4/ArtReference_Q4Shaders_Models">How to write a shader for models</a> <span class="anchor" id="line-10"></span></li><li><p class="line891"><strong>Section 5</strong>: <a href="/quake4/ArtReference_Q4Shaders_SkinFiles">.skin files</a> <span class="anchor" id="line-11"></span></li><li><p class="line891"><strong>Section 6</strong>: <a href="/quake4/ArtReference_Q4Shaders_Extra_Passes">Extra passes, additive and alpha</a> <span class="anchor" id="line-12"></span></li><li><p class="line891"><strong>Section 7</strong>: <a href="/quake4/ArtReference_Q4Shaders_Tables">Modulation with tables</a> <span class="anchor" id="line-13"></span></li><li><p class="line891"><strong>Section 8</strong>: <a href="/quake4/ArtReference_Q4Shaders_AnimatedStrips">Special Case:Animated shaders</a> <span class="anchor" id="line-14"></span><span class="anchor" id="line-15"></span></li></ul><p class="line874">Please understand that this document covers the bare-bones of the shader system. Fortunately, the bare-bones is sufficient for a lot of what the artist needs to do and its the basics that can lead to more complex shaders. <span class="anchor" id="line-16"></span><span class="anchor" id="line-17"></span><p class="line867"><hr /><p class="line874"> <span class="anchor" id="line-18"></span><span class="anchor" id="line-19"></span><p class="line867">
<h2 id="head-9069596f72b521c8aeae0e01c9f85f05d85669d6">Troubleshooting</h2>
<span class="anchor" id="line-20"></span><span class="anchor" id="line-21"></span><p class="line874">Troubleshooting shaders can be a little bit like finding a needled in a haystack. Unfortunately, I cant go through every instance of what can happen, because this document would be immense. So Ill go over some stuff to look for in a shader: <span class="anchor" id="line-22"></span><span class="anchor" id="line-23"></span><ol type="1"><li>Make sure all of your shader passes have an open and close brace. <span class="anchor" id="line-24"></span><span class="anchor" id="line-25"></span></li><li class="gap">Check your spelling <span class="anchor" id="line-26"></span><span class="anchor" id="line-27"></span></li><li class="gap">Check your path names. <span class="anchor" id="line-28"></span><span class="anchor" id="line-29"></span><ol type="i"><li>Make sure path names dont have spaces. <span class="anchor" id="line-30"></span><span class="anchor" id="line-31"></span></li><li class="gap">Make sure the path actually exists. <span class="anchor" id="line-32"></span><span class="anchor" id="line-33"></span></li></ol></li></ol><p class="line874">The key to learning the shaders is experimenting, so the best thing to do is dive into the deep end and see what you get. <span class="anchor" id="line-34"></span><span class="anchor" id="bottom"></span></div><p id="pageinfo" class="info" lang="en" dir="ltr">ArtReference Q4Shaders (last edited 2005-11-09 20:30:30 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?action=info">Info</a></li><li><a href="/quake4/ArtReference_Q4Shaders?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>