iddevnet/quake4/ArtReference_CreatingTextures.html

253 lines
39 KiB
HTML
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 CreatingTextures - 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]-->
2021-04-10 13:40:18 +00:00
<link rel="Start" href="./Quake4SDK">
<link rel="Alternate" title="Wiki Markup" href="./ArtReference_CreatingTextures?action=raw">
<link rel="Alternate" media="print" title="Print View" href="./ArtReference_CreatingTextures?action=print">
<link rel="Appendix" title="tex_01.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_01.jpg">
<link rel="Appendix" title="tex_02.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_02.jpg">
<link rel="Appendix" title="tex_03.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_03.jpg">
<link rel="Appendix" title="tex_04.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_04.jpg">
<link rel="Appendix" title="tex_05.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_05.jpg">
<link rel="Appendix" title="tex_06.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_06.jpg">
<link rel="Appendix" title="tex_07.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_07.jpg">
<link rel="Appendix" title="tex_08.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_08.jpg">
<link rel="Appendix" title="tex_09.jpg" href="./ArtReference_CreatingTextures?action=AttachFile&amp;do=view&amp;target=tex_09.jpg">
<link rel="Search" href="./FindPage">
<link rel="Index" href="./TitleIndex">
<link rel="Glossary" href="./WordIndex">
<link rel="Help" href="./HelpOnFormatting">
</head>
<body lang="en" dir="ltr">
<div id="header">
2021-04-10 13:40:18 +00:00
<div id="logo"><a href="./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>
2021-04-10 13:40:18 +00:00
<ul id="username"><li><a href="./ArtReference_CreatingTextures?action=login" id="login">Login</a></li></ul>
<div id="locationline">
<ul id="pagelocation">
2021-04-10 13:40:18 +00:00
<li><a class="backlink" title="Click to do a full-text search for this title" href="./ArtReference_CreatingTextures?action=fullsearch&amp;value=linkto%3A%22ArtReference+CreatingTextures%22&amp;context=180">ArtReference CreatingTextures</a></li>
</ul>
</div>
<ul id="navibar">
2021-04-10 13:40:18 +00:00
<li class="wikilink"><a href="./GettingStarted">GettingStarted</a></li><li class="wikilink"><a href="./ScriptFile">ScriptFile</a></li><li class="wikilink"><a href="./MakeAMod">MakeAMod</a></li><li class="wikilink"><a href="./LevelEditor">LevelEditor</a></li><li class="wikilink"><a href="./FXEditor">FXEditor</a></li><li class="wikilink"><a href="./GUIEditor">GUIEditor</a></li><li class="wikilink"><a href="./Sounds">Sounds</a></li><li class="wikilink"><a href="./Animations">Animations</a></li><li class="wikilink"><a href="./ArtReference">ArtReference</a></li><li class="wikilink"><a href="./DownloadableContent">DownloadableContent</a></li><li class="wikilink"><a href="./RecentChanges">RecentChanges</a></li><li class="wikilink"><a href="./FindPage">FindPage</a></li><li class="wikilink"><a href="./HelpContents">HelpContents</a></li><li class="current"><a href="./ArtReference_CreatingTextures">ArtReferenc...ingTextures</a></li>
</ul>
<div id="pageline"><hr style="display:none;"></div>
2021-04-10 13:40:18 +00:00
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="./ArtReference_CreatingTextures?action=info">Info</a></li><li><a href="./ArtReference_CreatingTextures?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">
<h1 id="head-4385fbd8ac068b90401c2fd8f4bf623656c308dd">Creating A Texture For Quake4</h1>
2021-04-10 13:40:18 +00:00
<span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><p class="line874">This document will attempt to explain the process which the artists and modelers of Raven Software used to create textures for the Quake4 game. It begins at the concept stage, on through to creating the high poly models used to render out the normal, setting up the textures shaders, and then painting the diffuse, specular, and height maps to create a finished skin. We have tried to simplify some of the directions and descriptions for those inspired individuals that dont have a lot of experience creating assets for a game. <span class="anchor" id="line-4"></span><span class="anchor" id="line-5"></span><p class="line867"><strong>Creating Your Texture Model</strong>: After concepting up a nice texture design, youll need to model your texture using one of the many 3D modeling packages available. Our hi-poly modelers used Maya and Lightwave to do all of their high poly modeling for Quake4. You can use most any modeling software, but in the end, we used Maya and Lightwave because we wanted to follow the same tool path that our friends down at Id Software used for Doom3. <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span><p class="line874">The image below is of an actual texture model used to create a normal for Quake4. The texture was created in Lightwave and has a tripled poly count of 95284. <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span><p class="line867"><img class="attachment" src="./ArtReference_CreatingTextures?action=AttachFile&amp;do=get&amp;target=tex_01.jpg" title="attachment:tex_01.jpg" /> <span class="anchor" id="line-10"></span><span class="anchor" id="line-11"></span><p class="line867"><strong>Modeling Textures for Quake:</strong> <span class="anchor" id="line-12"></span>Modeling textures is slightly different than what is done for a creature or world model, there is no need for a low poly model, only the high poly one. The model never goes into the game, it is only used to render out your normal map. But dont discard or delete your texture model, save it out on your C: drive because you can always use it to copy parts off of for other textures, etc. <span class="anchor" id="line-13"></span><span class="anchor" id="line-14"></span><p class="line862">Because your texture model is rendered out with the command <strong>renderbumpflat</strong> and the trace traces out at a straight-on 90 degree angle (like a scanner), youll need to model your texture with bevels and rounded surfaces in order for them to show up on the normal map render. Modeling your texture without bevels or rounded pieces will make your texture render out flat with no raised parts or pieces. As an example, see the texture in the image below. This is the same texture as the one in the image above, but has been turned slightly to show the bevels, rounded sections, and the fact that it is not flattened out, but with “floating” parts and pieces, like an exploded view. <span class="anchor" id="line-15"></span><span class="anchor" id="line-16"></span><p class="line867"><img class="attachment" src="./ArtReference_CreatingTextures?action=AttachFile&amp;do=get&amp;target=tex_02.jpg" title="attachment:tex_02.jpg" /> <span class="anchor" id="line-17"></span><span class="anchor" id="line-18"></span><p class="line874">In order to render this texture out, its parts dont need to be flattened out, butted up against each other, or even pushed the other parts. The renderer will read it as being flattened even when its not. Here are a couple more examples images. Notice in the top left and bottom right windows of the bottom most image that the model parts are intentionally placed in front of each other. <span class="anchor" id="line-19"></span><span class="anchor" id="line-20"></span><p class="line867"><img class="attachment" src="./ArtReference_CreatingTextures?action=AttachFile&amp;do=get&amp;target=tex_03.jpg" title="attachment:tex_03.jpg" /> <span class="anchor" id="line-21"
<div id="pagebottom"></div>
</div>
<div id="footer">
2021-04-10 13:40:18 +00:00
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="./ArtReference_CreatingTextures?action=info">Info</a></li><li><a href="./ArtReference_CreatingTextures?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>