Panagiotis Christopoulos Charitos 10 роки тому
батько
коміт
2d6c2fa074

+ 4 - 3
include/anki/renderer/Bs.h

@@ -16,9 +16,7 @@ namespace anki {
 /// Blending stage. The objects that blend must be handled differently
 class Bs: public RenderingPass
 {
-	friend class Renderer;
-
-private:
+public:
 	Bs(Renderer* r)
 	:	RenderingPass(r) 
 	{}
@@ -27,6 +25,9 @@ private:
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 	ANKI_USE_RESULT Error run(GlCommandBufferHandle& cmdb);
+
+private:
+	GlFramebufferHandle m_fb;
 };
 
 /// @}

+ 31 - 0
shaders/BsCommonFrag.glsl

@@ -21,15 +21,18 @@ layout(location = 0) out vec4 outColor;
 #	define texture_DEFINED
 #endif
 
+//==============================================================================
 #define getAlpha_DEFINED
 float getAlpha()
 {
 	return inAlpha;
 }
 
+//==============================================================================
 #define getPointCoord_DEFINED
 #define getPointCoord() gl_PointCoord
 
+//==============================================================================
 #if PASS == COLOR
 #	define writeGBuffer_DEFINED
 void writeGBuffer(in vec4 color)
@@ -38,6 +41,7 @@ void writeGBuffer(in vec4 color)
 }
 #endif
 
+//==============================================================================
 #if PASS == COLOR
 #	define particleAlpha_DEFINED
 void particleAlpha(in sampler2D tex, in float alpha)
@@ -48,6 +52,7 @@ void particleAlpha(in sampler2D tex, in float alpha)
 }
 #endif
 
+//==============================================================================
 #if PASS == COLOR
 #	define particleSoftTextureAlpha_DEFINED
 void particleSoftTextureAlpha(in sampler2D depthMap, in sampler2D tex, 
@@ -69,6 +74,7 @@ void particleSoftTextureAlpha(in sampler2D depthMap, in sampler2D tex,
 }
 #endif
 
+//==============================================================================
 #if PASS == COLOR
 #	define particleSoftColorAlpha_DEFINED
 void particleSoftColorAlpha(in sampler2D depthMap, in vec3 icolor, 
@@ -92,3 +98,28 @@ void particleSoftColorAlpha(in sampler2D depthMap, in vec3 icolor,
 	writeGBuffer(color);
 }
 #endif
+
+//==============================================================================
+#if PASS == COLOR
+#	define fog_DEFINED
+void fog(in sampler2D depthMap, in vec3 color, in float fogScale)
+{
+	const vec2 screenSize = vec2(
+		1.0 / float(ANKI_RENDERER_WIDTH), 
+		1.0 / float(ANKI_RENDERER_HEIGHT));
+
+	vec2 texCoords = gl_FragCoord.xy * screenSize;
+	float depth = texture(depthMap, texCoords);
+	float zNear = 0.2;
+	float zFar = 200.0;
+	float linearDepth = (2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
+
+	float depth2 = gl_FragCoord.z;
+	float linearDepth2 = (2.0 * zNear) / (zFar + zNear - depth2 * (zFar - zNear));
+
+	float diff = linearDepth - linearDepth2;
+
+	//writeGBuffer(vec4(vec3(diff * fogScale), 1.0));
+	writeGBuffer(vec4(color, diff * fogScale));
+}
+#endif

+ 13 - 6
shaders/BsCommonVert.glsl

@@ -8,9 +8,9 @@
 #define DEFAULT_FLOAT_PRECISION mediump
 #pragma anki include "shaders/MsBsCommon.glsl"
 
-layout(location = POSITION_LOCATION) in vec3 inPosition;
-layout(location = SCALE_LOCATION) in float inScale;
-layout(location = ALPHA_LOCATION) in float inAlpha;
+layout(location = POSITION_LOCATION) in vec3 in_position;
+layout(location = SCALE_LOCATION) in float in_scale;
+layout(location = ALPHA_LOCATION) in float in_alpha;
 
 layout(location = 1) flat out float outAlpha;
 
@@ -34,13 +34,20 @@ void setPositionVec4(in vec4 pos)
 	gl_Position = pos;
 }
 
+//==============================================================================
+#define writePositionMvp_DEFINED
+void writePositionMvp(in mat4 mvp)
+{
+	gl_Position = mvp * vec4(in_position, 1.0);
+}
+
 //==============================================================================
 #define particle_DEFINED
 void particle(in mat4 mvp)
 {
-	gl_Position = mvp * vec4(inPosition, 1);
-	outAlpha = inAlpha;
-	gl_PointSize = inScale * float(ANKI_RENDERER_WIDTH) / gl_Position.w;
+	gl_Position = mvp * vec4(in_position, 1);
+	outAlpha = in_alpha;
+	gl_PointSize = in_scale * float(ANKI_RENDERER_WIDTH) / gl_Position.w;
 }
 
 //==============================================================================

+ 2 - 1
shaders/IsLp.frag.glsl

@@ -10,7 +10,7 @@
 #define PI 3.1415926535
 
 #define ATTENUATION_FINE 0
-#define ATTENUATION_BOOST (0.0)
+#define ATTENUATION_BOOST (0.1)
 
 #ifndef BRDF
 #	define BRDF 1
@@ -101,6 +101,7 @@ float computeAttenuationFactor(
 
 	float att = (fragLightDist * lightRadius) + (1.0 + ATTENUATION_BOOST);
 	att = max(0.0, att);
+	att *= att;
 
 	return att;
 }

+ 17 - 1
src/renderer/Bs.cpp

@@ -17,7 +17,21 @@ Bs::~Bs()
 //==============================================================================
 Error Bs::init(const ConfigSet&)
 {
-	return ErrorCode::NONE;
+	GlCommandBufferHandle cmdb;
+	Error err = cmdb.create(&getGlDevice());
+	if(err)
+	{
+		return err;
+	}
+
+	err = m_fb.create(
+		cmdb,
+		{{m_r->getIs()._getRt(), GL_COLOR_ATTACHMENT0}, 
+		{m_r->getMs()._getDepthRt(), GL_DEPTH_ATTACHMENT}});
+
+	cmdb.flush();
+
+	return err;
 }
 
 //==============================================================================
@@ -25,6 +39,8 @@ Error Bs::run(GlCommandBufferHandle& cmdb)
 {
 	Error err = ErrorCode::NONE;
 
+	m_fb.bind(cmdb, false);
+
 	cmdb.enableDepthTest(true);
 	cmdb.setDepthWriteMask(false);
 	cmdb.enableBlend(true);

+ 3 - 2
src/renderer/Is.cpp

@@ -817,10 +817,11 @@ void Is::binLight(
 //==============================================================================
 void Is::setState(GlCommandBufferHandle& cmdBuff)
 {
-	Bool drawToDefaultFbo = !m_r->getPps().getEnabled() 
+	/*Bool drawToDefaultFbo = !m_r->getPps().getEnabled() 
 		&& !m_r->getDbg().getEnabled() 
 		&& !m_r->getIsOffscreen()
-		&& m_r->getRenderingQuality() == 1.0;
+		&& m_r->getRenderingQuality() == 1.0;*/
+	Bool drawToDefaultFbo = false;
 
 	if(drawToDefaultFbo)
 	{

+ 4 - 3
src/renderer/MainRenderer.cpp

@@ -73,13 +73,14 @@ Error MainRenderer::render(SceneGraph& scene)
 	err = Renderer::render(scene, jobs);
 	if(err) return err;
 
-	Bool alreadyDrawnToDefault = 
+	/*Bool alreadyDrawnToDefault = 
 		!getDbg().getEnabled()
-		&& getRenderingQuality() == 1.0;
+		&& getRenderingQuality() == 1.0;*/
+	Bool alreadyDrawnToDefault = false;
 
 	if(!alreadyDrawnToDefault)
 	{
-		getDefaultFramebuffer().bind(lastJobs, false);
+		getDefaultFramebuffer().bind(lastJobs, true);
 		lastJobs.setViewport(0, 0, 
 			getDefaultFramebufferWidth(), getDefaultFramebufferHeight());
 

+ 3 - 2
src/renderer/Pps.cpp

@@ -135,10 +135,11 @@ Error Pps::run(GlCommandBufferHandle& cmdBuff)
 		if(err) return err;
 	}
 
-	Bool drawToDefaultFbo = 
+	/*Bool drawToDefaultFbo = 
 		!m_r->getDbg().getEnabled() 
 		&& !m_r->getIsOffscreen()
-		&& m_r->getRenderingQuality() == 1.0;
+		&& m_r->getRenderingQuality() == 1.0;*/
+	Bool drawToDefaultFbo = false;
 
 	if(drawToDefaultFbo)
 	{

+ 3 - 3
src/renderer/Renderer.cpp

@@ -193,9 +193,6 @@ Error Renderer::render(SceneGraph& scene,
 		if(err) return err;
 	}
 
-	err = m_dp.run(cmdBuff[1]);
-	if(err) return err;
-
 	ANKI_COUNTER_START_TIMER(RENDERER_IS_TIME);
 	err = m_is.run(cmdBuff[1]);
 	if(err) return err;
@@ -204,6 +201,9 @@ Error Renderer::render(SceneGraph& scene,
 	err = m_bs.run(cmdBuff[1]);
 	if(err) return err;
 
+	err = m_dp.run(cmdBuff[1]);
+	if(err) return err;
+
 	ANKI_COUNTER_START_TIMER(RENDERER_PPS_TIME);
 	if(m_pps.getEnabled())
 	{

+ 17 - 24
testapp/Main.cpp

@@ -41,7 +41,7 @@ App* app;
 ModelNode* horse;
 PerspectiveCamera* cam;
 
-#define NO_PLAYER 1
+#define NO_PLAYER 0
 
 
 //==============================================================================
@@ -59,7 +59,7 @@ Error init()
 	MainRenderer& renderer = app->getMainRenderer();
 	ResourceManager& resources = app->getResourceManager();
 
-	scene.setAmbientColor(Vec4(0.1, 0.05, 0.05, 0.0) * 0.8);
+	scene.setAmbientColor(Vec4(0.1, 0.05, 0.05, 0.0) * 2.8);
 
 	if(getenv("PROFILE"))
 	{
@@ -75,6 +75,11 @@ Error init()
 		toRad(ang), 0.2, 200.0);
 	scene.setActiveCamera(cam);
 
+	cam->getComponent<MoveComponent>().
+		setLocalTransform(Transform(Vec4(0.0),
+		Mat3x4(Euler(toRad(0.0), toRad(180.0), toRad(0.0))),
+		1.0));
+
 #if NO_PLAYER
 	cam->getComponent<MoveComponent>().
 		setLocalTransform(Transform(Vec4(-5.0, 10.0, -3.0, 0.0),
@@ -255,7 +260,7 @@ Error init()
 	{
 		ScriptResourcePointer script;
 
-		err = script.load("maps/adis2/scene.lua", &resources);
+		err = script.load("maps/adis/scene.lua", &resources);
 		if(err) return err;
 
 		err = app->getScriptManager().evalString(script->getSource());
@@ -271,17 +276,15 @@ Error init()
 
 #endif
 
-#if 0
-	PhysicsCollisionShape::Initializer initc;
-	auto box = 
-		scene._getPhysicsWorld().newCollisionShape<PhysicsBox>(
-		initc, Vec3(70.0));
-
-	PhysicsBody::Initializer init;
-	init.m_shape = box;
-	init.m_startTrf = Transform(Vec4(0.0, -15, 0, 0), 
-		Mat3x4(Axisang(toRad(0.0), Vec3(1, 0, 0))), 1.0);
-	scene._getPhysicsWorld().newBody<PhysicsBody>(init);
+#if 1
+	{
+		ModelNode* fog;
+		scene.newSceneNode<ModelNode>("fog", fog, 
+			"models/fog/volumetric_fog_box.ankimdl");
+		MoveComponent& move = fog->getComponent<MoveComponent>();
+		move.setLocalOrigin(Vec4(10.0, -16.5, 0.0, 0.0));
+		move.setLocalScale(20.0);
+	}
 #endif
 
 	return ErrorCode::NONE;
@@ -445,16 +448,6 @@ Error mainLoopExtra(App& app, void*, Bool& quit)
 		mover->scale(-scale);
 	}
 #endif
-#if 0
-	if(in.getKey(KeyCode::P) == 1)
-	{
-		std::cout << "{Vec3(" 
-			<< mover->getWorldTransform().getOrigin().toString()
-			<< "), Quat(" 
-			<< Quat(mover->getWorldTransform().getRotation()).toString()
-			<< ")}," << std::endl;
-	}
-#endif
 
 #if NO_PLAYER
 	if(in.getMousePosition() != Vec2(0.0))