瀏覽代碼

Exporter additions

Panagiotis Christopoulos Charitos 11 年之前
父節點
當前提交
76f6c775bb

+ 1 - 1
shaders/IsLp.frag.glsl

@@ -252,7 +252,7 @@ void main()
 #if 0
 	if(inInstanceId != 99999)
 	{
-		outColor = vec3(diffColor);
+		outColor = vec3(specColor);
 	}
 #endif
 

+ 12 - 2
shaders/MsCommonFrag.glsl

@@ -169,16 +169,26 @@ vec3 readRgbFromCubeTexture(in samplerCube tex, in mediump vec3 texCoord)
 }
 #endif
 
+// Just read the R color from texture
+#if PASS == COLOR
+#	define readRFromTexture_DEFINED
+float readRFromTexture(in sampler2D tex, in highp vec2 texCoords)
+{
+	return vec3(texture(tex, texCoords)).r;
+}
+#endif
+
 // Write the data to FAIs
 #if PASS == COLOR
 #	define writeRts_DEFINED
 void writeRts(
 	in vec3 diffColor, // from 0 to 1
 	in vec3 normal, 
-	in vec2 specularComponent, // Streangth and shininess
+	in float specularColor,
+	in float specularPower,
 	in float blurring)
 {
-	writeGBuffer(diffColor, normal, specularComponent.x, specularComponent.y,
+	writeGBuffer(diffColor, normal, specularColor, specularPower,
 		outMsRt0, outMsRt1);
 }
 #endif

+ 1 - 1
src/resource/Image.cpp

@@ -641,7 +641,7 @@ Error Image::load(const CString& filename, U32 maxTextureSize)
 	}
 	else
 	{
-		ANKI_LOGE("Unsupported extension");
+		ANKI_LOGE("Unsupported extension: %s", &ext[0]);
 		err = ErrorCode::USER_DATA;
 	}
 

+ 2 - 2
testapp/Main.cpp

@@ -229,7 +229,7 @@ Error init()
 	{
 		ScriptResourcePointer script;
 
-		err = script.load("maps/adis/scene.lua", &resources);
+		err = script.load("maps/sponza/scene.lua", &resources);
 		if(err) return err;
 
 		err = app->getScriptManager().evalString(script->getSource());
@@ -499,7 +499,7 @@ Error initSubsystems(int argc, char* argv[])
 	config.set("is.sm.enabled", true);
 	config.set("is.sm.poissonEnabled", true);
 	config.set("is.sm.resolution", 1024);
-	config.set("pps.enabled", true);
+	config.set("pps.enabled", false);
 	config.set("pps.hdr.enabled", true);
 	config.set("pps.hdr.renderingQuality", 0.5);
 	config.set("pps.hdr.blurringDist", 1.0);

+ 81 - 29
tools/scene/Model.cpp

@@ -267,6 +267,7 @@ void exportMaterial(
 {
 	std::string diffTex;
 	std::string normTex;
+	std::string specColTex;
 	std::string dispTex;
 
 	std::string name = getMaterialName(mtl, instanced);
@@ -301,6 +302,19 @@ void exportMaterial(
 		}
 	}
 
+	// Specular color
+	if(mtl.GetTextureCount(aiTextureType_SPECULAR) > 0)
+	{
+		if(mtl.GetTexture(aiTextureType_SPECULAR, 0, &path) == AI_SUCCESS)
+		{
+			specColTex = getFilename(path.C_Str());
+		}
+		else
+		{
+			ERROR("Failed to retrieve texture\n");
+		}
+	}
+
 	// Height texture
 	if(mtl.GetTextureCount(aiTextureType_EMISSIVE) > 0)
 	{	
@@ -315,40 +329,70 @@ void exportMaterial(
 	}
 
 	// Write file
-	static const char* diffMtlStr = 
-#include "diffTemplateMtl.h"
+	static const char* diffFragTemplate = 
+#include "templates/diffFrag.h"
+		;
+	static const char* diffNormFragTemplate = 
+#include "templates/diffNormFrag.h"
 		;
-	static const char* diffNormMtlStr = 
-#include "diffNormTemplateMtl.h"
+	static const char* diffNormSpecFragTemplate = 
+#include "templates/diffNormSpecFrag.h"
 		;
-	static const char* tessDispMtlStr = 
-#include "tessDispTemplateMtl.h"
+	static const char* simpleVertTemplate = 
+#include "templates/simpleVert.h"
+		;
+	static const char* tessVertTemplate = 
+#include "templates/tessVert.h"
 		;
 
-	std::fstream file;
-	file.open(exporter.outDir + name + ".ankimtl", std::ios::out);
+	// Compose full template
+	// First geometry part
+	std::string materialStr;
+	materialStr = "<material>\n\t<programs>\n";
+	if(dispTex.empty())
+	{
+		materialStr += simpleVertTemplate;
+	}
+	else
+	{
+		materialStr += tessVertTemplate;
+	}
 
-	// Chose the correct template
-	std::string str;
+	materialStr += "\n";
+
+	// Then fragment part
 	if(normTex.empty())
 	{
-		str = diffMtlStr;
+		materialStr += diffFragTemplate;
+	}
+	else if(!specColTex.empty())
+	{
+		materialStr += diffNormSpecFragTemplate;
 	}
 	else
 	{
-		if(dispTex.empty())
-		{
-			str = replaceAllString(diffNormMtlStr, "%normalMap%", 
-				exporter.texrpath + normTex);
-		}
-		else
-		{
-			str = replaceAllString(tessDispMtlStr, "%normalMap%", 
-				exporter.texrpath + normTex);
+		materialStr += diffNormFragTemplate;
+	}
 
-			str = replaceAllString(str, "%dispMap%", 
-				exporter.texrpath + dispTex);
-		}
+	materialStr += "\n\t</programs>\t</material>";
+
+	// Replace strings
+	if(!normTex.empty())
+	{
+		materialStr = replaceAllString(materialStr, "%normalMap%", 
+			exporter.texrpath + normTex);
+	}
+
+	if(!dispTex.empty())
+	{
+		materialStr = replaceAllString(materialStr, "%dispMap%", 
+			exporter.texrpath + dispTex);
+	}
+
+	if(!specColTex.empty())
+	{
+		materialStr = replaceAllString(materialStr, "%specularColorMap%", 
+			exporter.texrpath + specColTex);
 	}
 
 	aiColor3D specCol = {0.0, 0.0, 0.0};
@@ -356,17 +400,25 @@ void exportMaterial(
 
 	float shininess = 0.0;
 	mtl.Get(AI_MATKEY_SHININESS, shininess);
-	
 
-	str = replaceAllString(str, "%specularColor%", 
+	materialStr = replaceAllString(materialStr, "%specularColor%", 
 		std::to_string((specCol[0] + specCol[1] + specCol[2]) / 3.0));
-	str = replaceAllString(str, "%specularPower%", 
+	materialStr = replaceAllString(materialStr, "%specularPower%", 
 		std::to_string(shininess));
 
-	str = replaceAllString(str, "%instanced%", (instanced) ? "1" : "0");
-	str = replaceAllString(str, "%diffuseMap%", exporter.texrpath + diffTex);
+	materialStr = replaceAllString(materialStr, "%instanced%", 
+		(instanced) ? "1" : "0");
+	materialStr = replaceAllString(materialStr, "%diffuseMap%", 
+		exporter.texrpath + diffTex);
+
+	// Replace texture extensions with .anki
+	materialStr = replaceAllString(materialStr, ".tga", ".ankitex");
+	materialStr = replaceAllString(materialStr, ".png", ".ankitex");
 
-	file << str;
+	// Open and write file
+	std::fstream file;
+	file.open(exporter.outDir + name + ".ankimtl", std::ios::out);
+	file << materialStr;
 }
 
 //==============================================================================

+ 49 - 0
tools/scene/templates/diffFrag.h

@@ -0,0 +1,49 @@
+R"(		<program>
+			<type>frag</type>
+			<includes>
+				<include>shaders/MsCommonFrag.glsl</include>
+			</includes>
+
+			<inputs>
+				<input><type>float</type><name>uSpecularColor</name><value>%specularColor%</value></input>
+				<input><type>float</type><name>uSpecularPower</name><value>%specularPower%</value></input>
+				<input><type>float</type><name>uBlurring</name><value>0.0</value><const>1</const></input>
+				<input><type>sampler2D</type><name>uDiffuseMap</name><value>%diffuseMap%</value></input>
+			</inputs>
+			
+			<operations>
+				<operation>
+					<id>0</id>
+					<returnType>vec2</returnType>
+					<function>getTextureCoord</function>
+				</operation>
+				<operation>
+					<id>1</id>
+					<returnType>vec3</returnType>
+					<function>getNormal</function>
+				</operation>
+
+				<operation>
+					<id>10</id>
+					<returnType>vec3</returnType>
+					<function>readRgbFromTexture</function>
+					<arguments>
+						<argument>uDiffuseMap</argument>
+						<argument>out0</argument>
+					</arguments>
+				</operation>
+
+				<operation>
+					<id>20</id>
+					<returnType>void</returnType>
+					<function>writeRts</function>
+					<arguments>
+						<argument>out10</argument>
+						<argument>out1</argument>
+						<argument>uSpecularColor</argument>
+						<argument>uSpecularPower</argument>
+						<argument>uBlurring</argument>
+					</arguments>
+				</operation>
+			</operations>
+		</program>)"

+ 30 - 38
tools/scene/diffTemplateMtl.h → tools/scene/templates/diffNormFrag.h

@@ -1,50 +1,33 @@
-R"(<?xml version="1.0" encoding="UTF-8" ?>
-
-<material>
-	<programs>
-		<program>
-			<type>vert</type>
-			<includes>
-				<include>shaders/MsCommonVert.glsl</include>
-			</includes>
-
-			<inputs>
-				<input><type>mat4</type><name>uMvp</name><value></value><instanced>%instanced%</instanced></input>
-				<input><type>mat3</type><name>uN</name><value></value><instanced>%instanced%</instanced></input>
-			</inputs>
-
-			<operations>
-				<operation>
-					<id>1</id>
-					<returnType>void</returnType>
-					<function>writePositionNormalTangentTexCoord</function>
-					<arguments><argument>uMvp</argument><argument>uN</argument></arguments>
-				</operation>
-			</operations>
-		</program>
-
-		<program>
+R"(		<program>
 			<type>frag</type>
+
 			<includes>
 				<include>shaders/MsCommonFrag.glsl</include>
 			</includes>
 
 			<inputs>
-				<input><type>vec2</type><name>uSpecular</name><value>%specularColor% %specularPower%</value></input>
+				<input><type>float</type><name>uSpecularColor</name><value>%specularColor%</value></input>
+				<input><type>float</type><name>uSpecularPower</name><value>%specularPower%</value></input>
 				<input><type>float</type><name>uBlurring</name><value>0.0</value><const>1</const></input>
 				<input><type>sampler2D</type><name>uDiffuseMap</name><value>%diffuseMap%</value></input>
+				<input><type>sampler2D</type><name>uNormalMap</name><value>%normalMap%</value></input>
 			</inputs>
 			
 			<operations>
 				<operation>
 					<id>0</id>
-					<returnType>vec2</returnType>
-					<function>getTextureCoord</function>
+					<returnType>vec3</returnType>
+					<function>getNormal</function>
 				</operation>
 				<operation>
 					<id>1</id>
-					<returnType>vec3</returnType>
-					<function>getNormal</function>
+					<returnType>vec4</returnType>
+					<function>getTangent</function>
+				</operation>
+				<operation>
+					<id>2</id>
+					<returnType>vec2</returnType>
+					<function>getTextureCoord</function>
 				</operation>
 
 				<operation>
@@ -53,23 +36,32 @@ R"(<?xml version="1.0" encoding="UTF-8" ?>
 					<function>readRgbFromTexture</function>
 					<arguments>
 						<argument>uDiffuseMap</argument>
-						<argument>out0</argument>
+						<argument>out2</argument>
 					</arguments>
 				</operation>
-
 				<operation>
 					<id>20</id>
+					<returnType>vec3</returnType>
+					<function>readNormalFromTexture</function>
+					<arguments>
+						<argument>out0</argument>
+						<argument>out1</argument>
+						<argument>uNormalMap</argument>
+						<argument>out2</argument>
+					</arguments>
+				</operation>
+				<operation>
+					<id>30</id>
 					<returnType>void</returnType>
 					<function>writeRts</function>
 					<arguments>
 						<argument>out10</argument>
-						<argument>out1</argument>
-						<argument>uSpecular</argument>
+						<argument>out20</argument>
+						<argument>uSpecularColor</argument>
+						<argument>uSpecularPower</argument>
 						<argument>uBlurring</argument>
 					</arguments>
 				</operation>
 			</operations>
-		</program>
-	</programs>
-</material>)"
+		</program>)"
 

+ 16 - 31
tools/scene/diffNormTemplateMtl.h → tools/scene/templates/diffNormSpecFrag.h

@@ -1,29 +1,4 @@
-R"(<?xml version="1.0" encoding="UTF-8" ?>
-
-<material>
-	<programs>
-		<program>
-			<type>vert</type>
-			<includes>
-				<include>shaders/MsCommonVert.glsl</include>
-			</includes>
-
-			<inputs>
-				<input><type>mat4</type><name>uMvp</name><value></value><instanced>%instanced%</instanced></input>
-				<input><type>mat3</type><name>uN</name><value></value><instanced>%instanced%</instanced></input>
-			</inputs>
-
-			<operations>
-				<operation>
-					<id>1</id>
-					<returnType>void</returnType>
-					<function>writePositionNormalTangentTexCoord</function>
-					<arguments><argument>uMvp</argument><argument>uN</argument></arguments>
-				</operation>
-			</operations>
-		</program>
-
-		<program>
+R"(		<program>
 			<type>frag</type>
 
 			<includes>
@@ -31,10 +6,11 @@ R"(<?xml version="1.0" encoding="UTF-8" ?>
 			</includes>
 
 			<inputs>
-				<input><type>vec2</type><name>uSpecular</name><value>%specularColor% %specularPower%</value></input>
+				<input><type>float</type><name>uSpecularPower</name><value>%specularPower%</value></input>
 				<input><type>float</type><name>uBlurring</name><value>0.0</value><const>1</const></input>
 				<input><type>sampler2D</type><name>uDiffuseMap</name><value>%diffuseMap%</value></input>
 				<input><type>sampler2D</type><name>uNormalMap</name><value>%normalMap%</value></input>
+				<input><type>sampler2D</type><name>uSpecularColorMap</name><value>%specularColorMap%</value></input>
 			</inputs>
 			
 			<operations>
@@ -76,17 +52,26 @@ R"(<?xml version="1.0" encoding="UTF-8" ?>
 				</operation>
 				<operation>
 					<id>30</id>
+					<returnType>float</returnType>
+					<function>readRFromTexture</function>
+					<arguments>
+						<argument>uSpecularColorMap</argument>
+						<argument>out2</argument>
+					</arguments>
+				</operation>
+				
+				<operation>
+					<id>40</id>
 					<returnType>void</returnType>
 					<function>writeRts</function>
 					<arguments>
 						<argument>out10</argument>
 						<argument>out20</argument>
-						<argument>uSpecular</argument>
+						<argument>out30</argument>
+						<argument>uSpecularPower</argument>
 						<argument>uBlurring</argument>
 					</arguments>
 				</operation>
 			</operations>
-		</program>
-	</programs>
-</material>)"
+		</program>)"
 

+ 20 - 0
tools/scene/templates/simpleVert.h

@@ -0,0 +1,20 @@
+R"(		<program>
+			<type>vert</type>
+			<includes>
+				<include>shaders/MsCommonVert.glsl</include>
+			</includes>
+
+			<inputs>
+				<input><type>mat4</type><name>uMvp</name><value></value><instanced>%instanced%</instanced></input>
+				<input><type>mat3</type><name>uN</name><value></value><instanced>%instanced%</instanced></input>
+			</inputs>
+
+			<operations>
+				<operation>
+					<id>1</id>
+					<returnType>void</returnType>
+					<function>writePositionNormalTangentTexCoord</function>
+					<arguments><argument>uMvp</argument><argument>uN</argument></arguments>
+				</operation>
+			</operations>
+		</program>)"

+ 2 - 74
tools/scene/tessDispTemplateMtl.h → tools/scene/templates/tessVert.h

@@ -1,8 +1,4 @@
-R"(<?xml version="1.0" encoding="UTF-8" ?>
-
-<material>
-	<programs>
-		<program>
+R"(		<program>
 			<type>vert</type>
 			<includes>
 				<include>shaders/MsCommonVert.glsl</include>
@@ -69,72 +65,4 @@ R"(<?xml version="1.0" encoding="UTF-8" ?>
 					</arguments>
 				</operation>
 			</operations>
-		</program>
-
-		<program>
-			<type>frag</type>
-
-			<includes>
-				<include>shaders/MsCommonFrag.glsl</include>
-			</includes>
-
-			<inputs>
-				<input><type>vec2</type><name>uSpecular</name><value>%specularColor% %specularPower%</value></input>
-				<input><type>float</type><name>uBlurring</name><value>0.0</value><const>1</const></input>
-				<input><type>sampler2D</type><name>uDiffuseMap</name><value>%diffuseMap%</value></input>
-				<input><type>sampler2D</type><name>uNormalMap</name><value>%normalMap%</value></input>
-			</inputs>
-			
-			<operations>
-				<operation>
-					<id>0</id>
-					<returnType>vec3</returnType>
-					<function>getNormal</function>
-				</operation>
-				<operation>
-					<id>1</id>
-					<returnType>vec4</returnType>
-					<function>getTangent</function>
-				</operation>
-				<operation>
-					<id>2</id>
-					<returnType>vec2</returnType>
-					<function>getTextureCoord</function>
-				</operation>
-
-				<operation>
-					<id>10</id>
-					<returnType>vec3</returnType>
-					<function>readRgbFromTexture</function>
-					<arguments>
-						<argument>uDiffuseMap</argument>
-						<argument>out2</argument>
-					</arguments>
-				</operation>
-				<operation>
-					<id>20</id>
-					<returnType>vec3</returnType>
-					<function>readNormalFromTexture</function>
-					<arguments>
-						<argument>out0</argument>
-						<argument>out1</argument>
-						<argument>uNormalMap</argument>
-						<argument>out2</argument>
-					</arguments>
-				</operation>
-				<operation>
-					<id>30</id>
-					<returnType>void</returnType>
-					<function>writeRts</function>
-					<arguments>
-						<argument>out10</argument>
-						<argument>out20</argument>
-						<argument>uSpecular</argument>
-						<argument>uBlurring</argument>
-					</arguments>
-				</operation>
-			</operations>
-		</program>
-	</programs>
-</material>)"
-
+		</program>)"