Blender: Difference between revisions

Smudgebun (talk | contribs)
HIP: Moved some non-Blender-specific information to AMD GPU, linked to there for more
Smudgebun (talk | contribs)
m UI is dim on Vulkan backend and KDE Plasma: Updated known affected versions
 
(6 intermediate revisions by the same user not shown)
Line 11: Line 11:


If you want to install Blender with support for compute APIs, see: [[#Advanced Installation]]
If you want to install Blender with support for compute APIs, see: [[#Advanced Installation]]
== Configuration ==
=== Installing With Additional Python Packages ===
To install additional Python modules into Blender, use the <code>withPackages</code> attribute.
Example using a normal Blender package:
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
  (blender.withPackages(ps: [ ps.pyserial ps.fs ])
];
</syntaxhighlight>
Examples using abnormal Blender Packages:
<syntaxhighlight lang="nix">
let
  blender-cuda = blender.override {config.cudaSupport=true;};
in {
  environment.systemPackages = with pkgs; [
    (blender-cuda.withPackages(ps: [ ps.yq ])
#  (pkgsRocm.blender.withPackages(ps: [ ps.pyserial ps.fs ])
  ];
}
</syntaxhighlight>
In these functions, <code>ps</code> is an alias for <code>python313Packages</code>.
Installing with additional packages will result in a binary named <code>blender-wrapped</code> as it adds the python modules by wrapping Blender in a custom Python environment. When using a binary or unofficial Blender nix package, support for this feature will vary depending on if and how the packager implemented it.
A workaround if using a package that doesn't support <code>withPackages</code> is to install the python packages globally.
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
  python313Packages.yq
  python313Packages.pyserial
];
</syntaxhighlight>
Or if it fits your use case better, you can install them in a nix-shell and run Blender from within that shell.
{{file|shell.nix|nix|
<nowiki>
let
  nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-25.11";
  pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShellNoCC {
  packages = with pkgs; [
    python313Packages.yq
    python313Packages.fs
#    Optionally you can declare the Blender package you want to use in the shell, so you can run the shell in --pure.
#    Can be useful if you're trying to make a reproducible development shell or similar.
    pkgsRocm.blender
  ];
}
</nowiki>
}}


== Tips & Tricks ==
== Tips & Tricks ==
Line 76: Line 136:


==== The cudaSupport Flag ====
==== The cudaSupport Flag ====
Whether a compatible package is built with CUDA support is managed by the <code>cudaSupport</code> flag enabled. This can either be done with a global flag
Whether a compatible package is built with CUDA support is managed by the <code>cudaSupport</code> flag enabled.
 
<syntaxhighlight lang="nix"> nixpkgs.config.cudaSupport = true; </syntaxhighlight>


Or by overriding specifically the Blender package.
The following example shows how to override specifically the Blender package for CUDA support, for general information on the topic see: [[CUDA#Enabling CUDA In Packages|Enabling CUDA In Packages]].


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
environment.systemPackages = with pkgs; [
   (blender.override {config.cudaSupport=true;})
   (blender.override {config.cudaSupport=true;})
# (pkgsRocm.blender.override {config.cudaSupport=true;}) # to compile blender with both HIP and CUDA/OptiX support
 
/* (blender.override {
    config.cudaSupport=true;
    config.rocmSupport=true;}) # to compile blender with both HIP and CUDA/OptiX support */
];
];
</syntaxhighlight>
</syntaxhighlight>


It's important to note that any package installed with the <code>cudaSupport</code> flag enabled that is CUDA-compatible will be compiled from source, as Hydra does not build (and therefore cache.nixos.org does not cache) with CUDA support enabled. With larger programs like Blender this can be very resource-intensive, so it is recommended to limit the number of cores or jobs that the process will take with the <code>--max-jobs</code> / <code>-j</code> and <code>--cores</code> flags when calling for example <code>nix-shell</code> or <code>nixos-rebuild</code>. This is also why it is recommended to only enable <code>cudaSupport</code> for the programs you need it for.
If installing Blender with <code>cudaSupport</code>, it is highly recommended you set up the [[CUDA#Setting up CUDA Binary Cache|CUDA Binary Cache]]. If you do not have it set up, and install Blender with <code>cudaSupport</code>, your machine will be compiling Blender from source.  
 
Compiling Blender is very resource-intensive, so if you are unable to use the CUDA Cache, please see the associated warning and information in [[CUDA#Enabling CUDA In Packages]].


==== Community Flakes ====
==== Community Flakes ====
Line 101: Line 164:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
environment.systemPackages = with pkgs; [
   pkgsRocm.blender
   pkgsRocm.blender
# (blender.override {config.rocmSupport=true;}) # (equivalent to `pkgsRocm.blender`)
 
# (pkgsRocm.blender.override {config.cudaSupport=true;}) # to compile blender with both HIP and CUDA/OptiX support
/* (blender.override {
    config.rocmSupport=true;
    config.cudaSupport=false;}) # (equivalent to `pkgsRocm.blender`) */
 
/* (blender.override {
    config.cudaSupport=true;
    config.rocmSupport=true;}) # to compile blender with both HIP and CUDA/OptiX support */
];
];
</syntaxhighlight>
</syntaxhighlight>


=== oneAPI ===
=== oneAPI ===
Currently, Nixpkgs has extremely limited oneAPI support, (see: {{issue|367722|oneAPI Tracking}}), which is explicitly blocking oneAPI integration into the Blender package (see: {{issue|447245|Blender oneAPI Support}}). As such, the current only way to have oneAPI support on NixOS is through one of the [[#Binary Packages|#Binary Packages]]
Currently, Nixpkgs has extremely limited oneAPI support (see: {{issue|367722|<nowiki>[Tracking] OneAPI Packages</nowiki>}}), which is explicitly blocking {{issue|447245|Blender oneAPI Support}}. As such, the current only way to have oneAPI support on NixOS is through one of the [[#Binary Packages|#Binary Packages]].


=== Last Resorts ===
=== Last Resorts ===
Line 117: Line 187:
=== UI is dim on Vulkan backend and KDE Plasma ===
=== UI is dim on Vulkan backend and KDE Plasma ===


This is a cross-distro issue on current KDE Plasma (Wayland Session, KDE Version 6.6.3) and NVIDIA drivers (Versions 595.XX). A workaround option that doesn't require downgrading is to force XWayland by running Blender with the following command. See more information at the related {{issue|link=https://projects.blender.org/blender/blender/issues/155467||issue}} on Blender's repo.
This is a cross-distro issue on current KDE Plasma with NVIDIA, (confirmed issue on KDE Version 6.6.2-6.6.4 Wayland Session with NVIDIA drivers Versions 595.XX, though may affect others too). A workaround option that doesn't require downgrading is to force XWayland by running Blender with the following command. See more information at the related {{issue|link=https://projects.blender.org/blender/blender/issues/155467||issue}} on Blender's repo.
<syntaxhighlight lang="sh">
<syntaxhighlight lang="sh">
WAYLAND_DISPLAY=0 blender
WAYLAND_DISPLAY=0 blender
</syntaxhighlight>
</syntaxhighlight>


== References ==
== References ==
<references />
<references />