// ------------------------------- // Cel Shading Section // ------------------------------- vertex_program Ogre/CelShadingVP cg { source Example_CelShading.cg entry_point main_vp profiles vs_1_1 arbvp1 default_params { param_named_auto lightPosition light_position_object_space 0 param_named_auto eyePosition camera_position_object_space param_named_auto worldViewProj worldviewproj_matrix param_named shininess float 10 } } fragment_program Ogre/CelShadingFP cg { source Example_CelShading.cg entry_point main_fp profiles ps_1_1 arbfp1 fp20 } material Examples/CelShading { technique { pass { vertex_program_ref Ogre/CelShadingVP { // map shininess from custom renderable param 1 param_named_auto shininess custom 1 } fragment_program_ref Ogre/CelShadingFP { // map diffuse from custom renderable param 2 param_named_auto diffuse custom 2 // map specular from custom renderable param 2 param_named_auto specular custom 3 } texture_unit { texture cel_shading_diffuse.png 1d tex_address_mode clamp filtering none } texture_unit { texture cel_shading_specular.png 1d tex_address_mode clamp filtering none tex_coord_set 1 } texture_unit { texture cel_shading_edge.png 1d tex_address_mode clamp filtering none tex_coord_set 2 } } } } //------------------------ // Bump mapping section //------------------------ // Bump map vertex program, support for this is required vertex_program Examples/BumpMapVP cg { source Example_BumpMapping.cg entry_point main_vp profiles vs_1_1 arbvp1 } // Bump map fragment program, support for this is optional fragment_program Examples/BumpMapFP cg { source Example_BumpMapping.cg entry_point main_fp profiles ps_1_1 arbfp1 fp20 } // Bump map vertex program shadow receiver vertex_program Examples/BumpMapVPShadowRcv cg { source Example_BumpMapping.cg entry_point main_shadowreceiver_vp profiles vs_1_1 arbvp1 } // Bump map fragment program shadow receiver, support for this is optional fragment_program Examples/BumpMapFPShadowRcv cg { source Example_BumpMapping.cg entry_point main_shadowreceiver_fp profiles ps_1_1 arbfp1 fp20 } // Bump map with specular vertex program, support for this is required vertex_program Examples/BumpMapVPSpecular cg { source Example_BumpMapping.cg entry_point specular_vp profiles vs_1_1 arbvp1 } // Bump map fragment program, support for this is optional fragment_program Examples/BumpMapFPSpecular cg { source Example_BumpMapping.cg entry_point specular_fp profiles ps_1_1 arbfp1 fp20 } // Single light material, less passes (one pass on a 4-unit card) material Examples/BumpMapping/SingleLight { // Preferred technique, uses vertex and fragment programs // to support a single coloured light technique { pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Fragment program fragment_program_ref Examples/BumpMapFP { param_named_auto lightDiffuse light_diffuse_colour 0 } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp } // Decal texture_unit { texture RustySteel.jpg } } } // Fallback technique, uses vertex program but only fixed-function // fragment shading, which does not support coloured light technique { pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp colour_op_ex dotproduct src_texture src_current colour_op_multipass_fallback dest_colour zero } // Decal texture_unit { texture RustySteel.jpg } } } } // Any number of lights, diffuse material Examples/BumpMapping/MultiLight { // This is the preferred technique which uses both vertex and // fragment programs, supports coloured lights technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Fragment program fragment_program_ref Examples/BumpMapFP { param_named_auto lightDiffuse light_diffuse_colour 0 } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp } } // Decal pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture RustedMetal.jpg } } } // This is the fallback which cards which don't have fragment program // support will use // Note that it still requires vertex program support technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map, with dot product on bump map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp colour_op_ex dotproduct src_texture src_current colour_op_multipass_fallback dest_colour zero } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture RustedMetal.jpg } } } } // Any number of lights, diffuse and specular material Examples/BumpMapping/MultiLightSpecular { // This is the preferred technique which uses both vertex and // fragment programs, supports coloured lights technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVPSpecular { param_named_auto lightPosition light_position_object_space 0 param_named_auto eyePosition camera_position_object_space param_named_auto worldViewProj worldviewproj_matrix } // Fragment program fragment_program_ref Examples/BumpMapFPSpecular { param_named_auto lightDiffuse light_diffuse_colour 0 param_named_auto lightSpecular light_specular_colour 0 } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp } // Normalisation cube map #2 texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 2 tex_address_mode clamp } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture RustedMetal.jpg } } } // This is the fallback which cards which don't have fragment program // support will use, NB does not support specular colour // Note that it still requires vertex program support technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Base bump map texture_unit { texture NMBumpsOut.png colour_op replace } // Normalisation cube map, with dot product on bump map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp colour_op_ex dotproduct src_texture src_current colour_op_multipass_fallback dest_colour zero } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture RustedMetal.jpg } } } } //--------------------------- // Projective texture section //--------------------------- vertex_program Examples/TexProjectionVP cg { source Example_Projection.cg entry_point generalPurposeProjection_vp profiles vs_1_1 arbvp1 } fragment_program Examples/TexProjectionFP cg { source Example_Projection.cg entry_point generalPurposeProjection_fp // sorry, ps_1_1 can't do this, fp20 can though profiles ps_2_0 arbfp1 fp20 } material Examples/GeneralTexProjection { technique { pass { vertex_program_ref Examples/TexProjectionVP { param_named_auto worldViewProjMatrix worldviewproj_matrix param_named_auto worldMatrix world_matrix // You'll need to update the tex projection, I suggest using // the Frustum class //param_named_auto texWorldViewProj worldviewproj_matrix } fragment_program_ref Examples/TexProjectionFP { // no params } texture_unit { // Project the OGRE logo texture ogrelogo.png tex_address_mode clamp } } } } //---------------------------- // Distortion effects //---------------------------- vertex_program Examples/FresnelRefractReflectVP cg { source Example_Fresnel.cg entry_point main_vp profiles vs_1_1 arbvp1 } fragment_program Examples/FresnelRefractReflectFP cg { source Example_Fresnel.cg entry_point main_fp // sorry, ps_1_1 and fp20 can't do this profiles ps_2_0 arbfp1 } fragment_program Examples/FresnelRefractReflectPS asm { source Example_FresnelPS.asm // sorry, only for ps_1_4 :) syntax ps_1_4 } material Examples/FresnelReflectionRefraction { // ps_2_0 / arbfp1 technique { pass { vertex_program_ref Examples/FresnelRefractReflectVP { param_named_auto worldViewProjMatrix worldviewproj_matrix param_named_auto eyePosition camera_position_object_space param_named fresnelBias float -0.3 param_named fresnelScale float 1.4 param_named fresnelPower float 8 param_named_auto timeVal time 0.05 param_named scroll float 1 param_named scale float 4 param_named noise float 1 // scroll and noisePos will need updating per frame } fragment_program_ref Examples/FresnelRefractReflectFP { param_named distortionRange float 0.025 param_named tintColour float4 0 0 0 1 } // Noise texture_unit { // Perlin noise volume texture perlinvolume.dds 3d // min / mag filtering, no mip filtering linear linear none } // Reflection texture_unit { // Will be filled in at runtime texture Reflection tex_address_mode clamp // needed by ps.1.4 tex_coord_set 1 } // Refraction texture_unit { // Will be filled in at runtime texture Refraction tex_address_mode clamp // needed by ps.1.4 tex_coord_set 2 } } } // ATI 8500 + technique { pass { vertex_program_ref Examples/FresnelRefractReflectVP { param_named_auto worldViewProjMatrix worldviewproj_matrix param_named_auto eyePosition camera_position_object_space param_named fresnelBias float -0.3 param_named fresnelScale float 1.4 param_named fresnelPower float 8 param_named_auto timeVal time 0.05 param_named scroll float 1 param_named scale float 4 param_named noise float 1 // scroll and noisePos will need updating per frame } // for ATI RADEON 8500 - 9200 fragment_program_ref Examples/FresnelRefractReflectPS { // distortionRange param_indexed 0 float 0.025 // tintColour param_indexed 1 float4 0.05 0.12 0.15 1 } // Noise texture_unit { // Perlin noise volume texture perlinvolume.dds 3d // min / mag filtering, no mip filtering linear linear none } // Reflection texture_unit { // Will be filled in at runtime texture Reflection tex_address_mode clamp // needed by ps.1.4 tex_coord_set 1 } // Refraction texture_unit { // Will be filled in at runtime texture Refraction tex_address_mode clamp // needed by ps.1.4 tex_coord_set 2 } } } } // Normal-mapped Athene statue material Examples/Athene/NormalMapped { // This is the preferred technique which uses both vertex and // fragment programs, supports coloured lights technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Fragment program fragment_program_ref Examples/BumpMapFP { param_named_auto lightDiffuse light_diffuse_colour 0 } // texture shadow receiver program shadow_receiver_vertex_program_ref Examples/BumpMapVPShadowRcv { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix param_named_auto worldMatrix world_matrix param_named_auto texViewProj texture_viewproj_matrix } // Additive texture shadow receiver program shadow_receiver_fragment_program_ref Examples/BumpMapFPShadowRcv { param_named_auto lightDiffuse light_diffuse_colour 0 } // Base bump map texture_unit { texture atheneNormalMap.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp } } // Decal pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture egyptrockyfull.jpg } } } // This is the fallback which cards which don't have fragment program // support will use // Note that it still requires vertex program support technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Base bump map texture_unit { texture atheneNormalMap.png colour_op replace } // Normalisation cube map, with dot product on bump map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp colour_op_ex dotproduct src_texture src_current colour_op_multipass_fallback dest_colour zero } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture egyptrockyfull.jpg } } } } // Basic Athene statue material Examples/Athene/Basic { technique { pass { ambient 0.3 0.3 0.3 diffuse 1.0 1.0 0.9 texture_unit { texture egyptrockyfull.jpg } } } } // Any number of lights, diffuse and specular material Examples/Athene/NormalMappedSpecular { // This is the preferred technique which uses both vertex and // fragment programs, supports coloured lights technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVPSpecular { param_named_auto lightPosition light_position_object_space 0 param_named_auto eyePosition camera_position_object_space param_named_auto worldViewProj worldviewproj_matrix } // Fragment program fragment_program_ref Examples/BumpMapFPSpecular { param_named_auto lightDiffuse light_diffuse_colour 0 param_named_auto lightSpecular light_specular_colour 0 } // Base bump map texture_unit { texture atheneNormalMap.png colour_op replace } // Normalisation cube map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp } // Normalisation cube map #2 texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 2 tex_address_mode clamp } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture egyptrockyfull.jpg } } } // This is the fallback which cards which don't have fragment program // support will use, NB does not support specular colour // Note that it still requires vertex program support technique { // Base ambient pass pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 1 1 1 diffuse 0 0 0 specular 0 0 0 0 // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named_auto ambient ambient_light_colour } } // Now do the lighting pass // NB we don't do decal texture here because this is repeated per light pass { // base colours, not needed for rendering, but as information // to lighting pass categorisation routine ambient 0 0 0 // do this for each light iteration once_per_light scene_blend add // Vertex program reference vertex_program_ref Examples/BumpMapVP { param_named_auto lightPosition light_position_object_space 0 param_named_auto worldViewProj worldviewproj_matrix } // Base bump map texture_unit { texture atheneNormalMap.png colour_op replace } // Normalisation cube map, with dot product on bump map texture_unit { cubic_texture nm.png combinedUVW tex_coord_set 1 tex_address_mode clamp colour_op_ex dotproduct src_texture src_current colour_op_multipass_fallback dest_colour zero } } // Decal pass pass { lighting off // Really basic vertex program // NB we don't use fixed function here because GL does not like // mixing fixed function and vertex programs, depth fighting can // be an issue vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture { param_named_auto worldViewProj worldviewproj_matrix param_named ambient float4 1 1 1 1 } scene_blend dest_colour zero texture_unit { texture egyptrockyfull.jpg } } } }