Jump to content
3DCoat Forums

3DCoat 2024 development thread


Recommended Posts

  • Contributor

I don't know what you're trying to share with me as I've been working with subdivision approach for years, just haven't tried tessellation aproach until now.  There are two points of interest I am bringing to attention.

1. is the model is physically smoothed when it doesn't need to be, I've done this in Zbrush for example : this is subdivision with no physical smoothing although at this point I only applied a color map and used the sculpt brush... it KEEPS  the sharp corners rather than rounding them as I've explained above with the image.

image.thumb.png.adb80277902d303ac1a25399b559f4dc.png

 

2. my other point or question that I'm asking if it might be a bug is that, Andrew made it sound in the past that painting displacement detail is now possible using tessellation. I've had no problem painting with tessellation in Unity using Voxeland for example, getting high quality because the higher tessellation levels give you the pixels to displace. It is understandable with distanced based tessellation in theory you'd have to paint close range to get the resolution to paint the details but it's likely that the resolution doesn't need to be rendered on screen but instead is pre calculated as if there is high resolution during painting.

 

I know the workflow how to paint with displacement in PPP, it's just that it seems painting with tessellation is still no possible to get the details. Try testing with a Photogrammetry based material with tessellation and you will see what I mean.

image.thumb.png.1038d2118cfb9e4c620e7e456244d7e8.png

 

Anyway, back to the rounded corners, so if  it's set to no smoothing, and it physically smoothes the model anyway, would you say this is a bug?

Also @Carlosan does ptex mode already use real-time subdivisions using Pixar's Opensubdiv? 

Edited by Ascensi
Link to comment
Share on other sites

I only sharing the result I get with tessellation, sorry if I was not clear.

Yes, it physically smooth edges. Is how it works.

Tessellation is only visual and have drawbacks.

Ptex is not using realtime subdivisions: you set subdivision at import.

image.png

And can modify Tessellation  appearance

image.png

Please drop a mail to Andrew to ask for feature request, if you have any.

Link to comment
Share on other sites

  • Advanced Member

Hi,

first, thank you for the new version, 2023.35, and the new Live Boolean menu and ghost mode feature, very nice.

Second, I need your attention on this.

  1. Create an object in Voxel room
  2. Vox hide here and there. Everything works as usual: Geometry > Separate hidden volumes or showing again voxels with the tool
  3. Press Sculpt Tree > Grid for increasing resolution. Hidden volumes appear.
  4. CTRL + Z
  5. We go back at point n.2, but hidden volumes are not accessible, or you cannot unhide hidden voxels, you have to hide first the voxels with a big area containing the hidden voxels of point n.2 and from that you will be able to unhide the voxels again. In other words, you cannot work anymore from what you made at point n.2, you have to restart again.

Would it be possible to fix that?

Or there's a popup message appearing that warns about increasing the volume will reset the voxels visibility and it's an irreversible action?

Or better, would it be possible to increase the voxel density, but still having the voxels/volume hidden at point n. 2?
Thanks a lot.

A video showing my situation is here:

 

Edited by thinkinmonkey
  • Sad 1
Link to comment
Share on other sites

  • Contributor
Carlosan
This post was recognized by Carlosan!

Ctc_nick was awarded the badge 'Great Content' and 1 points.

Hello everybody!

Edit: I have to point out, this is a question as well!!:unknw:  I cant find a way to activate a Textfield in my Script:

The Script should do like a LMB click into the Textfield. It works with all inbuild Commands, but unfortunately not with my Script.

Could somebody please help: 

>>>UI: Found nothing by query `*$StringField::val[0]`. How can i register that Field so UI does find it?

I have created a Window with 2 String inputs. 

string Datafield1_ID = "string1";
string Datafield2_ID = "string2";

void main() {
   
    // prepare scene
    SculptRoom room;
     
    // settings window
    AddTranslation( "ID", "Text" );
    AddStringInput( "Datafield1_ID", true);
    AddStringInput( "Datafield2_ID", true);
    bool ok = ModalDialogOkCancel( "Put some Text here", "Window" );

Now I would like to activate the input Field like this:

activ.thumb.png.3aa27fda9dd14bea6179e0790b38de5f.png

UI ui;
ui("*$StringField::val[0]"); // the asterisk does NOT work here //the asterisk does work for inbuild tools!! See example Download. 

The Error sais: "UI: Found nothing by query `*$StringField::val[0]`." How can i register that Field so UI does find it?

For the inbuilt Tools it is working:

ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$px[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$py[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$pz[206]" )( "*Apply" );

Field PX, PY, PZ are activated one after another. For experimenting I include a working Script. But the question stays: How can I archive this in my Script I posted at the top?

Thank You.

All the Best!

 

 

typein_Sphere.as

Edited by Ctc_nick
  • Thanks 1
Link to comment
Share on other sites

  • Advanced Member

Suggest adding slower movement

In the software Cascadeur, when I want to perform more detailed actions, holding down ctrl can move more slowly, about one-third of the speed of a mouse action, which can greatly increase accuracy,
When we use the move brush, such as holding down ctrl, it can move very slowly and accurately. I think it is a great feature and it is very easy to implement

 

Link to comment
Share on other sites

On 11/17/2023 at 12:21 PM, Ctc_nick said:

Hello everybody!

Edit: I have to point out, this is a question as well!!:unknw:  I cant find a way to activate a Textfield in my Script:

The Script should do like a LMB click into the Textfield. It works with all inbuild Commands, but unfortunately not with my Script.

Could somebody please help: 

>>>UI: Found nothing by query `*$StringField::val[0]`. How can i register that Field so UI does find it?

I have created a Window with 2 String inputs. 

string Datafield1_ID = "string1";
string Datafield2_ID = "string2";

void main() {
   
    // prepare scene
    SculptRoom room;
     
    // settings window
    AddTranslation( "ID", "Text" );
    AddStringInput( "Datafield1_ID", true);
    AddStringInput( "Datafield2_ID", true);
    bool ok = ModalDialogOkCancel( "Put some Text here", "Window" );

Now I would like to activate the input Field like this:

activ.thumb.png.3aa27fda9dd14bea6179e0790b38de5f.png

UI ui;
ui("*$StringField::val[0]"); // the asterisk does NOT work here //the asterisk does work for inbuild tools!! See example Download. 

The Error sais: "UI: Found nothing by query `*$StringField::val[0]`." How can i register that Field so UI does find it?

For the inbuilt Tools it is working:

ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$px[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$py[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$pz[206]" )( "*Apply" );

Field PX, PY, PZ are activated one after another. For experimenting I include a working Script. But the question stays: How can I archive this in my Script I posted at the top?

Thank You.

All the Best!

 

 

typein_Sphere.as 718 B · 1 download

I recommend using Python API or Core API, it is constantly developed and cleaned up, Angelscript is deprecated. 

But I don't understand exactly what you need. You want to sat value for the input box of your custom dialog? 

Look the "Dialog" example in the Python API.

  • Like 1
Link to comment
Share on other sites

  • Contributor
2 hours ago, Andrew Shpagin said:

I recommend using Python API or Core API, it is constantly developed and cleaned up, Angelscript is deprecated. 

But I don't understand exactly what you need. You want to sat value for the input box of your custom dialog? 

Look the "Dialog" example in the Python API.

HI. I just need to highlight/activate the Textfield (like doing automated mouseclick into the field by the script), so that i can directly start typing by keyboard. It is working for the Primitives Tool and others by: ui(*$SpherePrim::%$pz[206])<look at the asterisk; But this is not working for my Modal Dialog >UI: Found nothing by query `*$StringField::val[0]`

Ive already tried Python Dialogs.py and a lot of other ways but with angelscript I had the most success.

Why am I doing this?

Im building a Remote Interface for all Hotmenues (programmed with platform.io, also Ukrainian btw). It works by just sending keyboard commands, no magic. But now im running out of keys assignments in 3Dcoat. So the plan is to directly send the command via text to coat instead of the assigned hotkey. I think the professionals do it over ports and direct communication, but I dont have that knowledge. Its more like a technical Art :fool::rofl:..  The console Script is already working, ill post that script under Scripts. 

Do you know how I can activate that field by script for keyboard input? It would also work with Python Modules like "input" or "tkinter". 

Thank you for your patience.

All the Best 

Edited by Ctc_nick
Link to comment
Share on other sites

  • Advanced Member
Hello!

A pretty common workflow in ZBrush is once you're done with your dynamic topo sculpt, you clone your mesh. Then you Remesh the clone to a low level with even toplogy.
 
So far, this is possible in 3D Coat.

Now in ZBrush you subdivide your low Mesh once, and then, re-project it back again to the high poly source, keeping exactly its shape. And subsequently, you do this for every next Subdiv step up, until you're round about the same or at least a sufficient polycount to hold the original dynamesh/Scultpris Sculpt details, only now on an even topoed Sculpt with several subdiv levels.

Same worklow can be done in Blenderr, using Subdiv or Multi Res and Shrinkwrap modifier.
 
3D Coat now has Multi Res, and it has an awesome Re-Project tool, too. So I tried to re-create this with the Multi Res Mode, expecting this would be no problem. But it seems we don't have the Re-Project tool available when using Multi-Res. Is this an oversight? This really suprises me.

It would be much and urgently needed imo.

image.thumb.png.b2491ca88b327640b1aa81a3d509b6d8.png
  • Like 3
Link to comment
Share on other sites

10 hours ago, Henry Townshend said:
Hello!

A pretty common workflow in ZBrush is once you're done with your dynamic topo sculpt, you clone your mesh. Then you Remesh the clone to a low level with even toplogy.
 
So far, this is possible in 3D Coat.

Now in ZBrush you subdivide your low Mesh once, and then, re-project it back again to the high poly source, keeping exactly its shape. And subsequently, you do this for every next Subdiv step up, until you're round about the same or at least a sufficient polycount to hold the original dynamesh/Scultpris Sculpt details, only now on an even topoed Sculpt with several subdiv levels.

Same worklow can be done in Blenderr, using Subdiv or Multi Res and Shrinkwrap modifier.
 
3D Coat now has Multi Res, and it has an awesome Re-Project tool, too. So I tried to re-create this with the Multi Res Mode, expecting this would be no problem. But it seems we don't have the Re-Project tool available when using Multi-Res. Is this an oversight? This really suprises me.

It would be much and urgently needed imo.

image.thumb.png.b2491ca88b327640b1aa81a3d509b6d8.png

I will add it there.

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

  • Member
14 hours ago, Carlosan said:

was fixed on version 35, isnt it ?

3DCoat-2023-35 
Wed Nov 15 21:17:56 2023 +0200

- Fixed problem when it was impossible to assign hotkey to the RMB->Change parent->Root

looks like not fixed, the shortcut is viewed but does not work at all

Link to comment
Share on other sites

  • Advanced Member
1 hour ago, Andrew Shpagin said:

I will add it there.

Thanks a loooot !!!! If we could also get the "Super Relax" CTRL+SHIFT Smooth Mode in as well in Multi-Res, as was talked about, it would round things well up.

Seriously, thank you for being so open for feedback and the hard work put into this wonderful tool.

  • Like 3
Link to comment
Share on other sites

  • Member
On 11/20/2023 at 8:55 PM, Carlosan said:

was fixed on version 35, isnt it ?

3DCoat-2023-35 
Wed Nov 15 21:17:56 2023 +0200

- Fixed problem when it was impossible to assign hotkey to the RMB->Change parent->Root

ok it works with shortcuts like F6 function  keys but not with somtething like image.png.2be04225b37b59b5bd77f54c93f33a61.png 

  • Thanks 1
Link to comment
Share on other sites

On 11/17/2023 at 12:21 PM, Ctc_nick said:

Hello everybody!

Edit: I have to point out, this is a question as well!!:unknw:  I cant find a way to activate a Textfield in my Script:

The Script should do like a LMB click into the Textfield. It works with all inbuild Commands, but unfortunately not with my Script.

Could somebody please help: 

>>>UI: Found nothing by query `*$StringField::val[0]`. How can i register that Field so UI does find it?

I have created a Window with 2 String inputs. 

string Datafield1_ID = "string1";
string Datafield2_ID = "string2";

void main() {
   
    // prepare scene
    SculptRoom room;
     
    // settings window
    AddTranslation( "ID", "Text" );
    AddStringInput( "Datafield1_ID", true);
    AddStringInput( "Datafield2_ID", true);
    bool ok = ModalDialogOkCancel( "Put some Text here", "Window" );

Now I would like to activate the input Field like this:

activ.thumb.png.3aa27fda9dd14bea6179e0790b38de5f.png

UI ui;
ui("*$StringField::val[0]"); // the asterisk does NOT work here //the asterisk does work for inbuild tools!! See example Download. 

The Error sais: "UI: Found nothing by query `*$StringField::val[0]`." How can i register that Field so UI does find it?

For the inbuilt Tools it is working:

ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$px[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$py[206]" );
ui( "Primitives" )( "Create sphere" )( "*$SpherePrim::%$pz[206]" )( "*Apply" );

Field PX, PY, PZ are activated one after another. For experimenting I include a working Script. But the question stays: How can I archive this in my Script I posted at the top?

Thank You.

All the Best!

 

 

typein_Sphere.as 718 B · 2 downloads

This is (I hope) is what you need:
 

# This example demonstrates the power of the dialogs and UI. It describes how to register the elements into the UI.
import coat
# let's define the class. Then we create the ui function that exposes the ui elements list
	
class MyClass :
	def __init__(self) :
		self.Integer = 0
		self.stage = 0

	def process(self) :
		self.stage += 1
		# we use comparison to 5 to give some time to dialog to appear and to avoid constant clicking
		if self.stage == 5 :
			coat.ui.cmd("$BaseClass::Integer")
				

	# this section used for the class serialization and visual presentation in the UI
	def ui(self) :
		# since ui called constantly, we may do some actions there, for example click over controls
		self.process()
		# there you define the list of variables and functions to show in the dialog.
		# This list is dynamic, this function is constantly called, any changes in list
		# will be exposed immediately
		return [
			"Integer" # we write there the name of variable we want to expose to the UI 
		]
	
p = MyClass()
# show the dialog		
coat.dialog().ok().cancel().params(p).caption("Hello!").show(); 

There is sort of workaround, in 38 there will be more logical solution, you will be able to pass process callback into the dialog.

  • Thanks 2
Link to comment
Share on other sites

  • Advanced Member

@Andrew Shpagin Hey, there are some issues with custom brush presets and that's not the first time when it happens... I've created bunch of presets with "Rotate Alpha Along Brush Stroke" and rotation set to 90, unfortunately every time I restart 3DC or use different tool and then come back to my presets, rotation goes back to 0. Funny thing is, if I set rotation again to 90, all other custom presets have rotation set to 90...

Also, can you guys finally fix that damn flat shading view in Render Room? X - how it looks, V - how it should look.

FLAT_SHADING_WRONG.png

FLAT_SHADING_CORRECT.png

  • Thanks 1
Link to comment
Share on other sites

  • Contributor
On 11/24/2023 at 2:49 PM, Andrew Shpagin said:

This is (I hope) is what you need:
 

# This example demonstrates the power of the dialogs and UI. It describes how to register the elements into the UI.
import coat
# let's define the class. Then we create the ui function that exposes the ui elements list
	
class MyClass :
	def __init__(self) :
		self.Integer = 0
		self.stage = 0

	def process(self) :
		self.stage += 1
		# we use comparison to 5 to give some time to dialog to appear and to avoid constant clicking
		if self.stage == 5 :
			coat.ui.cmd("$BaseClass::Integer")
				

	# this section used for the class serialization and visual presentation in the UI
	def ui(self) :
		# since ui called constantly, we may do some actions there, for example click over controls
		self.process()
		# there you define the list of variables and functions to show in the dialog.
		# This list is dynamic, this function is constantly called, any changes in list
		# will be exposed immediately
		return [
			"Integer" # we write there the name of variable we want to expose to the UI 
		]
	
p = MyClass()
# show the dialog		
coat.dialog().ok().cancel().params(p).caption("Hello!").show(); 

There is sort of workaround, in 38 there will be more logical solution, you will be able to pass process callback into the dialog.

Hi! @Andrew Shpagin 

Thats so nice of you!:good: I'll try that in a minute.  Meanwhile I have made a CPP Extension registered as Tool, and then it has an ID which I could "Click" by script.

Today I found out Coat39 is not able to compile CPP CoreAPI Scripts anymore, because "pybind11.h" is included into "coreAPI.h" but the files are missing.

#include <pybind11/pybind11.h>

  • Thanks 2
Link to comment
Share on other sites

1 hour ago, Ctc_nick said:

Hi! @Andrew Shpagin 

Thats so nice of you!:good: I'll try that in a minute.  Meanwhile I have made a CPP Extension registered as Tool, and then it has an ID which I could "Click" by script.

Today I found out Coat39 is not able to compile CPP CoreAPI Scripts anymore, because "pybind11.h" is included into "coreAPI.h" but the files are missing.

#include <pybind11/pybind11.h>

Thanks! I will do 40 today to fix it.

  • Thanks 1
Link to comment
Share on other sites

  • Contributor
On 11/24/2023 at 2:49 PM, Andrew Shpagin said:

This is (I hope) is what you need:
 

# This example demonstrates the power of the dialogs and UI. It describes how to register the elements into the UI.
import coat
# let's define the class. Then we create the ui function that exposes the ui elements list
	
class MyClass :
	def __init__(self) :
		self.Integer = 0
		self.stage = 0

	def process(self) :
		self.stage += 1
		# we use comparison to 5 to give some time to dialog to appear and to avoid constant clicking
		if self.stage == 5 :
			coat.ui.cmd("$BaseClass::Integer")
				

	# this section used for the class serialization and visual presentation in the UI
	def ui(self) :
		# since ui called constantly, we may do some actions there, for example click over controls
		self.process()
		# there you define the list of variables and functions to show in the dialog.
		# This list is dynamic, this function is constantly called, any changes in list
		# will be exposed immediately
		return [
			"Integer" # we write there the name of variable we want to expose to the UI 
		]
	
p = MyClass()
# show the dialog		
coat.dialog().ok().cancel().params(p).caption("Hello!").show(); 

There is sort of workaround, in 38 there will be more logical solution, you will be able to pass process callback into the dialog.

This is exactly what I meant!  I translated the code to cpp, also working, but the "stage" variable is not counting up. How does it work here? 

#include <CoreAPI.h>

using namespace coat;

class MyClass : public VoxelExtension {
public:
    MyClass() : Integer(0), stage(0), String("text") {}

    int Integer;
    int stage;
    coat::str String;

    // This function is called to update the stage
    void updateStage() {
        // UI updates
        process();
    }

    void process() {
        stage += 1;

        if (stage == 5) {
            coat::ui::cmd("$MyClass::Integer");
        }
    }

    const char* ui() {
        updateStage(); // Call the update function within the UI cycle
        return "Integer";
    }

    SERIALIZE() {
        // NOHASH means that if you change values it does not influence the UI structure in dialog, so it will not be re-made if you change values
        // If you don't understand, just skip this notice, it is not so important)
        // But if you remove NOHASH dialog may flicker a bit when you change values
        NOHASH{

            // the text string
            REG_AUTO(Integer);
            REG_AUTO(stage);
            REG_AUTO(String);
            FUNCTION_CALL(ui);
        }
    }
};

EXPORT

int main() {
    // Create an instance of MyClass
    MyClass p;
    p.ui();
    // Trigger the coat::ui::cmd("$BaseClass::Integer") when the condition is met
    coat::dialog().ok().cancel().params(&p).text("").caption("Hello!")
        .onPress( // there we set the lambda that will be called when the user will press the Ok button
            [&](int button) {
                if (button == 1) { // Ok pressed
                    ui::cmd("$MyClass::Integer");
                }
            }).show();   
    return 0;
}

EXPORT_EXTENSION(MyClass) {
    // create the Console object
    MyClass* tog = new MyClass;
    // register the tool in the toolset
    VoxelExtension::Register(tog);
    ui::toRoom("Sculpt");
    // no idea
    coat::ui::cmd(str("[extension]") + tog->GetID());
    coat::ui::insertInToolset("Voxels", "Commands", "MyClass", "");
    // activate the tool(not needed)
    // clc->Activate();
}

Greetings!
 

Link to comment
Share on other sites

  • Advanced Member
On 11/20/2023 at 8:51 PM, Henry Townshend said:
Hello!

A pretty common workflow in ZBrush is once you're done with your dynamic topo sculpt, you clone your mesh. Then you Remesh the clone to a low level with even toplogy.
 
So far, this is possible in 3D Coat.

Now in ZBrush you subdivide your low Mesh once, and then, re-project it back again to the high poly source, keeping exactly its shape. And subsequently, you do this for every next Subdiv step up, until you're round about the same or at least a sufficient polycount to hold the original dynamesh/Scultpris Sculpt details, only now on an even topoed Sculpt with several subdiv levels.

Same worklow can be done in Blenderr, using Subdiv or Multi Res and Shrinkwrap modifier.
 
3D Coat now has Multi Res, and it has an awesome Re-Project tool, too. So I tried to re-create this with the Multi Res Mode, expecting this would be no problem. But it seems we don't have the Re-Project tool available when using Multi-Res. Is this an oversight? This really suprises me.

It would be much and urgently needed imo.

image.thumb.png.b2491ca88b327640b1aa81a3d509b6d8.png

its because 3dc changes any topology into tris and you lose your good topology flow , they have said surface mode will be quads ,so hopefully sometime soon .. nothing worst than finding a good topology to add detail and then the software destroys it ... literally my only use zbrush is this .

  • Like 1
Link to comment
Share on other sites

11 hours ago, Ctc_nick said:

This is exactly what I meant!  I translated the code to cpp, also working, but the "stage" variable is not counting up. How does it work here? 

#include <CoreAPI.h>

using namespace coat;

class MyClass : public VoxelExtension {
public:
    MyClass() : Integer(0), stage(0), String("text") {}

    int Integer;
    int stage;
    coat::str String;

    // This function is called to update the stage
    void updateStage() {
        // UI updates
        process();
    }

    void process() {
        stage += 1;

        if (stage == 5) {
            coat::ui::cmd("$MyClass::Integer");
        }
    }

    const char* ui() {
        updateStage(); // Call the update function within the UI cycle
        return "Integer";
    }

    SERIALIZE() {
        // NOHASH means that if you change values it does not influence the UI structure in dialog, so it will not be re-made if you change values
        // If you don't understand, just skip this notice, it is not so important)
        // But if you remove NOHASH dialog may flicker a bit when you change values
        NOHASH{

            // the text string
            REG_AUTO(Integer);
            REG_AUTO(stage);
            REG_AUTO(String);
            FUNCTION_CALL(ui);
        }
    }
};

EXPORT

int main() {
    // Create an instance of MyClass
    MyClass p;
    p.ui();
    // Trigger the coat::ui::cmd("$BaseClass::Integer") when the condition is met
    coat::dialog().ok().cancel().params(&p).text("").caption("Hello!")
        .onPress( // there we set the lambda that will be called when the user will press the Ok button
            [&](int button) {
                if (button == 1) { // Ok pressed
                    ui::cmd("$MyClass::Integer");
                }
            }).show();   
    return 0;
}

EXPORT_EXTENSION(MyClass) {
    // create the Console object
    MyClass* tog = new MyClass;
    // register the tool in the toolset
    VoxelExtension::Register(tog);
    ui::toRoom("Sculpt");
    // no idea
    coat::ui::cmd(str("[extension]") + tog->GetID());
    coat::ui::insertInToolset("Voxels", "Commands", "MyClass", "");
    // activate the tool(not needed)
    // clc->Activate();
}

Greetings!
 

The process() works only for python. In c++ use 

virtual bool ProcessInEditor(BaseClass* Parent) {
	stage += 1;
    if (stage == 5) {
        coat::ui::cmd("$MyClass::Integer");
    }
    return true;
}

 

  • Thanks 1
Link to comment
Share on other sites

  • Member

2023.40 . import   eps curve   do not  keep the orign size  .the scale is wrong 

in illustror  the rectange size is  100 mm.  but export to eps and  3dc  import the eps cuve .the size became 284 .why it happen ?

basic it would keep the scale .

image.png?ex=657bbec6&is=656949c6&hm=bffimage.png?ex=657bbeb3&is=656949b3&hm=558

Edited by Sandu
  • Thanks 1
Link to comment
Share on other sites

  • Member
35 minutes ago, Carlosan said:

I tested both version Blender 3.6.6 and 4.0.2 and work as expected.

Is the Blender exchange folder correct ?

 

Yes, blender 3.x can be used before the upgrade, but it cannot be used properly after the blender 4.0 upgrade. There is no problem with the file setting path. After 3DC upgraded applink, blender did not respond to 3DC when transmitting data. No solution found yet.

Link to comment
Share on other sites

  • Carlosan changed the title to 3DCoat 2024 suggestions
  • Carlosan pinned and unpinned this topic
  • Carlosan pinned this topic

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...