Added some PBR intrinsic images

This commit is contained in:
Robert Beckebans 2020-04-20 20:51:31 +02:00
parent 79b67ac310
commit 9823d989c8
3 changed files with 72 additions and 1 deletions

View file

@ -548,6 +548,7 @@ public:
idImage* alphaNotchImage; // 2x1 texture with just 1110 and 1111 with point sampling
idImage* whiteImage; // full of 0xff
idImage* blackImage; // full of 0x00
idImage* cyanImage; // cyan
idImage* noFalloffImage; // all 255, but zero clamped
idImage* fogImage; // increasing alpha is denser fog
idImage* fogEnterImage; // adjust fogImage alpha based on terminator plane
@ -577,6 +578,8 @@ public:
idImage* hierarchicalZbufferImage; // zbuffer with mip maps to accelerate screen space ray tracing
idImage* imguiFontImage;
idImage* chromeSpecImage; // only for the PBR color checker chart
idImage* plasticSpecImage; // only for the PBR color checker chart
idImage* brdfLutImage;
idImage* defaultUACIrradianceCube;
idImage* defaultUACRadianceCube;

View file

@ -136,6 +136,60 @@ static void R_BlackImage( idImage* image )
TF_DEFAULT, TR_REPEAT, TD_DEFAULT );
}
static void R_CyanImage( idImage* image )
{
byte data[DEFAULT_SIZE][DEFAULT_SIZE][4];
for( int x = 0; x < DEFAULT_SIZE; x++ )
{
for( int y = 0; y < DEFAULT_SIZE; y++ )
{
data[y][x][0] = byte( colorCyan.x * 255 );
data[y][x][1] = byte( colorCyan.y * 255 );
data[y][x][2] = byte( colorCyan.z * 255 );
data[y][x][3] = byte( colorCyan.w * 255 );
}
}
image->GenerateImage( ( byte* )data, DEFAULT_SIZE, DEFAULT_SIZE, TF_DEFAULT, TR_REPEAT, TD_DIFFUSE );
}
static void R_ChromeSpecImage( idImage* image )
{
byte data[DEFAULT_SIZE][DEFAULT_SIZE][4];
for( int x = 0; x < DEFAULT_SIZE; x++ )
{
for( int y = 0; y < DEFAULT_SIZE; y++ )
{
data[y][x][0] = 0;
data[y][x][1] = 255;
data[y][x][2] = 255;
data[y][x][3] = 255;
}
}
image->GenerateImage( ( byte* )data, DEFAULT_SIZE, DEFAULT_SIZE, TF_DEFAULT, TR_REPEAT, TD_SPECULAR_PBR_RMAO );
}
static void R_PlasticSpecImage( idImage* image )
{
byte data[DEFAULT_SIZE][DEFAULT_SIZE][4];
for( int x = 0; x < DEFAULT_SIZE; x++ )
{
for( int y = 0; y < DEFAULT_SIZE; y++ )
{
data[y][x][0] = 0;
data[y][x][1] = 0;
data[y][x][2] = 255;
data[y][x][3] = 255;
}
}
image->GenerateImage( ( byte* )data, DEFAULT_SIZE, DEFAULT_SIZE, TF_DEFAULT, TR_REPEAT, TD_SPECULAR_PBR_RMAO );
}
static void R_RGBA8Image( idImage* image )
{
byte data[DEFAULT_SIZE][DEFAULT_SIZE][4];
@ -877,6 +931,7 @@ void idImageManager::CreateIntrinsicImages()
defaultImage = ImageFromFunction( "_default", R_DefaultImage );
whiteImage = ImageFromFunction( "_white", R_WhiteImage );
blackImage = ImageFromFunction( "_black", R_BlackImage );
cyanImage = ImageFromFunction( "_cyan", R_CyanImage );
flatNormalMap = ImageFromFunction( "_flat", R_FlatNormalImage );
alphaNotchImage = ImageFromFunction( "_alphaNotch", R_AlphaNotchImage );
fogImage = ImageFromFunction( "_fog", R_FogImage );
@ -929,7 +984,9 @@ void idImageManager::CreateIntrinsicImages()
imguiFontImage = ImageFromFunction( "_imguiFont", R_CreateImGuiFontImage );
brdfLutImage = globalImages->ImageFromFunction( "_brdfLut", R_CreateBrdfLutImage );
chromeSpecImage = ImageFromFunction( "_chromeSpec", R_ChromeSpecImage );
plasticSpecImage = ImageFromFunction( "_plasticSpec", R_PlasticSpecImage );
brdfLutImage = ImageFromFunction( "_brdfLut", R_CreateBrdfLutImage );
// RB end
// scratchImage is used for screen wipes/doublevision etc..

View file

@ -2512,6 +2512,17 @@ void idMaterial::ParseMaterial( idLexer& src )
newSrc.FreeSource();
continue;
}
// RB: rmaomap for stage shortcut
else if( !token.Icmp( "rmaomap" ) || !token.Icmp( "reflectionmap" ) || !token.Icmp( "pbrmap" ) )
{
str = R_ParsePastImageProgram( src );
idStr::snPrintf( buffer, sizeof( buffer ), "blend rmaomap\nmap %s\n}\n", str );
newSrc.LoadMemory( buffer, strlen( buffer ), "rmaomap" );
newSrc.SetFlags( LEXFL_NOFATALERRORS | LEXFL_NOSTRINGCONCAT | LEXFL_NOSTRINGESCAPECHARS | LEXFL_ALLOWPATHNAMES );
ParseStage( newSrc, trpDefault );
newSrc.FreeSource();
continue;
}
// normalmap for stage shortcut
else if( !token.Icmp( "bumpmap" ) || !token.Icmp( "normalmap" ) )
{