瀏覽代碼

Added LinearColors property to Renderer'; Tweaked particleBuffer random velocity algorithm.

Mark Sibly 8 年之前
父節點
當前提交
0f9b116ccc

+ 2 - 2
modules/mojo3d/graphics/deferredrenderer.monkey2

@@ -18,7 +18,7 @@ Class DeferredRenderer Extends Renderer
 	#rem monkeydoc @hidden
 	#end
 	Method New()
-		Super.New( "MX2_LINEAROUTPUT" )
+		Super.New( True )
 		
 		Print "Creating DeferredRenderer"
 	
@@ -182,7 +182,7 @@ Class DeferredRenderer Extends Renderer
 			pass|=1
 		End
 	
-		_runiforms.SetVec4f( "LightColor",light.Color )
+		_runiforms.SetColor( "LightColor",light.Color )
 		_runiforms.SetFloat( "LightRange",light.Range )
 		_runiforms.SetMat4f( "LightViewMatrix",camera.InverseMatrix * light.Matrix )
 		

+ 2 - 2
modules/mojo3d/graphics/forwardrenderer.monkey2

@@ -22,7 +22,7 @@ Class ForwardRenderer Extends Renderer
 	#rem monkeydoc @hidden
 	#end
 	Method New( direct:Bool )
-		Super.New( direct ? "MX2_SRGBOUTPUT" Else "MX2_LINEAROUTPUT" )
+		Super.New( Not direct )
 		
 		_direct=direct
 		
@@ -166,7 +166,7 @@ Class ForwardRenderer Extends Renderer
 				if light.CastsShadow RenderPointShadows( light ) ; pass|=4
 				pass|=8
 			End
-			_runiforms.SetVec4f( "LightColor",light.Color )
+			_runiforms.SetColor( "LightColor",light.Color )
 			_runiforms.SetFloat( "LightRange",light.Range )
 			_runiforms.SetMat4f( "LightViewMatrix",camera.InverseMatrix * light.Matrix )
 			pass|=2

+ 6 - 1
modules/mojo3d/graphics/material.monkey2

@@ -6,9 +6,11 @@ Namespace mojo3d.graphics
 Class Material Extends Resource
 	
 	Method New()
+	
+		_uniforms=New UniformBlock( 3,True )
 		_blendMode=BlendMode.Opaque
 		_cullMode=CullMode.Back
-		_uniforms=New UniformBlock( 3 )
+		
 		TextureMatrix=New AffineMat3f
 	End		
 	
@@ -105,10 +107,13 @@ Class Material Extends Resource
 	#rem monkeydoc @hidden
 	#end
 	Method New( material:Material )
+
 		_shader=material._shader
 		_uniforms=New UniformBlock( material._uniforms )
+
 		_blendMode=material._blendMode
 		_cullMode=material._cullMode
+
 		TextureMatrix=material.TextureMatrix
 	End
 	

+ 17 - 2
modules/mojo3d/graphics/particlebuffer.monkey2

@@ -9,7 +9,7 @@ Class ParticleBuffer
 
 		_vbuffer=New VertexBuffer( Vertex3fFormat.Instance,_length )
 		
-		_uniforms=New UniformBlock( 4 )
+		_uniforms=New UniformBlock( 4,true )
 		
 		Local vertices:=_vbuffer.AddVertices( _length )
 		
@@ -76,6 +76,7 @@ Class ParticleBuffer
 		Return _coneAngle
 	
 	Setter( angle:Float )
+		Assert( angle>0 And angle<180,"Cone angle must be in the range (0,180)" )
 	
 		_coneAngle=angle
 	End
@@ -168,10 +169,24 @@ Class ParticleBuffer
 
 	Method AddParticle( time:Float )
 	
+		Local r:=Rnd( -Pi,Pi )
+		Local d:=Rnd( 0,Tan( _coneAngle*.5*TwoPi/360.0 ) )
+		
+		Local velocity:=New Vec3f( Cos( r ) * d,Sin( r ) * d,1.0 ).Normalize() * Rnd( _minVelocity,_maxVelocity )
+
+		#rem	
+		Local rx:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
+		Local ry:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
+		
+		Local velocity:=Mat3f.Rotation( rx,ry,0 ) * New Vec3f( 0,0,Rnd( _minVelocity,_maxVelocity ) )
+		#end
+		
+		#rem
 		Local vx:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
 		Local vy:=Sin( Rnd( -_coneAngle*.5,_coneAngle*.5 )*TwoPi/360.0 )
 		Local sp:=Float( Rnd( _minVelocity,_maxVelocity ) )
-		Local velocity:=New Vec3f( vx,vy,1.0 ).Normalize() * sp
+		Local velocity:=New Vec3f( vx,vy,1.0 ) * sp '.Normalize() * sp
+		#end
 			
 		Local vertex:=Cast<Vertex3f Ptr>( _vbuffer.Data )+_index
 		

+ 2 - 1
modules/mojo3d/graphics/particlematerial.monkey2

@@ -9,7 +9,8 @@ Class ParticleMaterial Extends Material
 	#end	
 	Method New()
 
-		Local shader:="material-particle",defs:=Renderer.GetCurrent().ShaderDefs
+		Local shader:="material-particle"
+		Local defs:=Renderer.GetCurrent().ShaderDefs
 			
 		SetShader( Shader.Open( shader,defs ) )
 		

+ 34 - 19
modules/mojo3d/graphics/renderer.monkey2

@@ -5,13 +5,6 @@ Namespace mojo3d.graphics
 #end
 Class Renderer
 	
-	#rem monkeydoc @hidden
-	#end
-	Property ShaderDefs:String()
-		
-		Return _shaderDefs
-	End
-
 	#rem monkeydoc Size of the cascaded shadow map texture.
 	
 	Must be a power of 2 size. Defaults to 1024.
@@ -126,8 +119,8 @@ Class Renderer
 
 		_runiforms.SetTexture( "SkyTexture",_renderScene.SkyTexture )
 		
-		_runiforms.SetVec4f( "ClearColor",_renderScene.ClearColor )
-		_runiforms.SetVec4f( "AmbientDiffuse",_renderScene.AmbientLight )
+		_runiforms.SetColor( "ClearColor",_renderScene.ClearColor )
+		_runiforms.SetColor( "AmbientDiffuse",_renderScene.AmbientLight )
 	
 		Local env:Texture
 		
@@ -193,22 +186,22 @@ Class Renderer
 	Method OnRender( scene:Scene,camera:Camera,device:GraphicsDevice ) Virtual
 	End
 
-	Method New( shaderDefs:String )
+	Method New( linearOutput:Bool )
 		
-		_shaderDefs=shaderDefs
+		_linearOutput=linearOutput
 
-		_rgbaDepthTextures=False	'True'	Not glexts.GL_depth_texture
+		_rgbaDepthTextures=False
 		
-'		If Int( App.GetConfig( "mojod3_rgba_depth_textures","" ) ) _rgbaDepthTextures=True
-			
-		Print "RGBA depth textures="+Int( _rgbaDepthTextures )
+		_shaderDefs+=_linearOutput ? "MX2_LINEAROUTPUT~n" Else "MX2_SRGBOUTPUT~n"
+		
+		If _rgbaDepthTextures _shaderDefs+="MX2_RGBADEPTHTEXTURES~n"
 		
-		If _rgbaDepthTextures _shaderDefs+="~nMX2_RGBADEPTHTEXTURES"
+		Print "Renderer.ShaderDefs="+ShaderDefs
 		
 		_device=New GraphicsDevice( 0,0 )
 		
-		_runiforms=New UniformBlock( 1 )
-		_iuniforms=New UniformBlock( 2 )
+		_runiforms=New UniformBlock( 1,True )
+		_iuniforms=New UniformBlock( 2,True )
 		
 		_device.BindUniformBlock( _runiforms )
 		_device.BindUniformBlock( _iuniforms )
@@ -288,8 +281,15 @@ Class Renderer
 		Else
 			_device.ColorMask=ColorMask.All
 			_device.DepthMask=True
+			
+			Local color:=_renderScene.ClearColor
+			If _linearOutput
+				color.r=Pow( color.r,2.2 )
+				color.g=Pow( color.g,2.2 )
+				color.b=Pow( color.b,2.2 )
+			Endif
 		
-			_device.Clear( _renderScene.ClearColor,1.0 )
+			_device.Clear( color,1.0 )
 
 		Endif
 		
@@ -447,12 +447,27 @@ Class Renderer
 		_device.Scissor=t_scissor
 	End
 
+	Internal
+	
+	Property ShaderDefs:String()
+		
+		Return _shaderDefs
+	End
+	
+	Property LinearOutput:Bool()
+	
+		Return _linearOutput
+	
+	End
+
 	Private
 	
 	Field _rgbaDepthTextures:=False
 	
 	Field _shaderDefs:String
 	
+	Field _linearOutput:bool
+	
 	Field _device:GraphicsDevice
 	Field _runiforms:UniformBlock
 	Field _iuniforms:UniformBlock

+ 1 - 1
modules/mojo3d/graphics/shaders/skybox.glsl

@@ -30,7 +30,7 @@ void main(){
 	
 	vec3 color=textureCube( r_SkyTexture,tv ).rgb;
 	
-#if !defined( MX2_SRGBOUTPUT )
+#if defined( MX2_LINEAROUTPUT )
 	gl_FragColor=vec4( pow( color,vec3( 2.2 ) ),1.0 );
 #else
 	gl_FragColor=vec4( color,1.0 );

+ 2 - 1
modules/mojo3d/graphics/spritematerial.monkey2

@@ -9,7 +9,8 @@ Class SpriteMaterial Extends Material
 	#end	
 	Method New()
 		
-		Local shader:="material-sprite",defs:=Renderer.GetCurrent().ShaderDefs
+		Local shader:="material-sprite"
+		Local defs:=Renderer.GetCurrent().ShaderDefs
 			
 		SetShader( Shader.Open( shader,defs ) )
 		

+ 3 - 3
modules/mojo3d/graphics/watermaterial.monkey2

@@ -12,8 +12,8 @@ Class WaterMaterial Extends Material
 		
 		SetShader( Shader.Open( "material-water" ) )
 		
-		ColorTexture=Texture.ColorTexture( Color.SeaGreen )
-		ColorFactor=Color.White
+		ColorTexture=Texture.ColorTexture( Color.White )
+		ColorFactor=Color.SeaGreen
 		
 		Metalness=0
 		Roughness=0
@@ -51,7 +51,7 @@ Class WaterMaterial Extends Material
 		Return Uniforms.GetColor( "ColorFactor" )
 	
 	Setter( factor:Color )
-		
+	
 		Uniforms.SetColor( "ColorFactor",factor )
 	End
 	

+ 12 - 15
modules/mojo3d/tests/ducks.monkey2

@@ -40,14 +40,15 @@ Class MyWindow Extends Window
 		'create scene
 		'		
 		_scene=Scene.GetCurrent()
+		_scene.ClearColor=Color.Sky
 
 		'add fog effect to scene
 		'		
-		_fog=New FogEffect
-		_fog.Color=Color.Sky
-		_fog.Near=0
-		_fog.Far=50
-		_scene.AddPostEffect( _fog )
+'		_fog=New FogEffect
+'		_fog.Color=Color.Sky
+'		_fog.Near=0
+'		_fog.Far=50
+'		_scene.AddPostEffect( _fog )
 		
 		'create camera
 		'
@@ -59,15 +60,11 @@ Class MyWindow Extends Window
 		
 		'create light
 		'
-'		_light=New Light
-'		_light.Type=LightType.Directional
-'		_light.RotateX( 75 )	'aim directional light downwards
-		
-		_light2=New Light
-		_light2.Type=LightType.Point
-		_light2.Move( 0,20,0 )
-		_light2.Range=40
-		_light2.ShadowsEnabled=True
+		_light=New Light
+		_light.Type=LightType.Point
+		_light.Move( 0,20,0 )
+		_light.Range=40
+		_light.CastsShadow=True
 
 		'create ground
 		'
@@ -140,7 +137,7 @@ Function Main()
 	
 	Local config:=New StringMap<String>
 
-	config["mojo3d_renderer"]="deferred"		'defeault on non-mobile targets.
+'	config["mojo3d_renderer"]="deferred"		'defeault on non-mobile targets.
 
 '	config["mojo3d_renderer"]="forward-direct"	'default on mobile targets. depth buffer must be enabled too.
 '	config["GL_depth_buffer_enabled"]=1

+ 14 - 7
modules/mojo3d/tests/particles.monkey2

@@ -43,25 +43,28 @@ Class MyWindow Extends Window
 		'
 		_light=New Light
 		_light.Rotate( 60,45,0 )	'aim directional light 'down' - Pi/2=90 degrees.
-		_light.ShadowsEnabled=false
 		
 		'create ground
 		'
-		_ground=Model.CreateBox( New Boxf( -50,-1,-50,50,0,50 ),1,1,1,New PbrMaterial( Color.DarkGrey ) )
+		_ground=Model.CreateBox( New Boxf( -50,-1,-50,50,0,50 ),1,1,1,New PbrMaterial( Color.Brown*.5 ) )
 		
 		_particles=New ParticleSystem( 15000 )
 		_particles.RotateX( -90 )	'point upwards!
 		
+		Local pmaterial:=_particles.Material
+		pmaterial.ColorTexture=Texture.Load( "asset::bluspark.png",TextureFlags.FilterMipmap )
+		
 		Local pbuffer:=_particles.ParticleBuffer
 		pbuffer.Gravity=New Vec3f( 0,-9.81,0 )	'gravity in world space in m/s^2.
 		pbuffer.Duration=2.5		'how long a single particle lasts in seconds.
 		pbuffer.Fade=0.0			'how long before paticle starts fading out in seconds.
 		pbuffer.Colors=New Color[]( Color.White,Color.Yellow,Color.Orange,Color.Red )
 		pbuffer.ConeAngle=30		'angle of particle emission cone.
-		pbuffer.MinVelocity=10.0		'min particle velocity.
-		pbuffer.MaxVelocity=10.0		'max particle velocity.
-		pbuffer.MinSize=16.0			'min particle size.
-		pbuffer.MaxSize=16.0		'max particle size.
+		pbuffer.MinVelocity=10.0	'min particle velocity.
+		pbuffer.MaxVelocity=10.0	'max particle velocity.
+		pbuffer.MinSize=24.0		'min particle size.
+		pbuffer.MaxSize=32.0		'max particle size.
+		
 		
 		For Local an:=0 Until 360 Step 45
 			Local pivot:=New Entity
@@ -97,9 +100,13 @@ Function Main()
 	
 	Local config:=New StringMap<String>
 
-'	config["mojo3d_renderer"]="forward"
+'	config["mojo3d_renderer"]="deferred"		'defeault on non-mobile targets.
+
+'	config["mojo3d_renderer"]="forward-direct"	'default on mobile targets. depth buffer must be enabled too.
 '	config["GL_depth_buffer_enabled"]=1
 
+	config["mojo3d_renderer"]="forward"
+		
 	New AppInstance( config )
 	
 	New MyWindow

+ 2 - 7
modules/mojo3d/tests/pbrspheres.monkey2

@@ -69,19 +69,14 @@ Class MyWindow Extends Window
 		
 		_scene.Render( canvas,_camera )
 		
-		canvas.DrawText( "Width="+Width+", Height="+Height+", FPS="+App.FPS,0,Height-16 )
+		canvas.DrawText( "FPS="+App.FPS,Width/2,0,.5,0 )
 	End
 	
 End
 
 Function Main()
 
-	Local config:=New StringMap<String>
-
-	config["mojo3d_renderer"]="forward"
-	config["GL_depth_buffer_enabled"]=1
-
-	New AppInstance( config )
+	New AppInstance
 	
 	New MyWindow
 	

+ 5 - 3
modules/mojo3d/tests/sprites.monkey2

@@ -53,8 +53,6 @@ Class MyWindow Extends Window
 		'
 		Local material:=SpriteMaterial.Load( "asset::Acadia-Tree-Sprite.png" )
 		
-		material.ColorTexture.Flags=TextureFlags.None
-		
 		For Local i:=0 Until 1000
 			
 			Local sprite:=New Sprite( material )
@@ -97,9 +95,13 @@ Function Main()
 	
 	Local config:=New StringMap<String>
 
-'	config["mojo3d_renderer"]="forward"
+'	config["mojo3d_renderer"]="deferred"		'defeault on non-mobile targets.
+
+'	config["mojo3d_renderer"]="forward-direct"	'default on mobile targets. depth buffer must be enabled too.
 '	config["GL_depth_buffer_enabled"]=1
 
+'	config["mojo3d_renderer"]="forward"
+		
 	New AppInstance( config )
 	
 	New MyWindow

+ 1 - 1
modules/mojo3d/tests/water.monkey2

@@ -48,7 +48,7 @@ Class MyWindow Extends Window
 		Local waterMaterial:=New WaterMaterial
 		
 		waterMaterial.ScaleTextureMatrix( 10,10 )
-		waterMaterial.ColorTexture=Texture.ColorTexture( Color.SeaGreen )
+		waterMaterial.ColorFactor=Color.SeaGreen
 		waterMaterial.Roughness=0
 		
 		waterMaterial.NormalTextures=New Texture[](