Join us at the Oolite Anniversary Party -- London, 7th July 2024, 1pm
More details in this thread.

CTD - Error Log Posted

For test results, bug reports, announcements of new builds etc.

Moderators: winston, another_commander, Getafix

User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Phoenix4 wrote:
Commies 2.10 was working fine with full shaders - but the moment I added 'griff_shipset_dizzy's_all_in_1.oxp' I was viewing the ship models again - and when 'Collective ZGF' appeared it crashed!

Do these OXP's hate each other? :D

Cheers,
Px4
Could you instal this oxp. (Only 12 kb large) It overwrites part of the original station mesh. (Without the dock and flashers). I just loaded the mesh in wingz, exported it again and converted it back to a dat file. (Just hoping whatever was wrong is removed in the wingz export)
Phoenix4
Dangerous
Dangerous
Posts: 85
Joined: Wed Feb 01, 2006 1:35 pm

Post by Phoenix4 »

Hi Eric,

I followed your advice and installed the Commies-Test OXP alongside Commies 2.10 and 'griff_shipset_dizzy's_all_in_1.oxp'.

This time I was able to see the Collective ZGF as well as all the Griff ships in Full shader detail. :D The only thing I noticed was a slight flickering on the factory 'roof' texture.

Looks like it worked. 8)

Is there a way of 'merging' the 2 Commie mods?

@ Diziet, I'll follow your step-by-step again and see what I get.

Thanks,
Px4


EDIT: If it's helpful, here's the contents of the Latest.log file after using the 3 OXP's above:


[log.header]: Opening log for Oolite version 1.73.4 (x86-32 test release) under Windows at 2010-05-07 18:50:51 +0100.
2 processors detected.
Oolite Options: [Procedural Planets] [Docking Clearance] [Wormhole Scanner] [Target Incoming Missiles]

Note that the contents of the log file can be adjusted by editing logcontrol.plist.

[joystickHandler.init]: Number of joysticks detected: 0
[display.mode.list.native]: Windows native resolution detected: 1680 x 1050
[rendering.opengl.version]: OpenGL renderer version: 2.1.2 ("2.1.2")
Vendor: NVIDIA Corporation
Renderer: GeForce Go 7950 GTX/PCI/SSE2
[rendering.opengl.extensions]: OpenGL extensions (125):
GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_imaging GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shadow GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_float GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two GL_ARB_texture_rectangle GL_ARB_transpose_matrix GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_texture_float GL_ATI_texture_mirror_once GL_S3_s3tc GL_EXT_texture_env_add GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_depth_bounds_test GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object GL_EXT_gpu_program_parameters GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap GL_EXT_texture3D GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_sRGB GL_EXT_timer_query GL_EXT_vertex_array GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_copy_depth_to_color GL_NV_depth_clamp GL_NV_fence GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_framebuffer_multisample_coverage GL_NV_half_float GL_NV_light_max_exponent GL_NV_multisample_filter_hint GL_NV_occlusion_query GL_NV_packed_depth_stencil GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_texgen_reflection GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_expand_normal GL_NV_texture_rectangle GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_NVX_conditional_render GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum GL_WIN_swap_hint WGL_EXT_swap_control
[searchPaths.dumpAll]: ---> OXP search paths:
(Resources, ../AddOns, ../AddOns/Commies.oxp, "../AddOns/D-Commies-test.oxp", "../AddOns/griff_shipset_dizzy's_all_in_1.oxp")
[dataCache.rebuild.explicitFlush]: Cache explicitly flushed with shift key. Rebuilding from scratch.
[shipData.load.begin]: Loading ship data...
[script.load.world.listAll]: Loaded 6 world scripts: "communist_population" 2.09, "oolite-cloaking-device" 1.73.4, "oolite-constrictor-hunt" 1.73.4, "oolite-nova" 1.73.4, "oolite-thargoid-plans" 1.73.4, "oolite-trumbles" 1.73.4
[dataCache.willWrite]: About to write data cache.
[dataCache.write.success]: Wrote data cache.
[script.load.world.listAll]: Loaded 6 world scripts: "communist_population" 2.09, "oolite-cloaking-device" 1.73.4, "oolite-constrictor-hunt" 1.73.4, "oolite-nova" 1.73.4, "oolite-thargoid-plans" 1.73.4, "oolite-trumbles" 1.73.4
[gameController.exitApp]: .GNUstepDefaults synchronized.

Closing log at 2010-05-07 18:54:55 +0100.
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Phoenix4 wrote:
Hi Eric,

I followed your advice and installed the Commies-Test OXP alongside Commies 2.10 and 'griff_shipset_dizzy's_all_in_1.oxp'.

This time I was able to see the Collective ZGF as well as all the Griff ships in Full shader detail. :D The only thing I noticed was a slight flickering on the factory 'roof' texture.

Looks like it worked. 8)

Is there a way of 'merging' the 2 Commie mods?
Put the .dat file from the Models folder into the models folder of commies. If crashes really stop I'll update commies so it won't crash with others of your card type.

The flickering of the roof texture is okay I think. It flickered also then I looked in Wingz. It could be a deliberate effect as that part of the texture also contains an alpha channel with roofing lines.

Edit: that roof with solar cells asked for a strong reflection map:

Image
Phoenix4
Dangerous
Dangerous
Posts: 85
Joined: Wed Feb 01, 2006 1:35 pm

Post by Phoenix4 »

Hi Eric,

OK, this makes no sense...

It was working OK when using Commies OXP, Commies-Test and Griffs Ships.

When I moved the .DAT file from the Commies-Test OXP to Commies it didn't work. I get the same CTD with just those 2 OXP's running.

So, I removed all OXP's and put it back to the earlier 'working' version, namely:

Commies.OXP (v2.10)
Commies-Test
Griff Ships

Now it CTD's again!

Each time I made these changes I reloaded with the Shift key, and the changes have been represented in the Latest.log file.

I really don't know what is going on. :?

It works one minute, and not the next.

By the way, this is the error I see as soon as the Collective ZGF appears on-screen:

Image
Free Image Hosting by ImageBam.com

Cheers,
Px4
User avatar
Svengali
Commander
Commander
Posts: 2370
Joined: Sat Oct 20, 2007 2:52 pm

Post by Svengali »

Please check the mode of Nvidias thread optimization, Powermizer and Vsync and report it. You can get the current status in Nvidias control panel (in most cases via right click on desktop -> NVIDIA Control Panel).
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Phoenix4 wrote:
Hi Eric,

OK, this makes no sense...

It was working OK when using Commies OXP, Commies-Test and Griffs Ships.

When I moved the .DAT file from the Commies-Test OXP to Commies it didn't work. I get the same CTD with just those 2 OXP's running.

So, I removed all OXP's and put it back to the earlier 'working' version, namely:

Commies.OXP (v2.10)
Commies-Test
Griff Ships

Now it CTD's again!
I am still clue-less. But something in the station is unique for the station and affects graphic cards.

Maybe smoothing has an influence. Look for the comfactory entry in shipdata.plist. Try to change

Code: Select all

		<key>smooth</key>
		<true/>
into

Code: Select all

		<key>smooth</key>
		<false/>
And when that not helps, try removing the alpha channel of the roofing texture. To be honest, I have no clue what an alpha channel did in an oxp for Oolite 1.65.

The smoothing itself has wrong effects on the station. Only the chimney and the tank should be smoothened. Now also the faces that should be flat become a slight curvature. Specially the top of the chimney looks bad in the current release. I added smoothing groups to make that only the round objects are smoothened. (See my previous picture) You can download a testfile here (Same link as before). The alpha channel is removed and the model has smoothing groups. I reinstalled the subentities as removing them had no positive effect.
Phoenix4
Dangerous
Dangerous
Posts: 85
Joined: Wed Feb 01, 2006 1:35 pm

Post by Phoenix4 »

Hi Eric, no joy I'm afraid. :(

I changed the smoothing from True to False and that had no effect - it still CTD.

I then tried Commies 2.10 alongside the new testfile. All works with no shaders, but a CTD when shaders are applied.

I'm at a loss to understand it. Thing is, before recently installing the latest version of Oolite for PC I originally had 1.65 and your OXP worked fine with that. All very odd... :?

@ Svengali, I've taken screenshots (below) of the nVidia Control Panel screens. I set the Base Profile to Default - but there is no effect with Oolite and the shaders problem. On screen 4 you will see the 'Use Advanced Settings' selection - that screen links to list in the first 2 images.

Cheers,

Px4

Image Image Image Image Image
Free Image Hosting by ImageBam.com
User avatar
Svengali
Commander
Commander
Posts: 2370
Joined: Sat Oct 20, 2007 2:52 pm

Post by Svengali »

Please switch the threading off (for testing) and try to reproduce the CTDs. You'll probably get a bit stuttering then when playing Oolite (based on your other components), but it could be a conflict with Oolites threading (and maybe the Core2Duo's architecture), caused by DX9's wrapping.

If this doesn't help - which version of DirectX are you running? The last version for DX9 is from Feb 2010...

Edit: The stuttering does only happen in trunk then. So v1.73.4 shouldn't be affected at all.
Phoenix4
Dangerous
Dangerous
Posts: 85
Joined: Wed Feb 01, 2006 1:35 pm

Post by Phoenix4 »

Guys, the results are in! :D

When I turn off Threading Optimisation I can view all the Commies ships and Griffs Ships without any problem.

To double check I left only the Commies.OXP (v2.10) and the latest test file D-Commies-test2.oxp in the Addons folder.

When Threading Optimisation was turned on and shaders were set to full I got a CTD. I then switched threading off and the Collective ZGF was visible without any problems. I repeated the test several times and each time optimisation was turned on I got another CTD! :shock:

Every time I launched Oolite I used the Shift key to clear the cache.

As for DirectX I'm currently running 9.0c (4.09.9999.0904).

So I'm guessing the overall problem is the threading issue? Can this be resolved or should I now play Oolite with Optimisation switched off each time, although I assume that will have performance issues?

Cheers all! 8)

Px4
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Phoenix4 wrote:
Guys, the results are in! :D

.....

So I'm guessing the overall problem is the threading issue? Can this be resolved or should I now play Oolite with Optimisation switched off each time, although I assume that will have performance issues?

Cheers all! 8)

Px4
Maybe the main problem with that station is than complexity. It has 446 faces. I that case there is little to be done with the oxp other than to remove it. Or, as the station is only very rare placed near the sun, you could only remove the station.

Look in shipdata.plist for:

Code: Select all

	<key>comfactory</key>
	<dict>
		<key>ai_type</key>
		<string>comfactoryAI.plist</string>
		<key>beacon</key>
		<string>F-actory</string>
		<key>bounty</key>
		<integer>0</integer>
		<key>cargo_type</key>
		<string>CARGO_NOT_CARGO</string>
		<key>conditions</key>
		<array>
			<string>systemGovernment_number equal 4</string>
		</array>
Than change the last 4 into 40. That government does not exist and the station will fail to add. And in demoships.plist you should remove the line containing: comfactory. You'll be able to play further with commies. And the log will remind you every time when it failed to add the station. :wink:
Phoenix4
Dangerous
Dangerous
Posts: 85
Joined: Wed Feb 01, 2006 1:35 pm

Post by Phoenix4 »

Hi Eric,

OK, earlier I moved the 3 texture files and the .DAT file from the Commies test OXP to Commies.OXP (v2.10). I didn't move the shipdata.plist.

Instead I've edited the shipdata.plist file in Commies.OXP (v2.10) to read:

</dict>
<key>comfactory</key>
<dict>
<key>ai_type</key>
<string>comfactoryAI.plist</string>
<key>beacon</key>
<string>F-actory</string>
<key>bounty</key>
<integer>0</integer>
<key>cargo_type</key>
<string>CARGO_NOT_CARGO</string>
<key>conditions</key>
<array>
<string>systemGovernment_number equal 40</string>
</array>

And in demoships.plist I've removed this line:

<string>comfactory</string>

Is that correct? :?:

EDIT: Just launched Oolite (with Shift), and when viewing the ships with Shaders at Full no Collective ZGF appears - and everything else is there. I've posted the contents of the Latest.log file below if it helps.

Cheers,
Px4

[log.header]: Opening log for Oolite version 1.73.4 (x86-32 test release) under Windows at 2010-05-08 22:55:45 +0100.
2 processors detected.
Oolite Options: [Procedural Planets] [Docking Clearance] [Wormhole Scanner] [Target Incoming Missiles]

Note that the contents of the log file can be adjusted by editing logcontrol.plist.

[joystickHandler.init]: Number of joysticks detected: 0
[display.mode.list.native]: Windows native resolution detected: 1680 x 1050
[rendering.opengl.version]: OpenGL renderer version: 2.1.2 ("2.1.2")
Vendor: NVIDIA Corporation
Renderer: GeForce Go 7950 GTX/PCI/SSE2
[rendering.opengl.extensions]: OpenGL extensions (125):
GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_imaging GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shadow GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_float GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two GL_ARB_texture_rectangle GL_ARB_transpose_matrix GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_texture_float GL_ATI_texture_mirror_once GL_S3_s3tc GL_EXT_texture_env_add GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_depth_bounds_test GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object GL_EXT_gpu_program_parameters GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap GL_EXT_texture3D GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_sRGB GL_EXT_timer_query GL_EXT_vertex_array GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_copy_depth_to_color GL_NV_depth_clamp GL_NV_fence GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_framebuffer_multisample_coverage GL_NV_half_float GL_NV_light_max_exponent GL_NV_multisample_filter_hint GL_NV_occlusion_query GL_NV_packed_depth_stencil GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_texgen_reflection GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_expand_normal GL_NV_texture_rectangle GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_NVX_conditional_render GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum GL_WIN_swap_hint WGL_EXT_swap_control
[searchPaths.dumpAll]: ---> OXP search paths:
(Resources, ../AddOns, ../AddOns/Commies.oxp)
[dataCache.rebuild.explicitFlush]: Cache explicitly flushed with shift key. Rebuilding from scratch.
[shipData.load.begin]: Loading ship data...
[script.load.world.listAll]: Loaded 6 world scripts: "communist_population" 2.09, "oolite-cloaking-device" 1.73.4, "oolite-constrictor-hunt" 1.73.4, "oolite-nova" 1.73.4, "oolite-thargoid-plans" 1.73.4, "oolite-trumbles" 1.73.4
[dataCache.willWrite]: About to write data cache.
[dataCache.write.success]: Wrote data cache.
[script.load.world.listAll]: Loaded 6 world scripts: "communist_population" 2.09, "oolite-cloaking-device" 1.73.4, "oolite-constrictor-hunt" 1.73.4, "oolite-nova" 1.73.4, "oolite-thargoid-plans" 1.73.4, "oolite-trumbles" 1.73.4
[gameController.exitApp]: .GNUstepDefaults synchronized.

Closing log at 2010-05-08 22:57:06 +0100.
User avatar
Cody
Sharp Shooter Spam Assassin
Sharp Shooter Spam Assassin
Posts: 16079
Joined: Sat Jul 04, 2009 9:31 pm
Location: The Lizard's Claw
Contact:

Post by Cody »

I know zilch about Nvidia GPUs, being an ATI Radeon user (sigh), and I have a question:
Is the thread optimizer mentioned by Svengali, the equivalent of ATI’s Catalyst AI optimizer?
(If ATI have an equivalent, that is).
I would advise stilts for the quagmires, and camels for the snowy hills
And any survivors, their debts I will certainly pay. There's always a way!
User avatar
Svengali
Commander
Commander
Posts: 2370
Joined: Sat Oct 20, 2007 2:52 pm

Post by Svengali »

Phoenix4 wrote:
So I'm guessing the overall problem is the threading issue? Can this be resolved or should I now play Oolite with Optimisation switched off each time, although I assume that will have performance issues?
It's not up to me to answer this for the dev-team, but for the time being you can define a profile for Oolite in the control panel.
Eric Walch wrote:
Maybe the main problem with that station is than complexity.
I can imagine that the problem is that the model declares multiple textures in it's dat file (reported in r3171). Will test it.
El Viejo wrote:
Is the thread optimizer mentioned by Svengali, the equivalent of ATI’s Catalyst AI optimizer?
Both are there to activate multicore support combined with filtering techniques, so maybe the answer is a little yes .-)

Edit: Yupp. It's the multiple textures.
User avatar
Cody
Sharp Shooter Spam Assassin
Sharp Shooter Spam Assassin
Posts: 16079
Joined: Sat Jul 04, 2009 9:31 pm
Location: The Lizard's Claw
Contact:

Post by Cody »

Svengali wrote:
El Viejo wrote:
Is the thread optimizer mentioned by Svengali, the equivalent of ATI’s Catalyst AI optimizer?
Both are there to activate multicore support combined with filtering techniques, so maybe the answer is a little yes
Ah… interesting, thank you. Since soon after I discovered Oolite (1.65) last summer, I’ve had the Catalyst AI disabled in my Oolite profile. The game runs smoother without it… there were some ‘stutter’ problems when it was enabled. I don’t use any of Oolite’s application settings on the GPU options… I set them all myself, and seem to get better performance.
I would advise stilts for the quagmires, and camels for the snowy hills
And any survivors, their debts I will certainly pay. There's always a way!
User avatar
Diziet Sma
---- E L I T E ----
---- E L I T E ----
Posts: 6311
Joined: Mon Apr 06, 2009 12:20 pm
Location: Aboard the Pitviper S.E. "Blackwidow"

Post by Diziet Sma »

Phoenix4 wrote:

@ Diziet, I'll follow your step-by-step again and see what I get.
Just out of curiosity, how did it go this time?
Most games have some sort of paddling-pool-and-water-wings beginning to ease you in: Oolite takes the rather more Darwinian approach of heaving you straight into the ocean, often with a brick or two in your pockets for luck. ~ Disembodied
Post Reply